Conversation
… evidence search - Added POST /api/compact to create a Logic Model from chat history, including intent extraction and IPFS upload. - Introduced POST /api/evidence/search for searching the evidence repository using natural language queries, leveraging a new conversation bot agent. - Created shared utility functions for IPFS uploads and API authentication. - Defined request and response schemas for both new endpoints to ensure data validation and consistency.
- Clarified that AGENTS.md is a symlink to CLAUDE.md, emphasizing the importance of editing only CLAUDE.md to maintain synchronization between the two files.
- Enhanced error handling in the compact, evidence search, and IPFS upload routes to provide more specific error messages and structured logging. - Updated API key validation to use timing-safe comparison to prevent timing attacks. - Introduced a maximum chat history length for compact requests to ensure data integrity.
Chore/unify-agent-md
- Upgraded @mastra/core to version 1.4.0 and @mastra/rag to version 2.1.0 in bun.lock and package.json. - Updated mastra agent configurations by adding unique IDs for evidence-search-agent and logic-model-agent. - Refactored workflow execution in runWorkflow.ts to use createRun instead of createRunAsync. - Adjusted input handling in get-all-evidence-tool and logic-model-tool to improve clarity and consistency.
…ntation - Removed automatic setting of PROJECT_ROOT in package.json scripts and server actions. - Updated documentation to reflect changes in environment variable handling for Mastra workflows. - Cleaned up references to PROJECT_ROOT in various files to improve clarity and maintainability.
…nd evidence workflow documentation - Simplified the repository cloning instructions by removing submodule references. - Updated file location references to reflect the new structure and added links to relevant documentation.
Add Mastra skill system with logic model generation skill and skill loader. Fix SKILL.md frontmatter to comply with Agent Skills specification, correct text corruption, and add exact enum values for connection types to prevent tool call validation errors. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ction - Changed the base path in the Workspace configuration to a relative path for improved flexibility. - Deleted the load-skill.ts file as it was no longer needed, simplifying the codebase. - Updated the logic model tool description to be more concise while retaining essential information. - Refactored the logic model generation workflow to enhance error handling and logging for better debugging.
Replace loadSkillInstructions() helper with Mastra's Workspace Skills API pattern where agents dynamically activate skills via skill-activate tool. Slim down SKILL.md and extract detailed content into references/ directory. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
feat: chatbot
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Add format-requirements.md and common-mistakes.md reference files that were listed in docs/mastra-agents.md but not yet created. These provide the format validation rules (field types, character limits, enum values) that were removed from the inline agent instructions during the skills refactor. Also fix duplicate line in docs and add references to SKILL.md Step 5 so agents read format requirements before calling logicModelTool. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Feat/mastra skills
- Create evidence-matching skill with chain-of-thought evaluation framework, scoring calibration examples, common mistakes, and verification checklist - Create evidence-presentation skill with Maryland SMS scale, response format template, and interaction guidelines - Slim down evidence-search-agent instructions (151 → 30 lines) - Slim down conversation-bot-agent instructions (80 → 20 lines) - Increase EVIDENCE_SEARCH_MAX_STEPS to 5 for skill activation steps - Add explicit maxSteps to evidence-search-batch agent.generate()
Upgrade/mastra v1
🔄 Release PR UpdatedNew changes have been pushed to 🤖 Updated by GitHub Actions |
PR Review: Release 2026-02-25This release bundles three significant changes: (1) new Security[Medium] Length check negates timing-safe comparison — if (apiKey.length !== expectedKey.length) return false; // leaks key length
try {
return timingSafeEqual(Buffer.from(apiKey, "utf8"), Buffer.from(expectedKey, "utf8"));
}Early-returning on a length mismatch leaks the expected key's byte length via a timing side-channel. An attacker can enumerate the key length with binary search. const keyBuf = Buffer.from(apiKey, "utf8");
const expectedBuf = Buffer.from(expectedKey, "utf8");
const maxLen = Math.max(keyBuf.length, expectedBuf.length);
const a = Buffer.alloc(maxLen);
const b = Buffer.alloc(maxLen);
keyBuf.copy(a);
expectedBuf.copy(b);
return keyBuf.length === expectedBuf.length && timingSafeEqual(a, b);[Medium] Open endpoints in production if
[Low] Prompt injection risk — content: `Search for evidence related to: "${query}"
...
Return up to ${limit} most relevant resultsThe validated Bugs[High] Stale if (!process.env.PROJECT_ROOT) {
process.env.PROJECT_ROOT = process.cwd();
}This was supposed to be removed by the "simplify PROJECT_ROOT handling" commit ( [Medium] interface LogicModelToolResult { // defined...
toolName: string;
payload: { result: { canvasData: CanvasData } };
}
// ...but then:
const logicModelResult = result.toolResults.find(
(tr: any) => tr.payload?.toolName === "logicModelTool",
) as any; // cast to any insteadThe interface is dead code. Either use it to properly type the result (removing the [Low] No timeout on Pinata fetch — const response = await fetch("https://api.pinata.cloud/pinning/pinFileToIPFS", { ... });There is no [Low] const issueCards = cardsByType["outcomes-short"] || cardsByType["outputs"] || [];
const extractedIssues = issueCards.slice(0, 3).map((c) => c.title);Short-term outcomes and outputs are not issues — they are results. Issue/problem statements would more naturally come from the Code Quality[Low] const conversationText = chatHistory
.filter((m) => m.role === "user")
.map((m) => m.content)
.join("\n");In a multi-turn conversation the assistant's responses often provide important framing (e.g., clarifying questions, reformulations). Discarding them means the intent extraction works only on the raw user messages. Consider including assistant messages with role labels to give the LLM full context. [Low] The Architectural NotesHypercerts API v2 → v1 downgrade ( The PR downgrades from the v2 to v1 GraphQL API and disables mint functionality. The commit message mentions a "rollback," but there is no explanation of why v2 was abandoned. Several v2-specific types ( No rate limiting on AI endpoints Both new endpoints invoke LLM agents and the compact endpoint additionally uploads to IPFS. There is no rate limiting at the route level. Even with Minor
Summary
The skills refactor is well-structured and the new API endpoints follow the project's existing patterns. The main blockers are the |
…ns and project overview
🔄 Release PR UpdatedNew changes have been pushed to 🤖 Updated by GitHub Actions |
PR Review: Release 2026-02-25This release bundles three PRs (#186 chatbot API, #187 AGENTS.md symlink, #189 Mastra v1 upgrade + skills). The architectural direction is solid. A few issues worth addressing before merge: Bug: Potential tool name mismatch in workflowFile: The workflow searches tool results by The new Inconsistency: PROJECT_ROOT removal is incompleteFile: The PR removes PROJECT_ROOT handling from Semantic confusion in extractSummaryFromCanvasFile: Short-term outcomes and outputs represent desired results, not problems being addressed. The bot will return outcomes like "Increased Project Activity" as the user's "issues". The right source for extracted problems would be the activities/intervention field, or the intent string could be parsed directly. Workspace basePath may reintroduce the path resolution problemFile: The PR removes Minor: LogicModelToolResult interface goes unusedFile: The interface is defined at the top but Minor: Auth bypass silently allows open endpointsFile: When What is done well
|
…low error handling - Removed unnecessary PROJECT_ROOT check in the compact route. - Updated logic model agent instructions to clarify the mandatory final action of calling logicModelTool. - Adjusted logic model workflow to improve error handling and logging, ensuring better tracking of tool results.
🔄 Release PR UpdatedNew changes have been pushed to 🤖 Updated by GitHub Actions |
PR Review: Release 2026-02-25This is a substantial release covering a Mastra v1 upgrade, a new Telegram bot integration, a skills-based agent refactor, and Hypercerts API migration. Overall the direction is solid — the architecture improvements are well-considered. A few items worth discussing before merging. IssuesHigh Priority1. Hardcoded In // disabled={!isConnected || !form.formState.isValid}
disabled={true}Commented-out code in a release PR is a risk — it's easy to forget to re-enable later. Consider using a named constant instead: // In lib/constants.ts
export const HYPERCERT_MINTING_ENABLED = false;
// In components
disabled={!HYPERCERT_MINTING_ENABLED || !isConnected || !form.formState.isValid}Or at minimum, add a comment with an issue link explaining why it's disabled and when to re-enable. 2. Potential skills path resolution issue In const workspace = new Workspace({
filesystem: new LocalFilesystem({ basePath: "." }),
skills: ["/mastra/skills"],
});The Medium Priority3. The 4. In 5. Telemetry removed without explanation The // Removed:
telemetry: {
serviceName: "Muse",
enabled: false,
}If Mastra v1 has different telemetry configuration, the equivalent setup should be carried over (even if disabled). Silent removal of observability config is easy to miss in review. 6. Hypercerts API: v2 → v1 downgrade
Low Priority / Style7.
8. - "dev:mastra": "PROJECT_ROOT=$(pwd) mastra dev --dir mastra",
+ "dev:mastra": "mastra dev --dir mastra",Worth confirming Mastra v1 no longer needs this env var for path resolution before shipping. Positives
|
Uh oh!
There was an error while loading. Please reload this page.