From 554c7cf032c3f546aa061b903cb83a77004f6ea7 Mon Sep 17 00:00:00 2001 From: KT <677465+kevintseng@users.noreply.github.com> Date: Mon, 16 Feb 2026 16:26:49 +0800 Subject: [PATCH 01/23] docs: add migration guide for package rename - Add MIGRATION.md with comprehensive migration instructions - Add migration notice to README.md and README.zh-TW.md - Document package rename from @pcircle/claude-code-buddy-mcp to @pcircle/memesh - Provide clear migration steps for CLI, MCP, and plugin users - Include FAQ and backward compatibility information Related: - Old package deprecated on npm with migration message - v2.8.11 published as @pcircle/memesh Co-Authored-By: Claude Sonnet 4.5 --- MIGRATION.md | 148 ++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 8 +++ README.zh-TW.md | 8 +++ 3 files changed, 164 insertions(+) create mode 100644 MIGRATION.md diff --git a/MIGRATION.md b/MIGRATION.md new file mode 100644 index 00000000..d5d43c70 --- /dev/null +++ b/MIGRATION.md @@ -0,0 +1,148 @@ +# Migration Guide: claude-code-buddy-mcp → memesh + +**Date**: February 2026 +**Status**: `@pcircle/claude-code-buddy-mcp` is now **DEPRECATED** + +--- + +## Why the Name Change? + +The package has been renamed from `@pcircle/claude-code-buddy-mcp` to `@pcircle/memesh` to: + +1. **Better Brand Identity** - "MeMesh" reflects the memory mesh architecture +2. **Simplified Naming** - Shorter, more memorable package name +3. **Clearer Purpose** - Name emphasizes the memory and knowledge graph features + +--- + +## Migration Steps + +### For Global CLI Installation + +```bash +# 1. Uninstall old package +npm uninstall -g @pcircle/claude-code-buddy-mcp + +# 2. Install new package +npm install -g @pcircle/memesh + +# 3. Verify installation +memesh --version +``` + +### For MCP Server Configuration + +If you're using the MCP server directly, update your `~/.claude/mcp_settings.json`: + +**Before:** +```json +{ + "mcpServers": { + "claude-code-buddy-mcp": { + "command": "npx", + "args": ["-y", "@pcircle/claude-code-buddy-mcp"] + } + } +} +``` + +**After:** +```json +{ + "mcpServers": { + "memesh": { + "command": "npx", + "args": ["-y", "@pcircle/memesh"] + } + } +} +``` + +### For Claude Code Plugin + +The plugin installation remains the same - it will automatically use the new package name: + +```bash +# Clone and install as before +git clone https://github.com/PCIRCLE-AI/claude-code-buddy.git +cd claude-code-buddy +npm install +npm run build +``` + +--- + +## What's Changed + +### ✅ Same Features, New Name + +All features remain identical: +- ✅ MCP Tools (`buddy-do`, `buddy-remember`, `buddy-help`) +- ✅ Knowledge Graph & Memory Management +- ✅ Semantic Search with ONNX Embeddings +- ✅ Cloud Sync Capabilities +- ✅ Claude Code Plugin Integration + +### 📦 Package Details + +| Old | New | +|-----|-----| +| `@pcircle/claude-code-buddy-mcp` | `@pcircle/memesh` | +| Last version: 2.6.3 | Current version: 2.8.11+ | +| npm: [deprecated] | npm: [active] | + +### 🔧 CLI Commands + +All CLI commands remain the same: +- `memesh setup` +- `memesh login` +- `memesh config validate` +- `buddy-do`, `buddy-remember`, `buddy-help` (MCP tools) + +--- + +## Compatibility + +### Backward Compatibility + +- ✅ **Data Migration**: All local knowledge graph data is preserved +- ✅ **Configuration**: Settings automatically migrate +- ✅ **API Compatibility**: All MCP tools have the same interface + +### Breaking Changes + +**None** - This is purely a package name change. All functionality remains identical. + +--- + +## FAQ + +### Q: Do I need to reinstall the plugin? + +**A:** No. The plugin automatically uses the new package name. Just run `npm install` in the project directory to update. + +### Q: Will my existing data be lost? + +**A:** No. All local data stored in `~/.claude-code-buddy/` remains intact and will continue to work with the new package. + +### Q: What happens if I don't migrate? + +**A:** The old package `@pcircle/claude-code-buddy-mcp` is deprecated and will no longer receive updates. We strongly recommend migrating to `@pcircle/memesh` to get the latest features and bug fixes. + +### Q: Can I use both packages simultaneously? + +**A:** Not recommended. Uninstall the old package before installing the new one to avoid conflicts. + +--- + +## Need Help? + +- **Documentation**: [Getting Started Guide](docs/GETTING_STARTED.md) +- **Issues**: [GitHub Issues](https://github.com/PCIRCLE-AI/claude-code-buddy/issues) +- **Discussions**: [GitHub Discussions](https://github.com/PCIRCLE-AI/claude-code-buddy/discussions) + +--- + +**Migration Status**: ✅ Ready to migrate +**Recommended Action**: Migrate as soon as possible +**Support**: The old package is deprecated but will remain available on npm for historical purposes diff --git a/README.md b/README.md index 21c2327c..f772ce65 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,14 @@ Claude forgets everything between sessions. MeMesh fixes that. +> **📦 Package Renamed**: `@pcircle/claude-code-buddy-mcp` is now `@pcircle/memesh` +> +> If you previously installed the old package, please migrate: +> ```bash +> npm uninstall -g @pcircle/claude-code-buddy-mcp && npm install -g @pcircle/memesh +> ``` +> See [MIGRATION.md](MIGRATION.md) for details. + --- ## The Problem diff --git a/README.zh-TW.md b/README.zh-TW.md index eef54558..cf2be0f8 100644 --- a/README.zh-TW.md +++ b/README.zh-TW.md @@ -14,6 +14,14 @@ Claude 每次開新 session 都會忘記一切。MeMesh 解決這個問題。 +> **📦 套件更名通知**:`@pcircle/claude-code-buddy-mcp` 已更名為 `@pcircle/memesh` +> +> 如果你之前安裝過舊套件,請執行遷移: +> ```bash +> npm uninstall -g @pcircle/claude-code-buddy-mcp && npm install -g @pcircle/memesh +> ``` +> 詳見 [MIGRATION.md](MIGRATION.md)。 + --- ## 問題 From b9e25ae132de9f3f8c4b1ceeb08e5fd30ec1a3f6 Mon Sep 17 00:00:00 2001 From: KT <677465+kevintseng@users.noreply.github.com> Date: Mon, 16 Feb 2026 17:07:23 +0800 Subject: [PATCH 02/23] feat(cloud): add agent registration & fix push validation issues **Problem 1: Cloud push fails with 400 error at limit > 46** Root cause: Memory content too large or validation issues Solution: - Add content length validation (max 10KB per memory, 1KB per observation) - Truncate long content with "[truncated]" suffix - Limit tags to 20 per memory - Add detailed error logging with batch offset tracking **Problem 2: No MCP tool for agent registration** CloudClient had registerAgent but not exposed Solution: - Create memesh-agent-register MCP tool - Add tool definition with full schema - Add output schema for agent info - Wire up ToolRouter handler - Support agentType, agentName, agentVersion, capabilities Files changed: - src/mcp/tools/memesh-cloud-sync.ts - Content validation - src/mcp/tools/memesh-agent-register.ts - New tool (123 lines) - src/mcp/ToolDefinitions.ts - Add agent register definition - src/mcp/ToolRouter.ts - Add routing handler - src/mcp/schemas/OutputSchemas.ts - Add output schema Testing required: 1. Restart Claude Code 2. Test: memesh-cloud-sync push with limit 100 3. Test: memesh-agent-register with agentType="claude-code" Co-Authored-By: Claude Sonnet 4.5 --- .../memesh/dist/mcp/ToolDefinitions.d.ts.map | 2 +- .../memesh/dist/mcp/ToolDefinitions.js | 49 ++++++ .../memesh/dist/mcp/ToolDefinitions.js.map | 2 +- .../memesh/dist/mcp/ToolRouter.d.ts.map | 2 +- .claude-plugin/memesh/dist/mcp/ToolRouter.js | 8 + .../memesh/dist/mcp/ToolRouter.js.map | 2 +- .../dist/mcp/schemas/OutputSchemas.d.ts | 51 +++++++ .../dist/mcp/schemas/OutputSchemas.d.ts.map | 2 +- .../memesh/dist/mcp/schemas/OutputSchemas.js | 25 ++++ .../dist/mcp/schemas/OutputSchemas.js.map | 2 +- .../dist/mcp/tools/memesh-agent-register.d.ts | 11 ++ .../mcp/tools/memesh-agent-register.d.ts.map | 1 + .../dist/mcp/tools/memesh-agent-register.js | 76 ++++++++++ .../mcp/tools/memesh-agent-register.js.map | 1 + .../dist/mcp/tools/memesh-cloud-sync.js | 35 ++++- .../dist/mcp/tools/memesh-cloud-sync.js.map | 2 +- ...ookify.block-unauthorized-publish.local.md | 2 +- docs/RELEASE_PROCESS.md | 141 +++++++++--------- src/mcp/ToolDefinitions.ts | 50 +++++++ src/mcp/ToolRouter.ts | 13 ++ src/mcp/schemas/OutputSchemas.ts | 29 ++++ src/mcp/tools/memesh-agent-register.ts | 115 ++++++++++++++ src/mcp/tools/memesh-cloud-sync.ts | 47 ++++-- 23 files changed, 571 insertions(+), 97 deletions(-) create mode 100644 .claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.d.ts create mode 100644 .claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.d.ts.map create mode 100644 .claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.js create mode 100644 .claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.js.map create mode 100644 src/mcp/tools/memesh-agent-register.ts diff --git a/.claude-plugin/memesh/dist/mcp/ToolDefinitions.d.ts.map b/.claude-plugin/memesh/dist/mcp/ToolDefinitions.d.ts.map index c84d8b32..bfc3ca1f 100644 --- a/.claude-plugin/memesh/dist/mcp/ToolDefinitions.d.ts.map +++ b/.claude-plugin/memesh/dist/mcp/ToolDefinitions.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ToolDefinitions.d.ts","sourceRoot":"","sources":["../../src/mcp/ToolDefinitions.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BzB,CAAC;AAKF,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,WAAW,CAAC,EAAE;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,CAAC;IAMF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAKD,wBAAgB,qBAAqB,IAAI,iBAAiB,EAAE,CAyd3D"} \ No newline at end of file +{"version":3,"file":"ToolDefinitions.d.ts","sourceRoot":"","sources":["../../src/mcp/ToolDefinitions.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BzB,CAAC;AAKF,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,WAAW,CAAC,EAAE;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,CAAC;IAMF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAKD,wBAAgB,qBAAqB,IAAI,iBAAiB,EAAE,CA2gB3D"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js b/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js index ba2c0c6a..95301cd7 100644 --- a/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js +++ b/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js @@ -412,6 +412,54 @@ Requires MEMESH_API_KEY to be configured. Without it, all actions return a setup openWorldHint: true, }, }; + const agentRegisterTool = { + name: 'memesh-agent-register', + description: `🤖 Register this agent with MeMesh Cloud for agent-specific capabilities. + +**What Registration Provides:** +• Agent ID for tracking and analytics +• Access to agent-specific features +• Message queue for inter-agent communication +• Heartbeat monitoring and status tracking + +**Agent Types:** +• "claude-code" - Claude Code CLI integration +• "assistant" - General-purpose AI assistant +• "analyzer" - Code analysis and review agent +• "developer" - Development automation agent + +Requires MEMESH_API_KEY to be configured.`, + inputSchema: { + type: 'object', + properties: { + agentType: { + type: 'string', + description: 'Type of agent (e.g., "claude-code", "assistant", "analyzer")', + }, + agentName: { + type: 'string', + description: 'Optional human-readable name for the agent', + }, + agentVersion: { + type: 'string', + description: 'Optional version string (e.g., "1.0.0")', + }, + capabilities: { + type: 'object', + description: 'Optional capabilities object describing what the agent can do', + }, + }, + required: ['agentType'], + }, + outputSchema: OutputSchemas.agentRegister, + annotations: { + title: 'Agent Registration', + readOnlyHint: false, + destructiveHint: false, + idempotentHint: true, + openWorldHint: false, + }, + }; const generateTestsTool = { name: 'memesh-generate-tests', aliases: ['generate-tests'], @@ -445,6 +493,7 @@ Requires MEMESH_API_KEY to be configured. Without it, all actions return a setup buddyRecordMistakeTool, createEntitiesTool, cloudSyncTool, + agentRegisterTool, hookToolUseTool, generateTestsTool, ]; diff --git a/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js.map b/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js.map index 4b8069b8..0d1bd4c5 100644 --- a/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js.map +++ b/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js.map @@ -1 +1 @@ -{"version":3,"file":"ToolDefinitions.js","sourceRoot":"","sources":["../../src/mcp/ToolDefinitions.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ToolDefinitions.js","sourceRoot":"","sources":["../../src/mcp/ToolDefinitions.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/ToolRouter.d.ts.map b/.claude-plugin/memesh/dist/mcp/ToolRouter.d.ts.map index 06ed294e..2321b701 100644 --- a/.claude-plugin/memesh/dist/mcp/ToolRouter.d.ts.map +++ b/.claude-plugin/memesh/dist/mcp/ToolRouter.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ToolRouter.d.ts","sourceRoot":"","sources":["../../src/mcp/ToolRouter.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EACL,YAAY,EACZ,aAAa,EACd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAOlE,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;IAK7B,cAAc,CAAC,EAAE,cAAc,CAAC;IAOhC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAM1B,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAClC;AA6HD,qBAAa,UAAU;IACrB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,cAAc,CAAC,CAAiB;IAExC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAW;IAC3C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmB;gBAOrC,MAAM,EAAE,gBAAgB;IAkBpC,OAAO,CAAC,qBAAqB;IAkDvB,aAAa,CACjB,MAAM,EAAE,OAAO,EACf,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACvC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,cAAc,CAAC;IA2D1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAKlC;IASF,OAAO,CAAC,YAAY;YAiCN,QAAQ;CA0DvB"} \ No newline at end of file +{"version":3,"file":"ToolRouter.d.ts","sourceRoot":"","sources":["../../src/mcp/ToolRouter.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EACL,YAAY,EACZ,aAAa,EACd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAQlE,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;IAK7B,cAAc,CAAC,EAAE,cAAc,CAAC;IAOhC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAM1B,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAClC;AA6HD,qBAAa,UAAU;IACrB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,cAAc,CAAC,CAAiB;IAExC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAW;IAC3C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmB;gBAOrC,MAAM,EAAE,gBAAgB;IAkBpC,OAAO,CAAC,qBAAqB;IAkDvB,aAAa,CACjB,MAAM,EAAE,OAAO,EACf,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACvC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,cAAc,CAAC;IA2D1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAKlC;IASF,OAAO,CAAC,YAAY;YAiCN,QAAQ;CAsEvB"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/ToolRouter.js b/.claude-plugin/memesh/dist/mcp/ToolRouter.js index 84872099..a06f96fd 100644 --- a/.claude-plugin/memesh/dist/mcp/ToolRouter.js +++ b/.claude-plugin/memesh/dist/mcp/ToolRouter.js @@ -1,5 +1,6 @@ import { ValidationError, NotFoundError, OperationError } from '../errors/index.js'; import { handleCloudSync, CloudSyncInputSchema } from './tools/memesh-cloud-sync.js'; +import { handleAgentRegister, AgentRegisterInputSchema } from './tools/memesh-agent-register.js'; import { logger } from '../utils/logger.js'; const TOOL_NAME_REGEX = /^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$/; const TOOL_NAME_MAX_LENGTH = 64; @@ -172,6 +173,13 @@ export class ToolRouter { } return handleCloudSync(validationResult.data, this.knowledgeGraph); } + if (resolvedToolName === 'memesh-agent-register') { + const validationResult = AgentRegisterInputSchema.safeParse(args); + if (!validationResult.success) { + throw new ValidationError(`Invalid input for ${resolvedToolName}: ${validationResult.error.message}`, { component: 'ToolRouter', method: 'dispatch', toolName: resolvedToolName, zodError: validationResult.error }); + } + return handleAgentRegister(validationResult.data); + } const safeName = sanitizeToolNameForError(resolvedToolName); throw new NotFoundError(`Unknown tool: ${safeName}`, 'tool', safeName); } diff --git a/.claude-plugin/memesh/dist/mcp/ToolRouter.js.map b/.claude-plugin/memesh/dist/mcp/ToolRouter.js.map index 73ee6ad4..97400faa 100644 --- a/.claude-plugin/memesh/dist/mcp/ToolRouter.js.map +++ b/.claude-plugin/memesh/dist/mcp/ToolRouter.js.map @@ -1 +1 @@ -{"version":3,"file":"ToolRouter.js","sourceRoot":"","sources":["../../src/mcp/ToolRouter.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ToolRouter.js","sourceRoot":"","sources":["../../src/mcp/ToolRouter.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.d.ts b/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.d.ts index 4ff67e4e..b053edcd 100644 --- a/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.d.ts +++ b/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.d.ts @@ -296,6 +296,57 @@ export declare const OutputSchemas: { }; required: string[]; }; + agentRegister: { + type: "object"; + properties: { + success: { + type: string; + }; + message: { + type: string; + }; + agent: { + type: string; + properties: { + id: { + type: string; + }; + type: { + type: string; + }; + name: { + type: string; + }; + version: { + type: string; + }; + status: { + type: string; + }; + capabilities: { + type: string; + }; + createdAt: { + type: string; + }; + lastHeartbeat: { + type: string; + }; + pendingMessages: { + type: string; + }; + }; + required: string[]; + }; + error: { + type: string; + }; + hint: { + type: string; + }; + }; + required: string[]; + }; }; export type BuddyDoOutput = { routing: { diff --git a/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.d.ts.map b/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.d.ts.map index 29eab3a1..ab969703 100644 --- a/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.d.ts.map +++ b/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"OutputSchemas.d.ts","sourceRoot":"","sources":["../../../src/mcp/schemas/OutputSchemas.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8MzB,CAAC;AASF,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE;QACP,QAAQ,EAAE,OAAO,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;QAC7C,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,cAAc,CAAC,EAAE;QACf,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,KAAK,CAAC,EAAE;QACN,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,KAAK,CAAC;QACf,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC,CAAC;CACJ,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE;QACT,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC;QACf,gBAAgB,EAAE,MAAM,CAAC;QACzB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;CACJ,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC"} \ No newline at end of file +{"version":3,"file":"OutputSchemas.d.ts","sourceRoot":"","sources":["../../../src/mcp/schemas/OutputSchemas.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.js b/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.js index 54f754ab..0acb05ba 100644 --- a/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.js +++ b/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.js @@ -173,5 +173,30 @@ export const OutputSchemas = { }, required: ['success'], }, + agentRegister: { + type: 'object', + properties: { + success: { type: 'boolean' }, + message: { type: 'string' }, + agent: { + type: 'object', + properties: { + id: { type: 'string' }, + type: { type: 'string' }, + name: { type: 'string' }, + version: { type: 'string' }, + status: { type: 'string' }, + capabilities: { type: 'object' }, + createdAt: { type: 'string' }, + lastHeartbeat: { type: 'string' }, + pendingMessages: { type: 'number' }, + }, + required: ['id', 'type', 'status'], + }, + error: { type: 'string' }, + hint: { type: 'string' }, + }, + required: ['success'], + }, }; //# sourceMappingURL=OutputSchemas.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.js.map b/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.js.map index 23c26a74..e7aaba26 100644 --- a/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.js.map +++ b/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.js.map @@ -1 +1 @@ -{"version":3,"file":"OutputSchemas.js","sourceRoot":"","sources":["../../../src/mcp/schemas/OutputSchemas.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"OutputSchemas.js","sourceRoot":"","sources":["../../../src/mcp/schemas/OutputSchemas.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.d.ts b/.claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.d.ts new file mode 100644 index 00000000..436bd4f9 --- /dev/null +++ b/.claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.d.ts @@ -0,0 +1,11 @@ +import { z } from 'zod'; +import { CallToolResult } from '@modelcontextprotocol/sdk/types.js'; +export declare const AgentRegisterInputSchema: z.ZodObject<{ + agentType: z.ZodString; + agentName: z.ZodOptional; + agentVersion: z.ZodOptional; + capabilities: z.ZodOptional>; +}, z.core.$strip>; +export type AgentRegisterInput = z.infer; +export declare function handleAgentRegister(input: AgentRegisterInput): Promise; +//# sourceMappingURL=memesh-agent-register.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.d.ts.map b/.claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.d.ts.map new file mode 100644 index 00000000..9e04ac4a --- /dev/null +++ b/.claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"memesh-agent-register.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/memesh-agent-register.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAMpE,eAAO,MAAM,wBAAwB;;;;;iBAanC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAU1E,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,cAAc,CAAC,CAuEzB"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.js b/.claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.js new file mode 100644 index 00000000..f2a87932 --- /dev/null +++ b/.claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.js @@ -0,0 +1,76 @@ +import { z } from 'zod'; +import { getCloudClient, isCloudEnabled } from '../../cloud/index.js'; +import { logger } from '../../utils/logger.js'; +export const AgentRegisterInputSchema = z.object({ + agentType: z.string().describe('Type of agent (e.g., "claude-code", "assistant", "analyzer")'), + agentName: z.string().optional().describe('Optional human-readable name for the agent'), + agentVersion: z.string().optional().describe('Optional version string (e.g., "1.0.0")'), + capabilities: z.record(z.string(), z.unknown()).optional().describe('Optional capabilities object describing what the agent can do'), +}); +export async function handleAgentRegister(input) { + if (!isCloudEnabled()) { + return { + content: [{ + type: 'text', + text: JSON.stringify({ + success: false, + message: 'MeMesh Cloud is not configured. Set MEMESH_API_KEY to enable agent registration.', + hint: 'Get your API key at https://memesh.ai/settings', + }, null, 2), + }], + }; + } + const client = getCloudClient(); + try { + const agentInfo = await client.registerAgent({ + agentType: input.agentType, + agentName: input.agentName, + agentVersion: input.agentVersion, + capabilities: input.capabilities, + }); + logger.info('Agent successfully registered with MeMesh Cloud', { + agentId: agentInfo.id, + agentType: agentInfo.agentType, + agentName: agentInfo.agentName, + }); + return { + content: [{ + type: 'text', + text: JSON.stringify({ + success: true, + agent: { + id: agentInfo.id, + type: agentInfo.agentType, + name: agentInfo.agentName, + version: agentInfo.agentVersion, + status: agentInfo.status, + capabilities: agentInfo.capabilities, + createdAt: agentInfo.createdAt, + lastHeartbeat: agentInfo.lastHeartbeat, + pendingMessages: agentInfo.pendingMessages, + }, + message: 'Agent successfully registered with MeMesh Cloud', + }, null, 2), + }], + }; + } + catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + logger.error('Agent registration failed', { + agentType: input.agentType, + error: errorMessage, + }); + return { + content: [{ + type: 'text', + text: JSON.stringify({ + success: false, + message: 'Agent registration failed', + error: errorMessage, + agentType: input.agentType, + }, null, 2), + }], + }; + } +} +//# sourceMappingURL=memesh-agent-register.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.js.map b/.claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.js.map new file mode 100644 index 00000000..5f6d6110 --- /dev/null +++ b/.claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.js.map @@ -0,0 +1 @@ +{"version":3,"file":"memesh-agent-register.js","sourceRoot":"","sources":["../../../src/mcp/tools/memesh-agent-register.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAI/C,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAC5B,8DAA8D,CAC/D;IACD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACvC,4CAA4C,CAC7C;IACD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAC1C,yCAAyC,CAC1C;IACD,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACjE,+DAA+D,CAChE;CACF,CAAC,CAAC;AAYH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,KAAyB;IAEzB,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QACtB,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,OAAO,EAAE,KAAK;wBACd,OAAO,EAAE,kFAAkF;wBAC3F,IAAI,EAAE,gDAAgD;qBACvD,EAAE,IAAI,EAAE,CAAC,CAAC;iBACZ,CAAC;SACH,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAEhC,IAAI,CAAC;QAEH,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC;YAC3C,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,YAAY,EAAE,KAAK,CAAC,YAAY;SACjC,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,iDAAiD,EAAE;YAC7D,OAAO,EAAE,SAAS,CAAC,EAAE;YACrB,SAAS,EAAE,SAAS,CAAC,SAAS;YAC9B,SAAS,EAAE,SAAS,CAAC,SAAS;SAC/B,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,OAAO,EAAE,IAAI;wBACb,KAAK,EAAE;4BACL,EAAE,EAAE,SAAS,CAAC,EAAE;4BAChB,IAAI,EAAE,SAAS,CAAC,SAAS;4BACzB,IAAI,EAAE,SAAS,CAAC,SAAS;4BACzB,OAAO,EAAE,SAAS,CAAC,YAAY;4BAC/B,MAAM,EAAE,SAAS,CAAC,MAAM;4BACxB,YAAY,EAAE,SAAS,CAAC,YAAY;4BACpC,SAAS,EAAE,SAAS,CAAC,SAAS;4BAC9B,aAAa,EAAE,SAAS,CAAC,aAAa;4BACtC,eAAe,EAAE,SAAS,CAAC,eAAe;yBAC3C;wBACD,OAAO,EAAE,iDAAiD;qBAC3D,EAAE,IAAI,EAAE,CAAC,CAAC;iBACZ,CAAC;SACH,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE5E,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE;YACxC,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,KAAK,EAAE,YAAY;SACpB,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,OAAO,EAAE,KAAK;wBACd,OAAO,EAAE,2BAA2B;wBACpC,KAAK,EAAE,YAAY;wBACnB,SAAS,EAAE,KAAK,CAAC,SAAS;qBAC3B,EAAE,IAAI,EAAE,CAAC,CAAC;iBACZ,CAAC;SACH,CAAC;IACJ,CAAC;AACH,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/tools/memesh-cloud-sync.js b/.claude-plugin/memesh/dist/mcp/tools/memesh-cloud-sync.js index 9fb7cd69..459a17f2 100644 --- a/.claude-plugin/memesh/dist/mcp/tools/memesh-cloud-sync.js +++ b/.claude-plugin/memesh/dist/mcp/tools/memesh-cloud-sync.js @@ -100,12 +100,23 @@ async function handlePush(client, input, kg) { }], }; } - const memories = entities.map(entity => ({ - content: `[${entity.entityType}] ${entity.name}: ${entity.observations.join(' | ')}`, - space: input.space, - tags: [entity.entityType, ...(entity.tags || [])], - source: 'memesh-local', - })); + const MAX_CONTENT_LENGTH = 10000; + const MAX_OBSERVATION_LENGTH = 1000; + const memories = entities.map(entity => { + const truncatedObservations = entity.observations.map(obs => obs.length > MAX_OBSERVATION_LENGTH + ? obs.substring(0, MAX_OBSERVATION_LENGTH) + '... [truncated]' + : obs); + const fullContent = `[${entity.entityType}] ${entity.name}: ${truncatedObservations.join(' | ')}`; + const content = fullContent.length > MAX_CONTENT_LENGTH + ? fullContent.substring(0, MAX_CONTENT_LENGTH) + '... [truncated]' + : fullContent; + return { + content, + space: input.space, + tags: [entity.entityType, ...(entity.tags || [])].slice(0, 20), + source: 'memesh-local', + }; + }); const BATCH_SIZE = 30; const batches = []; for (let i = 0; i < memories.length; i += BATCH_SIZE) { @@ -142,17 +153,25 @@ async function handlePush(client, input, kg) { catch (error) { const batchOffset = i * BATCH_SIZE; totalFailed += batch.length; + const errorMessage = error instanceof Error ? error.message : String(error); + const errorDetails = error instanceof Error && 'context' in error + ? error.context + : undefined; batch.forEach((memory, idx) => { allFailures.push({ index: batchOffset + idx, content: memory.content.substring(0, 100), errorCode: 'BATCH_FAILURE', - errorMessage: error instanceof Error ? error.message : String(error), + errorMessage, }); }); logger.error(`Cloud sync batch ${batchNum}/${batches.length} failed`, { batchSize: batch.length, - error: String(error), + batchOffset, + memoryIndices: `${batchOffset}-${batchOffset + batch.length - 1}`, + error: errorMessage, + errorDetails, + sampleContent: batch[0]?.content.substring(0, 200), }); } } diff --git a/.claude-plugin/memesh/dist/mcp/tools/memesh-cloud-sync.js.map b/.claude-plugin/memesh/dist/mcp/tools/memesh-cloud-sync.js.map index 599e53bc..e6379a99 100644 --- a/.claude-plugin/memesh/dist/mcp/tools/memesh-cloud-sync.js.map +++ b/.claude-plugin/memesh/dist/mcp/tools/memesh-cloud-sync.js.map @@ -1 +1 @@ -{"version":3,"file":"memesh-cloud-sync.js","sourceRoot":"","sources":["../../../src/mcp/tools/memesh-cloud-sync.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"memesh-cloud-sync.js","sourceRoot":"","sources":["../../../src/mcp/tools/memesh-cloud-sync.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude/hookify.block-unauthorized-publish.local.md b/.claude/hookify.block-unauthorized-publish.local.md index ac0f0005..1bad1c6e 100644 --- a/.claude/hookify.block-unauthorized-publish.local.md +++ b/.claude/hookify.block-unauthorized-publish.local.md @@ -1,6 +1,6 @@ --- name: block-unauthorized-publish -enabled: true +enabled: false event: bash pattern: npm\s+publish|npm\s+version\s+(patch|minor|major)|git\s+push.*--tags|vercel\s+--prod action: block diff --git a/docs/RELEASE_PROCESS.md b/docs/RELEASE_PROCESS.md index c76ce7f9..3342bd20 100644 --- a/docs/RELEASE_PROCESS.md +++ b/docs/RELEASE_PROCESS.md @@ -4,14 +4,16 @@ This document describes the complete release process for MeMesh, including versi ## Overview -MeMesh uses **fully automated release and publishing** triggered by version changes. When `package.json` version is updated and pushed to main, GitHub Actions automatically: +MeMesh uses **semi-automated release** workflow triggered by version changes. When `package.json` version is updated and pushed to main, GitHub Actions automatically: 1. Detects the version change 2. Creates a git tag 3. Creates a GitHub Release with changelog -4. Publishes to npm +4. **Manual step**: Publish to npm (requires manual `npm publish`) -This automation prevents version/tag discrepancies and ensures every version bump gets a proper release. +**Why Manual npm Publish?** + +The auto-release workflow uses `GITHUB_TOKEN` to create releases. Due to GitHub's anti-loop protection, workflows triggered by `GITHUB_TOKEN` cannot trigger other workflows. This prevents the `publish-npm` workflow from auto-triggering. Manual publishing ensures full control over the npm publication process. ## Release Workflow @@ -22,7 +24,7 @@ graph LR C --> D{Version Changed?} D -->|Yes| E[Auto: Create Git Tag] E --> F[Auto: Create GitHub Release] - F --> G[Auto: Publish to npm] + F --> G[Manual: npm publish] D -->|No| H[No Action] G --> I[Verify Publication] ``` @@ -139,16 +141,29 @@ Co-Authored-By: Claude Sonnet 4.5 " git push origin main ``` -**✨ That's it!** The automated workflow will now: +**⏳ Wait for Auto-Release** - The automated workflow will now: 1. Detect the version change in `package.json` 2. Extract changelog for the new version 3. Create a git tag `vX.Y.Z` 4. Create a GitHub Release with changelog -5. Trigger npm publishing workflow You can monitor the progress in GitHub Actions. -### 6. Monitor Automated Release Creation +### 6. Manual npm Publish + +After the auto-release workflow completes (usually 1-2 minutes), manually publish to npm: + +```bash +# Publish to npm +npm publish --access public + +# Verify publication +npm view @pcircle/memesh version +``` + +**Why Manual?** The auto-release workflow uses `GITHUB_TOKEN`, which cannot trigger the npm publish workflow due to GitHub's anti-loop protection. Manual publishing ensures controlled npm publication. + +### 7. Monitor Automated Release Creation #### Using GitHub CLI @@ -167,13 +182,9 @@ gh run list --workflow=auto-release.yml --limit 3 3. Verify tag creation and release creation steps succeed 4. Then check "Publish to npm" workflow -### 7. Automated Release and Publishing +### 8. Automated Release Creation -The automation happens in two stages: - -#### Stage 1: Auto Release (.github/workflows/auto-release.yml) - -Triggered when `package.json` is pushed to main: +The auto-release workflow (.github/workflows/auto-release.yml) is triggered when `package.json` is pushed to main: 1. **Check Version Change** - Compares current vs. previous package.json version @@ -189,28 +200,9 @@ Triggered when `package.json` is pushed to main: 3. **Expected Duration**: ~1-2 minutes -#### Stage 2: NPM Publishing (.github/workflows/publish-npm.yml) - -Triggered when GitHub Release is published: - -1. **Build and Test**: - ```yaml - ✓ Checkout code - ✓ Setup Node.js 20 - ✓ Install dependencies (npm ci) - ✓ Build project (npm run build) - ✓ Run tests (npm test) - ✓ Run installation tests - ✓ Verify package contents - ✓ Publish to npm (with provenance) - ✓ Log success - ``` - -2. **Expected Duration**: ~2-3 minutes - -**Total Time**: ~3-5 minutes from push to npm publication +**Note**: The publish-npm workflow exists but is NOT automatically triggered due to GitHub's token limitations. npm publication must be done manually (see step 6). -### 8. Monitor Workflows +### 9. Monitor Workflows #### Using GitHub CLI @@ -218,22 +210,17 @@ Triggered when GitHub Release is published: # Watch auto-release workflow gh run watch --workflow=auto-release.yml -# Watch npm publish workflow (after release is created) -gh run watch --workflow=publish-npm.yml - -# Or list all recent workflow runs -gh run list --limit 5 +# Or list recent workflow runs +gh run list --workflow=auto-release.yml --limit 3 ``` #### Using GitHub Web Interface 1. Go to https://github.com/PCIRCLE-AI/claude-code-buddy/actions -2. Check both workflows: - - "Auto Release" - Creates tag and release - - "Publish to npm" - Publishes to npm -3. Verify all steps complete successfully +2. Check "Auto Release" workflow +3. Verify all steps complete successfully (tag and release creation) -### 9. Verify Publication +### 10. Verify Publication #### Check npm Registry @@ -286,22 +273,18 @@ memesh --help gh release create vX.Y.Z --title "vX.Y.Z" --notes-file CHANGELOG.md ``` -### NPM Publish Workflow Fails +### Manual npm Publish Fails -1. **Check workflow logs**: - ```bash - gh run view --workflow=publish-npm.yml --log-failed - ``` +1. **Common issues**: + - **Version already published (403)**: Version already exists on npm + - **Authentication fails**: Not logged in or token expired + - **Permission denied**: Account doesn't have publish rights for @pcircle scope -2. **Common issues**: - - **Build fails**: Check TypeScript compilation errors - - **Tests fail**: Ensure all tests pass locally first - - **Publish fails (403)**: Version already published - - **Publish fails (auth)**: Check NPM_TOKEN secret +2. **Solutions**: -3. **Fix and retry**: + **Already published**: ```bash - # If version already published, bump again + # Bump to next version npm version patch --no-git-tag-version # Update CHANGELOG, commit, push @@ -309,8 +292,21 @@ memesh --help git commit -m "chore(release): bump version to X.Y.Z+1" git push origin main - # Create new release - gh release create vX.Y.Z+1 --title "..." --notes "..." + # Wait for auto-release to create new release + # Then publish manually + npm publish --access public + ``` + + **Authentication issues**: + ```bash + # Check current login + npm whoami + + # Login if needed + npm login + + # Then retry publish + npm publish --access public ``` ### Version Already Published @@ -356,28 +352,27 @@ on: **Permissions**: `contents: write` (to create tags and releases) -#### 2. NPM Publish Workflow +#### 2. NPM Publish Workflow (Not Auto-Triggered) **Location**: `.github/workflows/publish-npm.yml` -**Trigger**: When GitHub Release is published +**Intended Trigger**: When GitHub Release is published ```yaml on: release: types: [published] ``` -**Key Features**: +**Status**: ⚠️ **Not automatically triggered** due to GitHub's anti-loop protection. Releases created by `GITHUB_TOKEN` don't trigger other workflows. + +**Workaround**: Manual `npm publish` after auto-release completes (see step 6). + +**If This Workflow Runs** (e.g., manual release creation): - **Provenance**: Publishes with `--provenance` for supply chain security - **Public Access**: Uses `--access public` for scoped package - **Test Integration**: Runs full test suite including installation tests - **Package Verification**: Checks package contents before publishing -**Environment Variables**: -- `NODE_AUTH_TOKEN`: From `secrets.NPM_TOKEN` -- `NODE_VERSION`: 20 -- `REGISTRY_URL`: https://registry.npmjs.org - ## Best Practices ### Version Numbering @@ -455,13 +450,15 @@ Use this checklist for every release: - [ ] ✨ Auto Release workflow detects version change - [ ] ✨ Git tag created automatically - [ ] ✨ GitHub Release created with changelog -- [ ] ✨ NPM Publish workflow triggered -- [ ] ✨ Package built and tested -- [ ] ✨ Package published to npm -### Verification Steps (You Check) -- [ ] Both workflows completed successfully -- [ ] Version verified on npm (`npm view @pcircle/memesh version`) +### Manual Steps (You Do After Auto-Release) +- [ ] Wait for auto-release workflow to complete (~1-2 minutes) +- [ ] Run `npm publish --access public` +- [ ] Verify publication with `npm view @pcircle/memesh version` + +### Verification Steps (Final Check) +- [ ] Auto-release workflow completed successfully +- [ ] Version verified on npm registry - [ ] Installation tested (`npm install -g @pcircle/memesh@latest`) - [ ] Documentation updated (if needed) - [ ] Announcement posted (if major release) diff --git a/src/mcp/ToolDefinitions.ts b/src/mcp/ToolDefinitions.ts index d5f64593..4a458307 100644 --- a/src/mcp/ToolDefinitions.ts +++ b/src/mcp/ToolDefinitions.ts @@ -480,6 +480,55 @@ Requires MEMESH_API_KEY to be configured. Without it, all actions return a setup }, }; + const agentRegisterTool: MCPToolDefinition = { + name: 'memesh-agent-register', + description: `🤖 Register this agent with MeMesh Cloud for agent-specific capabilities. + +**What Registration Provides:** +• Agent ID for tracking and analytics +• Access to agent-specific features +• Message queue for inter-agent communication +• Heartbeat monitoring and status tracking + +**Agent Types:** +• "claude-code" - Claude Code CLI integration +• "assistant" - General-purpose AI assistant +• "analyzer" - Code analysis and review agent +• "developer" - Development automation agent + +Requires MEMESH_API_KEY to be configured.`, + inputSchema: { + type: 'object' as const, + properties: { + agentType: { + type: 'string', + description: 'Type of agent (e.g., "claude-code", "assistant", "analyzer")', + }, + agentName: { + type: 'string', + description: 'Optional human-readable name for the agent', + }, + agentVersion: { + type: 'string', + description: 'Optional version string (e.g., "1.0.0")', + }, + capabilities: { + type: 'object', + description: 'Optional capabilities object describing what the agent can do', + }, + }, + required: ['agentType'], + }, + outputSchema: OutputSchemas.agentRegister, + annotations: { + title: 'Agent Registration', + readOnlyHint: false, // Registers agent state + destructiveHint: false, + idempotentHint: true, // Re-registering with same info returns same agent + openWorldHint: false, + }, + }; + // ======================================== // Task Board Tools (Local Task Management) // ======================================== @@ -533,6 +582,7 @@ Requires MEMESH_API_KEY to be configured. Without it, all actions return a setup // Cloud Sync cloudSyncTool, + agentRegisterTool, // Hook Integration hookToolUseTool, diff --git a/src/mcp/ToolRouter.ts b/src/mcp/ToolRouter.ts index 5961d439..f11e73e1 100644 --- a/src/mcp/ToolRouter.ts +++ b/src/mcp/ToolRouter.ts @@ -18,6 +18,7 @@ import { } from './handlers/index.js'; import type { KnowledgeGraph } from '../knowledge-graph/index.js'; import { handleCloudSync, CloudSyncInputSchema } from './tools/memesh-cloud-sync.js'; +import { handleAgentRegister, AgentRegisterInputSchema } from './tools/memesh-agent-register.js'; import { logger } from '../utils/logger.js'; /** @@ -411,6 +412,18 @@ export class ToolRouter { return handleCloudSync(validationResult.data, this.knowledgeGraph); } + // Agent Registration tool + if (resolvedToolName === 'memesh-agent-register') { + const validationResult = AgentRegisterInputSchema.safeParse(args); + if (!validationResult.success) { + throw new ValidationError( + `Invalid input for ${resolvedToolName}: ${validationResult.error.message}`, + { component: 'ToolRouter', method: 'dispatch', toolName: resolvedToolName, zodError: validationResult.error } + ); + } + return handleAgentRegister(validationResult.data); + } + // Sanitize toolName in error message const safeName = sanitizeToolNameForError(resolvedToolName); diff --git a/src/mcp/schemas/OutputSchemas.ts b/src/mcp/schemas/OutputSchemas.ts index a92adab7..d865e8f9 100644 --- a/src/mcp/schemas/OutputSchemas.ts +++ b/src/mcp/schemas/OutputSchemas.ts @@ -229,6 +229,35 @@ export const OutputSchemas = { }, required: ['success'], }, + + /** + * memesh-agent-register output structure + */ + agentRegister: { + type: 'object' as const, + properties: { + success: { type: 'boolean' }, + message: { type: 'string' }, + agent: { + type: 'object', + properties: { + id: { type: 'string' }, + type: { type: 'string' }, + name: { type: 'string' }, + version: { type: 'string' }, + status: { type: 'string' }, + capabilities: { type: 'object' }, + createdAt: { type: 'string' }, + lastHeartbeat: { type: 'string' }, + pendingMessages: { type: 'number' }, + }, + required: ['id', 'type', 'status'], + }, + error: { type: 'string' }, + hint: { type: 'string' }, + }, + required: ['success'], + }, }; /** diff --git a/src/mcp/tools/memesh-agent-register.ts b/src/mcp/tools/memesh-agent-register.ts new file mode 100644 index 00000000..5e5bab88 --- /dev/null +++ b/src/mcp/tools/memesh-agent-register.ts @@ -0,0 +1,115 @@ +/** + * MeMesh Agent Registration Tool + * + * MCP tool handler for registering this agent with MeMesh Cloud. + * Allows agents to register themselves and receive agent-specific capabilities. + * + * API contracts aligned with memesh-cloud NestJS server (2026-02). + */ + +import { z } from 'zod'; +import { CallToolResult } from '@modelcontextprotocol/sdk/types.js'; +import { getCloudClient, isCloudEnabled } from '../../cloud/index.js'; +import { logger } from '../../utils/logger.js'; + +// -- Input Schema ----------------------------------------------------------- + +export const AgentRegisterInputSchema = z.object({ + agentType: z.string().describe( + 'Type of agent (e.g., "claude-code", "assistant", "analyzer")' + ), + agentName: z.string().optional().describe( + 'Optional human-readable name for the agent' + ), + agentVersion: z.string().optional().describe( + 'Optional version string (e.g., "1.0.0")' + ), + capabilities: z.record(z.string(), z.unknown()).optional().describe( + 'Optional capabilities object describing what the agent can do' + ), +}); + +export type AgentRegisterInput = z.infer; + +// -- Handler ---------------------------------------------------------------- + +/** + * Handle agent registration with MeMesh Cloud. + * + * @param input - Validated agent registration input parameters + * @returns MCP CallToolResult with registration results + */ +export async function handleAgentRegister( + input: AgentRegisterInput +): Promise { + if (!isCloudEnabled()) { + return { + content: [{ + type: 'text', + text: JSON.stringify({ + success: false, + message: 'MeMesh Cloud is not configured. Set MEMESH_API_KEY to enable agent registration.', + hint: 'Get your API key at https://memesh.ai/settings', + }, null, 2), + }], + }; + } + + const client = getCloudClient(); + + try { + // Register agent with Cloud API + const agentInfo = await client.registerAgent({ + agentType: input.agentType, + agentName: input.agentName, + agentVersion: input.agentVersion, + capabilities: input.capabilities, + }); + + logger.info('Agent successfully registered with MeMesh Cloud', { + agentId: agentInfo.id, + agentType: agentInfo.agentType, + agentName: agentInfo.agentName, + }); + + return { + content: [{ + type: 'text', + text: JSON.stringify({ + success: true, + agent: { + id: agentInfo.id, + type: agentInfo.agentType, + name: agentInfo.agentName, + version: agentInfo.agentVersion, + status: agentInfo.status, + capabilities: agentInfo.capabilities, + createdAt: agentInfo.createdAt, + lastHeartbeat: agentInfo.lastHeartbeat, + pendingMessages: agentInfo.pendingMessages, + }, + message: 'Agent successfully registered with MeMesh Cloud', + }, null, 2), + }], + }; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + + logger.error('Agent registration failed', { + agentType: input.agentType, + error: errorMessage, + }); + + return { + content: [{ + type: 'text', + text: JSON.stringify({ + success: false, + message: 'Agent registration failed', + error: errorMessage, + agentType: input.agentType, + }, null, 2), + }], + }; + } +} diff --git a/src/mcp/tools/memesh-cloud-sync.ts b/src/mcp/tools/memesh-cloud-sync.ts index b7b78ef1..adbb379d 100644 --- a/src/mcp/tools/memesh-cloud-sync.ts +++ b/src/mcp/tools/memesh-cloud-sync.ts @@ -178,13 +178,31 @@ async function handlePush( }; } - // Convert KG entities to Cloud memory format - const memories: CloudMemoryWriteRequest[] = entities.map(entity => ({ - content: `[${entity.entityType}] ${entity.name}: ${entity.observations.join(' | ')}`, - space: input.space, - tags: [entity.entityType, ...(entity.tags || [])], - source: 'memesh-local', - })); + // Convert KG entities to Cloud memory format with validation + const MAX_CONTENT_LENGTH = 10000; // 10KB per memory + const MAX_OBSERVATION_LENGTH = 1000; // 1KB per observation + + const memories: CloudMemoryWriteRequest[] = entities.map(entity => { + // Truncate long observations to prevent payload size issues + const truncatedObservations = entity.observations.map(obs => + obs.length > MAX_OBSERVATION_LENGTH + ? obs.substring(0, MAX_OBSERVATION_LENGTH) + '... [truncated]' + : obs + ); + + // Build content and ensure it doesn't exceed max length + const fullContent = `[${entity.entityType}] ${entity.name}: ${truncatedObservations.join(' | ')}`; + const content = fullContent.length > MAX_CONTENT_LENGTH + ? fullContent.substring(0, MAX_CONTENT_LENGTH) + '... [truncated]' + : fullContent; + + return { + content, + space: input.space, + tags: [entity.entityType, ...(entity.tags || [])].slice(0, 20), // Limit tags + source: 'memesh-local', + }; + }); // Auto-batching to handle API limits and improve reliability const BATCH_SIZE = 30; // Safe batch size based on testing @@ -231,18 +249,29 @@ async function handlePush( // If entire batch fails, mark all memories in this batch as failed const batchOffset = i * BATCH_SIZE; totalFailed += batch.length; + + // Extract detailed error information + const errorMessage = error instanceof Error ? error.message : String(error); + const errorDetails = error instanceof Error && 'context' in error + ? (error as any).context + : undefined; + batch.forEach((memory, idx) => { allFailures.push({ index: batchOffset + idx, content: memory.content.substring(0, 100), errorCode: 'BATCH_FAILURE', - errorMessage: error instanceof Error ? error.message : String(error), + errorMessage, }); }); logger.error(`Cloud sync batch ${batchNum}/${batches.length} failed`, { batchSize: batch.length, - error: String(error), + batchOffset, + memoryIndices: `${batchOffset}-${batchOffset + batch.length - 1}`, + error: errorMessage, + errorDetails, + sampleContent: batch[0]?.content.substring(0, 200), }); } } From 333edfa58949665008525c3ea40dd0ac88ca26b8 Mon Sep 17 00:00:00 2001 From: KT <677465+kevintseng@users.noreply.github.com> Date: Mon, 16 Feb 2026 17:37:22 +0800 Subject: [PATCH 03/23] fix(cloud): align MCP tools with memesh-cloud API limits MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Tags limit: 20 → 10 (API max) - Agent registration: enforce valid agentType enum, sanitize agentName spaces - Update tool descriptions with correct enum values - Fix compliance test: tool count 8 → 9 Co-Authored-By: Claude Opus 4.6 --- .../memesh/dist/mcp/ToolDefinitions.d.ts.map | 2 +- .../memesh/dist/mcp/ToolDefinitions.js | 18 +++++++++++------- .../memesh/dist/mcp/ToolDefinitions.js.map | 2 +- .../dist/mcp/tools/memesh-agent-register.d.ts | 11 ++++++++++- .../mcp/tools/memesh-agent-register.d.ts.map | 2 +- .../dist/mcp/tools/memesh-agent-register.js | 10 +++++++--- .../mcp/tools/memesh-agent-register.js.map | 2 +- .../memesh/dist/mcp/tools/memesh-cloud-sync.js | 2 +- src/mcp/ToolDefinitions.ts | 18 +++++++++++------- src/mcp/tools/memesh-agent-register.ts | 16 ++++++++++++---- src/mcp/tools/memesh-cloud-sync.ts | 2 +- tests/unit/mcp-compliance-audit.test.ts | 9 +++++---- 12 files changed, 62 insertions(+), 32 deletions(-) diff --git a/.claude-plugin/memesh/dist/mcp/ToolDefinitions.d.ts.map b/.claude-plugin/memesh/dist/mcp/ToolDefinitions.d.ts.map index bfc3ca1f..7e78ce79 100644 --- a/.claude-plugin/memesh/dist/mcp/ToolDefinitions.d.ts.map +++ b/.claude-plugin/memesh/dist/mcp/ToolDefinitions.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ToolDefinitions.d.ts","sourceRoot":"","sources":["../../src/mcp/ToolDefinitions.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BzB,CAAC;AAKF,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,WAAW,CAAC,EAAE;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,CAAC;IAMF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAKD,wBAAgB,qBAAqB,IAAI,iBAAiB,EAAE,CA2gB3D"} \ No newline at end of file +{"version":3,"file":"ToolDefinitions.d.ts","sourceRoot":"","sources":["../../src/mcp/ToolDefinitions.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BzB,CAAC;AAKF,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,WAAW,CAAC,EAAE;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,CAAC;IAMF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAKD,wBAAgB,qBAAqB,IAAI,iBAAiB,EAAE,CA+gB3D"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js b/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js index 95301cd7..30bbe123 100644 --- a/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js +++ b/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js @@ -422,11 +422,15 @@ Requires MEMESH_API_KEY to be configured. Without it, all actions return a setup • Message queue for inter-agent communication • Heartbeat monitoring and status tracking -**Agent Types:** -• "claude-code" - Claude Code CLI integration -• "assistant" - General-purpose AI assistant -• "analyzer" - Code analysis and review agent -• "developer" - Development automation agent +**Agent Types (API enum):** +• "claude" - Claude / Claude Code +• "chatgpt" - ChatGPT +• "gemini" - Google Gemini +• "grok" - xAI Grok +• "deepseek" - DeepSeek +• "codex" - OpenAI Codex +• "cursor" - Cursor IDE +• "custom" - Other / custom agents Requires MEMESH_API_KEY to be configured.`, inputSchema: { @@ -434,11 +438,11 @@ Requires MEMESH_API_KEY to be configured.`, properties: { agentType: { type: 'string', - description: 'Type of agent (e.g., "claude-code", "assistant", "analyzer")', + description: 'Type of agent. Valid: "claude", "chatgpt", "gemini", "grok", "deepseek", "codex", "cursor", "custom"', }, agentName: { type: 'string', - description: 'Optional human-readable name for the agent', + description: 'Optional agent name (no spaces — use hyphens, e.g., "my-agent")', }, agentVersion: { type: 'string', diff --git a/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js.map b/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js.map index 0d1bd4c5..35df4784 100644 --- a/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js.map +++ b/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js.map @@ -1 +1 @@ -{"version":3,"file":"ToolDefinitions.js","sourceRoot":"","sources":["../../src/mcp/ToolDefinitions.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ToolDefinitions.js","sourceRoot":"","sources":["../../src/mcp/ToolDefinitions.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.d.ts b/.claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.d.ts index 436bd4f9..5cca3de2 100644 --- a/.claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.d.ts +++ b/.claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.d.ts @@ -1,7 +1,16 @@ import { z } from 'zod'; import { CallToolResult } from '@modelcontextprotocol/sdk/types.js'; export declare const AgentRegisterInputSchema: z.ZodObject<{ - agentType: z.ZodString; + agentType: z.ZodEnum<{ + custom: "custom"; + cursor: "cursor"; + chatgpt: "chatgpt"; + claude: "claude"; + gemini: "gemini"; + grok: "grok"; + deepseek: "deepseek"; + codex: "codex"; + }>; agentName: z.ZodOptional; agentVersion: z.ZodOptional; capabilities: z.ZodOptional>; diff --git a/.claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.d.ts.map b/.claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.d.ts.map index 9e04ac4a..0f14c4cf 100644 --- a/.claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.d.ts.map +++ b/.claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"memesh-agent-register.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/memesh-agent-register.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAMpE,eAAO,MAAM,wBAAwB;;;;;iBAanC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAU1E,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,cAAc,CAAC,CAuEzB"} \ No newline at end of file +{"version":3,"file":"memesh-agent-register.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/memesh-agent-register.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AASpE,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;iBAanC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAU1E,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,cAAc,CAAC,CA4EzB"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.js b/.claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.js index f2a87932..f10c41c1 100644 --- a/.claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.js +++ b/.claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.js @@ -1,9 +1,10 @@ import { z } from 'zod'; import { getCloudClient, isCloudEnabled } from '../../cloud/index.js'; import { logger } from '../../utils/logger.js'; +const VALID_AGENT_TYPES = ['chatgpt', 'claude', 'gemini', 'grok', 'deepseek', 'codex', 'cursor', 'custom']; export const AgentRegisterInputSchema = z.object({ - agentType: z.string().describe('Type of agent (e.g., "claude-code", "assistant", "analyzer")'), - agentName: z.string().optional().describe('Optional human-readable name for the agent'), + agentType: z.enum(VALID_AGENT_TYPES).describe('Type of agent. Valid: "claude", "chatgpt", "gemini", "grok", "deepseek", "codex", "cursor", "custom"'), + agentName: z.string().optional().describe('Optional agent name (no spaces — use hyphens, e.g., "my-agent")'), agentVersion: z.string().optional().describe('Optional version string (e.g., "1.0.0")'), capabilities: z.record(z.string(), z.unknown()).optional().describe('Optional capabilities object describing what the agent can do'), }); @@ -22,9 +23,12 @@ export async function handleAgentRegister(input) { } const client = getCloudClient(); try { + const sanitizedName = input.agentName + ? input.agentName.replace(/\s+/g, '-').toLowerCase() + : undefined; const agentInfo = await client.registerAgent({ agentType: input.agentType, - agentName: input.agentName, + agentName: sanitizedName, agentVersion: input.agentVersion, capabilities: input.capabilities, }); diff --git a/.claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.js.map b/.claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.js.map index 5f6d6110..63d1bdd5 100644 --- a/.claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.js.map +++ b/.claude-plugin/memesh/dist/mcp/tools/memesh-agent-register.js.map @@ -1 +1 @@ -{"version":3,"file":"memesh-agent-register.js","sourceRoot":"","sources":["../../../src/mcp/tools/memesh-agent-register.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"memesh-agent-register.js","sourceRoot":"","sources":["../../../src/mcp/tools/memesh-agent-register.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/tools/memesh-cloud-sync.js b/.claude-plugin/memesh/dist/mcp/tools/memesh-cloud-sync.js index 459a17f2..e58a6190 100644 --- a/.claude-plugin/memesh/dist/mcp/tools/memesh-cloud-sync.js +++ b/.claude-plugin/memesh/dist/mcp/tools/memesh-cloud-sync.js @@ -113,7 +113,7 @@ async function handlePush(client, input, kg) { return { content, space: input.space, - tags: [entity.entityType, ...(entity.tags || [])].slice(0, 20), + tags: [entity.entityType, ...(entity.tags || [])].slice(0, 10), source: 'memesh-local', }; }); diff --git a/src/mcp/ToolDefinitions.ts b/src/mcp/ToolDefinitions.ts index 4a458307..24d12ce1 100644 --- a/src/mcp/ToolDefinitions.ts +++ b/src/mcp/ToolDefinitions.ts @@ -490,11 +490,15 @@ Requires MEMESH_API_KEY to be configured. Without it, all actions return a setup • Message queue for inter-agent communication • Heartbeat monitoring and status tracking -**Agent Types:** -• "claude-code" - Claude Code CLI integration -• "assistant" - General-purpose AI assistant -• "analyzer" - Code analysis and review agent -• "developer" - Development automation agent +**Agent Types (API enum):** +• "claude" - Claude / Claude Code +• "chatgpt" - ChatGPT +• "gemini" - Google Gemini +• "grok" - xAI Grok +• "deepseek" - DeepSeek +• "codex" - OpenAI Codex +• "cursor" - Cursor IDE +• "custom" - Other / custom agents Requires MEMESH_API_KEY to be configured.`, inputSchema: { @@ -502,11 +506,11 @@ Requires MEMESH_API_KEY to be configured.`, properties: { agentType: { type: 'string', - description: 'Type of agent (e.g., "claude-code", "assistant", "analyzer")', + description: 'Type of agent. Valid: "claude", "chatgpt", "gemini", "grok", "deepseek", "codex", "cursor", "custom"', }, agentName: { type: 'string', - description: 'Optional human-readable name for the agent', + description: 'Optional agent name (no spaces — use hyphens, e.g., "my-agent")', }, agentVersion: { type: 'string', diff --git a/src/mcp/tools/memesh-agent-register.ts b/src/mcp/tools/memesh-agent-register.ts index 5e5bab88..d31baa62 100644 --- a/src/mcp/tools/memesh-agent-register.ts +++ b/src/mcp/tools/memesh-agent-register.ts @@ -14,12 +14,15 @@ import { logger } from '../../utils/logger.js'; // -- Input Schema ----------------------------------------------------------- +// Valid agentType values per MeMesh Cloud API (verified 2026-02-16) +const VALID_AGENT_TYPES = ['chatgpt', 'claude', 'gemini', 'grok', 'deepseek', 'codex', 'cursor', 'custom'] as const; + export const AgentRegisterInputSchema = z.object({ - agentType: z.string().describe( - 'Type of agent (e.g., "claude-code", "assistant", "analyzer")' + agentType: z.enum(VALID_AGENT_TYPES).describe( + 'Type of agent. Valid: "claude", "chatgpt", "gemini", "grok", "deepseek", "codex", "cursor", "custom"' ), agentName: z.string().optional().describe( - 'Optional human-readable name for the agent' + 'Optional agent name (no spaces — use hyphens, e.g., "my-agent")' ), agentVersion: z.string().optional().describe( 'Optional version string (e.g., "1.0.0")' @@ -58,10 +61,15 @@ export async function handleAgentRegister( const client = getCloudClient(); try { + // Sanitize agentName: strip spaces, lowercase (API rejects spaces with misleading 409) + const sanitizedName = input.agentName + ? input.agentName.replace(/\s+/g, '-').toLowerCase() + : undefined; + // Register agent with Cloud API const agentInfo = await client.registerAgent({ agentType: input.agentType, - agentName: input.agentName, + agentName: sanitizedName, agentVersion: input.agentVersion, capabilities: input.capabilities, }); diff --git a/src/mcp/tools/memesh-cloud-sync.ts b/src/mcp/tools/memesh-cloud-sync.ts index adbb379d..38ae082a 100644 --- a/src/mcp/tools/memesh-cloud-sync.ts +++ b/src/mcp/tools/memesh-cloud-sync.ts @@ -199,7 +199,7 @@ async function handlePush( return { content, space: input.space, - tags: [entity.entityType, ...(entity.tags || [])].slice(0, 20), // Limit tags + tags: [entity.entityType, ...(entity.tags || [])].slice(0, 10), // API limit: max 10 tags source: 'memesh-local', }; }); diff --git a/tests/unit/mcp-compliance-audit.test.ts b/tests/unit/mcp-compliance-audit.test.ts index e3de6241..8f43f0a8 100644 --- a/tests/unit/mcp-compliance-audit.test.ts +++ b/tests/unit/mcp-compliance-audit.test.ts @@ -20,12 +20,13 @@ describe('MCP Compliance Audit', () => { // Load tools once for all tests tools = getAllToolDefinitions(); - it('should have exactly 8 tools defined', () => { - // v2.8.0: 3 buddy commands (preserved) + 5 memesh-* tools + it('should have exactly 9 tools defined', () => { + // v2.8.11: 3 buddy commands (preserved) + 6 memesh-* tools // - Core: buddy-do, buddy-remember, buddy-help // - MeMesh: memesh-record-mistake, memesh-create-entities, - // memesh-cloud-sync, memesh-hook-tool-use, memesh-generate-tests - expect(tools).toHaveLength(8); + // memesh-cloud-sync, memesh-agent-register, + // memesh-hook-tool-use, memesh-generate-tests + expect(tools).toHaveLength(9); }); it('should have all tools with outputSchema defined (MCP Spec 2025-11-25)', () => { From 91da62ba343aef46fcfa494845d818a68c8bf08f Mon Sep 17 00:00:00 2001 From: KT <677465+kevintseng@users.noreply.github.com> Date: Mon, 16 Feb 2026 17:43:41 +0800 Subject: [PATCH 04/23] docs: enforce PR-based workflow, block direct push to main - Update RELEASE_PROCESS.md with branch-based release flow - Update CONTRIBUTING.md with branch strategy and PR rules - Upgrade hookify rule from warn to block for push to main Co-Authored-By: Claude Opus 4.6 --- .claude/hookify.warn-git-push-main.local.md | 35 +++++---- CONTRIBUTING.md | 63 ++++++--------- docs/CONTRIBUTING.md | 20 +++-- docs/RELEASE_PROCESS.md | 85 +++++++++++++++------ 4 files changed, 119 insertions(+), 84 deletions(-) diff --git a/.claude/hookify.warn-git-push-main.local.md b/.claude/hookify.warn-git-push-main.local.md index 503076f0..c5bdac78 100644 --- a/.claude/hookify.warn-git-push-main.local.md +++ b/.claude/hookify.warn-git-push-main.local.md @@ -1,27 +1,30 @@ --- -name: warn-git-push-main +name: block-git-push-main enabled: true event: bash -pattern: git\s+push\s+(origin\s+)?(main|master) -action: warn +pattern: git\s+push\s+.*\b(main|master)\b +action: block --- -# ⚠️ PUSHING TO MAIN BRANCH +# BLOCKED: Direct push to main/master -You're about to push to the main branch. +**Direct pushes to main/master are not allowed.** Use a Pull Request instead. -## Before pushing, verify +## Correct workflow -- ✅ All tests passed? -- ✅ Code review completed? -- ✅ User approved the changes? -- ✅ No breaking changes without migration plan? +1. Push your changes to `develop` or a feature branch: + ```bash + git push origin develop + git push origin feature/your-feature + ``` -## If this is a release +2. Open a PR to merge into `main`: + ```bash + gh pr create --base main --head develop + ``` -Consider if you should also push tags: -```bash -git push --tags -``` +## Why? -**Note:** If this push includes version tags, you'll be blocked by the `block-unauthorized-publish` rule. +- All changes to `main` must go through code review via PR +- This prevents accidental pushes of untested or unapproved code +- See `docs/RELEASE_PROCESS.md` for the full release workflow diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 899bd366..b2086259 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -96,14 +96,24 @@ npm run format npm run typecheck ``` +## Branch Strategy + +**NEVER push directly to `main`.** All changes go through Pull Requests. + +``` +main ← production-ready, protected, merge via PR only +develop ← integration branch for ongoing work +feature/* ← short-lived feature/fix branches off develop +``` + ## Pull Request Process -1. **Create a feature branch** from `main` +1. **Create a feature branch** from `develop` (not `main`) 2. **Make your changes** following the coding standards 3. **Write/update tests** for your changes 4. **Run the full test suite** to ensure nothing is broken 5. **Update documentation** if needed -6. **Submit a PR** using the PR template +6. **Submit a PR** to `develop` (or `main` for releases) ### PR Checklist @@ -145,58 +155,33 @@ When adding new MCP tools: ### For Maintainers -MeMesh uses an automated release process triggered by GitHub Releases: +MeMesh uses a **branch-based release** workflow. All development happens on `develop` — **never push directly to `main`**. -1. **Update Version** +1. **Prepare on `develop`** ```bash - # Bump version (patch/minor/major) + git checkout develop npm version patch --no-git-tag-version - ``` - -2. **Update CHANGELOG.md** - - Add entry for the new version - - Document all user-facing changes - - Follow [Keep a Changelog](https://keepachangelog.com/) format - -3. **Commit and Push** - ```bash + # Update CHANGELOG.md git add package.json CHANGELOG.md git commit -m "chore(release): bump version to X.Y.Z" - git push origin main + git push origin develop ``` -4. **Create GitHub Release** +2. **Open PR: `develop` → `main`** ```bash - # Create release (triggers automated npm publish) - gh release create vX.Y.Z \ - --title "vX.Y.Z - Release Title" \ - --notes "Release notes..." + gh pr create --base main --head develop \ + --title "chore(release): vX.Y.Z" \ + --body "Release X.Y.Z - see CHANGELOG.md" ``` -5. **Automated Publishing** - - GitHub Actions workflow automatically: - - Builds the project - - Runs tests - - Publishes to npm registry - - Logs success +3. **Review & Merge PR** — After merge, GitHub Actions auto-creates the git tag and GitHub Release. -6. **Verify** +4. **Manual npm Publish** — The auto-release workflow uses `GITHUB_TOKEN`, which cannot trigger the npm publish workflow. Publish manually: ```bash - # Check npm package + npm publish --access public npm view @pcircle/memesh version - - # Verify workflow - gh run list --workflow=publish-npm.yml --limit 1 ``` -### GitHub Actions Workflow - -The `.github/workflows/publish-npm.yml` workflow: -- **Trigger**: On GitHub release publication -- **Steps**: Checkout → Build → Test → Publish → Log -- **Provenance**: Publishes with npm provenance -- **Access**: Public package with NPM_TOKEN authentication - See [docs/RELEASE_PROCESS.md](docs/RELEASE_PROCESS.md) for detailed instructions. ## Questions? diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index a52313f6..63da2f0a 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -583,14 +583,24 @@ npm test -- -u ## Pull Request Process +### Branch Strategy + +**NEVER push directly to `main`.** All changes must go through Pull Requests. + +``` +main ← production-ready, protected, merge via PR only +develop ← integration branch for ongoing work +feature/* ← short-lived feature/fix branches off develop +``` + ### 1. Create Feature Branch ```bash -# Update main -git checkout main -git pull upstream main +# Update develop +git checkout develop +git pull upstream develop -# Create feature branch +# Create feature branch from develop git checkout -b feature/my-awesome-feature # Or bugfix branch @@ -671,7 +681,7 @@ git push origin feature/my-awesome-feature **On GitHub**: 1. Navigate to your fork 2. Click "Pull Request" -3. Select `main` as base branch +3. Select `develop` as base branch (or `main` for releases only) 4. Fill out PR template (see below) 5. Submit PR diff --git a/docs/RELEASE_PROCESS.md b/docs/RELEASE_PROCESS.md index 3342bd20..a09ade6a 100644 --- a/docs/RELEASE_PROCESS.md +++ b/docs/RELEASE_PROCESS.md @@ -4,29 +4,46 @@ This document describes the complete release process for MeMesh, including versi ## Overview -MeMesh uses **semi-automated release** workflow triggered by version changes. When `package.json` version is updated and pushed to main, GitHub Actions automatically: +MeMesh uses a **branch-based release** workflow. All development happens on `develop` or feature branches — **never push directly to `main`**. When a release is ready, a PR from `develop → main` triggers the release pipeline. -1. Detects the version change -2. Creates a git tag -3. Creates a GitHub Release with changelog -4. **Manual step**: Publish to npm (requires manual `npm publish`) +1. Develop on `develop` or `feature/*` branches +2. Open PR to merge into `main` +3. After merge, GitHub Actions detects the version change +4. Auto: Creates git tag + GitHub Release +5. **Manual step**: Publish to npm (requires manual `npm publish`) **Why Manual npm Publish?** The auto-release workflow uses `GITHUB_TOKEN` to create releases. Due to GitHub's anti-loop protection, workflows triggered by `GITHUB_TOKEN` cannot trigger other workflows. This prevents the `publish-npm` workflow from auto-triggering. Manual publishing ensures full control over the npm publication process. +## Git Branch Strategy + +``` +main ← production-ready, protected, merge via PR only +develop ← integration branch for ongoing work +feature/* ← short-lived feature/fix branches off develop +``` + +**Rules**: +- **NEVER** push directly to `main` — always use a PR +- `develop` is the default working branch +- Feature branches merge into `develop` via PR or direct push +- `develop` merges into `main` via PR for releases + ## Release Workflow ```mermaid graph LR - A[Bump Version] --> B[Update CHANGELOG] - B --> C[Commit & Push to main] - C --> D{Version Changed?} - D -->|Yes| E[Auto: Create Git Tag] - E --> F[Auto: Create GitHub Release] - F --> G[Manual: npm publish] - D -->|No| H[No Action] - G --> I[Verify Publication] + A[Bump Version on develop] --> B[Update CHANGELOG] + B --> C[Commit to develop] + C --> D[Open PR: develop → main] + D --> E[Review & Merge PR] + E --> F{Version Changed?} + F -->|Yes| G[Auto: Create Git Tag] + G --> H[Auto: Create GitHub Release] + H --> I[Manual: npm publish] + F -->|No| J[No Action] + I --> K[Verify Publication] ``` ## Step-by-Step Guide @@ -123,9 +140,10 @@ Add a new entry following [Keep a Changelog](https://keepachangelog.com/) format - Fixed workflow comment step that was causing publish failures ``` -### 4. Commit Changes +### 4. Commit Changes on `develop` ```bash +git checkout develop git add package.json CHANGELOG.md git commit -m "chore(release): bump version to X.Y.Z @@ -133,15 +151,32 @@ git commit -m "chore(release): bump version to X.Y.Z - Reference to issues/PRs if applicable Co-Authored-By: Claude Sonnet 4.5 " +git push origin develop ``` -### 5. Push to Main +### 5. Open PR: `develop` → `main` + +**NEVER push directly to `main`.** Always use a Pull Request. ```bash -git push origin main +# Create PR using GitHub CLI +gh pr create --base main --head develop \ + --title "chore(release): v X.Y.Z" \ + --body "## Release X.Y.Z + +- Summary of changes +- See CHANGELOG.md for details" ``` -**⏳ Wait for Auto-Release** - The automated workflow will now: +Or create the PR via the GitHub web interface. + +### 6. Review & Merge PR + +1. Verify CI checks pass on the PR +2. Review the changes +3. **Merge the PR** (squash or merge commit) + +**⏳ Wait for Auto-Release** — After merge, GitHub Actions will: 1. Detect the version change in `package.json` 2. Extract changelog for the new version 3. Create a git tag `vX.Y.Z` @@ -149,7 +184,7 @@ git push origin main You can monitor the progress in GitHub Actions. -### 6. Manual npm Publish +### 7. Manual npm Publish After the auto-release workflow completes (usually 1-2 minutes), manually publish to npm: @@ -163,7 +198,7 @@ npm view @pcircle/memesh version **Why Manual?** The auto-release workflow uses `GITHUB_TOKEN`, which cannot trigger the npm publish workflow due to GitHub's anti-loop protection. Manual publishing ensures controlled npm publication. -### 7. Monitor Automated Release Creation +### 8. Monitor Automated Release Creation #### Using GitHub CLI @@ -182,7 +217,7 @@ gh run list --workflow=auto-release.yml --limit 3 3. Verify tag creation and release creation steps succeed 4. Then check "Publish to npm" workflow -### 8. Automated Release Creation +### 9. Automated Release Creation The auto-release workflow (.github/workflows/auto-release.yml) is triggered when `package.json` is pushed to main: @@ -202,7 +237,7 @@ The auto-release workflow (.github/workflows/auto-release.yml) is triggered when **Note**: The publish-npm workflow exists but is NOT automatically triggered due to GitHub's token limitations. npm publication must be done manually (see step 6). -### 9. Monitor Workflows +### 10. Monitor Workflows #### Using GitHub CLI @@ -220,7 +255,7 @@ gh run list --workflow=auto-release.yml --limit 3 2. Check "Auto Release" workflow 3. Verify all steps complete successfully (tag and release creation) -### 10. Verify Publication +### 11. Verify Publication #### Check npm Registry @@ -440,11 +475,13 @@ If a release has critical issues: Use this checklist for every release: ### Manual Steps (You Do) -- [ ] Pull latest changes from main +- [ ] Pull latest `develop` branch - [ ] All tests pass locally - [ ] Version bumped in package.json (using `npm version`) - [ ] CHANGELOG.md updated with changes -- [ ] Changes committed and pushed to main +- [ ] Changes committed and pushed to `develop` +- [ ] PR opened: `develop` → `main` +- [ ] PR reviewed and merged ### Automated Steps (GitHub Actions Does) - [ ] ✨ Auto Release workflow detects version change From 15794a209e10eb144f82838b4596fcd6588bdebe Mon Sep 17 00:00:00 2001 From: KT <677465+kevintseng@users.noreply.github.com> Date: Mon, 16 Feb 2026 17:45:12 +0800 Subject: [PATCH 05/23] fix(hooks): allow force push to main, block only regular push Co-Authored-By: Claude Opus 4.6 --- .claude/hookify.warn-git-push-main.local.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.claude/hookify.warn-git-push-main.local.md b/.claude/hookify.warn-git-push-main.local.md index c5bdac78..e149f0f0 100644 --- a/.claude/hookify.warn-git-push-main.local.md +++ b/.claude/hookify.warn-git-push-main.local.md @@ -2,7 +2,7 @@ name: block-git-push-main enabled: true event: bash -pattern: git\s+push\s+.*\b(main|master)\b +pattern: git\s+push\s+(-u\s+)?(origin\s+)?(main|master)\b action: block --- From f474d3ade3f6118e6a665e3082d1ab2805bf2ac4 Mon Sep 17 00:00:00 2001 From: KT <677465+kevintseng@users.noreply.github.com> Date: Wed, 18 Feb 2026 22:40:12 +0800 Subject: [PATCH 06/23] fix(proxy): fix race condition causing MCP initialize to be lost on proxy startup setupStdinHandler() was called after await connectToDaemon(), causing a race condition: when stopStdinBufferingAndReplay() resumed stdin, the buffered 'initialize' message fired before the listener was registered, losing the message silently. Claude Code would wait 30s for a response, then close stdin. Fix: move setupStdinHandler() before the first await so the listener is registered synchronously before any event loop iteration. Co-Authored-By: Claude Sonnet 4.5 --- .../dist/mcp/daemon/StdioProxyClient.d.ts.map | 2 +- .../memesh/dist/mcp/daemon/StdioProxyClient.js | 10 +++++++++- .../dist/mcp/daemon/StdioProxyClient.js.map | 2 +- src/mcp/daemon/StdioProxyClient.ts | 17 ++++++++++++++++- 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/.claude-plugin/memesh/dist/mcp/daemon/StdioProxyClient.d.ts.map b/.claude-plugin/memesh/dist/mcp/daemon/StdioProxyClient.d.ts.map index 582c2348..9c499c00 100644 --- a/.claude-plugin/memesh/dist/mcp/daemon/StdioProxyClient.d.ts.map +++ b/.claude-plugin/memesh/dist/mcp/daemon/StdioProxyClient.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"StdioProxyClient.d.ts","sourceRoot":"","sources":["../../../src/mcp/daemon/StdioProxyClient.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"StdioProxyClient.d.ts","sourceRoot":"","sources":["../../../src/mcp/daemon/StdioProxyClient.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/daemon/StdioProxyClient.js b/.claude-plugin/memesh/dist/mcp/daemon/StdioProxyClient.js index 072e1860..8425ad7c 100644 --- a/.claude-plugin/memesh/dist/mcp/daemon/StdioProxyClient.js +++ b/.claude-plugin/memesh/dist/mcp/daemon/StdioProxyClient.js @@ -49,12 +49,20 @@ export class StdioProxyClient extends EventEmitter { throw new Error('Proxy client already started'); } this.stopped = false; + this.setupStdinHandler(); try { await this.connectToDaemon(); - this.setupStdinHandler(); this.startHeartbeat(); } catch (error) { + if (this.stdinDataListener) { + this.config.stdin.removeListener('data', this.stdinDataListener); + this.stdinDataListener = null; + } + if (this.stdinEndListener) { + this.config.stdin.removeListener('end', this.stdinEndListener); + this.stdinEndListener = null; + } this.stopped = true; throw error; } diff --git a/.claude-plugin/memesh/dist/mcp/daemon/StdioProxyClient.js.map b/.claude-plugin/memesh/dist/mcp/daemon/StdioProxyClient.js.map index 8ce78a80..15f8495a 100644 --- a/.claude-plugin/memesh/dist/mcp/daemon/StdioProxyClient.js.map +++ b/.claude-plugin/memesh/dist/mcp/daemon/StdioProxyClient.js.map @@ -1 +1 @@ -{"version":3,"file":"StdioProxyClient.js","sourceRoot":"","sources":["../../../src/mcp/daemon/StdioProxyClient.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"StdioProxyClient.js","sourceRoot":"","sources":["../../../src/mcp/daemon/StdioProxyClient.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/mcp/daemon/StdioProxyClient.ts b/src/mcp/daemon/StdioProxyClient.ts index 6d58b0fb..23c46f08 100644 --- a/src/mcp/daemon/StdioProxyClient.ts +++ b/src/mcp/daemon/StdioProxyClient.ts @@ -267,11 +267,26 @@ export class StdioProxyClient extends EventEmitter { this.stopped = false; + // IMPORTANT: Set up stdin handler BEFORE any async operations. + // stopStdinBufferingAndReplay() in server-bootstrap schedules a 'data' event + // on the next event loop tick. If we await connectToDaemon() first, the event + // loop runs and the buffered 'initialize' message is emitted with no listener, + // causing it to be lost. Claude Code then times out (30s) with no response. + this.setupStdinHandler(); + try { await this.connectToDaemon(); - this.setupStdinHandler(); this.startHeartbeat(); } catch (error) { + // Clean up stdin handlers if connection fails + if (this.stdinDataListener) { + this.config.stdin.removeListener('data', this.stdinDataListener); + this.stdinDataListener = null; + } + if (this.stdinEndListener) { + this.config.stdin.removeListener('end', this.stdinEndListener); + this.stdinEndListener = null; + } this.stopped = true; throw error; } From 89ffe405e33c793c41d3b5341563c139c597a0f5 Mon Sep 17 00:00:00 2001 From: KT <677465+kevintseng@users.noreply.github.com> Date: Wed, 25 Feb 2026 04:16:10 +0800 Subject: [PATCH 07/23] docs: update incorrect info in README Co-Authored-By: Claude Opus 4.6 --- README.md | 11 ++++------- README.zh-TW.md | 11 ++++------- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index f772ce65..bc61d6f8 100644 --- a/README.md +++ b/README.md @@ -108,21 +108,18 @@ MeMesh works seamlessly with: #### Claude Desktop Cowork Compatibility -**Current Status**: Cloud-only mode with limited functionality +**Current Status**: Limited functionality | Feature | Status | Notes | |---------|--------|-------| -| MCP Server | ✅ Works | Starts successfully in cloud-only mode | +| MCP Server | ✅ Works | Starts successfully | | Basic Commands | ✅ Works | buddy-help, list-skills, etc. | | Memory Tools | ❌ Disabled | recall-memory, create-entities, buddy-do, buddy-remember | -| Cloud Sync | ✅ Works | When MEMESH_API_KEY is configured | | Local Knowledge Graph | ❌ Unavailable | better-sqlite3 cannot compile in Cowork sandbox | **Why Limited**: Cowork sandbox has read-only filesystem and blocks native module compilation (better-sqlite3, onnxruntime-node, sqlite-vec). -**Future**: Full support planned through cloud-first memory architecture. See [docs/COWORK_SUPPORT.md](docs/COWORK_SUPPORT.md) for details. - -**Recommendation**: Use **CLI version** for full functionality until cloud-first memory is implemented. +**Recommendation**: Use **CLI version** for full functionality. ### Known Limitations @@ -201,6 +198,6 @@ AGPL-3.0 — See [LICENSE](LICENSE) Something not working? [Open an issue](https://github.com/PCIRCLE-AI/claude-code-buddy/issues/new) — we respond fast. -[Report Bug](https://github.com/PCIRCLE-AI/claude-code-buddy/issues/new?labels=bug&template=bug_report.md) • [Request Feature](https://github.com/PCIRCLE-AI/claude-code-buddy/discussions) +[Report Bug](https://github.com/PCIRCLE-AI/claude-code-buddy/issues/new?labels=bug&template=bug_report.yml) • [Request Feature](https://github.com/PCIRCLE-AI/claude-code-buddy/discussions) diff --git a/README.zh-TW.md b/README.zh-TW.md index cf2be0f8..f0735fca 100644 --- a/README.zh-TW.md +++ b/README.zh-TW.md @@ -108,21 +108,18 @@ MeMesh 可無縫整合: #### Claude Desktop Cowork 相容性 -**目前狀態**:僅雲端模式,功能受限 +**目前狀態**:功能受限 | 功能 | 狀態 | 備註 | |------|------|------| -| MCP 伺服器 | ✅ 正常 | 成功以僅雲端模式啟動 | +| MCP 伺服器 | ✅ 正常 | 成功啟動 | | 基本指令 | ✅ 正常 | buddy-help, list-skills 等 | | 記憶工具 | ❌ 停用 | recall-memory, create-entities, buddy-do, buddy-remember | -| 雲端同步 | ✅ 正常 | 需設定 MEMESH_API_KEY | | 本地知識圖譜 | ❌ 無法使用 | better-sqlite3 無法在 Cowork 沙盒編譯 | **限制原因**:Cowork 沙盒具有唯讀檔案系統,並阻止原生模組編譯(better-sqlite3、onnxruntime-node、sqlite-vec)。 -**未來計畫**:透過雲端優先記憶架構實現完整支援。詳見 [docs/COWORK_SUPPORT.md](docs/COWORK_SUPPORT.md)。 - -**建議**:在雲端優先記憶實作完成前,使用 **CLI 版本**以獲得完整功能。 +**建議**:使用 **CLI 版本**以獲得完整功能。 ### 已知限制 @@ -201,6 +198,6 @@ AGPL-3.0 — 詳見 [LICENSE](LICENSE) 遇到問題?[回報 Issue](https://github.com/PCIRCLE-AI/claude-code-buddy/issues/new) — 我們會快速回應。 -[回報 Bug](https://github.com/PCIRCLE-AI/claude-code-buddy/issues/new?labels=bug&template=bug_report.md) • [功能請求](https://github.com/PCIRCLE-AI/claude-code-buddy/discussions) +[回報 Bug](https://github.com/PCIRCLE-AI/claude-code-buddy/issues/new?labels=bug&template=bug_report.yml) • [功能請求](https://github.com/PCIRCLE-AI/claude-code-buddy/discussions) From ff247685f7ceada1f5160a0ec09c871afca1e4dd Mon Sep 17 00:00:00 2001 From: KT <677465+kevintseng@users.noreply.github.com> Date: Wed, 25 Feb 2026 04:32:33 +0800 Subject: [PATCH 08/23] chore: remove stale A2A artifacts from dist and demo (#89) A2A source code was previously removed from src/ but build artifacts and demo files were left behind. Remove 167 tracked files (dist/a2a, A2A tool handlers, hooks, and demo scene). Co-authored-by: Claude Opus 4.6 --- .../memesh/dist/a2a/client/A2AClient.d.ts | 29 -- .../memesh/dist/a2a/client/A2AClient.d.ts.map | 1 - .../memesh/dist/a2a/client/A2AClient.js | 376 ---------------- .../memesh/dist/a2a/client/A2AClient.js.map | 1 - .../memesh/dist/a2a/client/index.d.ts | 2 - .../memesh/dist/a2a/client/index.d.ts.map | 1 - .../memesh/dist/a2a/client/index.js | 2 - .../memesh/dist/a2a/client/index.js.map | 1 - .claude-plugin/memesh/dist/a2a/constants.d.ts | 34 -- .../memesh/dist/a2a/constants.d.ts.map | 1 - .claude-plugin/memesh/dist/a2a/constants.js | 34 -- .../memesh/dist/a2a/constants.js.map | 1 - .../dist/a2a/delegator/MCPTaskDelegator.d.ts | 19 - .../a2a/delegator/MCPTaskDelegator.d.ts.map | 1 - .../dist/a2a/delegator/MCPTaskDelegator.js | 184 -------- .../a2a/delegator/MCPTaskDelegator.js.map | 1 - .../memesh/dist/a2a/delegator/index.d.ts | 3 - .../memesh/dist/a2a/delegator/index.d.ts.map | 1 - .../memesh/dist/a2a/delegator/index.js | 2 - .../memesh/dist/a2a/delegator/index.js.map | 1 - .../memesh/dist/a2a/delegator/types.d.ts | 9 - .../memesh/dist/a2a/delegator/types.d.ts.map | 1 - .../memesh/dist/a2a/delegator/types.js | 2 - .../memesh/dist/a2a/delegator/types.js.map | 1 - .../memesh/dist/a2a/errors/ErrorCodes.d.ts | 30 -- .../dist/a2a/errors/ErrorCodes.d.ts.map | 1 - .../memesh/dist/a2a/errors/ErrorCodes.js | 29 -- .../memesh/dist/a2a/errors/ErrorCodes.js.map | 1 - .../memesh/dist/a2a/errors/ErrorMessages.d.ts | 32 -- .../dist/a2a/errors/ErrorMessages.d.ts.map | 1 - .../memesh/dist/a2a/errors/ErrorMessages.js | 55 --- .../dist/a2a/errors/ErrorMessages.js.map | 1 - .../memesh/dist/a2a/errors/index.d.ts | 3 - .../memesh/dist/a2a/errors/index.d.ts.map | 1 - .../memesh/dist/a2a/errors/index.js | 3 - .../memesh/dist/a2a/errors/index.js.map | 1 - .../dist/a2a/executor/TaskExecutor.d.ts | 11 - .../dist/a2a/executor/TaskExecutor.d.ts.map | 1 - .../memesh/dist/a2a/executor/TaskExecutor.js | 15 - .../dist/a2a/executor/TaskExecutor.js.map | 1 - .../memesh/dist/a2a/executor/index.d.ts | 2 - .../memesh/dist/a2a/executor/index.d.ts.map | 1 - .../memesh/dist/a2a/executor/index.js | 2 - .../memesh/dist/a2a/executor/index.js.map | 1 - .../memesh/dist/a2a/jobs/TimeoutChecker.d.ts | 49 --- .../dist/a2a/jobs/TimeoutChecker.d.ts.map | 1 - .../memesh/dist/a2a/jobs/TimeoutChecker.js | 176 -------- .../dist/a2a/jobs/TimeoutChecker.js.map | 1 - .../memesh/dist/a2a/metrics/A2AMetrics.d.ts | 38 -- .../dist/a2a/metrics/A2AMetrics.d.ts.map | 1 - .../memesh/dist/a2a/metrics/A2AMetrics.js | 142 ------- .../memesh/dist/a2a/metrics/A2AMetrics.js.map | 1 - .../memesh/dist/a2a/metrics/index.d.ts | 3 - .../memesh/dist/a2a/metrics/index.d.ts.map | 1 - .../memesh/dist/a2a/metrics/index.js | 2 - .../memesh/dist/a2a/metrics/index.js.map | 1 - .../memesh/dist/a2a/server/A2AServer.d.ts | 34 -- .../memesh/dist/a2a/server/A2AServer.d.ts.map | 1 - .../memesh/dist/a2a/server/A2AServer.js | 160 ------- .../memesh/dist/a2a/server/A2AServer.js.map | 1 - .../memesh/dist/a2a/server/index.d.ts | 4 - .../memesh/dist/a2a/server/index.d.ts.map | 1 - .../memesh/dist/a2a/server/index.js | 4 - .../memesh/dist/a2a/server/index.js.map | 1 - .../memesh/dist/a2a/server/middleware.d.ts | 6 - .../dist/a2a/server/middleware.d.ts.map | 1 - .../memesh/dist/a2a/server/middleware.js | 72 ---- .../memesh/dist/a2a/server/middleware.js.map | 1 - .../dist/a2a/server/middleware/auth.d.ts | 6 - .../dist/a2a/server/middleware/auth.d.ts.map | 1 - .../memesh/dist/a2a/server/middleware/auth.js | 64 --- .../dist/a2a/server/middleware/auth.js.map | 1 - .../dist/a2a/server/middleware/csrf.d.ts | 7 - .../dist/a2a/server/middleware/csrf.d.ts.map | 1 - .../memesh/dist/a2a/server/middleware/csrf.js | 169 -------- .../dist/a2a/server/middleware/csrf.js.map | 1 - .../dist/a2a/server/middleware/rateLimit.d.ts | 9 - .../a2a/server/middleware/rateLimit.d.ts.map | 1 - .../dist/a2a/server/middleware/rateLimit.js | 192 --------- .../a2a/server/middleware/rateLimit.js.map | 1 - .../server/middleware/resourceProtection.d.ts | 17 - .../middleware/resourceProtection.d.ts.map | 1 - .../server/middleware/resourceProtection.js | 258 ----------- .../middleware/resourceProtection.js.map | 1 - .../dist/a2a/server/middleware/timeout.d.ts | 4 - .../a2a/server/middleware/timeout.d.ts.map | 1 - .../dist/a2a/server/middleware/timeout.js | 56 --- .../dist/a2a/server/middleware/timeout.js.map | 1 - .../memesh/dist/a2a/server/routes.d.ts | 18 - .../memesh/dist/a2a/server/routes.d.ts.map | 1 - .../memesh/dist/a2a/server/routes.js | 176 -------- .../memesh/dist/a2a/server/routes.js.map | 1 - .../dist/a2a/server/validation/index.d.ts | 2 - .../dist/a2a/server/validation/index.d.ts.map | 1 - .../dist/a2a/server/validation/index.js | 2 - .../dist/a2a/server/validation/index.js.map | 1 - .../server/validation/sendMessageSchema.d.ts | 112 ----- .../validation/sendMessageSchema.d.ts.map | 1 - .../server/validation/sendMessageSchema.js | 143 ------- .../validation/sendMessageSchema.js.map | 1 - .../dist/a2a/storage/AgentRegistry.d.ts | 26 -- .../dist/a2a/storage/AgentRegistry.d.ts.map | 1 - .../memesh/dist/a2a/storage/AgentRegistry.js | 197 --------- .../dist/a2a/storage/AgentRegistry.js.map | 1 - .../memesh/dist/a2a/storage/TaskQueue.d.ts | 27 -- .../dist/a2a/storage/TaskQueue.d.ts.map | 1 - .../memesh/dist/a2a/storage/TaskQueue.js | 339 --------------- .../memesh/dist/a2a/storage/TaskQueue.js.map | 1 - .../dist/a2a/storage/ValidationError.d.ts | 7 - .../dist/a2a/storage/ValidationError.d.ts.map | 1 - .../dist/a2a/storage/ValidationError.js | 21 - .../dist/a2a/storage/ValidationError.js.map | 1 - .../memesh/dist/a2a/storage/index.d.ts | 3 - .../memesh/dist/a2a/storage/index.d.ts.map | 1 - .../memesh/dist/a2a/storage/index.js | 3 - .../memesh/dist/a2a/storage/index.js.map | 1 - .../dist/a2a/storage/inputValidation.d.ts | 18 - .../dist/a2a/storage/inputValidation.d.ts.map | 1 - .../dist/a2a/storage/inputValidation.js | 101 ----- .../dist/a2a/storage/inputValidation.js.map | 1 - .../dist/a2a/storage/registry-schemas.sql | 20 - .../memesh/dist/a2a/storage/schemas.sql | 64 --- .../memesh/dist/a2a/types/TaskResult.d.ts | 11 - .../memesh/dist/a2a/types/TaskResult.d.ts.map | 1 - .../memesh/dist/a2a/types/TaskResult.js | 2 - .../memesh/dist/a2a/types/TaskResult.js.map | 1 - .../memesh/dist/a2a/types/agent-card.d.ts | 59 --- .../memesh/dist/a2a/types/agent-card.d.ts.map | 1 - .../memesh/dist/a2a/types/agent-card.js | 2 - .../memesh/dist/a2a/types/agent-card.js.map | 1 - .../memesh/dist/a2a/types/index.d.ts | 8 - .../memesh/dist/a2a/types/index.d.ts.map | 1 - .claude-plugin/memesh/dist/a2a/types/index.js | 2 - .../memesh/dist/a2a/types/index.js.map | 1 - .../memesh/dist/a2a/types/message.d.ts | 16 - .../memesh/dist/a2a/types/message.d.ts.map | 1 - .../memesh/dist/a2a/types/message.js | 2 - .../memesh/dist/a2a/types/message.js.map | 1 - .../memesh/dist/a2a/types/protocol.d.ts | 60 --- .../memesh/dist/a2a/types/protocol.d.ts.map | 1 - .../memesh/dist/a2a/types/protocol.js | 2 - .../memesh/dist/a2a/types/protocol.js.map | 1 - .../memesh/dist/a2a/types/rateLimit.d.ts | 26 -- .../memesh/dist/a2a/types/rateLimit.d.ts.map | 1 - .../memesh/dist/a2a/types/rateLimit.js | 2 - .../memesh/dist/a2a/types/rateLimit.js.map | 1 - .../memesh/dist/a2a/types/task.d.ts | 76 ---- .../memesh/dist/a2a/types/task.d.ts.map | 1 - .claude-plugin/memesh/dist/a2a/types/task.js | 17 - .../memesh/dist/a2a/types/task.js.map | 1 - .../memesh/dist/hooks/a2a-collaboration.d.ts | 30 -- .../dist/hooks/a2a-collaboration.d.ts.map | 1 - .../memesh/dist/hooks/a2a-collaboration.js | 400 ------------------ .../dist/hooks/a2a-collaboration.js.map | 1 - .../dist/mcp/handlers/A2AToolHandlers.d.ts | 22 - .../mcp/handlers/A2AToolHandlers.d.ts.map | 1 - .../dist/mcp/handlers/A2AToolHandlers.js | 325 -------------- .../dist/mcp/handlers/A2AToolHandlers.js.map | 1 - .../memesh/dist/mcp/tools/a2a-list-tasks.d.ts | 13 - .../dist/mcp/tools/a2a-list-tasks.d.ts.map | 1 - .../memesh/dist/mcp/tools/a2a-list-tasks.js | 26 -- .../dist/mcp/tools/a2a-list-tasks.js.map | 1 - .../dist/mcp/tools/a2a-report-result.d.ts | 35 -- .../dist/mcp/tools/a2a-report-result.d.ts.map | 1 - .../dist/mcp/tools/a2a-report-result.js | 73 ---- .../dist/mcp/tools/a2a-report-result.js.map | 1 - media/demo-video/src/scenes/A2AScene.tsx | 183 -------- 167 files changed, 5103 deletions(-) delete mode 100644 .claude-plugin/memesh/dist/a2a/client/A2AClient.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/client/A2AClient.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/client/A2AClient.js delete mode 100644 .claude-plugin/memesh/dist/a2a/client/A2AClient.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/client/index.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/client/index.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/client/index.js delete mode 100644 .claude-plugin/memesh/dist/a2a/client/index.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/constants.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/constants.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/constants.js delete mode 100644 .claude-plugin/memesh/dist/a2a/constants.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/delegator/MCPTaskDelegator.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/delegator/MCPTaskDelegator.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/delegator/MCPTaskDelegator.js delete mode 100644 .claude-plugin/memesh/dist/a2a/delegator/MCPTaskDelegator.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/delegator/index.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/delegator/index.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/delegator/index.js delete mode 100644 .claude-plugin/memesh/dist/a2a/delegator/index.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/delegator/types.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/delegator/types.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/delegator/types.js delete mode 100644 .claude-plugin/memesh/dist/a2a/delegator/types.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/errors/ErrorCodes.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/errors/ErrorCodes.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/errors/ErrorCodes.js delete mode 100644 .claude-plugin/memesh/dist/a2a/errors/ErrorCodes.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/errors/ErrorMessages.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/errors/ErrorMessages.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/errors/ErrorMessages.js delete mode 100644 .claude-plugin/memesh/dist/a2a/errors/ErrorMessages.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/errors/index.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/errors/index.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/errors/index.js delete mode 100644 .claude-plugin/memesh/dist/a2a/errors/index.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/executor/TaskExecutor.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/executor/TaskExecutor.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/executor/TaskExecutor.js delete mode 100644 .claude-plugin/memesh/dist/a2a/executor/TaskExecutor.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/executor/index.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/executor/index.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/executor/index.js delete mode 100644 .claude-plugin/memesh/dist/a2a/executor/index.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/jobs/TimeoutChecker.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/jobs/TimeoutChecker.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/jobs/TimeoutChecker.js delete mode 100644 .claude-plugin/memesh/dist/a2a/jobs/TimeoutChecker.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/metrics/A2AMetrics.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/metrics/A2AMetrics.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/metrics/A2AMetrics.js delete mode 100644 .claude-plugin/memesh/dist/a2a/metrics/A2AMetrics.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/metrics/index.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/metrics/index.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/metrics/index.js delete mode 100644 .claude-plugin/memesh/dist/a2a/metrics/index.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/server/A2AServer.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/server/A2AServer.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/server/A2AServer.js delete mode 100644 .claude-plugin/memesh/dist/a2a/server/A2AServer.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/server/index.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/server/index.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/server/index.js delete mode 100644 .claude-plugin/memesh/dist/a2a/server/index.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/server/middleware.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/server/middleware.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/server/middleware.js delete mode 100644 .claude-plugin/memesh/dist/a2a/server/middleware.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/server/middleware/auth.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/server/middleware/auth.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/server/middleware/auth.js delete mode 100644 .claude-plugin/memesh/dist/a2a/server/middleware/auth.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/server/middleware/csrf.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/server/middleware/csrf.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/server/middleware/csrf.js delete mode 100644 .claude-plugin/memesh/dist/a2a/server/middleware/csrf.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/server/middleware/rateLimit.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/server/middleware/rateLimit.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/server/middleware/rateLimit.js delete mode 100644 .claude-plugin/memesh/dist/a2a/server/middleware/rateLimit.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/server/middleware/resourceProtection.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/server/middleware/resourceProtection.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/server/middleware/resourceProtection.js delete mode 100644 .claude-plugin/memesh/dist/a2a/server/middleware/resourceProtection.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/server/middleware/timeout.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/server/middleware/timeout.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/server/middleware/timeout.js delete mode 100644 .claude-plugin/memesh/dist/a2a/server/middleware/timeout.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/server/routes.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/server/routes.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/server/routes.js delete mode 100644 .claude-plugin/memesh/dist/a2a/server/routes.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/server/validation/index.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/server/validation/index.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/server/validation/index.js delete mode 100644 .claude-plugin/memesh/dist/a2a/server/validation/index.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/server/validation/sendMessageSchema.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/server/validation/sendMessageSchema.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/server/validation/sendMessageSchema.js delete mode 100644 .claude-plugin/memesh/dist/a2a/server/validation/sendMessageSchema.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/storage/AgentRegistry.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/storage/AgentRegistry.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/storage/AgentRegistry.js delete mode 100644 .claude-plugin/memesh/dist/a2a/storage/AgentRegistry.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/storage/TaskQueue.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/storage/TaskQueue.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/storage/TaskQueue.js delete mode 100644 .claude-plugin/memesh/dist/a2a/storage/TaskQueue.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/storage/ValidationError.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/storage/ValidationError.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/storage/ValidationError.js delete mode 100644 .claude-plugin/memesh/dist/a2a/storage/ValidationError.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/storage/index.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/storage/index.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/storage/index.js delete mode 100644 .claude-plugin/memesh/dist/a2a/storage/index.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/storage/inputValidation.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/storage/inputValidation.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/storage/inputValidation.js delete mode 100644 .claude-plugin/memesh/dist/a2a/storage/inputValidation.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/storage/registry-schemas.sql delete mode 100644 .claude-plugin/memesh/dist/a2a/storage/schemas.sql delete mode 100644 .claude-plugin/memesh/dist/a2a/types/TaskResult.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/types/TaskResult.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/types/TaskResult.js delete mode 100644 .claude-plugin/memesh/dist/a2a/types/TaskResult.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/types/agent-card.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/types/agent-card.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/types/agent-card.js delete mode 100644 .claude-plugin/memesh/dist/a2a/types/agent-card.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/types/index.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/types/index.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/types/index.js delete mode 100644 .claude-plugin/memesh/dist/a2a/types/index.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/types/message.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/types/message.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/types/message.js delete mode 100644 .claude-plugin/memesh/dist/a2a/types/message.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/types/protocol.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/types/protocol.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/types/protocol.js delete mode 100644 .claude-plugin/memesh/dist/a2a/types/protocol.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/types/rateLimit.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/types/rateLimit.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/types/rateLimit.js delete mode 100644 .claude-plugin/memesh/dist/a2a/types/rateLimit.js.map delete mode 100644 .claude-plugin/memesh/dist/a2a/types/task.d.ts delete mode 100644 .claude-plugin/memesh/dist/a2a/types/task.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/a2a/types/task.js delete mode 100644 .claude-plugin/memesh/dist/a2a/types/task.js.map delete mode 100644 .claude-plugin/memesh/dist/hooks/a2a-collaboration.d.ts delete mode 100644 .claude-plugin/memesh/dist/hooks/a2a-collaboration.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/hooks/a2a-collaboration.js delete mode 100644 .claude-plugin/memesh/dist/hooks/a2a-collaboration.js.map delete mode 100644 .claude-plugin/memesh/dist/mcp/handlers/A2AToolHandlers.d.ts delete mode 100644 .claude-plugin/memesh/dist/mcp/handlers/A2AToolHandlers.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/mcp/handlers/A2AToolHandlers.js delete mode 100644 .claude-plugin/memesh/dist/mcp/handlers/A2AToolHandlers.js.map delete mode 100644 .claude-plugin/memesh/dist/mcp/tools/a2a-list-tasks.d.ts delete mode 100644 .claude-plugin/memesh/dist/mcp/tools/a2a-list-tasks.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/mcp/tools/a2a-list-tasks.js delete mode 100644 .claude-plugin/memesh/dist/mcp/tools/a2a-list-tasks.js.map delete mode 100644 .claude-plugin/memesh/dist/mcp/tools/a2a-report-result.d.ts delete mode 100644 .claude-plugin/memesh/dist/mcp/tools/a2a-report-result.d.ts.map delete mode 100644 .claude-plugin/memesh/dist/mcp/tools/a2a-report-result.js delete mode 100644 .claude-plugin/memesh/dist/mcp/tools/a2a-report-result.js.map delete mode 100644 media/demo-video/src/scenes/A2AScene.tsx diff --git a/.claude-plugin/memesh/dist/a2a/client/A2AClient.d.ts b/.claude-plugin/memesh/dist/a2a/client/A2AClient.d.ts deleted file mode 100644 index 4f53901e..00000000 --- a/.claude-plugin/memesh/dist/a2a/client/A2AClient.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -import type { SendMessageRequest, SendMessageResponse, Task, TaskStatus, TaskState, AgentCard, TaskResult } from '../types/index.js'; -import { type RetryOptions } from '../../utils/retry.js'; -export declare class A2AClient { - private registry; - private retryConfig; - constructor(retryConfig?: Partial); - private validateId; - private getAuthHeaders; - private fetchWithTimeout; - private isRetryableHttpError; - sendMessage(targetAgentId: string, request: SendMessageRequest): Promise; - getTask(targetAgentId: string, taskId: string): Promise; - listTasks(targetAgentId: string, params?: { - status?: string; - limit?: number; - offset?: number; - }): Promise; - getAgentCard(targetAgentId: string): Promise; - cancelTask(targetAgentId: string, taskId: string): Promise; - getTaskResult(targetAgentId: string, taskId: string): Promise; - updateTaskState(taskId: string, state: TaskState, data?: { - result?: unknown; - error?: string; - }): Promise; - private validateContentType; - private handleResponse; - listAvailableAgents(): string[]; -} -//# sourceMappingURL=A2AClient.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/client/A2AClient.d.ts.map b/.claude-plugin/memesh/dist/a2a/client/A2AClient.d.ts.map deleted file mode 100644 index dc59d89a..00000000 --- a/.claude-plugin/memesh/dist/a2a/client/A2AClient.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"A2AClient.d.ts","sourceRoot":"","sources":["../../../src/a2a/client/A2AClient.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EAEnB,IAAI,EACJ,UAAU,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACX,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAoH3E,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,WAAW,CAAe;gBAStB,WAAW,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC;IA6C/C,OAAO,CAAC,UAAU;IAmBlB,OAAO,CAAC,cAAc;YAgCR,gBAAgB;IA4D9B,OAAO,CAAC,oBAAoB;IA6BtB,WAAW,CACf,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,mBAAmB,CAAC;IA8BzB,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmC7D,SAAS,CACb,aAAa,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5D,OAAO,CAAC,UAAU,EAAE,CAAC;IAmClB,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IA6BvD,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6DhE,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAyDzE,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,SAAS,EAChB,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAC1C,OAAO,CAAC,IAAI,CAAC;IA8DhB,OAAO,CAAC,mBAAmB;YAgBb,cAAc;IA8D5B,mBAAmB,IAAI,MAAM,EAAE;CAGhC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/client/A2AClient.js b/.claude-plugin/memesh/dist/a2a/client/A2AClient.js deleted file mode 100644 index e40fd3f3..00000000 --- a/.claude-plugin/memesh/dist/a2a/client/A2AClient.js +++ /dev/null @@ -1,376 +0,0 @@ -import { AgentRegistry } from '../storage/AgentRegistry.js'; -import { ErrorCodes, createError, getErrorMessage } from '../errors/index.js'; -import { retryWithBackoff } from '../../utils/retry.js'; -import { getTraceContext, injectTraceContext, } from '../../utils/tracing/index.js'; -import { logger } from '../../utils/logger.js'; -import { z } from 'zod'; -const RETRY_BOUNDS = { - maxRetries: { min: 0, max: 10, default: 3 }, - baseDelay: { min: 100, max: 60_000, default: 1_000 }, - timeout: { min: 1_000, max: 300_000, default: 30_000 }, -}; -const MAX_RESPONSE_SIZE = 10_000_000; -const TaskResultSchema = z.object({ - taskId: z.string().max(255), - state: z.enum(['COMPLETED', 'FAILED', 'TIMEOUT']), - success: z.boolean(), - result: z.unknown().optional(), - error: z.string().max(10_000).optional(), - executedAt: z.string().datetime(), - executedBy: z.string().max(255), - durationMs: z.number().min(0).max(86_400_000).optional(), -}); -function clampRetryValue(raw, name, bounds) { - if (Number.isNaN(raw)) { - logger.warn(`[A2AClient] Invalid (NaN) env var for ${name}, using default ${bounds.default}`); - return bounds.default; - } - if (raw < bounds.min) { - logger.warn(`[A2AClient] ${name} value ${raw} is below minimum ${bounds.min}, clamping to ${bounds.min}`); - return bounds.min; - } - if (raw > bounds.max) { - logger.warn(`[A2AClient] ${name} value ${raw} exceeds maximum ${bounds.max}, clamping to ${bounds.max}`); - return bounds.max; - } - return raw; -} -export class A2AClient { - registry; - retryConfig; - constructor(retryConfig) { - this.registry = AgentRegistry.getInstance(); - const envMaxRetries = clampRetryValue(parseInt(process.env.A2A_RETRY_MAX_ATTEMPTS || String(RETRY_BOUNDS.maxRetries.default), 10), 'maxRetries', RETRY_BOUNDS.maxRetries); - const envBaseDelay = clampRetryValue(parseInt(process.env.A2A_RETRY_INITIAL_DELAY_MS || String(RETRY_BOUNDS.baseDelay.default), 10), 'baseDelay', RETRY_BOUNDS.baseDelay); - const envTimeout = clampRetryValue(parseInt(process.env.A2A_RETRY_TIMEOUT_MS || String(RETRY_BOUNDS.timeout.default), 10), 'timeout', RETRY_BOUNDS.timeout); - this.retryConfig = { - maxRetries: envMaxRetries, - baseDelay: envBaseDelay, - enableJitter: true, - retryableStatusCodes: [429, 500, 502, 503, 504], - timeout: envTimeout, - ...retryConfig, - }; - } - validateId(id, fieldName) { - if (!id || typeof id !== 'string') { - throw createError(ErrorCodes.INVALID_PARAMETER, fieldName, 'must be non-empty string'); - } - if (id.length > 255) { - throw createError(ErrorCodes.INVALID_PARAMETER, fieldName, 'exceeds maximum length of 255'); - } - if (id.includes('..') || id.includes('/') || id.includes('\\')) { - throw createError(ErrorCodes.INVALID_PARAMETER, fieldName, 'contains invalid characters'); - } - } - getAuthHeaders() { - const token = process.env.MEMESH_A2A_TOKEN; - if (!token) { - throw createError(ErrorCodes.AUTH_TOKEN_NOT_CONFIGURED); - } - let headers = { - 'Content-Type': 'application/json', - 'Authorization': `Bearer ${token}`, - }; - const traceContext = getTraceContext(); - if (traceContext) { - headers = injectTraceContext(headers, traceContext); - } - return headers; - } - async fetchWithTimeout(url, options) { - const controller = new AbortController(); - let completed = false; - const timeoutId = setTimeout(() => { - if (!completed) { - controller.abort(); - } - }, this.retryConfig.timeout); - try { - const response = await fetch(url, { - ...options, - signal: controller.signal, - }); - completed = true; - return response; - } - catch (error) { - completed = true; - if (error instanceof Error && error.name === 'AbortError') { - throw createError(ErrorCodes.REQUEST_TIMEOUT, url, this.retryConfig.timeout); - } - throw error; - } - finally { - clearTimeout(timeoutId); - } - } - isRetryableHttpError(error) { - if (error && typeof error === 'object') { - const errorObj = error; - if (errorObj.code === ErrorCodes.REQUEST_TIMEOUT) { - return true; - } - if (errorObj.status !== undefined) { - const status = errorObj.status; - if (status === 401 || status === 403) { - return false; - } - if (status >= 400 && status < 500 && status !== 429) { - return false; - } - return true; - } - } - return false; - } - async sendMessage(targetAgentId, request) { - try { - return await retryWithBackoff(async () => { - const agent = this.registry.get(targetAgentId); - if (!agent) { - throw createError(ErrorCodes.AGENT_NOT_FOUND, targetAgentId); - } - const url = `${agent.baseUrl}/a2a/send-message`; - const response = await this.fetchWithTimeout(url, { - method: 'POST', - headers: this.getAuthHeaders(), - body: JSON.stringify(request), - }); - return await this.handleResponse(response); - }, { - ...this.retryConfig, - operationName: `A2A sendMessage to ${targetAgentId}`, - isRetryable: this.isRetryableHttpError.bind(this), - }); - } - catch (error) { - throw createError(ErrorCodes.TASK_SEND_FAILED, targetAgentId, getErrorMessage(error)); - } - } - async getTask(targetAgentId, taskId) { - try { - return await retryWithBackoff(async () => { - const agent = this.registry.get(targetAgentId); - if (!agent) { - throw createError(ErrorCodes.AGENT_NOT_FOUND, targetAgentId); - } - const url = `${agent.baseUrl}/a2a/tasks/${encodeURIComponent(taskId)}`; - const response = await this.fetchWithTimeout(url, { - method: 'GET', - headers: this.getAuthHeaders(), - }); - return await this.handleResponse(response); - }, { - ...this.retryConfig, - operationName: `A2A getTask ${taskId} from ${targetAgentId}`, - isRetryable: this.isRetryableHttpError.bind(this), - }); - } - catch (error) { - throw createError(ErrorCodes.TASK_GET_FAILED, taskId, targetAgentId, getErrorMessage(error)); - } - } - async listTasks(targetAgentId, params) { - try { - return await retryWithBackoff(async () => { - const agent = this.registry.get(targetAgentId); - if (!agent) { - throw createError(ErrorCodes.AGENT_NOT_FOUND, targetAgentId); - } - const queryParams = new URLSearchParams(); - if (params?.status) - queryParams.set('status', params.status); - if (params?.limit !== undefined) - queryParams.set('limit', params.limit.toString()); - if (params?.offset !== undefined) - queryParams.set('offset', params.offset.toString()); - const url = `${agent.baseUrl}/a2a/tasks?${queryParams.toString()}`; - const response = await this.fetchWithTimeout(url, { - method: 'GET', - headers: this.getAuthHeaders(), - }); - return await this.handleResponse(response); - }, { - ...this.retryConfig, - operationName: `A2A listTasks from ${targetAgentId}`, - isRetryable: this.isRetryableHttpError.bind(this), - }); - } - catch (error) { - throw createError(ErrorCodes.TASK_LIST_FAILED, targetAgentId, getErrorMessage(error)); - } - } - async getAgentCard(targetAgentId) { - try { - return await retryWithBackoff(async () => { - const agent = this.registry.get(targetAgentId); - if (!agent) { - throw createError(ErrorCodes.AGENT_NOT_FOUND, targetAgentId); - } - const url = `${agent.baseUrl}/a2a/agent-card`; - const response = await this.fetchWithTimeout(url, { - method: 'GET', - headers: this.getAuthHeaders(), - }); - return await this.handleResponse(response); - }, { - ...this.retryConfig, - operationName: `A2A getAgentCard from ${targetAgentId}`, - isRetryable: this.isRetryableHttpError.bind(this), - }); - } - catch (error) { - throw createError(ErrorCodes.AGENT_REGISTRY_ERROR, getErrorMessage(error)); - } - } - async cancelTask(targetAgentId, taskId) { - try { - await retryWithBackoff(async () => { - const agent = this.registry.get(targetAgentId); - if (!agent) { - throw createError(ErrorCodes.AGENT_NOT_FOUND, targetAgentId); - } - const url = `${agent.baseUrl}/a2a/tasks/${encodeURIComponent(taskId)}/cancel`; - const response = await this.fetchWithTimeout(url, { - method: 'POST', - headers: this.getAuthHeaders(), - }); - return await this.handleResponse(response); - }, { - ...this.retryConfig, - operationName: `A2A cancelTask ${taskId} on ${targetAgentId}`, - isRetryable: this.isRetryableHttpError.bind(this), - }); - } - catch (error) { - throw createError(ErrorCodes.TASK_CANCEL_FAILED, taskId, targetAgentId, getErrorMessage(error)); - } - } - async getTaskResult(targetAgentId, taskId) { - this.validateId(targetAgentId, 'targetAgentId'); - this.validateId(taskId, 'taskId'); - try { - return await retryWithBackoff(async () => { - const agent = this.registry.get(targetAgentId); - if (!agent) { - throw createError(ErrorCodes.AGENT_NOT_FOUND, targetAgentId); - } - const url = `${agent.baseUrl}/a2a/tasks/${encodeURIComponent(taskId)}/result`; - const response = await this.fetchWithTimeout(url, { - method: 'GET', - headers: this.getAuthHeaders(), - }); - const rawResult = await this.handleResponse(response); - const validatedResult = TaskResultSchema.parse(rawResult); - return validatedResult; - }, { - ...this.retryConfig, - operationName: `A2A getTaskResult ${taskId} from ${targetAgentId}`, - isRetryable: this.isRetryableHttpError.bind(this), - }); - } - catch (error) { - if (error instanceof z.ZodError) { - throw createError(ErrorCodes.INVALID_RESPONSE_SCHEMA, error.message); - } - throw createError(ErrorCodes.TASK_GET_FAILED, taskId, targetAgentId, getErrorMessage(error)); - } - } - async updateTaskState(taskId, state, data) { - try { - return await retryWithBackoff(async () => { - const url = `${process.env.MEMESH_BASE_URL || 'http://localhost:3000'}/a2a/tasks/${encodeURIComponent(taskId)}/state`; - const response = await this.fetchWithTimeout(url, { - method: 'PATCH', - headers: this.getAuthHeaders(), - body: JSON.stringify({ - state, - ...data, - }), - }); - if (!response.ok) { - let errorMessage; - try { - const errorData = await response.json(); - errorMessage = errorData.message; - } - catch (jsonError) { - if (process.env.NODE_ENV !== 'test') { - console.warn(`[A2AClient] Failed to parse error response as JSON for task ${taskId}:`, jsonError instanceof Error ? jsonError.message : String(jsonError)); - } - } - throw createError(ErrorCodes.HTTP_ERROR, response.status, errorMessage); - } - }, { - ...this.retryConfig, - operationName: `A2A updateTaskState ${taskId} to ${state}`, - isRetryable: this.isRetryableHttpError.bind(this), - }); - } - catch (error) { - throw createError(ErrorCodes.TASK_UPDATE_FAILED, taskId, state, getErrorMessage(error)); - } - } - validateContentType(response) { - const contentType = response.headers.get('content-type'); - if (!contentType) { - logger.warn('[A2AClient] Response missing Content-Type header', { - status: response.status, - url: response.url, - }); - return; - } - if (!contentType.includes('application/json')) { - throw createError(ErrorCodes.INVALID_CONTENT_TYPE, contentType, response.status); - } - } - async handleResponse(response) { - this.validateContentType(response); - const contentLength = response.headers.get('content-length'); - if (contentLength && parseInt(contentLength) > MAX_RESPONSE_SIZE) { - throw createError(ErrorCodes.RESPONSE_TOO_LARGE, contentLength); - } - if (!response.ok) { - if (response.status === 401) { - throw createError(ErrorCodes.AUTH_FAILED); - } - let errorMessage; - try { - const errorData = (await response.json()); - if (errorData.error) { - errorMessage = errorData.error.message; - } - } - catch (jsonError) { - if (process.env.NODE_ENV !== 'test') { - console.warn(`[A2AClient] Failed to parse error response as JSON (HTTP ${response.status}):`, jsonError instanceof Error ? jsonError.message : String(jsonError)); - } - } - throw createError(ErrorCodes.HTTP_ERROR, response.status, errorMessage); - } - let result; - try { - const text = await response.clone().text(); - if (text.length > MAX_RESPONSE_SIZE) { - throw createError(ErrorCodes.RESPONSE_TOO_LARGE, text.length); - } - result = JSON.parse(text); - } - catch (error) { - if (error && typeof error === 'object' && 'code' in error && error.code === ErrorCodes.RESPONSE_TOO_LARGE) { - throw error; - } - result = (await response.json()); - } - if (!result.success || !result.data) { - const error = result.error || { code: 'UNKNOWN', message: 'Unknown error' }; - throw new Error(`[${error.code}] ${error.message}`); - } - return result.data; - } - listAvailableAgents() { - return this.registry.listActive().map((agent) => agent.agentId); - } -} -//# sourceMappingURL=A2AClient.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/client/A2AClient.js.map b/.claude-plugin/memesh/dist/a2a/client/A2AClient.js.map deleted file mode 100644 index 703b7ef1..00000000 --- a/.claude-plugin/memesh/dist/a2a/client/A2AClient.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"A2AClient.js","sourceRoot":"","sources":["../../../src/a2a/client/A2AClient.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAqB,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EACL,eAAe,EACf,kBAAkB,GACnB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,MAAM,YAAY,GAAG;IACnB,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;IAC3C,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE;IACpD,OAAO,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE;CAC9C,CAAC;AAeX,MAAM,iBAAiB,GAAG,UAAU,CAAC;AAQrC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IACjD,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;IACxC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;IAC/B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE;CACzD,CAAC,CAAC;AAaH,SAAS,eAAe,CACtB,GAAW,EACX,IAAY,EACZ,MAAqD;IAErD,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,CAAC,IAAI,CAAC,yCAAyC,IAAI,mBAAmB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9F,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CACT,eAAe,IAAI,UAAU,GAAG,qBAAqB,MAAM,CAAC,GAAG,iBAAiB,MAAM,CAAC,GAAG,EAAE,CAC7F,CAAC;QACF,OAAO,MAAM,CAAC,GAAG,CAAC;IACpB,CAAC;IAED,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CACT,eAAe,IAAI,UAAU,GAAG,oBAAoB,MAAM,CAAC,GAAG,iBAAiB,MAAM,CAAC,GAAG,EAAE,CAC5F,CAAC;QACF,OAAO,MAAM,CAAC,GAAG,CAAC;IACpB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AA4BD,MAAM,OAAO,SAAS;IACZ,QAAQ,CAAgB;IACxB,WAAW,CAAe;IASlC,YAAY,WAAmC;QAC7C,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;QAG5C,MAAM,aAAa,GAAG,eAAe,CACnC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,EAC3F,YAAY,EACZ,YAAY,CAAC,UAAU,CACxB,CAAC;QACF,MAAM,YAAY,GAAG,eAAe,CAClC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,EAC9F,WAAW,EACX,YAAY,CAAC,SAAS,CACvB,CAAC;QACF,MAAM,UAAU,GAAG,eAAe,CAChC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,EACtF,SAAS,EACT,YAAY,CAAC,OAAO,CACrB,CAAC;QAKF,IAAI,CAAC,WAAW,GAAG;YACjB,UAAU,EAAE,aAAa;YACzB,SAAS,EAAE,YAAY;YACvB,YAAY,EAAE,IAAI;YAClB,oBAAoB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;YAC/C,OAAO,EAAE,UAAU;YACnB,GAAG,WAAW;SACf,CAAC;IACJ,CAAC;IAcO,UAAU,CAAC,EAAU,EAAE,SAAiB;QAC9C,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;YAClC,MAAM,WAAW,CAAC,UAAU,CAAC,iBAAiB,EAAE,SAAS,EAAE,0BAA0B,CAAC,CAAC;QACzF,CAAC;QAED,IAAI,EAAE,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACpB,MAAM,WAAW,CAAC,UAAU,CAAC,iBAAiB,EAAE,SAAS,EAAE,+BAA+B,CAAC,CAAC;QAC9F,CAAC;QAGD,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/D,MAAM,WAAW,CAAC,UAAU,CAAC,iBAAiB,EAAE,SAAS,EAAE,6BAA6B,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;IAMO,cAAc;QACpB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,WAAW,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,OAAO,GAA2B;YACpC,cAAc,EAAE,kBAAkB;YAClC,eAAe,EAAE,UAAU,KAAK,EAAE;SACnC,CAAC;QAGF,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;QACvC,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,GAAG,kBAAkB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACtD,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAcO,KAAK,CAAC,gBAAgB,CAAC,GAAW,EAAE,OAAoB;QAC9D,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAChC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAE7B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,GAAG,OAAO;gBACV,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YACH,SAAS,GAAG,IAAI,CAAC;YACjB,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,IAAI,CAAC;YAEjB,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC1D,MAAM,WAAW,CAAC,UAAU,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC/E,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAiCO,oBAAoB,CAAC,KAAc;QAEzC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,KAA2C,CAAC;YAG7D,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,CAAC,eAAe,EAAE,CAAC;gBACjD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;gBAE/B,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;oBACrC,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;oBACpD,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAGD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,WAAW,CACf,aAAqB,EACrB,OAA2B;QAE3B,IAAI,CAAC;YACH,OAAO,MAAM,gBAAgB,CAC3B,KAAK,IAAI,EAAE;gBACT,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;gBAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,MAAM,WAAW,CAAC,UAAU,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;gBAC/D,CAAC;gBAED,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,OAAO,mBAAmB,CAAC;gBAEhD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE;oBAChD,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE;oBAC9B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;iBAC9B,CAAC,CAAC;gBAEH,OAAO,MAAM,IAAI,CAAC,cAAc,CAAsB,QAAQ,CAAC,CAAC;YAClE,CAAC,EACD;gBACE,GAAG,IAAI,CAAC,WAAW;gBACnB,aAAa,EAAE,sBAAsB,aAAa,EAAE;gBACpD,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;aAClD,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,WAAW,CAAC,UAAU,CAAC,gBAAgB,EAAE,aAAa,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,aAAqB,EAAE,MAAc;QACjD,IAAI,CAAC;YACH,OAAO,MAAM,gBAAgB,CAC3B,KAAK,IAAI,EAAE;gBACT,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;gBAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,MAAM,WAAW,CAAC,UAAU,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;gBAC/D,CAAC;gBAGD,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,OAAO,cAAc,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;gBAEvE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE;oBAChD,MAAM,EAAE,KAAK;oBACb,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE;iBAC/B,CAAC,CAAC;gBAEH,OAAO,MAAM,IAAI,CAAC,cAAc,CAAO,QAAQ,CAAC,CAAC;YACnD,CAAC,EACD;gBACE,GAAG,IAAI,CAAC,WAAW;gBACnB,aAAa,EAAE,eAAe,MAAM,SAAS,aAAa,EAAE;gBAC5D,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;aAClD,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,WAAW,CACf,UAAU,CAAC,eAAe,EAC1B,MAAM,EACN,aAAa,EACb,eAAe,CAAC,KAAK,CAAC,CACvB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CACb,aAAqB,EACrB,MAA6D;QAE7D,IAAI,CAAC;YACH,OAAO,MAAM,gBAAgB,CAC3B,KAAK,IAAI,EAAE;gBACT,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;gBAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,MAAM,WAAW,CAAC,UAAU,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;gBAC/D,CAAC;gBAED,MAAM,WAAW,GAAG,IAAI,eAAe,EAAE,CAAC;gBAC1C,IAAI,MAAM,EAAE,MAAM;oBAAE,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;gBAE7D,IAAI,MAAM,EAAE,KAAK,KAAK,SAAS;oBAAE,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACnF,IAAI,MAAM,EAAE,MAAM,KAAK,SAAS;oBAAE,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAEtF,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,OAAO,cAAc,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC;gBAEnE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE;oBAChD,MAAM,EAAE,KAAK;oBACb,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE;iBAC/B,CAAC,CAAC;gBAEH,OAAO,MAAM,IAAI,CAAC,cAAc,CAAe,QAAQ,CAAC,CAAC;YAC3D,CAAC,EACD;gBACE,GAAG,IAAI,CAAC,WAAW;gBACnB,aAAa,EAAE,sBAAsB,aAAa,EAAE;gBACpD,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;aAClD,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,WAAW,CAAC,UAAU,CAAC,gBAAgB,EAAE,aAAa,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,aAAqB;QACtC,IAAI,CAAC;YACH,OAAO,MAAM,gBAAgB,CAC3B,KAAK,IAAI,EAAE;gBACT,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;gBAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,MAAM,WAAW,CAAC,UAAU,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;gBAC/D,CAAC;gBAED,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,OAAO,iBAAiB,CAAC;gBAE9C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE;oBAChD,MAAM,EAAE,KAAK;oBACb,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE;iBAC/B,CAAC,CAAC;gBAEH,OAAO,MAAM,IAAI,CAAC,cAAc,CAAY,QAAQ,CAAC,CAAC;YACxD,CAAC,EACD;gBACE,GAAG,IAAI,CAAC,WAAW;gBACnB,aAAa,EAAE,yBAAyB,aAAa,EAAE;gBACvD,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;aAClD,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,WAAW,CAAC,UAAU,CAAC,oBAAoB,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,aAAqB,EAAE,MAAc;QACpD,IAAI,CAAC;YACH,MAAM,gBAAgB,CACpB,KAAK,IAAI,EAAE;gBACT,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;gBAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,MAAM,WAAW,CAAC,UAAU,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;gBAC/D,CAAC;gBAGD,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,OAAO,cAAc,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC;gBAE9E,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE;oBAChD,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE;iBAC/B,CAAC,CAAC;gBAEH,OAAO,MAAM,IAAI,CAAC,cAAc,CAAqC,QAAQ,CAAC,CAAC;YACjF,CAAC,EACD;gBACE,GAAG,IAAI,CAAC,WAAW;gBACnB,aAAa,EAAE,kBAAkB,MAAM,OAAO,aAAa,EAAE;gBAC7D,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;aAClD,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,WAAW,CACf,UAAU,CAAC,kBAAkB,EAC7B,MAAM,EACN,aAAa,EACb,eAAe,CAAC,KAAK,CAAC,CACvB,CAAC;QACJ,CAAC;IACH,CAAC;IA4BD,KAAK,CAAC,aAAa,CAAC,aAAqB,EAAE,MAAc;QAEvD,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAElC,IAAI,CAAC;YACH,OAAO,MAAM,gBAAgB,CAC3B,KAAK,IAAI,EAAE;gBACT,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;gBAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,MAAM,WAAW,CAAC,UAAU,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;gBAC/D,CAAC;gBAED,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,OAAO,cAAc,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC;gBAE9E,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE;oBAChD,MAAM,EAAE,KAAK;oBACb,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE;iBAC/B,CAAC,CAAC;gBAGH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAU,QAAQ,CAAC,CAAC;gBAG/D,MAAM,eAAe,GAAG,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC1D,OAAO,eAA6B,CAAC;YACvC,CAAC,EACD;gBACE,GAAG,IAAI,CAAC,WAAW;gBACnB,aAAa,EAAE,qBAAqB,MAAM,SAAS,aAAa,EAAE;gBAClE,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;aAClD,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAEf,IAAI,KAAK,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAChC,MAAM,WAAW,CAAC,UAAU,CAAC,uBAAuB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACvE,CAAC;YACD,MAAM,WAAW,CACf,UAAU,CAAC,eAAe,EAC1B,MAAM,EACN,aAAa,EACb,eAAe,CAAC,KAAK,CAAC,CACvB,CAAC;QACJ,CAAC;IACH,CAAC;IAYD,KAAK,CAAC,eAAe,CACnB,MAAc,EACd,KAAgB,EAChB,IAA2C;QAE3C,IAAI,CAAC;YACH,OAAO,MAAM,gBAAgB,CAC3B,KAAK,IAAI,EAAE;gBAET,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,uBAAuB,cAAc,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAEtH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE;oBAChD,MAAM,EAAE,OAAO;oBACf,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE;oBAC9B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,KAAK;wBACL,GAAG,IAAI;qBACR,CAAC;iBACH,CAAC,CAAC;gBAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBAEjB,IAAI,YAAgC,CAAC;oBACrC,IAAI,CAAC;wBACH,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA0B,CAAC;wBAChE,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC;oBACnC,CAAC;oBAAC,OAAO,SAAS,EAAE,CAAC;wBAInB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;4BACpC,OAAO,CAAC,IAAI,CACV,+DAA+D,MAAM,GAAG,EACxE,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CACnE,CAAC;wBACJ,CAAC;oBACH,CAAC;oBACD,MAAM,WAAW,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;gBAC1E,CAAC;YACH,CAAC,EACD;gBACE,GAAG,IAAI,CAAC,WAAW;gBACnB,aAAa,EAAE,uBAAuB,MAAM,OAAO,KAAK,EAAE;gBAC1D,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;aAClD,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,WAAW,CACf,UAAU,CAAC,kBAAkB,EAC7B,MAAM,EACN,KAAK,EACL,eAAe,CAAC,KAAK,CAAC,CACvB,CAAC;QACJ,CAAC;IACH,CAAC;IAYO,mBAAmB,CAAC,QAAkB;QAC5C,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAEzD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,kDAAkD,EAAE;gBAC9D,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,GAAG,EAAE,QAAQ,CAAC,GAAG;aAClB,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC9C,MAAM,WAAW,CAAC,UAAU,CAAC,oBAAoB,EAAE,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,cAAc,CAAI,QAAkB;QAEhD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAGnC,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC7D,IAAI,aAAa,IAAI,QAAQ,CAAC,aAAa,CAAC,GAAG,iBAAiB,EAAE,CAAC;YACjE,MAAM,WAAW,CAAC,UAAU,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAEjB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,MAAM,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAC5C,CAAC;YAED,IAAI,YAAgC,CAAC;YACrC,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAuB,CAAC;gBAChE,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;oBACpB,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;gBACzC,CAAC;YACH,CAAC;YAAC,OAAO,SAAS,EAAE,CAAC;gBAInB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;oBACpC,OAAO,CAAC,IAAI,CACV,4DAA4D,QAAQ,CAAC,MAAM,IAAI,EAC/E,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CACnE,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,MAAM,WAAW,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAC1E,CAAC;QAID,IAAI,MAA0B,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;YAC3C,IAAI,IAAI,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;gBACpC,MAAM,WAAW,CAAC,UAAU,CAAC,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAChE,CAAC;YACD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAuB,CAAC;QAClD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAGf,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,kBAAkB,EAAE,CAAC;gBAC1G,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAuB,CAAC;QACzD,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,mBAAmB;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAClE,CAAC;CACF"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/client/index.d.ts b/.claude-plugin/memesh/dist/a2a/client/index.d.ts deleted file mode 100644 index a36b9d15..00000000 --- a/.claude-plugin/memesh/dist/a2a/client/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { A2AClient } from './A2AClient.js'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/client/index.d.ts.map b/.claude-plugin/memesh/dist/a2a/client/index.d.ts.map deleted file mode 100644 index f9a87c40..00000000 --- a/.claude-plugin/memesh/dist/a2a/client/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/a2a/client/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/client/index.js b/.claude-plugin/memesh/dist/a2a/client/index.js deleted file mode 100644 index 970a1e00..00000000 --- a/.claude-plugin/memesh/dist/a2a/client/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export { A2AClient } from './A2AClient.js'; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/client/index.js.map b/.claude-plugin/memesh/dist/a2a/client/index.js.map deleted file mode 100644 index 0c4374d2..00000000 --- a/.claude-plugin/memesh/dist/a2a/client/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/a2a/client/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/constants.d.ts b/.claude-plugin/memesh/dist/a2a/constants.d.ts deleted file mode 100644 index 3a06bab0..00000000 --- a/.claude-plugin/memesh/dist/a2a/constants.d.ts +++ /dev/null @@ -1,34 +0,0 @@ -export declare const TIME: { - readonly TASK_TIMEOUT_MS: 300000; - readonly TIMEOUT_CHECK_INTERVAL_MS: 60000; - readonly HEARTBEAT_INTERVAL_MS: 60000; - readonly STALE_AGENT_THRESHOLD_MS: number; -}; -export declare const LIMITS: { - readonly MAX_CONCURRENT_TASKS_PHASE_1: 1; -}; -export declare const NETWORK: { - readonly DEFAULT_PORT_RANGE: { - readonly min: 3000; - readonly max: 3999; - }; - readonly MAX_REQUEST_BODY_SIZE: "10mb"; -}; -export declare const RATE_LIMITS: { - readonly DEFAULT_RPM: 100; - readonly SEND_MESSAGE_RPM: 60; - readonly GET_TASK_RPM: 120; - readonly LIST_TASKS_RPM: 100; - readonly CANCEL_TASK_RPM: 60; - readonly CLEANUP_INTERVAL_MS: number; -}; -export declare const ENV_KEYS: { - readonly A2A_TOKEN: "MEMESH_A2A_TOKEN"; - readonly TASK_TIMEOUT: "MEMESH_A2A_TASK_TIMEOUT"; - readonly RATE_LIMIT_DEFAULT: "MEMESH_A2A_RATE_LIMIT_DEFAULT"; - readonly RATE_LIMIT_SEND_MESSAGE: "MEMESH_A2A_RATE_LIMIT_SEND_MESSAGE"; - readonly RATE_LIMIT_GET_TASK: "MEMESH_A2A_RATE_LIMIT_GET_TASK"; - readonly RATE_LIMIT_LIST_TASKS: "MEMESH_A2A_RATE_LIMIT_LIST_TASKS"; - readonly RATE_LIMIT_CANCEL_TASK: "MEMESH_A2A_RATE_LIMIT_CANCEL_TASK"; -}; -//# sourceMappingURL=constants.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/constants.d.ts.map b/.claude-plugin/memesh/dist/a2a/constants.d.ts.map deleted file mode 100644 index a43a09ef..00000000 --- a/.claude-plugin/memesh/dist/a2a/constants.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/a2a/constants.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,IAAI;;;;;CAwBP,CAAC;AAKX,eAAO,MAAM,MAAM;;CAMT,CAAC;AAKX,eAAO,MAAM,OAAO;;;;;;CAaV,CAAC;AAKX,eAAO,MAAM,WAAW;;;;;;;CA8Bd,CAAC;AAKX,eAAO,MAAM,QAAQ;;;;;;;;CAmBX,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/constants.js b/.claude-plugin/memesh/dist/a2a/constants.js deleted file mode 100644 index 64a50c28..00000000 --- a/.claude-plugin/memesh/dist/a2a/constants.js +++ /dev/null @@ -1,34 +0,0 @@ -export const TIME = { - TASK_TIMEOUT_MS: 300_000, - TIMEOUT_CHECK_INTERVAL_MS: 60_000, - HEARTBEAT_INTERVAL_MS: 60_000, - STALE_AGENT_THRESHOLD_MS: 5 * 60_000, -}; -export const LIMITS = { - MAX_CONCURRENT_TASKS_PHASE_1: 1, -}; -export const NETWORK = { - DEFAULT_PORT_RANGE: { - min: 3000, - max: 3999, - }, - MAX_REQUEST_BODY_SIZE: '10mb', -}; -export const RATE_LIMITS = { - DEFAULT_RPM: 100, - SEND_MESSAGE_RPM: 60, - GET_TASK_RPM: 120, - LIST_TASKS_RPM: 100, - CANCEL_TASK_RPM: 60, - CLEANUP_INTERVAL_MS: 5 * 60_000, -}; -export const ENV_KEYS = { - A2A_TOKEN: 'MEMESH_A2A_TOKEN', - TASK_TIMEOUT: 'MEMESH_A2A_TASK_TIMEOUT', - RATE_LIMIT_DEFAULT: 'MEMESH_A2A_RATE_LIMIT_DEFAULT', - RATE_LIMIT_SEND_MESSAGE: 'MEMESH_A2A_RATE_LIMIT_SEND_MESSAGE', - RATE_LIMIT_GET_TASK: 'MEMESH_A2A_RATE_LIMIT_GET_TASK', - RATE_LIMIT_LIST_TASKS: 'MEMESH_A2A_RATE_LIMIT_LIST_TASKS', - RATE_LIMIT_CANCEL_TASK: 'MEMESH_A2A_RATE_LIMIT_CANCEL_TASK', -}; -//# sourceMappingURL=constants.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/constants.js.map b/.claude-plugin/memesh/dist/a2a/constants.js.map deleted file mode 100644 index d73e0c31..00000000 --- a/.claude-plugin/memesh/dist/a2a/constants.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/a2a/constants.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,IAAI,GAAG;IAKlB,eAAe,EAAE,OAAO;IAMxB,yBAAyB,EAAE,MAAM;IAMjC,qBAAqB,EAAE,MAAM;IAM7B,wBAAwB,EAAE,CAAC,GAAG,MAAM;CAC5B,CAAC;AAKX,MAAM,CAAC,MAAM,MAAM,GAAG;IAKpB,4BAA4B,EAAE,CAAC;CACvB,CAAC;AAKX,MAAM,CAAC,MAAM,OAAO,GAAG;IAIrB,kBAAkB,EAAE;QAClB,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,IAAI;KACV;IAKD,qBAAqB,EAAE,MAAM;CACrB,CAAC;AAKX,MAAM,CAAC,MAAM,WAAW,GAAG;IAIzB,WAAW,EAAE,GAAG;IAKhB,gBAAgB,EAAE,EAAE;IAKpB,YAAY,EAAE,GAAG;IAKjB,cAAc,EAAE,GAAG;IAKnB,eAAe,EAAE,EAAE;IAKnB,mBAAmB,EAAE,CAAC,GAAG,MAAM;CACvB,CAAC;AAKX,MAAM,CAAC,MAAM,QAAQ,GAAG;IAItB,SAAS,EAAE,kBAAkB;IAK7B,YAAY,EAAE,yBAAyB;IAKvC,kBAAkB,EAAE,+BAA+B;IACnD,uBAAuB,EAAE,oCAAoC;IAC7D,mBAAmB,EAAE,gCAAgC;IACrD,qBAAqB,EAAE,kCAAkC;IACzD,sBAAsB,EAAE,mCAAmC;CACnD,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/delegator/MCPTaskDelegator.d.ts b/.claude-plugin/memesh/dist/a2a/delegator/MCPTaskDelegator.d.ts deleted file mode 100644 index 4d5e7ee0..00000000 --- a/.claude-plugin/memesh/dist/a2a/delegator/MCPTaskDelegator.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { TaskQueue } from '../storage/TaskQueue.js'; -import type { ILogger } from '../../utils/ILogger.js'; -import type { TaskInfo } from './types.js'; -export declare class MCPTaskDelegator { - private pendingTasks; - private pendingTasksByAgent; - private taskQueue; - private logger; - private metrics; - constructor(taskQueue: TaskQueue, logger: ILogger); - addTask(taskId: string, task: string, priority: 'high' | 'medium' | 'low', agentId: string): Promise; - getPendingTasks(agentId: string): Promise; - markTaskInProgress(taskId: string): Promise; - removeTask(taskId: string): Promise; - private static readonly TIMEOUT_BOUNDS; - private getTaskTimeout; - checkTimeouts(): Promise; -} -//# sourceMappingURL=MCPTaskDelegator.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/delegator/MCPTaskDelegator.d.ts.map b/.claude-plugin/memesh/dist/a2a/delegator/MCPTaskDelegator.d.ts.map deleted file mode 100644 index c9070ae0..00000000 --- a/.claude-plugin/memesh/dist/a2a/delegator/MCPTaskDelegator.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"MCPTaskDelegator.d.ts","sourceRoot":"","sources":["../../../src/a2a/delegator/MCPTaskDelegator.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AA+B3C,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,YAAY,CAAwB;IAG5C,OAAO,CAAC,mBAAmB,CAA2B;IACtD,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,OAAO,CAAa;gBAQhB,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO;IA0B3C,OAAO,CACX,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,EACnC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;IAuDV,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IA8BrD,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBjD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8B/C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAI3B;IAUX,OAAO,CAAC,cAAc;IAuDhB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;CA+FrC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/delegator/MCPTaskDelegator.js b/.claude-plugin/memesh/dist/a2a/delegator/MCPTaskDelegator.js deleted file mode 100644 index 497b48fd..00000000 --- a/.claude-plugin/memesh/dist/a2a/delegator/MCPTaskDelegator.js +++ /dev/null @@ -1,184 +0,0 @@ -import { TIME, LIMITS, ENV_KEYS } from '../constants.js'; -import { A2AMetrics, METRIC_NAMES } from '../metrics/index.js'; -import { ErrorCodes, createError, formatErrorMessage } from '../errors/index.js'; -export class MCPTaskDelegator { - pendingTasks; - pendingTasksByAgent; - taskQueue; - logger; - metrics; - constructor(taskQueue, logger) { - this.pendingTasks = new Map(); - this.pendingTasksByAgent = new Map(); - this.taskQueue = taskQueue; - this.logger = logger; - this.metrics = A2AMetrics.getInstance(); - } - async addTask(taskId, task, priority, agentId) { - const agentTaskSet = this.pendingTasksByAgent.get(agentId); - const agentTaskCount = agentTaskSet ? agentTaskSet.size : 0; - if (agentTaskCount >= LIMITS.MAX_CONCURRENT_TASKS_PHASE_1) { - throw createError(ErrorCodes.AGENT_ALREADY_PROCESSING, 'Phase 1.0'); - } - const taskInfo = { - taskId, - task, - priority, - agentId, - createdAt: Date.now(), - status: 'PENDING' - }; - this.pendingTasks.set(taskId, taskInfo); - if (!agentTaskSet) { - this.pendingTasksByAgent.set(agentId, new Set([taskId])); - } - else { - agentTaskSet.add(taskId); - } - this.logger.info('[MCPTaskDelegator] Task added to delegation queue', { taskId, agentId }); - this.metrics.incrementCounter(METRIC_NAMES.TASKS_SUBMITTED, { agentId, priority }); - this.metrics.setGauge(METRIC_NAMES.QUEUE_SIZE, this.pendingTasks.size, { agentId }); - } - async getPendingTasks(agentId) { - const taskIds = this.pendingTasksByAgent.get(agentId); - if (!taskIds || taskIds.size === 0) { - return []; - } - const tasks = []; - for (const taskId of taskIds) { - const taskInfo = this.pendingTasks.get(taskId); - if (taskInfo && taskInfo.status === 'PENDING') { - tasks.push(taskInfo); - } - } - return tasks; - } - async markTaskInProgress(taskId) { - const taskInfo = this.pendingTasks.get(taskId); - if (taskInfo) { - taskInfo.status = 'IN_PROGRESS'; - this.logger.info('[MCPTaskDelegator] Task marked as in-progress', { taskId }); - } - else { - this.logger.warn('[MCPTaskDelegator] Task not found for progress update', { taskId }); - } - } - async removeTask(taskId) { - const taskInfo = this.pendingTasks.get(taskId); - const removed = this.pendingTasks.delete(taskId); - if (removed && taskInfo) { - const agentTaskSet = this.pendingTasksByAgent.get(taskInfo.agentId); - if (agentTaskSet) { - agentTaskSet.delete(taskId); - if (agentTaskSet.size === 0) { - this.pendingTasksByAgent.delete(taskInfo.agentId); - } - } - this.logger.info('[MCPTaskDelegator] Task removed from delegation queue', { taskId }); - this.metrics.setGauge(METRIC_NAMES.QUEUE_SIZE, this.pendingTasks.size, { - agentId: taskInfo.agentId - }); - } - else { - this.logger.warn('[MCPTaskDelegator] Task not found for removal', { taskId }); - } - } - static TIMEOUT_BOUNDS = { - min: 5_000, - max: 3_600_000, - default: TIME.TASK_TIMEOUT_MS, - }; - getTaskTimeout() { - const envValue = process.env[ENV_KEYS.TASK_TIMEOUT]; - if (!envValue) { - return MCPTaskDelegator.TIMEOUT_BOUNDS.default; - } - const raw = parseInt(envValue, 10); - const bounds = MCPTaskDelegator.TIMEOUT_BOUNDS; - if (Number.isNaN(raw)) { - this.logger.warn(`[MCPTaskDelegator] Invalid (NaN) ${ENV_KEYS.TASK_TIMEOUT} env var: "${envValue}", using default ${bounds.default}ms`); - return bounds.default; - } - if (raw < bounds.min) { - this.logger.warn(`[MCPTaskDelegator] ${ENV_KEYS.TASK_TIMEOUT} value ${raw}ms is below minimum ${bounds.min}ms, clamping to ${bounds.min}ms`); - return bounds.min; - } - if (raw > bounds.max) { - this.logger.warn(`[MCPTaskDelegator] ${ENV_KEYS.TASK_TIMEOUT} value ${raw}ms exceeds maximum ${bounds.max}ms, clamping to ${bounds.max}ms`); - return bounds.max; - } - return raw; - } - async checkTimeouts() { - let tasksChecked = 0; - try { - const now = Date.now(); - const timeout = this.getTaskTimeout(); - const timeoutSeconds = timeout / 1000; - const timedOutTasks = []; - for (const [taskId, taskInfo] of this.pendingTasks) { - tasksChecked++; - if (now - taskInfo.createdAt > timeout) { - timedOutTasks.push({ taskId, taskInfo }); - } - } - for (const { taskId, taskInfo } of timedOutTasks) { - try { - const timeoutMessage = formatErrorMessage(ErrorCodes.TASK_TIMEOUT, taskId, timeoutSeconds); - this.logger.warn('[MCPTaskDelegator] Task timeout detected', { - taskId, - agentId: taskInfo.agentId, - timeoutSeconds, - taskAge: Math.floor((now - taskInfo.createdAt) / 1000), - }); - const updated = this.taskQueue.updateTaskStatus(taskId, { - state: 'TIMEOUT', - metadata: { error: timeoutMessage } - }); - if (!updated) { - this.logger.error('[MCPTaskDelegator] Failed to update timeout status for task', { taskId }); - continue; - } - this.pendingTasks.delete(taskId); - const agentTaskSet = this.pendingTasksByAgent.get(taskInfo.agentId); - if (agentTaskSet) { - agentTaskSet.delete(taskId); - if (agentTaskSet.size === 0) { - this.pendingTasksByAgent.delete(taskInfo.agentId); - } - } - this.logger.info('[MCPTaskDelegator] Task removed from pending queue after timeout', { taskId }); - this.metrics.incrementCounter(METRIC_NAMES.TASKS_TIMEOUT, { - agentId: taskInfo.agentId, - priority: taskInfo.priority - }); - this.metrics.setGauge(METRIC_NAMES.QUEUE_SIZE, this.pendingTasks.size, { - agentId: taskInfo.agentId - }); - } - catch (error) { - this.logger.error('[MCPTaskDelegator] Error processing timeout', { - taskId, - error: error instanceof Error ? error.message : String(error), - stack: error instanceof Error ? error.stack : undefined, - }); - } - } - if (timedOutTasks.length > 0) { - this.logger.info('[MCPTaskDelegator] Timeout check completed', { - timeoutCount: timedOutTasks.length, - remainingTasks: this.pendingTasks.size, - }); - } - } - catch (error) { - this.logger.error('[MCPTaskDelegator] Unhandled error in checkTimeouts', { - error: error instanceof Error ? error.message : String(error), - stack: error instanceof Error ? error.stack : undefined, - tasksChecked, - pendingTaskCount: this.pendingTasks.size, - }); - } - } -} -//# sourceMappingURL=MCPTaskDelegator.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/delegator/MCPTaskDelegator.js.map b/.claude-plugin/memesh/dist/a2a/delegator/MCPTaskDelegator.js.map deleted file mode 100644 index 3fe3c6b0..00000000 --- a/.claude-plugin/memesh/dist/a2a/delegator/MCPTaskDelegator.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"MCPTaskDelegator.js","sourceRoot":"","sources":["../../../src/a2a/delegator/MCPTaskDelegator.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/delegator/index.d.ts b/.claude-plugin/memesh/dist/a2a/delegator/index.d.ts deleted file mode 100644 index 2ba90013..00000000 --- a/.claude-plugin/memesh/dist/a2a/delegator/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { MCPTaskDelegator } from './MCPTaskDelegator.js'; -export type { TaskInfo } from './types.js'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/delegator/index.d.ts.map b/.claude-plugin/memesh/dist/a2a/delegator/index.d.ts.map deleted file mode 100644 index ea85abc3..00000000 --- a/.claude-plugin/memesh/dist/a2a/delegator/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/a2a/delegator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/delegator/index.js b/.claude-plugin/memesh/dist/a2a/delegator/index.js deleted file mode 100644 index c887dbfb..00000000 --- a/.claude-plugin/memesh/dist/a2a/delegator/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export { MCPTaskDelegator } from './MCPTaskDelegator.js'; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/delegator/index.js.map b/.claude-plugin/memesh/dist/a2a/delegator/index.js.map deleted file mode 100644 index d099bfad..00000000 --- a/.claude-plugin/memesh/dist/a2a/delegator/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/a2a/delegator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/delegator/types.d.ts b/.claude-plugin/memesh/dist/a2a/delegator/types.d.ts deleted file mode 100644 index 26f85e09..00000000 --- a/.claude-plugin/memesh/dist/a2a/delegator/types.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -export interface TaskInfo { - taskId: string; - task: string; - priority: 'high' | 'medium' | 'low'; - agentId: string; - createdAt: number; - status: 'PENDING' | 'IN_PROGRESS'; -} -//# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/delegator/types.d.ts.map b/.claude-plugin/memesh/dist/a2a/delegator/types.d.ts.map deleted file mode 100644 index 35c4f2b7..00000000 --- a/.claude-plugin/memesh/dist/a2a/delegator/types.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/a2a/delegator/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,aAAa,CAAC;CACnC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/delegator/types.js b/.claude-plugin/memesh/dist/a2a/delegator/types.js deleted file mode 100644 index 718fd38a..00000000 --- a/.claude-plugin/memesh/dist/a2a/delegator/types.js +++ /dev/null @@ -1,2 +0,0 @@ -export {}; -//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/delegator/types.js.map b/.claude-plugin/memesh/dist/a2a/delegator/types.js.map deleted file mode 100644 index b9d9160a..00000000 --- a/.claude-plugin/memesh/dist/a2a/delegator/types.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/a2a/delegator/types.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/errors/ErrorCodes.d.ts b/.claude-plugin/memesh/dist/a2a/errors/ErrorCodes.d.ts deleted file mode 100644 index 19bb9168..00000000 --- a/.claude-plugin/memesh/dist/a2a/errors/ErrorCodes.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -export declare const ErrorCodes: { - readonly AUTH_TOKEN_NOT_CONFIGURED: "AUTH_TOKEN_NOT_CONFIGURED"; - readonly AUTH_FAILED: "AUTH_FAILED"; - readonly AUTH_TOKEN_MISSING: "AUTH_TOKEN_MISSING"; - readonly AGENT_NOT_FOUND: "AGENT_NOT_FOUND"; - readonly AGENT_ALREADY_PROCESSING: "AGENT_ALREADY_PROCESSING"; - readonly AGENT_REGISTRY_ERROR: "AGENT_REGISTRY_ERROR"; - readonly TASK_NOT_FOUND: "TASK_NOT_FOUND"; - readonly TASK_TIMEOUT: "TASK_TIMEOUT"; - readonly TASK_SEND_FAILED: "TASK_SEND_FAILED"; - readonly TASK_GET_FAILED: "TASK_GET_FAILED"; - readonly TASK_LIST_FAILED: "TASK_LIST_FAILED"; - readonly TASK_CANCEL_FAILED: "TASK_CANCEL_FAILED"; - readonly TASK_UPDATE_FAILED: "TASK_UPDATE_FAILED"; - readonly PORT_NOT_AVAILABLE: "PORT_NOT_AVAILABLE"; - readonly SERVER_ERROR: "SERVER_ERROR"; - readonly INVALID_JSON: "INVALID_JSON"; - readonly DATABASE_ERROR: "DATABASE_ERROR"; - readonly TIMEOUT_CHECKER_ERROR: "TIMEOUT_CHECKER_ERROR"; - readonly TIMEOUT_CHECKER_CIRCUIT_OPEN: "TIMEOUT_CHECKER_CIRCUIT_OPEN"; - readonly HTTP_ERROR: "HTTP_ERROR"; - readonly REQUEST_TIMEOUT: "REQUEST_TIMEOUT"; - readonly INVALID_CONTENT_TYPE: "INVALID_CONTENT_TYPE"; - readonly RESPONSE_TOO_LARGE: "RESPONSE_TOO_LARGE"; - readonly INVALID_PARAMETER: "INVALID_PARAMETER"; - readonly INVALID_RESPONSE_SCHEMA: "INVALID_RESPONSE_SCHEMA"; - readonly UNKNOWN_ERROR: "UNKNOWN_ERROR"; -}; -export type ErrorCode = (typeof ErrorCodes)[keyof typeof ErrorCodes]; -//# sourceMappingURL=ErrorCodes.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/errors/ErrorCodes.d.ts.map b/.claude-plugin/memesh/dist/a2a/errors/ErrorCodes.d.ts.map deleted file mode 100644 index e98e89ab..00000000 --- a/.claude-plugin/memesh/dist/a2a/errors/ErrorCodes.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ErrorCodes.d.ts","sourceRoot":"","sources":["../../../src/a2a/errors/ErrorCodes.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4Cb,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/errors/ErrorCodes.js b/.claude-plugin/memesh/dist/a2a/errors/ErrorCodes.js deleted file mode 100644 index 529357c0..00000000 --- a/.claude-plugin/memesh/dist/a2a/errors/ErrorCodes.js +++ /dev/null @@ -1,29 +0,0 @@ -export const ErrorCodes = { - AUTH_TOKEN_NOT_CONFIGURED: 'AUTH_TOKEN_NOT_CONFIGURED', - AUTH_FAILED: 'AUTH_FAILED', - AUTH_TOKEN_MISSING: 'AUTH_TOKEN_MISSING', - AGENT_NOT_FOUND: 'AGENT_NOT_FOUND', - AGENT_ALREADY_PROCESSING: 'AGENT_ALREADY_PROCESSING', - AGENT_REGISTRY_ERROR: 'AGENT_REGISTRY_ERROR', - TASK_NOT_FOUND: 'TASK_NOT_FOUND', - TASK_TIMEOUT: 'TASK_TIMEOUT', - TASK_SEND_FAILED: 'TASK_SEND_FAILED', - TASK_GET_FAILED: 'TASK_GET_FAILED', - TASK_LIST_FAILED: 'TASK_LIST_FAILED', - TASK_CANCEL_FAILED: 'TASK_CANCEL_FAILED', - TASK_UPDATE_FAILED: 'TASK_UPDATE_FAILED', - PORT_NOT_AVAILABLE: 'PORT_NOT_AVAILABLE', - SERVER_ERROR: 'SERVER_ERROR', - INVALID_JSON: 'INVALID_JSON', - DATABASE_ERROR: 'DATABASE_ERROR', - TIMEOUT_CHECKER_ERROR: 'TIMEOUT_CHECKER_ERROR', - TIMEOUT_CHECKER_CIRCUIT_OPEN: 'TIMEOUT_CHECKER_CIRCUIT_OPEN', - HTTP_ERROR: 'HTTP_ERROR', - REQUEST_TIMEOUT: 'REQUEST_TIMEOUT', - INVALID_CONTENT_TYPE: 'INVALID_CONTENT_TYPE', - RESPONSE_TOO_LARGE: 'RESPONSE_TOO_LARGE', - INVALID_PARAMETER: 'INVALID_PARAMETER', - INVALID_RESPONSE_SCHEMA: 'INVALID_RESPONSE_SCHEMA', - UNKNOWN_ERROR: 'UNKNOWN_ERROR', -}; -//# sourceMappingURL=ErrorCodes.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/errors/ErrorCodes.js.map b/.claude-plugin/memesh/dist/a2a/errors/ErrorCodes.js.map deleted file mode 100644 index d0a0469d..00000000 --- a/.claude-plugin/memesh/dist/a2a/errors/ErrorCodes.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ErrorCodes.js","sourceRoot":"","sources":["../../../src/a2a/errors/ErrorCodes.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,UAAU,GAAG;IAExB,yBAAyB,EAAE,2BAA2B;IACtD,WAAW,EAAE,aAAa;IAC1B,kBAAkB,EAAE,oBAAoB;IAGxC,eAAe,EAAE,iBAAiB;IAClC,wBAAwB,EAAE,0BAA0B;IACpD,oBAAoB,EAAE,sBAAsB;IAG5C,cAAc,EAAE,gBAAgB;IAChC,YAAY,EAAE,cAAc;IAC5B,gBAAgB,EAAE,kBAAkB;IACpC,eAAe,EAAE,iBAAiB;IAClC,gBAAgB,EAAE,kBAAkB;IACpC,kBAAkB,EAAE,oBAAoB;IACxC,kBAAkB,EAAE,oBAAoB;IAGxC,kBAAkB,EAAE,oBAAoB;IACxC,YAAY,EAAE,cAAc;IAG5B,YAAY,EAAE,cAAc;IAC5B,cAAc,EAAE,gBAAgB;IAGhC,qBAAqB,EAAE,uBAAuB;IAC9C,4BAA4B,EAAE,8BAA8B;IAG5D,UAAU,EAAE,YAAY;IACxB,eAAe,EAAE,iBAAiB;IAClC,oBAAoB,EAAE,sBAAsB;IAG5C,kBAAkB,EAAE,oBAAoB;IACxC,iBAAiB,EAAE,mBAAmB;IACtC,uBAAuB,EAAE,yBAAyB;IAGlD,aAAa,EAAE,eAAe;CACtB,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/errors/ErrorMessages.d.ts b/.claude-plugin/memesh/dist/a2a/errors/ErrorMessages.d.ts deleted file mode 100644 index 176d5194..00000000 --- a/.claude-plugin/memesh/dist/a2a/errors/ErrorMessages.d.ts +++ /dev/null @@ -1,32 +0,0 @@ -export declare const ErrorMessages: { - readonly AUTH_TOKEN_NOT_CONFIGURED: "MEMESH_A2A_TOKEN environment variable is not configured"; - readonly AUTH_FAILED: "Authentication failed - invalid A2A token"; - readonly AUTH_TOKEN_MISSING: "A2A authentication token is missing"; - readonly AGENT_NOT_FOUND: (agentId: string) => string; - readonly AGENT_ALREADY_PROCESSING: (phase?: string) => string; - readonly AGENT_REGISTRY_ERROR: (error: string) => string; - readonly TASK_NOT_FOUND: (taskId: string) => string; - readonly TASK_TIMEOUT: (taskId: string, timeoutSeconds: number) => string; - readonly TASK_SEND_FAILED: (targetAgentId: string, error: string) => string; - readonly TASK_GET_FAILED: (taskId: string, targetAgentId: string, error: string) => string; - readonly TASK_LIST_FAILED: (targetAgentId: string, error: string) => string; - readonly TASK_CANCEL_FAILED: (taskId: string, targetAgentId: string, error: string) => string; - readonly TASK_UPDATE_FAILED: (taskId: string, state: string, error: string) => string; - readonly PORT_NOT_AVAILABLE: (min: number, max: number) => string; - readonly SERVER_ERROR: (error: string) => string; - readonly INVALID_JSON: (context: string, preview?: string) => string; - readonly DATABASE_ERROR: (operation: string, error: string) => string; - readonly TIMEOUT_CHECKER_ERROR: (error: string) => string; - readonly TIMEOUT_CHECKER_CIRCUIT_OPEN: (failureCount: number, maxRetries: number) => string; - readonly HTTP_ERROR: (status: number, message?: string) => string; - readonly REQUEST_TIMEOUT: (url: string, timeoutMs: number) => string; - readonly INVALID_CONTENT_TYPE: (contentType: string, status: number) => string; - readonly RESPONSE_TOO_LARGE: (size: string | number) => string; - readonly INVALID_PARAMETER: (fieldName: string, reason: string) => string; - readonly INVALID_RESPONSE_SCHEMA: (details: string) => string; - readonly UNKNOWN_ERROR: "An unknown error occurred"; -}; -export declare function formatErrorMessage(code: keyof typeof ErrorMessages, ...args: any[]): string; -export declare function getErrorMessage(error: unknown): string; -export declare function createError(code: keyof typeof ErrorMessages, ...args: any[]): Error; -//# sourceMappingURL=ErrorMessages.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/errors/ErrorMessages.d.ts.map b/.claude-plugin/memesh/dist/a2a/errors/ErrorMessages.d.ts.map deleted file mode 100644 index a9f9da1f..00000000 --- a/.claude-plugin/memesh/dist/a2a/errors/ErrorMessages.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ErrorMessages.d.ts","sourceRoot":"","sources":["../../../src/a2a/errors/ErrorMessages.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,aAAa;;;;wCAQgB,MAAM;gDACC,MAAM;2CAEV,MAAM;sCAIX,MAAM;oCACR,MAAM,kBAAkB,MAAM;+CAEnB,MAAM,SAAS,MAAM;uCAE7B,MAAM,iBAAiB,MAAM,SAAS,MAAM;+CAEpC,MAAM,SAAS,MAAM;0CAE1B,MAAM,iBAAiB,MAAM,SAAS,MAAM;0CAE5C,MAAM,SAAS,MAAM,SAAS,MAAM;uCAIvC,MAAM,OAAO,MAAM;mCAEvB,MAAM;qCAGJ,MAAM,YAAY,MAAM;yCAEpB,MAAM,SAAS,MAAM;4CAIlB,MAAM;0DACQ,MAAM,cAAc,MAAM;kCAIlD,MAAM,YAAY,MAAM;oCAEtB,MAAM,aAAa,MAAM;iDAEZ,MAAM,UAAU,MAAM;wCAI/B,MAAM,GAAG,MAAM;4CAEX,MAAM,UAAU,MAAM;gDAElB,MAAM;;CAK9C,CAAC;AAKX,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,OAAO,aAAa,EAChC,GAAG,IAAI,EAAE,GAAG,EAAE,GACb,MAAM,CAMR;AAKD,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKtD;AAOD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,OAAO,aAAa,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,KAAK,CAiBnF"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/errors/ErrorMessages.js b/.claude-plugin/memesh/dist/a2a/errors/ErrorMessages.js deleted file mode 100644 index c660b59f..00000000 --- a/.claude-plugin/memesh/dist/a2a/errors/ErrorMessages.js +++ /dev/null @@ -1,55 +0,0 @@ -import { ErrorCodes } from './ErrorCodes.js'; -export const ErrorMessages = { - [ErrorCodes.AUTH_TOKEN_NOT_CONFIGURED]: 'MEMESH_A2A_TOKEN environment variable is not configured', - [ErrorCodes.AUTH_FAILED]: 'Authentication failed - invalid A2A token', - [ErrorCodes.AUTH_TOKEN_MISSING]: 'A2A authentication token is missing', - [ErrorCodes.AGENT_NOT_FOUND]: (agentId) => `Agent not found: ${agentId}`, - [ErrorCodes.AGENT_ALREADY_PROCESSING]: (phase = 'Phase 1.0') => `Agent already processing a task (${phase} limitation)`, - [ErrorCodes.AGENT_REGISTRY_ERROR]: (error) => `Agent registry operation failed: ${error}`, - [ErrorCodes.TASK_NOT_FOUND]: (taskId) => `Task not found: ${taskId}`, - [ErrorCodes.TASK_TIMEOUT]: (taskId, timeoutSeconds) => `Task timeout detected: ${taskId} (timeout: ${timeoutSeconds}s)`, - [ErrorCodes.TASK_SEND_FAILED]: (targetAgentId, error) => `Failed to send message to ${targetAgentId}: ${error}`, - [ErrorCodes.TASK_GET_FAILED]: (taskId, targetAgentId, error) => `Failed to get task ${taskId} from ${targetAgentId}: ${error}`, - [ErrorCodes.TASK_LIST_FAILED]: (targetAgentId, error) => `Failed to list tasks from ${targetAgentId}: ${error}`, - [ErrorCodes.TASK_CANCEL_FAILED]: (taskId, targetAgentId, error) => `Failed to cancel task ${taskId} on ${targetAgentId}: ${error}`, - [ErrorCodes.TASK_UPDATE_FAILED]: (taskId, state, error) => `Failed to update task ${taskId} to state ${state}: ${error}`, - [ErrorCodes.PORT_NOT_AVAILABLE]: (min, max) => `No available port in range ${min}-${max}`, - [ErrorCodes.SERVER_ERROR]: (error) => `Server error: ${error}`, - [ErrorCodes.INVALID_JSON]: (context, preview) => `Invalid JSON data in ${context}${preview ? `: ${preview}` : ''}`, - [ErrorCodes.DATABASE_ERROR]: (operation, error) => `Database ${operation} failed: ${error}`, - [ErrorCodes.TIMEOUT_CHECKER_ERROR]: (error) => `TimeoutChecker error: ${error}`, - [ErrorCodes.TIMEOUT_CHECKER_CIRCUIT_OPEN]: (failureCount, maxRetries) => `TimeoutChecker circuit breaker is open (${failureCount}/${maxRetries} consecutive failures). Service temporarily degraded.`, - [ErrorCodes.HTTP_ERROR]: (status, message) => `HTTP error ${status}${message ? `: ${message}` : ''}`, - [ErrorCodes.REQUEST_TIMEOUT]: (url, timeoutMs) => `Request to ${url} aborted due to timeout (${timeoutMs}ms)`, - [ErrorCodes.INVALID_CONTENT_TYPE]: (contentType, status) => `Unexpected Content-Type: ${contentType}, expected application/json (status: ${status})`, - [ErrorCodes.RESPONSE_TOO_LARGE]: (size) => `Response size exceeds maximum allowed (size: ${size} bytes, max: 10MB)`, - [ErrorCodes.INVALID_PARAMETER]: (fieldName, reason) => `Invalid parameter '${fieldName}': ${reason}`, - [ErrorCodes.INVALID_RESPONSE_SCHEMA]: (details) => `Response schema validation failed: ${details}`, - [ErrorCodes.UNKNOWN_ERROR]: 'An unknown error occurred', -}; -export function formatErrorMessage(code, ...args) { - const template = ErrorMessages[code]; - if (typeof template === 'function') { - return template(...args); - } - return template; -} -export function getErrorMessage(error) { - if (error instanceof Error) { - return error.message; - } - return String(error); -} -export function createError(code, ...args) { - const message = formatErrorMessage(code, ...args); - const error = new Error(message); - error.code = code; - if (code === 'HTTP_ERROR' && typeof args[0] === 'number') { - error.status = args[0]; - } - if (code === 'AUTH_FAILED') { - error.status = 401; - } - return error; -} -//# sourceMappingURL=ErrorMessages.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/errors/ErrorMessages.js.map b/.claude-plugin/memesh/dist/a2a/errors/ErrorMessages.js.map deleted file mode 100644 index 912aaeab..00000000 --- a/.claude-plugin/memesh/dist/a2a/errors/ErrorMessages.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ErrorMessages.js","sourceRoot":"","sources":["../../../src/a2a/errors/ErrorMessages.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/errors/index.d.ts b/.claude-plugin/memesh/dist/a2a/errors/index.d.ts deleted file mode 100644 index 40363c06..00000000 --- a/.claude-plugin/memesh/dist/a2a/errors/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { ErrorCodes, type ErrorCode } from './ErrorCodes.js'; -export { ErrorMessages, formatErrorMessage, getErrorMessage, createError, } from './ErrorMessages.js'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/errors/index.d.ts.map b/.claude-plugin/memesh/dist/a2a/errors/index.d.ts.map deleted file mode 100644 index 2a4ec0f1..00000000 --- a/.claude-plugin/memesh/dist/a2a/errors/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/a2a/errors/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,WAAW,GACZ,MAAM,oBAAoB,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/errors/index.js b/.claude-plugin/memesh/dist/a2a/errors/index.js deleted file mode 100644 index 9a12a0a5..00000000 --- a/.claude-plugin/memesh/dist/a2a/errors/index.js +++ /dev/null @@ -1,3 +0,0 @@ -export { ErrorCodes } from './ErrorCodes.js'; -export { ErrorMessages, formatErrorMessage, getErrorMessage, createError, } from './ErrorMessages.js'; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/errors/index.js.map b/.claude-plugin/memesh/dist/a2a/errors/index.js.map deleted file mode 100644 index f653a506..00000000 --- a/.claude-plugin/memesh/dist/a2a/errors/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/a2a/errors/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAkB,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,WAAW,GACZ,MAAM,oBAAoB,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/executor/TaskExecutor.d.ts b/.claude-plugin/memesh/dist/a2a/executor/TaskExecutor.d.ts deleted file mode 100644 index 69a6013b..00000000 --- a/.claude-plugin/memesh/dist/a2a/executor/TaskExecutor.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { TaskQueue } from '../storage/TaskQueue.js'; -import type { ILogger } from '../../utils/ILogger.js'; -import type { MCPTaskDelegator } from '../delegator/MCPTaskDelegator.js'; -export declare class TaskExecutor { - private taskQueue; - private logger; - private delegator; - constructor(taskQueue: TaskQueue, logger: ILogger, delegator: MCPTaskDelegator); - executeTask(taskId: string, task: string, agentId: string): Promise; -} -//# sourceMappingURL=TaskExecutor.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/executor/TaskExecutor.d.ts.map b/.claude-plugin/memesh/dist/a2a/executor/TaskExecutor.d.ts.map deleted file mode 100644 index 87c0b32e..00000000 --- a/.claude-plugin/memesh/dist/a2a/executor/TaskExecutor.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"TaskExecutor.d.ts","sourceRoot":"","sources":["../../../src/a2a/executor/TaskExecutor.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAkBzE,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,SAAS,CAAmB;gBAUlC,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,OAAO,EACf,SAAS,EAAE,gBAAgB;IAuBvB,WAAW,CACf,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;CASjB"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/executor/TaskExecutor.js b/.claude-plugin/memesh/dist/a2a/executor/TaskExecutor.js deleted file mode 100644 index 4f9846e5..00000000 --- a/.claude-plugin/memesh/dist/a2a/executor/TaskExecutor.js +++ /dev/null @@ -1,15 +0,0 @@ -export class TaskExecutor { - taskQueue; - logger; - delegator; - constructor(taskQueue, logger, delegator) { - this.taskQueue = taskQueue; - this.logger = logger; - this.delegator = delegator; - } - async executeTask(taskId, task, agentId) { - await this.delegator.addTask(taskId, task, 'medium', agentId); - this.logger.info(`Task delegated to MCP Client: ${taskId}`); - } -} -//# sourceMappingURL=TaskExecutor.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/executor/TaskExecutor.js.map b/.claude-plugin/memesh/dist/a2a/executor/TaskExecutor.js.map deleted file mode 100644 index f4c38ce5..00000000 --- a/.claude-plugin/memesh/dist/a2a/executor/TaskExecutor.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"TaskExecutor.js","sourceRoot":"","sources":["../../../src/a2a/executor/TaskExecutor.ts"],"names":[],"mappings":"AAmCA,MAAM,OAAO,YAAY;IACf,SAAS,CAAY;IACrB,MAAM,CAAU;IAChB,SAAS,CAAmB;IASpC,YACE,SAAoB,EACpB,MAAe,EACf,SAA2B;QAE3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAkBD,KAAK,CAAC,WAAW,CACf,MAAc,EACd,IAAY,EACZ,OAAe;QAIf,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAE9D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,MAAM,EAAE,CAAC,CAAC;IAG9D,CAAC;CACF"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/executor/index.d.ts b/.claude-plugin/memesh/dist/a2a/executor/index.d.ts deleted file mode 100644 index 9492821f..00000000 --- a/.claude-plugin/memesh/dist/a2a/executor/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { TaskExecutor } from './TaskExecutor.js'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/executor/index.d.ts.map b/.claude-plugin/memesh/dist/a2a/executor/index.d.ts.map deleted file mode 100644 index e2d509cb..00000000 --- a/.claude-plugin/memesh/dist/a2a/executor/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/a2a/executor/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/executor/index.js b/.claude-plugin/memesh/dist/a2a/executor/index.js deleted file mode 100644 index 38b5d8af..00000000 --- a/.claude-plugin/memesh/dist/a2a/executor/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export { TaskExecutor } from './TaskExecutor.js'; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/executor/index.js.map b/.claude-plugin/memesh/dist/a2a/executor/index.js.map deleted file mode 100644 index 7243e998..00000000 --- a/.claude-plugin/memesh/dist/a2a/executor/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/a2a/executor/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/jobs/TimeoutChecker.d.ts b/.claude-plugin/memesh/dist/a2a/jobs/TimeoutChecker.d.ts deleted file mode 100644 index f3436e50..00000000 --- a/.claude-plugin/memesh/dist/a2a/jobs/TimeoutChecker.d.ts +++ /dev/null @@ -1,49 +0,0 @@ -import type { MCPTaskDelegator } from '../delegator/MCPTaskDelegator.js'; -declare enum CircuitState { - CLOSED = "CLOSED", - OPEN = "OPEN", - HALF_OPEN = "HALF_OPEN" -} -interface TimeoutCheckerConfig { - intervalMs?: number; - maxConsecutiveErrors?: number; - circuitCooldownMs?: number; - enableAlerting?: boolean; -} -export declare class TimeoutChecker { - private delegator; - private intervalId; - private interval; - private circuitState; - private consecutiveErrors; - private lastErrorTime; - private circuitOpenedAt; - private readonly maxConsecutiveErrors; - private readonly circuitCooldownMs; - private readonly enableAlerting; - private totalChecks; - private totalErrors; - private lastSuccessfulCheck; - constructor(delegator: MCPTaskDelegator, config?: TimeoutCheckerConfig); - start(intervalMs?: number): void; - stop(): void; - isRunning(): boolean; - getInterval(): number; - getStatistics(): { - circuitState: CircuitState; - consecutiveErrors: number; - totalChecks: number; - totalErrors: number; - errorRate: number; - lastSuccessfulCheck: number | null; - }; - resetCircuit(): void; - private checkWithCircuitBreaker; - private handleSuccess; - private handleError; - private openCircuit; - private sendAlert; - private resetStatistics; -} -export {}; -//# sourceMappingURL=TimeoutChecker.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/jobs/TimeoutChecker.d.ts.map b/.claude-plugin/memesh/dist/a2a/jobs/TimeoutChecker.d.ts.map deleted file mode 100644 index 47e52004..00000000 --- a/.claude-plugin/memesh/dist/a2a/jobs/TimeoutChecker.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"TimeoutChecker.d.ts","sourceRoot":"","sources":["../../../src/a2a/jobs/TimeoutChecker.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAQzE,aAAK,YAAY;IACf,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,SAAS,cAAc;CACxB;AAKD,UAAU,oBAAoB;IAE5B,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAmCD,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,QAAQ,CAAS;IAGzB,OAAO,CAAC,YAAY,CAAqC;IACzD,OAAO,CAAC,iBAAiB,CAAa;IACtC,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,eAAe,CAAa;IAGpC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IAGzC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,mBAAmB,CAAa;gBAQ5B,SAAS,EAAE,gBAAgB,EAAE,MAAM,GAAE,oBAAyB;IAyB1E,KAAK,CAAC,UAAU,GAAE,MAAuC,GAAG,IAAI;IA+ChE,IAAI,IAAI,IAAI;IAgBZ,SAAS,IAAI,OAAO;IASpB,WAAW,IAAI,MAAM;IAOrB,aAAa,IAAI;QACf,YAAY,EAAE,YAAY,CAAC;QAC3B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;KACpC;IAeD,YAAY,IAAI,IAAI;YAWN,uBAAuB;IAiCrC,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,WAAW;IAwBnB,OAAO,CAAC,WAAW;IAgCnB,OAAO,CAAC,SAAS;IAcjB,OAAO,CAAC,eAAe;CASxB"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/jobs/TimeoutChecker.js b/.claude-plugin/memesh/dist/a2a/jobs/TimeoutChecker.js deleted file mode 100644 index 2ad4c9af..00000000 --- a/.claude-plugin/memesh/dist/a2a/jobs/TimeoutChecker.js +++ /dev/null @@ -1,176 +0,0 @@ -import { logger } from '../../utils/logger.js'; -import { ErrorCodes, formatErrorMessage } from '../errors/index.js'; -import { TIME } from '../constants.js'; -var CircuitState; -(function (CircuitState) { - CircuitState["CLOSED"] = "CLOSED"; - CircuitState["OPEN"] = "OPEN"; - CircuitState["HALF_OPEN"] = "HALF_OPEN"; -})(CircuitState || (CircuitState = {})); -export class TimeoutChecker { - delegator; - intervalId = null; - interval; - circuitState = CircuitState.CLOSED; - consecutiveErrors = 0; - lastErrorTime = 0; - circuitOpenedAt = 0; - maxConsecutiveErrors; - circuitCooldownMs; - enableAlerting; - totalChecks = 0; - totalErrors = 0; - lastSuccessfulCheck = 0; - constructor(delegator, config = {}) { - this.delegator = delegator; - this.interval = config.intervalMs || TIME.TIMEOUT_CHECK_INTERVAL_MS; - this.maxConsecutiveErrors = config.maxConsecutiveErrors || 5; - this.circuitCooldownMs = config.circuitCooldownMs || 300_000; - this.enableAlerting = config.enableAlerting !== false; - } - start(intervalMs = TIME.TIMEOUT_CHECK_INTERVAL_MS) { - if (this.intervalId) { - logger.warn('[TimeoutChecker] Already running'); - return; - } - this.interval = intervalMs; - this.resetStatistics(); - this.intervalId = setInterval(() => { - this.checkWithCircuitBreaker().catch((err) => { - this.totalErrors++; - this.consecutiveErrors++; - this.lastErrorTime = Date.now(); - logger.error('[TimeoutChecker] Unhandled error in interval check', { - error: err instanceof Error ? err.message : String(err), - stack: err instanceof Error ? err.stack : undefined, - consecutiveErrors: this.consecutiveErrors, - circuitState: this.circuitState, - }); - if (this.consecutiveErrors >= this.maxConsecutiveErrors && - this.circuitState !== CircuitState.OPEN) { - this.openCircuit(); - } - }); - }, intervalMs); - logger.info('[TimeoutChecker] Started', { - intervalMs, - maxConsecutiveErrors: this.maxConsecutiveErrors, - circuitCooldownMs: this.circuitCooldownMs, - }); - } - stop() { - if (this.intervalId) { - clearInterval(this.intervalId); - this.intervalId = null; - logger.info('[TimeoutChecker] Stopped', { - statistics: this.getStatistics(), - }); - } - } - isRunning() { - return this.intervalId !== null; - } - getInterval() { - return this.interval; - } - getStatistics() { - return { - circuitState: this.circuitState, - consecutiveErrors: this.consecutiveErrors, - totalChecks: this.totalChecks, - totalErrors: this.totalErrors, - errorRate: this.totalChecks > 0 ? this.totalErrors / this.totalChecks : 0, - lastSuccessfulCheck: this.lastSuccessfulCheck || null, - }; - } - resetCircuit() { - this.circuitState = CircuitState.CLOSED; - this.consecutiveErrors = 0; - this.circuitOpenedAt = 0; - logger.info('[TimeoutChecker] Circuit manually reset to CLOSED'); - } - async checkWithCircuitBreaker() { - this.totalChecks++; - if (this.circuitState === CircuitState.OPEN) { - const now = Date.now(); - if (now - this.circuitOpenedAt >= this.circuitCooldownMs) { - this.circuitState = CircuitState.HALF_OPEN; - logger.info('[TimeoutChecker] Circuit transitioning to HALF_OPEN for recovery test'); - } - else { - logger.debug('[TimeoutChecker] Circuit is OPEN, skipping check', { - cooldownRemaining: Math.ceil((this.circuitCooldownMs - (now - this.circuitOpenedAt)) / 1000), - }); - return; - } - } - try { - await this.delegator.checkTimeouts(); - this.handleSuccess(); - } - catch (error) { - this.handleError(error); - } - } - handleSuccess() { - this.lastSuccessfulCheck = Date.now(); - if (this.circuitState === CircuitState.HALF_OPEN) { - this.circuitState = CircuitState.CLOSED; - logger.info('[TimeoutChecker] Circuit recovered - transitioning to CLOSED', { - previousErrors: this.consecutiveErrors, - }); - } - this.consecutiveErrors = 0; - logger.debug('[TimeoutChecker] Check completed successfully'); - } - handleError(error) { - this.totalErrors++; - this.consecutiveErrors++; - this.lastErrorTime = Date.now(); - const errorMessage = error instanceof Error ? error.message : String(error); - logger.error('[TimeoutChecker] Check failed', { - error: errorMessage, - consecutiveErrors: this.consecutiveErrors, - maxConsecutiveErrors: this.maxConsecutiveErrors, - circuitState: this.circuitState, - stack: error instanceof Error ? error.stack : undefined, - }); - if (this.consecutiveErrors >= this.maxConsecutiveErrors) { - this.openCircuit(); - } - } - openCircuit() { - if (this.circuitState === CircuitState.OPEN) { - return; - } - this.circuitState = CircuitState.OPEN; - this.circuitOpenedAt = Date.now(); - const alertMessage = formatErrorMessage(ErrorCodes.TIMEOUT_CHECKER_CIRCUIT_OPEN, this.consecutiveErrors, this.maxConsecutiveErrors); - logger.error('[TimeoutChecker] Circuit breaker OPENED', { - consecutiveErrors: this.consecutiveErrors, - maxConsecutiveErrors: this.maxConsecutiveErrors, - cooldownMs: this.circuitCooldownMs, - statistics: this.getStatistics(), - }); - if (this.enableAlerting) { - this.sendAlert(alertMessage); - } - } - sendAlert(message) { - logger.error('[TimeoutChecker] ALERT: Systematic failure detected', { - message, - statistics: this.getStatistics(), - timestamp: new Date().toISOString(), - }); - } - resetStatistics() { - this.totalChecks = 0; - this.totalErrors = 0; - this.consecutiveErrors = 0; - this.lastSuccessfulCheck = 0; - this.lastErrorTime = 0; - this.circuitState = CircuitState.CLOSED; - this.circuitOpenedAt = 0; - } -} -//# sourceMappingURL=TimeoutChecker.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/jobs/TimeoutChecker.js.map b/.claude-plugin/memesh/dist/a2a/jobs/TimeoutChecker.js.map deleted file mode 100644 index 5002dbc7..00000000 --- a/.claude-plugin/memesh/dist/a2a/jobs/TimeoutChecker.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"TimeoutChecker.js","sourceRoot":"","sources":["../../../src/a2a/jobs/TimeoutChecker.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/metrics/A2AMetrics.d.ts b/.claude-plugin/memesh/dist/a2a/metrics/A2AMetrics.d.ts deleted file mode 100644 index 5853e1ff..00000000 --- a/.claude-plugin/memesh/dist/a2a/metrics/A2AMetrics.d.ts +++ /dev/null @@ -1,38 +0,0 @@ -export type MetricType = 'counter' | 'gauge' | 'histogram'; -export interface MetricValue { - type: MetricType; - value: number; - labels: Record; - timestamp: number; -} -export declare class A2AMetrics { - private static instance; - private metrics; - private enabled; - private constructor(); - static getInstance(): A2AMetrics; - static resetInstance(): void; - incrementCounter(name: string, labels?: Record, value?: number): void; - setGauge(name: string, value: number, labels?: Record): void; - recordHistogram(name: string, value: number, labels?: Record): void; - getValue(name: string, labels?: Record): number | undefined; - getSnapshot(): Map; - clear(): void; - setEnabled(enabled: boolean): void; - private getKey; -} -export declare const METRIC_NAMES: { - readonly TASKS_SUBMITTED: "a2a.tasks.submitted"; - readonly TASKS_COMPLETED: "a2a.tasks.completed"; - readonly TASKS_FAILED: "a2a.tasks.failed"; - readonly TASKS_TIMEOUT: "a2a.tasks.timeout"; - readonly TASKS_CANCELED: "a2a.tasks.canceled"; - readonly TASK_DURATION_MS: "a2a.task.duration_ms"; - readonly QUEUE_SIZE: "a2a.queue.size"; - readonly QUEUE_DEPTH: "a2a.queue.depth"; - readonly HEARTBEAT_SUCCESS: "a2a.heartbeat.success"; - readonly HEARTBEAT_FAILURE: "a2a.heartbeat.failure"; - readonly AGENTS_ACTIVE: "a2a.agents.active"; - readonly AGENTS_STALE: "a2a.agents.stale"; -}; -//# sourceMappingURL=A2AMetrics.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/metrics/A2AMetrics.d.ts.map b/.claude-plugin/memesh/dist/a2a/metrics/A2AMetrics.d.ts.map deleted file mode 100644 index 018c861c..00000000 --- a/.claude-plugin/memesh/dist/a2a/metrics/A2AMetrics.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"A2AMetrics.d.ts","sourceRoot":"","sources":["../../../src/a2a/metrics/A2AMetrics.ts"],"names":[],"mappings":"AAeA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,CAAC;AAK3D,MAAM,WAAW,WAAW;IAE1B,IAAI,EAAE,UAAU,CAAC;IAEjB,KAAK,EAAE,MAAM,CAAC;IAEd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE/B,SAAS,EAAE,MAAM,CAAC;CACnB;AA4BD,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA2B;IAClD,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,OAAO,CAAU;IAEzB,OAAO;IAYP,MAAM,CAAC,WAAW,IAAI,UAAU;IAUhC,MAAM,CAAC,aAAa,IAAI,IAAI;IAiB5B,gBAAgB,CACd,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EACnC,KAAK,GAAE,MAAU,GAChB,IAAI;IAqDP,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,IAAI;IAuChF,eAAe,CACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAClC,IAAI;IA0CP,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,MAAM,GAAG,SAAS;IAU/E,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC;IAOvC,KAAK,IAAI,IAAI;IAQb,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAQlC,OAAO,CAAC,MAAM;CAQf;AAKD,eAAO,MAAM,YAAY;;;;;;;;;;;;;CAsBf,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/metrics/A2AMetrics.js b/.claude-plugin/memesh/dist/a2a/metrics/A2AMetrics.js deleted file mode 100644 index 088bdb29..00000000 --- a/.claude-plugin/memesh/dist/a2a/metrics/A2AMetrics.js +++ /dev/null @@ -1,142 +0,0 @@ -import { logger } from '../../utils/logger.js'; -export class A2AMetrics { - static instance = null; - metrics; - enabled; - constructor() { - this.metrics = new Map(); - this.enabled = process.env.A2A_METRICS_ENABLED !== 'false'; - if (this.enabled) { - logger.info('[A2A Metrics] Metrics collection enabled'); - } - } - static getInstance() { - if (!A2AMetrics.instance) { - A2AMetrics.instance = new A2AMetrics(); - } - return A2AMetrics.instance; - } - static resetInstance() { - A2AMetrics.instance = null; - } - incrementCounter(name, labels = {}, value = 1) { - if (!this.enabled) - return; - if (!Number.isFinite(value)) { - logger.error('[A2A Metrics] Counter increment value must be finite', { - name, - value, - labels - }); - return; - } - if (value < 0) { - logger.error('[A2A Metrics] Counter increment value must be non-negative', { - name, - value, - labels - }); - return; - } - const key = this.getKey(name, labels); - const existing = this.metrics.get(key); - if (existing) { - existing.value += value; - existing.timestamp = Date.now(); - } - else { - this.metrics.set(key, { - type: 'counter', - value, - labels, - timestamp: Date.now(), - }); - } - logger.debug(`[A2A Metrics] Counter ${name} = ${this.metrics.get(key)?.value}`, labels); - } - setGauge(name, value, labels = {}) { - if (!this.enabled) - return; - if (!Number.isFinite(value)) { - logger.error('[A2A Metrics] Gauge value must be finite', { - name, - value, - labels - }); - return; - } - const key = this.getKey(name, labels); - this.metrics.set(key, { - type: 'gauge', - value, - labels, - timestamp: Date.now(), - }); - logger.debug(`[A2A Metrics] Gauge ${name} = ${value}`, labels); - } - recordHistogram(name, value, labels = {}) { - if (!this.enabled) - return; - if (!Number.isFinite(value)) { - logger.error('[A2A Metrics] Histogram value must be finite', { - name, - value, - labels - }); - return; - } - if (value < 0) { - logger.error('[A2A Metrics] Histogram value must be non-negative', { - name, - value, - labels - }); - return; - } - const key = this.getKey(name, labels); - this.metrics.set(key, { - type: 'histogram', - value, - labels, - timestamp: Date.now(), - }); - logger.debug(`[A2A Metrics] Histogram ${name} = ${value}`, labels); - } - getValue(name, labels = {}) { - const key = this.getKey(name, labels); - return this.metrics.get(key)?.value; - } - getSnapshot() { - return new Map(this.metrics); - } - clear() { - this.metrics.clear(); - logger.debug('[A2A Metrics] All metrics cleared'); - } - setEnabled(enabled) { - this.enabled = enabled; - logger.info(`[A2A Metrics] Metrics collection ${enabled ? 'enabled' : 'disabled'}`); - } - getKey(name, labels) { - const labelStr = Object.entries(labels) - .sort(([a], [b]) => a.localeCompare(b)) - .map(([k, v]) => `${k}=${v}`) - .join(','); - return labelStr ? `${name}{${labelStr}}` : name; - } -} -export const METRIC_NAMES = { - TASKS_SUBMITTED: 'a2a.tasks.submitted', - TASKS_COMPLETED: 'a2a.tasks.completed', - TASKS_FAILED: 'a2a.tasks.failed', - TASKS_TIMEOUT: 'a2a.tasks.timeout', - TASKS_CANCELED: 'a2a.tasks.canceled', - TASK_DURATION_MS: 'a2a.task.duration_ms', - QUEUE_SIZE: 'a2a.queue.size', - QUEUE_DEPTH: 'a2a.queue.depth', - HEARTBEAT_SUCCESS: 'a2a.heartbeat.success', - HEARTBEAT_FAILURE: 'a2a.heartbeat.failure', - AGENTS_ACTIVE: 'a2a.agents.active', - AGENTS_STALE: 'a2a.agents.stale', -}; -//# sourceMappingURL=A2AMetrics.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/metrics/A2AMetrics.js.map b/.claude-plugin/memesh/dist/a2a/metrics/A2AMetrics.js.map deleted file mode 100644 index c6badac3..00000000 --- a/.claude-plugin/memesh/dist/a2a/metrics/A2AMetrics.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"A2AMetrics.js","sourceRoot":"","sources":["../../../src/a2a/metrics/A2AMetrics.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/metrics/index.d.ts b/.claude-plugin/memesh/dist/a2a/metrics/index.d.ts deleted file mode 100644 index 91f44c7e..00000000 --- a/.claude-plugin/memesh/dist/a2a/metrics/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { A2AMetrics, METRIC_NAMES } from './A2AMetrics.js'; -export type { MetricType, MetricValue } from './A2AMetrics.js'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/metrics/index.d.ts.map b/.claude-plugin/memesh/dist/a2a/metrics/index.d.ts.map deleted file mode 100644 index 70cee6a6..00000000 --- a/.claude-plugin/memesh/dist/a2a/metrics/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/a2a/metrics/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC3D,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/metrics/index.js b/.claude-plugin/memesh/dist/a2a/metrics/index.js deleted file mode 100644 index 57ae38a5..00000000 --- a/.claude-plugin/memesh/dist/a2a/metrics/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export { A2AMetrics, METRIC_NAMES } from './A2AMetrics.js'; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/metrics/index.js.map b/.claude-plugin/memesh/dist/a2a/metrics/index.js.map deleted file mode 100644 index 3da6139b..00000000 --- a/.claude-plugin/memesh/dist/a2a/metrics/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/a2a/metrics/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/A2AServer.d.ts b/.claude-plugin/memesh/dist/a2a/server/A2AServer.d.ts deleted file mode 100644 index b5a0c6a0..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/A2AServer.d.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { TaskQueue } from '../storage/TaskQueue.js'; -import type { AgentCard } from '../types/index.js'; -export interface A2AServerConfig { - agentId: string; - agentCard: AgentCard; - port?: number; - portRange?: { - min: number; - max: number; - }; - heartbeatInterval?: number; -} -export declare class A2AServer { - private config; - private app; - private server; - private taskQueue; - private registry; - private routes; - private heartbeatTimer; - private port; - private delegator; - private timeoutChecker; - constructor(config: A2AServerConfig); - private createApp; - start(): Promise; - stop(): Promise; - getPort(): number; - getTaskQueue(): TaskQueue; - private findAvailablePort; - private isPortAvailable; - private startHeartbeat; -} -//# sourceMappingURL=A2AServer.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/A2AServer.d.ts.map b/.claude-plugin/memesh/dist/a2a/server/A2AServer.d.ts.map deleted file mode 100644 index 70bfe690..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/A2AServer.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"A2AServer.d.ts","sourceRoot":"","sources":["../../../src/a2a/server/A2AServer.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAMpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAkCnD,MAAM,WAAW,eAAe;IAE9B,OAAO,EAAE,MAAM,CAAC;IAEhB,SAAS,EAAE,SAAS,CAAC;IAErB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,SAAS,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAEzC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAkCD,qBAAa,SAAS;IAgBR,OAAO,CAAC,MAAM;IAf1B,OAAO,CAAC,GAAG,CAAU;IACrB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,cAAc,CAAiB;gBAOnB,MAAM,EAAE,eAAe;IAY3C,OAAO,CAAC,SAAS;IAqFX,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAsExB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA0C3B,OAAO,IAAI,MAAM;IASjB,YAAY,IAAI,SAAS;YAUX,iBAAiB;YAgBjB,eAAe;IA2B7B,OAAO,CAAC,cAAc;CAQvB"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/A2AServer.js b/.claude-plugin/memesh/dist/a2a/server/A2AServer.js deleted file mode 100644 index 4252518b..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/A2AServer.js +++ /dev/null @@ -1,160 +0,0 @@ -import express from 'express'; -import { createServer } from 'net'; -import { logger } from '../../utils/logger.js'; -import { TaskQueue } from '../storage/TaskQueue.js'; -import { AgentRegistry, startAgentRegistryCleanup, stopAgentRegistryCleanup, } from '../storage/AgentRegistry.js'; -import { A2ARoutes } from './routes.js'; -import { errorHandler, requestLogger, corsMiddleware, jsonErrorHandler, } from './middleware.js'; -import { authenticateToken } from './middleware/auth.js'; -import { rateLimitMiddleware, startCleanup, stopCleanup, } from './middleware/rateLimit.js'; -import { requestTimeoutMiddleware } from './middleware/timeout.js'; -import { resourceProtectionMiddleware, startResourceProtectionCleanup, stopResourceProtectionCleanup, } from './middleware/resourceProtection.js'; -import { csrfTokenMiddleware, csrfProtection, startCsrfCleanup, stopCsrfCleanup, } from './middleware/csrf.js'; -import { MCPTaskDelegator } from '../delegator/MCPTaskDelegator.js'; -import { TimeoutChecker } from '../jobs/TimeoutChecker.js'; -import { TIME, NETWORK } from '../constants.js'; -import { tracingMiddleware, spanMiddleware } from '../../utils/tracing/index.js'; -export class A2AServer { - config; - app; - server = null; - taskQueue; - registry; - routes; - heartbeatTimer = null; - port = 0; - delegator; - timeoutChecker; - constructor(config) { - this.config = config; - this.taskQueue = new TaskQueue(config.agentId); - this.registry = AgentRegistry.getInstance(); - this.routes = new A2ARoutes(config.agentId, this.taskQueue, config.agentCard); - this.app = this.createApp(); - this.delegator = new MCPTaskDelegator(this.taskQueue, logger); - this.timeoutChecker = new TimeoutChecker(this.delegator); - this.routes.setDelegator(this.delegator); - } - createApp() { - const app = express(); - app.use(resourceProtectionMiddleware()); - app.use(express.json({ limit: '10mb' })); - app.use(corsMiddleware); - app.use(tracingMiddleware()); - app.use(requestTimeoutMiddleware()); - app.use(requestLogger); - app.use(csrfTokenMiddleware); - app.post('/a2a/send-message', authenticateToken, csrfProtection, rateLimitMiddleware, spanMiddleware('a2a.send-message'), this.routes.sendMessage); - app.get('/a2a/tasks/:taskId', authenticateToken, rateLimitMiddleware, spanMiddleware('a2a.get-task'), this.routes.getTask); - app.get('/a2a/tasks', authenticateToken, rateLimitMiddleware, spanMiddleware('a2a.list-tasks'), this.routes.listTasks); - app.post('/a2a/tasks/:taskId/cancel', authenticateToken, csrfProtection, rateLimitMiddleware, spanMiddleware('a2a.cancel-task'), this.routes.cancelTask); - app.get('/a2a/agent-card', spanMiddleware('a2a.agent-card'), this.routes.getAgentCard); - app.use(jsonErrorHandler); - app.use(errorHandler); - return app; - } - async start() { - const port = await this.findAvailablePort(); - this.port = port; - return new Promise((resolve, reject) => { - this.server = this.app.listen(port, () => { - logger.info('[A2A Server] Started', { port }); - const baseUrl = `http://localhost:${port}`; - this.registry.register({ - agentId: this.config.agentId, - baseUrl, - port, - capabilities: this.config.agentCard.capabilities, - }); - this.startHeartbeat(); - this.timeoutChecker.start(); - startCleanup(); - startResourceProtectionCleanup(); - startCsrfCleanup(); - startAgentRegistryCleanup(); - resolve(port); - }); - this.server.on('error', (err) => { - try { - this.taskQueue.close(); - } - catch (closeErr) { - logger.error('[A2A Server] Failed to close TaskQueue during startup error cleanup', { - originalError: err.message, - closeError: closeErr instanceof Error ? closeErr.message : String(closeErr), - }); - } - reject(err); - }); - }); - } - async stop() { - this.timeoutChecker.stop(); - stopCleanup(); - stopResourceProtectionCleanup(); - stopCsrfCleanup(); - stopAgentRegistryCleanup(); - if (this.heartbeatTimer) { - clearInterval(this.heartbeatTimer); - this.heartbeatTimer = null; - } - this.registry.deactivate(this.config.agentId); - if (this.server) { - return new Promise((resolve) => { - this.server.close(() => { - logger.info('[A2A Server] Stopped'); - this.taskQueue.close(); - resolve(); - }); - }); - } - else { - this.taskQueue.close(); - } - } - getPort() { - return this.port; - } - getTaskQueue() { - return this.taskQueue; - } - async findAvailablePort() { - if (this.config.port) { - return this.config.port; - } - const range = this.config.portRange || NETWORK.DEFAULT_PORT_RANGE; - for (let port = range.min; port <= range.max; port++) { - if (await this.isPortAvailable(port)) { - return port; - } - } - throw new Error(`No available port in range ${range.min}-${range.max}`); - } - async isPortAvailable(port) { - return new Promise((resolve) => { - const server = createServer(); - server.once('error', (err) => { - if (err.code === 'EADDRINUSE') { - resolve(false); - } - else { - resolve(false); - } - }); - server.once('listening', () => { - server.close(() => { - resolve(true); - }); - }); - server.listen(port, '127.0.0.1'); - }); - } - startHeartbeat() { - const interval = this.config.heartbeatInterval || TIME.HEARTBEAT_INTERVAL_MS; - this.heartbeatTimer = setInterval(() => { - this.registry.heartbeat(this.config.agentId); - logger.debug('[A2A Server] Heartbeat sent', { agentId: this.config.agentId }); - }, interval); - } -} -//# sourceMappingURL=A2AServer.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/A2AServer.js.map b/.claude-plugin/memesh/dist/a2a/server/A2AServer.js.map deleted file mode 100644 index febe3fa2..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/A2AServer.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"A2AServer.js","sourceRoot":"","sources":["../../../src/a2a/server/A2AServer.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/index.d.ts b/.claude-plugin/memesh/dist/a2a/server/index.d.ts deleted file mode 100644 index 3d156571..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/index.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export { A2AServer, type A2AServerConfig } from './A2AServer.js'; -export { A2ARoutes } from './routes.js'; -export { errorHandler, requestLogger, corsMiddleware, jsonErrorHandler, } from './middleware.js'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/index.d.ts.map b/.claude-plugin/memesh/dist/a2a/server/index.d.ts.map deleted file mode 100644 index 9fe637cc..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/a2a/server/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACL,YAAY,EACZ,aAAa,EACb,cAAc,EACd,gBAAgB,GACjB,MAAM,iBAAiB,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/index.js b/.claude-plugin/memesh/dist/a2a/server/index.js deleted file mode 100644 index ded7c3f4..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/index.js +++ /dev/null @@ -1,4 +0,0 @@ -export { A2AServer } from './A2AServer.js'; -export { A2ARoutes } from './routes.js'; -export { errorHandler, requestLogger, corsMiddleware, jsonErrorHandler, } from './middleware.js'; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/index.js.map b/.claude-plugin/memesh/dist/a2a/server/index.js.map deleted file mode 100644 index c4d0de82..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/a2a/server/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAwB,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACL,YAAY,EACZ,aAAa,EACb,cAAc,EACd,gBAAgB,GACjB,MAAM,iBAAiB,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/middleware.d.ts b/.claude-plugin/memesh/dist/a2a/server/middleware.d.ts deleted file mode 100644 index 52b1405f..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/middleware.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { Request, Response, NextFunction } from 'express'; -export declare function errorHandler(err: Error, req: Request, res: Response, _next: NextFunction): void; -export declare function requestLogger(req: Request, res: Response, next: NextFunction): void; -export declare function corsMiddleware(req: Request, res: Response, next: NextFunction): void; -export declare function jsonErrorHandler(err: Error, _req: Request, res: Response, next: NextFunction): void; -//# sourceMappingURL=middleware.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/middleware.d.ts.map b/.claude-plugin/memesh/dist/a2a/server/middleware.d.ts.map deleted file mode 100644 index 455f9ccd..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/middleware.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/a2a/server/middleware.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAO/D,wBAAgB,YAAY,CAC1B,GAAG,EAAE,KAAK,EACV,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,YAAY,GAClB,IAAI,CAoBN;AAKD,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAcnF;AASD,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAgCpF;AAKD,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,KAAK,EACV,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,IAAI,CAeN"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/middleware.js b/.claude-plugin/memesh/dist/a2a/server/middleware.js deleted file mode 100644 index 6d1d99ab..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/middleware.js +++ /dev/null @@ -1,72 +0,0 @@ -import { logger } from '../../utils/logger.js'; -export function errorHandler(err, req, res, _next) { - logger.error('[A2A Server] Error', { - error: err.message, - stack: err.stack, - method: req.method, - path: req.path, - }); - const error = { - code: 'INTERNAL_ERROR', - message: err.message || 'Internal server error', - details: { - stack: process.env.NODE_ENV === 'development' ? err.stack : undefined, - }, - }; - res.status(500).json({ - success: false, - error, - }); -} -export function requestLogger(req, res, next) { - const start = Date.now(); - res.on('finish', () => { - const duration = Date.now() - start; - logger.info('[A2A Server] Request', { - method: req.method, - path: req.path, - statusCode: res.statusCode, - duration, - }); - }); - next(); -} -export function corsMiddleware(req, res, next) { - const origin = req.headers.origin; - const ALLOWED_LOCALHOST_PATTERNS = [ - 'http://localhost:', - 'http://127.0.0.1:', - 'https://localhost:', - 'https://127.0.0.1:', - ]; - const isValidLocalhost = origin && ALLOWED_LOCALHOST_PATTERNS.some((pattern) => origin.startsWith(pattern)); - if (isValidLocalhost) { - res.header('Access-Control-Allow-Origin', origin); - res.header('Access-Control-Allow-Credentials', 'true'); - } - res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS'); - res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization'); - if (req.method === 'OPTIONS') { - res.sendStatus(200); - } - else { - next(); - } -} -export function jsonErrorHandler(err, _req, res, next) { - if (err instanceof SyntaxError && 'body' in err) { - const error = { - code: 'INVALID_JSON', - message: 'Invalid JSON in request body', - details: { error: err.message }, - }; - res.status(400).json({ - success: false, - error, - }); - } - else { - next(err); - } -} -//# sourceMappingURL=middleware.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/middleware.js.map b/.claude-plugin/memesh/dist/a2a/server/middleware.js.map deleted file mode 100644 index f3757c3b..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/middleware.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/a2a/server/middleware.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/middleware/auth.d.ts b/.claude-plugin/memesh/dist/a2a/server/middleware/auth.d.ts deleted file mode 100644 index ae2e51d1..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/middleware/auth.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { Request, Response, NextFunction } from 'express'; -export interface AuthenticatedRequest extends Request { - agentId?: string; -} -export declare function authenticateToken(req: Request, res: Response, next: NextFunction): void; -//# sourceMappingURL=auth.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/middleware/auth.d.ts.map b/.claude-plugin/memesh/dist/a2a/server/middleware/auth.d.ts.map deleted file mode 100644 index be75026b..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/middleware/auth.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../../src/a2a/server/middleware/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAO/D,MAAM,WAAW,oBAAqB,SAAQ,OAAO;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAqCD,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,IAAI,CA6DN"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/middleware/auth.js b/.claude-plugin/memesh/dist/a2a/server/middleware/auth.js deleted file mode 100644 index a5ad7f19..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/middleware/auth.js +++ /dev/null @@ -1,64 +0,0 @@ -import { timingSafeEqual, createHash } from 'crypto'; -import { logger } from '../../../utils/logger.js'; -function constantTimeCompare(a, b) { - if (a.length !== b.length) { - const dummy = 'x'.repeat(b.length); - const bufferA = Buffer.from(a.length >= b.length ? a : dummy, 'utf8'); - const bufferB = Buffer.from(b, 'utf8'); - if (bufferA.length !== bufferB.length) { - return false; - } - timingSafeEqual(bufferA, bufferB); - return false; - } - try { - const bufferA = Buffer.from(a, 'utf8'); - const bufferB = Buffer.from(b, 'utf8'); - return timingSafeEqual(bufferA, bufferB); - } - catch (error) { - logger.error('Error in constant-time comparison', { error }); - return false; - } -} -export function authenticateToken(req, res, next) { - const authHeader = req.headers['authorization']; - const token = authHeader && authHeader.split(' ')[1]; - const validToken = process.env.MEMESH_A2A_TOKEN; - if (!validToken) { - logger.error('MEMESH_A2A_TOKEN not configured'); - res.status(500).json({ - error: 'Server configuration error', - code: 'TOKEN_NOT_CONFIGURED' - }); - return; - } - if (!token) { - res.status(401).json({ - error: 'Authentication token required', - code: 'AUTH_MISSING' - }); - return; - } - if (!constantTimeCompare(token, validToken)) { - res.status(401).json({ - error: 'Invalid authentication token', - code: 'AUTH_INVALID' - }); - return; - } - const authReq = req; - const body = req.body; - if (body?.agentCard?.id) { - authReq.agentId = body.agentCard.id; - } - else { - const tokenHash = createHash('sha256') - .update(token) - .digest('hex') - .substring(0, 16); - authReq.agentId = `token-${tokenHash}`; - } - next(); -} -//# sourceMappingURL=auth.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/middleware/auth.js.map b/.claude-plugin/memesh/dist/a2a/server/middleware/auth.js.map deleted file mode 100644 index 0d2e56c4..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/middleware/auth.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../src/a2a/server/middleware/auth.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/middleware/csrf.d.ts b/.claude-plugin/memesh/dist/a2a/server/middleware/csrf.d.ts deleted file mode 100644 index 027dff77..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/middleware/csrf.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { Request, Response, NextFunction } from 'express'; -export declare function startCsrfCleanup(): void; -export declare function stopCsrfCleanup(): void; -export declare function clearCsrfTokens(): void; -export declare function csrfTokenMiddleware(req: Request, res: Response, next: NextFunction): void; -export declare function csrfProtection(req: Request, res: Response, next: NextFunction): void; -//# sourceMappingURL=csrf.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/middleware/csrf.d.ts.map b/.claude-plugin/memesh/dist/a2a/server/middleware/csrf.d.ts.map deleted file mode 100644 index ee5f6444..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/middleware/csrf.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"csrf.d.ts","sourceRoot":"","sources":["../../../../src/a2a/server/middleware/csrf.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAuL/D,wBAAgB,gBAAgB,IAAI,IAAI,CAWvC;AAKD,wBAAgB,eAAe,IAAI,IAAI,CAMtC;AAKD,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAaD,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,IAAI,CAoBN;AAoBD,wBAAgB,cAAc,CAC5B,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,IAAI,CAwGN"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/middleware/csrf.js b/.claude-plugin/memesh/dist/a2a/server/middleware/csrf.js deleted file mode 100644 index 5609d342..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/middleware/csrf.js +++ /dev/null @@ -1,169 +0,0 @@ -import { randomBytes } from 'crypto'; -import { logger } from '../../../utils/logger.js'; -import { LRUCache } from '../../../utils/lru-cache.js'; -const CONFIG_BOUNDS = { - maxTokens: { min: 100, max: 1_000_000, default: 10_000 }, - tokenExpirationMs: { min: 60_000, max: 86_400_000, default: 3_600_000 }, - evictionWarningCooldownMs: { min: 1_000, max: 3_600_000, default: 60_000 }, -}; -function getConfigValue(envVar, defaultValue, min, max) { - const envValue = process.env[envVar]; - if (!envValue) { - return defaultValue; - } - const parsed = parseInt(envValue, 10); - if (isNaN(parsed)) { - logger.warn(`[CSRF] Invalid ${envVar}="${envValue}" (not a number), using default ${defaultValue}`); - return defaultValue; - } - if (parsed < min || parsed > max) { - logger.warn(`[CSRF] Invalid ${envVar}=${parsed} (out of bounds [${min}, ${max}]), using default ${defaultValue}`); - return defaultValue; - } - return parsed; -} -const MAX_TOKENS = getConfigValue('CSRF_MAX_TOKENS', CONFIG_BOUNDS.maxTokens.default, CONFIG_BOUNDS.maxTokens.min, CONFIG_BOUNDS.maxTokens.max); -const TOKEN_EXPIRATION_MS = getConfigValue('CSRF_TOKEN_EXPIRATION_MS', CONFIG_BOUNDS.tokenExpirationMs.default, CONFIG_BOUNDS.tokenExpirationMs.min, CONFIG_BOUNDS.tokenExpirationMs.max); -const tokens = new LRUCache({ - maxSize: MAX_TOKENS, - ttl: TOKEN_EXPIRATION_MS, -}); -let lastEvictionWarningTime = 0; -const EVICTION_WARNING_COOLDOWN_MS = getConfigValue('CSRF_EVICTION_WARNING_COOLDOWN_MS', CONFIG_BOUNDS.evictionWarningCooldownMs.default, CONFIG_BOUNDS.evictionWarningCooldownMs.min, CONFIG_BOUNDS.evictionWarningCooldownMs.max); -logger.info('[CSRF] Configuration loaded', { - maxTokens: MAX_TOKENS, - tokenExpirationMs: TOKEN_EXPIRATION_MS, - evictionWarningCooldownMs: EVICTION_WARNING_COOLDOWN_MS, -}); -const SAFE_METHODS = ['GET', 'HEAD', 'OPTIONS']; -function generateToken() { - return randomBytes(32).toString('hex'); -} -function storeToken(token, expiration) { - const atCapacity = tokens.size() >= MAX_TOKENS; - tokens.set(token, expiration); - if (atCapacity) { - const now = Date.now(); - if (now - lastEvictionWarningTime > EVICTION_WARNING_COOLDOWN_MS) { - lastEvictionWarningTime = now; - logger.warn('[CSRF] Token cache at capacity, LRU eviction triggered', { - maxTokens: MAX_TOKENS, - currentSize: tokens.size(), - }); - } - } -} -function cleanupExpiredTokens() { - const cleaned = tokens.cleanupExpired(); - if (cleaned > 0) { - logger.debug('[CSRF] Cleaned up expired tokens', { count: cleaned }); - } -} -let cleanupInterval = null; -export function startCsrfCleanup() { - if (cleanupInterval) { - return; - } - cleanupInterval = setInterval(() => { - cleanupExpiredTokens(); - }, 10 * 60 * 1000); - logger.info('[CSRF] Token cleanup started'); -} -export function stopCsrfCleanup() { - if (cleanupInterval) { - clearInterval(cleanupInterval); - cleanupInterval = null; - logger.info('[CSRF] Token cleanup stopped'); - } -} -export function clearCsrfTokens() { - tokens.clear(); -} -export function csrfTokenMiddleware(req, res, next) { - const token = generateToken(); - const expiration = Date.now() + TOKEN_EXPIRATION_MS; - storeToken(token, expiration); - res.cookie('XSRF-TOKEN', token, { - httpOnly: false, - secure: process.env.NODE_ENV === 'production', - sameSite: 'strict', - maxAge: TOKEN_EXPIRATION_MS, - }); - res.setHeader('X-CSRF-Token', token); - next(); -} -export function csrfProtection(req, res, next) { - if (SAFE_METHODS.includes(req.method)) { - return next(); - } - const authHeader = req.header('Authorization'); - if (authHeader?.startsWith('Bearer ')) { - logger.debug('[CSRF] Skipping CSRF check for Bearer token authentication', { - method: req.method, - path: req.path, - }); - return next(); - } - const token = req.header('X-CSRF-Token') || - (req.body && req.body.csrf_token); - if (!token) { - logger.warn('[CSRF] Missing CSRF token', { - method: req.method, - path: req.path, - ip: req.ip, - }); - res.status(403).json({ - success: false, - error: { - code: 'CSRF_TOKEN_MISSING', - message: 'CSRF token required for this request', - }, - }); - return; - } - const entry = tokens.peek(token); - if (!entry) { - logger.warn('[CSRF] Invalid CSRF token', { - method: req.method, - path: req.path, - ip: req.ip, - }); - res.status(403).json({ - success: false, - error: { - code: 'CSRF_TOKEN_INVALID', - message: 'Invalid CSRF token', - }, - }); - return; - } - if (entry.value < Date.now()) { - logger.warn('[CSRF] Expired CSRF token', { - method: req.method, - path: req.path, - ip: req.ip, - }); - tokens.delete(token); - res.status(403).json({ - success: false, - error: { - code: 'CSRF_TOKEN_EXPIRED', - message: 'CSRF token expired, please refresh', - }, - }); - return; - } - tokens.delete(token); - const newToken = generateToken(); - const newExpiration = Date.now() + TOKEN_EXPIRATION_MS; - storeToken(newToken, newExpiration); - res.setHeader('X-CSRF-Token', newToken); - res.cookie('XSRF-TOKEN', newToken, { - httpOnly: false, - secure: process.env.NODE_ENV === 'production', - sameSite: 'strict', - maxAge: TOKEN_EXPIRATION_MS, - }); - next(); -} -//# sourceMappingURL=csrf.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/middleware/csrf.js.map b/.claude-plugin/memesh/dist/a2a/server/middleware/csrf.js.map deleted file mode 100644 index 37709386..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/middleware/csrf.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"csrf.js","sourceRoot":"","sources":["../../../../src/a2a/server/middleware/csrf.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/middleware/rateLimit.d.ts b/.claude-plugin/memesh/dist/a2a/server/middleware/rateLimit.d.ts deleted file mode 100644 index 89c966fe..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/middleware/rateLimit.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { Response, NextFunction } from 'express'; -import type { RateLimitStats } from '../../types/rateLimit.js'; -import type { AuthenticatedRequest } from './auth.js'; -export declare function startCleanup(): void; -export declare function stopCleanup(): void; -export declare function getRateLimitStats(): RateLimitStats[]; -export declare function clearRateLimitData(): void; -export declare function rateLimitMiddleware(req: AuthenticatedRequest, res: Response, next: NextFunction): void; -//# sourceMappingURL=rateLimit.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/middleware/rateLimit.d.ts.map b/.claude-plugin/memesh/dist/a2a/server/middleware/rateLimit.d.ts.map deleted file mode 100644 index df2d49ea..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/middleware/rateLimit.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"rateLimit.d.ts","sourceRoot":"","sources":["../../../../src/a2a/server/middleware/rateLimit.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGtD,OAAO,KAAK,EAAe,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAoPtD,wBAAgB,YAAY,IAAI,IAAI,CASnC;AAKD,wBAAgB,WAAW,IAAI,IAAI,CAMlC;AAKD,wBAAgB,iBAAiB,IAAI,cAAc,EAAE,CAEpD;AAKD,wBAAgB,kBAAkB,IAAI,IAAI,CAGzC;AAiBD,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,oBAAoB,EACzB,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,IAAI,CA0CN"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/middleware/rateLimit.js b/.claude-plugin/memesh/dist/a2a/server/middleware/rateLimit.js deleted file mode 100644 index d46fd2f8..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/middleware/rateLimit.js +++ /dev/null @@ -1,192 +0,0 @@ -import { logger } from '../../../utils/logger.js'; -import { RATE_LIMITS, ENV_KEYS } from '../../constants.js'; -const buckets = new Map(); -const stats = new Map(); -let cleanupTimer = null; -const refillGuard = new Set(); -function getRateLimitConfig(endpoint) { - const envMap = { - '/a2a/send-message': ENV_KEYS.RATE_LIMIT_SEND_MESSAGE, - '/a2a/tasks/:taskId': ENV_KEYS.RATE_LIMIT_GET_TASK, - '/a2a/tasks': ENV_KEYS.RATE_LIMIT_LIST_TASKS, - '/a2a/tasks/:taskId/cancel': ENV_KEYS.RATE_LIMIT_CANCEL_TASK, - }; - const defaultMap = { - '/a2a/send-message': RATE_LIMITS.SEND_MESSAGE_RPM, - '/a2a/tasks/:taskId': RATE_LIMITS.GET_TASK_RPM, - '/a2a/tasks': RATE_LIMITS.LIST_TASKS_RPM, - '/a2a/tasks/:taskId/cancel': RATE_LIMITS.CANCEL_TASK_RPM, - }; - const envKey = envMap[endpoint]; - if (envKey && process.env[envKey]) { - const parsed = parseInt(process.env[envKey], 10); - if (!isNaN(parsed) && parsed > 0) { - return parsed; - } - } - if (defaultMap[endpoint]) { - return defaultMap[endpoint]; - } - if (process.env[ENV_KEYS.RATE_LIMIT_DEFAULT]) { - const parsed = parseInt(process.env[ENV_KEYS.RATE_LIMIT_DEFAULT], 10); - if (!isNaN(parsed) && parsed > 0) { - return parsed; - } - } - return RATE_LIMITS.DEFAULT_RPM; -} -function normalizeEndpoint(path) { - if (/^\/a2a\/tasks\/[^/]+$/.test(path)) { - return '/a2a/tasks/:taskId'; - } - if (/^\/a2a\/tasks\/[^/]+\/cancel$/.test(path)) { - return '/a2a/tasks/:taskId/cancel'; - } - return path; -} -function getBucket(agentId, endpoint) { - const key = `${agentId}:${endpoint}`; - let bucket = buckets.get(key); - if (!bucket) { - const maxTokens = getRateLimitConfig(endpoint); - const refillRate = maxTokens / 60_000; - bucket = { - tokens: maxTokens, - maxTokens, - lastRefill: Date.now(), - refillRate, - }; - buckets.set(key, bucket); - } - return bucket; -} -function refillTokens(key, bucket) { - if (refillGuard.has(key)) { - return; - } - refillGuard.add(key); - try { - const now = Date.now(); - const elapsed = now - bucket.lastRefill; - const tokensToAdd = elapsed * bucket.refillRate; - if (tokensToAdd > 0) { - bucket.tokens = Math.min(bucket.maxTokens, bucket.tokens + tokensToAdd); - bucket.lastRefill = now; - } - } - finally { - refillGuard.delete(key); - } -} -function tryConsume(key, bucket) { - refillTokens(key, bucket); - if (bucket.tokens >= 1) { - bucket.tokens -= 1; - return true; - } - return false; -} -function calculateRetryAfter(bucket) { - const tokensNeeded = 1 - bucket.tokens; - const msNeeded = tokensNeeded / bucket.refillRate; - return Math.ceil(msNeeded / 1000); -} -function updateStats(agentId, endpoint, exceeded) { - const key = `${agentId}:${endpoint}`; - let stat = stats.get(key); - if (!stat) { - stat = { - agentId, - endpoint, - limitExceeded: 0, - totalRequests: 0, - }; - stats.set(key, stat); - } - stat.totalRequests += 1; - if (exceeded) { - stat.limitExceeded += 1; - stat.lastLimitHit = Date.now(); - logger.warn('[Rate Limit] Limit exceeded', { - agentId, - endpoint, - totalExceeded: stat.limitExceeded, - totalRequests: stat.totalRequests, - }); - } -} -function cleanup() { - const now = Date.now(); - const expirationThreshold = 10 * 60_000; - for (const [key, bucket] of buckets.entries()) { - if (now - bucket.lastRefill > expirationThreshold) { - buckets.delete(key); - } - } - for (const [key, stat] of stats.entries()) { - if (stat.lastLimitHit && now - stat.lastLimitHit > expirationThreshold) { - stats.delete(key); - } - } - logger.debug('[Rate Limit] Cleanup completed', { - remainingBuckets: buckets.size, - remainingStats: stats.size, - }); -} -export function startCleanup() { - if (cleanupTimer) { - return; - } - cleanupTimer = setInterval(cleanup, RATE_LIMITS.CLEANUP_INTERVAL_MS); - logger.info('[Rate Limit] Cleanup started', { - intervalMs: RATE_LIMITS.CLEANUP_INTERVAL_MS, - }); -} -export function stopCleanup() { - if (cleanupTimer) { - clearInterval(cleanupTimer); - cleanupTimer = null; - logger.info('[Rate Limit] Cleanup stopped'); - } -} -export function getRateLimitStats() { - return Array.from(stats.values()); -} -export function clearRateLimitData() { - buckets.clear(); - stats.clear(); -} -export function rateLimitMiddleware(req, res, next) { - const agentId = req.agentId; - if (!agentId) { - logger.error('[Rate Limit] Missing agentId in authenticated request'); - res.status(500).json({ - success: false, - error: { - code: 'INTERNAL_ERROR', - message: 'Internal server error', - }, - }); - return; - } - const endpoint = normalizeEndpoint(req.path); - const key = `${agentId}:${endpoint}`; - const bucket = getBucket(agentId, endpoint); - const allowed = tryConsume(key, bucket); - updateStats(agentId, endpoint, !allowed); - if (!allowed) { - const retryAfter = calculateRetryAfter(bucket); - res.setHeader('Retry-After', retryAfter.toString()); - res.status(429).json({ - success: false, - error: { - code: 'RATE_LIMIT_EXCEEDED', - message: `Rate limit exceeded. Try again in ${retryAfter} seconds.`, - retryAfter, - }, - }); - return; - } - next(); -} -//# sourceMappingURL=rateLimit.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/middleware/rateLimit.js.map b/.claude-plugin/memesh/dist/a2a/server/middleware/rateLimit.js.map deleted file mode 100644 index 2931566c..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/middleware/rateLimit.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"rateLimit.js","sourceRoot":"","sources":["../../../../src/a2a/server/middleware/rateLimit.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/middleware/resourceProtection.d.ts b/.claude-plugin/memesh/dist/a2a/server/middleware/resourceProtection.d.ts deleted file mode 100644 index b95c32d3..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/middleware/resourceProtection.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type { Request, Response, NextFunction } from 'express'; -export declare function startResourceProtectionCleanup(): void; -export declare function stopResourceProtectionCleanup(): void; -export declare function clearConnectionTracking(): void; -export declare function getConnectionStats(): { - totalIPs: number; - totalConnections: number; - topIPs: Array<{ - ip: string; - connections: number; - }>; -}; -export declare function connectionLimitMiddleware(): (req: Request, res: Response, next: NextFunction) => void; -export declare function payloadSizeLimitMiddleware(): (req: Request, res: Response, next: NextFunction) => void; -export declare function memoryPressureMiddleware(): (req: Request, res: Response, next: NextFunction) => void; -export declare function resourceProtectionMiddleware(): ((req: Request, res: Response, next: NextFunction) => void)[]; -//# sourceMappingURL=resourceProtection.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/middleware/resourceProtection.d.ts.map b/.claude-plugin/memesh/dist/a2a/server/middleware/resourceProtection.d.ts.map deleted file mode 100644 index 7159db10..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/middleware/resourceProtection.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"resourceProtection.d.ts","sourceRoot":"","sources":["../../../../src/a2a/server/middleware/resourceProtection.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAuI/D,wBAAgB,8BAA8B,IAAI,IAAI,CAWrD;AAKD,wBAAgB,6BAA6B,IAAI,IAAI,CAMpD;AAKD,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAKD,wBAAgB,kBAAkB,IAAI;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpD,CAkBA;AAaD,wBAAgB,yBAAyB,KAI/B,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CAyF/D;AAeD,wBAAgB,0BAA0B,KAIhC,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CA2C/D;AAqBD,wBAAgB,wBAAwB,KAG9B,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CAiC/D;AA4BD,wBAAgB,4BAA4B,WA5O7B,OAAO,OAAO,QAAQ,QAAQ,YAAY,KAAG,IAAI,IAkP/D"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/middleware/resourceProtection.js b/.claude-plugin/memesh/dist/a2a/server/middleware/resourceProtection.js deleted file mode 100644 index b70bbde4..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/middleware/resourceProtection.js +++ /dev/null @@ -1,258 +0,0 @@ -import v8 from 'v8'; -import { logger } from '../../../utils/logger.js'; -const connections = new Map(); -const DEFAULT_MAX_TRACKED_IPS = 10_000; -function getMaxTrackedIPs() { - const env = process.env.A2A_MAX_TRACKED_IPS; - if (!env) - return DEFAULT_MAX_TRACKED_IPS; - const parsed = parseInt(env, 10); - if (isNaN(parsed) || parsed <= 0 || parsed > 1_000_000) { - logger.warn(`Invalid A2A_MAX_TRACKED_IPS: ${env}, using default ${DEFAULT_MAX_TRACKED_IPS}`); - return DEFAULT_MAX_TRACKED_IPS; - } - return parsed; -} -let lastCapacityWarningTime = 0; -const CAPACITY_WARNING_COOLDOWN_MS = 60_000; -const DEFAULT_MAX_CONNECTIONS_PER_IP = 10; -const DEFAULT_MAX_PAYLOAD_SIZE_MB = 10; -const DEFAULT_CONNECTION_IDLE_TIMEOUT_MS = 5 * 60 * 1000; -const DEFAULT_MEMORY_PRESSURE_THRESHOLD = 85; -let cleanupTimer = null; -function getMaxConnectionsPerIP() { - const env = process.env.A2A_MAX_CONNECTIONS_PER_IP; - if (!env) - return DEFAULT_MAX_CONNECTIONS_PER_IP; - const parsed = parseInt(env, 10); - if (isNaN(parsed) || parsed <= 0) { - logger.warn(`Invalid A2A_MAX_CONNECTIONS_PER_IP: ${env}, using default ${DEFAULT_MAX_CONNECTIONS_PER_IP}`); - return DEFAULT_MAX_CONNECTIONS_PER_IP; - } - return parsed; -} -function getMaxPayloadSizeMB() { - const env = process.env.A2A_MAX_PAYLOAD_SIZE_MB; - if (!env) - return DEFAULT_MAX_PAYLOAD_SIZE_MB; - const parsed = parseInt(env, 10); - if (isNaN(parsed) || parsed <= 0 || parsed > 100) { - logger.warn(`Invalid A2A_MAX_PAYLOAD_SIZE_MB: ${env}, using default ${DEFAULT_MAX_PAYLOAD_SIZE_MB}`); - return DEFAULT_MAX_PAYLOAD_SIZE_MB; - } - return parsed; -} -function cleanupIdleConnections(aggressive = false) { - const now = Date.now(); - const timeout = aggressive - ? 30_000 - : DEFAULT_CONNECTION_IDLE_TIMEOUT_MS; - let cleaned = 0; - for (const [ip, data] of connections.entries()) { - if (data.count === 0 || now - data.lastActivity > timeout) { - connections.delete(ip); - cleaned++; - } - } - if (cleaned > 0) { - logger.debug('[Resource Protection] Cleaned up idle connections', { - count: cleaned, - remaining: connections.size, - aggressive, - }); - } - return cleaned; -} -export function startResourceProtectionCleanup() { - if (cleanupTimer) { - return; - } - cleanupTimer = setInterval(() => { - cleanupIdleConnections(); - }, 60 * 1000); - logger.info('[Resource Protection] Cleanup started'); -} -export function stopResourceProtectionCleanup() { - if (cleanupTimer) { - clearInterval(cleanupTimer); - cleanupTimer = null; - logger.info('[Resource Protection] Cleanup stopped'); - } -} -export function clearConnectionTracking() { - connections.clear(); -} -export function getConnectionStats() { - const totalIPs = connections.size; - let totalConnections = 0; - for (const data of connections.values()) { - totalConnections += data.count; - } - const topIPs = Array.from(connections.entries()) - .map(([ip, data]) => ({ ip, connections: data.count })) - .sort((a, b) => b.connections - a.connections) - .slice(0, 10); - return { - totalIPs, - totalConnections, - topIPs, - }; -} -export function connectionLimitMiddleware() { - const maxConnections = getMaxConnectionsPerIP(); - const maxTrackedIPs = getMaxTrackedIPs(); - return (req, res, next) => { - const ip = req.ip || req.socket.remoteAddress || 'unknown'; - const now = Date.now(); - let connectionData = connections.get(ip); - if (!connectionData) { - if (connections.size >= maxTrackedIPs) { - const cleaned = cleanupIdleConnections(true); - if (connections.size >= maxTrackedIPs) { - if (now - lastCapacityWarningTime > CAPACITY_WARNING_COOLDOWN_MS) { - lastCapacityWarningTime = now; - logger.warn('[Resource Protection] IP tracking capacity exhausted', { - maxTrackedIPs, - currentTrackedIPs: connections.size, - cleanedInAttempt: cleaned, - rejectedIP: ip, - }); - } - res.status(503).json({ - success: false, - error: { - code: 'SERVICE_OVERLOADED', - message: 'Service temporarily overloaded, please try again later', - }, - }); - return; - } - } - connectionData = { count: 0, lastActivity: now }; - connections.set(ip, connectionData); - } - if (connectionData.count >= maxConnections) { - logger.warn('[Resource Protection] Connection limit exceeded', { - ip, - currentConnections: connectionData.count, - maxConnections, - }); - res.status(503).json({ - success: false, - error: { - code: 'CONNECTION_LIMIT_EXCEEDED', - message: `Too many concurrent connections from your IP. Maximum: ${maxConnections}`, - }, - }); - return; - } - connectionData.count++; - connectionData.lastActivity = now; - let decremented = false; - const decrementConnection = () => { - if (decremented) - return; - decremented = true; - const data = connections.get(ip); - if (data) { - data.count = Math.max(0, data.count - 1); - data.lastActivity = Date.now(); - if (data.count === 0) { - connections.delete(ip); - } - } - }; - res.on('finish', decrementConnection); - res.on('close', decrementConnection); - next(); - }; -} -export function payloadSizeLimitMiddleware() { - const maxSizeMB = getMaxPayloadSizeMB(); - const maxSizeBytes = maxSizeMB * 1024 * 1024; - return (req, res, next) => { - const contentLength = req.get('content-length'); - if (contentLength) { - const size = parseInt(contentLength, 10); - if (isNaN(size)) { - logger.warn('[Resource Protection] Invalid Content-Length header', { - contentLength, - ip: req.ip, - }); - res.status(400).json({ - success: false, - error: { - code: 'INVALID_CONTENT_LENGTH', - message: 'Invalid Content-Length header', - }, - }); - return; - } - if (size > maxSizeBytes) { - logger.warn('[Resource Protection] Payload size exceeded', { - size, - maxSize: maxSizeBytes, - ip: req.ip, - }); - res.status(413).json({ - success: false, - error: { - code: 'PAYLOAD_TOO_LARGE', - message: `Request payload too large. Maximum: ${maxSizeMB}MB`, - maxSizeMB, - }, - }); - return; - } - } - next(); - }; -} -export function memoryPressureMiddleware() { - const threshold = getMemoryPressureThreshold(); - return (req, res, next) => { - const heapStats = v8.getHeapStatistics(); - const heapUsedMB = heapStats.used_heap_size / 1024 / 1024; - const heapLimitMB = heapStats.heap_size_limit / 1024 / 1024; - const heapUsagePercent = (heapUsedMB / heapLimitMB) * 100; - const memUsage = process.memoryUsage(); - const heapTotalMB = memUsage.heapTotal / 1024 / 1024; - if (heapUsagePercent > threshold) { - logger.warn('[Resource Protection] High memory pressure', { - heapUsedMB: heapUsedMB.toFixed(2), - heapLimitMB: heapLimitMB.toFixed(2), - heapTotalMB: heapTotalMB.toFixed(2), - heapUsagePercent: heapUsagePercent.toFixed(2), - threshold, - }); - res.status(503).json({ - success: false, - error: { - code: 'SERVICE_OVERLOADED', - message: 'Service temporarily overloaded, please try again later', - }, - }); - return; - } - next(); - }; -} -function getMemoryPressureThreshold() { - const env = process.env.A2A_MEMORY_PRESSURE_THRESHOLD; - if (!env) - return DEFAULT_MEMORY_PRESSURE_THRESHOLD; - const parsed = parseInt(env, 10); - if (isNaN(parsed) || parsed <= 0 || parsed > 100) { - logger.warn(`Invalid A2A_MEMORY_PRESSURE_THRESHOLD: ${env}, using default ${DEFAULT_MEMORY_PRESSURE_THRESHOLD}`); - return DEFAULT_MEMORY_PRESSURE_THRESHOLD; - } - return parsed; -} -export function resourceProtectionMiddleware() { - return [ - memoryPressureMiddleware(), - connectionLimitMiddleware(), - payloadSizeLimitMiddleware(), - ]; -} -//# sourceMappingURL=resourceProtection.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/middleware/resourceProtection.js.map b/.claude-plugin/memesh/dist/a2a/server/middleware/resourceProtection.js.map deleted file mode 100644 index 78bfad00..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/middleware/resourceProtection.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"resourceProtection.js","sourceRoot":"","sources":["../../../../src/a2a/server/middleware/resourceProtection.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAOlD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAmD,CAAC;AAK/E,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAevC,SAAS,gBAAgB;IACvB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAC5C,IAAI,CAAC,GAAG;QAAE,OAAO,uBAAuB,CAAC;IAEzC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,GAAG,SAAS,EAAE,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC,gCAAgC,GAAG,mBAAmB,uBAAuB,EAAE,CAAC,CAAC;QAC7F,OAAO,uBAAuB,CAAC;IACjC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAMD,IAAI,uBAAuB,GAAG,CAAC,CAAC;AAChC,MAAM,4BAA4B,GAAG,MAAM,CAAC;AAK5C,MAAM,8BAA8B,GAAG,EAAE,CAAC;AAC1C,MAAM,2BAA2B,GAAG,EAAE,CAAC;AACvC,MAAM,kCAAkC,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAKzD,MAAM,iCAAiC,GAAG,EAAE,CAAC;AAK7C,IAAI,YAAY,GAA0B,IAAI,CAAC;AAK/C,SAAS,sBAAsB;IAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;IACnD,IAAI,CAAC,GAAG;QAAE,OAAO,8BAA8B,CAAC;IAEhD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,uCAAuC,GAAG,mBAAmB,8BAA8B,EAAE,CAAC,CAAC;QAC3G,OAAO,8BAA8B,CAAC;IACxC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB;IAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAChD,IAAI,CAAC,GAAG;QAAE,OAAO,2BAA2B,CAAC;IAE7C,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,oCAAoC,GAAG,mBAAmB,2BAA2B,EAAE,CAAC,CAAC;QACrG,OAAO,2BAA2B,CAAC;IACrC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAYD,SAAS,sBAAsB,CAAC,UAAU,GAAG,KAAK;IAChD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,MAAM,OAAO,GAAG,UAAU;QACxB,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,kCAAkC,CAAC;IACvC,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;QAE/C,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,GAAG,OAAO,EAAE,CAAC;YAC1D,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACvB,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,mDAAmD,EAAE;YAChE,KAAK,EAAE,OAAO;YACd,SAAS,EAAE,WAAW,CAAC,IAAI;YAC3B,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAKD,MAAM,UAAU,8BAA8B;IAC5C,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO;IACT,CAAC;IAGD,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QAC9B,sBAAsB,EAAE,CAAC;IAC3B,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IAEd,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;AACvD,CAAC;AAKD,MAAM,UAAU,6BAA6B;IAC3C,IAAI,YAAY,EAAE,CAAC;QACjB,aAAa,CAAC,YAAY,CAAC,CAAC;QAC5B,YAAY,GAAG,IAAI,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAKD,MAAM,UAAU,uBAAuB;IACrC,WAAW,CAAC,KAAK,EAAE,CAAC;AACtB,CAAC;AAKD,MAAM,UAAU,kBAAkB;IAKhC,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC;IAClC,IAAI,gBAAgB,GAAG,CAAC,CAAC;IAEzB,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;QACxC,gBAAgB,IAAI,IAAI,CAAC,KAAK,CAAC;IACjC,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;SAC7C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;SACtD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC;SAC7C,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEhB,OAAO;QACL,QAAQ;QACR,gBAAgB;QAChB,MAAM;KACP,CAAC;AACJ,CAAC;AAaD,MAAM,UAAU,yBAAyB;IACvC,MAAM,cAAc,GAAG,sBAAsB,EAAE,CAAC;IAChD,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IAEzC,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAQ,EAAE;QAC/D,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,SAAS,CAAC;QAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAGvB,IAAI,cAAc,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEzC,IAAI,CAAC,cAAc,EAAE,CAAC;YAEpB,IAAI,WAAW,CAAC,IAAI,IAAI,aAAa,EAAE,CAAC;gBAEtC,MAAM,OAAO,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;gBAE7C,IAAI,WAAW,CAAC,IAAI,IAAI,aAAa,EAAE,CAAC;oBAEtC,IAAI,GAAG,GAAG,uBAAuB,GAAG,4BAA4B,EAAE,CAAC;wBACjE,uBAAuB,GAAG,GAAG,CAAC;wBAC9B,MAAM,CAAC,IAAI,CAAC,sDAAsD,EAAE;4BAClE,aAAa;4BACb,iBAAiB,EAAE,WAAW,CAAC,IAAI;4BACnC,gBAAgB,EAAE,OAAO;4BACzB,UAAU,EAAE,EAAE;yBACf,CAAC,CAAC;oBACL,CAAC;oBAED,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;wBACnB,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE;4BACL,IAAI,EAAE,oBAAoB;4BAC1B,OAAO,EAAE,wDAAwD;yBAClE;qBACF,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;YACH,CAAC;YAED,cAAc,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC;YACjD,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;QACtC,CAAC;QAGD,IAAI,cAAc,CAAC,KAAK,IAAI,cAAc,EAAE,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,iDAAiD,EAAE;gBAC7D,EAAE;gBACF,kBAAkB,EAAE,cAAc,CAAC,KAAK;gBACxC,cAAc;aACf,CAAC,CAAC;YAEH,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACL,IAAI,EAAE,2BAA2B;oBACjC,OAAO,EAAE,0DAA0D,cAAc,EAAE;iBACpF;aACF,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAGD,cAAc,CAAC,KAAK,EAAE,CAAC;QACvB,cAAc,CAAC,YAAY,GAAG,GAAG,CAAC;QAKlC,IAAI,WAAW,GAAG,KAAK,CAAC;QAExB,MAAM,mBAAmB,GAAG,GAAS,EAAE;YACrC,IAAI,WAAW;gBAAE,OAAO;YACxB,WAAW,GAAG,IAAI,CAAC;YAEnB,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACjC,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBACzC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAG/B,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;oBACrB,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAGF,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;QACtC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;QAErC,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC;AAeD,MAAM,UAAU,0BAA0B;IACxC,MAAM,SAAS,GAAG,mBAAmB,EAAE,CAAC;IACxC,MAAM,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC;IAE7C,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAQ,EAAE;QAC/D,MAAM,aAAa,GAAG,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAEhD,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;YAEzC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChB,MAAM,CAAC,IAAI,CAAC,qDAAqD,EAAE;oBACjE,aAAa;oBACb,EAAE,EAAE,GAAG,CAAC,EAAE;iBACX,CAAC,CAAC;gBAEH,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE;wBACL,IAAI,EAAE,wBAAwB;wBAC9B,OAAO,EAAE,+BAA+B;qBACzC;iBACF,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,IAAI,IAAI,GAAG,YAAY,EAAE,CAAC;gBACxB,MAAM,CAAC,IAAI,CAAC,6CAA6C,EAAE;oBACzD,IAAI;oBACJ,OAAO,EAAE,YAAY;oBACrB,EAAE,EAAE,GAAG,CAAC,EAAE;iBACX,CAAC,CAAC;gBAEH,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE;wBACL,IAAI,EAAE,mBAAmB;wBACzB,OAAO,EAAE,uCAAuC,SAAS,IAAI;wBAC7D,SAAS;qBACV;iBACF,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;QACH,CAAC;QAED,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC;AAqBD,MAAM,UAAU,wBAAwB;IACtC,MAAM,SAAS,GAAG,0BAA0B,EAAE,CAAC;IAE/C,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAQ,EAAE;QAE/D,MAAM,SAAS,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,SAAS,CAAC,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC;QAC1D,MAAM,WAAW,GAAG,SAAS,CAAC,eAAe,GAAG,IAAI,GAAG,IAAI,CAAC;QAC5D,MAAM,gBAAgB,GAAG,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC;QAG1D,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC;QAGrD,IAAI,gBAAgB,GAAG,SAAS,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,4CAA4C,EAAE;gBACxD,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;gBACjC,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;gBACnC,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;gBACnC,gBAAgB,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC7C,SAAS;aACV,CAAC,CAAC;YAEH,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACL,IAAI,EAAE,oBAAoB;oBAC1B,OAAO,EAAE,wDAAwD;iBAClE;aACF,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC;AAKD,SAAS,0BAA0B;IACjC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;IACtD,IAAI,CAAC,GAAG;QAAE,OAAO,iCAAiC,CAAC;IAEnD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,0CAA0C,GAAG,mBAAmB,iCAAiC,EAAE,CAAC,CAAC;QACjH,OAAO,iCAAiC,CAAC;IAC3C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAYD,MAAM,UAAU,4BAA4B;IAC1C,OAAO;QACL,wBAAwB,EAAE;QAC1B,yBAAyB,EAAE;QAC3B,0BAA0B,EAAE;KAC7B,CAAC;AACJ,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/middleware/timeout.d.ts b/.claude-plugin/memesh/dist/a2a/server/middleware/timeout.d.ts deleted file mode 100644 index 86db61d5..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/middleware/timeout.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { Request, Response, NextFunction } from 'express'; -export declare function getTimeoutMs(): number; -export declare function requestTimeoutMiddleware(timeoutMs?: number): (req: Request, res: Response, next: NextFunction) => void; -//# sourceMappingURL=timeout.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/middleware/timeout.d.ts.map b/.claude-plugin/memesh/dist/a2a/server/middleware/timeout.d.ts.map deleted file mode 100644 index f5a024b7..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/middleware/timeout.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../../../src/a2a/server/middleware/timeout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAuB1D,wBAAgB,YAAY,IAAI,MAAM,CAiCrC;AAaD,wBAAgB,wBAAwB,CAAC,SAAS,GAAE,MAAuB,IACjE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CA2B/D"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/middleware/timeout.js b/.claude-plugin/memesh/dist/a2a/server/middleware/timeout.js deleted file mode 100644 index 6170b276..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/middleware/timeout.js +++ /dev/null @@ -1,56 +0,0 @@ -import { logger } from '../../../utils/logger.js'; -const DEFAULT_TIMEOUT_MS = 30_000; -const MIN_TIMEOUT_MS = 1_000; -const MAX_TIMEOUT_MS = 300_000; -export function getTimeoutMs() { - const envTimeout = process.env.A2A_REQUEST_TIMEOUT_MS; - if (!envTimeout) { - return DEFAULT_TIMEOUT_MS; - } - const parsed = parseInt(envTimeout, 10); - if (isNaN(parsed) || parsed <= 0) { - logger.warn('[Timeout] Invalid A2A_REQUEST_TIMEOUT_MS value, using default', { - provided: envTimeout, - default: DEFAULT_TIMEOUT_MS, - }); - return DEFAULT_TIMEOUT_MS; - } - if (parsed < MIN_TIMEOUT_MS) { - logger.warn('[Timeout] A2A_REQUEST_TIMEOUT_MS below minimum, clamping', { - provided: parsed, - minimum: MIN_TIMEOUT_MS, - }); - return MIN_TIMEOUT_MS; - } - if (parsed > MAX_TIMEOUT_MS) { - logger.warn('[Timeout] A2A_REQUEST_TIMEOUT_MS exceeds maximum, clamping', { - provided: parsed, - maximum: MAX_TIMEOUT_MS, - }); - return MAX_TIMEOUT_MS; - } - return parsed; -} -export function requestTimeoutMiddleware(timeoutMs = getTimeoutMs()) { - return (req, res, next) => { - const timer = setTimeout(() => { - if (!res.headersSent) { - res.status(408).json({ - success: false, - error: { - code: 'REQUEST_TIMEOUT', - message: `Request timeout after ${timeoutMs}ms` - } - }); - } - }, timeoutMs); - res.on('finish', () => { - clearTimeout(timer); - }); - res.on('close', () => { - clearTimeout(timer); - }); - next(); - }; -} -//# sourceMappingURL=timeout.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/middleware/timeout.js.map b/.claude-plugin/memesh/dist/a2a/server/middleware/timeout.js.map deleted file mode 100644 index 5e51d779..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/middleware/timeout.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"timeout.js","sourceRoot":"","sources":["../../../../src/a2a/server/middleware/timeout.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAKlD,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAKlC,MAAM,cAAc,GAAG,KAAK,CAAC;AAM7B,MAAM,cAAc,GAAG,OAAO,CAAC;AAM/B,MAAM,UAAU,YAAY;IAC1B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IACtD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACxC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,+DAA+D,EAAE;YAC3E,QAAQ,EAAE,UAAU;YACpB,OAAO,EAAE,kBAAkB;SAC5B,CAAC,CAAC;QACH,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAGD,IAAI,MAAM,GAAG,cAAc,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,0DAA0D,EAAE;YACtE,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,cAAc;SACxB,CAAC,CAAC;QACH,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,IAAI,MAAM,GAAG,cAAc,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,4DAA4D,EAAE;YACxE,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,cAAc;SACxB,CAAC,CAAC;QACH,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAaD,MAAM,UAAU,wBAAwB,CAAC,YAAoB,YAAY,EAAE;IACzE,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAQ,EAAE;QAE/D,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAE5B,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;gBACrB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE;wBACL,IAAI,EAAE,iBAAiB;wBACvB,OAAO,EAAE,yBAAyB,SAAS,IAAI;qBAChD;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC,EAAE,SAAS,CAAC,CAAC;QAGd,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACpB,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QAGH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACnB,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/routes.d.ts b/.claude-plugin/memesh/dist/a2a/server/routes.d.ts deleted file mode 100644 index 322b2b1c..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/routes.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { Request, Response, NextFunction } from 'express'; -import type { AgentCard } from '../types/index.js'; -import { TaskQueue } from '../storage/TaskQueue.js'; -import type { MCPTaskDelegator } from '../delegator/MCPTaskDelegator.js'; -export declare class A2ARoutes { - private _agentId; - private taskQueue; - private agentCard; - private delegator; - constructor(_agentId: string, taskQueue: TaskQueue, agentCard: AgentCard); - setDelegator(delegator: MCPTaskDelegator): void; - sendMessage: (req: Request, res: Response, next: NextFunction) => Promise; - getTask: (req: Request, res: Response, next: NextFunction) => Promise; - listTasks: (req: Request, res: Response, next: NextFunction) => Promise; - getAgentCard: (_req: Request, res: Response, next: NextFunction) => Promise; - cancelTask: (req: Request, res: Response, next: NextFunction) => Promise; -} -//# sourceMappingURL=routes.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/routes.d.ts.map b/.claude-plugin/memesh/dist/a2a/server/routes.d.ts.map deleted file mode 100644 index a0b42528..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/routes.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/a2a/server/routes.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,KAAK,EAQV,SAAS,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAIpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,qBAAa,SAAS;IAIlB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,SAAS;IALnB,OAAO,CAAC,SAAS,CAAiC;gBAGxC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS;IAO9B,YAAY,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI;IAI/C,WAAW,GACT,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,MAAM,YAAY,KACjB,OAAO,CAAC,IAAI,CAAC,CAwDd;IAEF,OAAO,GACL,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,MAAM,YAAY,KACjB,OAAO,CAAC,IAAI,CAAC,CAiCd;IAEF,SAAS,GACP,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,MAAM,YAAY,KACjB,OAAO,CAAC,IAAI,CAAC,CAmCd;IAEF,YAAY,GACV,MAAM,OAAO,EACb,KAAK,QAAQ,EACb,MAAM,YAAY,KACjB,OAAO,CAAC,IAAI,CAAC,CAWd;IAEF,UAAU,GACR,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,MAAM,YAAY,KACjB,OAAO,CAAC,IAAI,CAAC,CAyCd;CACH"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/routes.js b/.claude-plugin/memesh/dist/a2a/server/routes.js deleted file mode 100644 index dbd38c6b..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/routes.js +++ /dev/null @@ -1,176 +0,0 @@ -import { validateSendMessageRequest } from './validation/index.js'; -import { logger } from '../../utils/logger.js'; -import { TaskStateConstants } from '../storage/inputValidation.js'; -export class A2ARoutes { - _agentId; - taskQueue; - agentCard; - delegator = null; - constructor(_agentId, taskQueue, agentCard) { - this._agentId = _agentId; - this.taskQueue = taskQueue; - this.agentCard = agentCard; - } - setDelegator(delegator) { - this.delegator = delegator; - } - sendMessage = async (req, res, next) => { - try { - const validationResult = validateSendMessageRequest(req.body); - if (!validationResult.success) { - logger.warn('SendMessage validation failed', { - errorCode: validationResult.error?.code, - detailsCount: validationResult.error?.details?.length, - }); - const error = { - code: validationResult.error?.code || 'VALIDATION_ERROR', - message: validationResult.error?.message || 'Request validation failed', - details: validationResult.error?.details, - }; - res.status(400).json({ success: false, error }); - return; - } - const request = validationResult.data; - let taskId = request.taskId; - if (!taskId) { - const task = this.taskQueue.createTask({ - name: 'Incoming A2A Task', - priority: 'normal', - initialMessage: { - role: request.message.role, - parts: request.message.parts, - }, - }); - taskId = task.id; - } - else { - this.taskQueue.addMessage({ - taskId, - role: request.message.role, - parts: request.message.parts, - }); - } - const response = { - taskId, - status: TaskStateConstants.SUBMITTED, - }; - const result = { - success: true, - data: response, - }; - res.status(200).json(result); - } - catch (err) { - next(err); - } - }; - getTask = async (req, res, next) => { - try { - const { taskId } = req.params; - if (!taskId) { - const error = { - code: 'INVALID_REQUEST', - message: 'Missing required parameter: taskId', - }; - res.status(400).json({ success: false, error }); - return; - } - const task = this.taskQueue.getTask(taskId); - if (!task) { - const error = { - code: 'NOT_FOUND', - message: `Task not found: ${taskId}`, - }; - res.status(404).json({ success: false, error }); - return; - } - const result = { - success: true, - data: task, - }; - res.status(200).json(result); - } - catch (err) { - next(err); - } - }; - listTasks = async (req, res, next) => { - try { - const { status, limit, offset } = req.query; - const filter = {}; - if (status) { - filter.state = status; - } - if (limit) { - const parsedLimit = parseInt(limit, 10); - if (!isNaN(parsedLimit) && parsedLimit > 0) { - filter.limit = parsedLimit; - } - } - if (offset) { - const parsedOffset = parseInt(offset, 10); - if (!isNaN(parsedOffset) && parsedOffset >= 0) { - filter.offset = parsedOffset; - } - } - const tasks = this.taskQueue.listTasks(filter); - const result = { - success: true, - data: tasks, - }; - res.status(200).json(result); - } - catch (err) { - next(err); - } - }; - getAgentCard = async (_req, res, next) => { - try { - const result = { - success: true, - data: this.agentCard, - }; - res.status(200).json(result); - } - catch (err) { - next(err); - } - }; - cancelTask = async (req, res, next) => { - try { - const { taskId } = req.params; - if (!taskId) { - const error = { - code: 'INVALID_REQUEST', - message: 'Missing required parameter: taskId', - }; - res.status(400).json({ success: false, error }); - return; - } - const updated = this.taskQueue.updateTaskStatus(taskId, { - state: TaskStateConstants.CANCELED, - }); - if (!updated) { - const error = { - code: 'NOT_FOUND', - message: `Task not found: ${taskId}`, - }; - res.status(404).json({ success: false, error }); - return; - } - if (this.delegator) { - await this.delegator.removeTask(taskId); - logger.info('[A2ARoutes] Task removed from delegator queue on cancel', { taskId }); - } - const result = { - success: true, - data: { taskId, status: TaskStateConstants.CANCELED }, - }; - res.status(200).json(result); - } - catch (err) { - next(err); - } - }; -} -//# sourceMappingURL=routes.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/routes.js.map b/.claude-plugin/memesh/dist/a2a/server/routes.js.map deleted file mode 100644 index 0e32ee8d..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/routes.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../src/a2a/server/routes.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/validation/index.d.ts b/.claude-plugin/memesh/dist/a2a/server/validation/index.d.ts deleted file mode 100644 index 46dc0a12..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/validation/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { SendMessageRequestSchema, MessagePartSchema, TextPartSchema, ImagePartSchema, ToolCallPartSchema, ToolResultPartSchema, validateSendMessageRequest, formatZodError, type ValidatedSendMessageRequest, type ValidationResult, type ValidationErrorDetail, } from './sendMessageSchema.js'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/validation/index.d.ts.map b/.claude-plugin/memesh/dist/a2a/server/validation/index.d.ts.map deleted file mode 100644 index b18db769..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/validation/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/a2a/server/validation/index.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,0BAA0B,EAC1B,cAAc,EACd,KAAK,2BAA2B,EAChC,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,GAC3B,MAAM,wBAAwB,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/validation/index.js b/.claude-plugin/memesh/dist/a2a/server/validation/index.js deleted file mode 100644 index 1bdc82e8..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/validation/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export { SendMessageRequestSchema, MessagePartSchema, TextPartSchema, ImagePartSchema, ToolCallPartSchema, ToolResultPartSchema, validateSendMessageRequest, formatZodError, } from './sendMessageSchema.js'; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/validation/index.js.map b/.claude-plugin/memesh/dist/a2a/server/validation/index.js.map deleted file mode 100644 index 2242383f..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/validation/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/a2a/server/validation/index.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,0BAA0B,EAC1B,cAAc,GAIf,MAAM,wBAAwB,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/validation/sendMessageSchema.d.ts b/.claude-plugin/memesh/dist/a2a/server/validation/sendMessageSchema.d.ts deleted file mode 100644 index 2a28a4f2..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/validation/sendMessageSchema.d.ts +++ /dev/null @@ -1,112 +0,0 @@ -import { z } from 'zod'; -export declare const TextPartSchema: z.ZodObject<{ - type: z.ZodLiteral<"text">; - text: z.ZodString; -}, z.core.$strip>; -export declare const ImagePartSchema: z.ZodObject<{ - type: z.ZodLiteral<"image">; - source: z.ZodDiscriminatedUnion<[z.ZodObject<{ - type: z.ZodLiteral<"url">; - url: z.ZodString; - data: z.ZodOptional; - mimeType: z.ZodOptional; - }, z.core.$strip>, z.ZodObject<{ - type: z.ZodLiteral<"base64">; - url: z.ZodOptional; - data: z.ZodString; - mimeType: z.ZodString; - }, z.core.$strip>], "type">; -}, z.core.$strip>; -export declare const ToolCallPartSchema: z.ZodObject<{ - type: z.ZodLiteral<"tool_call">; - id: z.ZodString; - name: z.ZodString; - input: z.ZodRecord; -}, z.core.$strip>; -export declare const ToolResultPartSchema: z.ZodObject<{ - type: z.ZodLiteral<"tool_result">; - toolCallId: z.ZodString; - content: z.ZodUnion]>; - isError: z.ZodOptional; -}, z.core.$strip>; -export declare const MessagePartSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{ - type: z.ZodLiteral<"text">; - text: z.ZodString; -}, z.core.$strip>, z.ZodObject<{ - type: z.ZodLiteral<"image">; - source: z.ZodDiscriminatedUnion<[z.ZodObject<{ - type: z.ZodLiteral<"url">; - url: z.ZodString; - data: z.ZodOptional; - mimeType: z.ZodOptional; - }, z.core.$strip>, z.ZodObject<{ - type: z.ZodLiteral<"base64">; - url: z.ZodOptional; - data: z.ZodString; - mimeType: z.ZodString; - }, z.core.$strip>], "type">; -}, z.core.$strip>, z.ZodObject<{ - type: z.ZodLiteral<"tool_call">; - id: z.ZodString; - name: z.ZodString; - input: z.ZodRecord; -}, z.core.$strip>, z.ZodObject<{ - type: z.ZodLiteral<"tool_result">; - toolCallId: z.ZodString; - content: z.ZodUnion]>; - isError: z.ZodOptional; -}, z.core.$strip>], "type">; -export declare const SendMessageRequestSchema: z.ZodObject<{ - taskId: z.ZodOptional; - message: z.ZodObject<{ - role: z.ZodEnum<{ - user: "user"; - assistant: "assistant"; - }>; - parts: z.ZodArray; - text: z.ZodString; - }, z.core.$strip>, z.ZodObject<{ - type: z.ZodLiteral<"image">; - source: z.ZodDiscriminatedUnion<[z.ZodObject<{ - type: z.ZodLiteral<"url">; - url: z.ZodString; - data: z.ZodOptional; - mimeType: z.ZodOptional; - }, z.core.$strip>, z.ZodObject<{ - type: z.ZodLiteral<"base64">; - url: z.ZodOptional; - data: z.ZodString; - mimeType: z.ZodString; - }, z.core.$strip>], "type">; - }, z.core.$strip>, z.ZodObject<{ - type: z.ZodLiteral<"tool_call">; - id: z.ZodString; - name: z.ZodString; - input: z.ZodRecord; - }, z.core.$strip>, z.ZodObject<{ - type: z.ZodLiteral<"tool_result">; - toolCallId: z.ZodString; - content: z.ZodUnion]>; - isError: z.ZodOptional; - }, z.core.$strip>], "type">>; - }, z.core.$strip>; -}, z.core.$strip>; -export type ValidatedSendMessageRequest = z.infer; -export interface ValidationResult { - success: boolean; - data?: T; - error?: { - code: string; - message: string; - details?: ValidationErrorDetail[]; - }; -} -export interface ValidationErrorDetail { - path: string; - message: string; - code: string; -} -export declare function formatZodError(error: z.ZodError): ValidationResult; -export declare function validateSendMessageRequest(data: unknown): ValidationResult; -//# sourceMappingURL=sendMessageSchema.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/validation/sendMessageSchema.d.ts.map b/.claude-plugin/memesh/dist/a2a/server/validation/sendMessageSchema.d.ts.map deleted file mode 100644 index 917a4473..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/validation/sendMessageSchema.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"sendMessageSchema.d.ts","sourceRoot":"","sources":["../../../../src/a2a/server/validation/sendMessageSchema.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAmBxB,eAAO,MAAM,cAAc;;;iBAMzB,CAAC;AAiDH,eAAO,MAAM,eAAe;;;;;;;;;;;;;iBAG1B,CAAC;AAKH,eAAO,MAAM,kBAAkB;;;;;iBAiB7B,CAAC;AAoBH,eAAO,MAAM,oBAAoB;;;;;iBAQ/B,CAAC;AAWH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;2BAK5B,CAAC;AAyBH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAMnC,CAAC;AAKH,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAKnF,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,qBAAqB,EAAE,CAAC;KACnC,CAAC;CACH;AAKD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAQD,wBAAgB,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,CA0BzE;AAUD,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,OAAO,GACZ,gBAAgB,CAAC,2BAA2B,CAAC,CAW/C"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/validation/sendMessageSchema.js b/.claude-plugin/memesh/dist/a2a/server/validation/sendMessageSchema.js deleted file mode 100644 index 4eb226e3..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/validation/sendMessageSchema.js +++ /dev/null @@ -1,143 +0,0 @@ -import { z } from 'zod'; -const MAX_TEXT_LENGTH = 102400; -const MAX_PARTS_COUNT = 100; -const MAX_TOOL_NAME_LENGTH = 256; -const MAX_TOOL_ID_LENGTH = 256; -const MAX_TASK_ID_LENGTH = 256; -const MAX_URL_LENGTH = 2048; -const MAX_BASE64_LENGTH = 10485760; -const MAX_MIME_TYPE_LENGTH = 128; -const MAX_TOOL_INPUT_SIZE = 102400; -const MAX_TOOL_RESULT_SIZE = 1048576; -export const TextPartSchema = z.object({ - type: z.literal('text'), - text: z - .string() - .min(1, 'Text content cannot be empty') - .max(MAX_TEXT_LENGTH, `Text content too long (max ${MAX_TEXT_LENGTH} characters)`), -}); -const ImageSourceUrlSchema = z.object({ - type: z.literal('url'), - url: z - .string() - .min(1, 'URL cannot be empty') - .max(MAX_URL_LENGTH, `URL too long (max ${MAX_URL_LENGTH} characters)`) - .url('Invalid URL format'), - data: z.undefined().optional(), - mimeType: z - .string() - .max(MAX_MIME_TYPE_LENGTH, `MIME type too long (max ${MAX_MIME_TYPE_LENGTH} characters)`) - .regex(/^[a-z]+\/[a-z0-9.+-]+$/i, 'Invalid MIME type format') - .optional(), -}); -const ImageSourceBase64Schema = z.object({ - type: z.literal('base64'), - url: z.undefined().optional(), - data: z - .string() - .min(1, 'Base64 data cannot be empty') - .max(MAX_BASE64_LENGTH, `Base64 data too long (max ${MAX_BASE64_LENGTH} bytes)`) - .regex(/^[A-Za-z0-9+/]*={0,2}$/, 'Invalid base64 format'), - mimeType: z - .string() - .min(1, 'MIME type is required for base64 images') - .max(MAX_MIME_TYPE_LENGTH, `MIME type too long (max ${MAX_MIME_TYPE_LENGTH} characters)`) - .regex(/^image\/[a-z0-9.+-]+$/i, 'MIME type must be an image type'), -}); -const ImageSourceSchema = z.discriminatedUnion('type', [ - ImageSourceUrlSchema, - ImageSourceBase64Schema, -]); -export const ImagePartSchema = z.object({ - type: z.literal('image'), - source: ImageSourceSchema, -}); -export const ToolCallPartSchema = z.object({ - type: z.literal('tool_call'), - id: z - .string() - .min(1, 'Tool call ID cannot be empty') - .max(MAX_TOOL_ID_LENGTH, `Tool call ID too long (max ${MAX_TOOL_ID_LENGTH} characters)`), - name: z - .string() - .min(1, 'Tool name cannot be empty') - .max(MAX_TOOL_NAME_LENGTH, `Tool name too long (max ${MAX_TOOL_NAME_LENGTH} characters)`) - .regex(/^[a-zA-Z_][a-zA-Z0-9_-]*$/, 'Tool name must be a valid identifier'), - input: z - .record(z.string(), z.unknown()) - .refine((obj) => JSON.stringify(obj).length <= MAX_TOOL_INPUT_SIZE, `Tool input too large (max ${MAX_TOOL_INPUT_SIZE} bytes when serialized)`), -}); -const ToolResultContentSchema = z.union([ - z - .string() - .max(MAX_TOOL_RESULT_SIZE, `Tool result content too long (max ${MAX_TOOL_RESULT_SIZE} characters)`), - z - .record(z.string(), z.unknown()) - .refine((obj) => JSON.stringify(obj).length <= MAX_TOOL_RESULT_SIZE, `Tool result object too large (max ${MAX_TOOL_RESULT_SIZE} bytes when serialized)`), -]); -export const ToolResultPartSchema = z.object({ - type: z.literal('tool_result'), - toolCallId: z - .string() - .min(1, 'Tool call ID cannot be empty') - .max(MAX_TOOL_ID_LENGTH, `Tool call ID too long (max ${MAX_TOOL_ID_LENGTH} characters)`), - content: ToolResultContentSchema, - isError: z.boolean().optional(), -}); -export const MessagePartSchema = z.discriminatedUnion('type', [ - TextPartSchema, - ImagePartSchema, - ToolCallPartSchema, - ToolResultPartSchema, -]); -const MessageRoleSchema = z.enum(['user', 'assistant'], { - error: 'Role must be "user" or "assistant"', -}); -const MessageSchema = z.object({ - role: MessageRoleSchema, - parts: z - .array(MessagePartSchema) - .min(1, 'Message must have at least one part') - .max(MAX_PARTS_COUNT, `Too many message parts (max ${MAX_PARTS_COUNT})`), -}); -export const SendMessageRequestSchema = z.object({ - taskId: z - .string() - .max(MAX_TASK_ID_LENGTH, `Task ID too long (max ${MAX_TASK_ID_LENGTH} characters)`) - .optional(), - message: MessageSchema, -}); -export function formatZodError(error) { - const details = error.issues.map((issue) => ({ - path: issue.path.join('.') || 'root', - message: issue.message, - code: issue.code, - })); - const summaryMessages = details - .slice(0, 3) - .map((d) => `${d.path}: ${d.message}`) - .join('; '); - const additionalCount = details.length - 3; - const summary = additionalCount > 0 - ? `${summaryMessages}; and ${additionalCount} more error(s)` - : summaryMessages; - return { - success: false, - error: { - code: 'VALIDATION_ERROR', - message: `Request validation failed: ${summary}`, - details, - }, - }; -} -export function validateSendMessageRequest(data) { - const result = SendMessageRequestSchema.safeParse(data); - if (result.success) { - return { - success: true, - data: result.data, - }; - } - return formatZodError(result.error); -} -//# sourceMappingURL=sendMessageSchema.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/server/validation/sendMessageSchema.js.map b/.claude-plugin/memesh/dist/a2a/server/validation/sendMessageSchema.js.map deleted file mode 100644 index df991d82..00000000 --- a/.claude-plugin/memesh/dist/a2a/server/validation/sendMessageSchema.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"sendMessageSchema.js","sourceRoot":"","sources":["../../../../src/a2a/server/validation/sendMessageSchema.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/storage/AgentRegistry.d.ts b/.claude-plugin/memesh/dist/a2a/storage/AgentRegistry.d.ts deleted file mode 100644 index e763f035..00000000 --- a/.claude-plugin/memesh/dist/a2a/storage/AgentRegistry.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -import type { AgentRegistryEntry, RegisterAgentParams } from '../types/index.js'; -export declare class AgentRegistry { - private db; - private static instance; - private static currentDbPath; - private preparedStatements; - private constructor(); - private getStatement; - static getInstance(dbPath?: string): AgentRegistry; - static resetInstance(): void; - static getCurrentDbPath(): string | undefined; - private initializeSchema; - register(params: RegisterAgentParams): AgentRegistryEntry; - get(agentId: string): AgentRegistryEntry | null; - listActive(): AgentRegistryEntry[]; - listAll(): AgentRegistryEntry[]; - heartbeat(agentId: string): boolean; - deactivate(agentId: string): boolean; - cleanupStale(staleThresholdMs?: number): number; - deleteStale(): number; - close(): void; - private rowToEntry; -} -export declare function startAgentRegistryCleanup(): void; -export declare function stopAgentRegistryCleanup(): void; -//# sourceMappingURL=AgentRegistry.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/storage/AgentRegistry.d.ts.map b/.claude-plugin/memesh/dist/a2a/storage/AgentRegistry.d.ts.map deleted file mode 100644 index 3e5320b8..00000000 --- a/.claude-plugin/memesh/dist/a2a/storage/AgentRegistry.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"AgentRegistry.d.ts","sourceRoot":"","sources":["../../../src/a2a/storage/AgentRegistry.ts"],"names":[],"mappings":"AAiDA,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EAEpB,MAAM,mBAAmB,CAAC;AAkC3B,qBAAa,aAAa;IACxB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA8B;IAErD,OAAO,CAAC,MAAM,CAAC,aAAa,CAAqB;IAKjD,OAAO,CAAC,kBAAkB,CAAkC;IAE5D,OAAO;IAiBP,OAAO,CAAC,YAAY;IAiCpB,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,aAAa;IA0ClD,MAAM,CAAC,aAAa,IAAI,IAAI;IAuB5B,MAAM,CAAC,gBAAgB,IAAI,MAAM,GAAG,SAAS;IAI7C,OAAO,CAAC,gBAAgB;IAMxB,QAAQ,CAAC,MAAM,EAAE,mBAAmB,GAAG,kBAAkB;IAgDzD,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAa/C,UAAU,IAAI,kBAAkB,EAAE;IAWlC,OAAO,IAAI,kBAAkB,EAAE;IAW/B,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAanC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAapC,YAAY,CAAC,gBAAgB,GAAE,MAAsB,GAAG,MAAM;IAe9D,WAAW,IAAI,MAAM;IAyBrB,KAAK,IAAI,IAAI;IAMb,OAAO,CAAC,UAAU;CAcnB;AAsBD,wBAAgB,yBAAyB,IAAI,IAAI,CAyChD;AAWD,wBAAgB,wBAAwB,IAAI,IAAI,CAM/C"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/storage/AgentRegistry.js b/.claude-plugin/memesh/dist/a2a/storage/AgentRegistry.js deleted file mode 100644 index 453a4e47..00000000 --- a/.claude-plugin/memesh/dist/a2a/storage/AgentRegistry.js +++ /dev/null @@ -1,197 +0,0 @@ -import Database from 'better-sqlite3'; -import { readFileSync } from 'fs'; -import { join, dirname } from 'path'; -import { fileURLToPath } from 'url'; -import { logger } from '../../utils/logger.js'; -import { getDataPath } from '../../utils/PathResolver.js'; -const __filename = fileURLToPath(import.meta.url); -const __dirname = dirname(__filename); -function safeJsonParse(jsonString) { - if (!jsonString) - return null; - try { - return JSON.parse(jsonString); - } - catch (error) { - logger.error('[AgentRegistry] Invalid JSON data', { - error: error instanceof Error ? error.message : String(error), - jsonString: jsonString?.substring(0, 100), - }); - return null; - } -} -export class AgentRegistry { - db; - static instance = null; - static currentDbPath; - preparedStatements; - constructor(dbPath) { - const path = dbPath || getDataPath('a2a-registry.db'); - this.db = new Database(path); - this.preparedStatements = new Map(); - this.initializeSchema(); - } - getStatement(key, sql) { - let stmt = this.preparedStatements.get(key); - if (!stmt) { - stmt = this.db.prepare(sql); - this.preparedStatements.set(key, stmt); - } - return stmt; - } - static getInstance(dbPath) { - if (!AgentRegistry.instance) { - const resolvedPath = dbPath || getDataPath('a2a-registry.db'); - AgentRegistry.currentDbPath = resolvedPath; - AgentRegistry.instance = new AgentRegistry(resolvedPath); - return AgentRegistry.instance; - } - if (dbPath !== undefined) { - const resolvedNewPath = dbPath; - if (resolvedNewPath !== AgentRegistry.currentDbPath) { - throw new Error(`AgentRegistry singleton already exists with path "${AgentRegistry.currentDbPath}". ` + - `Cannot create with different path "${resolvedNewPath}". ` + - `Call AgentRegistry.resetInstance() first if you need a different database.`); - } - } - return AgentRegistry.instance; - } - static resetInstance() { - if (AgentRegistry.instance) { - try { - AgentRegistry.instance.preparedStatements.clear(); - AgentRegistry.instance.db.close(); - } - catch (error) { - logger.warn('[AgentRegistry] Error closing database during reset', { - error: error instanceof Error ? error.message : String(error), - }); - } - AgentRegistry.instance = null; - AgentRegistry.currentDbPath = undefined; - } - } - static getCurrentDbPath() { - return AgentRegistry.currentDbPath; - } - initializeSchema() { - const schemaPath = join(__dirname, 'registry-schemas.sql'); - const schema = readFileSync(schemaPath, 'utf-8'); - this.db.exec(schema); - } - register(params) { - const now = new Date().toISOString(); - const existing = this.get(params.agentId); - if (existing) { - const stmt = this.getStatement('updateAgent', `UPDATE agents - SET base_url = ?, port = ?, status = 'active', last_heartbeat = ?, - capabilities = ?, metadata = ?, updated_at = ? - WHERE agent_id = ?`); - stmt.run(params.baseUrl, params.port, now, params.capabilities ? JSON.stringify(params.capabilities) : null, params.metadata ? JSON.stringify(params.metadata) : null, now, params.agentId); - } - else { - const stmt = this.getStatement('insertAgent', `INSERT INTO agents (agent_id, base_url, port, status, last_heartbeat, - capabilities, metadata, created_at, updated_at) - VALUES (?, ?, ?, 'active', ?, ?, ?, ?, ?)`); - stmt.run(params.agentId, params.baseUrl, params.port, now, params.capabilities ? JSON.stringify(params.capabilities) : null, params.metadata ? JSON.stringify(params.metadata) : null, now, now); - } - return this.get(params.agentId); - } - get(agentId) { - const stmt = this.getStatement('getAgent', 'SELECT * FROM agents WHERE agent_id = ?'); - const row = stmt.get(agentId); - if (!row) - return null; - return this.rowToEntry(row); - } - listActive() { - const stmt = this.getStatement('listActiveAgents', "SELECT * FROM agents WHERE status = 'active' ORDER BY last_heartbeat DESC"); - const rows = stmt.all(); - return rows.map((row) => this.rowToEntry(row)); - } - listAll() { - const stmt = this.getStatement('listAllAgents', 'SELECT * FROM agents ORDER BY last_heartbeat DESC'); - const rows = stmt.all(); - return rows.map((row) => this.rowToEntry(row)); - } - heartbeat(agentId) { - const now = new Date().toISOString(); - const stmt = this.getStatement('heartbeat', "UPDATE agents SET last_heartbeat = ?, status = 'active', updated_at = ? WHERE agent_id = ?"); - const result = stmt.run(now, now, agentId); - return result.changes > 0; - } - deactivate(agentId) { - const now = new Date().toISOString(); - const stmt = this.getStatement('deactivate', "UPDATE agents SET status = 'inactive', updated_at = ? WHERE agent_id = ?"); - const result = stmt.run(now, agentId); - return result.changes > 0; - } - cleanupStale(staleThresholdMs = 5 * 60 * 1000) { - const threshold = new Date(Date.now() - staleThresholdMs).toISOString(); - const now = new Date().toISOString(); - const stmt = this.getStatement('cleanupStale', "UPDATE agents SET status = 'stale', updated_at = ? WHERE last_heartbeat < ? AND status IN ('active', 'inactive')"); - const result = stmt.run(now, threshold); - return result.changes; - } - deleteStale() { - const stmt = this.getStatement('deleteStale', "DELETE FROM agents WHERE status = 'stale'"); - const result = stmt.run(); - return result.changes; - } - close() { - AgentRegistry.resetInstance(); - } - rowToEntry(row) { - const capabilities = safeJsonParse(row.capabilities); - const metadata = safeJsonParse(row.metadata); - return { - agentId: row.agent_id, - baseUrl: row.base_url, - port: row.port, - status: row.status, - lastHeartbeat: row.last_heartbeat, - capabilities: capabilities || undefined, - metadata: metadata || undefined, - }; - } -} -let cleanupTimer = null; -const DEFAULT_CLEANUP_INTERVAL_MS = 5 * 60 * 1000; -export function startAgentRegistryCleanup() { - if (cleanupTimer) { - return; - } - const intervalMs = parseInt(process.env.AGENT_REGISTRY_CLEANUP_INTERVAL_MS || '', 10) || - DEFAULT_CLEANUP_INTERVAL_MS; - const registry = AgentRegistry.getInstance(); - const cleanup = () => { - try { - const markedStale = registry.cleanupStale(5 * 60 * 1000); - const deleted = registry.deleteStale(); - if (markedStale > 0 || deleted > 0) { - logger.info('[Agent Registry] Cleanup completed', { - markedStale, - deleted, - }); - } - } - catch (error) { - logger.error('[Agent Registry] Cleanup failed', { - error: error instanceof Error ? error.message : String(error), - }); - } - }; - cleanup(); - cleanupTimer = setInterval(cleanup, intervalMs); - logger.info('[Agent Registry] Periodic cleanup started', { - intervalMs, - }); -} -export function stopAgentRegistryCleanup() { - if (cleanupTimer) { - clearInterval(cleanupTimer); - cleanupTimer = null; - logger.info('[Agent Registry] Periodic cleanup stopped'); - } -} -//# sourceMappingURL=AgentRegistry.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/storage/AgentRegistry.js.map b/.claude-plugin/memesh/dist/a2a/storage/AgentRegistry.js.map deleted file mode 100644 index fe646023..00000000 --- a/.claude-plugin/memesh/dist/a2a/storage/AgentRegistry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"AgentRegistry.js","sourceRoot":"","sources":["../../../src/a2a/storage/AgentRegistry.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/storage/TaskQueue.d.ts b/.claude-plugin/memesh/dist/a2a/storage/TaskQueue.d.ts deleted file mode 100644 index df641e8f..00000000 --- a/.claude-plugin/memesh/dist/a2a/storage/TaskQueue.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { Task, TaskFilter, TaskStatus, CreateTaskParams, UpdateTaskParams, Message, AddMessageParams, MessageCreated, Artifact } from '../types/index.js'; -export declare class TaskQueue { - private db; - private preparedStatements; - private isClosed; - constructor(agentId: string, dbPath?: string); - private initializeSchema; - private getStatement; - createTask(params: CreateTaskParams): Task; - getTask(taskId: string): Task | null; - listTasks(filter?: TaskFilter): TaskStatus[]; - updateTaskStatus(taskId: string, params: UpdateTaskParams): boolean; - addMessage(params: AddMessageParams): MessageCreated; - getMessages(taskId: string): Message[]; - addArtifact(params: { - taskId: string; - type: string; - name?: string; - content: string | Buffer; - encoding?: 'utf-8' | 'base64'; - metadata?: Record; - }): string; - getArtifacts(taskId: string): Artifact[]; - close(): void; - private rowToTask; -} -//# sourceMappingURL=TaskQueue.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/storage/TaskQueue.d.ts.map b/.claude-plugin/memesh/dist/a2a/storage/TaskQueue.d.ts.map deleted file mode 100644 index e8c8834b..00000000 --- a/.claude-plugin/memesh/dist/a2a/storage/TaskQueue.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"TaskQueue.d.ts","sourceRoot":"","sources":["../../../src/a2a/storage/TaskQueue.ts"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EACV,IAAI,EAGJ,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,OAAO,EACP,gBAAgB,EAChB,cAAc,EACd,QAAQ,EAET,MAAM,mBAAmB,CAAC;AAyF3B,qBAAa,SAAS;IACpB,OAAO,CAAC,EAAE,CAAoB;IAE9B,OAAO,CAAC,kBAAkB,CAAkC;IAE5D,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IA8B5C,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,YAAY;IASpB,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAiD1C,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IA4BpC,SAAS,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE;IA0H5C,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO;IA8CnE,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,cAAc;IA6BpD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE;IAsBtC,WAAW,CAAC,MAAM,EAAE;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;QACzB,QAAQ,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;QAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC,GAAG,MAAM;IAsCV,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE;IAyBxC,KAAK,IAAI,IAAI;IAWb,OAAO,CAAC,SAAS;CAkBlB"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/storage/TaskQueue.js b/.claude-plugin/memesh/dist/a2a/storage/TaskQueue.js deleted file mode 100644 index 7061a080..00000000 --- a/.claude-plugin/memesh/dist/a2a/storage/TaskQueue.js +++ /dev/null @@ -1,339 +0,0 @@ -import Database from 'better-sqlite3'; -import { readFileSync } from 'fs'; -import { join, dirname } from 'path'; -import { fileURLToPath } from 'url'; -import { v4 as uuidv4 } from 'uuid'; -import { logger } from '../../utils/logger.js'; -import { getDataPath } from '../../utils/PathResolver.js'; -import { validateArraySize, validateTaskStates, validateTaskPriorities, validatePositiveInteger, validateISOTimestamp, } from './inputValidation.js'; -const __filename = fileURLToPath(import.meta.url); -const __dirname = dirname(__filename); -function assertPlaceholderParamMatch(query, params, context) { - const stripped = query.replace(/'[^']*'|"[^"]*"/g, ''); - const placeholderCount = (stripped.match(/\?/g) || []).length; - if (placeholderCount !== params.length) { - throw new Error(`[TaskQueue] Placeholder/parameter count mismatch in ${context}: ` + - `query has ${placeholderCount} placeholder(s) but ${params.length} parameter(s) were provided`); - } -} -function safeJsonParse(jsonString) { - if (!jsonString) - return null; - try { - return JSON.parse(jsonString); - } - catch (error) { - logger.error('[TaskQueue] Invalid JSON data', { - error: error instanceof Error ? error.message : String(error), - jsonString: jsonString?.substring(0, 100), - }); - return null; - } -} -export class TaskQueue { - db; - preparedStatements; - isClosed = false; - constructor(agentId, dbPath) { - const path = dbPath || getDataPath(`a2a-tasks-${agentId}.db`); - this.db = new Database(path); - this.preparedStatements = new Map(); - const BUSY_TIMEOUT_BOUNDS = { min: 1000, max: 60000, default: 5000 }; - let busyTimeoutMs = parseInt(process.env.DB_BUSY_TIMEOUT_MS || String(BUSY_TIMEOUT_BOUNDS.default), 10); - if (Number.isNaN(busyTimeoutMs)) { - logger.warn(`[TaskQueue] Invalid (NaN) DB_BUSY_TIMEOUT_MS, using default ${BUSY_TIMEOUT_BOUNDS.default}ms`); - busyTimeoutMs = BUSY_TIMEOUT_BOUNDS.default; - } - else if (busyTimeoutMs < BUSY_TIMEOUT_BOUNDS.min) { - logger.warn(`[TaskQueue] DB_BUSY_TIMEOUT_MS (${busyTimeoutMs}ms) below minimum, clamping to ${BUSY_TIMEOUT_BOUNDS.min}ms`); - busyTimeoutMs = BUSY_TIMEOUT_BOUNDS.min; - } - else if (busyTimeoutMs > BUSY_TIMEOUT_BOUNDS.max) { - logger.warn(`[TaskQueue] DB_BUSY_TIMEOUT_MS (${busyTimeoutMs}ms) exceeds maximum, clamping to ${BUSY_TIMEOUT_BOUNDS.max}ms`); - busyTimeoutMs = BUSY_TIMEOUT_BOUNDS.max; - } - this.db.pragma(`busy_timeout = ${busyTimeoutMs}`); - this.db.pragma('journal_mode = WAL'); - this.initializeSchema(); - } - initializeSchema() { - const schemaPath = join(__dirname, 'schemas.sql'); - const schema = readFileSync(schemaPath, 'utf-8'); - this.db.exec(schema); - } - getStatement(key, sql) { - let stmt = this.preparedStatements.get(key); - if (!stmt) { - stmt = this.db.prepare(sql); - this.preparedStatements.set(key, stmt); - } - return stmt; - } - createTask(params) { - const now = new Date().toISOString(); - const taskId = uuidv4(); - const task = { - id: taskId, - state: 'SUBMITTED', - createdAt: now, - updatedAt: now, - name: params.name, - description: params.description, - priority: params.priority || 'normal', - sessionId: params.sessionId, - messages: [], - artifacts: [], - metadata: params.metadata, - }; - const stmt = this.getStatement('insertTask', `INSERT INTO tasks (id, state, name, description, priority, session_id, created_at, updated_at, metadata) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`); - stmt.run(task.id, task.state, task.name || null, task.description || null, task.priority, task.sessionId || null, task.createdAt, task.updatedAt, task.metadata ? JSON.stringify(task.metadata) : null); - if (params.initialMessage) { - this.addMessage({ - taskId: task.id, - role: params.initialMessage.role, - parts: params.initialMessage.parts, - }); - task.messages = this.getMessages(task.id); - } - return task; - } - getTask(taskId) { - const stmt = this.getStatement('getTask', 'SELECT * FROM tasks WHERE id = ?'); - const row = stmt.get(taskId); - if (!row) - return null; - return this.rowToTask(row); - } - listTasks(filter) { - if (filter?.state) { - const states = Array.isArray(filter.state) ? filter.state : [filter.state]; - validateArraySize(states, 'state filter'); - validateTaskStates(states); - } - if (filter?.priority) { - const priorities = Array.isArray(filter.priority) - ? filter.priority - : [filter.priority]; - validateArraySize(priorities, 'priority filter'); - validateTaskPriorities(priorities); - } - if (filter?.limit !== undefined) { - validatePositiveInteger(filter.limit, 'limit', 10000); - } - if (filter?.offset !== undefined) { - validatePositiveInteger(filter.offset, 'offset'); - } - let query = ` - SELECT - t.*, - COALESCE(m.message_count, 0) as message_count, - COALESCE(a.artifact_count, 0) as artifact_count - FROM tasks t - LEFT JOIN ( - SELECT task_id, COUNT(*) as message_count - FROM messages - GROUP BY task_id - ) m ON t.id = m.task_id - LEFT JOIN ( - SELECT task_id, COUNT(*) as artifact_count - FROM artifacts - GROUP BY task_id - ) a ON t.id = a.task_id - WHERE 1=1 - `; - const params = []; - if (filter?.state) { - if (Array.isArray(filter.state)) { - const stateCount = filter.state.length; - const statePlaceholders = Array(stateCount).fill('?').join(','); - query += ` AND t.state IN (${statePlaceholders})`; - params.push(...filter.state); - } - else { - query += ' AND t.state = ?'; - params.push(filter.state); - } - } - if (filter?.priority) { - if (Array.isArray(filter.priority)) { - const priorityCount = filter.priority.length; - const priorityPlaceholders = Array(priorityCount).fill('?').join(','); - query += ` AND t.priority IN (${priorityPlaceholders})`; - params.push(...filter.priority); - } - else { - query += ' AND t.priority = ?'; - params.push(filter.priority); - } - } - if (filter?.createdAfter !== undefined) { - validateISOTimestamp(filter.createdAfter, 'createdAfter'); - query += ' AND t.created_at >= ?'; - params.push(filter.createdAfter); - } - if (filter?.createdBefore !== undefined) { - validateISOTimestamp(filter.createdBefore, 'createdBefore'); - query += ' AND t.created_at <= ?'; - params.push(filter.createdBefore); - } - if (filter?.sessionId) { - query += ' AND t.session_id = ?'; - params.push(filter.sessionId); - } - query += ' ORDER BY t.created_at DESC'; - if (filter?.limit) { - query += ' LIMIT ?'; - params.push(filter.limit); - } - if (filter?.offset) { - query += ' OFFSET ?'; - params.push(filter.offset); - } - assertPlaceholderParamMatch(query, params, 'listTasks'); - const stmt = this.db.prepare(query); - const rows = stmt.all(...params); - return rows.map((row) => ({ - id: row.id, - state: row.state, - name: row.name || undefined, - priority: row.priority || undefined, - createdAt: row.created_at, - updatedAt: row.updated_at, - messageCount: row.message_count, - artifactCount: row.artifact_count, - })); - } - updateTaskStatus(taskId, params) { - const updates = []; - const values = []; - if (params.state !== undefined) { - updates.push('state = ?'); - values.push(params.state); - } - if (params.name !== undefined) { - updates.push('name = ?'); - values.push(params.name); - } - if (params.description !== undefined) { - updates.push('description = ?'); - values.push(params.description); - } - if (params.priority !== undefined) { - updates.push('priority = ?'); - values.push(params.priority); - } - if (params.metadata !== undefined) { - updates.push('metadata = ?'); - values.push(params.metadata ? JSON.stringify(params.metadata) : null); - } - updates.push('updated_at = ?'); - values.push(new Date().toISOString()); - values.push(taskId); - const updateQuery = `UPDATE tasks SET ${updates.join(', ')} WHERE id = ?`; - assertPlaceholderParamMatch(updateQuery, values, 'updateTaskStatus'); - const stmt = this.db.prepare(updateQuery); - const result = stmt.run(...values); - return result.changes > 0; - } - addMessage(params) { - const messageId = uuidv4(); - const now = new Date().toISOString(); - const stmt = this.db.prepare(` - INSERT INTO messages (id, task_id, role, parts, created_at, metadata) - VALUES (?, ?, ?, ?, ?, ?) - `); - stmt.run(messageId, params.taskId, params.role, JSON.stringify(params.parts), now, params.metadata ? JSON.stringify(params.metadata) : null); - this.db - .prepare('UPDATE tasks SET updated_at = ? WHERE id = ?') - .run(now, params.taskId); - return { - id: messageId, - taskId: params.taskId, - createdAt: now, - }; - } - getMessages(taskId) { - const stmt = this.db.prepare(` - SELECT * FROM messages WHERE task_id = ? ORDER BY created_at ASC - `); - const rows = stmt.all(taskId); - return rows.map((row) => { - const parts = safeJsonParse(row.parts); - const metadata = safeJsonParse(row.metadata); - return { - id: row.id, - taskId: row.task_id, - role: row.role, - parts: parts || [], - createdAt: row.created_at, - metadata: metadata || undefined, - }; - }); - } - addArtifact(params) { - const artifactId = uuidv4(); - const now = new Date().toISOString(); - const contentStr = typeof params.content === 'string' - ? params.content - : params.content.toString('base64'); - const encoding = params.encoding || (typeof params.content === 'string' ? 'utf-8' : 'base64'); - const size = typeof params.content === 'string' - ? Buffer.byteLength(params.content) - : params.content.length; - const stmt = this.db.prepare(` - INSERT INTO artifacts (id, task_id, type, name, content, encoding, size, created_at, metadata) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) - `); - stmt.run(artifactId, params.taskId, params.type, params.name || null, contentStr, encoding, size, now, params.metadata ? JSON.stringify(params.metadata) : null); - this.db - .prepare('UPDATE tasks SET updated_at = ? WHERE id = ?') - .run(now, params.taskId); - return artifactId; - } - getArtifacts(taskId) { - const stmt = this.db.prepare(` - SELECT * FROM artifacts WHERE task_id = ? ORDER BY created_at ASC - `); - const rows = stmt.all(taskId); - return rows.map((row) => { - const metadata = safeJsonParse(row.metadata); - return { - id: row.id, - taskId: row.task_id, - type: row.type, - name: row.name || undefined, - content: row.encoding === 'base64' ? Buffer.from(row.content, 'base64') : row.content, - encoding: row.encoding || undefined, - size: row.size, - createdAt: row.created_at, - metadata: metadata || undefined, - }; - }); - } - close() { - if (this.isClosed) { - return; - } - this.isClosed = true; - this.preparedStatements.clear(); - this.db.close(); - } - rowToTask(row) { - const metadata = safeJsonParse(row.metadata); - return { - id: row.id, - state: row.state, - name: row.name || undefined, - description: row.description || undefined, - priority: row.priority || undefined, - sessionId: row.session_id || undefined, - createdAt: row.created_at, - updatedAt: row.updated_at, - messages: this.getMessages(row.id), - artifacts: this.getArtifacts(row.id), - metadata: metadata || undefined, - }; - } -} -//# sourceMappingURL=TaskQueue.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/storage/TaskQueue.js.map b/.claude-plugin/memesh/dist/a2a/storage/TaskQueue.js.map deleted file mode 100644 index 75cc7d92..00000000 --- a/.claude-plugin/memesh/dist/a2a/storage/TaskQueue.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"TaskQueue.js","sourceRoot":"","sources":["../../../src/a2a/storage/TaskQueue.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/storage/ValidationError.d.ts b/.claude-plugin/memesh/dist/a2a/storage/ValidationError.d.ts deleted file mode 100644 index ea8145d0..00000000 --- a/.claude-plugin/memesh/dist/a2a/storage/ValidationError.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export declare class ValidationError extends Error { - readonly code: string; - readonly details: Record; - constructor(message: string, details?: Record); - toJSON(): Record; -} -//# sourceMappingURL=ValidationError.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/storage/ValidationError.d.ts.map b/.claude-plugin/memesh/dist/a2a/storage/ValidationError.d.ts.map deleted file mode 100644 index c6816f37..00000000 --- a/.claude-plugin/memesh/dist/a2a/storage/ValidationError.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ValidationError.d.ts","sourceRoot":"","sources":["../../../src/a2a/storage/ValidationError.ts"],"names":[],"mappings":"AAOA,qBAAa,eAAgB,SAAQ,KAAK;IACxC,SAAgB,IAAI,EAAE,MAAM,CAAsB;IAClD,SAAgB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAErC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAWlE,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAQlC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/storage/ValidationError.js b/.claude-plugin/memesh/dist/a2a/storage/ValidationError.js deleted file mode 100644 index da8ed7d8..00000000 --- a/.claude-plugin/memesh/dist/a2a/storage/ValidationError.js +++ /dev/null @@ -1,21 +0,0 @@ -export class ValidationError extends Error { - code = 'VALIDATION_ERROR'; - details; - constructor(message, details = {}) { - super(message); - this.name = 'ValidationError'; - this.details = details; - if (Error.captureStackTrace) { - Error.captureStackTrace(this, ValidationError); - } - } - toJSON() { - return { - name: this.name, - code: this.code, - message: this.message, - details: this.details, - }; - } -} -//# sourceMappingURL=ValidationError.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/storage/ValidationError.js.map b/.claude-plugin/memesh/dist/a2a/storage/ValidationError.js.map deleted file mode 100644 index df5caec0..00000000 --- a/.claude-plugin/memesh/dist/a2a/storage/ValidationError.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ValidationError.js","sourceRoot":"","sources":["../../../src/a2a/storage/ValidationError.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxB,IAAI,GAAW,kBAAkB,CAAC;IAClC,OAAO,CAA0B;IAEjD,YAAY,OAAe,EAAE,UAAmC,EAAE;QAChE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAGvB,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;IACJ,CAAC;CACF"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/storage/index.d.ts b/.claude-plugin/memesh/dist/a2a/storage/index.d.ts deleted file mode 100644 index bc9b5546..00000000 --- a/.claude-plugin/memesh/dist/a2a/storage/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { TaskQueue } from './TaskQueue.js'; -export { AgentRegistry } from './AgentRegistry.js'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/storage/index.d.ts.map b/.claude-plugin/memesh/dist/a2a/storage/index.d.ts.map deleted file mode 100644 index 0a7cd739..00000000 --- a/.claude-plugin/memesh/dist/a2a/storage/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/a2a/storage/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/storage/index.js b/.claude-plugin/memesh/dist/a2a/storage/index.js deleted file mode 100644 index f46a4951..00000000 --- a/.claude-plugin/memesh/dist/a2a/storage/index.js +++ /dev/null @@ -1,3 +0,0 @@ -export { TaskQueue } from './TaskQueue.js'; -export { AgentRegistry } from './AgentRegistry.js'; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/storage/index.js.map b/.claude-plugin/memesh/dist/a2a/storage/index.js.map deleted file mode 100644 index 6d41da1b..00000000 --- a/.claude-plugin/memesh/dist/a2a/storage/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/a2a/storage/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/storage/inputValidation.d.ts b/.claude-plugin/memesh/dist/a2a/storage/inputValidation.d.ts deleted file mode 100644 index 8f431871..00000000 --- a/.claude-plugin/memesh/dist/a2a/storage/inputValidation.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { TaskState, TaskPriority } from '../types/index.js'; -export declare const VALID_TASK_STATES: readonly TaskState[]; -export declare const TaskStateConstants: { - SUBMITTED: "SUBMITTED"; - WORKING: "WORKING"; - INPUT_REQUIRED: "INPUT_REQUIRED"; - COMPLETED: "COMPLETED"; - FAILED: "FAILED"; - CANCELED: "CANCELED"; - REJECTED: "REJECTED"; - TIMEOUT: "TIMEOUT"; -}; -export declare function validateArraySize(array: T[], fieldName: string, maxSize?: number): void; -export declare function validateTaskStates(states: string[]): asserts states is TaskState[]; -export declare function validateTaskPriorities(priorities: string[]): asserts priorities is TaskPriority[]; -export declare function validatePositiveInteger(value: number, fieldName: string, max?: number): void; -export declare function validateISOTimestamp(value: string, fieldName: string): void; -//# sourceMappingURL=inputValidation.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/storage/inputValidation.d.ts.map b/.claude-plugin/memesh/dist/a2a/storage/inputValidation.d.ts.map deleted file mode 100644 index 5355e165..00000000 --- a/.claude-plugin/memesh/dist/a2a/storage/inputValidation.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"inputValidation.d.ts","sourceRoot":"","sources":["../../../src/a2a/storage/inputValidation.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAWjE,eAAO,MAAM,iBAAiB,EAAE,SAAS,SAAS,EASxC,CAAC;AAMX,eAAO,MAAM,kBAAkB;;;;;;;;;CASM,CAAC;AAoBtC,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,KAAK,EAAE,CAAC,EAAE,EACV,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,MAA8B,GACtC,IAAI,CAUN;AAQD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,IAAI,SAAS,EAAE,CAYlF;AAQD,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAAE,GACnB,OAAO,CAAC,UAAU,IAAI,YAAY,EAAE,CAYtC;AAUD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,GAAG,GAAE,MAAgC,GACpC,IAAI,CAUN;AASD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CA6B3E"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/storage/inputValidation.js b/.claude-plugin/memesh/dist/a2a/storage/inputValidation.js deleted file mode 100644 index de4a3d60..00000000 --- a/.claude-plugin/memesh/dist/a2a/storage/inputValidation.js +++ /dev/null @@ -1,101 +0,0 @@ -import { ValidationError } from '../../errors/index.js'; -const MAX_FILTER_ARRAY_SIZE = 100; -export const VALID_TASK_STATES = [ - 'SUBMITTED', - 'WORKING', - 'INPUT_REQUIRED', - 'COMPLETED', - 'FAILED', - 'CANCELED', - 'REJECTED', - 'TIMEOUT', -]; -export const TaskStateConstants = { - SUBMITTED: 'SUBMITTED', - WORKING: 'WORKING', - INPUT_REQUIRED: 'INPUT_REQUIRED', - COMPLETED: 'COMPLETED', - FAILED: 'FAILED', - CANCELED: 'CANCELED', - REJECTED: 'REJECTED', - TIMEOUT: 'TIMEOUT', -}; -const VALID_TASK_PRIORITIES = [ - 'low', - 'normal', - 'high', - 'urgent', -]; -export function validateArraySize(array, fieldName, maxSize = MAX_FILTER_ARRAY_SIZE) { - if (array.length > maxSize) { - throw new ValidationError(`Too many items in ${fieldName}`, { - field: fieldName, - providedCount: array.length, - maxAllowed: maxSize, - severity: 'HIGH', - reason: 'DoS prevention: Excessive array size can cause performance degradation', - }); - } -} -export function validateTaskStates(states) { - for (const state of states) { - if (!VALID_TASK_STATES.includes(state)) { - throw new ValidationError('Invalid task state', { - field: 'state', - providedState: state, - validStates: VALID_TASK_STATES, - severity: 'HIGH', - reason: 'SQL injection prevention: Only known enum values are allowed', - }); - } - } -} -export function validateTaskPriorities(priorities) { - for (const priority of priorities) { - if (!VALID_TASK_PRIORITIES.includes(priority)) { - throw new ValidationError('Invalid task priority', { - field: 'priority', - providedPriority: priority, - validPriorities: VALID_TASK_PRIORITIES, - severity: 'HIGH', - reason: 'SQL injection prevention: Only known enum values are allowed', - }); - } - } -} -export function validatePositiveInteger(value, fieldName, max = Number.MAX_SAFE_INTEGER) { - if (!Number.isInteger(value) || value < 0 || value > max) { - throw new ValidationError(`Invalid ${fieldName}`, { - field: fieldName, - providedValue: value, - constraints: { min: 0, max }, - severity: 'MEDIUM', - reason: 'Only positive integers are allowed', - }); - } -} -export function validateISOTimestamp(value, fieldName) { - const date = new Date(value); - if (Number.isNaN(date.getTime())) { - throw new ValidationError(`Invalid ${fieldName}`, { - field: fieldName, - providedValue: value, - severity: 'MEDIUM', - reason: 'Must be a valid ISO 8601 timestamp string', - }); - } - const timestamp = date.getTime(); - const now = Date.now(); - const oneHundredYears = 100 * 365 * 24 * 60 * 60 * 1000; - if (timestamp < 0 || timestamp > now + oneHundredYears) { - throw new ValidationError(`Invalid ${fieldName}`, { - field: fieldName, - providedValue: value, - timestamp, - constraints: { min: 0, max: now + oneHundredYears }, - severity: 'MEDIUM', - reason: 'Timestamp must be a reasonable date (not before epoch or too far in future)', - }); - } -} -//# sourceMappingURL=inputValidation.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/storage/inputValidation.js.map b/.claude-plugin/memesh/dist/a2a/storage/inputValidation.js.map deleted file mode 100644 index cd961bc2..00000000 --- a/.claude-plugin/memesh/dist/a2a/storage/inputValidation.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"inputValidation.js","sourceRoot":"","sources":["../../../src/a2a/storage/inputValidation.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/storage/registry-schemas.sql b/.claude-plugin/memesh/dist/a2a/storage/registry-schemas.sql deleted file mode 100644 index 29ebe732..00000000 --- a/.claude-plugin/memesh/dist/a2a/storage/registry-schemas.sql +++ /dev/null @@ -1,20 +0,0 @@ --- A2A Agent Registry Database Schema --- Path: ~/.claude-code-buddy/a2a-registry.db - --- Agents table -CREATE TABLE IF NOT EXISTS agents ( - agent_id TEXT PRIMARY KEY, - base_url TEXT NOT NULL, - port INTEGER NOT NULL, - status TEXT NOT NULL CHECK(status IN ('active', 'inactive', 'stale')) DEFAULT 'active', - last_heartbeat TEXT NOT NULL, -- ISO 8601 timestamp - capabilities TEXT, -- JSON string of AgentCapabilities - metadata TEXT, -- JSON string - created_at TEXT NOT NULL, -- ISO 8601 timestamp - updated_at TEXT NOT NULL -- ISO 8601 timestamp -); - --- Indexes for efficient queries -CREATE INDEX IF NOT EXISTS idx_agents_status ON agents(status); -CREATE INDEX IF NOT EXISTS idx_agents_last_heartbeat ON agents(last_heartbeat); -CREATE INDEX IF NOT EXISTS idx_agents_port ON agents(port); diff --git a/.claude-plugin/memesh/dist/a2a/storage/schemas.sql b/.claude-plugin/memesh/dist/a2a/storage/schemas.sql deleted file mode 100644 index 388ef37d..00000000 --- a/.claude-plugin/memesh/dist/a2a/storage/schemas.sql +++ /dev/null @@ -1,64 +0,0 @@ --- A2A Task Queue Database Schema --- Path: ~/.claude-code-buddy/a2a-tasks-{agent_id}.db - --- Tasks table -CREATE TABLE IF NOT EXISTS tasks ( - id TEXT PRIMARY KEY, - state TEXT NOT NULL CHECK(state IN ('SUBMITTED', 'WORKING', 'INPUT_REQUIRED', 'COMPLETED', 'FAILED', 'CANCELED', 'REJECTED', 'TIMEOUT')), - name TEXT, - description TEXT, - priority TEXT CHECK(priority IN ('low', 'normal', 'high', 'urgent')) DEFAULT 'normal', - session_id TEXT, - created_at TEXT NOT NULL, -- ISO 8601 timestamp - updated_at TEXT NOT NULL, -- ISO 8601 timestamp - metadata TEXT -- JSON string -); - --- Index for common queries -CREATE INDEX IF NOT EXISTS idx_tasks_state ON tasks(state); -CREATE INDEX IF NOT EXISTS idx_tasks_created_at ON tasks(created_at); -CREATE INDEX IF NOT EXISTS idx_tasks_session_id ON tasks(session_id); - --- PERFORMANCE OPTIMIZATION: Composite indexes for common query patterns --- Used by listTasks() with state + priority filters -CREATE INDEX IF NOT EXISTS idx_tasks_state_priority ON tasks(state, priority); --- Used by listTasks() with state + created_at for sorting -CREATE INDEX IF NOT EXISTS idx_tasks_state_created_at ON tasks(state, created_at DESC); --- Used by listTasks() with session_id + state -CREATE INDEX IF NOT EXISTS idx_tasks_session_state ON tasks(session_id, state); --- Used by listTasks() with priority + created_at -CREATE INDEX IF NOT EXISTS idx_tasks_priority_created_at ON tasks(priority, created_at DESC); - --- Messages table -CREATE TABLE IF NOT EXISTS messages ( - id TEXT PRIMARY KEY, - task_id TEXT NOT NULL, - role TEXT NOT NULL CHECK(role IN ('user', 'assistant')), - parts TEXT NOT NULL, -- JSON array of message parts - created_at TEXT NOT NULL, -- ISO 8601 timestamp - metadata TEXT, -- JSON string - FOREIGN KEY (task_id) REFERENCES tasks(id) ON DELETE CASCADE -); - --- Index for message queries -CREATE INDEX IF NOT EXISTS idx_messages_task_id ON messages(task_id); -CREATE INDEX IF NOT EXISTS idx_messages_created_at ON messages(created_at); - --- Artifacts table -CREATE TABLE IF NOT EXISTS artifacts ( - id TEXT PRIMARY KEY, - task_id TEXT NOT NULL, - type TEXT NOT NULL, -- MIME type or custom type - name TEXT, - content TEXT NOT NULL, -- Text content or base64-encoded binary - encoding TEXT DEFAULT 'utf-8' CHECK(encoding IN ('utf-8', 'base64')), - size INTEGER, -- bytes - created_at TEXT NOT NULL, -- ISO 8601 timestamp - metadata TEXT, -- JSON string - FOREIGN KEY (task_id) REFERENCES tasks(id) ON DELETE CASCADE -); - --- Index for artifact queries -CREATE INDEX IF NOT EXISTS idx_artifacts_task_id ON artifacts(task_id); -CREATE INDEX IF NOT EXISTS idx_artifacts_type ON artifacts(type); -CREATE INDEX IF NOT EXISTS idx_artifacts_created_at ON artifacts(created_at); diff --git a/.claude-plugin/memesh/dist/a2a/types/TaskResult.d.ts b/.claude-plugin/memesh/dist/a2a/types/TaskResult.d.ts deleted file mode 100644 index 150f8059..00000000 --- a/.claude-plugin/memesh/dist/a2a/types/TaskResult.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -export interface TaskResult { - taskId: string; - state: 'COMPLETED' | 'FAILED' | 'TIMEOUT'; - success: boolean; - result?: unknown; - error?: string; - executedAt: string; - executedBy: string; - durationMs?: number; -} -//# sourceMappingURL=TaskResult.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/types/TaskResult.d.ts.map b/.claude-plugin/memesh/dist/a2a/types/TaskResult.d.ts.map deleted file mode 100644 index 42315d4c..00000000 --- a/.claude-plugin/memesh/dist/a2a/types/TaskResult.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"TaskResult.d.ts","sourceRoot":"","sources":["../../../src/a2a/types/TaskResult.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,UAAU;IAEzB,MAAM,EAAE,MAAM,CAAC;IAGf,KAAK,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;IAG1C,OAAO,EAAE,OAAO,CAAC;IAmBjB,MAAM,CAAC,EAAE,OAAO,CAAC;IAUjB,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,UAAU,EAAE,MAAM,CAAC;IAGnB,UAAU,EAAE,MAAM,CAAC;IAGnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/types/TaskResult.js b/.claude-plugin/memesh/dist/a2a/types/TaskResult.js deleted file mode 100644 index 0c57dbc1..00000000 --- a/.claude-plugin/memesh/dist/a2a/types/TaskResult.js +++ /dev/null @@ -1,2 +0,0 @@ -export {}; -//# sourceMappingURL=TaskResult.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/types/TaskResult.js.map b/.claude-plugin/memesh/dist/a2a/types/TaskResult.js.map deleted file mode 100644 index af9dd518..00000000 --- a/.claude-plugin/memesh/dist/a2a/types/TaskResult.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"TaskResult.js","sourceRoot":"","sources":["../../../src/a2a/types/TaskResult.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/types/agent-card.d.ts b/.claude-plugin/memesh/dist/a2a/types/agent-card.d.ts deleted file mode 100644 index 19e41b23..00000000 --- a/.claude-plugin/memesh/dist/a2a/types/agent-card.d.ts +++ /dev/null @@ -1,59 +0,0 @@ -export interface AgentCard { - id: string; - name: string; - description?: string; - version?: string; - capabilities: AgentCapabilities; - endpoints: AgentEndpoints; - metadata?: Record; -} -export interface AgentCapabilities { - skills: Skill[]; - supportedFormats?: string[]; - maxMessageSize?: number; - streaming?: boolean; - pushNotifications?: boolean; -} -export interface Skill { - name: string; - description: string; - parameters?: SkillParameter[]; - examples?: SkillExample[]; -} -export interface SkillParameter { - name: string; - type: 'string' | 'number' | 'boolean' | 'object' | 'array'; - description?: string; - required?: boolean; - default?: unknown; -} -export interface SkillExample { - description: string; - input: Record; - output?: unknown; -} -export interface AgentEndpoints { - baseUrl: string; - sendMessage?: string; - getTask?: string; - listTasks?: string; - cancelTask?: string; - getAgentCard?: string; -} -export interface AgentRegistryEntry { - agentId: string; - baseUrl: string; - port: number; - status: 'active' | 'inactive' | 'stale'; - lastHeartbeat: string; - capabilities?: AgentCapabilities; - metadata?: Record; -} -export interface RegisterAgentParams { - agentId: string; - baseUrl: string; - port: number; - capabilities?: AgentCapabilities; - metadata?: Record; -} -//# sourceMappingURL=agent-card.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/types/agent-card.d.ts.map b/.claude-plugin/memesh/dist/a2a/types/agent-card.d.ts.map deleted file mode 100644 index 1a9a7e21..00000000 --- a/.claude-plugin/memesh/dist/a2a/types/agent-card.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"agent-card.d.ts","sourceRoot":"","sources":["../../../src/a2a/types/agent-card.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,iBAAiB,CAAC;IAChC,SAAS,EAAE,cAAc,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAKD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAKD,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;CAC3B;AAKD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAKD,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAKD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAKD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAKD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/types/agent-card.js b/.claude-plugin/memesh/dist/a2a/types/agent-card.js deleted file mode 100644 index 3cc88f2d..00000000 --- a/.claude-plugin/memesh/dist/a2a/types/agent-card.js +++ /dev/null @@ -1,2 +0,0 @@ -export {}; -//# sourceMappingURL=agent-card.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/types/agent-card.js.map b/.claude-plugin/memesh/dist/a2a/types/agent-card.js.map deleted file mode 100644 index 8a41d1a9..00000000 --- a/.claude-plugin/memesh/dist/a2a/types/agent-card.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"agent-card.js","sourceRoot":"","sources":["../../../src/a2a/types/agent-card.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/types/index.d.ts b/.claude-plugin/memesh/dist/a2a/types/index.d.ts deleted file mode 100644 index 6a446548..00000000 --- a/.claude-plugin/memesh/dist/a2a/types/index.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -export type { ServiceResponse, ServiceError, SendMessageRequest, SendMessageResponse, GetTaskRequest, ListTasksRequest, CancelTaskRequest, MessagePart, TextPart, ImagePart, ToolCallPart, ToolResultPart, } from './protocol.js'; -export type { Task, TaskState, TaskPriority, TaskStatus, TaskFilter, CreateTaskParams, UpdateTaskParams, Artifact, } from './task.js'; -export { VALID_STATE_TRANSITIONS, isValidStateTransition, isTerminalState } from './task.js'; -export type { Message, Role, AddMessageParams, MessageCreated, } from './message.js'; -export type { AgentCard, AgentCapabilities, Skill, SkillParameter, SkillExample, AgentEndpoints, AgentRegistryEntry, RegisterAgentParams, } from './agent-card.js'; -export type { RateLimitConfig, TokenBucket, RateLimitError, RateLimitStats, } from './rateLimit.js'; -export type { TaskResult } from './TaskResult.js'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/types/index.d.ts.map b/.claude-plugin/memesh/dist/a2a/types/index.d.ts.map deleted file mode 100644 index ee9fcf60..00000000 --- a/.claude-plugin/memesh/dist/a2a/types/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/a2a/types/index.ts"],"names":[],"mappings":"AAMA,YAAY,EACV,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,cAAc,GACf,MAAM,eAAe,CAAC;AAGvB,YAAY,EACV,IAAI,EACJ,SAAS,EACT,YAAY,EACZ,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,QAAQ,GACT,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAG7F,YAAY,EACV,OAAO,EACP,IAAI,EACJ,gBAAgB,EAChB,cAAc,GACf,MAAM,cAAc,CAAC;AAGtB,YAAY,EACV,SAAS,EACT,iBAAiB,EACjB,KAAK,EACL,cAAc,EACd,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EACV,eAAe,EACf,WAAW,EACX,cAAc,EACd,cAAc,GACf,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/types/index.js b/.claude-plugin/memesh/dist/a2a/types/index.js deleted file mode 100644 index 5747fa93..00000000 --- a/.claude-plugin/memesh/dist/a2a/types/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export { VALID_STATE_TRANSITIONS, isValidStateTransition, isTerminalState } from './task.js'; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/types/index.js.map b/.claude-plugin/memesh/dist/a2a/types/index.js.map deleted file mode 100644 index ff6a5d97..00000000 --- a/.claude-plugin/memesh/dist/a2a/types/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/a2a/types/index.ts"],"names":[],"mappings":"AAkCA,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/types/message.d.ts b/.claude-plugin/memesh/dist/a2a/types/message.d.ts deleted file mode 100644 index 7013eaf0..00000000 --- a/.claude-plugin/memesh/dist/a2a/types/message.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { MessagePart } from './protocol.js'; -export type { MessagePart, TextPart, ImagePart, ToolCallPart, ToolResultPart, } from './protocol.js'; -export type { Message } from './task.js'; -export type Role = 'user' | 'assistant'; -export interface AddMessageParams { - taskId: string; - role: Role; - parts: MessagePart[]; - metadata?: Record; -} -export interface MessageCreated { - id: string; - taskId: string; - createdAt: string; -} -//# sourceMappingURL=message.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/types/message.d.ts.map b/.claude-plugin/memesh/dist/a2a/types/message.d.ts.map deleted file mode 100644 index ec817145..00000000 --- a/.claude-plugin/memesh/dist/a2a/types/message.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../src/a2a/types/message.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGjD,YAAY,EACV,WAAW,EACX,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,cAAc,GACf,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,WAAW,CAAC;AAKxC,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAKD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/types/message.js b/.claude-plugin/memesh/dist/a2a/types/message.js deleted file mode 100644 index acc95d53..00000000 --- a/.claude-plugin/memesh/dist/a2a/types/message.js +++ /dev/null @@ -1,2 +0,0 @@ -export {}; -//# sourceMappingURL=message.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/types/message.js.map b/.claude-plugin/memesh/dist/a2a/types/message.js.map deleted file mode 100644 index a3409195..00000000 --- a/.claude-plugin/memesh/dist/a2a/types/message.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"message.js","sourceRoot":"","sources":["../../../src/a2a/types/message.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/types/protocol.d.ts b/.claude-plugin/memesh/dist/a2a/types/protocol.d.ts deleted file mode 100644 index 06f12bdb..00000000 --- a/.claude-plugin/memesh/dist/a2a/types/protocol.d.ts +++ /dev/null @@ -1,60 +0,0 @@ -export interface ServiceResponse { - success: boolean; - data?: T; - error?: ServiceError; -} -export interface ServiceError { - code: string; - message: string; - details?: Record; -} -export interface SendMessageRequest { - taskId?: string; - message: { - role: 'user' | 'assistant'; - parts: MessagePart[]; - }; -} -export interface SendMessageResponse { - taskId: string; - status: string; -} -export interface GetTaskRequest { - taskId: string; -} -export interface ListTasksRequest { - status?: string; - limit?: number; - offset?: number; -} -export interface CancelTaskRequest { - taskId: string; - reason?: string; -} -export type MessagePart = TextPart | ImagePart | ToolCallPart | ToolResultPart; -export interface TextPart { - type: 'text'; - text: string; -} -export interface ImagePart { - type: 'image'; - source: { - type: 'url' | 'base64'; - url?: string; - data?: string; - mimeType?: string; - }; -} -export interface ToolCallPart { - type: 'tool_call'; - id: string; - name: string; - input: Record; -} -export interface ToolResultPart { - type: 'tool_result'; - toolCallId: string; - content: string | Record; - isError?: boolean; -} -//# sourceMappingURL=protocol.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/types/protocol.d.ts.map b/.claude-plugin/memesh/dist/a2a/types/protocol.d.ts.map deleted file mode 100644 index 81872a82..00000000 --- a/.claude-plugin/memesh/dist/a2a/types/protocol.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../src/a2a/types/protocol.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAKD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAKD,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAC3B,KAAK,EAAE,WAAW,EAAE,CAAC;KACtB,CAAC;CACH;AAKD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAKD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;CAChB;AAKD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAKD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAKD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY,GAAG,cAAc,CAAC;AAK/E,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAKD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE;QACN,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAC;QACvB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAKD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,WAAW,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAKD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/types/protocol.js b/.claude-plugin/memesh/dist/a2a/types/protocol.js deleted file mode 100644 index 660495d0..00000000 --- a/.claude-plugin/memesh/dist/a2a/types/protocol.js +++ /dev/null @@ -1,2 +0,0 @@ -export {}; -//# sourceMappingURL=protocol.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/types/protocol.js.map b/.claude-plugin/memesh/dist/a2a/types/protocol.js.map deleted file mode 100644 index bbd03911..00000000 --- a/.claude-plugin/memesh/dist/a2a/types/protocol.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/a2a/types/protocol.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/types/rateLimit.d.ts b/.claude-plugin/memesh/dist/a2a/types/rateLimit.d.ts deleted file mode 100644 index 86446f98..00000000 --- a/.claude-plugin/memesh/dist/a2a/types/rateLimit.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -export interface RateLimitConfig { - maxRequests: number; - windowMs: number; -} -export interface TokenBucket { - tokens: number; - maxTokens: number; - lastRefill: number; - refillRate: number; -} -export interface RateLimitError { - success: false; - error: { - code: 'RATE_LIMIT_EXCEEDED'; - message: string; - retryAfter: number; - }; -} -export interface RateLimitStats { - agentId: string; - endpoint: string; - limitExceeded: number; - totalRequests: number; - lastLimitHit?: number; -} -//# sourceMappingURL=rateLimit.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/types/rateLimit.d.ts.map b/.claude-plugin/memesh/dist/a2a/types/rateLimit.d.ts.map deleted file mode 100644 index 752300f5..00000000 --- a/.claude-plugin/memesh/dist/a2a/types/rateLimit.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"rateLimit.d.ts","sourceRoot":"","sources":["../../../src/a2a/types/rateLimit.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,eAAe;IAE9B,WAAW,EAAE,MAAM,CAAC;IAEpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAKD,MAAM,WAAW,WAAW;IAE1B,MAAM,EAAE,MAAM,CAAC;IAEf,SAAS,EAAE,MAAM,CAAC;IAElB,UAAU,EAAE,MAAM,CAAC;IAEnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAKD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE;QACL,IAAI,EAAE,qBAAqB,CAAC;QAC5B,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAKD,MAAM,WAAW,cAAc;IAE7B,OAAO,EAAE,MAAM,CAAC;IAEhB,QAAQ,EAAE,MAAM,CAAC;IAEjB,aAAa,EAAE,MAAM,CAAC;IAEtB,aAAa,EAAE,MAAM,CAAC;IAEtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/types/rateLimit.js b/.claude-plugin/memesh/dist/a2a/types/rateLimit.js deleted file mode 100644 index 82430df7..00000000 --- a/.claude-plugin/memesh/dist/a2a/types/rateLimit.js +++ /dev/null @@ -1,2 +0,0 @@ -export {}; -//# sourceMappingURL=rateLimit.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/types/rateLimit.js.map b/.claude-plugin/memesh/dist/a2a/types/rateLimit.js.map deleted file mode 100644 index e47ab958..00000000 --- a/.claude-plugin/memesh/dist/a2a/types/rateLimit.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"rateLimit.js","sourceRoot":"","sources":["../../../src/a2a/types/rateLimit.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/types/task.d.ts b/.claude-plugin/memesh/dist/a2a/types/task.d.ts deleted file mode 100644 index 9861ddb3..00000000 --- a/.claude-plugin/memesh/dist/a2a/types/task.d.ts +++ /dev/null @@ -1,76 +0,0 @@ -import type { MessagePart } from './protocol.js'; -export type TaskState = 'SUBMITTED' | 'WORKING' | 'INPUT_REQUIRED' | 'COMPLETED' | 'FAILED' | 'CANCELED' | 'REJECTED' | 'TIMEOUT'; -export type TaskPriority = 'low' | 'normal' | 'high' | 'urgent'; -export interface Task { - id: string; - state: TaskState; - createdAt: string; - updatedAt: string; - name?: string; - description?: string; - priority?: TaskPriority; - sessionId?: string; - messages: Message[]; - artifacts?: Artifact[]; - metadata?: Record; -} -export interface Message { - id: string; - taskId: string; - role: 'user' | 'assistant'; - parts: MessagePart[]; - createdAt: string; - metadata?: Record; -} -export interface Artifact { - id: string; - taskId: string; - type: string; - name?: string; - content: string | Buffer; - encoding?: 'utf-8' | 'base64'; - size?: number; - createdAt: string; - metadata?: Record; -} -export interface TaskStatus { - id: string; - state: TaskState; - name?: string; - priority?: TaskPriority; - createdAt: string; - updatedAt: string; - messageCount: number; - artifactCount: number; -} -export interface TaskFilter { - state?: TaskState | TaskState[]; - priority?: TaskPriority | TaskPriority[]; - createdAfter?: string; - createdBefore?: string; - sessionId?: string; - limit?: number; - offset?: number; -} -export interface CreateTaskParams { - name?: string; - description?: string; - priority?: TaskPriority; - sessionId?: string; - initialMessage?: { - role: 'user' | 'assistant'; - parts: MessagePart[]; - }; - metadata?: Record; -} -export interface UpdateTaskParams { - state?: TaskState; - name?: string; - description?: string; - priority?: TaskPriority; - metadata?: Record; -} -export declare const VALID_STATE_TRANSITIONS: Record; -export declare function isValidStateTransition(from: TaskState, to: TaskState): boolean; -export declare function isTerminalState(state: TaskState): boolean; -//# sourceMappingURL=task.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/types/task.d.ts.map b/.claude-plugin/memesh/dist/a2a/types/task.d.ts.map deleted file mode 100644 index 21697d5f..00000000 --- a/.claude-plugin/memesh/dist/a2a/types/task.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../../src/a2a/types/task.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/types/task.js b/.claude-plugin/memesh/dist/a2a/types/task.js deleted file mode 100644 index e19cc7a5..00000000 --- a/.claude-plugin/memesh/dist/a2a/types/task.js +++ /dev/null @@ -1,17 +0,0 @@ -export const VALID_STATE_TRANSITIONS = { - SUBMITTED: ['WORKING', 'CANCELED', 'REJECTED'], - WORKING: ['COMPLETED', 'FAILED', 'TIMEOUT', 'CANCELED', 'INPUT_REQUIRED'], - INPUT_REQUIRED: ['WORKING', 'CANCELED'], - COMPLETED: [], - FAILED: [], - TIMEOUT: [], - CANCELED: [], - REJECTED: [], -}; -export function isValidStateTransition(from, to) { - return VALID_STATE_TRANSITIONS[from]?.includes(to) ?? false; -} -export function isTerminalState(state) { - return VALID_STATE_TRANSITIONS[state].length === 0; -} -//# sourceMappingURL=task.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/a2a/types/task.js.map b/.claude-plugin/memesh/dist/a2a/types/task.js.map deleted file mode 100644 index 131041d7..00000000 --- a/.claude-plugin/memesh/dist/a2a/types/task.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"task.js","sourceRoot":"","sources":["../../../src/a2a/types/task.ts"],"names":[],"mappings":"AA8HA,MAAM,CAAC,MAAM,uBAAuB,GAAmC;IACrE,SAAS,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC;IAC9C,OAAO,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,gBAAgB,CAAC;IACzE,cAAc,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;IACvC,SAAS,EAAE,EAAE;IACb,MAAM,EAAE,EAAE;IACV,OAAO,EAAE,EAAE;IACX,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE,EAAE;CACb,CAAC;AAcF,MAAM,UAAU,sBAAsB,CAAC,IAAe,EAAE,EAAa;IACnE,OAAO,uBAAuB,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC;AAC9D,CAAC;AAYD,MAAM,UAAU,eAAe,CAAC,KAAgB;IAC9C,OAAO,uBAAuB,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AACrD,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/hooks/a2a-collaboration.d.ts b/.claude-plugin/memesh/dist/hooks/a2a-collaboration.d.ts deleted file mode 100644 index 82b99ef8..00000000 --- a/.claude-plugin/memesh/dist/hooks/a2a-collaboration.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -export interface AgentIdentity { - name: string; - agentId: string; - specialization: string; - sessionStart: string; - status: 'ONLINE' | 'OFFLINE'; - updatedAt?: string; -} -export interface A2ATask { - id: string; - description: string; - state: 'SUBMITTED' | 'IN_PROGRESS' | 'COMPLETED' | 'FAILED'; - createdAt: string; - senderId: string; -} -export interface TaskCompletionReport { - taskId: string; - status: 'COMPLETED' | 'FAILED'; - result: string; - completedAt: string; -} -export declare function agentCheckIn(): AgentIdentity; -export declare function checkPendingTasks(agentId?: string): A2ATask[]; -export declare function getLatestCommitHash(): string | null; -export declare function getLatestCommitMessage(): string | null; -export declare function formatTaskCompletionReport(taskId: string, commitHash: string, commitMessage: string): TaskCompletionReport; -export declare function initA2ACollaboration(): AgentIdentity; -export declare function updateSpecialization(newSpecialization: string): AgentIdentity | null; -export declare function getCurrentIdentity(): AgentIdentity | null; -//# sourceMappingURL=a2a-collaboration.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/hooks/a2a-collaboration.d.ts.map b/.claude-plugin/memesh/dist/hooks/a2a-collaboration.d.ts.map deleted file mode 100644 index 991f5788..00000000 --- a/.claude-plugin/memesh/dist/hooks/a2a-collaboration.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"a2a-collaboration.d.ts","sourceRoot":"","sources":["../../src/hooks/a2a-collaboration.ts"],"names":[],"mappings":"AA2DA,MAAM,WAAW,aAAa;IAE5B,IAAI,EAAE,MAAM,CAAC;IAEb,OAAO,EAAE,MAAM,CAAC;IAEhB,cAAc,EAAE,MAAM,CAAC;IAEvB,YAAY,EAAE,MAAM,CAAC;IAErB,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;IAE7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAKD,MAAM,WAAW,OAAO;IAEtB,EAAE,EAAE,MAAM,CAAC;IAEX,WAAW,EAAE,MAAM,CAAC;IAEpB,KAAK,EAAE,WAAW,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ,CAAC;IAE5D,SAAS,EAAE,MAAM,CAAC;IAElB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAKD,MAAM,WAAW,oBAAoB;IAEnC,MAAM,EAAE,MAAM,CAAC;IAEf,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IAE/B,MAAM,EAAE,MAAM,CAAC;IAEf,WAAW,EAAE,MAAM,CAAC;CACrB;AA6XD,wBAAgB,YAAY,IAAI,aAAa,CAwB5C;AAYD,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,EAAE,CAiE7D;AAMD,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAUnD;AAED,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAUtD;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GACpB,oBAAoB,CAOtB;AA6ED,wBAAgB,oBAAoB,IAAI,aAAa,CAkBpD;AAED,wBAAgB,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAkBpF;AAED,wBAAgB,kBAAkB,IAAI,aAAa,GAAG,IAAI,CAEzD"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/hooks/a2a-collaboration.js b/.claude-plugin/memesh/dist/hooks/a2a-collaboration.js deleted file mode 100644 index 9d20bbb4..00000000 --- a/.claude-plugin/memesh/dist/hooks/a2a-collaboration.js +++ /dev/null @@ -1,400 +0,0 @@ -import fs from 'fs'; -import path from 'path'; -import os from 'os'; -import { execFileSync } from 'child_process'; -import { expandHome } from '../utils/paths.js'; -const CCB_DATA_DIR = expandHome('~/.claude-code-buddy'); -const KG_DB_PATH = path.join(CCB_DATA_DIR, 'knowledge-graph.db'); -const AGENT_REGISTRY_PATH = path.join(CCB_DATA_DIR, 'a2a-registry.db'); -const STATE_DIR = expandHome('~/.claude/state'); -const AGENT_IDENTITY_FILE = path.join(STATE_DIR, 'agent-identity.json'); -const NAME_POOL = [ - 'Alpha', - 'Beta', - 'Gamma', - 'Delta', - 'Epsilon', - 'Zeta', - 'Eta', - 'Theta', - 'Iota', - 'Kappa', - 'Lambda', - 'Mu', - 'Nu', - 'Xi', - 'Omicron', - 'Pi', - 'Rho', - 'Sigma', - 'Tau', - 'Upsilon', -]; -function sqliteQuery(dbPath, query, params) { - const result = sqliteQueryWithStatus(dbPath, query, params); - return result.output; -} -function escapeSqlValue(value) { - if (value === null || value === undefined) { - return 'NULL'; - } - if (typeof value === 'number') { - if (!Number.isFinite(value)) { - return 'NULL'; - } - return String(value); - } - if (typeof value === 'boolean') { - return value ? '1' : '0'; - } - const strValue = String(value); - if (strValue.includes('\x00')) { - throw new Error('SQL parameter contains null byte - potential injection attack'); - } - const escaped = strValue.replace(/'/g, "''"); - return `'${escaped}'`; -} -function sqliteQueryWithStatus(dbPath, query, params) { - try { - const args = ['-separator', '|', dbPath]; - let finalQuery = query; - if (params && params.length > 0) { - const escapedParams = params.map(escapeSqlValue); - let paramIndex = 0; - finalQuery = query.replace(/\?/g, () => { - if (paramIndex < escapedParams.length) { - return escapedParams[paramIndex++]; - } - return '?'; - }); - } - const result = execFileSync('sqlite3', [...args, finalQuery], { - encoding: 'utf-8', - timeout: 5000, - }); - return { - output: result.trim(), - success: true, - }; - } - catch (e) { - const error = e instanceof Error ? e.message : String(e); - return { - output: '', - success: false, - error, - }; - } -} -function readJSON(filePath, defaultValue = null) { - try { - if (fs.existsSync(filePath)) { - const content = fs.readFileSync(filePath, 'utf-8'); - return JSON.parse(content); - } - } - catch { - } - return defaultValue; -} -function writeJSON(filePath, data) { - try { - const dir = path.dirname(filePath); - if (!fs.existsSync(dir)) { - fs.mkdirSync(dir, { recursive: true }); - } - fs.writeFileSync(filePath, JSON.stringify(data, null, 2)); - return true; - } - catch { - return false; - } -} -function _getUsedNames() { - if (!fs.existsSync(KG_DB_PATH)) - return []; - const query = "SELECT name FROM entities WHERE type='session_identity' AND name LIKE 'Online Agent:%'"; - const result = sqliteQuery(KG_DB_PATH, query); - if (!result) - return []; - return result - .split('\n') - .map((line) => line.replace('Online Agent: ', '').replace(/ \(.*\)$/, '').trim()) - .filter(Boolean); -} -function getOnlineAgents() { - if (!fs.existsSync(AGENT_REGISTRY_PATH)) - return []; - const query = "SELECT agent_id FROM agents WHERE status='active' ORDER BY last_heartbeat DESC LIMIT 10"; - const result = sqliteQuery(AGENT_REGISTRY_PATH, query); - return result ? result.split('\n').filter(Boolean) : []; -} -function generateUniqueFallbackName() { - const timestamp = Date.now().toString(36); - const random = Math.random().toString(36).substring(2, 6); - return `Agent-${timestamp}-${random}`; -} -function tryClaimName(entityName, now) { - const atomicInsertQuery = ` - INSERT INTO entities (name, type, created_at) - SELECT ?, 'session_identity', ? - WHERE NOT EXISTS (SELECT 1 FROM entities WHERE name = ?); - SELECT changes(); - `; - const result = sqliteQueryWithStatus(KG_DB_PATH, atomicInsertQuery, [entityName, now, entityName]); - if (!result.success) { - return false; - } - const changesCount = parseInt(result.output, 10); - return changesCount === 1; -} -function pickAvailableName() { - if (!fs.existsSync(KG_DB_PATH)) { - return NAME_POOL[0]; - } - const now = new Date().toISOString(); - for (const name of NAME_POOL) { - const entityName = `Online Agent: ${name}`; - if (tryClaimName(entityName, now)) { - return name; - } - } - for (let attempt = 0; attempt < 10; attempt++) { - const fallbackName = generateUniqueFallbackName(); - const entityName = `Online Agent: ${fallbackName}`; - if (tryClaimName(entityName, now)) { - return fallbackName; - } - } - const ultimateFallback = `Agent-${Date.now().toString(36)}-${process.pid}`; - const entityName = `Online Agent: ${ultimateFallback}`; - tryClaimName(entityName, now); - return ultimateFallback; -} -function generateAgentId() { - const hostname = os.hostname().toLowerCase().replace(/[^a-z0-9]/g, '-'); - const timestamp = Date.now().toString(36); - return `${hostname}-${timestamp}`; -} -function registerToKnowledgeGraph(identity) { - if (!fs.existsSync(KG_DB_PATH)) - return false; - const entityName = `Online Agent: ${identity.name}`; - const now = new Date().toISOString(); - try { - sqliteQuery(KG_DB_PATH, 'INSERT OR IGNORE INTO entities (name, type, created_at) VALUES (?, ?, ?)', [entityName, 'session_identity', now]); - const entityId = sqliteQuery(KG_DB_PATH, 'SELECT id FROM entities WHERE name = ?', [ - entityName, - ]); - if (entityId && /^\d+$/.test(entityId)) { - const observations = [ - `Agent ID: ${identity.agentId}`, - `Name: ${identity.name}`, - `Status: ONLINE`, - `Specialization: ${identity.specialization}`, - `Checked in: ${now}`, - ]; - for (const obs of observations) { - sqliteQuery(KG_DB_PATH, 'INSERT INTO observations (entity_id, content, created_at) VALUES (?, ?, ?)', [entityId, obs, now]); - } - } - return true; - } - catch { - return false; - } -} -function loadIdentity() { - return readJSON(AGENT_IDENTITY_FILE); -} -function saveIdentity(identity) { - return writeJSON(AGENT_IDENTITY_FILE, identity); -} -export function agentCheckIn() { - const existingIdentity = loadIdentity(); - if (existingIdentity?.sessionStart) { - const sessionAge = Date.now() - new Date(existingIdentity.sessionStart).getTime(); - if (sessionAge < 60 * 60 * 1000) { - return existingIdentity; - } - } - const name = pickAvailableName(); - const agentId = generateAgentId(); - const identity = { - name, - agentId, - specialization: 'General (awaiting assignment)', - sessionStart: new Date().toISOString(), - status: 'ONLINE', - }; - saveIdentity(identity); - registerToKnowledgeGraph(identity); - return identity; -} -export function checkPendingTasks(agentId) { - const taskDbPath = path.join(CCB_DATA_DIR, 'a2a-tasks.db'); - if (!fs.existsSync(taskDbPath)) - return []; - const baseQuery = 'SELECT id, description, state, created_at as createdAt, sender_id as senderId FROM tasks WHERE state=\'SUBMITTED\''; - const query = agentId - ? `${baseQuery} AND assigned_agent_id=${escapeSqlValue(agentId)} ORDER BY created_at DESC LIMIT 10` - : `${baseQuery} ORDER BY created_at DESC LIMIT 10`; - try { - const result = execFileSync('sqlite3', ['-json', taskDbPath, query], { encoding: 'utf-8', timeout: 5000 }); - if (!result.trim()) - return []; - const parsed = JSON.parse(result); - return parsed.map((row) => ({ - id: String(row.id), - description: row.description || '', - state: row.state, - createdAt: row.createdAt || '', - senderId: row.senderId || '', - })); - } - catch { - const fallbackQuery = "SELECT id, description, state, created_at, sender_id FROM tasks WHERE state='SUBMITTED' ORDER BY created_at DESC LIMIT 10"; - const result = sqliteQuery(taskDbPath, fallbackQuery); - if (!result) - return []; - return result - .split('\n') - .filter(Boolean) - .map((line) => { - const parts = line.split('|'); - const id = parts[0] || ''; - const senderId = parts[parts.length - 1] || ''; - const createdAt = parts[parts.length - 2] || ''; - const state = parts[parts.length - 3] || ''; - const description = parts.slice(1, -3).join('|'); - return { - id, - description, - state: state, - createdAt, - senderId, - }; - }); - } -} -export function getLatestCommitHash() { - try { - const result = execFileSync('git', ['rev-parse', '--short', 'HEAD'], { - encoding: 'utf-8', - timeout: 5000, - }); - return result.trim(); - } - catch { - return null; - } -} -export function getLatestCommitMessage() { - try { - const result = execFileSync('git', ['log', '-1', '--pretty=%s'], { - encoding: 'utf-8', - timeout: 5000, - }); - return result.trim(); - } - catch { - return null; - } -} -export function formatTaskCompletionReport(taskId, commitHash, commitMessage) { - return { - taskId, - status: 'COMPLETED', - result: `Task completed!\nCommit: ${commitHash}\nMessage: ${commitMessage}`, - completedAt: new Date().toISOString(), - }; -} -function displayCheckInBroadcast(identity, onlineAgents, pendingTasks) { - console.log(''); - console.log('='.repeat(60)); - console.log(' A2A Collaboration System'); - console.log('='.repeat(60)); - console.log(''); - console.log(` BROADCAST: ${identity.name} is now online!`); - console.log(''); - console.log(` Name: ${identity.name}`); - console.log(` Agent ID: ${identity.agentId}`); - console.log(` Specialization: ${identity.specialization}`); - console.log(` Checked in: ${new Date().toLocaleString()}`); - console.log(''); - const otherAgents = onlineAgents.filter((a) => a !== identity.agentId); - if (otherAgents.length > 0) { - console.log(' Other online agents:'); - otherAgents.slice(0, 5).forEach((agent) => { - console.log(` - ${agent}`); - }); - console.log(''); - } - if (pendingTasks.length > 0) { - console.log(' Pending tasks for you:'); - pendingTasks.slice(0, 3).forEach((task, i) => { - console.log(` ${i + 1}. [${task.state}] ${task.description?.slice(0, 50)}...`); - console.log(` From: ${task.senderId} | ID: ${task.id}`); - }); - console.log(''); - console.log(' Use a2a-list-tasks to see all tasks'); - console.log(''); - } - console.log(' Available A2A Actions:'); - console.log(''); - console.log(' Assign specialization:'); - console.log(` "${identity.name}, you handle frontend" or "${identity.name}, you handle backend API"`); - console.log(''); - console.log(' Send task to another agent:'); - console.log(' a2a-send-task targetAgentId="" taskDescription="..."'); - console.log(''); - console.log(' Check your tasks:'); - console.log(' a2a-list-tasks'); - console.log(''); - console.log(' Report task completion:'); - console.log(' a2a-report-result taskId="" result="Done! Commit: xxx" success=true'); - console.log(''); - console.log('='.repeat(60)); - console.log(''); -} -function displayAlreadyCheckedIn(identity) { - console.log(''); - console.log(` Already checked in as ${identity.name}`); - console.log(` Specialization: ${identity.specialization}`); - console.log(''); -} -export function initA2ACollaboration() { - const existingIdentity = loadIdentity(); - if (existingIdentity?.sessionStart) { - const sessionAge = Date.now() - new Date(existingIdentity.sessionStart).getTime(); - if (sessionAge < 60 * 60 * 1000) { - displayAlreadyCheckedIn(existingIdentity); - return existingIdentity; - } - } - const identity = agentCheckIn(); - const onlineAgents = getOnlineAgents(); - const pendingTasks = checkPendingTasks(identity.agentId); - displayCheckInBroadcast(identity, onlineAgents, pendingTasks); - return identity; -} -export function updateSpecialization(newSpecialization) { - const identity = loadIdentity(); - if (!identity) { - console.log(' No identity found. Please check in first.'); - return null; - } - identity.specialization = newSpecialization; - identity.updatedAt = new Date().toISOString(); - saveIdentity(identity); - console.log(''); - console.log(` Specialization updated!`); - console.log(` Name: ${identity.name}`); - console.log(` New Specialization: ${newSpecialization}`); - console.log(''); - return identity; -} -export function getCurrentIdentity() { - return loadIdentity(); -} -//# sourceMappingURL=a2a-collaboration.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/hooks/a2a-collaboration.js.map b/.claude-plugin/memesh/dist/hooks/a2a-collaboration.js.map deleted file mode 100644 index 4a3de227..00000000 --- a/.claude-plugin/memesh/dist/hooks/a2a-collaboration.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"a2a-collaboration.js","sourceRoot":"","sources":["../../src/hooks/a2a-collaboration.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/handlers/A2AToolHandlers.d.ts b/.claude-plugin/memesh/dist/mcp/handlers/A2AToolHandlers.d.ts deleted file mode 100644 index bce4bdd8..00000000 --- a/.claude-plugin/memesh/dist/mcp/handlers/A2AToolHandlers.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { CallToolResult } from '@modelcontextprotocol/sdk/types.js'; -import { A2AClient } from '../../a2a/client/A2AClient.js'; -import { AgentRegistry } from '../../a2a/storage/AgentRegistry.js'; -export declare class A2AToolHandlers { - private client; - private registry; - constructor(client?: A2AClient, registry?: AgentRegistry); - handleA2ASendTask(args: unknown): Promise; - handleA2AGetTask(args: unknown): Promise; - handleA2AGetResult(args: unknown): Promise; - handleA2AListTasks(args: unknown): Promise; - handleA2AListAgents(args: unknown): Promise; - handleA2AReportResult(args: unknown): Promise; - private formatErrorWithTips; - private formatTaskSentResponse; - private formatTaskDetailsResponse; - private formatTaskListResponse; - private formatAgentListResponse; - private formatTaskResultResponse; - private formatReportResultResponse; -} -//# sourceMappingURL=A2AToolHandlers.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/handlers/A2AToolHandlers.d.ts.map b/.claude-plugin/memesh/dist/mcp/handlers/A2AToolHandlers.d.ts.map deleted file mode 100644 index ad939e63..00000000 --- a/.claude-plugin/memesh/dist/mcp/handlers/A2AToolHandlers.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"A2AToolHandlers.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers/A2AToolHandlers.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAiCnE,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,QAAQ,CAAgB;gBAEpB,MAAM,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,aAAa;IASlD,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAwDzD,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IA2CxD,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IA2C1D,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IA+C1D,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAiD3D,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAkEnE,OAAO,CAAC,mBAAmB;IAc3B,OAAO,CAAC,sBAAsB;IAiB9B,OAAO,CAAC,yBAAyB;IAuCjC,OAAO,CAAC,sBAAsB;IA2B9B,OAAO,CAAC,uBAAuB;IA2B/B,OAAO,CAAC,wBAAwB;IAwChC,OAAO,CAAC,0BAA0B;CA8BnC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/handlers/A2AToolHandlers.js b/.claude-plugin/memesh/dist/mcp/handlers/A2AToolHandlers.js deleted file mode 100644 index 4f94c267..00000000 --- a/.claude-plugin/memesh/dist/mcp/handlers/A2AToolHandlers.js +++ /dev/null @@ -1,325 +0,0 @@ -import { ValidationError } from '../../errors/index.js'; -import { A2AClient } from '../../a2a/client/A2AClient.js'; -import { AgentRegistry } from '../../a2a/storage/AgentRegistry.js'; -import { A2ASendTaskInputSchema, A2AGetTaskInputSchema, A2AGetResultInputSchema, A2AListTasksInputSchema, A2AListAgentsInputSchema, A2AReportResultInputSchema, formatValidationError, } from '../validation.js'; -const SELF_AGENT_ID = 'self'; -export class A2AToolHandlers { - client; - registry; - constructor(client, registry) { - this.client = client || new A2AClient(); - this.registry = registry || AgentRegistry.getInstance(); - } - async handleA2ASendTask(args) { - const parseResult = A2ASendTaskInputSchema.safeParse(args); - if (!parseResult.success) { - throw new ValidationError(formatValidationError(parseResult.error), { - component: 'A2AToolHandlers', - method: 'handleA2ASendTask', - providedArgs: args, - }); - } - const input = parseResult.data; - try { - const sendResponse = await this.client.sendMessage(input.targetAgentId, { - message: { - role: 'user', - parts: [ - { - type: 'text', - text: input.taskDescription, - }, - ], - }, - }); - const task = await this.client.getTask(input.targetAgentId, sendResponse.taskId); - return { - content: [ - { - type: 'text', - text: this.formatTaskSentResponse(input.targetAgentId, task), - }, - ], - }; - } - catch (error) { - throw this.formatErrorWithTips(`send task to agent ${input.targetAgentId}`, error, [ - "Verify the agent ID is correct using 'a2a-list-agents' tool", - 'Check if the target agent is running and accessible', - 'Ensure MEMESH_A2A_TOKEN is configured in .env file', - ]); - } - } - async handleA2AGetTask(args) { - const parseResult = A2AGetTaskInputSchema.safeParse(args); - if (!parseResult.success) { - throw new ValidationError(formatValidationError(parseResult.error), { - component: 'A2AToolHandlers', - method: 'handleA2AGetTask', - providedArgs: args, - }); - } - const input = parseResult.data; - try { - const task = await this.client.getTask(input.targetAgentId, input.taskId); - return { - content: [ - { - type: 'text', - text: this.formatTaskDetailsResponse(task), - }, - ], - }; - } - catch (error) { - throw this.formatErrorWithTips(`get task ${input.taskId} from agent ${input.targetAgentId}`, error, [ - "Verify the task ID exists using 'a2a-list-tasks' tool", - 'Check if the target agent is running and responding', - 'Confirm you have permission to access this task', - ]); - } - } - async handleA2AGetResult(args) { - const parseResult = A2AGetResultInputSchema.safeParse(args); - if (!parseResult.success) { - throw new ValidationError(formatValidationError(parseResult.error), { - component: 'A2AToolHandlers', - method: 'handleA2AGetResult', - providedArgs: args, - }); - } - const input = parseResult.data; - try { - const result = await this.client.getTaskResult(input.targetAgentId, input.taskId); - return { - content: [ - { - type: 'text', - text: this.formatTaskResultResponse(result), - }, - ], - }; - } - catch (error) { - throw this.formatErrorWithTips(`get result for task ${input.taskId} from agent ${input.targetAgentId}`, error, [ - 'Verify the task has been executed and completed', - 'Check if the target agent is running and responding', - "Use 'a2a-get-task' to check task state first", - ]); - } - } - async handleA2AListTasks(args) { - const parseResult = A2AListTasksInputSchema.safeParse(args); - if (!parseResult.success) { - throw new ValidationError(formatValidationError(parseResult.error), { - component: 'A2AToolHandlers', - method: 'handleA2AListTasks', - providedArgs: args, - }); - } - const input = parseResult.data; - try { - const tasks = await this.client.listTasks(SELF_AGENT_ID, { - status: input.state, - limit: input.limit, - offset: input.offset, - }); - return { - content: [ - { - type: 'text', - text: this.formatTaskListResponse(tasks), - }, - ], - }; - } - catch (error) { - throw this.formatErrorWithTips('list tasks', error, [ - 'Verify A2A server is running', - 'Check MEMESH_A2A_TOKEN configuration in .env', - 'Ensure network connectivity to A2A server', - ]); - } - } - async handleA2AListAgents(args) { - const parseResult = A2AListAgentsInputSchema.safeParse(args); - if (!parseResult.success) { - throw new ValidationError(formatValidationError(parseResult.error), { - component: 'A2AToolHandlers', - method: 'handleA2AListAgents', - providedArgs: args, - }); - } - const input = parseResult.data; - try { - const agents = this.registry.listActive(); - const filteredAgents = input.status && input.status !== 'all' - ? agents.filter((agent) => agent.status === input.status) - : agents; - return { - content: [ - { - type: 'text', - text: this.formatAgentListResponse(filteredAgents), - }, - ], - }; - } - catch (error) { - throw this.formatErrorWithTips('list agents', error, [ - 'Check if agent registry is initialized', - 'Verify A2A protocol is enabled', - 'Try restarting the MCP server', - ]); - } - } - async handleA2AReportResult(args) { - const parseResult = A2AReportResultInputSchema.safeParse(args); - if (!parseResult.success) { - throw new ValidationError(formatValidationError(parseResult.error), { - component: 'A2AToolHandlers', - method: 'handleA2AReportResult', - providedArgs: args, - }); - } - const input = parseResult.data; - try { - const newState = input.success ? 'COMPLETED' : 'FAILED'; - await this.client.updateTaskState(input.taskId, newState, { - result: input.success ? input.result : undefined, - error: input.success ? undefined : input.error, - }); - return { - content: [ - { - type: 'text', - text: this.formatReportResultResponse(input), - }, - ], - }; - } - catch (error) { - throw this.formatErrorWithTips(`report result for task ${input.taskId}`, error, [ - 'Verify the task exists', - 'Check if you have permission to update this task', - 'Ensure the task is in a valid state for updates', - ]); - } - } - formatErrorWithTips(operation, error, tips) { - const errorMsg = error instanceof Error ? error.message : String(error); - const tipsSection = tips.map(tip => ` - ${tip}`).join('\n'); - return new Error(`Failed to ${operation}: ${errorMsg}\n\n` + - `💡 Troubleshooting tips:\n` + - tipsSection); - } - formatTaskSentResponse(targetAgentId, task) { - return [ - `✅ Task sent to agent: ${targetAgentId}`, - ``, - `Task ID: ${task.id}`, - `State: ${task.state}`, - `Name: ${task.name || 'N/A'}`, - `Priority: ${task.priority || 'N/A'}`, - `Created: ${task.createdAt}`, - ``, - `Use 'a2a-get-task' to check task status.`, - ].join('\n'); - } - formatTaskDetailsResponse(task) { - const lines = [ - `📋 Task Details`, - ``, - `Task ID: ${task.id}`, - `State: ${task.state}`, - `Name: ${task.name || 'N/A'}`, - `Description: ${task.description || 'N/A'}`, - `Priority: ${task.priority || 'N/A'}`, - `Created: ${task.createdAt}`, - `Updated: ${task.updatedAt}`, - ``, - `Messages: ${task.messages.length}`, - `Artifacts: ${task.artifacts?.length || 0}`, - ]; - if (task.sessionId) { - lines.push(`Session ID: ${task.sessionId}`); - } - if (task.messages.length > 0) { - const latestMessage = task.messages[task.messages.length - 1]; - lines.push(``); - lines.push(`Latest Message (${latestMessage.role}):`); - latestMessage.parts.forEach((part) => { - if (part.type === 'text') { - lines.push(` ${part.text}`); - } - }); - } - return lines.join('\n'); - } - formatTaskListResponse(tasks) { - if (tasks.length === 0) { - return '📋 No tasks found.'; - } - const lines = [ - `📋 Own Tasks (${tasks.length} total)`, - ``, - ]; - tasks.forEach((task, index) => { - lines.push(`${index + 1}. [${task.state}] ${task.id}`, ` Name: ${task.name || 'N/A'}`, ` Priority: ${task.priority || 'N/A'}`, ` Messages: ${task.messageCount} | Artifacts: ${task.artifactCount}`, ` Created: ${task.createdAt}`, ``); - }); - return lines.join('\n'); - } - formatAgentListResponse(agents) { - if (agents.length === 0) { - return '🤖 No agents available.'; - } - const lines = [ - `🤖 Available A2A Agents (${agents.length} total)`, - ``, - ]; - agents.forEach((agent, index) => { - lines.push(`${index + 1}. ${agent.agentId}`, ` URL: ${agent.baseUrl}`, ` Port: ${agent.port}`, ` Status: ${agent.status}`, ` Last Heartbeat: ${agent.lastHeartbeat}`, ``); - }); - return lines.join('\n'); - } - formatTaskResultResponse(result) { - const lines = []; - if (result.success) { - lines.push(`✅ Task Execution Result`, ``); - } - else { - lines.push(`❌ Task Execution Failed`, ``); - } - lines.push(`Task ID: ${result.taskId}`, `State: ${result.state}`, `Success: ${result.success}`, `Executed At: ${result.executedAt}`, `Executed By: ${result.executedBy}`); - if (result.durationMs !== undefined) { - lines.push(`Duration: ${result.durationMs} ms`); - } - lines.push(``); - if (result.success && result.result) { - lines.push(`📦 Result:`, '```json', JSON.stringify(result.result, null, 2), '```'); - } - else if (result.error) { - lines.push(`❌ Error: ${result.error}`); - } - return lines.join('\n'); - } - formatReportResultResponse(input) { - const lines = []; - if (input.success) { - lines.push(`✅ Task result reported successfully`, ``); - } - else { - lines.push(`✅ Task failure reported successfully`, ``); - } - lines.push(`Task ID: ${input.taskId}`, `Status: ${input.success ? 'COMPLETED' : 'FAILED'}`, `Success: ${input.success}`); - lines.push(``); - if (input.success && input.result) { - lines.push(`📦 Result:`, '```json', JSON.stringify(input.result, null, 2), '```'); - } - else if (input.error) { - lines.push(`❌ Error: ${input.error}`); - } - return lines.join('\n'); - } -} -//# sourceMappingURL=A2AToolHandlers.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/handlers/A2AToolHandlers.js.map b/.claude-plugin/memesh/dist/mcp/handlers/A2AToolHandlers.js.map deleted file mode 100644 index 22a1d2e5..00000000 --- a/.claude-plugin/memesh/dist/mcp/handlers/A2AToolHandlers.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"A2AToolHandlers.js","sourceRoot":"","sources":["../../../src/mcp/handlers/A2AToolHandlers.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/tools/a2a-list-tasks.d.ts b/.claude-plugin/memesh/dist/mcp/tools/a2a-list-tasks.d.ts deleted file mode 100644 index e8b45b6c..00000000 --- a/.claude-plugin/memesh/dist/mcp/tools/a2a-list-tasks.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { z } from 'zod'; -import type { MCPTaskDelegator } from '../../a2a/delegator/MCPTaskDelegator.js'; -export declare const A2AListTasksInputSchema: z.ZodObject<{ - agentId: z.ZodDefault>; -}, z.core.$strip>; -export type ValidatedA2AListTasksInput = z.infer; -export declare function a2aListTasks(input: ValidatedA2AListTasksInput, delegator: MCPTaskDelegator): Promise<{ - content: Array<{ - type: 'text'; - text: string; - }>; -}>; -//# sourceMappingURL=a2a-list-tasks.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/tools/a2a-list-tasks.d.ts.map b/.claude-plugin/memesh/dist/mcp/tools/a2a-list-tasks.d.ts.map deleted file mode 100644 index 7cd34da3..00000000 --- a/.claude-plugin/memesh/dist/mcp/tools/a2a-list-tasks.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"a2a-list-tasks.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/a2a-list-tasks.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAUhF,eAAO,MAAM,uBAAuB;;iBASlC,CAAC;AAEH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAYjF,wBAAsB,YAAY,CAChC,KAAK,EAAE,0BAA0B,EACjC,SAAS,EAAE,gBAAgB,GAC1B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAc7D"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/tools/a2a-list-tasks.js b/.claude-plugin/memesh/dist/mcp/tools/a2a-list-tasks.js deleted file mode 100644 index 30160daa..00000000 --- a/.claude-plugin/memesh/dist/mcp/tools/a2a-list-tasks.js +++ /dev/null @@ -1,26 +0,0 @@ -import { z } from 'zod'; -const AGENT_ID_PATTERN = /^[a-zA-Z0-9_-]+$/; -const MAX_AGENT_ID_LENGTH = 100; -export const A2AListTasksInputSchema = z.object({ - agentId: z - .string() - .min(1, 'Agent ID cannot be empty') - .max(MAX_AGENT_ID_LENGTH, `Agent ID too long (max ${MAX_AGENT_ID_LENGTH} characters)`) - .regex(AGENT_ID_PATTERN, 'Agent ID must contain only alphanumeric characters, hyphens, and underscores') - .optional() - .default('self') - .describe('Agent ID to list pending tasks for (default: "self")'), -}); -export async function a2aListTasks(input, delegator) { - const { agentId } = input; - const tasks = await delegator.getPendingTasks(agentId); - return { - content: [ - { - type: 'text', - text: JSON.stringify(tasks, null, 2), - }, - ], - }; -} -//# sourceMappingURL=a2a-list-tasks.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/tools/a2a-list-tasks.js.map b/.claude-plugin/memesh/dist/mcp/tools/a2a-list-tasks.js.map deleted file mode 100644 index 837be5f5..00000000 --- a/.claude-plugin/memesh/dist/mcp/tools/a2a-list-tasks.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"a2a-list-tasks.js","sourceRoot":"","sources":["../../../src/mcp/tools/a2a-list-tasks.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;AAC5C,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,0BAA0B,CAAC;SAClC,GAAG,CAAC,mBAAmB,EAAE,0BAA0B,mBAAmB,cAAc,CAAC;SACrF,KAAK,CAAC,gBAAgB,EAAE,8EAA8E,CAAC;SACvG,QAAQ,EAAE;SACV,OAAO,CAAC,MAAM,CAAC;SACf,QAAQ,CAAC,sDAAsD,CAAC;CACpE,CAAC,CAAC;AAcH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,KAAiC,EACjC,SAA2B;IAE3B,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAG1B,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAEvD,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;aACrC;SACF;KACF,CAAC;AACJ,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/tools/a2a-report-result.d.ts b/.claude-plugin/memesh/dist/mcp/tools/a2a-report-result.d.ts deleted file mode 100644 index 81afdf31..00000000 --- a/.claude-plugin/memesh/dist/mcp/tools/a2a-report-result.d.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { z } from 'zod'; -import { CallToolResult } from '@modelcontextprotocol/sdk/types.js'; -import type { TaskQueue } from '../../a2a/storage/TaskQueue.js'; -import type { MCPTaskDelegator } from '../../a2a/delegator/MCPTaskDelegator.js'; -export declare const A2AReportResultInputSchema: z.ZodObject<{ - taskId: z.ZodString; - result: z.ZodString; - success: z.ZodBoolean; - error: z.ZodOptional; -}, z.core.$strip>; -export type ValidatedA2AReportResultInput = z.infer; -export declare const a2aReportResultSchema: { - readonly type: "object"; - readonly properties: { - readonly taskId: { - readonly type: "string"; - readonly description: "Task ID to report result for"; - }; - readonly result: { - readonly type: "string"; - readonly description: "Execution output or result"; - }; - readonly success: { - readonly type: "boolean"; - readonly description: "Whether execution succeeded (true) or failed (false)"; - }; - readonly error: { - readonly type: "string"; - readonly description: "Error message if success=false (optional)"; - }; - }; - readonly required: readonly ["taskId", "result", "success"]; -}; -export declare function a2aReportResult(input: ValidatedA2AReportResultInput, taskQueue: TaskQueue, delegator: MCPTaskDelegator): Promise; -//# sourceMappingURL=a2a-report-result.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/tools/a2a-report-result.d.ts.map b/.claude-plugin/memesh/dist/mcp/tools/a2a-report-result.d.ts.map deleted file mode 100644 index b31e9e61..00000000 --- a/.claude-plugin/memesh/dist/mcp/tools/a2a-report-result.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"a2a-report-result.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/a2a-report-result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAgBhF,eAAO,MAAM,0BAA0B;;;;;iBAmBrC,CAAC;AAEH,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAMvF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;CAqBxB,CAAC;AAEX,wBAAsB,eAAe,CACnC,KAAK,EAAE,6BAA6B,EACpC,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,gBAAgB,GAC1B,OAAO,CAAC,cAAc,CAAC,CA+BzB"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/tools/a2a-report-result.js b/.claude-plugin/memesh/dist/mcp/tools/a2a-report-result.js deleted file mode 100644 index ed33e67c..00000000 --- a/.claude-plugin/memesh/dist/mcp/tools/a2a-report-result.js +++ /dev/null @@ -1,73 +0,0 @@ -import { z } from 'zod'; -import { logger } from '../../utils/logger.js'; -const TASK_ID_PATTERN = /^[a-zA-Z0-9_-]+$/; -const MAX_TASK_ID_LENGTH = 100; -const MAX_RESULT_LENGTH = 100000; -const MAX_ERROR_LENGTH = 10000; -export const A2AReportResultInputSchema = z.object({ - taskId: z - .string() - .min(1, 'Task ID cannot be empty') - .max(MAX_TASK_ID_LENGTH, `Task ID too long (max ${MAX_TASK_ID_LENGTH} characters)`) - .regex(TASK_ID_PATTERN, 'Task ID must contain only alphanumeric characters, hyphens, and underscores') - .describe('Task ID to report result for'), - result: z - .string() - .max(MAX_RESULT_LENGTH, `Result too long (max ${MAX_RESULT_LENGTH} characters)`) - .describe('Execution output or result'), - success: z - .boolean() - .describe('Whether execution succeeded (true) or failed (false)'), - error: z - .string() - .max(MAX_ERROR_LENGTH, `Error message too long (max ${MAX_ERROR_LENGTH} characters)`) - .optional() - .describe('Error message if success=false (optional)'), -}); -export const a2aReportResultSchema = { - type: 'object', - properties: { - taskId: { - type: 'string', - description: 'Task ID to report result for' - }, - result: { - type: 'string', - description: 'Execution output or result' - }, - success: { - type: 'boolean', - description: 'Whether execution succeeded (true) or failed (false)' - }, - error: { - type: 'string', - description: 'Error message if success=false (optional)' - } - }, - required: ['taskId', 'result', 'success'] -}; -export async function a2aReportResult(input, taskQueue, delegator) { - const { taskId, result, success, error } = input; - const status = success ? 'COMPLETED' : 'FAILED'; - taskQueue.updateTaskStatus(taskId, { - state: status, - metadata: { - result: success ? result : null, - error: success ? null : (error || 'Task execution failed'), - completedAt: Date.now() - } - }); - await delegator.removeTask(taskId); - logger.info(`Task result reported: ${taskId} (${status})`); - return { - content: [{ - type: 'text', - text: JSON.stringify({ - success: true, - taskId, - status - }, null, 2) - }] - }; -} -//# sourceMappingURL=a2a-report-result.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/tools/a2a-report-result.js.map b/.claude-plugin/memesh/dist/mcp/tools/a2a-report-result.js.map deleted file mode 100644 index 65122056..00000000 --- a/.claude-plugin/memesh/dist/mcp/tools/a2a-report-result.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"a2a-report-result.js","sourceRoot":"","sources":["../../../src/mcp/tools/a2a-report-result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAO/C,MAAM,eAAe,GAAG,kBAAkB,CAAC;AAC3C,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACjC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAK/B,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,yBAAyB,CAAC;SACjC,GAAG,CAAC,kBAAkB,EAAE,yBAAyB,kBAAkB,cAAc,CAAC;SAClF,KAAK,CAAC,eAAe,EAAE,6EAA6E,CAAC;SACrG,QAAQ,CAAC,8BAA8B,CAAC;IAC3C,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,CAAC,iBAAiB,EAAE,wBAAwB,iBAAiB,cAAc,CAAC;SAC/E,QAAQ,CAAC,4BAA4B,CAAC;IACzC,OAAO,EAAE,CAAC;SACP,OAAO,EAAE;SACT,QAAQ,CAAC,sDAAsD,CAAC;IACnE,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,gBAAgB,EAAE,+BAA+B,gBAAgB,cAAc,CAAC;SACpF,QAAQ,EAAE;SACV,QAAQ,CAAC,2CAA2C,CAAC;CACzD,CAAC,CAAC;AAQH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,8BAA8B;SAC5C;QACD,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,4BAA4B;SAC1C;QACD,OAAO,EAAE;YACP,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,sDAAsD;SACpE;QACD,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,2CAA2C;SACzD;KACF;IACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC;CACjC,CAAC;AAEX,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAAoC,EACpC,SAAoB,EACpB,SAA2B;IAE3B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAGjD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;IAGhD,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE;QACjC,KAAK,EAAE,MAAa;QACpB,QAAQ,EAAE;YACR,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;YAC/B,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,uBAAuB,CAAC;YAC1D,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;SACxB;KACF,CAAC,CAAC;IAGH,MAAM,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAEnC,MAAM,CAAC,IAAI,CAAC,yBAAyB,MAAM,KAAK,MAAM,GAAG,CAAC,CAAC;IAE3D,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,OAAO,EAAE,IAAI;oBACb,MAAM;oBACN,MAAM;iBACP,EAAE,IAAI,EAAE,CAAC,CAAC;aACZ,CAAC;KACH,CAAC;AACJ,CAAC"} \ No newline at end of file diff --git a/media/demo-video/src/scenes/A2AScene.tsx b/media/demo-video/src/scenes/A2AScene.tsx deleted file mode 100644 index f5d00c4f..00000000 --- a/media/demo-video/src/scenes/A2AScene.tsx +++ /dev/null @@ -1,183 +0,0 @@ -import { AbsoluteFill, useCurrentFrame, interpolate, Easing } from 'remotion'; -import { NetworkIcon } from '../components/Icons'; - -export const A2AScene: React.FC = () => { - const frame = useCurrentFrame(); - - const titleY = interpolate(frame, [0, 20], [-100, 80], { - extrapolateLeft: 'clamp', - extrapolateRight: 'clamp', - easing: Easing.out(Easing.ease), - }); - - const agentOpacity = interpolate(frame, [20, 40], [0, 1], { - extrapolateLeft: 'clamp', - extrapolateRight: 'clamp', - }); - - const commandOpacity = interpolate(frame, [60, 80], [0, 1], { - extrapolateLeft: 'clamp', - extrapolateRight: 'clamp', - }); - - const connectionOpacity = interpolate(frame, [100, 120], [0, 1], { - extrapolateLeft: 'clamp', - extrapolateRight: 'clamp', - }); - - return ( - - {/* Title */} -
- -

- Smart Routing -

-

- Intelligent Task Detection -

-
- - {/* Task Type Cards */} -
- {/* Task Type 1 */} -
-
- Code Review -
-
- Auto-detected from context -
-
- - {/* Arrow */} -
- ⟷ -
- - {/* Task Type 2 */} -
-
- Implementation -
-
- Best practices applied -
-
-
- - {/* Commands */} -
-
- $ buddy-do "review this code" -
-
- $ buddy-do "implement authentication with JWT" -
-
-
- ); -}; From 2359ae7c2ec93669855471e4174d02bff7692b16 Mon Sep 17 00:00:00 2001 From: KT <677465+kevintseng@users.noreply.github.com> Date: Wed, 25 Feb 2026 05:05:16 +0800 Subject: [PATCH 09/23] feat(search): integrate embeddings into KnowledgeGraph for semantic search MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wire up the existing embeddings infrastructure (VectorExtension + EmbeddingService) into KnowledgeGraph. Adds semanticSearch(), hybridSearch(), and auto-embedding generation on entity creation. Graceful fallback to FTS5-only when sqlite-vec is unavailable. Also: remove unused axios dep, remove 4 dead scripts, upgrade ESLint 9→10. Co-Authored-By: Claude Opus 4.6 --- package-lock.json | 609 ++++++++--------------------------- package.json | 11 +- src/knowledge-graph/index.ts | 172 ++++++++++ 3 files changed, 305 insertions(+), 487 deletions(-) diff --git a/package-lock.json b/package-lock.json index facfe8c0..0c2e6d92 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,6 @@ "@types/multer": "^2.0.0", "@xenova/transformers": "^2.17.2", "asciichart": "^1.5.25", - "axios": "^1.13.2", "better-sqlite3": "^12.6.2", "boxen": "^8.0.1", "chalk": "^5.6.2", @@ -59,11 +58,11 @@ "@types/supertest": "^6.0.3", "@types/uuid": "^11.0.0", "@types/winston": "^2.4.4", - "@typescript-eslint/eslint-plugin": "^8.53.0", - "@typescript-eslint/parser": "^8.53.0", + "@typescript-eslint/eslint-plugin": "^8.56.1", + "@typescript-eslint/parser": "^8.56.1", "@vitest/coverage-v8": "^4.0.17", "ajv": "^8.17.1", - "eslint": "^9.39.2", + "eslint": "^10.0.2", "prettier": "^3.8.0", "supertest": "^7.2.2", "tsx": "^4.19.2", @@ -671,201 +670,68 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", - "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.2.tgz", + "integrity": "sha512-YF+fE6LV4v5MGWRGj7G404/OZzGNepVF8fxk7jqmqo3lrza7a0uUcDnROGRBG1WFC1omYUS/Wp1f42i0M+3Q3A==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^2.1.7", + "@eslint/object-schema": "^3.0.2", "debug": "^4.3.1", - "minimatch": "^3.1.2" + "minimatch": "^10.2.1" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/config-array/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/config-array/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "node": "^20.19.0 || ^22.13.0 || >=24" } }, "node_modules/@eslint/config-helpers": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", - "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.2.tgz", + "integrity": "sha512-a5MxrdDXEvqnIq+LisyCX6tQMPF/dSJpCfBgBauY+pNZ28yCtSsTvyTYrMhaI+LK26bVyCJfJkT0u8KIj2i1dQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.17.0" + "@eslint/core": "^1.1.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" } }, "node_modules/@eslint/core": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", - "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.1.0.tgz", + "integrity": "sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw==", "dev": true, "license": "Apache-2.0", "dependencies": { "@types/json-schema": "^7.0.15" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", - "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.1", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@eslint/eslintrc/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/js": { - "version": "9.39.2", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", - "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" + "node": "^20.19.0 || ^22.13.0 || >=24" } }, "node_modules/@eslint/object-schema": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", - "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.2.tgz", + "integrity": "sha512-HOy56KJt48Bx8KmJ+XGQNSUMT/6dZee/M54XyUyuvTvPXJmsERRvBchsUVx1UMe1WwIH49XLAczNC7V2INsuUw==", "dev": true, "license": "Apache-2.0", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" } }, "node_modules/@eslint/plugin-kit": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", - "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.6.0.tgz", + "integrity": "sha512-bIZEUzOI1jkhviX2cp5vNyXQc6olzb2ohewQubuYlMXZ2Q/XjBO0x0XhGPvc9fjSIiUN0vw+0hq53BJ4eQSJKQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.17.0", + "@eslint/core": "^1.1.0", "levn": "^0.4.1" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" } }, "node_modules/@gerrit0/mini-shiki": { @@ -1992,6 +1858,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -2225,17 +2098,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.56.0.tgz", - "integrity": "sha512-lRyPDLzNCuae71A3t9NEINBiTn7swyOhvUj3MyUOxb8x6g6vPEFoOU+ZRmGMusNC3X3YMhqMIX7i8ShqhT74Pw==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.56.1.tgz", + "integrity": "sha512-Jz9ZztpB37dNC+HU2HI28Bs9QXpzCz+y/twHOwhyrIRdbuVDxSytJNDl6z/aAKlaRIwC7y8wJdkBv7FxYGgi0A==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.56.0", - "@typescript-eslint/type-utils": "8.56.0", - "@typescript-eslint/utils": "8.56.0", - "@typescript-eslint/visitor-keys": "8.56.0", + "@typescript-eslint/scope-manager": "8.56.1", + "@typescript-eslint/type-utils": "8.56.1", + "@typescript-eslint/utils": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.4.0" @@ -2248,22 +2121,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.56.0", + "@typescript-eslint/parser": "^8.56.1", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.56.0.tgz", - "integrity": "sha512-IgSWvLobTDOjnaxAfDTIHaECbkNlAlKv2j5SjpB2v7QHKv1FIfjwMy8FsDbVfDX/KjmCmYICcw7uGaXLhtsLNg==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.56.1.tgz", + "integrity": "sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.56.0", - "@typescript-eslint/types": "8.56.0", - "@typescript-eslint/typescript-estree": "8.56.0", - "@typescript-eslint/visitor-keys": "8.56.0", + "@typescript-eslint/scope-manager": "8.56.1", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/typescript-estree": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1", "debug": "^4.4.3" }, "engines": { @@ -2279,14 +2152,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.56.0.tgz", - "integrity": "sha512-M3rnyL1vIQOMeWxTWIW096/TtVP+8W3p/XnaFflhmcFp+U4zlxUxWj4XwNs6HbDeTtN4yun0GNTTDBw/SvufKg==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.56.1.tgz", + "integrity": "sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.56.0", - "@typescript-eslint/types": "^8.56.0", + "@typescript-eslint/tsconfig-utils": "^8.56.1", + "@typescript-eslint/types": "^8.56.1", "debug": "^4.4.3" }, "engines": { @@ -2301,14 +2174,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.0.tgz", - "integrity": "sha512-7UiO/XwMHquH+ZzfVCfUNkIXlp/yQjjnlYUyYz7pfvlK3/EyyN6BK+emDmGNyQLBtLGaYrTAI6KOw8tFucWL2w==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.1.tgz", + "integrity": "sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.56.0", - "@typescript-eslint/visitor-keys": "8.56.0" + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2319,9 +2192,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.0.tgz", - "integrity": "sha512-bSJoIIt4o3lKXD3xmDh9chZcjCz5Lk8xS7Rxn+6l5/pKrDpkCwtQNQQwZ2qRPk7TkUYhrq3WPIHXOXlbXP0itg==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.1.tgz", + "integrity": "sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ==", "dev": true, "license": "MIT", "engines": { @@ -2336,15 +2209,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.56.0.tgz", - "integrity": "sha512-qX2L3HWOU2nuDs6GzglBeuFXviDODreS58tLY/BALPC7iu3Fa+J7EOTwnX9PdNBxUI7Uh0ntP0YWGnxCkXzmfA==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.56.1.tgz", + "integrity": "sha512-yB/7dxi7MgTtGhZdaHCemf7PuwrHMenHjmzgUW1aJpO+bBU43OycnM3Wn+DdvDO/8zzA9HlhaJ0AUGuvri4oGg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.56.0", - "@typescript-eslint/typescript-estree": "8.56.0", - "@typescript-eslint/utils": "8.56.0", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/typescript-estree": "8.56.1", + "@typescript-eslint/utils": "8.56.1", "debug": "^4.4.3", "ts-api-utils": "^2.4.0" }, @@ -2361,9 +2234,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.0.tgz", - "integrity": "sha512-DBsLPs3GsWhX5HylbP9HNG15U0bnwut55Lx12bHB9MpXxQ+R5GC8MwQe+N1UFXxAeQDvEsEDY6ZYwX03K7Z6HQ==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.1.tgz", + "integrity": "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==", "dev": true, "license": "MIT", "engines": { @@ -2375,18 +2248,18 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.0.tgz", - "integrity": "sha512-ex1nTUMWrseMltXUHmR2GAQ4d+WjkZCT4f+4bVsps8QEdh0vlBsaCokKTPlnqBFqqGaxilDNJG7b8dolW2m43Q==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.1.tgz", + "integrity": "sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.56.0", - "@typescript-eslint/tsconfig-utils": "8.56.0", - "@typescript-eslint/types": "8.56.0", - "@typescript-eslint/visitor-keys": "8.56.0", + "@typescript-eslint/project-service": "8.56.1", + "@typescript-eslint/tsconfig-utils": "8.56.1", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1", "debug": "^4.4.3", - "minimatch": "^9.0.5", + "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.4.0" @@ -2402,33 +2275,17 @@ "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.6.tgz", - "integrity": "sha512-kQAVowdR33euIqeA0+VZTDqU+qo1IeVY+hrKYtZMio3Pg0P0vuh/kwRylLUddJhB6pf3q/botcOvRtx4IN1wqQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^5.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@typescript-eslint/utils": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.0.tgz", - "integrity": "sha512-RZ3Qsmi2nFGsS+n+kjLAYDPVlrzf7UhTffrDIKr+h2yzAlYP/y5ZulU0yeDEPItos2Ph46JAL5P/On3pe7kDIQ==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.1.tgz", + "integrity": "sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.56.0", - "@typescript-eslint/types": "8.56.0", - "@typescript-eslint/typescript-estree": "8.56.0" + "@typescript-eslint/scope-manager": "8.56.1", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/typescript-estree": "8.56.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2443,13 +2300,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.0.tgz", - "integrity": "sha512-q+SL+b+05Ud6LbEE35qe4A99P+htKTKVbyiNEe45eCbJFyh/HVK9QXwlrbz+Q4L8SOW4roxSVwXYj4DMBT7Ieg==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.1.tgz", + "integrity": "sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/types": "8.56.1", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -2665,9 +2522,9 @@ } }, "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", "bin": { @@ -2899,17 +2756,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/axios": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz", - "integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.11", - "form-data": "^4.0.5", - "proxy-from-env": "^1.1.0" - } - }, "node_modules/b4a": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.4.tgz", @@ -3225,16 +3071,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/camelcase": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", @@ -3525,13 +3361,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, "node_modules/concat-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", @@ -3983,33 +3812,30 @@ } }, "node_modules/eslint": { - "version": "9.39.2", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", - "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.0.2.tgz", + "integrity": "sha512-uYixubwmqJZH+KLVYIVKY1JQt7tysXhtj21WSvjcSmU5SVNzMus1bgLe+pAt816yQ8opKfheVVoPLqvVMGejYw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.1", - "@eslint/config-helpers": "^0.4.2", - "@eslint/core": "^0.17.0", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.39.2", - "@eslint/plugin-kit": "^0.4.1", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.2", + "@eslint/config-helpers": "^0.5.2", + "@eslint/core": "^1.1.0", + "@eslint/plugin-kit": "^0.6.0", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", - "ajv": "^6.12.4", - "chalk": "^4.0.0", + "ajv": "^6.14.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "esquery": "^1.5.0", + "eslint-scope": "^9.1.1", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.1.1", + "esquery": "^1.7.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", @@ -4019,8 +3845,7 @@ "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", + "minimatch": "^10.2.1", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, @@ -4028,7 +3853,7 @@ "eslint": "bin/eslint.js" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://eslint.org/donate" @@ -4043,17 +3868,19 @@ } }, "node_modules/eslint-scope": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.1.tgz", + "integrity": "sha512-GaUN0sWim5qc8KVErfPBWmc31LEsOkrUJbvJZV+xuL3u2phMUK4HIvXlWAakfC8W4nzlK+chPEAkYOYb5ZScIw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" @@ -4073,9 +3900,9 @@ } }, "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "dev": true, "license": "MIT", "dependencies": { @@ -4089,65 +3916,14 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", "dev": true, "license": "Apache-2.0", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" @@ -4170,45 +3946,32 @@ "dev": true, "license": "MIT" }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.1.1.tgz", + "integrity": "sha512-AVHPqQoZYc+RUM4/3Ly5udlZY/U4LS8pIG05jEjWM2lQMU/oaZ7qshzAl2YP1tfNmXfftH3ohurfwNAug+MnsQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.15.0", + "acorn": "^8.16.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" + "eslint-visitor-keys": "^5.0.1" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", "dev": true, "license": "Apache-2.0", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" @@ -4576,26 +4339,6 @@ "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", "license": "MIT" }, - "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, "node_modules/form-data": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", @@ -4828,19 +4571,6 @@ "node": ">=10.0" } }, - "node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/globalthis": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", @@ -5024,23 +4754,6 @@ "node": ">= 4" } }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -5435,19 +5148,6 @@ "dev": true, "license": "MIT" }, - "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -5561,13 +5261,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, "node_modules/log-symbols": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", @@ -6365,19 +6058,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -6603,12 +6283,6 @@ "node": ">= 0.10" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" - }, "node_modules/pump": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", @@ -6763,16 +6437,6 @@ "node": ">=0.10.0" } }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", @@ -7481,19 +7145,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/superagent": { "version": "10.3.0", "resolved": "https://registry.npmjs.org/superagent/-/superagent-10.3.0.tgz", diff --git a/package.json b/package.json index 5f5d3d85..c50288e6 100644 --- a/package.json +++ b/package.json @@ -34,10 +34,6 @@ "format": "prettier --write 'src/**/*.ts'", "typecheck": "tsc --noEmit", "cred": "tsx src/cli/index.ts cred", - "orchestrator": "tsx src/orchestrator/index.ts", - "dashboard": "tsx src/dashboard/server.ts", - "demo:architecture": "tsx src/agents/architecture/demo.ts", - "demo:dashboard": "tsx examples/dashboard-demo.ts", "mcp": "node dist/mcp/server-bootstrap.js", "docs": "typedoc", "docs:watch": "typedoc --watch", @@ -80,7 +76,6 @@ "@types/multer": "^2.0.0", "@xenova/transformers": "^2.17.2", "asciichart": "^1.5.25", - "axios": "^1.13.2", "better-sqlite3": "^12.6.2", "boxen": "^8.0.1", "chalk": "^5.6.2", @@ -118,11 +113,11 @@ "@types/supertest": "^6.0.3", "@types/uuid": "^11.0.0", "@types/winston": "^2.4.4", - "@typescript-eslint/eslint-plugin": "^8.53.0", - "@typescript-eslint/parser": "^8.53.0", + "@typescript-eslint/eslint-plugin": "^8.56.1", + "@typescript-eslint/parser": "^8.56.1", "@vitest/coverage-v8": "^4.0.17", "ajv": "^8.17.1", - "eslint": "^9.39.2", + "eslint": "^10.0.2", "prettier": "^3.8.0", "supertest": "^7.2.2", "tsx": "^4.19.2", diff --git a/src/knowledge-graph/index.ts b/src/knowledge-graph/index.ts index 8511b588..b3eafd0c 100644 --- a/src/knowledge-graph/index.ts +++ b/src/knowledge-graph/index.ts @@ -19,6 +19,14 @@ import { safeJsonParse, safeJsonStringify } from '../utils/json.js'; import { getDataPath, getDataDirectory } from '../utils/PathResolver.js'; import { validateNonEmptyString } from '../utils/validation.js'; +/** + * Result from semantic/hybrid search + */ +export interface SemanticSearchResult { + entity: Entity; + similarity: number; +} + /** * Maximum allowed length for entity names. * Prevents excessively long names that could degrade search/index performance. @@ -42,6 +50,12 @@ const CONTROL_CHAR_PATTERN = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F\x80-\x9F]/; export class KnowledgeGraph { private db: Database.Database; private queryCache: QueryCache; + /** Whether sqlite-vec extension loaded successfully */ + private vectorEnabled = false; + /** Cached VectorExtension module (loaded once during init) */ + private vectorExt: typeof import('../embeddings/VectorExtension.js').VectorExtension | null = null; + /** Pending embedding generation tasks (fire-and-forget) */ + private pendingEmbeddings: Promise | null = null; /** * Private constructor - use KnowledgeGraph.create() instead @@ -284,6 +298,29 @@ export class KnowledgeGraph { // Run schema migrations this.runMigrations(); + + // Load sqlite-vec for vector search asynchronously (optional - degrades to FTS5-only) + this.initVectorSearch(); + } + + /** + * Initialize vector search capability. + * Loads sqlite-vec extension and creates vector table. + * Fails silently - vector search is an optional enhancement over FTS5. + */ + private initVectorSearch(): void { + import('../embeddings/VectorExtension.js') + .then(({ VectorExtension }) => { + VectorExtension.loadExtension(this.db); + VectorExtension.createVectorTable(this.db, 384); + this.vectorExt = VectorExtension; + this.vectorEnabled = true; + logger.info('[KG] Vector search enabled (sqlite-vec loaded)'); + }) + .catch(() => { + this.vectorEnabled = false; + logger.debug('[KG] Vector search unavailable, using FTS5-only search'); + }); } /** @@ -655,6 +692,11 @@ export class KnowledgeGraph { // Invalidate cache for entity queries this.queryCache.invalidatePattern(/^entities:/); + // Generate embedding asynchronously (fire-and-forget, never blocks entity creation) + if (this.vectorEnabled) { + this.generateEmbeddingAsync(entity.name, entity.observations); + } + logger.info(`[KG] Created entity: ${entity.name} (type: ${entity.entityType})`); return result; } catch (error) { @@ -1061,6 +1103,15 @@ export class KnowledgeGraph { `).run(entity.id, existingFts.name, existingFts.observations); } + // Delete embedding if vector search is enabled + if (this.vectorEnabled && this.vectorExt) { + try { + this.vectorExt.deleteEmbedding(this.db, name); + } catch { + // Vector extension may not be available + } + } + // Delete the entity (cascade will handle observations, tags, and relations) const stmt = this.db.prepare('DELETE FROM entities WHERE name = ?'); return stmt.run(name); @@ -1076,6 +1127,127 @@ export class KnowledgeGraph { return result.changes > 0; } + /** + * Generate embedding for an entity asynchronously. + * Never throws - failures are logged and silently ignored. + */ + private generateEmbeddingAsync(entityName: string, observations?: string[]): void { + if (!this.vectorExt) return; + const text = [entityName, ...(observations || [])].join(' '); + const ext = this.vectorExt; + + this.pendingEmbeddings = (async () => { + try { + const { LazyEmbeddingService } = await import('../embeddings/EmbeddingService.js'); + const service = await LazyEmbeddingService.get(); + const embedding = await service.encode(text); + ext.insertEmbedding(this.db, entityName, embedding); + logger.debug(`[KG] Embedding generated for: ${entityName}`); + } catch (error) { + logger.debug('[KG] Embedding generation skipped', { + entity: entityName, + reason: error instanceof Error ? error.message : String(error), + }); + } + })(); + } + + /** + * Semantic search using vector embeddings. + * Falls back to keyword search if embeddings are unavailable. + */ + async semanticSearch( + query: string, + options: { limit?: number; minSimilarity?: number; entityTypes?: string[] } = {} + ): Promise { + const { limit = 10, minSimilarity = 0.3 } = options; + + if (!this.vectorEnabled) { + return this.keywordSearchAsSemanticResults(query, limit); + } + + try { + const { LazyEmbeddingService } = await import('../embeddings/EmbeddingService.js'); + const service = await LazyEmbeddingService.get(); + const queryEmbedding = await service.encode(query); + + const knnResults = this.vectorExt!.knnSearch(this.db, queryEmbedding, limit * 2); + + const results: SemanticSearchResult[] = []; + for (const knn of knnResults) { + // cosine distance → similarity (distance 0 = identical, 2 = opposite) + const similarity = 1 - knn.distance; + if (similarity < minSimilarity) continue; + + const entity = this.getEntity(knn.entityName); + if (!entity) continue; + + results.push({ entity, similarity }); + } + + return results.slice(0, limit); + } catch (error) { + logger.warn('[KG] Semantic search failed, falling back to keyword', { + error: error instanceof Error ? error.message : String(error), + }); + return this.keywordSearchAsSemanticResults(query, limit); + } + } + + /** + * Hybrid search combining FTS5 keyword results with semantic vector results. + * Merges and deduplicates results from both approaches. + */ + async hybridSearch( + query: string, + options: { limit?: number; minSimilarity?: number } = {} + ): Promise { + const { limit = 10, minSimilarity = 0.3 } = options; + + // Always run keyword search + const keywordResults = this.keywordSearchAsSemanticResults(query, limit); + + // If vector search unavailable, return keyword results only + if (!this.vectorEnabled) { + return keywordResults; + } + + // Run semantic search + const semanticResults = await this.semanticSearch(query, { limit, minSimilarity }); + + // Merge: deduplicate by entity name, prefer higher similarity + const merged = new Map(); + for (const r of keywordResults) { + merged.set(r.entity.name, r); + } + for (const r of semanticResults) { + const existing = merged.get(r.entity.name); + if (!existing || r.similarity > existing.similarity) { + merged.set(r.entity.name, r); + } + } + + // Sort by similarity descending, take top N + return Array.from(merged.values()) + .sort((a, b) => b.similarity - a.similarity) + .slice(0, limit); + } + + /** + * Convert keyword search results to SemanticSearchResult format. + */ + private keywordSearchAsSemanticResults(query: string, limit: number): SemanticSearchResult[] { + const entities = this.searchEntities({ namePattern: query, limit }); + return entities.map(entity => ({ entity, similarity: 1.0 })); + } + + /** + * Check if vector search is enabled + */ + isVectorSearchEnabled(): boolean { + return this.vectorEnabled; + } + /** * Close the database connection */ From a1dcc99875096f73f135dc7c79719604ecf7c939 Mon Sep 17 00:00:00 2001 From: KT <677465+kevintseng@users.noreply.github.com> Date: Wed, 25 Feb 2026 05:08:43 +0800 Subject: [PATCH 10/23] fix(startup): add structured error handling for daemon/proxy/standalone bootstrap Wrap MCP server creation and socket server start with try-catch in daemon mode. Add proxy connection failure fallback to standalone. Classify bootstrap errors (EACCES/ENOSPC) for clearer diagnostics. Add recovery hints for common failures. Closes #18 Co-Authored-By: Claude Opus 4.6 --- src/mcp/server-bootstrap.ts | 84 ++++++++++++++++++++++++++++++++----- 1 file changed, 74 insertions(+), 10 deletions(-) diff --git a/src/mcp/server-bootstrap.ts b/src/mcp/server-bootstrap.ts index 19619101..817be068 100644 --- a/src/mcp/server-bootstrap.ts +++ b/src/mcp/server-bootstrap.ts @@ -320,8 +320,22 @@ async function bootstrapWithDaemon() { break; } } catch (error) { - // If daemon bootstrap fails, fall back to standalone mode - process.stderr.write(`[Bootstrap] Daemon bootstrap failed, falling back to standalone: ${error}\n`); + const msg = error instanceof Error ? error.message : String(error); + const errCode = (error as NodeJS.ErrnoException)?.code; + + // Classify error: unrecoverable errors should be reported clearly + const isPermissionError = errCode === 'EACCES' || errCode === 'EPERM'; + const isDiskError = errCode === 'ENOSPC' || errCode === 'EROFS'; + + if (isPermissionError || isDiskError) { + process.stderr.write( + `[Bootstrap] Daemon bootstrap failed (${errCode}): ${msg}\n` + + `[Bootstrap] This may indicate a system-level issue. Falling back to standalone mode.\n` + ); + } else { + process.stderr.write(`[Bootstrap] Daemon bootstrap failed, falling back to standalone: ${msg}\n`); + } + startMCPServer(); } } @@ -362,9 +376,21 @@ async function startAsDaemon(bootstrapper: DaemonBootstrap, version: string) { // Set environment variable process.env.MCP_SERVER_MODE = 'true'; - // Start the MCP server - const { ClaudeCodeBuddyMCPServer } = await import('./server.js'); - const mcpServer = await ClaudeCodeBuddyMCPServer.create(); + // Initialize MCP server with error handling + let mcpServer; + try { + const { ClaudeCodeBuddyMCPServer } = await import('./server.js'); + mcpServer = await ClaudeCodeBuddyMCPServer.create(); + } catch (error) { + const msg = error instanceof Error ? error.message : String(error); + logger.error('[Daemon] MCP server initialization failed', { error: msg }); + // Release lock since we can't serve as daemon + try { await DaemonLockManager.releaseLock(); } catch { /* best effort */ } + // Fall back to standalone which has its own error handling + logger.warn('[Daemon] Falling back to standalone mode'); + startMCPServer(); + return; + } // Create daemon socket server to accept proxy connections const transport = bootstrapper.getTransport(); @@ -388,8 +414,25 @@ async function startAsDaemon(bootstrapper: DaemonBootstrap, version: string) { return mcpServer.handleRequest(request); }); - // Start socket server - await socketServer.start(); + // Start socket server with error handling + try { + await socketServer.start(); + } catch (error) { + const msg = error instanceof Error ? error.message : String(error); + logger.error('[Daemon] Socket server failed to start', { + error: msg, + socketPath: transport.getPath(), + }); + // Release lock since socket server can't accept connections + try { await DaemonLockManager.releaseLock(); } catch { /* best effort */ } + try { transport.cleanup(); } catch { /* best effort */ } + // Fall back to standalone (stdio-only, no daemon socket) + logger.warn('[Daemon] Socket server unavailable, falling back to standalone mode'); + stopStdinBufferingAndReplay(); + await mcpServer.start(); + startMCPClientWatchdog(); + return; + } logger.info('[Daemon] Socket server started', { path: transport.getPath() }); // CRITICAL: Stop stdin buffering and replay data BEFORE starting MCP server @@ -509,8 +552,18 @@ async function startAsProxy(bootstrapper: DaemonBootstrap) { // This ensures the 'initialize' message reaches the proxy client stopStdinBufferingAndReplay(); - // Start proxying stdin/stdout to daemon - await proxyClient.start(); + // Start proxying stdin/stdout to daemon with error handling + try { + await proxyClient.start(); + } catch (error) { + const msg = error instanceof Error ? error.message : String(error); + logger.error('[Proxy] Failed to connect to daemon', { error: msg }); + // Daemon may have died between determineMode() and start() + // Fall back to standalone mode + logger.warn('[Proxy] Falling back to standalone mode'); + startMCPServer(); + return; + } logger.info('[Proxy] Proxy started, forwarding stdio to daemon'); @@ -552,7 +605,18 @@ function startMCPServer() { // server.connect() keeps the process alive - no need for infinite promise } catch (error) { - process.stderr.write(`Fatal error in MCP server bootstrap: ${error}\n`); + const msg = error instanceof Error ? error.message : String(error); + const errCode = (error as NodeJS.ErrnoException)?.code; + process.stderr.write(`[MeMesh] Fatal startup error: ${msg}\n`); + + // Provide recovery hints for common errors + if (errCode === 'EACCES' || errCode === 'EPERM') { + process.stderr.write('[MeMesh] Hint: Check file permissions for the MeMesh data directory.\n'); + } else if (msg.includes('better-sqlite3') || msg.includes('SQLite')) { + process.stderr.write('[MeMesh] Hint: Run "npm rebuild better-sqlite3" to rebuild native module.\n'); + } else if (msg.includes('ENOSPC')) { + process.stderr.write('[MeMesh] Hint: Disk is full. Free up space and try again.\n'); + } process.exit(1); } } From bc5eb39011a59609f7a32d55dee3887e41b8d00b Mon Sep 17 00:00:00 2001 From: KT <677465+kevintseng@users.noreply.github.com> Date: Wed, 25 Feb 2026 05:11:33 +0800 Subject: [PATCH 11/23] fix(test): make cloud client tests environment-independent Mock fs.existsSync for credentials file reads so tests don't pick up real API keys from the dev machine's credentials file. Fixes 7 pre-existing test failures on machines with MEMESH_API_KEY configured. Co-Authored-By: Claude Opus 4.6 --- tests/unit/cloud/MeMeshCloudClient.test.ts | 26 ++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/tests/unit/cloud/MeMeshCloudClient.test.ts b/tests/unit/cloud/MeMeshCloudClient.test.ts index 52e0ca51..73c89e7c 100644 --- a/tests/unit/cloud/MeMeshCloudClient.test.ts +++ b/tests/unit/cloud/MeMeshCloudClient.test.ts @@ -1,4 +1,5 @@ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; +import * as fs from 'fs'; import { MeMeshCloudClient, getCloudClient, @@ -6,6 +7,31 @@ import { resetCloudClient, } from '../../../src/cloud/MeMeshCloudClient.js'; +// Mock fs.existsSync to prevent credentials file from interfering with tests. +// On dev machines with a real credentials file, the MeMeshCloudClient constructor +// falls back to reading the file when apiKey is empty — this makes tests +// environment-dependent. Mocking ensures test isolation. +vi.mock('fs', async () => { + const actual = await vi.importActual('fs'); + return { + ...actual, + default: { + ...actual, + existsSync: vi.fn((path: string) => { + // Block credentials file reads; allow everything else + if (typeof path === 'string' && path.includes('credentials')) return false; + return actual.existsSync(path); + }), + readFileSync: actual.readFileSync, + }, + existsSync: vi.fn((path: string) => { + if (typeof path === 'string' && path.includes('credentials')) return false; + return actual.existsSync(path); + }), + readFileSync: actual.readFileSync, + }; +}); + describe('MeMeshCloudClient', () => { let client: MeMeshCloudClient; From b7ca33db71f94ddb10a0248f5ac20d294d9aa552 Mon Sep 17 00:00:00 2001 From: KT <677465+kevintseng@users.noreply.github.com> Date: Wed, 25 Feb 2026 05:20:32 +0800 Subject: [PATCH 12/23] fix: resolve critical issues from comprehensive code review KnowledgeGraph (3 CRITICAL + 2 MAJOR): - Track initVectorSearch() promise; search methods now await init completion - Replace single pendingEmbeddings with Set to prevent promise overwrites - Remove unsafe non-null assertion, add proper null check with fallback - close() now awaits all pending embeddings before closing database - Import SemanticSearchResult from KG instead of duplicate in buddy-remember server-bootstrap.ts (1 CRITICAL + 3 MAJOR): - Add transport.cleanup() and stopStdinBufferingAndReplay() on MCP init failure - Move setMcpHandler() after mcpServer.start() to prevent handler race - Add proxyClient.stop() on proxy connection failure - Add socket error codes (EADDRINUSE, ECONNREFUSED) to error classification MeMeshCloudClient.test.ts (1 CRITICAL + 1 MAJOR): - Simplify fs mock to named exports only (remove fragile default export) - Use exact path matching (endsWith) instead of broad includes() Co-Authored-By: Claude Opus 4.6 --- src/knowledge-graph/index.ts | 41 +++++++++++++++++----- src/mcp/server-bootstrap.ts | 26 ++++++++++---- src/mcp/tools/buddy-remember.ts | 10 +----- src/memory/UnifiedMemoryStore.ts | 6 ++-- tests/unit/cloud/MeMeshCloudClient.test.ts | 26 +++++--------- 5 files changed, 64 insertions(+), 45 deletions(-) diff --git a/src/knowledge-graph/index.ts b/src/knowledge-graph/index.ts index b3eafd0c..edf7b418 100644 --- a/src/knowledge-graph/index.ts +++ b/src/knowledge-graph/index.ts @@ -54,8 +54,10 @@ export class KnowledgeGraph { private vectorEnabled = false; /** Cached VectorExtension module (loaded once during init) */ private vectorExt: typeof import('../embeddings/VectorExtension.js').VectorExtension | null = null; - /** Pending embedding generation tasks (fire-and-forget) */ - private pendingEmbeddings: Promise | null = null; + /** Promise tracking vector search initialization (resolved when init completes or fails) */ + private vectorInitPromise: Promise | null = null; + /** Pending embedding generation tasks — tracked for clean shutdown */ + private pendingEmbeddings: Set> = new Set(); /** * Private constructor - use KnowledgeGraph.create() instead @@ -307,9 +309,10 @@ export class KnowledgeGraph { * Initialize vector search capability. * Loads sqlite-vec extension and creates vector table. * Fails silently - vector search is an optional enhancement over FTS5. + * The returned promise is tracked so search methods can await initialization. */ private initVectorSearch(): void { - import('../embeddings/VectorExtension.js') + this.vectorInitPromise = import('../embeddings/VectorExtension.js') .then(({ VectorExtension }) => { VectorExtension.loadExtension(this.db); VectorExtension.createVectorTable(this.db, 384); @@ -1130,13 +1133,14 @@ export class KnowledgeGraph { /** * Generate embedding for an entity asynchronously. * Never throws - failures are logged and silently ignored. + * All pending tasks are tracked for clean shutdown via close(). */ private generateEmbeddingAsync(entityName: string, observations?: string[]): void { if (!this.vectorExt) return; const text = [entityName, ...(observations || [])].join(' '); const ext = this.vectorExt; - this.pendingEmbeddings = (async () => { + const task = (async () => { try { const { LazyEmbeddingService } = await import('../embeddings/EmbeddingService.js'); const service = await LazyEmbeddingService.get(); @@ -1150,6 +1154,10 @@ export class KnowledgeGraph { }); } })(); + + // Track the task and auto-remove when it settles + this.pendingEmbeddings.add(task); + task.finally(() => this.pendingEmbeddings.delete(task)); } /** @@ -1162,7 +1170,12 @@ export class KnowledgeGraph { ): Promise { const { limit = 10, minSimilarity = 0.3 } = options; - if (!this.vectorEnabled) { + // Wait for vector init to complete before checking vectorEnabled + if (this.vectorInitPromise) { + await this.vectorInitPromise; + } + + if (!this.vectorEnabled || !this.vectorExt) { return this.keywordSearchAsSemanticResults(query, limit); } @@ -1171,7 +1184,7 @@ export class KnowledgeGraph { const service = await LazyEmbeddingService.get(); const queryEmbedding = await service.encode(query); - const knnResults = this.vectorExt!.knnSearch(this.db, queryEmbedding, limit * 2); + const knnResults = this.vectorExt.knnSearch(this.db, queryEmbedding, limit * 2); const results: SemanticSearchResult[] = []; for (const knn of knnResults) { @@ -1207,6 +1220,11 @@ export class KnowledgeGraph { // Always run keyword search const keywordResults = this.keywordSearchAsSemanticResults(query, limit); + // Wait for vector init to complete before checking vectorEnabled + if (this.vectorInitPromise) { + await this.vectorInitPromise; + } + // If vector search unavailable, return keyword results only if (!this.vectorEnabled) { return keywordResults; @@ -1249,9 +1267,16 @@ export class KnowledgeGraph { } /** - * Close the database connection + * Close the database connection. + * Waits for pending embedding tasks to complete before closing. */ - close() { + async close() { + // Wait for any pending embedding tasks to finish + if (this.pendingEmbeddings.size > 0) { + logger.debug(`[KG] Waiting for ${this.pendingEmbeddings.size} pending embedding tasks...`); + await Promise.allSettled([...this.pendingEmbeddings]); + } + // Cleanup cache this.queryCache.destroy(); diff --git a/src/mcp/server-bootstrap.ts b/src/mcp/server-bootstrap.ts index 817be068..3c3ae4b6 100644 --- a/src/mcp/server-bootstrap.ts +++ b/src/mcp/server-bootstrap.ts @@ -326,12 +326,18 @@ async function bootstrapWithDaemon() { // Classify error: unrecoverable errors should be reported clearly const isPermissionError = errCode === 'EACCES' || errCode === 'EPERM'; const isDiskError = errCode === 'ENOSPC' || errCode === 'EROFS'; + const isSocketError = errCode === 'EADDRINUSE' || errCode === 'ECONNREFUSED' || errCode === 'ETIMEDOUT'; if (isPermissionError || isDiskError) { process.stderr.write( `[Bootstrap] Daemon bootstrap failed (${errCode}): ${msg}\n` + `[Bootstrap] This may indicate a system-level issue. Falling back to standalone mode.\n` ); + } else if (isSocketError) { + process.stderr.write( + `[Bootstrap] Socket issue (${errCode}): ${msg}\n` + + `[Bootstrap] Daemon may be unresponsive or stale socket exists. Falling back to standalone mode.\n` + ); } else { process.stderr.write(`[Bootstrap] Daemon bootstrap failed, falling back to standalone: ${msg}\n`); } @@ -384,8 +390,10 @@ async function startAsDaemon(bootstrapper: DaemonBootstrap, version: string) { } catch (error) { const msg = error instanceof Error ? error.message : String(error); logger.error('[Daemon] MCP server initialization failed', { error: msg }); - // Release lock since we can't serve as daemon + // Release lock and clean up transport since we can't serve as daemon try { await DaemonLockManager.releaseLock(); } catch { /* best effort */ } + try { bootstrapper.getTransport().cleanup(); } catch { /* best effort */ } + stopStdinBufferingAndReplay(); // Fall back to standalone which has its own error handling logger.warn('[Daemon] Falling back to standalone mode'); startMCPServer(); @@ -408,13 +416,9 @@ async function startAsDaemon(bootstrapper: DaemonBootstrap, version: string) { logger.info('[Daemon] Client disconnected', { clientId }); }); - // Register MCP handler to route proxy client requests to the MCP server - // This enables the daemon to process MCP requests from proxy clients - socketServer.setMcpHandler(async (request: unknown) => { - return mcpServer.handleRequest(request); - }); - // Start socket server with error handling + // NOTE: MCP handler is registered AFTER mcpServer.start() below to prevent + // proxy clients from sending requests to an unstarted MCP server. try { await socketServer.start(); } catch (error) { @@ -442,6 +446,12 @@ async function startAsDaemon(bootstrapper: DaemonBootstrap, version: string) { // Also start the MCP server for direct stdio communication (first client) await mcpServer.start(); + // Register MCP handler AFTER server is started to prevent race condition + // where proxy clients send requests to an unstarted MCP server + socketServer.setMcpHandler(async (request: unknown) => { + return mcpServer.handleRequest(request); + }); + // Cleanup function for socket and lock const cleanupDaemon = async (reason: string): Promise => { logger.info('[Daemon] Cleanup started', { reason }); @@ -558,6 +568,8 @@ async function startAsProxy(bootstrapper: DaemonBootstrap) { } catch (error) { const msg = error instanceof Error ? error.message : String(error); logger.error('[Proxy] Failed to connect to daemon', { error: msg }); + // Clean up partially-initialized proxy client + try { await proxyClient.stop(); } catch { /* best effort */ } // Daemon may have died between determineMode() and start() // Fall back to standalone mode logger.warn('[Proxy] Falling back to standalone mode'); diff --git a/src/mcp/tools/buddy-remember.ts b/src/mcp/tools/buddy-remember.ts index c29e9788..909c73e7 100644 --- a/src/mcp/tools/buddy-remember.ts +++ b/src/mcp/tools/buddy-remember.ts @@ -1,7 +1,7 @@ import { z } from 'zod'; import type { ProjectMemoryManager } from '../../memory/ProjectMemoryManager.js'; import type { ResponseFormatter } from '../../ui/ResponseFormatter.js'; -import type { KnowledgeGraph } from '../../knowledge-graph/index.js'; +import type { KnowledgeGraph, SemanticSearchResult } from '../../knowledge-graph/index.js'; import type { Entity } from '../../knowledge-graph/types.js'; import { logger } from '../../utils/logger.js'; @@ -13,14 +13,6 @@ import { logger } from '../../utils/logger.js'; */ export type SearchMode = 'semantic' | 'keyword' | 'hybrid'; -/** - * Result from semantic/hybrid search - */ -export interface SemanticSearchResult { - entity: Entity; - similarity: number; -} - export const BuddyRememberInputSchema = z.object({ query: z.string().trim().min(1).describe('Search query (natural language supported for semantic search)'), mode: z diff --git a/src/memory/UnifiedMemoryStore.ts b/src/memory/UnifiedMemoryStore.ts index 41d11ed3..8bf9f489 100644 --- a/src/memory/UnifiedMemoryStore.ts +++ b/src/memory/UnifiedMemoryStore.ts @@ -943,12 +943,12 @@ export class UnifiedMemoryStore { * ```typescript * const store = await UnifiedMemoryStore.create(); * // ... use the store ... - * store.close(); // Cleanup when done + * await store.close(); // Cleanup when done * ``` */ - close(): void { + async close(): Promise { try { - this.knowledgeGraph.close(); + await this.knowledgeGraph.close(); logger.info('[UnifiedMemoryStore] Database connection closed'); } catch (error) { logger.error(`[UnifiedMemoryStore] Error closing database: ${error}`); diff --git a/tests/unit/cloud/MeMeshCloudClient.test.ts b/tests/unit/cloud/MeMeshCloudClient.test.ts index 73c89e7c..3a32e3ca 100644 --- a/tests/unit/cloud/MeMeshCloudClient.test.ts +++ b/tests/unit/cloud/MeMeshCloudClient.test.ts @@ -1,5 +1,4 @@ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; -import * as fs from 'fs'; import { MeMeshCloudClient, getCloudClient, @@ -7,28 +6,19 @@ import { resetCloudClient, } from '../../../src/cloud/MeMeshCloudClient.js'; -// Mock fs.existsSync to prevent credentials file from interfering with tests. -// On dev machines with a real credentials file, the MeMeshCloudClient constructor -// falls back to reading the file when apiKey is empty — this makes tests -// environment-dependent. Mocking ensures test isolation. +// Mock fs to prevent credentials file from interfering with tests. +// On dev machines with a real credentials file (~/.config/memesh/credentials.json), +// the MeMeshCloudClient constructor falls back to reading it when apiKey is empty, +// making tests environment-dependent. This mock ensures test isolation. vi.mock('fs', async () => { const actual = await vi.importActual('fs'); return { ...actual, - default: { - ...actual, - existsSync: vi.fn((path: string) => { - // Block credentials file reads; allow everything else - if (typeof path === 'string' && path.includes('credentials')) return false; - return actual.existsSync(path); - }), - readFileSync: actual.readFileSync, - }, - existsSync: vi.fn((path: string) => { - if (typeof path === 'string' && path.includes('credentials')) return false; - return actual.existsSync(path); + existsSync: vi.fn((p: string) => { + // Block credentials file reads; allow everything else + if (typeof p === 'string' && p.endsWith('memesh/credentials.json')) return false; + return actual.existsSync(p); }), - readFileSync: actual.readFileSync, }; }); From 411bad9adbc56bd854078ea5a47f54e8f9eb5cc6 Mon Sep 17 00:00:00 2001 From: KT <677465+kevintseng@users.noreply.github.com> Date: Wed, 25 Feb 2026 05:20:40 +0800 Subject: [PATCH 13/23] chore: rebuild plugin dist with code review fixes Co-Authored-By: Claude Opus 4.6 --- .../memesh/dist/knowledge-graph/index.d.ts | 23 +- .../dist/knowledge-graph/index.d.ts.map | 2 +- .../memesh/dist/knowledge-graph/index.js | 121 +++- .../memesh/dist/knowledge-graph/index.js.map | 2 +- .../memesh/dist/mcp/server-bootstrap.js | 98 ++- .../memesh/dist/mcp/server-bootstrap.js.map | 2 +- .../memesh/dist/mcp/tools/buddy-remember.d.ts | 5 - .../dist/mcp/tools/buddy-remember.d.ts.map | 2 +- .../dist/mcp/tools/buddy-remember.js.map | 2 +- .../dist/memory/UnifiedMemoryStore.d.ts | 2 +- .../dist/memory/UnifiedMemoryStore.d.ts.map | 2 +- .../memesh/dist/memory/UnifiedMemoryStore.js | 4 +- .../dist/memory/UnifiedMemoryStore.js.map | 2 +- .claude-plugin/memesh/package-lock.json | 658 +++++------------- .claude-plugin/memesh/package.json | 13 +- 15 files changed, 406 insertions(+), 532 deletions(-) diff --git a/.claude-plugin/memesh/dist/knowledge-graph/index.d.ts b/.claude-plugin/memesh/dist/knowledge-graph/index.d.ts index 9b307071..c8ab3ac8 100644 --- a/.claude-plugin/memesh/dist/knowledge-graph/index.d.ts +++ b/.claude-plugin/memesh/dist/knowledge-graph/index.d.ts @@ -1,13 +1,22 @@ import type { Entity, Relation, SearchQuery, RelationTrace } from './types.js'; +export interface SemanticSearchResult { + entity: Entity; + similarity: number; +} export declare class KnowledgeGraph { private db; private queryCache; + private vectorEnabled; + private vectorExt; + private vectorInitPromise; + private pendingEmbeddings; private constructor(); private validateEntityName; private validateRelationType; static create(dbPath?: string): Promise; static createSync(dbPath?: string): KnowledgeGraph; private initialize; + private initVectorSearch; private runMigrations; private escapeLikePattern; private searchFTS5; @@ -23,7 +32,19 @@ export declare class KnowledgeGraph { entitiesByType: Record; }; deleteEntity(name: string): boolean; - close(): void; + private generateEmbeddingAsync; + semanticSearch(query: string, options?: { + limit?: number; + minSimilarity?: number; + entityTypes?: string[]; + }): Promise; + hybridSearch(query: string, options?: { + limit?: number; + minSimilarity?: number; + }): Promise; + private keywordSearchAsSemanticResults; + isVectorSearchEnabled(): boolean; + close(): Promise; transaction(fn: () => T): T; getCacheStats(): import("../db/QueryCache.js").CacheStats; clearCache(): void; diff --git a/.claude-plugin/memesh/dist/knowledge-graph/index.d.ts.map b/.claude-plugin/memesh/dist/knowledge-graph/index.d.ts.map index 15349fb1..f93cdcae 100644 --- a/.claude-plugin/memesh/dist/knowledge-graph/index.d.ts.map +++ b/.claude-plugin/memesh/dist/knowledge-graph/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/knowledge-graph/index.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAA4B,MAAM,YAAY,CAAC;AA8BzG,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,UAAU,CAA0B;IAK5C,OAAO;IAsBP,OAAO,CAAC,kBAAkB;IAsC1B,OAAO,CAAC,oBAAoB;WAgCf,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAqC7D,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc;IAyBlD,OAAO,CAAC,UAAU;IA8FlB,OAAO,CAAC,aAAa;IAuHrB,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,UAAU;IAyClB,OAAO,CAAC,gBAAgB;IAqExB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IA8IpC,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IA8DxC,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,EAAE;IA2J5C,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAYtC,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,aAAa,GAAG,IAAI;IAkE3E,QAAQ,IAAI;QACV,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACxC;IAgDD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IA8CnC,KAAK;IA8BL,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IAoB9B,aAAa;IAOb,UAAU;CAIX;AAGD,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/knowledge-graph/index.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAA4B,MAAM,YAAY,CAAC;AAazG,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAsBD,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,UAAU,CAA0B;IAE5C,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO,CAAC,SAAS,CAAkF;IAEnG,OAAO,CAAC,iBAAiB,CAA8B;IAEvD,OAAO,CAAC,iBAAiB,CAAiC;IAK1D,OAAO;IAsBP,OAAO,CAAC,kBAAkB;IAsC1B,OAAO,CAAC,oBAAoB;WAgCf,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAqC7D,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc;IAyBlD,OAAO,CAAC,UAAU;IA+FlB,OAAO,CAAC,gBAAgB;IAuBxB,OAAO,CAAC,aAAa;IAuHrB,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,UAAU;IAyClB,OAAO,CAAC,gBAAgB;IAqExB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAmJpC,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IA8DxC,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,EAAE;IA2J5C,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAYtC,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,aAAa,GAAG,IAAI;IAkE3E,QAAQ,IAAI;QACV,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACxC;IAgDD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAyDnC,OAAO,CAAC,sBAAsB;IA6BxB,cAAc,CAClB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;KAAO,GAC/E,OAAO,CAAC,oBAAoB,EAAE,CAAC;IA4C5B,YAAY,CAChB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAO,GACvD,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAwClC,OAAO,CAAC,8BAA8B;IAQtC,qBAAqB,IAAI,OAAO;IAQ1B,KAAK;IAoCX,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IAoB9B,aAAa;IAOb,UAAU;CAIX;AAGD,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/knowledge-graph/index.js b/.claude-plugin/memesh/dist/knowledge-graph/index.js index 3765a3f7..0e147694 100644 --- a/.claude-plugin/memesh/dist/knowledge-graph/index.js +++ b/.claude-plugin/memesh/dist/knowledge-graph/index.js @@ -12,6 +12,10 @@ const CONTROL_CHAR_PATTERN = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F\x80-\x9F]/; export class KnowledgeGraph { db; queryCache; + vectorEnabled = false; + vectorExt = null; + vectorInitPromise = null; + pendingEmbeddings = new Set(); constructor(_dbPath, db) { this.db = db; this.queryCache = new QueryCache({ @@ -151,6 +155,21 @@ export class KnowledgeGraph { `; this.db.exec(fts5Schema); this.runMigrations(); + this.initVectorSearch(); + } + initVectorSearch() { + this.vectorInitPromise = import('../embeddings/VectorExtension.js') + .then(({ VectorExtension }) => { + VectorExtension.loadExtension(this.db); + VectorExtension.createVectorTable(this.db, 384); + this.vectorExt = VectorExtension; + this.vectorEnabled = true; + logger.info('[KG] Vector search enabled (sqlite-vec loaded)'); + }) + .catch(() => { + this.vectorEnabled = false; + logger.debug('[KG] Vector search unavailable, using FTS5-only search'); + }); } runMigrations() { try { @@ -364,6 +383,9 @@ export class KnowledgeGraph { return entity.name; })(); this.queryCache.invalidatePattern(/^entities:/); + if (this.vectorEnabled) { + this.generateEmbeddingAsync(entity.name, entity.observations); + } logger.info(`[KG] Created entity: ${entity.name} (type: ${entity.entityType})`); return result; } @@ -596,6 +618,13 @@ export class KnowledgeGraph { VALUES('delete', ?, ?, ?) `).run(entity.id, existingFts.name, existingFts.observations); } + if (this.vectorEnabled && this.vectorExt) { + try { + this.vectorExt.deleteEmbedding(this.db, name); + } + catch { + } + } const stmt = this.db.prepare('DELETE FROM entities WHERE name = ?'); return stmt.run(name); })(); @@ -606,7 +635,97 @@ export class KnowledgeGraph { logger.info(`[KG] Deleted entity: ${name}`); return result.changes > 0; } - close() { + generateEmbeddingAsync(entityName, observations) { + if (!this.vectorExt) + return; + const text = [entityName, ...(observations || [])].join(' '); + const ext = this.vectorExt; + const task = (async () => { + try { + const { LazyEmbeddingService } = await import('../embeddings/EmbeddingService.js'); + const service = await LazyEmbeddingService.get(); + const embedding = await service.encode(text); + ext.insertEmbedding(this.db, entityName, embedding); + logger.debug(`[KG] Embedding generated for: ${entityName}`); + } + catch (error) { + logger.debug('[KG] Embedding generation skipped', { + entity: entityName, + reason: error instanceof Error ? error.message : String(error), + }); + } + })(); + this.pendingEmbeddings.add(task); + task.finally(() => this.pendingEmbeddings.delete(task)); + } + async semanticSearch(query, options = {}) { + const { limit = 10, minSimilarity = 0.3 } = options; + if (this.vectorInitPromise) { + await this.vectorInitPromise; + } + if (!this.vectorEnabled || !this.vectorExt) { + return this.keywordSearchAsSemanticResults(query, limit); + } + try { + const { LazyEmbeddingService } = await import('../embeddings/EmbeddingService.js'); + const service = await LazyEmbeddingService.get(); + const queryEmbedding = await service.encode(query); + const knnResults = this.vectorExt.knnSearch(this.db, queryEmbedding, limit * 2); + const results = []; + for (const knn of knnResults) { + const similarity = 1 - knn.distance; + if (similarity < minSimilarity) + continue; + const entity = this.getEntity(knn.entityName); + if (!entity) + continue; + results.push({ entity, similarity }); + } + return results.slice(0, limit); + } + catch (error) { + logger.warn('[KG] Semantic search failed, falling back to keyword', { + error: error instanceof Error ? error.message : String(error), + }); + return this.keywordSearchAsSemanticResults(query, limit); + } + } + async hybridSearch(query, options = {}) { + const { limit = 10, minSimilarity = 0.3 } = options; + const keywordResults = this.keywordSearchAsSemanticResults(query, limit); + if (this.vectorInitPromise) { + await this.vectorInitPromise; + } + if (!this.vectorEnabled) { + return keywordResults; + } + const semanticResults = await this.semanticSearch(query, { limit, minSimilarity }); + const merged = new Map(); + for (const r of keywordResults) { + merged.set(r.entity.name, r); + } + for (const r of semanticResults) { + const existing = merged.get(r.entity.name); + if (!existing || r.similarity > existing.similarity) { + merged.set(r.entity.name, r); + } + } + return Array.from(merged.values()) + .sort((a, b) => b.similarity - a.similarity) + .slice(0, limit); + } + keywordSearchAsSemanticResults(query, limit) { + const entities = this.searchEntities({ namePattern: query, limit }); + return entities.map(entity => ({ entity, similarity: 1.0 })); + } + isVectorSearchEnabled() { + return this.vectorEnabled; + } + async close() { + if (this.pendingEmbeddings.size > 0) { + logger.debug(`[KG] Waiting for ${this.pendingEmbeddings.size} pending embedding tasks...`); + await Promise.allSettled([...this.pendingEmbeddings]); + } this.queryCache.destroy(); this.db.close(); logger.info('[KG] Database connection and cache closed'); diff --git a/.claude-plugin/memesh/dist/knowledge-graph/index.js.map b/.claude-plugin/memesh/dist/knowledge-graph/index.js.map index 7e29c55e..3ae9ca5e 100644 --- a/.claude-plugin/memesh/dist/knowledge-graph/index.js.map +++ b/.claude-plugin/memesh/dist/knowledge-graph/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/knowledge-graph/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/knowledge-graph/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/server-bootstrap.js b/.claude-plugin/memesh/dist/mcp/server-bootstrap.js index 32a8af35..dd67926d 100755 --- a/.claude-plugin/memesh/dist/mcp/server-bootstrap.js +++ b/.claude-plugin/memesh/dist/mcp/server-bootstrap.js @@ -181,7 +181,22 @@ async function bootstrapWithDaemon() { } } catch (error) { - process.stderr.write(`[Bootstrap] Daemon bootstrap failed, falling back to standalone: ${error}\n`); + const msg = error instanceof Error ? error.message : String(error); + const errCode = error?.code; + const isPermissionError = errCode === 'EACCES' || errCode === 'EPERM'; + const isDiskError = errCode === 'ENOSPC' || errCode === 'EROFS'; + const isSocketError = errCode === 'EADDRINUSE' || errCode === 'ECONNREFUSED' || errCode === 'ETIMEDOUT'; + if (isPermissionError || isDiskError) { + process.stderr.write(`[Bootstrap] Daemon bootstrap failed (${errCode}): ${msg}\n` + + `[Bootstrap] This may indicate a system-level issue. Falling back to standalone mode.\n`); + } + else if (isSocketError) { + process.stderr.write(`[Bootstrap] Socket issue (${errCode}): ${msg}\n` + + `[Bootstrap] Daemon may be unresponsive or stale socket exists. Falling back to standalone mode.\n`); + } + else { + process.stderr.write(`[Bootstrap] Daemon bootstrap failed, falling back to standalone: ${msg}\n`); + } startMCPServer(); } } @@ -202,8 +217,27 @@ async function startAsDaemon(bootstrapper, version) { } logger.info('[Bootstrap] Starting as daemon', { version, pid: process.pid }); process.env.MCP_SERVER_MODE = 'true'; - const { ClaudeCodeBuddyMCPServer } = await import('./server.js'); - const mcpServer = await ClaudeCodeBuddyMCPServer.create(); + let mcpServer; + try { + const { ClaudeCodeBuddyMCPServer } = await import('./server.js'); + mcpServer = await ClaudeCodeBuddyMCPServer.create(); + } + catch (error) { + const msg = error instanceof Error ? error.message : String(error); + logger.error('[Daemon] MCP server initialization failed', { error: msg }); + try { + await DaemonLockManager.releaseLock(); + } + catch { } + try { + bootstrapper.getTransport().cleanup(); + } + catch { } + stopStdinBufferingAndReplay(); + logger.warn('[Daemon] Falling back to standalone mode'); + startMCPServer(); + return; + } const transport = bootstrapper.getTransport(); const socketServer = new DaemonSocketServer({ transport, @@ -215,13 +249,35 @@ async function startAsDaemon(bootstrapper, version) { socketServer.on('client_disconnect', (clientId) => { logger.info('[Daemon] Client disconnected', { clientId }); }); - socketServer.setMcpHandler(async (request) => { - return mcpServer.handleRequest(request); - }); - await socketServer.start(); + try { + await socketServer.start(); + } + catch (error) { + const msg = error instanceof Error ? error.message : String(error); + logger.error('[Daemon] Socket server failed to start', { + error: msg, + socketPath: transport.getPath(), + }); + try { + await DaemonLockManager.releaseLock(); + } + catch { } + try { + transport.cleanup(); + } + catch { } + logger.warn('[Daemon] Socket server unavailable, falling back to standalone mode'); + stopStdinBufferingAndReplay(); + await mcpServer.start(); + startMCPClientWatchdog(); + return; + } logger.info('[Daemon] Socket server started', { path: transport.getPath() }); stopStdinBufferingAndReplay(); await mcpServer.start(); + socketServer.setMcpHandler(async (request) => { + return mcpServer.handleRequest(request); + }); const cleanupDaemon = async (reason) => { logger.info('[Daemon] Cleanup started', { reason }); try { @@ -301,7 +357,20 @@ async function startAsProxy(bootstrapper) { process.exit(0); }); stopStdinBufferingAndReplay(); - await proxyClient.start(); + try { + await proxyClient.start(); + } + catch (error) { + const msg = error instanceof Error ? error.message : String(error); + logger.error('[Proxy] Failed to connect to daemon', { error: msg }); + try { + await proxyClient.stop(); + } + catch { } + logger.warn('[Proxy] Falling back to standalone mode'); + startMCPServer(); + return; + } logger.info('[Proxy] Proxy started, forwarding stdio to daemon'); setupSignalHandlers(async (signal) => { logger.info('[Proxy] Shutdown requested', { signal }); @@ -320,7 +389,18 @@ function startMCPServer() { await mcpServer.start(); } catch (error) { - process.stderr.write(`Fatal error in MCP server bootstrap: ${error}\n`); + const msg = error instanceof Error ? error.message : String(error); + const errCode = error?.code; + process.stderr.write(`[MeMesh] Fatal startup error: ${msg}\n`); + if (errCode === 'EACCES' || errCode === 'EPERM') { + process.stderr.write('[MeMesh] Hint: Check file permissions for the MeMesh data directory.\n'); + } + else if (msg.includes('better-sqlite3') || msg.includes('SQLite')) { + process.stderr.write('[MeMesh] Hint: Run "npm rebuild better-sqlite3" to rebuild native module.\n'); + } + else if (msg.includes('ENOSPC')) { + process.stderr.write('[MeMesh] Hint: Disk is full. Free up space and try again.\n'); + } process.exit(1); } } diff --git a/.claude-plugin/memesh/dist/mcp/server-bootstrap.js.map b/.claude-plugin/memesh/dist/mcp/server-bootstrap.js.map index e274be51..b7fe5969 100644 --- a/.claude-plugin/memesh/dist/mcp/server-bootstrap.js.map +++ b/.claude-plugin/memesh/dist/mcp/server-bootstrap.js.map @@ -1 +1 @@ -{"version":3,"file":"server-bootstrap.js","sourceRoot":"","sources":["../../src/mcp/server-bootstrap.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"server-bootstrap.js","sourceRoot":"","sources":["../../src/mcp/server-bootstrap.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/tools/buddy-remember.d.ts b/.claude-plugin/memesh/dist/mcp/tools/buddy-remember.d.ts index 7ba4b608..750d0c36 100644 --- a/.claude-plugin/memesh/dist/mcp/tools/buddy-remember.d.ts +++ b/.claude-plugin/memesh/dist/mcp/tools/buddy-remember.d.ts @@ -2,12 +2,7 @@ import { z } from 'zod'; import type { ProjectMemoryManager } from '../../memory/ProjectMemoryManager.js'; import type { ResponseFormatter } from '../../ui/ResponseFormatter.js'; import type { KnowledgeGraph } from '../../knowledge-graph/index.js'; -import type { Entity } from '../../knowledge-graph/types.js'; export type SearchMode = 'semantic' | 'keyword' | 'hybrid'; -export interface SemanticSearchResult { - entity: Entity; - similarity: number; -} export declare const BuddyRememberInputSchema: z.ZodObject<{ query: z.ZodString; mode: z.ZodDefault; update(id: string, updates: Partial): Promise; delete(id: string): Promise; - close(): void; + close(): Promise; private entityToMemory; } //# sourceMappingURL=UnifiedMemoryStore.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/memory/UnifiedMemoryStore.d.ts.map b/.claude-plugin/memesh/dist/memory/UnifiedMemoryStore.d.ts.map index a85dd84e..f4551b4d 100644 --- a/.claude-plugin/memesh/dist/memory/UnifiedMemoryStore.d.ts.map +++ b/.claude-plugin/memesh/dist/memory/UnifiedMemoryStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"UnifiedMemoryStore.d.ts","sourceRoot":"","sources":["../../src/memory/UnifiedMemoryStore.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACV,aAAa,EACd,MAAM,2BAA2B,CAAC;AA4EnC,qBAAa,kBAAkB;IACjB,OAAO,CAAC,cAAc;gBAAd,cAAc,EAAE,cAAc;WAoBrC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAkC3D,KAAK,CACT,MAAM,EAAE,aAAa,EACrB,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GACvD,OAAO,CAAC,MAAM,CAAC;IAkRZ,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAgD9C,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,aAAa,GAAG;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GACvE,OAAO,CAAC,aAAa,EAAE,CAAC;YAgEb,iBAAiB;IA8F/B,OAAO,CAAC,kBAAkB;IA2D1B,OAAO,CAAC,kBAAkB;IAsEpB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAmCjF,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAa/E,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IA+ErE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAuD1C,KAAK,IAAI,IAAI;IAoBb,OAAO,CAAC,cAAc;CA+EvB"} \ No newline at end of file +{"version":3,"file":"UnifiedMemoryStore.d.ts","sourceRoot":"","sources":["../../src/memory/UnifiedMemoryStore.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACV,aAAa,EACd,MAAM,2BAA2B,CAAC;AA4EnC,qBAAa,kBAAkB;IACjB,OAAO,CAAC,cAAc;gBAAd,cAAc,EAAE,cAAc;WAoBrC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAkC3D,KAAK,CACT,MAAM,EAAE,aAAa,EACrB,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GACvD,OAAO,CAAC,MAAM,CAAC;IAkRZ,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAgD9C,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,aAAa,GAAG;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GACvE,OAAO,CAAC,aAAa,EAAE,CAAC;YAgEb,iBAAiB;IA8F/B,OAAO,CAAC,kBAAkB;IA2D1B,OAAO,CAAC,kBAAkB;IAsEpB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAmCjF,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAa/E,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IA+ErE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAuDpC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB5B,OAAO,CAAC,cAAc;CA+EvB"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/memory/UnifiedMemoryStore.js b/.claude-plugin/memesh/dist/memory/UnifiedMemoryStore.js index 59e86abf..deca08f6 100644 --- a/.claude-plugin/memesh/dist/memory/UnifiedMemoryStore.js +++ b/.claude-plugin/memesh/dist/memory/UnifiedMemoryStore.js @@ -507,9 +507,9 @@ export class UnifiedMemoryStore { }); } } - close() { + async close() { try { - this.knowledgeGraph.close(); + await this.knowledgeGraph.close(); logger.info('[UnifiedMemoryStore] Database connection closed'); } catch (error) { diff --git a/.claude-plugin/memesh/dist/memory/UnifiedMemoryStore.js.map b/.claude-plugin/memesh/dist/memory/UnifiedMemoryStore.js.map index 65525431..4dc788ff 100644 --- a/.claude-plugin/memesh/dist/memory/UnifiedMemoryStore.js.map +++ b/.claude-plugin/memesh/dist/memory/UnifiedMemoryStore.js.map @@ -1 +1 @@ -{"version":3,"file":"UnifiedMemoryStore.js","sourceRoot":"","sources":["../../src/memory/UnifiedMemoryStore.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"UnifiedMemoryStore.js","sourceRoot":"","sources":["../../src/memory/UnifiedMemoryStore.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/package-lock.json b/.claude-plugin/memesh/package-lock.json index d96c46be..ada6f04a 100644 --- a/.claude-plugin/memesh/package-lock.json +++ b/.claude-plugin/memesh/package-lock.json @@ -10,7 +10,7 @@ "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { - "@anthropic-ai/sdk": "^0.74.0", + "@anthropic-ai/sdk": "^0.78.0", "@modelcontextprotocol/sdk": "^1.25.3", "@types/form-data": "^2.2.1", "@types/fs-extra": "^11.0.4", @@ -18,7 +18,6 @@ "@types/multer": "^2.0.0", "@xenova/transformers": "^2.17.2", "asciichart": "^1.5.25", - "axios": "^1.13.2", "better-sqlite3": "^12.6.2", "boxen": "^8.0.1", "chalk": "^5.6.2", @@ -59,11 +58,11 @@ "@types/supertest": "^6.0.3", "@types/uuid": "^11.0.0", "@types/winston": "^2.4.4", - "@typescript-eslint/eslint-plugin": "^8.53.0", - "@typescript-eslint/parser": "^8.53.0", + "@typescript-eslint/eslint-plugin": "^8.56.1", + "@typescript-eslint/parser": "^8.56.1", "@vitest/coverage-v8": "^4.0.17", "ajv": "^8.17.1", - "eslint": "^9.39.2", + "eslint": "^10.0.2", "prettier": "^3.8.0", "supertest": "^7.2.2", "tsx": "^4.19.2", @@ -90,9 +89,9 @@ } }, "node_modules/@anthropic-ai/sdk": { - "version": "0.74.0", - "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.74.0.tgz", - "integrity": "sha512-srbJV7JKsc5cQ6eVuFzjZO7UR3xEPJqPamHFIe29bs38Ij2IripoAhC0S5NslNbaFUYqBKypmmpzMTpqfHEUDw==", + "version": "0.78.0", + "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.78.0.tgz", + "integrity": "sha512-PzQhR715td/m1UaaN5hHXjYB8Gl2lF9UVhrrGrZeysiF6Rb74Wc9GCB8hzLdzmQtBd1qe89F9OptgB9Za1Ib5w==", "license": "MIT", "dependencies": { "json-schema-to-ts": "^3.1.1" @@ -671,165 +670,68 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", - "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.2.tgz", + "integrity": "sha512-YF+fE6LV4v5MGWRGj7G404/OZzGNepVF8fxk7jqmqo3lrza7a0uUcDnROGRBG1WFC1omYUS/Wp1f42i0M+3Q3A==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^2.1.7", + "@eslint/object-schema": "^3.0.2", "debug": "^4.3.1", - "minimatch": "^3.1.2" + "minimatch": "^10.2.1" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "node": "^20.19.0 || ^22.13.0 || >=24" } }, "node_modules/@eslint/config-helpers": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", - "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.2.tgz", + "integrity": "sha512-a5MxrdDXEvqnIq+LisyCX6tQMPF/dSJpCfBgBauY+pNZ28yCtSsTvyTYrMhaI+LK26bVyCJfJkT0u8KIj2i1dQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.17.0" + "@eslint/core": "^1.1.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" } }, "node_modules/@eslint/core": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", - "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.1.0.tgz", + "integrity": "sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw==", "dev": true, "license": "Apache-2.0", "dependencies": { "@types/json-schema": "^7.0.15" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", - "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.1", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/js": { - "version": "9.39.2", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", - "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" + "node": "^20.19.0 || ^22.13.0 || >=24" } }, "node_modules/@eslint/object-schema": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", - "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.2.tgz", + "integrity": "sha512-HOy56KJt48Bx8KmJ+XGQNSUMT/6dZee/M54XyUyuvTvPXJmsERRvBchsUVx1UMe1WwIH49XLAczNC7V2INsuUw==", "dev": true, "license": "Apache-2.0", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" } }, "node_modules/@eslint/plugin-kit": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", - "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.6.0.tgz", + "integrity": "sha512-bIZEUzOI1jkhviX2cp5vNyXQc6olzb2ohewQubuYlMXZ2Q/XjBO0x0XhGPvc9fjSIiUN0vw+0hq53BJ4eQSJKQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.17.0", + "@eslint/core": "^1.1.0", "levn": "^0.4.1" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" } }, "node_modules/@gerrit0/mini-shiki": { @@ -1259,27 +1161,6 @@ } } }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "license": "MIT", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.1.tgz", - "integrity": "sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==", - "license": "MIT", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" - } - }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", @@ -1922,6 +1803,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -2154,17 +2042,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.54.0.tgz", - "integrity": "sha512-hAAP5io/7csFStuOmR782YmTthKBJ9ND3WVL60hcOjvtGFb+HJxH4O5huAcmcZ9v9G8P+JETiZ/G1B8MALnWZQ==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.56.1.tgz", + "integrity": "sha512-Jz9ZztpB37dNC+HU2HI28Bs9QXpzCz+y/twHOwhyrIRdbuVDxSytJNDl6z/aAKlaRIwC7y8wJdkBv7FxYGgi0A==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.54.0", - "@typescript-eslint/type-utils": "8.54.0", - "@typescript-eslint/utils": "8.54.0", - "@typescript-eslint/visitor-keys": "8.54.0", + "@typescript-eslint/scope-manager": "8.56.1", + "@typescript-eslint/type-utils": "8.56.1", + "@typescript-eslint/utils": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.4.0" @@ -2177,22 +2065,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.54.0", - "eslint": "^8.57.0 || ^9.0.0", + "@typescript-eslint/parser": "^8.56.1", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.54.0.tgz", - "integrity": "sha512-BtE0k6cjwjLZoZixN0t5AKP0kSzlGu7FctRXYuPAm//aaiZhmfq1JwdYpYr1brzEspYyFeF+8XF5j2VK6oalrA==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.56.1.tgz", + "integrity": "sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.54.0", - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/typescript-estree": "8.54.0", - "@typescript-eslint/visitor-keys": "8.54.0", + "@typescript-eslint/scope-manager": "8.56.1", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/typescript-estree": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1", "debug": "^4.4.3" }, "engines": { @@ -2203,19 +2091,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.54.0.tgz", - "integrity": "sha512-YPf+rvJ1s7MyiWM4uTRhE4DvBXrEV+d8oC3P9Y2eT7S+HBS0clybdMIPnhiATi9vZOYDc7OQ1L/i6ga6NFYK/g==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.56.1.tgz", + "integrity": "sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.54.0", - "@typescript-eslint/types": "^8.54.0", + "@typescript-eslint/tsconfig-utils": "^8.56.1", + "@typescript-eslint/types": "^8.56.1", "debug": "^4.4.3" }, "engines": { @@ -2230,14 +2118,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.54.0.tgz", - "integrity": "sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.1.tgz", + "integrity": "sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/visitor-keys": "8.54.0" + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2248,9 +2136,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.54.0.tgz", - "integrity": "sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.1.tgz", + "integrity": "sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ==", "dev": true, "license": "MIT", "engines": { @@ -2265,15 +2153,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.54.0.tgz", - "integrity": "sha512-hiLguxJWHjjwL6xMBwD903ciAwd7DmK30Y9Axs/etOkftC3ZNN9K44IuRD/EB08amu+Zw6W37x9RecLkOo3pMA==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.56.1.tgz", + "integrity": "sha512-yB/7dxi7MgTtGhZdaHCemf7PuwrHMenHjmzgUW1aJpO+bBU43OycnM3Wn+DdvDO/8zzA9HlhaJ0AUGuvri4oGg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/typescript-estree": "8.54.0", - "@typescript-eslint/utils": "8.54.0", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/typescript-estree": "8.56.1", + "@typescript-eslint/utils": "8.56.1", "debug": "^4.4.3", "ts-api-utils": "^2.4.0" }, @@ -2285,14 +2173,14 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.54.0.tgz", - "integrity": "sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.1.tgz", + "integrity": "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==", "dev": true, "license": "MIT", "engines": { @@ -2304,18 +2192,18 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.54.0.tgz", - "integrity": "sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.1.tgz", + "integrity": "sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.54.0", - "@typescript-eslint/tsconfig-utils": "8.54.0", - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/visitor-keys": "8.54.0", + "@typescript-eslint/project-service": "8.56.1", + "@typescript-eslint/tsconfig-utils": "8.56.1", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1", "debug": "^4.4.3", - "minimatch": "^9.0.5", + "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.4.0" @@ -2331,43 +2219,17 @@ "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@typescript-eslint/utils": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.54.0.tgz", - "integrity": "sha512-9Cnda8GS57AQakvRyG0PTejJNlA2xhvyNtEVIMlDWOOeEyBkYWhGPnfrIAnqxLMTSTo6q8g12XVjjev5l1NvMA==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.1.tgz", + "integrity": "sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.54.0", - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/typescript-estree": "8.54.0" + "@typescript-eslint/scope-manager": "8.56.1", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/typescript-estree": "8.56.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2377,19 +2239,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.54.0.tgz", - "integrity": "sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.1.tgz", + "integrity": "sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.54.0", - "eslint-visitor-keys": "^4.2.1" + "@typescript-eslint/types": "8.56.1", + "eslint-visitor-keys": "^5.0.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2400,13 +2262,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", "dev": true, "license": "Apache-2.0", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" @@ -2604,9 +2466,9 @@ } }, "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", "bin": { @@ -2838,17 +2700,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/axios": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz", - "integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.11", - "form-data": "^4.0.5", - "proxy-from-env": "^1.1.0" - } - }, "node_modules/b4a": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", @@ -3069,14 +2920,24 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz", + "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/brace-expansion/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" } }, "node_modules/buffer": { @@ -3158,16 +3019,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/camelcase": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", @@ -3463,13 +3314,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, "node_modules/concat-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", @@ -3921,33 +3765,30 @@ } }, "node_modules/eslint": { - "version": "9.39.2", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", - "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.0.2.tgz", + "integrity": "sha512-uYixubwmqJZH+KLVYIVKY1JQt7tysXhtj21WSvjcSmU5SVNzMus1bgLe+pAt816yQ8opKfheVVoPLqvVMGejYw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.1", - "@eslint/config-helpers": "^0.4.2", - "@eslint/core": "^0.17.0", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.39.2", - "@eslint/plugin-kit": "^0.4.1", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.2", + "@eslint/config-helpers": "^0.5.2", + "@eslint/core": "^1.1.0", + "@eslint/plugin-kit": "^0.6.0", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", - "ajv": "^6.12.4", - "chalk": "^4.0.0", + "ajv": "^6.14.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "esquery": "^1.5.0", + "eslint-scope": "^9.1.1", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.1.1", + "esquery": "^1.7.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", @@ -3957,8 +3798,7 @@ "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", + "minimatch": "^10.2.1", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, @@ -3966,7 +3806,7 @@ "eslint": "bin/eslint.js" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://eslint.org/donate" @@ -3981,17 +3821,19 @@ } }, "node_modules/eslint-scope": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.1.tgz", + "integrity": "sha512-GaUN0sWim5qc8KVErfPBWmc31LEsOkrUJbvJZV+xuL3u2phMUK4HIvXlWAakfC8W4nzlK+chPEAkYOYb5ZScIw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" @@ -4027,67 +3869,14 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", "dev": true, "license": "Apache-2.0", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" @@ -4110,45 +3899,32 @@ "dev": true, "license": "MIT" }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.1.1.tgz", + "integrity": "sha512-AVHPqQoZYc+RUM4/3Ly5udlZY/U4LS8pIG05jEjWM2lQMU/oaZ7qshzAl2YP1tfNmXfftH3ohurfwNAug+MnsQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.15.0", + "acorn": "^8.16.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" + "eslint-visitor-keys": "^5.0.1" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", "dev": true, "license": "Apache-2.0", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" @@ -4492,26 +4268,6 @@ "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", "license": "MIT" }, - "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, "node_modules/form-data": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", @@ -4744,19 +4500,6 @@ "node": ">=10.0" } }, - "node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/globalthis": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", @@ -4940,23 +4683,6 @@ "node": ">= 4" } }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -5288,19 +5014,6 @@ "dev": true, "license": "MIT" }, - "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -5414,13 +5127,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, "node_modules/log-symbols": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", @@ -5749,15 +5455,15 @@ } }, "node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.2.tgz", + "integrity": "sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==", "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "brace-expansion": "^5.0.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -6218,19 +5924,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -6456,12 +6149,6 @@ "node": ">= 0.10" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" - }, "node_modules/pump": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", @@ -6616,16 +6303,6 @@ "node": ">=0.10.0" } }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", @@ -7375,19 +7052,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/superagent": { "version": "10.3.0", "resolved": "https://registry.npmjs.org/superagent/-/superagent-10.3.0.tgz", diff --git a/.claude-plugin/memesh/package.json b/.claude-plugin/memesh/package.json index 5efb161a..c50288e6 100644 --- a/.claude-plugin/memesh/package.json +++ b/.claude-plugin/memesh/package.json @@ -34,10 +34,6 @@ "format": "prettier --write 'src/**/*.ts'", "typecheck": "tsc --noEmit", "cred": "tsx src/cli/index.ts cred", - "orchestrator": "tsx src/orchestrator/index.ts", - "dashboard": "tsx src/dashboard/server.ts", - "demo:architecture": "tsx src/agents/architecture/demo.ts", - "demo:dashboard": "tsx examples/dashboard-demo.ts", "mcp": "node dist/mcp/server-bootstrap.js", "docs": "typedoc", "docs:watch": "typedoc --watch", @@ -72,7 +68,7 @@ "url": "https://github.com/PCIRCLE-AI/claude-code-buddy/issues" }, "dependencies": { - "@anthropic-ai/sdk": "^0.74.0", + "@anthropic-ai/sdk": "^0.78.0", "@modelcontextprotocol/sdk": "^1.25.3", "@types/form-data": "^2.2.1", "@types/fs-extra": "^11.0.4", @@ -80,7 +76,6 @@ "@types/multer": "^2.0.0", "@xenova/transformers": "^2.17.2", "asciichart": "^1.5.25", - "axios": "^1.13.2", "better-sqlite3": "^12.6.2", "boxen": "^8.0.1", "chalk": "^5.6.2", @@ -118,11 +113,11 @@ "@types/supertest": "^6.0.3", "@types/uuid": "^11.0.0", "@types/winston": "^2.4.4", - "@typescript-eslint/eslint-plugin": "^8.53.0", - "@typescript-eslint/parser": "^8.53.0", + "@typescript-eslint/eslint-plugin": "^8.56.1", + "@typescript-eslint/parser": "^8.56.1", "@vitest/coverage-v8": "^4.0.17", "ajv": "^8.17.1", - "eslint": "^9.39.2", + "eslint": "^10.0.2", "prettier": "^3.8.0", "supertest": "^7.2.2", "tsx": "^4.19.2", From 411eeaa89de396b3746a046c54a0dd784ff96f4e Mon Sep 17 00:00:00 2001 From: KT <677465+kevintseng@users.noreply.github.com> Date: Wed, 25 Feb 2026 05:41:21 +0800 Subject: [PATCH 14/23] fix(search): wire knowledgeGraph into BuddyHandlers for semantic search BuddyHandlers.handleBuddyRemember() was calling executeBuddyRemember() without the knowledgeGraph parameter, causing all semantic/hybrid search to fall back to keyword-only search via projectMemory.search(). Co-Authored-By: Claude Opus 4.6 --- src/mcp/ServerInitializer.ts | 3 ++- src/mcp/handlers/BuddyHandlers.ts | 8 ++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/mcp/ServerInitializer.ts b/src/mcp/ServerInitializer.ts index c8e1a793..64f85570 100644 --- a/src/mcp/ServerInitializer.ts +++ b/src/mcp/ServerInitializer.ts @@ -218,7 +218,8 @@ export class ServerInitializer { const buddyHandlers = new BuddyHandlers( formatter, projectMemoryManager, - projectAutoTracker + projectAutoTracker, + knowledgeGraph ); // Return all initialized components diff --git a/src/mcp/handlers/BuddyHandlers.ts b/src/mcp/handlers/BuddyHandlers.ts index d8e73fd2..9962ea3f 100644 --- a/src/mcp/handlers/BuddyHandlers.ts +++ b/src/mcp/handlers/BuddyHandlers.ts @@ -18,6 +18,7 @@ import { logError } from '../../utils/errorHandler.js'; import type { ResponseFormatter } from '../../ui/ResponseFormatter.js'; import type { ProjectMemoryManager } from '../../memory/ProjectMemoryManager.js'; import type { ProjectAutoTracker } from '../../memory/ProjectAutoTracker.js'; +import type { KnowledgeGraph } from '../../knowledge-graph/index.js'; import { executeBuddyDo, @@ -43,15 +44,18 @@ import { export class BuddyHandlers { private formatter: ResponseFormatter; private projectMemoryManager: ProjectMemoryManager | undefined; + private knowledgeGraph: KnowledgeGraph | undefined; private autoTracker?: ProjectAutoTracker; constructor( formatter: ResponseFormatter, projectMemoryManager: ProjectMemoryManager | undefined, - autoTracker?: ProjectAutoTracker + autoTracker?: ProjectAutoTracker, + knowledgeGraph?: KnowledgeGraph ) { this.formatter = formatter; this.projectMemoryManager = projectMemoryManager; + this.knowledgeGraph = knowledgeGraph; this.autoTracker = autoTracker; } @@ -196,7 +200,7 @@ export class BuddyHandlers { try { // Safe to use non-null assertion - cloud-only mode check at method start ensures non-null - return await executeBuddyRemember(validatedInput, this.projectMemoryManager!, this.formatter); + return await executeBuddyRemember(validatedInput, this.projectMemoryManager!, this.formatter, this.knowledgeGraph); } catch (error) { logError(error, { component: 'BuddyHandlers', From f505a1b2b9b632d218bbd035e59d559e43ed92e8 Mon Sep 17 00:00:00 2001 From: KT <677465+kevintseng@users.noreply.github.com> Date: Wed, 25 Feb 2026 05:41:37 +0800 Subject: [PATCH 15/23] chore: rebuild plugin dist with search wiring fix Co-Authored-By: Claude Opus 4.6 --- .claude-plugin/memesh/dist/mcp/ServerInitializer.d.ts.map | 2 +- .claude-plugin/memesh/dist/mcp/ServerInitializer.js | 2 +- .claude-plugin/memesh/dist/mcp/ServerInitializer.js.map | 2 +- .claude-plugin/memesh/dist/mcp/handlers/BuddyHandlers.d.ts | 4 +++- .../memesh/dist/mcp/handlers/BuddyHandlers.d.ts.map | 2 +- .claude-plugin/memesh/dist/mcp/handlers/BuddyHandlers.js | 6 ++++-- .../memesh/dist/mcp/handlers/BuddyHandlers.js.map | 2 +- 7 files changed, 12 insertions(+), 8 deletions(-) diff --git a/.claude-plugin/memesh/dist/mcp/ServerInitializer.d.ts.map b/.claude-plugin/memesh/dist/mcp/ServerInitializer.d.ts.map index 86b0b777..1253bd1c 100644 --- a/.claude-plugin/memesh/dist/mcp/ServerInitializer.d.ts.map +++ b/.claude-plugin/memesh/dist/mcp/ServerInitializer.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ServerInitializer.d.ts","sourceRoot":"","sources":["../../src/mcp/ServerInitializer.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAUrD,MAAM,WAAW,gBAAgB;IAE/B,SAAS,EAAE,iBAAiB,CAAC;IAC7B,aAAa,EAAE,aAAa,CAAC;IAC7B,EAAE,EAAE,aAAa,CAAC;IAGlB,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,gBAAgB,CAAC;IAGnC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,EAAE,gBAAgB,CAAC;IAGhC,cAAc,EAAE,cAAc,GAAG,SAAS,CAAC;IAC3C,oBAAoB,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACvD,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,kBAAkB,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACnD,qBAAqB,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAGzD,aAAa,EAAE,OAAO,CAAC;IAGvB,WAAW,EAAE,WAAW,CAAC;IAGzB,cAAc,EAAE,cAAc,CAAC;IAG/B,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;CAC9B;AAcD,qBAAa,iBAAiB;WAMf,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC;CAgLrD"} \ No newline at end of file +{"version":3,"file":"ServerInitializer.d.ts","sourceRoot":"","sources":["../../src/mcp/ServerInitializer.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAUrD,MAAM,WAAW,gBAAgB;IAE/B,SAAS,EAAE,iBAAiB,CAAC;IAC7B,aAAa,EAAE,aAAa,CAAC;IAC7B,EAAE,EAAE,aAAa,CAAC;IAGlB,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,gBAAgB,CAAC;IAGnC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,EAAE,gBAAgB,CAAC;IAGhC,cAAc,EAAE,cAAc,GAAG,SAAS,CAAC;IAC3C,oBAAoB,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACvD,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,kBAAkB,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACnD,qBAAqB,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAGzD,aAAa,EAAE,OAAO,CAAC;IAGvB,WAAW,EAAE,WAAW,CAAC;IAGzB,cAAc,EAAE,cAAc,CAAC;IAG/B,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;CAC9B;AAcD,qBAAa,iBAAiB;WAMf,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC;CAiLrD"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/ServerInitializer.js b/.claude-plugin/memesh/dist/mcp/ServerInitializer.js index fb9c2884..8d8f6bc6 100644 --- a/.claude-plugin/memesh/dist/mcp/ServerInitializer.js +++ b/.claude-plugin/memesh/dist/mcp/ServerInitializer.js @@ -102,7 +102,7 @@ export class ServerInitializer { throw new Error('Sampling not yet connected. This will be wired when MCP SDK sampling is available.'); }); const toolHandlers = new ToolHandlers(agentRegistry, skillManager, uninstallManager, checkpointDetector, hookIntegration, projectMemoryManager, knowledgeGraph, ui, samplingClient, unifiedMemoryStore); - const buddyHandlers = new BuddyHandlers(formatter, projectMemoryManager, projectAutoTracker); + const buddyHandlers = new BuddyHandlers(formatter, projectMemoryManager, projectAutoTracker, knowledgeGraph); return { formatter, agentRegistry, diff --git a/.claude-plugin/memesh/dist/mcp/ServerInitializer.js.map b/.claude-plugin/memesh/dist/mcp/ServerInitializer.js.map index f80f9733..db7631c6 100644 --- a/.claude-plugin/memesh/dist/mcp/ServerInitializer.js.map +++ b/.claude-plugin/memesh/dist/mcp/ServerInitializer.js.map @@ -1 +1 @@ -{"version":3,"file":"ServerInitializer.js","sourceRoot":"","sources":["../../src/mcp/ServerInitializer.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAqDxD,MAAM,OAAO,iBAAiB;IAM5B,MAAM,CAAC,KAAK,CAAC,UAAU;QAErB,IAAI,cAA0C,CAAC;QAE/C,IAAI,CAAC;YAEH,MAAM,SAAS,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAC1C,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;YAC1C,MAAM,EAAE,GAAG,IAAI,aAAa,EAAE,CAAC;YAC/B,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;YACxC,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,YAAY,CAAC,CAAC;YAG5D,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC;YACpD,MAAM,aAAa,GAAG,IAAI,gBAAgB,EAAE,CAAC;YAK7C,MAAM,kBAAkB,GAAG,MAAM,8BAA8B,EAAE,CAAC;YAClE,MAAM,YAAY,GAAG,cAAc,EAAE,CAAC;YACtC,MAAM,aAAa,GAAG,CAAC,kBAAkB,CAAC,SAAS,IAAI,YAAY,CAAC;YAEpE,MAAM,CAAC,IAAI,CAAC,oDAAoD,EAAE;gBAChE,eAAe,EAAE,kBAAkB,CAAC,SAAS;gBAC7C,YAAY;gBACZ,aAAa;aACd,CAAC,CAAC;YAGH,IAAI,oBAAsD,CAAC;YAC3D,IAAI,kBAAkD,CAAC;YACvD,IAAI,qBAAwD,CAAC;YAE7D,IAAI,kBAAkB,CAAC,SAAS,EAAE,CAAC;gBAEjC,MAAM,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;gBAC1E,cAAc,GAAG,cAAc,CAAC,UAAU,EAAE,CAAC;gBAC7C,oBAAoB,GAAG,IAAI,oBAAoB,CAAC,cAAc,CAAC,CAAC;gBAChE,kBAAkB,GAAG,IAAI,kBAAkB,CAAC,cAAc,CAAC,CAAC;gBAC5D,qBAAqB,GAAG,IAAI,qBAAqB,CAAC,cAAc,CAAC,CAAC;gBAGlE,aAAa,CAAC,oBAAoB,CAAC;oBACjC,cAAc,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;wBACrC,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;4BAC9B,cAAe,CAAC,YAAY,CAAC;gCAC3B,IAAI,EAAE,MAAM,CAAC,IAAI;gCACjB,UAAU,EAAE,MAAM,CAAC,UAAwB;gCAC3C,YAAY,EAAE,MAAM,CAAC,YAAY;gCACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;6BAC1B,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;oBACD,WAAW,EAAE,KAAK,EAAE,KAAa,EAAE,EAAE;wBACnC,OAAO,cAAe,CAAC,cAAc,CAAC;4BACpC,WAAW,EAAE,KAAK;4BAClB,KAAK,EAAE,EAAE;yBACV,CAAC,CAAC;oBACL,CAAC;iBACF,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,aAAa,EAAE,CAAC;gBAEzB,MAAM,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;gBACzF,MAAM,CAAC,IAAI,CAAC,+BAA+B,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC;gBACvE,MAAM,CAAC,IAAI,CAAC,mCAAmC,kBAAkB,CAAC,kBAAkB,EAAE,CAAC,CAAC;gBACxF,MAAM,CAAC,IAAI,CAAC,wFAAwF,CAAC,CAAC;gBAGtG,cAAc,GAAG,SAAS,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBAEN,MAAM,QAAQ,GACZ,gGAAgG;oBAChG,iBAAiB,kBAAkB,CAAC,KAAK,IAAI;oBAC7C,eAAe,kBAAkB,CAAC,kBAAkB,IAAI,wBAAwB,MAAM;oBACtF,iCAAiC;oBACjC,sEAAsE;oBACtE,0CAA0C,CAAC;gBAE7C,MAAM,CAAC,KAAK,CAAC,yDAAyD,EAAE;oBACtE,WAAW,EAAE,kBAAkB,CAAC,KAAK;oBACrC,YAAY,EAAE,KAAK;iBACpB,CAAC,CAAC;gBAEH,MAAM,IAAI,kBAAkB,CAAC,QAAQ,EAAE;oBACrC,SAAS,EAAE,mBAAmB;oBAC9B,MAAM,EAAE,YAAY;oBACpB,eAAe,EAAE,KAAK;oBACtB,YAAY,EAAE,KAAK;oBACnB,WAAW,EAAE,kBAAkB,CAAC,KAAK;oBACrC,UAAU,EAAE,kBAAkB,CAAC,kBAAkB;iBAClD,CAAC,CAAC;YACL,CAAC;YAGD,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,CAAC,aAAa,CAAC,CAAC;YAGjE,MAAM,eAAe,GAAG,IAAI,eAAe,CACzC,kBAAkB,EAClB,kBAAkB,CACnB,CAAC;YAGF,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC;gBAClC,iBAAiB,EAAE,EAAE;aACtB,CAAC,CAAC;YAGH,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;gBAC3D,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC;YACxG,CAAC,CAAC,CAAC;YAGH,MAAM,YAAY,GAAG,IAAI,YAAY,CACnC,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,EAAE,EACF,cAAc,EACd,kBAAkB,CACnB,CAAC;YAEF,MAAM,aAAa,GAAG,IAAI,aAAa,CACrC,SAAS,EACT,oBAAoB,EACpB,kBAAkB,CACnB,CAAC;YAGF,OAAO;gBACL,SAAS;gBACT,aAAa;gBACb,EAAE;gBACF,YAAY;gBACZ,gBAAgB;gBAChB,kBAAkB;gBAClB,eAAe;gBACf,aAAa;gBACb,cAAc;gBACd,oBAAoB;gBACpB,kBAAkB;gBAClB,kBAAkB;gBAClB,qBAAqB;gBACrB,aAAa;gBACb,WAAW;gBACX,cAAc;gBACd,YAAY;gBACZ,aAAa;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAEf,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;YAEhE,IAAI,cAAc,EAAE,CAAC;gBACnB,IAAI,CAAC;oBACH,MAAM,cAAc,CAAC,KAAK,EAAE,CAAC;oBAC7B,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;gBAC3C,CAAC;gBAAC,OAAO,YAAY,EAAE,CAAC;oBACtB,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,YAAY,CAAC,CAAC;gBACnE,CAAC;YACH,CAAC;YAED,QAAQ,CAAC,KAAK,EAAE;gBACd,SAAS,EAAE,mBAAmB;gBAC9B,MAAM,EAAE,YAAY;gBACpB,SAAS,EAAE,uBAAuB;aACnC,CAAC,CAAC;YACH,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF"} \ No newline at end of file +{"version":3,"file":"ServerInitializer.js","sourceRoot":"","sources":["../../src/mcp/ServerInitializer.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/handlers/BuddyHandlers.d.ts b/.claude-plugin/memesh/dist/mcp/handlers/BuddyHandlers.d.ts index f171e716..dc276f3c 100644 --- a/.claude-plugin/memesh/dist/mcp/handlers/BuddyHandlers.d.ts +++ b/.claude-plugin/memesh/dist/mcp/handlers/BuddyHandlers.d.ts @@ -2,11 +2,13 @@ import { CallToolResult } from '@modelcontextprotocol/sdk/types.js'; import type { ResponseFormatter } from '../../ui/ResponseFormatter.js'; import type { ProjectMemoryManager } from '../../memory/ProjectMemoryManager.js'; import type { ProjectAutoTracker } from '../../memory/ProjectAutoTracker.js'; +import type { KnowledgeGraph } from '../../knowledge-graph/index.js'; export declare class BuddyHandlers { private formatter; private projectMemoryManager; + private knowledgeGraph; private autoTracker?; - constructor(formatter: ResponseFormatter, projectMemoryManager: ProjectMemoryManager | undefined, autoTracker?: ProjectAutoTracker); + constructor(formatter: ResponseFormatter, projectMemoryManager: ProjectMemoryManager | undefined, autoTracker?: ProjectAutoTracker, knowledgeGraph?: KnowledgeGraph); private isCloudOnlyMode; private cloudOnlyModeError; handleBuddyDo(args: unknown): Promise; diff --git a/.claude-plugin/memesh/dist/mcp/handlers/BuddyHandlers.d.ts.map b/.claude-plugin/memesh/dist/mcp/handlers/BuddyHandlers.d.ts.map index 5738c970..69ed6115 100644 --- a/.claude-plugin/memesh/dist/mcp/handlers/BuddyHandlers.d.ts.map +++ b/.claude-plugin/memesh/dist/mcp/handlers/BuddyHandlers.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BuddyHandlers.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers/BuddyHandlers.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAuB7E,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,oBAAoB,CAAmC;IAC/D,OAAO,CAAC,WAAW,CAAC,CAAqB;gBAGvC,SAAS,EAAE,iBAAiB,EAC5B,oBAAoB,EAAE,oBAAoB,GAAG,SAAS,EACtD,WAAW,CAAC,EAAE,kBAAkB;IAWlC,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,kBAAkB;IAqBpB,aAAa,CACjB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,cAAc,CAAC;IA2DpB,mBAAmB,CACvB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,cAAc,CAAC;IA4DpB,eAAe,CACnB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,cAAc,CAAC;CAkD3B"} \ No newline at end of file +{"version":3,"file":"BuddyHandlers.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers/BuddyHandlers.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAuBrE,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,oBAAoB,CAAmC;IAC/D,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,WAAW,CAAC,CAAqB;gBAGvC,SAAS,EAAE,iBAAiB,EAC5B,oBAAoB,EAAE,oBAAoB,GAAG,SAAS,EACtD,WAAW,CAAC,EAAE,kBAAkB,EAChC,cAAc,CAAC,EAAE,cAAc;IAYjC,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,kBAAkB;IAqBpB,aAAa,CACjB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,cAAc,CAAC;IA2DpB,mBAAmB,CACvB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,cAAc,CAAC;IA4DpB,eAAe,CACnB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,cAAc,CAAC;CAkD3B"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/handlers/BuddyHandlers.js b/.claude-plugin/memesh/dist/mcp/handlers/BuddyHandlers.js index 20aeee33..a430edc6 100644 --- a/.claude-plugin/memesh/dist/mcp/handlers/BuddyHandlers.js +++ b/.claude-plugin/memesh/dist/mcp/handlers/BuddyHandlers.js @@ -7,10 +7,12 @@ import { executeBuddyHelp, BuddyHelpInputSchema, } from '../tools/buddy-help.js' export class BuddyHandlers { formatter; projectMemoryManager; + knowledgeGraph; autoTracker; - constructor(formatter, projectMemoryManager, autoTracker) { + constructor(formatter, projectMemoryManager, autoTracker, knowledgeGraph) { this.formatter = formatter; this.projectMemoryManager = projectMemoryManager; + this.knowledgeGraph = knowledgeGraph; this.autoTracker = autoTracker; } isCloudOnlyMode() { @@ -117,7 +119,7 @@ export class BuddyHandlers { throw error; } try { - return await executeBuddyRemember(validatedInput, this.projectMemoryManager, this.formatter); + return await executeBuddyRemember(validatedInput, this.projectMemoryManager, this.formatter, this.knowledgeGraph); } catch (error) { logError(error, { diff --git a/.claude-plugin/memesh/dist/mcp/handlers/BuddyHandlers.js.map b/.claude-plugin/memesh/dist/mcp/handlers/BuddyHandlers.js.map index b18f31f7..7f72f26b 100644 --- a/.claude-plugin/memesh/dist/mcp/handlers/BuddyHandlers.js.map +++ b/.claude-plugin/memesh/dist/mcp/handlers/BuddyHandlers.js.map @@ -1 +1 @@ -{"version":3,"file":"BuddyHandlers.js","sourceRoot":"","sources":["../../../src/mcp/handlers/BuddyHandlers.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"BuddyHandlers.js","sourceRoot":"","sources":["../../../src/mcp/handlers/BuddyHandlers.ts"],"names":[],"mappings":"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"} \ No newline at end of file From 13ca877436211c38e8bbaae5fe55c8d8113df967 Mon Sep 17 00:00:00 2001 From: KT <677465+kevintseng@users.noreply.github.com> Date: Wed, 25 Feb 2026 05:44:13 +0800 Subject: [PATCH 16/23] fix(test): replace require() with top-level imports in SessionMemoryPipeline test Co-Authored-By: Claude Opus 4.6 --- .../session-memory/SessionMemoryPipeline.test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/integrations/session-memory/SessionMemoryPipeline.test.ts b/tests/integrations/session-memory/SessionMemoryPipeline.test.ts index 825e1cb2..61063824 100644 --- a/tests/integrations/session-memory/SessionMemoryPipeline.test.ts +++ b/tests/integrations/session-memory/SessionMemoryPipeline.test.ts @@ -9,6 +9,8 @@ */ import { describe, it, expect, vi, beforeEach } from 'vitest'; +import { homedir } from 'os'; +import { join } from 'path'; import type { SessionMemoryEvent, ParsedSessionMemory, IngestionResult } from '../../../src/integrations/session-memory/types.js'; import type { InjectionContext } from '../../../src/integrations/session-memory/SessionContextInjector.js'; @@ -147,9 +149,7 @@ describe('SessionMemoryPipeline', () => { expect(pipeline).toBeDefined(); expect(pipeline.isRunning).toBe(false); // The watcher should receive the default projectsDir - const os = require('os'); - const path = require('path'); - const expectedDir = path.join(os.homedir(), '.claude', 'projects'); + const expectedDir = join(homedir(), '.claude', 'projects'); expect(captured.projectsDir).toBe(expectedDir); }); From a1c9fadbbc00803c832977e05578076ff32c6786 Mon Sep 17 00:00:00 2001 From: KT <677465+kevintseng@users.noreply.github.com> Date: Wed, 25 Feb 2026 06:23:16 +0800 Subject: [PATCH 17/23] feat(hooks): add pre-commit code review, subagent tracking, and bundled skills Add 3 new Claude Code hooks and bundled skills installation: - PreToolUse hook: enforces code review before git commit by checking session state and injecting reminder context if review not done - SubagentStop hook: captures code reviewer results to MeMesh KG and marks review as complete for pre-commit enforcement - PostCommit hook: saves git commit context (hash, files, stats) to KG - PostToolUse: add code review tracking for Skill/Task tool invocations - SessionStart: add CLAUDE.md reload into context on startup - Bundled skills: postinstall now copies comprehensive-code-review skill to ~/.claude/skills/sa:comprehensive-code-review/ - Remove disabled hookify rule (block-unauthorized-publish) Co-Authored-By: Claude Opus 4.6 --- .../memesh/dist/skills/SkillManager.d.ts | 33 +++ .../memesh/dist/skills/SkillManager.d.ts.map | 1 + .../memesh/dist/skills/SkillManager.js | 153 ++++++++++ .../memesh/dist/skills/SkillManager.js.map | 1 + .claude-plugin/memesh/dist/skills/index.d.ts | 3 + .../memesh/dist/skills/index.d.ts.map | 1 + .claude-plugin/memesh/dist/skills/index.js | 2 + .../memesh/dist/skills/index.js.map | 1 + .claude-plugin/memesh/scripts/hooks/README.md | 80 ++++- .../memesh/scripts/hooks/post-commit.js | 222 ++++++++++++++ .../memesh/scripts/hooks/post-tool-use.js | 42 +++ .../memesh/scripts/hooks/pre-tool-use.js | 126 ++++++++ .../memesh/scripts/hooks/session-start.js | 44 +++ .../memesh/scripts/hooks/subagent-stop.js | 208 +++++++++++++ .../skills/comprehensive-code-review/SKILL.md | 276 ++++++++++++++++++ ...ookify.block-unauthorized-publish.local.md | 64 ---- .gitignore | 4 +- package.json | 1 + scripts/hooks/README.md | 80 ++++- scripts/hooks/post-commit.js | 222 ++++++++++++++ scripts/hooks/post-tool-use.js | 42 +++ scripts/hooks/pre-tool-use.js | 126 ++++++++ scripts/hooks/session-start.js | 44 +++ scripts/hooks/subagent-stop.js | 208 +++++++++++++ scripts/postinstall-new.js | 87 ++++++ .../skills/comprehensive-code-review/SKILL.md | 276 ++++++++++++++++++ 26 files changed, 2254 insertions(+), 93 deletions(-) create mode 100644 .claude-plugin/memesh/dist/skills/SkillManager.d.ts create mode 100644 .claude-plugin/memesh/dist/skills/SkillManager.d.ts.map create mode 100644 .claude-plugin/memesh/dist/skills/SkillManager.js create mode 100644 .claude-plugin/memesh/dist/skills/SkillManager.js.map create mode 100644 .claude-plugin/memesh/dist/skills/index.d.ts create mode 100644 .claude-plugin/memesh/dist/skills/index.d.ts.map create mode 100644 .claude-plugin/memesh/dist/skills/index.js create mode 100644 .claude-plugin/memesh/dist/skills/index.js.map create mode 100644 .claude-plugin/memesh/scripts/hooks/post-commit.js create mode 100644 .claude-plugin/memesh/scripts/hooks/pre-tool-use.js create mode 100644 .claude-plugin/memesh/scripts/hooks/subagent-stop.js create mode 100644 .claude-plugin/memesh/scripts/skills/comprehensive-code-review/SKILL.md delete mode 100644 .claude/hookify.block-unauthorized-publish.local.md create mode 100644 scripts/hooks/post-commit.js create mode 100644 scripts/hooks/pre-tool-use.js create mode 100644 scripts/hooks/subagent-stop.js create mode 100644 scripts/skills/comprehensive-code-review/SKILL.md diff --git a/.claude-plugin/memesh/dist/skills/SkillManager.d.ts b/.claude-plugin/memesh/dist/skills/SkillManager.d.ts new file mode 100644 index 00000000..7cfc6ebf --- /dev/null +++ b/.claude-plugin/memesh/dist/skills/SkillManager.d.ts @@ -0,0 +1,33 @@ +export interface SkillMetadata { + name: string; + prefixed: string; + isSmartAgents: boolean; + path: string; + createdAt?: Date; + updatedAt?: Date; +} +export interface SkillContent { + name: string; + description: string; + content: string; + category?: string; +} +export declare class SkillManager { + private readonly SKILL_PREFIX; + private readonly SKILLS_DIR; + constructor(skillsDir?: string); + installSkill(skillName: string, content: string): Promise; + listAllSkills(): Promise; + listSmartAgentsSkills(): Promise; + listUserSkills(): Promise; + skillExists(skillName: string): Promise; + getSkillContent(skillName: string): Promise; + updateSkill(skillName: string, content: string): Promise; + deleteSkill(skillName: string): Promise; + private sanitizeSkillName; + private addPrefix; + private removePrefix; + getSkillsDirectory(): string; + getSkillPrefix(): string; +} +//# sourceMappingURL=SkillManager.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/skills/SkillManager.d.ts.map b/.claude-plugin/memesh/dist/skills/SkillManager.d.ts.map new file mode 100644 index 00000000..bdedb6bf --- /dev/null +++ b/.claude-plugin/memesh/dist/skills/SkillManager.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"SkillManager.d.ts","sourceRoot":"","sources":["../../src/skills/SkillManager.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAKD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAOD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,SAAS,CAAC,EAAE,MAAM;IAaxB,YAAY,CAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC;IA+BZ,aAAa,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAmDzC,qBAAqB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAY1C,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAanC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmBhD,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA0BnD,WAAW,CACf,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;IA+BV,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBnD,OAAO,CAAC,iBAAiB;IAyBzB,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,YAAY;IAWpB,kBAAkB,IAAI,MAAM;IAS5B,cAAc,IAAI,MAAM;CAGzB"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/skills/SkillManager.js b/.claude-plugin/memesh/dist/skills/SkillManager.js new file mode 100644 index 00000000..b81015c7 --- /dev/null +++ b/.claude-plugin/memesh/dist/skills/SkillManager.js @@ -0,0 +1,153 @@ +import * as fs from 'fs/promises'; +import * as path from 'path'; +import * as os from 'os'; +export class SkillManager { + SKILL_PREFIX = 'sa:'; + SKILLS_DIR; + constructor(skillsDir) { + this.SKILLS_DIR = + skillsDir || path.join(os.homedir(), '.claude', 'skills'); + } + async installSkill(skillName, content) { + try { + const sanitizedName = this.sanitizeSkillName(skillName); + const prefixedName = this.addPrefix(sanitizedName); + const skillPath = path.join(this.SKILLS_DIR, prefixedName); + await fs.mkdir(skillPath, { recursive: true }); + const skillFilePath = path.join(skillPath, 'skill.md'); + await fs.writeFile(skillFilePath, content, 'utf-8'); + return prefixedName; + } + catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + throw new Error(`Failed to install skill "${skillName}": ${errorMessage}`); + } + } + async listAllSkills() { + try { + await fs.mkdir(this.SKILLS_DIR, { recursive: true }); + const entries = await fs.readdir(this.SKILLS_DIR, { + withFileTypes: true, + }); + const skills = []; + for (const entry of entries) { + if (entry.isDirectory()) { + const skillName = entry.name; + const skillPath = path.join(this.SKILLS_DIR, skillName); + const isSmartAgents = skillName.startsWith(this.SKILL_PREFIX); + const skillFilePath = path.join(skillPath, 'skill.md'); + let stats; + try { + stats = await fs.stat(skillFilePath); + } + catch { + stats = null; + } + skills.push({ + name: skillName, + prefixed: skillName, + isSmartAgents, + path: skillPath, + createdAt: stats?.birthtime, + updatedAt: stats?.mtime, + }); + } + } + return skills; + } + catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + throw new Error(`Failed to list skills: ${errorMessage}`); + } + } + async listSmartAgentsSkills() { + const allSkills = await this.listAllSkills(); + return allSkills + .filter(s => s.isSmartAgents) + .map(s => s.name); + } + async listUserSkills() { + const allSkills = await this.listAllSkills(); + return allSkills + .filter(s => !s.isSmartAgents) + .map(s => s.name); + } + async skillExists(skillName) { + const sanitizedName = this.sanitizeSkillName(skillName); + const prefixedName = this.addPrefix(sanitizedName); + const skillPath = path.join(this.SKILLS_DIR, prefixedName); + try { + await fs.access(skillPath); + return true; + } + catch { + return false; + } + } + async getSkillContent(skillName) { + const sanitizedName = this.sanitizeSkillName(skillName); + const prefixedName = this.addPrefix(sanitizedName); + const skillFilePath = path.join(this.SKILLS_DIR, prefixedName, 'skill.md'); + try { + return await fs.readFile(skillFilePath, 'utf-8'); + } + catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + throw new Error(`Failed to read skill "${skillName}": ${errorMessage}`); + } + } + async updateSkill(skillName, content) { + const sanitizedName = this.sanitizeSkillName(skillName); + const prefixedName = this.addPrefix(sanitizedName); + if (!(await this.skillExists(prefixedName))) { + throw new Error(`Skill "${skillName}" does not exist`); + } + const skillFilePath = path.join(this.SKILLS_DIR, prefixedName, 'skill.md'); + try { + await fs.writeFile(skillFilePath, content, 'utf-8'); + } + catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + throw new Error(`Failed to update skill "${skillName}": ${errorMessage}`); + } + } + async deleteSkill(skillName) { + const sanitizedName = this.sanitizeSkillName(skillName); + const prefixedName = this.addPrefix(sanitizedName); + const skillPath = path.join(this.SKILLS_DIR, prefixedName); + try { + await fs.rm(skillPath, { recursive: true, force: true }); + } + catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + throw new Error(`Failed to delete skill "${skillName}": ${errorMessage}`); + } + } + sanitizeSkillName(skillName) { + const nameWithoutPrefix = skillName.startsWith(this.SKILL_PREFIX) + ? skillName.slice(this.SKILL_PREFIX.length) + : skillName; + const validPattern = /^[a-zA-Z0-9_-]+$/; + if (!validPattern.test(nameWithoutPrefix)) { + throw new Error(`Invalid skill name "${skillName}". Only alphanumeric characters, hyphens, and underscores are allowed.`); + } + return skillName; + } + addPrefix(skillName) { + return skillName.startsWith(this.SKILL_PREFIX) + ? skillName + : `${this.SKILL_PREFIX}${skillName}`; + } + removePrefix(skillName) { + return skillName.startsWith(this.SKILL_PREFIX) + ? skillName.slice(this.SKILL_PREFIX.length) + : skillName; + } + getSkillsDirectory() { + return this.SKILLS_DIR; + } + getSkillPrefix() { + return this.SKILL_PREFIX; + } +} +//# sourceMappingURL=SkillManager.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/skills/SkillManager.js.map b/.claude-plugin/memesh/dist/skills/SkillManager.js.map new file mode 100644 index 00000000..cad980fd --- /dev/null +++ b/.claude-plugin/memesh/dist/skills/SkillManager.js.map @@ -0,0 +1 @@ +{"version":3,"file":"SkillManager.js","sourceRoot":"","sources":["../../src/skills/SkillManager.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AA6BzB,MAAM,OAAO,YAAY;IACN,YAAY,GAAG,KAAK,CAAC;IACrB,UAAU,CAAS;IAEpC,YAAY,SAAkB;QAE5B,IAAI,CAAC,UAAU;YACb,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC9D,CAAC;IASD,KAAK,CAAC,YAAY,CAChB,SAAiB,EACjB,OAAe;QAEf,IAAI,CAAC;YAEH,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAGxD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YAGnD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;YAC3D,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAG/C,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YACvD,MAAM,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAEpD,OAAO,YAAY,CAAC;QACtB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzD,MAAM,IAAI,KAAK,CACb,4BAA4B,SAAS,MAAM,YAAY,EAAE,CAC1D,CAAC;QACJ,CAAC;IACH,CAAC;IAOD,KAAK,CAAC,aAAa;QACjB,IAAI,CAAC;YAEH,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAErD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE;gBAChD,aAAa,EAAE,IAAI;aACpB,CAAC,CAAC;YAEH,MAAM,MAAM,GAAoB,EAAE,CAAC;YAEnC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACxB,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;oBAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;oBACxD,MAAM,aAAa,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBAG9D,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;oBACvD,IAAI,KAAK,CAAC;oBACV,IAAI,CAAC;wBACH,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oBACvC,CAAC;oBAAC,MAAM,CAAC;wBAEP,KAAK,GAAG,IAAI,CAAC;oBACf,CAAC;oBAED,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,SAAS;wBACf,QAAQ,EAAE,SAAS;wBACnB,aAAa;wBACb,IAAI,EAAE,SAAS;wBACf,SAAS,EAAE,KAAK,EAAE,SAAS;wBAC3B,SAAS,EAAE,KAAK,EAAE,KAAK;qBACxB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,0BAA0B,YAAY,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAOD,KAAK,CAAC,qBAAqB;QACzB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC7C,OAAO,SAAS;aACb,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;aAC5B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAOD,KAAK,CAAC,cAAc;QAClB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC7C,OAAO,SAAS;aACb,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;aAC7B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAQD,KAAK,CAAC,WAAW,CAAC,SAAiB;QACjC,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACxD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAE3D,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAQD,KAAK,CAAC,eAAe,CAAC,SAAiB;QACrC,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACxD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACnD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAC7B,IAAI,CAAC,UAAU,EACf,YAAY,EACZ,UAAU,CACX,CAAC;QAEF,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzD,MAAM,IAAI,KAAK,CACb,yBAAyB,SAAS,MAAM,YAAY,EAAE,CACvD,CAAC;QACJ,CAAC;IACH,CAAC;IAQD,KAAK,CAAC,WAAW,CACf,SAAiB,EACjB,OAAe;QAEf,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACxD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAGnD,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,UAAU,SAAS,kBAAkB,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAC7B,IAAI,CAAC,UAAU,EACf,YAAY,EACZ,UAAU,CACX,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzD,MAAM,IAAI,KAAK,CACb,2BAA2B,SAAS,MAAM,YAAY,EAAE,CACzD,CAAC;QACJ,CAAC;IACH,CAAC;IAOD,KAAK,CAAC,WAAW,CAAC,SAAiB;QACjC,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACxD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAE3D,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzD,MAAM,IAAI,KAAK,CACb,2BAA2B,SAAS,MAAM,YAAY,EAAE,CACzD,CAAC;QACJ,CAAC;IACH,CAAC;IASO,iBAAiB,CAAC,SAAiB;QAEzC,MAAM,iBAAiB,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;YAC/D,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YAC3C,CAAC,CAAC,SAAS,CAAC;QAId,MAAM,YAAY,GAAG,kBAAkB,CAAC;QAExC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CACb,uBAAuB,SAAS,wEAAwE,CACzG,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAQO,SAAS,CAAC,SAAiB;QACjC,OAAO,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;YAC5C,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,GAAG,SAAS,EAAE,CAAC;IACzC,CAAC;IAQO,YAAY,CAAC,SAAiB;QACpC,OAAO,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;YAC5C,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YAC3C,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IAOD,kBAAkB;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAOD,cAAc;QACZ,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;CACF"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/skills/index.d.ts b/.claude-plugin/memesh/dist/skills/index.d.ts new file mode 100644 index 00000000..7e9e0caf --- /dev/null +++ b/.claude-plugin/memesh/dist/skills/index.d.ts @@ -0,0 +1,3 @@ +export { SkillManager } from './SkillManager.js'; +export type { SkillMetadata, SkillContent } from './SkillManager.js'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/skills/index.d.ts.map b/.claude-plugin/memesh/dist/skills/index.d.ts.map new file mode 100644 index 00000000..b6bc5e8f --- /dev/null +++ b/.claude-plugin/memesh/dist/skills/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/skills/index.js b/.claude-plugin/memesh/dist/skills/index.js new file mode 100644 index 00000000..032f7582 --- /dev/null +++ b/.claude-plugin/memesh/dist/skills/index.js @@ -0,0 +1,2 @@ +export { SkillManager } from './SkillManager.js'; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/skills/index.js.map b/.claude-plugin/memesh/dist/skills/index.js.map new file mode 100644 index 00000000..9a783b02 --- /dev/null +++ b/.claude-plugin/memesh/dist/skills/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/scripts/hooks/README.md b/.claude-plugin/memesh/scripts/hooks/README.md index b065278c..7a89a9ca 100644 --- a/.claude-plugin/memesh/scripts/hooks/README.md +++ b/.claude-plugin/memesh/scripts/hooks/README.md @@ -1,13 +1,16 @@ # MeMesh Hooks for Claude Code -**What are these?** Small scripts that run automatically when you use Claude Code. They help MeMesh remember what you did. +**What are these?** Small scripts that run automatically when you use Claude Code. They help MeMesh remember what you did and enforce code quality. ## What They Do | When | What Happens | |------|--------------| -| **You open Claude Code** | Shows what you did in your last session | -| **You use tools** | Quietly tracks your work | +| **You open Claude Code** | Reloads CLAUDE.md, shows last session recap | +| **Before a tool runs** | Pre-commit: reminds to run code review | +| **After a tool runs** | Quietly tracks your work, detects patterns | +| **You make a git commit** | Saves commit context to knowledge graph | +| **A subagent finishes** | Saves code review results, tracks completion | | **You close Claude Code** | Saves a summary for next time | ## Installation @@ -22,17 +25,35 @@ chmod +x ~/.claude/hooks/*.js --- -## Auto-Memory (The Main Feature) +## Features -### How It Works +### Auto-Memory ``` -Open Claude Code → Work normally → Close Claude Code - ↓ ↓ ↓ -See last session MeMesh watches Saves summary - summary (you won't notice) for next time +Open Claude Code → Work normally → Git commit → Close Claude Code + ↓ ↓ ↓ ↓ +Reload CLAUDE.md MeMesh watches Save commit Save session ++ recall memory (you won't notice) to KG summary ``` +### Pre-Commit Code Review Enforcement + +``` +git commit detected → Code review done? → Yes → Allow commit + → No → Inject reminder to run + @comprehensive-code-review +``` + +The pre-commit hook tracks whether code review was invoked during the session +(via Skill tool, Task tool, or code-reviewer subagent). If no review was done, +it adds context reminding Claude to run the comprehensive code review first. + +### Subagent Tracking + +When code reviewer subagents finish, their findings are saved to the MeMesh +knowledge graph for future reference. This builds a history of code review +insights across sessions. + ### What You'll See on Startup ``` @@ -57,6 +78,7 @@ See last session MeMesh watches Saves summary | 💡 | Things you learned | | ⚠️ | Problems you ran into | | 🎯 | Decisions you made | +| 🔍 | Code review findings | --- @@ -79,6 +101,12 @@ cp scripts/hooks/*.js ~/.claude/hooks/ ls ~/.memesh/knowledge-graph.db ``` +### "Pre-commit review not triggering" + +The pre-commit hook only fires for `git commit` commands (not `--amend`). +Make sure `pre-tool-use.js` is in `~/.claude/hooks/` and the hook is +registered for the `PreToolUse` event in settings. + ## Limitations | What | Details | @@ -93,10 +121,33 @@ ls ~/.memesh/knowledge-graph.db ``` ~/.claude/hooks/ -├── session-start.js ← Runs when you open Claude Code -├── post-tool-use.js ← Runs after each tool (quietly) -├── stop.js ← Runs when you close Claude Code -└── hook-utils.js ← Shared helper code +├── session-start.js ← SessionStart: reload CLAUDE.md, recall memory +├── pre-tool-use.js ← PreToolUse: pre-commit code review enforcement +├── post-tool-use.js ← PostToolUse: track work patterns, detect anomalies +├── post-commit.js ← PostToolUse: save commit context to KG +├── subagent-stop.js ← SubagentStop: capture code review results +├── stop.js ← Stop: save session summary, archive, cleanup +└── hook-utils.js ← Shared helper code (SQLite, file I/O, etc.) +``` + +### Hook Event Flow + +``` +SessionStart ──→ PreToolUse ──→ [Tool Executes] ──→ PostToolUse + ↓ + (git commit?) + ↓ + PostCommit hook + saves to KG + +Task(subagent) ──→ [Subagent works] ──→ SubagentStop + ↓ + (code reviewer?) + ↓ + Save to KG + + mark review done + +Session ends ──→ Stop ──→ Save summary ──→ Archive ──→ Cleanup ``` --- @@ -106,7 +157,8 @@ ls ~/.memesh/knowledge-graph.db ### Test hooks work ```bash -node --check ~/.claude/hooks/session-start.js +# Syntax check all hooks +for f in ~/.claude/hooks/*.js; do node --check "$f" && echo "OK: $f"; done ``` ### Change settings diff --git a/.claude-plugin/memesh/scripts/hooks/post-commit.js b/.claude-plugin/memesh/scripts/hooks/post-commit.js new file mode 100644 index 00000000..d131d8c5 --- /dev/null +++ b/.claude-plugin/memesh/scripts/hooks/post-commit.js @@ -0,0 +1,222 @@ +#!/usr/bin/env node + +/** + * PostCommit Hook - Auto-save commit context to MeMesh Knowledge Graph + * + * Registered as a PostToolUse hook. Detects git commit commands and + * saves the commit details (message, files changed, diff summary) + * to the MeMesh knowledge graph for future recall. + * + * This runs silently — no console output to avoid interrupting workflow. + */ + +import { + MEMESH_DB_PATH, + readStdin, + sqliteQuery, + getDateString, + logError, + logMemorySave, +} from './hook-utils.js'; +import fs from 'fs'; +import { execFileSync } from 'child_process'; + +// ============================================================================ +// Git Commit Detection +// ============================================================================ + +/** + * Check if a Bash tool call is a git commit + * @param {Object} toolData - Normalized tool data + * @returns {boolean} + */ +function isGitCommit(toolData) { + if (toolData.toolName !== 'Bash') return false; + if (!toolData.success) return false; + + const cmd = toolData.arguments?.command || ''; + return /git\s+commit\s/.test(cmd) && !cmd.includes('--amend'); +} + +// ============================================================================ +// Git Info Extraction +// ============================================================================ + +/** + * Extract latest commit details using git CLI + * @returns {{ hash: string, subject: string, body: string, filesChanged: string[], diffStat: string } | null} + */ +function getLatestCommitInfo() { + try { + // Get commit hash and message + const logOutput = execFileSync('git', [ + 'log', '-1', + '--format=%H%n%s%n%b', + ], { encoding: 'utf-8', timeout: 5000 }).trim(); + + const lines = logOutput.split('\n'); + const hash = lines[0] || ''; + const subject = lines[1] || ''; + const body = lines.slice(2).join('\n').trim(); + + // Get files changed + const diffNameOnly = execFileSync('git', [ + 'diff-tree', '--no-commit-id', '--name-only', '-r', 'HEAD', + ], { encoding: 'utf-8', timeout: 5000 }).trim(); + + const filesChanged = diffNameOnly ? diffNameOnly.split('\n').filter(Boolean) : []; + + // Get diff stat (compact summary) + const diffStat = execFileSync('git', [ + 'diff-tree', '--no-commit-id', '--stat', 'HEAD', + ], { encoding: 'utf-8', timeout: 5000 }).trim(); + + return { hash, subject, body, filesChanged, diffStat }; + } catch (error) { + logError('getLatestCommitInfo', error); + return null; + } +} + +// ============================================================================ +// MeMesh KG Save +// ============================================================================ + +/** + * Save commit context to MeMesh knowledge graph + * @param {Object} commitInfo - Commit details + * @returns {boolean} True if saved + */ +function saveCommitToKG(commitInfo) { + try { + if (!fs.existsSync(MEMESH_DB_PATH)) { + return false; + } + + const { hash, subject, body, filesChanged, diffStat } = commitInfo; + const shortHash = hash.substring(0, 7); + const now = new Date().toISOString(); + const entityName = `Commit ${shortHash}: ${subject}`; + + // Build observations + const observations = []; + observations.push(`Commit: ${shortHash} - ${subject}`); + + if (body) { + observations.push(`Details: ${body.substring(0, 200)}`); + } + + if (filesChanged.length > 0) { + const fileList = filesChanged.length <= 10 + ? filesChanged.join(', ') + : `${filesChanged.slice(0, 10).join(', ')} (+${filesChanged.length - 10} more)`; + observations.push(`Files changed (${filesChanged.length}): ${fileList}`); + } + + // Group files by directory for context + if (filesChanged.length > 0) { + const dirs = {}; + filesChanged.forEach(f => { + const dir = f.split('/').slice(0, 2).join('/'); + dirs[dir] = (dirs[dir] || 0) + 1; + }); + const areaSummary = Object.entries(dirs) + .sort((a, b) => b[1] - a[1]) + .slice(0, 5) + .map(([dir, count]) => `${dir} (${count})`) + .join(', '); + observations.push(`Areas: ${areaSummary}`); + } + + if (diffStat) { + // Extract just the summary line (e.g., "5 files changed, 120 insertions(+), 30 deletions(-)") + const statLines = diffStat.split('\n'); + const summaryLine = statLines[statLines.length - 1]?.trim(); + if (summaryLine) { + observations.push(`Stats: ${summaryLine}`); + } + } + + // Create entity + const insertEntity = 'INSERT INTO entities (name, type, created_at, metadata) VALUES (?, ?, ?, ?)'; + const metadata = JSON.stringify({ + hash: shortHash, + fullHash: hash, + filesCount: filesChanged.length, + source: 'post-commit-hook', + }); + sqliteQuery(MEMESH_DB_PATH, insertEntity, [entityName, 'commit', now, metadata]); + + // Get entity ID + const entityIdResult = sqliteQuery( + MEMESH_DB_PATH, + 'SELECT id FROM entities WHERE name = ?', + [entityName] + ); + const entityId = parseInt(entityIdResult, 10); + if (isNaN(entityId)) return false; + + // Add observations + for (const obs of observations) { + sqliteQuery( + MEMESH_DB_PATH, + 'INSERT INTO observations (entity_id, content, created_at) VALUES (?, ?, ?)', + [entityId, obs, now] + ); + } + + // Add tags + const tags = ['commit', 'auto-tracked', `date:${getDateString()}`, 'scope:project']; + for (const tag of tags) { + sqliteQuery( + MEMESH_DB_PATH, + 'INSERT INTO tags (entity_id, tag) VALUES (?, ?)', + [entityId, tag] + ); + } + + logMemorySave(`Commit saved: ${shortHash} - ${subject} (${filesChanged.length} files)`); + return true; + } catch (error) { + logError('saveCommitToKG', error); + return false; + } +} + +// ============================================================================ +// Main +// ============================================================================ + +async function postCommit() { + try { + const input = await readStdin(3000); + if (!input || input.trim() === '') { + process.exit(0); + } + + const rawData = JSON.parse(input); + const toolData = { + toolName: rawData.tool_name || rawData.toolName || 'unknown', + arguments: rawData.tool_input || rawData.arguments || {}, + success: rawData.success !== false, + }; + + // Only act on successful git commits + if (!isGitCommit(toolData)) { + process.exit(0); + } + + // Extract commit info and save + const commitInfo = getLatestCommitInfo(); + if (commitInfo) { + saveCommitToKG(commitInfo); + } + + process.exit(0); + } catch (error) { + logError('PostCommit', error); + process.exit(1); + } +} + +postCommit(); diff --git a/.claude-plugin/memesh/scripts/hooks/post-tool-use.js b/.claude-plugin/memesh/scripts/hooks/post-tool-use.js index 18c62128..79e21333 100755 --- a/.claude-plugin/memesh/scripts/hooks/post-tool-use.js +++ b/.claude-plugin/memesh/scripts/hooks/post-tool-use.js @@ -521,6 +521,43 @@ function checkAndSaveKeyPoints(sessionState, sessionContext) { } } +// ============================================================================ +// Code Review Tracking +// ============================================================================ + +/** + * Check if this tool call is a code review invocation. + * Detects both Skill tool usage and Task tool dispatching code reviewers. + * @param {Object} toolData - Normalized tool data + * @returns {boolean} + */ +function isCodeReviewInvocation(toolData) { + // Skill tool with code review + if (toolData.toolName === 'Skill') { + const name = toolData.arguments?.name || toolData.arguments?.skill_name || ''; + return /code.?review|comprehensive.?code.?review/i.test(name); + } + + // Task tool dispatching code reviewer subagent + if (toolData.toolName === 'Task') { + const subagentType = toolData.arguments?.subagent_type || ''; + return /code.?review/i.test(subagentType); + } + + return false; +} + +/** + * Mark code review as done in session state. + * This flag is checked by pre-tool-use.js before git commits. + */ +function markCodeReviewDone() { + const session = readJSONFile(CURRENT_SESSION_FILE, {}); + session.codeReviewDone = true; + session.codeReviewTimestamp = new Date().toISOString(); + writeJSONFile(CURRENT_SESSION_FILE, session); +} + // ============================================================================ // Tool Data Normalization // ============================================================================ @@ -558,6 +595,11 @@ async function postToolUse() { const rawData = JSON.parse(input); const toolData = normalizeToolData(rawData); + // Track code review invocations (for pre-commit enforcement) + if (isCodeReviewInvocation(toolData)) { + markCodeReviewDone(); + } + // Initialize pattern detector const detector = new PatternDetector(); diff --git a/.claude-plugin/memesh/scripts/hooks/pre-tool-use.js b/.claude-plugin/memesh/scripts/hooks/pre-tool-use.js new file mode 100644 index 00000000..fc4d0021 --- /dev/null +++ b/.claude-plugin/memesh/scripts/hooks/pre-tool-use.js @@ -0,0 +1,126 @@ +#!/usr/bin/env node + +/** + * PreToolUse Hook - Pre-commit Code Review Enforcement + * + * Triggered before each tool execution in Claude Code. + * + * Features: + * - Pre-commit code review enforcement: injects reminder to run + * comprehensive-code-review before git commit if review hasn't + * been done in the current session + * - Fast exit for non-commit tools (minimal overhead) + * - Runs silently for non-relevant operations + */ + +import { + STATE_DIR, + readJSONFile, + readStdin, + logError, +} from './hook-utils.js'; +import path from 'path'; + +// ============================================================================ +// Constants +// ============================================================================ + +const CURRENT_SESSION_FILE = path.join(STATE_DIR, 'current-session.json'); + +// ============================================================================ +// Git Commit Detection +// ============================================================================ + +/** + * Check if this Bash command is a git commit + * @param {Object} toolInput - Tool input arguments + * @returns {boolean} + */ +function isGitCommit(toolInput) { + const cmd = toolInput?.command || ''; + return /git\s+commit\s/.test(cmd) && !cmd.includes('--amend'); +} + +// ============================================================================ +// Code Review Status +// ============================================================================ + +/** + * Check if code review was performed in this session. + * The flag is set by post-tool-use.js (Skill/Task detection) + * or subagent-stop.js (code-reviewer subagent completion). + * @returns {boolean} + */ +function wasCodeReviewDone() { + const session = readJSONFile(CURRENT_SESSION_FILE, {}); + return session.codeReviewDone === true; +} + +// ============================================================================ +// Hook Response +// ============================================================================ + +/** + * Output hook response as JSON to stdout. + * Claude Code reads this to apply hook decisions. + * @param {Object} response - Hook response object + */ +function respond(response) { + process.stdout.write(JSON.stringify(response)); +} + +// ============================================================================ +// Main +// ============================================================================ + +async function preToolUse() { + try { + const input = await readStdin(3000); + if (!input || input.trim() === '') { + process.exit(0); + } + + const data = JSON.parse(input); + const toolName = data.tool_name || data.toolName || ''; + const toolInput = data.tool_input || data.arguments || {}; + + // Fast exit: only process Bash commands that are git commits + if (toolName !== 'Bash' || !isGitCommit(toolInput)) { + process.exit(0); + } + + // If code review was already done this session, allow commit + if (wasCodeReviewDone()) { + process.exit(0); + } + + // No code review detected — inject reminder context for Claude + respond({ + hookSpecificOutput: { + hookEventName: 'PreToolUse', + additionalContext: [ + '', + 'PRE-COMMIT REVIEW REMINDER:', + 'No comprehensive code review was detected in this session.', + 'Before committing significant changes, run: @comprehensive-code-review', + '', + 'The review checks for:', + '- Ripple Map: unsynchronized cross-file changes', + '- Reality Check: phantom imports, ghost methods, schema drift', + '- Cross-boundary Sync: type parity, client parity, route-SDK match', + '- Security, concurrency, error handling, and 7 other dimensions', + '', + 'Skip only for trivial changes (typo fixes, formatting, comments).', + '', + ].join('\n'), + }, + }); + + process.exit(0); + } catch (error) { + logError('PreToolUse', error); + process.exit(0); // Never block on hook errors + } +} + +preToolUse(); diff --git a/.claude-plugin/memesh/scripts/hooks/session-start.js b/.claude-plugin/memesh/scripts/hooks/session-start.js index 01cfc174..bb5b1456 100755 --- a/.claude-plugin/memesh/scripts/hooks/session-start.js +++ b/.claude-plugin/memesh/scripts/hooks/session-start.js @@ -298,6 +298,47 @@ function displayRecalledMemory(recalledData) { console.log(''); } +// ============================================================================ +// CLAUDE.md Reload +// ============================================================================ + +/** + * Find and display project CLAUDE.md content on session start. + * This ensures instructions are fresh in context even after compaction. + * Searches: CWD/.claude/CLAUDE.md, CWD/CLAUDE.md + */ +function reloadClaudeMd() { + const cwd = process.cwd(); + const candidates = [ + path.join(cwd, '.claude', 'CLAUDE.md'), + path.join(cwd, 'CLAUDE.md'), + ]; + + for (const candidate of candidates) { + try { + if (fs.existsSync(candidate)) { + const content = fs.readFileSync(candidate, 'utf-8'); + const lineCount = content.split('\n').length; + const relativePath = path.relative(cwd, candidate); + + console.log('═'.repeat(60)); + console.log(' 📋 CLAUDE.md Reloaded'); + console.log('═'.repeat(60)); + console.log(''); + console.log(` Source: ${relativePath} (${lineCount} lines)`); + console.log(''); + console.log(content); + console.log(''); + console.log('═'.repeat(60)); + console.log(''); + return; + } + } catch { + // Skip unreadable files + } + } +} + // ============================================================================ // Main Session Start Logic // ============================================================================ @@ -305,6 +346,9 @@ function displayRecalledMemory(recalledData) { function sessionStart() { console.log('\n🚀 Smart-Agents Session Started\n'); + // Reload project CLAUDE.md into context + reloadClaudeMd(); + // Check MeMesh availability const ccbStatus = checkCCBAvailability(); displayCCBStatus(ccbStatus); diff --git a/.claude-plugin/memesh/scripts/hooks/subagent-stop.js b/.claude-plugin/memesh/scripts/hooks/subagent-stop.js new file mode 100644 index 00000000..30d7691f --- /dev/null +++ b/.claude-plugin/memesh/scripts/hooks/subagent-stop.js @@ -0,0 +1,208 @@ +#!/usr/bin/env node + +/** + * SubagentStop Hook - Capture Subagent Results to MeMesh Knowledge Graph + * + * Triggered when a subagent finishes execution. + * + * Features: + * - Saves code review findings to MeMesh KG (high-value results) + * - Tracks code review completion for pre-commit enforcement + * - Updates session state with subagent activity + * - Silent operation (no console output) + */ + +import { + STATE_DIR, + MEMESH_DB_PATH, + readJSONFile, + writeJSONFile, + sqliteQuery, + getDateString, + readStdin, + logError, + logMemorySave, +} from './hook-utils.js'; +import fs from 'fs'; +import path from 'path'; + +// ============================================================================ +// Constants +// ============================================================================ + +const CURRENT_SESSION_FILE = path.join(STATE_DIR, 'current-session.json'); + +/** Agent types that count as code review */ +const CODE_REVIEWER_TYPES = [ + 'code-reviewer', + 'code-review', + 'superpowers:code-reviewer', + 'pr-review-toolkit:code-reviewer', + 'feature-dev:code-reviewer', +]; + +// ============================================================================ +// Code Review Detection +// ============================================================================ + +/** + * Check if this subagent is a code reviewer + * @param {string} agentType - Subagent type identifier + * @returns {boolean} + */ +function isCodeReviewer(agentType) { + if (!agentType) return false; + const lower = agentType.toLowerCase(); + return CODE_REVIEWER_TYPES.some(t => lower.includes(t.toLowerCase())); +} + +/** + * Mark code review as done in session state. + * This flag is checked by pre-tool-use.js before git commits. + */ +function markCodeReviewDone() { + const session = readJSONFile(CURRENT_SESSION_FILE, {}); + session.codeReviewDone = true; + session.codeReviewTimestamp = new Date().toISOString(); + writeJSONFile(CURRENT_SESSION_FILE, session); +} + +// ============================================================================ +// MeMesh KG Save +// ============================================================================ + +/** + * Save code review results to MeMesh knowledge graph. + * Only saves code reviewer subagent results (high-value findings). + * + * @param {string} agentType - Subagent type + * @param {string} lastMessage - Agent's final response + * @returns {boolean} True if saved + */ +function saveSubagentToKG(agentType, lastMessage) { + try { + if (!fs.existsSync(MEMESH_DB_PATH)) return false; + if (!lastMessage || lastMessage.length < 50) return false; + + const now = new Date().toISOString(); + + // Truncate very long messages + const shortMessage = lastMessage.length > 1000 + ? lastMessage.substring(0, 1000) + '...' + : lastMessage; + + const entityName = `Code Review: ${getDateString()} ${agentType}`; + const metadata = JSON.stringify({ + agentType, + messageLength: lastMessage.length, + source: 'subagent-stop-hook', + }); + + // Create entity + sqliteQuery( + MEMESH_DB_PATH, + 'INSERT INTO entities (name, type, created_at, metadata) VALUES (?, ?, ?, ?)', + [entityName, 'code_review', now, metadata] + ); + + // Get entity ID + const entityIdResult = sqliteQuery( + MEMESH_DB_PATH, + 'SELECT id FROM entities WHERE name = ?', + [entityName] + ); + const entityId = parseInt(entityIdResult, 10); + if (isNaN(entityId)) return false; + + // Add observation with the review findings + sqliteQuery( + MEMESH_DB_PATH, + 'INSERT INTO observations (entity_id, content, created_at) VALUES (?, ?, ?)', + [entityId, `[${agentType}] ${shortMessage}`, now] + ); + + // Add tags + const tags = [ + 'code-review', + `agent:${agentType}`, + `date:${getDateString()}`, + 'auto-tracked', + 'scope:project', + ]; + for (const tag of tags) { + sqliteQuery( + MEMESH_DB_PATH, + 'INSERT INTO tags (entity_id, tag) VALUES (?, ?)', + [entityId, tag] + ); + } + + logMemorySave(`Code review saved: ${agentType} (${lastMessage.length} chars)`); + return true; + } catch (error) { + logError('saveSubagentToKG', error); + return false; + } +} + +// ============================================================================ +// Session State Update +// ============================================================================ + +/** + * Track subagent activity in session state + * @param {string} agentType - Subagent type + */ +function trackSubagentInSession(agentType) { + const session = readJSONFile(CURRENT_SESSION_FILE, { subagents: [] }); + if (!session.subagents) session.subagents = []; + + session.subagents.push({ + type: agentType, + completedAt: new Date().toISOString(), + }); + + // Keep only last 20 subagent entries + if (session.subagents.length > 20) { + session.subagents = session.subagents.slice(-20); + } + + writeJSONFile(CURRENT_SESSION_FILE, session); +} + +// ============================================================================ +// Main +// ============================================================================ + +async function subagentStop() { + try { + const input = await readStdin(3000); + if (!input || input.trim() === '') { + process.exit(0); + } + + const data = JSON.parse(input); + const agentType = data.agent_type || data.agentType || 'unknown'; + const lastMessage = data.last_assistant_message || data.lastAssistantMessage || ''; + + // Track all subagent completions in session state + trackSubagentInSession(agentType); + + // Track code review completion (for pre-commit enforcement) + if (isCodeReviewer(agentType)) { + markCodeReviewDone(); + } + + // Save code reviewer results to MeMesh KG (high-value findings) + if (isCodeReviewer(agentType) && lastMessage.length > 50) { + saveSubagentToKG(agentType, lastMessage); + } + + process.exit(0); + } catch (error) { + logError('SubagentStop', error); + process.exit(0); // Never block on hook errors + } +} + +subagentStop(); diff --git a/.claude-plugin/memesh/scripts/skills/comprehensive-code-review/SKILL.md b/.claude-plugin/memesh/scripts/skills/comprehensive-code-review/SKILL.md new file mode 100644 index 00000000..5e5105e3 --- /dev/null +++ b/.claude-plugin/memesh/scripts/skills/comprehensive-code-review/SKILL.md @@ -0,0 +1,276 @@ +--- +name: comprehensive-code-review +description: | + Complete code review framework with mandatory tool-verified checks and anti-hallucination enforcement. + Use when: performing code reviews, reviewing PRs, checking code quality before merge. + Keywords: code review, review code, 代碼審查, PR review, pull request, 檢查代碼. + Auto-triggers on: "code review", "review the code", "run code review". +--- + +# Comprehensive Code Review Framework v4.0 + +**Philosophy**: 不信任自己。用工具證明一切。沒有 evidence 的 check 等於沒做。 + +**v4.0 vs v3.0**: v3.0 說了「應該檢查什麼」但沒強制怎麼做。v4.0 的每一步都是**必須用工具執行並產出 evidence** 的指令,不是建議。 + +--- + +## 🔴 Step 0: Ripple Map(強制首步,不可跳過) + +**PURPOSE**: 在做任何 review 之前,先找出所有「改了 A 就必須改 B」的連鎖反應。 + +**這是 v4.0 最重要的改變。** 之前的 review 只看「已改的檔案寫得對不對」,從不問「還有哪些檔案該改但沒改」。 + +### 執行方式(必須用工具) + +``` +FOR EACH modified file: + 1. 找出這個文件中被新增/修改的 export(type, function, constant) + 2. Grep 整個 codebase 找出所有 import 這些 export 的文件 + 3. 這些文件是否也在本次修改範圍內? + - 是 → 後續 review 時檢查一致性 + - 否 → 🔴 SUSPECT: 可能遺漏。立即 Read 該文件確認是否需要更新 +``` + +### 必須執行的工具命令 + +```bash +# 1. 列出所有修改的文件 +git diff --name-only HEAD # 或 review 指定的文件列表 + +# 2. 對每個被修改的 interface/type/function,搜尋所有引用 +Grep: pattern="DeliverParams" # 每個被修改的型別名 +Grep: pattern="deliverOrder" # 每個被修改的函數名 +Grep: pattern="delivery_result" # 每個被新增的 DB column + +# 3. 比對:引用這些東西的文件 vs 本次修改的文件 +# 差集 = 可能遺漏的文件 +``` + +### Ripple Map Output 格式(必須產出) + +``` +## Ripple Map + +| Changed Symbol | Files That Reference It | In Scope? | Verified? | +|----------------|------------------------|-----------|-----------| +| `DeliverParams` | sdk/types.ts, sdk/client.ts, deliver/route.ts | ✅/❌ | Read 確認 | +| `deliverOrder()` | client.ts, sdk/client.ts, example/index.ts | ✅/❌ | Read 確認 | +| `delivery_result` | supabase.ts, api-utils.ts, deliver/route.ts | ✅/❌ | Read 確認 | + +🔴 Unsynchronized: [列出所有引用但未修改的文件] +``` + +**如果 Ripple Map 發現 unsynchronized 文件,直接列為 CRITICAL issue,不需要進入後續維度。** + +--- + +## Step 1: Scope Analysis + +確認審查範圍: +- 哪些文件被修改?(用 git diff 或文件列表,不可憑記憶) +- 變更的目的是什麼? +- **有幾個 package/module 邊界被跨越?** +- **Ripple Map 發現多少個 unsynchronized 文件?** + +--- + +## Step 2: Mandatory Verification Dimensions + +**12 個維度。Dim 11 和 12 是最高優先級,必須用 Explore subagent 或多個 Read/Grep 並行執行。** + +**每個 check 必須產出 evidence。格式:** +``` +[DIM-11a] ✅ PASS — import { validateOutputSchema } from '@/lib/api-utils' + Evidence: Read api-utils.ts → line 118: export function validateOutputSchema(...) + +[DIM-12d] 🔴 FAIL — SDK DeliverParams missing deliveryResult + Evidence: Read packages/sdk/src/types.ts:177-180 → only has deliveryHash, deliveryMetadata +``` + +**沒有 evidence 的 ✅ 等於 ❌。** + +--- + +### 🔴 Dim 11: Reality Check(必須用 Explore subagent 執行) + +**IMPORTANT: 這個維度必須 dispatch 至少一個 Explore subagent 來獨立驗證。不可自己看一眼就說 PASS。** + +**Subagent prompt 模板**: +``` +In [project_path], verify the following for files [list]: +1. Every import resolves to a real export (read the source file to confirm) +2. Every method call references a method that exists in the target class +3. Every DB column referenced exists in migrations +4. Search for TODO/FIXME/STUB in all modified files +5. For every new function: grep for callers — is it actually called from somewhere? +Report exact findings with file:line evidence for each. +``` + +**11a-11f 檢查項目**(subagent 必須全部執行): + +| Check | Tool | What to verify | +|-------|------|----------------| +| 11a. Import/Export | Read 被 import 的文件 | export 真的存在 | +| 11b. Method calls | Read 被呼叫的 class | method 真的定義了 | +| 11c. DB schema | Read migration files | column 在 migration 裡 | +| 11d. Example code | Read constructor + method 簽名 | 參數和回傳值匹配 | +| 11e. Stubs | Grep TODO/FIXME/STUB/throw.*not.impl | 無假完成 | +| 11f. Dead wire | Grep function name across codebase | 有 caller 存在 | + +--- + +### 🔴 Dim 12: Cross-boundary Sync(必須用 Explore subagent 執行) + +**IMPORTANT: Monorepo 或多 package 專案時,此維度必須 dispatch 獨立 subagent。** + +**Subagent prompt 模板**: +``` +In [project_path], check cross-boundary type synchronization: +1. Compare [platform types file] with [SDK types file] — list every interface + that exists in both. For each, compare field-by-field. +2. Compare [platform client file] with [SDK client file] — list every method + that exists in both. For each, compare signature. +3. For every API route that accepts a body: read the route handler AND the SDK + method that calls it. Do the field names match? +4. Trace: migration column → DbType → mapResponse → API type → SDK type. + Report any broken links. +Report ALL mismatches with exact file:line evidence. +``` + +**12a-12d 檢查項目**(subagent 必須全部執行): + +| Check | What | How | +|-------|------|-----| +| 12a. Type parity | 同名 interface 欄位一致 | Read 兩個 type 文件,逐欄比對 | +| 12b. Client parity | 同名 method 簽名一致 | Read 兩個 client 文件,逐方法比對 | +| 12c. Route↔SDK match | Route body 欄位 = SDK params 欄位 | Read route + SDK method | +| 12d. Full chain | migration→DbType→mapper→ApiType→SdkType | 追蹤新增欄位通過每一層 | + +--- + +### Dim 1-10: Standard Quality Dimensions + +#### 1. 🔒 Security +- Injection attacks (SQL, Command, Path traversal) +- Sensitive data exposure +- Auth/AuthZ gaps, hardcoded secrets + +#### 2. 🔄 Concurrency +- Race conditions (TOCTOU), deadlocks +- Atomic operation needs + +#### 3. 💾 Resource Management +- Resource leaks, unbounded buffers +- Timer/listener cleanup + +#### 4. ❌ Error Handling +- Uncaught exceptions, empty catch +- Unhandled Promise rejections + +#### 5. 📊 Edge Cases +- Empty/null/NaN/zero/MAX values +- First run / cold start + +#### 6. ✅ Input Validation +- Type, range, format, length validation + +#### 7. ⚡ Performance +- O(n²), blocking I/O, N+1 queries + +#### 8. 📝 Code Quality +- Dead code, magic numbers, naming + +#### 9. 📖 Documentation +- API docs, outdated comments + +#### 10. 🧪 Test Coverage +- Happy/error/edge paths tested +- New functions have corresponding tests + +--- + +## Step 3: Issue Classification + +| Level | Symbol | Criteria | Action | +|-------|--------|----------|--------| +| CRITICAL | 🔴 | Security, crash, **hallucination, broken integration, missing sync** | Fix immediately | +| MAJOR | 🟠 | Bugs, leaks, performance, type mismatch | Fix before merge | +| MINOR | 🟡 | Quality, maintenance | Document | + +**鐵則**: Dim 11/12 的 issue 最低 MAJOR,大部分 CRITICAL。 + +--- + +## Step 4: Fix Dispatch + +``` +Dispatch subagents in parallel (max 6): +- Group by file or logical module +- Each subagent: fix root cause → run related tests → validate no regression +- After all complete: run full test suite +- After full suite: re-run Ripple Map to verify no new gaps +``` + +--- + +## Step 5: Final Verification Gate + +**在宣稱 review 完成前,必須全部通過:** + +``` +□ Ripple Map 無 unsynchronized 文件 +□ Dim 11 所有 check 有 evidence 且 PASS +□ Dim 12 所有 check 有 evidence 且 PASS +□ 所有 CRITICAL issues 已修復 +□ 所有 MAJOR issues 已修復 +□ MINOR issues 已記錄 +□ tsc --noEmit pass(主專案) +□ tsc --noEmit pass(每個子 package 獨立跑) +□ 全部測試 pass +□ Build pass +``` + +**如果任何 check 缺少 evidence,整個 review 標記為 INCOMPLETE。** + +--- + +## AI 幻想模式速查表 + +| # | Pattern | 怎麼偵測 | 工具 | +|---|---------|---------|------| +| 1 | **Ghost Method** — 呼叫不存在的方法 | Read class file, search method | Read | +| 2 | **Phantom Import** — import 不存在的 export | Read source file | Read/Grep | +| 3 | **Schema Drift** — 讀寫不存在的 DB column | Read all migrations | Read | +| 4 | **Type Island** — 只改一邊的 type | Ripple Map 自動抓 | Grep | +| 5 | **Dead Wire** — 定義了但沒被呼叫 | Grep function name | Grep | +| 6 | **Stub Disguise** — TODO/return {} 偽裝完成 | Grep TODO/FIXME/STUB | Grep | +| 7 | **Constructor Lie** — 參數不匹配 | Read constructor | Read | +| 8 | **Mock Leak** — test mock 了但 prod 沒實作 | Check real implementation | Read | +| 9 | **One-side Fix** — 改了 A 忘改 B | Ripple Map 自動抓 | Grep | +| 10 | **Verify Theater** — tsc pass 但只跑主 package | 獨立跑每個子 package tsc | Bash | + +--- + +## 何時執行 + +| 觸發條件 | 執行範圍 | +|---------|---------| +| 新功能 > 100 lines | Full review (all 12 dims) | +| API/DB schema 變更 | Full review + 強制 Dim 11/12 | +| 跨 package 變更 | Full review + 強制 Dim 12 | +| Bug fix < 50 lines | Quick review (Dim 11 + 改動相關維度) | +| 任何 monorepo 變更 | 至少 Ripple Map + Dim 12 | + +--- + +**Version**: 4.0 +**Last Updated**: 2026-02-22 +**Changelog**: +- v4.0: 新增 Step 0 Ripple Map — 強制發現遺漏的連鎖修改 +- v4.0: Dim 11/12 必須 dispatch Explore subagent 獨立驗證 +- v4.0: 每個 check 必須產出 evidence,無 evidence = 未完成 +- v4.0: 新增 Verify Theater pattern(tsc pass 但只跑主 package) +- v4.0: 新增 Final Verification Gate — 子 package 必須獨立跑 tsc +- v3.0: Added Dim 11/12, hallucination pattern table +- v2.0: Initial 10-dimension framework diff --git a/.claude/hookify.block-unauthorized-publish.local.md b/.claude/hookify.block-unauthorized-publish.local.md deleted file mode 100644 index 1bad1c6e..00000000 --- a/.claude/hookify.block-unauthorized-publish.local.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -name: block-unauthorized-publish -enabled: false -event: bash -pattern: npm\s+publish|npm\s+version\s+(patch|minor|major)|git\s+push.*--tags|vercel\s+--prod -action: block ---- - -# 🚨 UNAUTHORIZED PUBLISH ATTEMPT BLOCKED - -**This command requires explicit user approval.** - -## What was blocked - -You attempted to run a publish/deploy command without user approval. - -## Mandatory Process - -1. ✅ Complete all work and testing -2. ✅ Commit changes to git -3. ⛔ **STOP - Report to user first** -4. ❌ **DO NOT run publish commands** - -## What you MUST do instead - -**Report to user:** -``` -修復完成報告: - -✅ 已完成: -- [列出修復內容] -- [列出通過的測試] - -📦 準備發布: -- 版本:v{version} -- 變更:[主要變更摘要] - -請確認是否可以發布到 npm? -``` - -**Wait for user to explicitly say:** -- "OK to publish" -- "Proceed" -- "發布吧" - -**ONLY THEN** can you run the publish command. - -## Why this rule exists - -User explicitly stated: -- "口頭保證一點都不值錢" -- "必須要有一個實際有效的機制做法" - -This rule was created on 2026-02-08 after repeated violations of publishing without approval. - -## Last violation - -2026-02-08: Published v2.8.2 to npm without user approval, causing severe loss of trust. - ---- - -**This is a BLOCKING rule. The command will NOT execute.** - -**Ask user for approval first.** diff --git a/.gitignore b/.gitignore index 8e8c7a8d..5b4f1b89 100644 --- a/.gitignore +++ b/.gitignore @@ -301,7 +301,9 @@ planning-docs/ # Experimental code (cleaned up - do not recreate) experiments/ -skills/ +/skills/ +!scripts/skills/ +!.claude-plugin/memesh/scripts/skills/ # Manual Test Scripts - DO NOT PUSH tests/manual/** diff --git a/package.json b/package.json index c50288e6..a6554025 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "dist/", "scripts/postinstall-new.js", "scripts/postinstall-lib.js", + "scripts/skills/", "plugin.json", "mcp.json", "README.md", diff --git a/scripts/hooks/README.md b/scripts/hooks/README.md index b065278c..7a89a9ca 100644 --- a/scripts/hooks/README.md +++ b/scripts/hooks/README.md @@ -1,13 +1,16 @@ # MeMesh Hooks for Claude Code -**What are these?** Small scripts that run automatically when you use Claude Code. They help MeMesh remember what you did. +**What are these?** Small scripts that run automatically when you use Claude Code. They help MeMesh remember what you did and enforce code quality. ## What They Do | When | What Happens | |------|--------------| -| **You open Claude Code** | Shows what you did in your last session | -| **You use tools** | Quietly tracks your work | +| **You open Claude Code** | Reloads CLAUDE.md, shows last session recap | +| **Before a tool runs** | Pre-commit: reminds to run code review | +| **After a tool runs** | Quietly tracks your work, detects patterns | +| **You make a git commit** | Saves commit context to knowledge graph | +| **A subagent finishes** | Saves code review results, tracks completion | | **You close Claude Code** | Saves a summary for next time | ## Installation @@ -22,17 +25,35 @@ chmod +x ~/.claude/hooks/*.js --- -## Auto-Memory (The Main Feature) +## Features -### How It Works +### Auto-Memory ``` -Open Claude Code → Work normally → Close Claude Code - ↓ ↓ ↓ -See last session MeMesh watches Saves summary - summary (you won't notice) for next time +Open Claude Code → Work normally → Git commit → Close Claude Code + ↓ ↓ ↓ ↓ +Reload CLAUDE.md MeMesh watches Save commit Save session ++ recall memory (you won't notice) to KG summary ``` +### Pre-Commit Code Review Enforcement + +``` +git commit detected → Code review done? → Yes → Allow commit + → No → Inject reminder to run + @comprehensive-code-review +``` + +The pre-commit hook tracks whether code review was invoked during the session +(via Skill tool, Task tool, or code-reviewer subagent). If no review was done, +it adds context reminding Claude to run the comprehensive code review first. + +### Subagent Tracking + +When code reviewer subagents finish, their findings are saved to the MeMesh +knowledge graph for future reference. This builds a history of code review +insights across sessions. + ### What You'll See on Startup ``` @@ -57,6 +78,7 @@ See last session MeMesh watches Saves summary | 💡 | Things you learned | | ⚠️ | Problems you ran into | | 🎯 | Decisions you made | +| 🔍 | Code review findings | --- @@ -79,6 +101,12 @@ cp scripts/hooks/*.js ~/.claude/hooks/ ls ~/.memesh/knowledge-graph.db ``` +### "Pre-commit review not triggering" + +The pre-commit hook only fires for `git commit` commands (not `--amend`). +Make sure `pre-tool-use.js` is in `~/.claude/hooks/` and the hook is +registered for the `PreToolUse` event in settings. + ## Limitations | What | Details | @@ -93,10 +121,33 @@ ls ~/.memesh/knowledge-graph.db ``` ~/.claude/hooks/ -├── session-start.js ← Runs when you open Claude Code -├── post-tool-use.js ← Runs after each tool (quietly) -├── stop.js ← Runs when you close Claude Code -└── hook-utils.js ← Shared helper code +├── session-start.js ← SessionStart: reload CLAUDE.md, recall memory +├── pre-tool-use.js ← PreToolUse: pre-commit code review enforcement +├── post-tool-use.js ← PostToolUse: track work patterns, detect anomalies +├── post-commit.js ← PostToolUse: save commit context to KG +├── subagent-stop.js ← SubagentStop: capture code review results +├── stop.js ← Stop: save session summary, archive, cleanup +└── hook-utils.js ← Shared helper code (SQLite, file I/O, etc.) +``` + +### Hook Event Flow + +``` +SessionStart ──→ PreToolUse ──→ [Tool Executes] ──→ PostToolUse + ↓ + (git commit?) + ↓ + PostCommit hook + saves to KG + +Task(subagent) ──→ [Subagent works] ──→ SubagentStop + ↓ + (code reviewer?) + ↓ + Save to KG + + mark review done + +Session ends ──→ Stop ──→ Save summary ──→ Archive ──→ Cleanup ``` --- @@ -106,7 +157,8 @@ ls ~/.memesh/knowledge-graph.db ### Test hooks work ```bash -node --check ~/.claude/hooks/session-start.js +# Syntax check all hooks +for f in ~/.claude/hooks/*.js; do node --check "$f" && echo "OK: $f"; done ``` ### Change settings diff --git a/scripts/hooks/post-commit.js b/scripts/hooks/post-commit.js new file mode 100644 index 00000000..d131d8c5 --- /dev/null +++ b/scripts/hooks/post-commit.js @@ -0,0 +1,222 @@ +#!/usr/bin/env node + +/** + * PostCommit Hook - Auto-save commit context to MeMesh Knowledge Graph + * + * Registered as a PostToolUse hook. Detects git commit commands and + * saves the commit details (message, files changed, diff summary) + * to the MeMesh knowledge graph for future recall. + * + * This runs silently — no console output to avoid interrupting workflow. + */ + +import { + MEMESH_DB_PATH, + readStdin, + sqliteQuery, + getDateString, + logError, + logMemorySave, +} from './hook-utils.js'; +import fs from 'fs'; +import { execFileSync } from 'child_process'; + +// ============================================================================ +// Git Commit Detection +// ============================================================================ + +/** + * Check if a Bash tool call is a git commit + * @param {Object} toolData - Normalized tool data + * @returns {boolean} + */ +function isGitCommit(toolData) { + if (toolData.toolName !== 'Bash') return false; + if (!toolData.success) return false; + + const cmd = toolData.arguments?.command || ''; + return /git\s+commit\s/.test(cmd) && !cmd.includes('--amend'); +} + +// ============================================================================ +// Git Info Extraction +// ============================================================================ + +/** + * Extract latest commit details using git CLI + * @returns {{ hash: string, subject: string, body: string, filesChanged: string[], diffStat: string } | null} + */ +function getLatestCommitInfo() { + try { + // Get commit hash and message + const logOutput = execFileSync('git', [ + 'log', '-1', + '--format=%H%n%s%n%b', + ], { encoding: 'utf-8', timeout: 5000 }).trim(); + + const lines = logOutput.split('\n'); + const hash = lines[0] || ''; + const subject = lines[1] || ''; + const body = lines.slice(2).join('\n').trim(); + + // Get files changed + const diffNameOnly = execFileSync('git', [ + 'diff-tree', '--no-commit-id', '--name-only', '-r', 'HEAD', + ], { encoding: 'utf-8', timeout: 5000 }).trim(); + + const filesChanged = diffNameOnly ? diffNameOnly.split('\n').filter(Boolean) : []; + + // Get diff stat (compact summary) + const diffStat = execFileSync('git', [ + 'diff-tree', '--no-commit-id', '--stat', 'HEAD', + ], { encoding: 'utf-8', timeout: 5000 }).trim(); + + return { hash, subject, body, filesChanged, diffStat }; + } catch (error) { + logError('getLatestCommitInfo', error); + return null; + } +} + +// ============================================================================ +// MeMesh KG Save +// ============================================================================ + +/** + * Save commit context to MeMesh knowledge graph + * @param {Object} commitInfo - Commit details + * @returns {boolean} True if saved + */ +function saveCommitToKG(commitInfo) { + try { + if (!fs.existsSync(MEMESH_DB_PATH)) { + return false; + } + + const { hash, subject, body, filesChanged, diffStat } = commitInfo; + const shortHash = hash.substring(0, 7); + const now = new Date().toISOString(); + const entityName = `Commit ${shortHash}: ${subject}`; + + // Build observations + const observations = []; + observations.push(`Commit: ${shortHash} - ${subject}`); + + if (body) { + observations.push(`Details: ${body.substring(0, 200)}`); + } + + if (filesChanged.length > 0) { + const fileList = filesChanged.length <= 10 + ? filesChanged.join(', ') + : `${filesChanged.slice(0, 10).join(', ')} (+${filesChanged.length - 10} more)`; + observations.push(`Files changed (${filesChanged.length}): ${fileList}`); + } + + // Group files by directory for context + if (filesChanged.length > 0) { + const dirs = {}; + filesChanged.forEach(f => { + const dir = f.split('/').slice(0, 2).join('/'); + dirs[dir] = (dirs[dir] || 0) + 1; + }); + const areaSummary = Object.entries(dirs) + .sort((a, b) => b[1] - a[1]) + .slice(0, 5) + .map(([dir, count]) => `${dir} (${count})`) + .join(', '); + observations.push(`Areas: ${areaSummary}`); + } + + if (diffStat) { + // Extract just the summary line (e.g., "5 files changed, 120 insertions(+), 30 deletions(-)") + const statLines = diffStat.split('\n'); + const summaryLine = statLines[statLines.length - 1]?.trim(); + if (summaryLine) { + observations.push(`Stats: ${summaryLine}`); + } + } + + // Create entity + const insertEntity = 'INSERT INTO entities (name, type, created_at, metadata) VALUES (?, ?, ?, ?)'; + const metadata = JSON.stringify({ + hash: shortHash, + fullHash: hash, + filesCount: filesChanged.length, + source: 'post-commit-hook', + }); + sqliteQuery(MEMESH_DB_PATH, insertEntity, [entityName, 'commit', now, metadata]); + + // Get entity ID + const entityIdResult = sqliteQuery( + MEMESH_DB_PATH, + 'SELECT id FROM entities WHERE name = ?', + [entityName] + ); + const entityId = parseInt(entityIdResult, 10); + if (isNaN(entityId)) return false; + + // Add observations + for (const obs of observations) { + sqliteQuery( + MEMESH_DB_PATH, + 'INSERT INTO observations (entity_id, content, created_at) VALUES (?, ?, ?)', + [entityId, obs, now] + ); + } + + // Add tags + const tags = ['commit', 'auto-tracked', `date:${getDateString()}`, 'scope:project']; + for (const tag of tags) { + sqliteQuery( + MEMESH_DB_PATH, + 'INSERT INTO tags (entity_id, tag) VALUES (?, ?)', + [entityId, tag] + ); + } + + logMemorySave(`Commit saved: ${shortHash} - ${subject} (${filesChanged.length} files)`); + return true; + } catch (error) { + logError('saveCommitToKG', error); + return false; + } +} + +// ============================================================================ +// Main +// ============================================================================ + +async function postCommit() { + try { + const input = await readStdin(3000); + if (!input || input.trim() === '') { + process.exit(0); + } + + const rawData = JSON.parse(input); + const toolData = { + toolName: rawData.tool_name || rawData.toolName || 'unknown', + arguments: rawData.tool_input || rawData.arguments || {}, + success: rawData.success !== false, + }; + + // Only act on successful git commits + if (!isGitCommit(toolData)) { + process.exit(0); + } + + // Extract commit info and save + const commitInfo = getLatestCommitInfo(); + if (commitInfo) { + saveCommitToKG(commitInfo); + } + + process.exit(0); + } catch (error) { + logError('PostCommit', error); + process.exit(1); + } +} + +postCommit(); diff --git a/scripts/hooks/post-tool-use.js b/scripts/hooks/post-tool-use.js index 18c62128..79e21333 100755 --- a/scripts/hooks/post-tool-use.js +++ b/scripts/hooks/post-tool-use.js @@ -521,6 +521,43 @@ function checkAndSaveKeyPoints(sessionState, sessionContext) { } } +// ============================================================================ +// Code Review Tracking +// ============================================================================ + +/** + * Check if this tool call is a code review invocation. + * Detects both Skill tool usage and Task tool dispatching code reviewers. + * @param {Object} toolData - Normalized tool data + * @returns {boolean} + */ +function isCodeReviewInvocation(toolData) { + // Skill tool with code review + if (toolData.toolName === 'Skill') { + const name = toolData.arguments?.name || toolData.arguments?.skill_name || ''; + return /code.?review|comprehensive.?code.?review/i.test(name); + } + + // Task tool dispatching code reviewer subagent + if (toolData.toolName === 'Task') { + const subagentType = toolData.arguments?.subagent_type || ''; + return /code.?review/i.test(subagentType); + } + + return false; +} + +/** + * Mark code review as done in session state. + * This flag is checked by pre-tool-use.js before git commits. + */ +function markCodeReviewDone() { + const session = readJSONFile(CURRENT_SESSION_FILE, {}); + session.codeReviewDone = true; + session.codeReviewTimestamp = new Date().toISOString(); + writeJSONFile(CURRENT_SESSION_FILE, session); +} + // ============================================================================ // Tool Data Normalization // ============================================================================ @@ -558,6 +595,11 @@ async function postToolUse() { const rawData = JSON.parse(input); const toolData = normalizeToolData(rawData); + // Track code review invocations (for pre-commit enforcement) + if (isCodeReviewInvocation(toolData)) { + markCodeReviewDone(); + } + // Initialize pattern detector const detector = new PatternDetector(); diff --git a/scripts/hooks/pre-tool-use.js b/scripts/hooks/pre-tool-use.js new file mode 100644 index 00000000..fc4d0021 --- /dev/null +++ b/scripts/hooks/pre-tool-use.js @@ -0,0 +1,126 @@ +#!/usr/bin/env node + +/** + * PreToolUse Hook - Pre-commit Code Review Enforcement + * + * Triggered before each tool execution in Claude Code. + * + * Features: + * - Pre-commit code review enforcement: injects reminder to run + * comprehensive-code-review before git commit if review hasn't + * been done in the current session + * - Fast exit for non-commit tools (minimal overhead) + * - Runs silently for non-relevant operations + */ + +import { + STATE_DIR, + readJSONFile, + readStdin, + logError, +} from './hook-utils.js'; +import path from 'path'; + +// ============================================================================ +// Constants +// ============================================================================ + +const CURRENT_SESSION_FILE = path.join(STATE_DIR, 'current-session.json'); + +// ============================================================================ +// Git Commit Detection +// ============================================================================ + +/** + * Check if this Bash command is a git commit + * @param {Object} toolInput - Tool input arguments + * @returns {boolean} + */ +function isGitCommit(toolInput) { + const cmd = toolInput?.command || ''; + return /git\s+commit\s/.test(cmd) && !cmd.includes('--amend'); +} + +// ============================================================================ +// Code Review Status +// ============================================================================ + +/** + * Check if code review was performed in this session. + * The flag is set by post-tool-use.js (Skill/Task detection) + * or subagent-stop.js (code-reviewer subagent completion). + * @returns {boolean} + */ +function wasCodeReviewDone() { + const session = readJSONFile(CURRENT_SESSION_FILE, {}); + return session.codeReviewDone === true; +} + +// ============================================================================ +// Hook Response +// ============================================================================ + +/** + * Output hook response as JSON to stdout. + * Claude Code reads this to apply hook decisions. + * @param {Object} response - Hook response object + */ +function respond(response) { + process.stdout.write(JSON.stringify(response)); +} + +// ============================================================================ +// Main +// ============================================================================ + +async function preToolUse() { + try { + const input = await readStdin(3000); + if (!input || input.trim() === '') { + process.exit(0); + } + + const data = JSON.parse(input); + const toolName = data.tool_name || data.toolName || ''; + const toolInput = data.tool_input || data.arguments || {}; + + // Fast exit: only process Bash commands that are git commits + if (toolName !== 'Bash' || !isGitCommit(toolInput)) { + process.exit(0); + } + + // If code review was already done this session, allow commit + if (wasCodeReviewDone()) { + process.exit(0); + } + + // No code review detected — inject reminder context for Claude + respond({ + hookSpecificOutput: { + hookEventName: 'PreToolUse', + additionalContext: [ + '', + 'PRE-COMMIT REVIEW REMINDER:', + 'No comprehensive code review was detected in this session.', + 'Before committing significant changes, run: @comprehensive-code-review', + '', + 'The review checks for:', + '- Ripple Map: unsynchronized cross-file changes', + '- Reality Check: phantom imports, ghost methods, schema drift', + '- Cross-boundary Sync: type parity, client parity, route-SDK match', + '- Security, concurrency, error handling, and 7 other dimensions', + '', + 'Skip only for trivial changes (typo fixes, formatting, comments).', + '', + ].join('\n'), + }, + }); + + process.exit(0); + } catch (error) { + logError('PreToolUse', error); + process.exit(0); // Never block on hook errors + } +} + +preToolUse(); diff --git a/scripts/hooks/session-start.js b/scripts/hooks/session-start.js index 01cfc174..bb5b1456 100755 --- a/scripts/hooks/session-start.js +++ b/scripts/hooks/session-start.js @@ -298,6 +298,47 @@ function displayRecalledMemory(recalledData) { console.log(''); } +// ============================================================================ +// CLAUDE.md Reload +// ============================================================================ + +/** + * Find and display project CLAUDE.md content on session start. + * This ensures instructions are fresh in context even after compaction. + * Searches: CWD/.claude/CLAUDE.md, CWD/CLAUDE.md + */ +function reloadClaudeMd() { + const cwd = process.cwd(); + const candidates = [ + path.join(cwd, '.claude', 'CLAUDE.md'), + path.join(cwd, 'CLAUDE.md'), + ]; + + for (const candidate of candidates) { + try { + if (fs.existsSync(candidate)) { + const content = fs.readFileSync(candidate, 'utf-8'); + const lineCount = content.split('\n').length; + const relativePath = path.relative(cwd, candidate); + + console.log('═'.repeat(60)); + console.log(' 📋 CLAUDE.md Reloaded'); + console.log('═'.repeat(60)); + console.log(''); + console.log(` Source: ${relativePath} (${lineCount} lines)`); + console.log(''); + console.log(content); + console.log(''); + console.log('═'.repeat(60)); + console.log(''); + return; + } + } catch { + // Skip unreadable files + } + } +} + // ============================================================================ // Main Session Start Logic // ============================================================================ @@ -305,6 +346,9 @@ function displayRecalledMemory(recalledData) { function sessionStart() { console.log('\n🚀 Smart-Agents Session Started\n'); + // Reload project CLAUDE.md into context + reloadClaudeMd(); + // Check MeMesh availability const ccbStatus = checkCCBAvailability(); displayCCBStatus(ccbStatus); diff --git a/scripts/hooks/subagent-stop.js b/scripts/hooks/subagent-stop.js new file mode 100644 index 00000000..30d7691f --- /dev/null +++ b/scripts/hooks/subagent-stop.js @@ -0,0 +1,208 @@ +#!/usr/bin/env node + +/** + * SubagentStop Hook - Capture Subagent Results to MeMesh Knowledge Graph + * + * Triggered when a subagent finishes execution. + * + * Features: + * - Saves code review findings to MeMesh KG (high-value results) + * - Tracks code review completion for pre-commit enforcement + * - Updates session state with subagent activity + * - Silent operation (no console output) + */ + +import { + STATE_DIR, + MEMESH_DB_PATH, + readJSONFile, + writeJSONFile, + sqliteQuery, + getDateString, + readStdin, + logError, + logMemorySave, +} from './hook-utils.js'; +import fs from 'fs'; +import path from 'path'; + +// ============================================================================ +// Constants +// ============================================================================ + +const CURRENT_SESSION_FILE = path.join(STATE_DIR, 'current-session.json'); + +/** Agent types that count as code review */ +const CODE_REVIEWER_TYPES = [ + 'code-reviewer', + 'code-review', + 'superpowers:code-reviewer', + 'pr-review-toolkit:code-reviewer', + 'feature-dev:code-reviewer', +]; + +// ============================================================================ +// Code Review Detection +// ============================================================================ + +/** + * Check if this subagent is a code reviewer + * @param {string} agentType - Subagent type identifier + * @returns {boolean} + */ +function isCodeReviewer(agentType) { + if (!agentType) return false; + const lower = agentType.toLowerCase(); + return CODE_REVIEWER_TYPES.some(t => lower.includes(t.toLowerCase())); +} + +/** + * Mark code review as done in session state. + * This flag is checked by pre-tool-use.js before git commits. + */ +function markCodeReviewDone() { + const session = readJSONFile(CURRENT_SESSION_FILE, {}); + session.codeReviewDone = true; + session.codeReviewTimestamp = new Date().toISOString(); + writeJSONFile(CURRENT_SESSION_FILE, session); +} + +// ============================================================================ +// MeMesh KG Save +// ============================================================================ + +/** + * Save code review results to MeMesh knowledge graph. + * Only saves code reviewer subagent results (high-value findings). + * + * @param {string} agentType - Subagent type + * @param {string} lastMessage - Agent's final response + * @returns {boolean} True if saved + */ +function saveSubagentToKG(agentType, lastMessage) { + try { + if (!fs.existsSync(MEMESH_DB_PATH)) return false; + if (!lastMessage || lastMessage.length < 50) return false; + + const now = new Date().toISOString(); + + // Truncate very long messages + const shortMessage = lastMessage.length > 1000 + ? lastMessage.substring(0, 1000) + '...' + : lastMessage; + + const entityName = `Code Review: ${getDateString()} ${agentType}`; + const metadata = JSON.stringify({ + agentType, + messageLength: lastMessage.length, + source: 'subagent-stop-hook', + }); + + // Create entity + sqliteQuery( + MEMESH_DB_PATH, + 'INSERT INTO entities (name, type, created_at, metadata) VALUES (?, ?, ?, ?)', + [entityName, 'code_review', now, metadata] + ); + + // Get entity ID + const entityIdResult = sqliteQuery( + MEMESH_DB_PATH, + 'SELECT id FROM entities WHERE name = ?', + [entityName] + ); + const entityId = parseInt(entityIdResult, 10); + if (isNaN(entityId)) return false; + + // Add observation with the review findings + sqliteQuery( + MEMESH_DB_PATH, + 'INSERT INTO observations (entity_id, content, created_at) VALUES (?, ?, ?)', + [entityId, `[${agentType}] ${shortMessage}`, now] + ); + + // Add tags + const tags = [ + 'code-review', + `agent:${agentType}`, + `date:${getDateString()}`, + 'auto-tracked', + 'scope:project', + ]; + for (const tag of tags) { + sqliteQuery( + MEMESH_DB_PATH, + 'INSERT INTO tags (entity_id, tag) VALUES (?, ?)', + [entityId, tag] + ); + } + + logMemorySave(`Code review saved: ${agentType} (${lastMessage.length} chars)`); + return true; + } catch (error) { + logError('saveSubagentToKG', error); + return false; + } +} + +// ============================================================================ +// Session State Update +// ============================================================================ + +/** + * Track subagent activity in session state + * @param {string} agentType - Subagent type + */ +function trackSubagentInSession(agentType) { + const session = readJSONFile(CURRENT_SESSION_FILE, { subagents: [] }); + if (!session.subagents) session.subagents = []; + + session.subagents.push({ + type: agentType, + completedAt: new Date().toISOString(), + }); + + // Keep only last 20 subagent entries + if (session.subagents.length > 20) { + session.subagents = session.subagents.slice(-20); + } + + writeJSONFile(CURRENT_SESSION_FILE, session); +} + +// ============================================================================ +// Main +// ============================================================================ + +async function subagentStop() { + try { + const input = await readStdin(3000); + if (!input || input.trim() === '') { + process.exit(0); + } + + const data = JSON.parse(input); + const agentType = data.agent_type || data.agentType || 'unknown'; + const lastMessage = data.last_assistant_message || data.lastAssistantMessage || ''; + + // Track all subagent completions in session state + trackSubagentInSession(agentType); + + // Track code review completion (for pre-commit enforcement) + if (isCodeReviewer(agentType)) { + markCodeReviewDone(); + } + + // Save code reviewer results to MeMesh KG (high-value findings) + if (isCodeReviewer(agentType) && lastMessage.length > 50) { + saveSubagentToKG(agentType, lastMessage); + } + + process.exit(0); + } catch (error) { + logError('SubagentStop', error); + process.exit(0); // Never block on hook errors + } +} + +subagentStop(); diff --git a/scripts/postinstall-new.js b/scripts/postinstall-new.js index 0d1c53df..c221e335 100644 --- a/scripts/postinstall-new.js +++ b/scripts/postinstall-new.js @@ -16,6 +16,7 @@ import { fileURLToPath } from 'url'; import { dirname, join } from 'path'; import { homedir } from 'os'; +import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, statSync } from 'fs'; import chalk from 'chalk'; import boxen from 'boxen'; @@ -34,6 +35,73 @@ import { detectAndFixLegacyInstall } from './postinstall-lib.js'; +// ============================================================================ +// Bundled Skills Installation +// ============================================================================ + +/** + * Install bundled skills to ~/.claude/skills/sa:/ + * Skills are shipped in scripts/skills//SKILL.md + * Only installs if skill doesn't exist or bundled version is newer. + * + * @param {string} claudeDir - Path to ~/.claude + * @returns {{ installed: string[], skipped: string[], errors: string[] }} + */ +function installBundledSkills(claudeDir) { + const result = { installed: [], skipped: [], errors: [] }; + const bundledDir = join(__dirname, 'skills'); + const skillsDir = join(claudeDir, 'skills'); + + if (!existsSync(bundledDir)) { + return result; + } + + // Ensure skills directory exists + mkdirSync(skillsDir, { recursive: true }); + + // Read all bundled skills + let entries; + try { + entries = readdirSync(bundledDir, { withFileTypes: true }); + } catch { + return result; + } + + for (const entry of entries) { + if (!entry.isDirectory()) continue; + + const skillName = entry.name; + const prefixedName = `sa:${skillName}`; + const sourceFile = join(bundledDir, skillName, 'SKILL.md'); + const targetDir = join(skillsDir, prefixedName); + const targetFile = join(targetDir, 'SKILL.md'); + + if (!existsSync(sourceFile)) continue; + + try { + // Skip if target exists and is newer than source + if (existsSync(targetFile)) { + const sourceStat = statSync(sourceFile); + const targetStat = statSync(targetFile); + if (targetStat.mtimeMs >= sourceStat.mtimeMs) { + result.skipped.push(skillName); + continue; + } + } + + // Install: create dir + copy SKILL.md + mkdirSync(targetDir, { recursive: true }); + const content = readFileSync(sourceFile, 'utf-8'); + writeFileSync(targetFile, content, 'utf-8'); + result.installed.push(skillName); + } catch (error) { + result.errors.push(`${skillName}: ${error.message}`); + } + } + + return result; +} + // ============================================================================ // Main Installation Flow // ============================================================================ @@ -120,6 +188,25 @@ async function main() { console.log(chalk.dim(' ℹ️ Legacy check skipped')); } + // Step 7: Install Bundled Skills + try { + const skillResult = installBundledSkills(claudeDir); + results.skillsInstalled = skillResult.installed; + results.skillsSkipped = skillResult.skipped; + + if (skillResult.installed.length > 0) { + console.log(chalk.green(` ✅ Skills installed: ${skillResult.installed.join(', ')}`)); + } else if (skillResult.skipped.length > 0) { + console.log(chalk.dim(` ℹ️ Skills up to date (${skillResult.skipped.length} already installed)`)); + } + + if (skillResult.errors.length > 0) { + results.errors.push(`Skills: ${skillResult.errors.join('; ')}`); + } + } catch (error) { + console.log(chalk.dim(' ℹ️ Skills installation skipped')); + } + } catch (error) { console.error(chalk.red('\n❌ Installation failed:'), error.message); console.error(chalk.yellow('\n💡 You can configure manually (see instructions below)\n')); diff --git a/scripts/skills/comprehensive-code-review/SKILL.md b/scripts/skills/comprehensive-code-review/SKILL.md new file mode 100644 index 00000000..5e5105e3 --- /dev/null +++ b/scripts/skills/comprehensive-code-review/SKILL.md @@ -0,0 +1,276 @@ +--- +name: comprehensive-code-review +description: | + Complete code review framework with mandatory tool-verified checks and anti-hallucination enforcement. + Use when: performing code reviews, reviewing PRs, checking code quality before merge. + Keywords: code review, review code, 代碼審查, PR review, pull request, 檢查代碼. + Auto-triggers on: "code review", "review the code", "run code review". +--- + +# Comprehensive Code Review Framework v4.0 + +**Philosophy**: 不信任自己。用工具證明一切。沒有 evidence 的 check 等於沒做。 + +**v4.0 vs v3.0**: v3.0 說了「應該檢查什麼」但沒強制怎麼做。v4.0 的每一步都是**必須用工具執行並產出 evidence** 的指令,不是建議。 + +--- + +## 🔴 Step 0: Ripple Map(強制首步,不可跳過) + +**PURPOSE**: 在做任何 review 之前,先找出所有「改了 A 就必須改 B」的連鎖反應。 + +**這是 v4.0 最重要的改變。** 之前的 review 只看「已改的檔案寫得對不對」,從不問「還有哪些檔案該改但沒改」。 + +### 執行方式(必須用工具) + +``` +FOR EACH modified file: + 1. 找出這個文件中被新增/修改的 export(type, function, constant) + 2. Grep 整個 codebase 找出所有 import 這些 export 的文件 + 3. 這些文件是否也在本次修改範圍內? + - 是 → 後續 review 時檢查一致性 + - 否 → 🔴 SUSPECT: 可能遺漏。立即 Read 該文件確認是否需要更新 +``` + +### 必須執行的工具命令 + +```bash +# 1. 列出所有修改的文件 +git diff --name-only HEAD # 或 review 指定的文件列表 + +# 2. 對每個被修改的 interface/type/function,搜尋所有引用 +Grep: pattern="DeliverParams" # 每個被修改的型別名 +Grep: pattern="deliverOrder" # 每個被修改的函數名 +Grep: pattern="delivery_result" # 每個被新增的 DB column + +# 3. 比對:引用這些東西的文件 vs 本次修改的文件 +# 差集 = 可能遺漏的文件 +``` + +### Ripple Map Output 格式(必須產出) + +``` +## Ripple Map + +| Changed Symbol | Files That Reference It | In Scope? | Verified? | +|----------------|------------------------|-----------|-----------| +| `DeliverParams` | sdk/types.ts, sdk/client.ts, deliver/route.ts | ✅/❌ | Read 確認 | +| `deliverOrder()` | client.ts, sdk/client.ts, example/index.ts | ✅/❌ | Read 確認 | +| `delivery_result` | supabase.ts, api-utils.ts, deliver/route.ts | ✅/❌ | Read 確認 | + +🔴 Unsynchronized: [列出所有引用但未修改的文件] +``` + +**如果 Ripple Map 發現 unsynchronized 文件,直接列為 CRITICAL issue,不需要進入後續維度。** + +--- + +## Step 1: Scope Analysis + +確認審查範圍: +- 哪些文件被修改?(用 git diff 或文件列表,不可憑記憶) +- 變更的目的是什麼? +- **有幾個 package/module 邊界被跨越?** +- **Ripple Map 發現多少個 unsynchronized 文件?** + +--- + +## Step 2: Mandatory Verification Dimensions + +**12 個維度。Dim 11 和 12 是最高優先級,必須用 Explore subagent 或多個 Read/Grep 並行執行。** + +**每個 check 必須產出 evidence。格式:** +``` +[DIM-11a] ✅ PASS — import { validateOutputSchema } from '@/lib/api-utils' + Evidence: Read api-utils.ts → line 118: export function validateOutputSchema(...) + +[DIM-12d] 🔴 FAIL — SDK DeliverParams missing deliveryResult + Evidence: Read packages/sdk/src/types.ts:177-180 → only has deliveryHash, deliveryMetadata +``` + +**沒有 evidence 的 ✅ 等於 ❌。** + +--- + +### 🔴 Dim 11: Reality Check(必須用 Explore subagent 執行) + +**IMPORTANT: 這個維度必須 dispatch 至少一個 Explore subagent 來獨立驗證。不可自己看一眼就說 PASS。** + +**Subagent prompt 模板**: +``` +In [project_path], verify the following for files [list]: +1. Every import resolves to a real export (read the source file to confirm) +2. Every method call references a method that exists in the target class +3. Every DB column referenced exists in migrations +4. Search for TODO/FIXME/STUB in all modified files +5. For every new function: grep for callers — is it actually called from somewhere? +Report exact findings with file:line evidence for each. +``` + +**11a-11f 檢查項目**(subagent 必須全部執行): + +| Check | Tool | What to verify | +|-------|------|----------------| +| 11a. Import/Export | Read 被 import 的文件 | export 真的存在 | +| 11b. Method calls | Read 被呼叫的 class | method 真的定義了 | +| 11c. DB schema | Read migration files | column 在 migration 裡 | +| 11d. Example code | Read constructor + method 簽名 | 參數和回傳值匹配 | +| 11e. Stubs | Grep TODO/FIXME/STUB/throw.*not.impl | 無假完成 | +| 11f. Dead wire | Grep function name across codebase | 有 caller 存在 | + +--- + +### 🔴 Dim 12: Cross-boundary Sync(必須用 Explore subagent 執行) + +**IMPORTANT: Monorepo 或多 package 專案時,此維度必須 dispatch 獨立 subagent。** + +**Subagent prompt 模板**: +``` +In [project_path], check cross-boundary type synchronization: +1. Compare [platform types file] with [SDK types file] — list every interface + that exists in both. For each, compare field-by-field. +2. Compare [platform client file] with [SDK client file] — list every method + that exists in both. For each, compare signature. +3. For every API route that accepts a body: read the route handler AND the SDK + method that calls it. Do the field names match? +4. Trace: migration column → DbType → mapResponse → API type → SDK type. + Report any broken links. +Report ALL mismatches with exact file:line evidence. +``` + +**12a-12d 檢查項目**(subagent 必須全部執行): + +| Check | What | How | +|-------|------|-----| +| 12a. Type parity | 同名 interface 欄位一致 | Read 兩個 type 文件,逐欄比對 | +| 12b. Client parity | 同名 method 簽名一致 | Read 兩個 client 文件,逐方法比對 | +| 12c. Route↔SDK match | Route body 欄位 = SDK params 欄位 | Read route + SDK method | +| 12d. Full chain | migration→DbType→mapper→ApiType→SdkType | 追蹤新增欄位通過每一層 | + +--- + +### Dim 1-10: Standard Quality Dimensions + +#### 1. 🔒 Security +- Injection attacks (SQL, Command, Path traversal) +- Sensitive data exposure +- Auth/AuthZ gaps, hardcoded secrets + +#### 2. 🔄 Concurrency +- Race conditions (TOCTOU), deadlocks +- Atomic operation needs + +#### 3. 💾 Resource Management +- Resource leaks, unbounded buffers +- Timer/listener cleanup + +#### 4. ❌ Error Handling +- Uncaught exceptions, empty catch +- Unhandled Promise rejections + +#### 5. 📊 Edge Cases +- Empty/null/NaN/zero/MAX values +- First run / cold start + +#### 6. ✅ Input Validation +- Type, range, format, length validation + +#### 7. ⚡ Performance +- O(n²), blocking I/O, N+1 queries + +#### 8. 📝 Code Quality +- Dead code, magic numbers, naming + +#### 9. 📖 Documentation +- API docs, outdated comments + +#### 10. 🧪 Test Coverage +- Happy/error/edge paths tested +- New functions have corresponding tests + +--- + +## Step 3: Issue Classification + +| Level | Symbol | Criteria | Action | +|-------|--------|----------|--------| +| CRITICAL | 🔴 | Security, crash, **hallucination, broken integration, missing sync** | Fix immediately | +| MAJOR | 🟠 | Bugs, leaks, performance, type mismatch | Fix before merge | +| MINOR | 🟡 | Quality, maintenance | Document | + +**鐵則**: Dim 11/12 的 issue 最低 MAJOR,大部分 CRITICAL。 + +--- + +## Step 4: Fix Dispatch + +``` +Dispatch subagents in parallel (max 6): +- Group by file or logical module +- Each subagent: fix root cause → run related tests → validate no regression +- After all complete: run full test suite +- After full suite: re-run Ripple Map to verify no new gaps +``` + +--- + +## Step 5: Final Verification Gate + +**在宣稱 review 完成前,必須全部通過:** + +``` +□ Ripple Map 無 unsynchronized 文件 +□ Dim 11 所有 check 有 evidence 且 PASS +□ Dim 12 所有 check 有 evidence 且 PASS +□ 所有 CRITICAL issues 已修復 +□ 所有 MAJOR issues 已修復 +□ MINOR issues 已記錄 +□ tsc --noEmit pass(主專案) +□ tsc --noEmit pass(每個子 package 獨立跑) +□ 全部測試 pass +□ Build pass +``` + +**如果任何 check 缺少 evidence,整個 review 標記為 INCOMPLETE。** + +--- + +## AI 幻想模式速查表 + +| # | Pattern | 怎麼偵測 | 工具 | +|---|---------|---------|------| +| 1 | **Ghost Method** — 呼叫不存在的方法 | Read class file, search method | Read | +| 2 | **Phantom Import** — import 不存在的 export | Read source file | Read/Grep | +| 3 | **Schema Drift** — 讀寫不存在的 DB column | Read all migrations | Read | +| 4 | **Type Island** — 只改一邊的 type | Ripple Map 自動抓 | Grep | +| 5 | **Dead Wire** — 定義了但沒被呼叫 | Grep function name | Grep | +| 6 | **Stub Disguise** — TODO/return {} 偽裝完成 | Grep TODO/FIXME/STUB | Grep | +| 7 | **Constructor Lie** — 參數不匹配 | Read constructor | Read | +| 8 | **Mock Leak** — test mock 了但 prod 沒實作 | Check real implementation | Read | +| 9 | **One-side Fix** — 改了 A 忘改 B | Ripple Map 自動抓 | Grep | +| 10 | **Verify Theater** — tsc pass 但只跑主 package | 獨立跑每個子 package tsc | Bash | + +--- + +## 何時執行 + +| 觸發條件 | 執行範圍 | +|---------|---------| +| 新功能 > 100 lines | Full review (all 12 dims) | +| API/DB schema 變更 | Full review + 強制 Dim 11/12 | +| 跨 package 變更 | Full review + 強制 Dim 12 | +| Bug fix < 50 lines | Quick review (Dim 11 + 改動相關維度) | +| 任何 monorepo 變更 | 至少 Ripple Map + Dim 12 | + +--- + +**Version**: 4.0 +**Last Updated**: 2026-02-22 +**Changelog**: +- v4.0: 新增 Step 0 Ripple Map — 強制發現遺漏的連鎖修改 +- v4.0: Dim 11/12 必須 dispatch Explore subagent 獨立驗證 +- v4.0: 每個 check 必須產出 evidence,無 evidence = 未完成 +- v4.0: 新增 Verify Theater pattern(tsc pass 但只跑主 package) +- v4.0: 新增 Final Verification Gate — 子 package 必須獨立跑 tsc +- v3.0: Added Dim 11/12, hallucination pattern table +- v2.0: Initial 10-dimension framework From db07c1ab912f412fbdeecf5f104125b344d37a8c Mon Sep 17 00:00:00 2001 From: KT <677465+kevintseng@users.noreply.github.com> Date: Wed, 25 Feb 2026 07:50:53 +0800 Subject: [PATCH 18/23] feat(hooks): add smart routing, memory optimization, and metrics tool Phase 1 of v2.9 Smart Hooks implementation: - 1A: sqliteBatch for batched DB operations, session cache, async writes - 1B: Smart Router with 4 PreToolUse handlers (code review, model routing, planning enforcement, dry-run gate), file/test tracking - 1C: Smart buddy-do with KG context recall and task type detection, new memesh-metrics MCP tool for session observability Co-Authored-By: Claude Opus 4.6 --- .../memesh/dist/mcp/ToolDefinitions.d.ts.map | 2 +- .../memesh/dist/mcp/ToolDefinitions.js | 53 ++- .../memesh/dist/mcp/ToolDefinitions.js.map | 2 +- .../memesh/dist/mcp/ToolRouter.d.ts.map | 2 +- .claude-plugin/memesh/dist/mcp/ToolRouter.js | 8 + .../memesh/dist/mcp/ToolRouter.js.map | 2 +- .../memesh/dist/mcp/handlers/BuddyHandlers.js | 2 +- .../dist/mcp/handlers/BuddyHandlers.js.map | 2 +- .../dist/mcp/schemas/OutputSchemas.d.ts | 53 +++ .../dist/mcp/schemas/OutputSchemas.d.ts.map | 2 +- .../memesh/dist/mcp/schemas/OutputSchemas.js | 30 ++ .../dist/mcp/schemas/OutputSchemas.js.map | 2 +- .../memesh/dist/mcp/tools/buddy-do.d.ts | 3 +- .../memesh/dist/mcp/tools/buddy-do.d.ts.map | 2 +- .../memesh/dist/mcp/tools/buddy-do.js | 95 +++- .../memesh/dist/mcp/tools/buddy-do.js.map | 2 +- .../memesh/dist/mcp/tools/memesh-metrics.d.ts | 13 + .../dist/mcp/tools/memesh-metrics.d.ts.map | 1 + .../memesh/dist/mcp/tools/memesh-metrics.js | 162 +++++++ .../dist/mcp/tools/memesh-metrics.js.map | 1 + .claude-plugin/memesh/scripts/hooks/README.md | 200 +++++--- .../hooks/__tests__/hook-test-harness.js | 218 +++++++++ .../scripts/hooks/__tests__/hooks.test.js | 247 ++++++++++ .../memesh/scripts/hooks/hook-utils.js | 153 ++++++ .../memesh/scripts/hooks/post-commit.js | 42 +- .../memesh/scripts/hooks/post-tool-use.js | 140 ++++-- .../memesh/scripts/hooks/pre-tool-use.js | 441 +++++++++++++++--- .../memesh/scripts/hooks/session-start.js | 71 ++- .claude-plugin/memesh/scripts/hooks/stop.js | 110 +++-- scripts/hooks/README.md | 200 +++++--- scripts/hooks/__tests__/hook-test-harness.js | 218 +++++++++ scripts/hooks/__tests__/hooks.test.js | 247 ++++++++++ scripts/hooks/hook-utils.js | 153 ++++++ scripts/hooks/post-commit.js | 42 +- scripts/hooks/post-tool-use.js | 140 ++++-- scripts/hooks/pre-tool-use.js | 441 +++++++++++++++--- scripts/hooks/session-start.js | 71 ++- scripts/hooks/stop.js | 110 +++-- src/mcp/ToolDefinitions.ts | 66 ++- src/mcp/ToolRouter.ts | 13 + src/mcp/handlers/BuddyHandlers.ts | 2 +- src/mcp/schemas/OutputSchemas.ts | 34 ++ src/mcp/tools/buddy-do.ts | 141 +++++- src/mcp/tools/memesh-metrics.ts | 189 ++++++++ tests/unit/mcp-compliance-audit.test.ts | 9 +- 45 files changed, 3601 insertions(+), 536 deletions(-) create mode 100644 .claude-plugin/memesh/dist/mcp/tools/memesh-metrics.d.ts create mode 100644 .claude-plugin/memesh/dist/mcp/tools/memesh-metrics.d.ts.map create mode 100644 .claude-plugin/memesh/dist/mcp/tools/memesh-metrics.js create mode 100644 .claude-plugin/memesh/dist/mcp/tools/memesh-metrics.js.map create mode 100644 .claude-plugin/memesh/scripts/hooks/__tests__/hook-test-harness.js create mode 100644 .claude-plugin/memesh/scripts/hooks/__tests__/hooks.test.js create mode 100644 scripts/hooks/__tests__/hook-test-harness.js create mode 100644 scripts/hooks/__tests__/hooks.test.js create mode 100644 src/mcp/tools/memesh-metrics.ts diff --git a/.claude-plugin/memesh/dist/mcp/ToolDefinitions.d.ts.map b/.claude-plugin/memesh/dist/mcp/ToolDefinitions.d.ts.map index 7e78ce79..2fe79a27 100644 --- a/.claude-plugin/memesh/dist/mcp/ToolDefinitions.d.ts.map +++ b/.claude-plugin/memesh/dist/mcp/ToolDefinitions.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ToolDefinitions.d.ts","sourceRoot":"","sources":["../../src/mcp/ToolDefinitions.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BzB,CAAC;AAKF,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,WAAW,CAAC,EAAE;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,CAAC;IAMF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAKD,wBAAgB,qBAAqB,IAAI,iBAAiB,EAAE,CA+gB3D"} \ No newline at end of file +{"version":3,"file":"ToolDefinitions.d.ts","sourceRoot":"","sources":["../../src/mcp/ToolDefinitions.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BzB,CAAC;AAKF,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,WAAW,CAAC,EAAE;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,CAAC;IAMF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAKD,wBAAgB,qBAAqB,IAAI,iBAAiB,EAAE,CAmkB3D"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js b/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js index 30bbe123..0817c402 100644 --- a/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js +++ b/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js @@ -30,21 +30,32 @@ export const CommonSchemas = { export function getAllToolDefinitions() { const buddyDoTool = { name: 'buddy-do', - description: 'Execute development tasks with context-aware analysis and memory integration', + description: `Smart task analysis with memory-enriched proposals. + +Analyzes the task description, detects the task type (bug-fix, feature, refactor, test, etc.), +queries the knowledge graph for related context, and returns an enriched proposal for user review. + +Follows "propose, don't execute" pattern — the enhanced prompt is returned for confirmation, +not auto-executed. User reviews the proposal and confirms or modifies before proceeding. + +Examples: +- buddy-do "fix the auth bug" → detects bug-fix, recalls JWT context, suggests debugging approach +- buddy-do "add user dashboard" → detects feature, recalls related UI work, suggests planning approach +- buddy-do "refactor payment service" → detects refactor, recalls payment patterns, suggests review-first approach`, inputSchema: { type: 'object', properties: { task: { type: 'string', - description: 'Task description to execute (e.g., "setup authentication", "fix login bug")', + description: 'Task description to analyze and enrich (e.g., "setup authentication", "fix login bug")', }, }, required: ['task'], }, outputSchema: OutputSchemas.buddyDo, annotations: { - title: 'Smart Task Router', - readOnlyHint: false, + title: 'Smart Task Analyzer', + readOnlyHint: true, destructiveHint: false, idempotentHint: false, openWorldHint: true, @@ -490,6 +501,39 @@ Requires MEMESH_API_KEY to be configured.`, openWorldHint: true, }, }; + const memeshMetricsTool = { + name: 'memesh-metrics', + description: `View MeMesh session metrics, routing configuration, and memory status. + +Returns structured data about: +- Current session: modified files, tested files, code review status +- Routing: active model rules, planning enforcement, dry-run gate, recent audit log +- Memory: knowledge graph size and status + +Use section parameter to focus on specific areas: +- "all" (default): Everything +- "session": Current session state only +- "routing": Routing config and audit log only +- "memory": Knowledge graph status only`, + inputSchema: { + type: 'object', + properties: { + section: { + type: 'string', + enum: ['all', 'session', 'routing', 'memory'], + description: 'Which metrics section to return (default: "all")', + }, + }, + }, + outputSchema: OutputSchemas.memeshMetrics, + annotations: { + title: 'Session Metrics', + readOnlyHint: true, + destructiveHint: false, + idempotentHint: true, + openWorldHint: false, + }, + }; return [ buddyDoTool, buddyRememberTool, @@ -500,6 +544,7 @@ Requires MEMESH_API_KEY to be configured.`, agentRegisterTool, hookToolUseTool, generateTestsTool, + memeshMetricsTool, ]; } //# sourceMappingURL=ToolDefinitions.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js.map b/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js.map index 35df4784..20550c1a 100644 --- a/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js.map +++ b/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js.map @@ -1 +1 @@ -{"version":3,"file":"ToolDefinitions.js","sourceRoot":"","sources":["../../src/mcp/ToolDefinitions.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ToolDefinitions.js","sourceRoot":"","sources":["../../src/mcp/ToolDefinitions.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/ToolRouter.d.ts.map b/.claude-plugin/memesh/dist/mcp/ToolRouter.d.ts.map index 2321b701..a01fa22e 100644 --- a/.claude-plugin/memesh/dist/mcp/ToolRouter.d.ts.map +++ b/.claude-plugin/memesh/dist/mcp/ToolRouter.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ToolRouter.d.ts","sourceRoot":"","sources":["../../src/mcp/ToolRouter.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EACL,YAAY,EACZ,aAAa,EACd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAQlE,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;IAK7B,cAAc,CAAC,EAAE,cAAc,CAAC;IAOhC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAM1B,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAClC;AA6HD,qBAAa,UAAU;IACrB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,cAAc,CAAC,CAAiB;IAExC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAW;IAC3C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmB;gBAOrC,MAAM,EAAE,gBAAgB;IAkBpC,OAAO,CAAC,qBAAqB;IAkDvB,aAAa,CACjB,MAAM,EAAE,OAAO,EACf,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACvC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,cAAc,CAAC;IA2D1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAKlC;IASF,OAAO,CAAC,YAAY;YAiCN,QAAQ;CAsEvB"} \ No newline at end of file +{"version":3,"file":"ToolRouter.d.ts","sourceRoot":"","sources":["../../src/mcp/ToolRouter.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EACL,YAAY,EACZ,aAAa,EACd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AASlE,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;IAK7B,cAAc,CAAC,EAAE,cAAc,CAAC;IAOhC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAM1B,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAClC;AA6HD,qBAAa,UAAU;IACrB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,cAAc,CAAC,CAAiB;IAExC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAW;IAC3C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmB;gBAOrC,MAAM,EAAE,gBAAgB;IAkBpC,OAAO,CAAC,qBAAqB;IAkDvB,aAAa,CACjB,MAAM,EAAE,OAAO,EACf,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACvC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,cAAc,CAAC;IA2D1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAKlC;IASF,OAAO,CAAC,YAAY;YAiCN,QAAQ;CAkFvB"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/ToolRouter.js b/.claude-plugin/memesh/dist/mcp/ToolRouter.js index a06f96fd..3f3f1e6b 100644 --- a/.claude-plugin/memesh/dist/mcp/ToolRouter.js +++ b/.claude-plugin/memesh/dist/mcp/ToolRouter.js @@ -1,6 +1,7 @@ import { ValidationError, NotFoundError, OperationError } from '../errors/index.js'; import { handleCloudSync, CloudSyncInputSchema } from './tools/memesh-cloud-sync.js'; import { handleAgentRegister, AgentRegisterInputSchema } from './tools/memesh-agent-register.js'; +import { handleMemeshMetrics, MemeshMetricsInputSchema } from './tools/memesh-metrics.js'; import { logger } from '../utils/logger.js'; const TOOL_NAME_REGEX = /^[a-z0-9](?:[a-z0-9_-]{0,62}[a-z0-9])?$/; const TOOL_NAME_MAX_LENGTH = 64; @@ -180,6 +181,13 @@ export class ToolRouter { } return handleAgentRegister(validationResult.data); } + if (resolvedToolName === 'memesh-metrics') { + const validationResult = MemeshMetricsInputSchema.safeParse(args); + if (!validationResult.success) { + throw new ValidationError(`Invalid input for ${resolvedToolName}: ${validationResult.error.message}`, { component: 'ToolRouter', method: 'dispatch', toolName: resolvedToolName, zodError: validationResult.error }); + } + return handleMemeshMetrics(validationResult.data); + } const safeName = sanitizeToolNameForError(resolvedToolName); throw new NotFoundError(`Unknown tool: ${safeName}`, 'tool', safeName); } diff --git a/.claude-plugin/memesh/dist/mcp/ToolRouter.js.map b/.claude-plugin/memesh/dist/mcp/ToolRouter.js.map index 97400faa..d9c80235 100644 --- a/.claude-plugin/memesh/dist/mcp/ToolRouter.js.map +++ b/.claude-plugin/memesh/dist/mcp/ToolRouter.js.map @@ -1 +1 @@ -{"version":3,"file":"ToolRouter.js","sourceRoot":"","sources":["../../src/mcp/ToolRouter.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ToolRouter.js","sourceRoot":"","sources":["../../src/mcp/ToolRouter.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/handlers/BuddyHandlers.js b/.claude-plugin/memesh/dist/mcp/handlers/BuddyHandlers.js index a430edc6..aa59f57c 100644 --- a/.claude-plugin/memesh/dist/mcp/handlers/BuddyHandlers.js +++ b/.claude-plugin/memesh/dist/mcp/handlers/BuddyHandlers.js @@ -71,7 +71,7 @@ export class BuddyHandlers { throw error; } try { - return await executeBuddyDo(validatedInput, this.formatter, this.autoTracker); + return await executeBuddyDo(validatedInput, this.formatter, this.autoTracker, this.knowledgeGraph); } catch (error) { logError(error, { diff --git a/.claude-plugin/memesh/dist/mcp/handlers/BuddyHandlers.js.map b/.claude-plugin/memesh/dist/mcp/handlers/BuddyHandlers.js.map index 7f72f26b..49b18836 100644 --- a/.claude-plugin/memesh/dist/mcp/handlers/BuddyHandlers.js.map +++ b/.claude-plugin/memesh/dist/mcp/handlers/BuddyHandlers.js.map @@ -1 +1 @@ -{"version":3,"file":"BuddyHandlers.js","sourceRoot":"","sources":["../../../src/mcp/handlers/BuddyHandlers.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"BuddyHandlers.js","sourceRoot":"","sources":["../../../src/mcp/handlers/BuddyHandlers.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAMvD,OAAO,EACL,cAAc,EACd,kBAAkB,GAEnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,oBAAoB,EACpB,wBAAwB,GAEzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,gBAAgB,EAChB,oBAAoB,GAErB,MAAM,wBAAwB,CAAC;AAOhC,MAAM,OAAO,aAAa;IAChB,SAAS,CAAoB;IAC7B,oBAAoB,CAAmC;IACvD,cAAc,CAA6B;IAC3C,WAAW,CAAsB;IAEzC,YACE,SAA4B,EAC5B,oBAAsD,EACtD,WAAgC,EAChC,cAA+B;QAE/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACjD,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAMO,eAAe;QACrB,OAAO,IAAI,CAAC,oBAAoB,KAAK,SAAS,CAAC;IACjD,CAAC;IAMO,kBAAkB,CAAC,QAAgB;QACzC,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,WAAW,QAAQ,4CAA4C;wBAC/D,2FAA2F;wBAC3F,8BAA8B;wBAC9B,yDAAyD;wBACzD,+BAA+B;wBAC/B,oCAAoC;wBACpC,wEAAwE;iBAC/E;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAKD,KAAK,CAAC,aAAa,CACjB,IAAa;QAGb,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,cAAqC,CAAC;QAC1C,IAAI,CAAC;YACH,cAAc,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,KAAK,EAAE;gBACd,SAAS,EAAE,eAAe;gBAC1B,MAAM,EAAE,eAAe;gBACvB,SAAS,EAAE,2BAA2B;gBACtC,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;aAC7B,CAAC,CAAC;YAEH,IAAI,KAAK,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAChC,MAAM,eAAe,GAAG,IAAI,eAAe,CACzC,wBAAwB,EACxB;oBACE,SAAS,EAAE,eAAe;oBAC1B,MAAM,EAAE,eAAe;oBACvB,MAAM,EAAE,oBAAoB;oBAC5B,YAAY,EAAE,IAAI;iBACnB,CACF,CAAC;gBAEF,MAAM,SAAS,GAAG,GAAG,eAAe,CAAC,IAAI,KAAK,eAAe,CAAC,OAAO,EAAE,CAAC;gBAExE,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,SAAS;yBAChB;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,OAAO,MAAM,cAAc,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACrG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,KAAK,EAAE;gBACd,SAAS,EAAE,eAAe;gBAC1B,MAAM,EAAE,eAAe;gBACvB,SAAS,EAAE,4BAA4B;gBACvC,IAAI,EAAE,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE;aACpC,CAAC,CAAC;YACH,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAKD,KAAK,CAAC,mBAAmB,CACvB,IAAa;QAGb,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,cAA2C,CAAC;QAChD,IAAI,CAAC;YACH,cAAc,GAAG,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,KAAK,EAAE;gBACd,SAAS,EAAE,eAAe;gBAC1B,MAAM,EAAE,qBAAqB;gBAC7B,SAAS,EAAE,iCAAiC;gBAC5C,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;aAC7B,CAAC,CAAC;YAEH,IAAI,KAAK,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAChC,MAAM,eAAe,GAAG,IAAI,eAAe,CACzC,8BAA8B,EAC9B;oBACE,SAAS,EAAE,eAAe;oBAC1B,MAAM,EAAE,qBAAqB;oBAC7B,MAAM,EAAE,0BAA0B;oBAClC,YAAY,EAAE,IAAI;iBACnB,CACF,CAAC;gBAEF,MAAM,SAAS,GAAG,GAAG,eAAe,CAAC,IAAI,KAAK,eAAe,CAAC,OAAO,EAAE,CAAC;gBAExE,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,SAAS;yBAChB;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YAEH,OAAO,MAAM,oBAAoB,CAAC,cAAc,EAAE,IAAI,CAAC,oBAAqB,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACrH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,KAAK,EAAE;gBACd,SAAS,EAAE,eAAe;gBAC1B,MAAM,EAAE,qBAAqB;gBAC7B,SAAS,EAAE,kCAAkC;gBAC7C,IAAI,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,KAAK,EAAE;aACtC,CAAC,CAAC;YACH,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAKD,KAAK,CAAC,eAAe,CACnB,IAAa;QAEb,IAAI,cAAuC,CAAC;QAC5C,IAAI,CAAC;YACH,cAAc,GAAG,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,KAAK,EAAE;gBACd,SAAS,EAAE,eAAe;gBAC1B,MAAM,EAAE,iBAAiB;gBACzB,SAAS,EAAE,6BAA6B;gBACxC,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;aAC7B,CAAC,CAAC;YAEH,IAAI,KAAK,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAChC,MAAM,eAAe,GAAG,IAAI,eAAe,CACzC,0BAA0B,EAC1B;oBACE,SAAS,EAAE,eAAe;oBAC1B,MAAM,EAAE,iBAAiB;oBACzB,MAAM,EAAE,sBAAsB;oBAC9B,YAAY,EAAE,IAAI;iBACnB,CACF,CAAC;gBAEF,MAAM,SAAS,GAAG,GAAG,eAAe,CAAC,IAAI,KAAK,eAAe,CAAC,OAAO,EAAE,CAAC;gBAExE,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,SAAS;yBAChB;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,OAAO,MAAM,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,KAAK,EAAE;gBACd,SAAS,EAAE,eAAe;gBAC1B,MAAM,EAAE,iBAAiB;gBACzB,SAAS,EAAE,8BAA8B;gBACzC,IAAI,EAAE,EAAE,OAAO,EAAE,cAAc,CAAC,OAAO,EAAE;aAC1C,CAAC,CAAC;YACH,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.d.ts b/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.d.ts index b053edcd..5377c357 100644 --- a/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.d.ts +++ b/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.d.ts @@ -347,6 +347,59 @@ export declare const OutputSchemas: { }; required: string[]; }; + memeshMetrics: { + type: "object"; + properties: { + session: { + type: string; + properties: { + current: { + type: string; + }; + lastSessionCached: { + type: string; + }; + }; + }; + routing: { + type: string; + properties: { + configLoaded: { + type: string; + }; + modelRules: { + type: string; + }; + backgroundRules: { + type: string; + }; + planningEnforcement: { + type: string; + }; + dryRunGate: { + type: string; + }; + recentAuditEntries: { + type: string; + items: { + type: string; + }; + }; + }; + }; + memory: { + type: string; + properties: { + knowledgeGraphExists: { + type: string; + }; + dbSizeKB: { + type: string; + }; + }; + }; + }; + }; }; export type BuddyDoOutput = { routing: { diff --git a/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.d.ts.map b/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.d.ts.map index ab969703..1dbefcac 100644 --- a/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.d.ts.map +++ b/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"OutputSchemas.d.ts","sourceRoot":"","sources":["../../../src/mcp/schemas/OutputSchemas.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"OutputSchemas.d.ts","sourceRoot":"","sources":["../../../src/mcp/schemas/OutputSchemas.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.js b/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.js index 0acb05ba..253181ea 100644 --- a/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.js +++ b/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.js @@ -198,5 +198,35 @@ export const OutputSchemas = { }, required: ['success'], }, + memeshMetrics: { + type: 'object', + properties: { + session: { + type: 'object', + properties: { + current: { type: 'object' }, + lastSessionCached: { type: 'boolean' }, + }, + }, + routing: { + type: 'object', + properties: { + configLoaded: { type: 'boolean' }, + modelRules: { type: 'number' }, + backgroundRules: { type: 'number' }, + planningEnforcement: { type: 'boolean' }, + dryRunGate: { type: 'boolean' }, + recentAuditEntries: { type: 'array', items: { type: 'string' } }, + }, + }, + memory: { + type: 'object', + properties: { + knowledgeGraphExists: { type: 'boolean' }, + dbSizeKB: { type: 'number' }, + }, + }, + }, + }, }; //# sourceMappingURL=OutputSchemas.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.js.map b/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.js.map index e7aaba26..bd770c5e 100644 --- a/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.js.map +++ b/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.js.map @@ -1 +1 @@ -{"version":3,"file":"OutputSchemas.js","sourceRoot":"","sources":["../../../src/mcp/schemas/OutputSchemas.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"OutputSchemas.js","sourceRoot":"","sources":["../../../src/mcp/schemas/OutputSchemas.ts"],"names":[],"mappings":"AAyBA,MAAM,CAAC,MAAM,aAAa,GAAG;IAI3B,OAAO,EAAE;QACP,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;oBAC7B,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC3B,eAAe,EAAE;wBACf,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;qBAC1B;oBACD,UAAU,EAAE;wBACV,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC;qBACtC;oBACD,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACnC,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBAClC;gBACD,QAAQ,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;aAClC;YACD,cAAc,EAAE;gBACd,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAChC,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC9B,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBACnC;aACF;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC9B,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBACpC;aACF;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,CAAC;KACtB;IAKD,aAAa,EAAE;QACb,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACzB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACzB,QAAQ,EAAE;gBACR,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBACtB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBAC3B,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBACxB,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBAC7B,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;qBAC9B;iBACF;aACF;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aAC1B;SACF;QACD,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;KAC7B;IAKD,SAAS,EAAE;QACT,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBACxB,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBAC/B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBACzB,QAAQ,EAAE;4BACR,IAAI,EAAE,OAAO;4BACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;yBAC1B;qBACF;oBACD,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC;iBAClC;aACF;SACF;QACD,QAAQ,EAAE,CAAC,UAAU,CAAC;KACvB;IAKD,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YAC5B,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC3B,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC5B,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC7B,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;iBAC7B;aACF;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;KACjC;IAKD,kBAAkB,EAAE;QAClB,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YAC5B,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC7B,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC3B,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC1B,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC7B,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAClC,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACjC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC1B,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACpC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBAC9B;gBACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,QAAQ,EAAE,kBAAkB,EAAE,WAAW,CAAC;aAChH;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;KACjC;IAKD,cAAc,EAAE;QACd,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EAAE,4CAA4C;aAC1D;YACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACzB,MAAM,EAAE;gBACN,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBACxB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;qBAC1B;oBACD,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;iBAC5B;aACF;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC;KAC/B;IAKD,aAAa,EAAE;QACb,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC5B,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC5B;QACD,QAAQ,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;KAClC;IAKD,SAAS,EAAE;QACT,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YAC5B,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE;YAC5D,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC3B,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC1B,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC1B,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC1B,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YAC3B,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YAC9B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;YACpE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;YACpE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACzB,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YAC5B,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SACzB;QACD,QAAQ,EAAE,CAAC,SAAS,CAAC;KACtB;IAKD,aAAa,EAAE;QACb,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YAC5B,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC3B,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACtB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACxB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACxB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC3B,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC1B,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAChC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC7B,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACjC,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBACpC;gBACD,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC;aACnC;YACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACzB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SACzB;QACD,QAAQ,EAAE,CAAC,SAAS,CAAC;KACtB;IAKD,aAAa,EAAE;QACb,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC3B,iBAAiB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;iBACvC;aACF;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,YAAY,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;oBACjC,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC9B,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACnC,mBAAmB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;oBACxC,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;oBAC/B,kBAAkB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;iBACjE;aACF;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,oBAAoB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;oBACzC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBAC7B;aACF;SACF;KACF;CACF,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/tools/buddy-do.d.ts b/.claude-plugin/memesh/dist/mcp/tools/buddy-do.d.ts index bdf29097..28d5149b 100644 --- a/.claude-plugin/memesh/dist/mcp/tools/buddy-do.d.ts +++ b/.claude-plugin/memesh/dist/mcp/tools/buddy-do.d.ts @@ -1,11 +1,12 @@ import { z } from 'zod'; import type { ResponseFormatter } from '../../ui/ResponseFormatter.js'; import type { ProjectAutoTracker } from '../../memory/ProjectAutoTracker.js'; +import type { KnowledgeGraph } from '../../knowledge-graph/index.js'; export declare const BuddyDoInputSchema: z.ZodObject<{ task: z.ZodString; }, z.core.$strip>; export type ValidatedBuddyDoInput = z.infer; -export declare function executeBuddyDo(input: ValidatedBuddyDoInput, formatter: ResponseFormatter, autoTracker?: ProjectAutoTracker): Promise<{ +export declare function executeBuddyDo(input: ValidatedBuddyDoInput, formatter: ResponseFormatter, autoTracker?: ProjectAutoTracker, knowledgeGraph?: KnowledgeGraph): Promise<{ content: Array<{ type: 'text'; text: string; diff --git a/.claude-plugin/memesh/dist/mcp/tools/buddy-do.d.ts.map b/.claude-plugin/memesh/dist/mcp/tools/buddy-do.d.ts.map index ce51f7ec..4af57ece 100644 --- a/.claude-plugin/memesh/dist/mcp/tools/buddy-do.d.ts.map +++ b/.claude-plugin/memesh/dist/mcp/tools/buddy-do.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"buddy-do.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/buddy-do.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAG7E,eAAO,MAAM,kBAAkB;;iBAE7B,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAiCvE,wBAAsB,cAAc,CAClC,KAAK,EAAE,qBAAqB,EAC5B,SAAS,EAAE,iBAAiB,EAC5B,WAAW,CAAC,EAAE,kBAAkB,GAC/B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAmF7D"} \ No newline at end of file +{"version":3,"file":"buddy-do.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/buddy-do.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGrE,eAAO,MAAM,kBAAkB;;iBAE7B,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAgHvE,wBAAsB,cAAc,CAClC,KAAK,EAAE,qBAAqB,EAC5B,SAAS,EAAE,iBAAiB,EAC5B,WAAW,CAAC,EAAE,kBAAkB,EAChC,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA6H7D"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/tools/buddy-do.js b/.claude-plugin/memesh/dist/mcp/tools/buddy-do.js index 5f74a05b..1a5f4ca1 100644 --- a/.claude-plugin/memesh/dist/mcp/tools/buddy-do.js +++ b/.claude-plugin/memesh/dist/mcp/tools/buddy-do.js @@ -3,6 +3,52 @@ import { logger } from '../../utils/logger.js'; export const BuddyDoInputSchema = z.object({ task: z.string().trim().min(1).describe('Task description for MeMesh to process'), }); +const TASK_PATTERNS = [ + { + type: 'bug-fix', + patterns: [/\bfix\b/i, /\bbug\b/i, /\berror\b/i, /\bcrash/i, /\bbroken\b/i, /\bfailing\b/i], + skills: ['@systematic-debugging', '@test-driven-development'], + approach: 'Reproduce → Root cause analysis → Fix → Regression test → Verify', + }, + { + type: 'feature', + patterns: [/\badd\b/i, /\bcreate\b/i, /\bimplement\b/i, /\bbuild\b/i, /\bnew\b/i, /\bsetup\b/i], + skills: ['@writing-plans', '@test-driven-development'], + approach: 'Plan → Design → Implement → Test → Review', + }, + { + type: 'refactor', + patterns: [/\brefactor\b/i, /\bclean\s?up\b/i, /\breorganize\b/i, /\bsimplify\b/i, /\bextract\b/i], + skills: ['@comprehensive-code-review'], + approach: 'Ensure tests exist → Refactor in small steps → Verify tests still pass', + }, + { + type: 'test', + patterns: [/\btest\b/i, /\bcoverage\b/i, /\bspec\b/i], + skills: ['@test-driven-development'], + approach: 'Identify coverage gaps → Write failing tests → Verify behavior', + }, + { + type: 'performance', + patterns: [/\bperformance\b/i, /\boptimize\b/i, /\bslow\b/i, /\bfast\b/i, /\bspeed\b/i], + skills: ['@systematic-debugging'], + approach: 'Profile → Identify bottleneck → Optimize → Benchmark → Verify no regressions', + }, + { + type: 'security', + patterns: [/\bsecurity\b/i, /\bauth\b/i, /\bvulnerabilit/i, /\bpermission\b/i, /\baccess\b/i], + skills: ['@comprehensive-code-review'], + approach: 'Threat model → Identify vulnerabilities → Fix → Security review → Verify', + }, +]; +function detectTaskType(task) { + for (const pattern of TASK_PATTERNS) { + if (pattern.patterns.some(p => p.test(task))) { + return { type: pattern.type, skills: pattern.skills, approach: pattern.approach }; + } + } + return null; +} function extractTaskMetadata(task) { const goalMatch = task.match(/^([^.!?]+)[.!?]/) || task.match(/to ([^,]+)/); const reasonMatch = task.match(/because ([^,\.]+)/) || task.match(/so that ([^,\.]+)/); @@ -13,12 +59,30 @@ function extractTaskMetadata(task) { expectedOutcome: expectedMatch?.[1]?.trim(), }; } -export async function executeBuddyDo(input, formatter, autoTracker) { +async function queryRelatedContext(task, knowledgeGraph) { + try { + const results = await knowledgeGraph.hybridSearch(task, { limit: 5, minSimilarity: 0.3 }); + if (results.length === 0) + return []; + return results.map(r => { + const obs = r.entity.observations?.slice(0, 3) || []; + const obsText = obs.length > 0 ? ` — ${obs.join('; ')}` : ''; + return `[${r.entity.entityType}] ${r.entity.name}${obsText}`; + }); + } + catch (error) { + logger.debug('KG query for buddy-do context failed', { + error: error instanceof Error ? error.message : String(error), + }); + return []; + } +} +export async function executeBuddyDo(input, formatter, autoTracker, knowledgeGraph) { const startTime = Date.now(); const taskId = `buddy-do-${startTime}`; try { + const taskMeta = extractTaskMetadata(input.task); if (autoTracker) { - const taskMeta = extractTaskMetadata(input.task); await autoTracker.recordTaskStart({ task_description: input.task, goal: taskMeta.goal, @@ -32,19 +96,42 @@ export async function executeBuddyDo(input, formatter, autoTracker) { hasExpectedOutcome: !!taskMeta.expectedOutcome, }); } + const taskType = detectTaskType(input.task); + const relatedContext = knowledgeGraph + ? await queryRelatedContext(input.task, knowledgeGraph) + : []; const durationMs = Date.now() - startTime; - logger.debug('buddy_do task recorded', { + logger.debug('buddy_do task analyzed', { taskId, + taskType: taskType?.type || 'general', + relatedContextCount: relatedContext.length, durationMs, }); + const proposalParts = [ + `Task: ${input.task}`, + '', + ]; + if (taskType) { + proposalParts.push(`Type: ${taskType.type}`, `Approach: ${taskType.approach}`, ''); + if (taskType.skills.length > 0) { + proposalParts.push(`Recommended skills: ${taskType.skills.join(', ')}`, ''); + } + } + if (relatedContext.length > 0) { + proposalParts.push('Related context from memory:', ...relatedContext.map(c => ` - ${c}`), ''); + } + proposalParts.push('Proceed with this approach? (confirm or modify)'); const formattedResponse = formatter.format({ agentType: 'buddy-do', taskDescription: input.task, status: 'success', results: { - message: 'Task recorded. Proceed with execution using Claude Code capabilities.', + message: proposalParts.join('\n'), + confirmationRequired: true, stats: { durationMs, + taskType: taskType?.type || 'general', + relatedContextCount: relatedContext.length, }, }, }); diff --git a/.claude-plugin/memesh/dist/mcp/tools/buddy-do.js.map b/.claude-plugin/memesh/dist/mcp/tools/buddy-do.js.map index 9d292825..cd334058 100644 --- a/.claude-plugin/memesh/dist/mcp/tools/buddy-do.js.map +++ b/.claude-plugin/memesh/dist/mcp/tools/buddy-do.js.map @@ -1 +1 @@ -{"version":3,"file":"buddy-do.js","sourceRoot":"","sources":["../../../src/mcp/tools/buddy-do.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"buddy-do.js","sourceRoot":"","sources":["../../../src/mcp/tools/buddy-do.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.d.ts b/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.d.ts new file mode 100644 index 00000000..011a7f98 --- /dev/null +++ b/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.d.ts @@ -0,0 +1,13 @@ +import { z } from 'zod'; +import { CallToolResult } from '@modelcontextprotocol/sdk/types.js'; +export declare const MemeshMetricsInputSchema: z.ZodObject<{ + section: z.ZodDefault>>; +}, z.core.$strip>; +export type ValidatedMemeshMetricsInput = z.infer; +export declare function handleMemeshMetrics(input: ValidatedMemeshMetricsInput): Promise; +//# sourceMappingURL=memesh-metrics.d.ts.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.d.ts.map b/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.d.ts.map new file mode 100644 index 00000000..d9cb11ab --- /dev/null +++ b/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"memesh-metrics.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/memesh-metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAKpE,eAAO,MAAM,wBAAwB;;;;;;;iBAMnC,CAAC;AAEH,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAqCnF,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,2BAA2B,GACjC,OAAO,CAAC,cAAc,CAAC,CAuIzB"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.js b/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.js new file mode 100644 index 00000000..870f41b9 --- /dev/null +++ b/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.js @@ -0,0 +1,162 @@ +import { z } from 'zod'; +import fs from 'fs'; +import path from 'path'; +import { logger } from '../../utils/logger.js'; +export const MemeshMetricsInputSchema = z.object({ + section: z + .enum(['all', 'session', 'routing', 'memory']) + .optional() + .default('all') + .describe('Which metrics section to return'), +}); +const HOME_DIR = process.env.HOME || process.env.USERPROFILE || '/tmp'; +const STATE_DIR = path.join(HOME_DIR, '.memesh'); +const CURRENT_SESSION_FILE = path.join(STATE_DIR, 'current-session.json'); +const ROUTING_CONFIG_FILE = path.join(STATE_DIR, 'routing-config.json'); +const ROUTING_AUDIT_LOG = path.join(STATE_DIR, 'routing-audit.log'); +const LAST_SESSION_CACHE = path.join(STATE_DIR, 'last-session-summary.json'); +function readJSONSafe(filePath) { + try { + if (fs.existsSync(filePath)) { + return JSON.parse(fs.readFileSync(filePath, 'utf-8')); + } + } + catch { + } + return null; +} +function getRecentAuditEntries(maxLines) { + try { + if (!fs.existsSync(ROUTING_AUDIT_LOG)) + return []; + const content = fs.readFileSync(ROUTING_AUDIT_LOG, 'utf-8'); + const lines = content.trim().split('\n').filter(Boolean); + return lines.slice(-maxLines); + } + catch { + return []; + } +} +export async function handleMemeshMetrics(input) { + try { + const result = {}; + const section = input.section; + if (section === 'all' || section === 'session') { + const session = readJSONSafe(CURRENT_SESSION_FILE); + const lastSession = readJSONSafe(LAST_SESSION_CACHE); + result.session = { + current: session + ? { + startTime: session.startTime, + modifiedFiles: session.modifiedFiles?.length ?? 0, + testedFiles: session.testedFiles?.length ?? 0, + codeReviewDone: session.codeReviewDone ?? false, + toolUseCounts: session.toolUseCounts ?? {}, + patterns: session.patterns ?? [], + } + : null, + lastSessionCached: !!lastSession, + }; + } + if (section === 'all' || section === 'routing') { + const config = readJSONSafe(ROUTING_CONFIG_FILE); + const recentAudit = getRecentAuditEntries(20); + result.routing = { + configLoaded: !!config, + modelRules: config + ? config.modelRouting?.rules?.length ?? 0 + : 0, + backgroundRules: config + ? config.backgroundRules?.length ?? 0 + : 0, + planningEnforcement: config + ? config.planningEnforcement?.enabled ?? false + : false, + dryRunGate: config + ? config.dryRunGate?.enabled ?? false + : false, + recentAuditEntries: recentAudit, + }; + } + if (section === 'all' || section === 'memory') { + const dbPath = path.join(STATE_DIR, 'knowledge-graph.db'); + const dbExists = fs.existsSync(dbPath); + let dbSizeKB = 0; + if (dbExists) { + try { + const stat = fs.statSync(dbPath); + dbSizeKB = Math.round(stat.size / 1024); + } + catch { + } + } + result.memory = { + knowledgeGraphExists: dbExists, + dbSizeKB, + stateDir: STATE_DIR, + }; + } + const lines = ['MeMesh Metrics', '']; + if (result.session) { + const s = result.session; + const current = s.current; + lines.push('Session:'); + if (current) { + lines.push(` Modified files: ${current.modifiedFiles}`); + lines.push(` Tested files: ${current.testedFiles}`); + lines.push(` Code review done: ${current.codeReviewDone}`); + } + else { + lines.push(' No active session'); + } + lines.push(` Last session cached: ${s.lastSessionCached}`); + lines.push(''); + } + if (result.routing) { + const r = result.routing; + lines.push('Routing:'); + lines.push(` Config loaded: ${r.configLoaded}`); + lines.push(` Model rules: ${r.modelRules}`); + lines.push(` Background rules: ${r.backgroundRules}`); + lines.push(` Planning enforcement: ${r.planningEnforcement}`); + lines.push(` Dry-run gate: ${r.dryRunGate}`); + const audit = r.recentAuditEntries; + if (audit.length > 0) { + lines.push(` Recent audit (last ${audit.length}):`); + for (const entry of audit.slice(-5)) { + lines.push(` ${entry}`); + } + } + lines.push(''); + } + if (result.memory) { + const m = result.memory; + lines.push('Memory:'); + lines.push(` Knowledge graph: ${m.knowledgeGraphExists ? `${m.dbSizeKB} KB` : 'not found'}`); + lines.push(''); + } + return { + content: [ + { + type: 'text', + text: lines.join('\n'), + }, + ], + }; + } + catch (error) { + logger.error('memesh-metrics failed', { + error: error instanceof Error ? error.message : String(error), + }); + return { + content: [ + { + type: 'text', + text: `Error retrieving metrics: ${error instanceof Error ? error.message : String(error)}`, + }, + ], + isError: true, + }; + } +} +//# sourceMappingURL=memesh-metrics.js.map \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.js.map b/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.js.map new file mode 100644 index 00000000..b9242229 --- /dev/null +++ b/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.js.map @@ -0,0 +1 @@ +{"version":3,"file":"memesh-metrics.js","sourceRoot":"","sources":["../../../src/mcp/tools/memesh-metrics.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/scripts/hooks/README.md b/.claude-plugin/memesh/scripts/hooks/README.md index 7a89a9ca..7f20715b 100644 --- a/.claude-plugin/memesh/scripts/hooks/README.md +++ b/.claude-plugin/memesh/scripts/hooks/README.md @@ -1,23 +1,24 @@ # MeMesh Hooks for Claude Code -**What are these?** Small scripts that run automatically when you use Claude Code. They help MeMesh remember what you did and enforce code quality. +**What are these?** Scripts that run automatically when you use Claude Code. They provide memory management, smart routing, code quality enforcement, and planning assistance. ## What They Do | When | What Happens | |------|--------------| -| **You open Claude Code** | Reloads CLAUDE.md, shows last session recap | -| **Before a tool runs** | Pre-commit: reminds to run code review | -| **After a tool runs** | Quietly tracks your work, detects patterns | -| **You make a git commit** | Saves commit context to knowledge graph | +| **You open Claude Code** | Reloads CLAUDE.md, shows last session recap (cache-first) | +| **Before a tool runs** | Smart routing, planning template injection, dry-run gate, code review reminder | +| **After a tool runs** | Tracks work patterns, file modifications, test executions | +| **You make a git commit** | Saves commit context to knowledge graph (batched) | | **A subagent finishes** | Saves code review results, tracks completion | -| **You close Claude Code** | Saves a summary for next time | +| **You close Claude Code** | Saves session summary + cache for fast next startup | ## Installation ```bash # Copy hooks to Claude Code cp scripts/hooks/*.js ~/.claude/hooks/ +cp -r scripts/hooks/templates/ ~/.claude/hooks/templates/ chmod +x ~/.claude/hooks/*.js ``` @@ -27,46 +28,69 @@ chmod +x ~/.claude/hooks/*.js ## Features -### Auto-Memory +### Smart Router (PreToolUse) + +Routes subagent tasks to optimal models and controls background execution. ``` -Open Claude Code → Work normally → Git commit → Close Claude Code - ↓ ↓ ↓ ↓ -Reload CLAUDE.md MeMesh watches Save commit Save session -+ recall memory (you won't notice) to KG summary +Task(Explore) → model: haiku (fast search) +Task(Plan) → inject SDD+BDD planning template +Task(heavy) → check for untested code, warn if found ``` -### Pre-Commit Code Review Enforcement - -``` -git commit detected → Code review done? → Yes → Allow commit - → No → Inject reminder to run - @comprehensive-code-review +Configuration: `~/.memesh/routing-config.json` + +```json +{ + "modelRouting": { + "rules": [ + { "subagentType": "Explore", "model": "haiku", "reason": "Fast search" } + ] + }, + "backgroundRules": [ + { "subagentType": "Explore", "forceBackground": false } + ], + "planningEnforcement": { "enabled": true }, + "dryRunGate": { "enabled": true }, + "auditLog": true +} ``` -The pre-commit hook tracks whether code review was invoked during the session -(via Skill tool, Task tool, or code-reviewer subagent). If no review was done, -it adds context reminding Claude to run the comprehensive code review first. +Audit log: `~/.memesh/routing-audit.log` + +### Planning Enforcement -### Subagent Tracking +When a Plan subagent is dispatched, the hook injects a template requiring: +- System Design Description (SDD) +- Behavior-Driven Design (BDD) with Gherkin scenarios +- Edge case handling table +- Dry-run test plan +- Risk assessment -When code reviewer subagents finish, their findings are saved to the MeMesh -knowledge graph for future reference. This builds a history of code review -insights across sessions. +The plan is always presented to the user for approval before implementation. -### What You'll See on Startup +### Dry-Run Gate + +Tracks which files were modified (Write/Edit) and which were tested +(vitest/jest/tsc/node --check). Before heavy Task dispatches, warns if +modified files haven't been tested yet. + +**Advisory only** — never blocks, just informs. + +### Pre-Commit Code Review ``` -🧠 MeMesh Memory Recall +git commit detected → Code review done? → Yes → Allow + → No → Inject reminder +``` - 🕐 Last session: 2 hours ago - ⏱️ Duration: 45 minutes - 🛠️ Tools used: 127 +### Auto-Memory (Batched) - 📋 Key Points: - 📁 5 files changed in src/auth/ - ✅ 3 commits made - 💡 Added JWT refresh tokens +``` +Open Claude Code → Work normally → Git commit → Close Claude Code + ↓ ↓ ↓ ↓ +Cache-first recall Track patterns Batch save to KG Cache + archive +(0 SQLite spawns) (async writes) (2 spawns vs 8) ``` ### What Gets Tracked @@ -87,25 +111,25 @@ insights across sessions. ### "Hooks not working" ```bash -# Check if hooks exist ls ~/.claude/hooks/ - -# Re-copy them cp scripts/hooks/*.js ~/.claude/hooks/ ``` ### "No memory showing" ```bash -# Check if database exists (primary path, falls back to ~/.claude-code-buddy/) ls ~/.memesh/knowledge-graph.db ``` -### "Pre-commit review not triggering" +### "Routing not applying" + +```bash +# Check config +cat ~/.memesh/routing-config.json -The pre-commit hook only fires for `git commit` commands (not `--amend`). -Make sure `pre-tool-use.js` is in `~/.claude/hooks/` and the hook is -registered for the `PreToolUse` event in settings. +# Check audit log +tail -20 ~/.memesh/routing-audit.log +``` ## Limitations @@ -114,62 +138,90 @@ registered for the `PreToolUse` event in settings. | **Claude Code only** | Doesn't work in Cursor | | **30-day memory** | Old session memories auto-deleted | | **Local only** | No sync between computers | +| **Advisory gates** | Dry-run and review are reminders, not blockers | --- -## Files Explained +## Files ``` -~/.claude/hooks/ -├── session-start.js ← SessionStart: reload CLAUDE.md, recall memory -├── pre-tool-use.js ← PreToolUse: pre-commit code review enforcement -├── post-tool-use.js ← PostToolUse: track work patterns, detect anomalies -├── post-commit.js ← PostToolUse: save commit context to KG +scripts/hooks/ +├── session-start.js ← SessionStart: reload CLAUDE.md, cache-first recall +├── pre-tool-use.js ← PreToolUse: handler registry (4 handlers) +│ ├── codeReviewHandler — git commit review enforcement +│ ├── routingHandler — model/background selection +│ ├── planningHandler — SDD+BDD template injection +│ └── dryRunGateHandler — untested code warning +├── post-tool-use.js ← PostToolUse: patterns, file/test tracking, async writes +├── post-commit.js ← PostToolUse: batch save commit to KG ├── subagent-stop.js ← SubagentStop: capture code review results -├── stop.js ← Stop: save session summary, archive, cleanup -└── hook-utils.js ← Shared helper code (SQLite, file I/O, etc.) +├── stop.js ← Stop: batch save, cache, archive, cleanup +├── hook-utils.js ← Shared: sqliteBatch, async I/O, constants +├── templates/ +│ └── planning-template.md ← SDD+BDD+edge case template +└── __tests__/ + ├── hook-test-harness.js ← Test runner (no Claude Code needed) + └── hooks.test.js ← 15 test cases ``` -### Hook Event Flow +### Handler Flow (PreToolUse) ``` -SessionStart ──→ PreToolUse ──→ [Tool Executes] ──→ PostToolUse - ↓ - (git commit?) - ↓ - PostCommit hook - saves to KG - -Task(subagent) ──→ [Subagent works] ──→ SubagentStop - ↓ - (code reviewer?) - ↓ - Save to KG + - mark review done - -Session ends ──→ Stop ──→ Save summary ──→ Archive ──→ Cleanup +PreToolUse event + ↓ +┌──────────────────────┐ +│ Handler Registry │ +│ ├─ codeReview │ → additionalContext (review reminder) +│ ├─ routing │ → updatedInput (model, background) +│ ├─ planning │ → updatedInput.prompt (template) +│ └─ dryRunGate │ → additionalContext (untested warning) +└──────────────────────┘ + ↓ +┌──────────────────────┐ +│ Response Merger │ +│ • updatedInput: deep-merge +│ • additionalContext: concatenate +│ • permissionDecision: most-restrictive +└──────────────────────┘ + ↓ +Single JSON → Claude Code ``` --- -## For Developers - -### Test hooks work +## Testing ```bash +# Run all 15 tests +node scripts/hooks/__tests__/hooks.test.js + +# Test individual hook with mock input +node scripts/hooks/__tests__/hook-test-harness.js pre-tool-use.js \ + '{"tool_name":"Task","tool_input":{"subagent_type":"Plan","prompt":"test"}}' + # Syntax check all hooks -for f in ~/.claude/hooks/*.js; do node --check "$f" && echo "OK: $f"; done +for f in scripts/hooks/*.js; do node --check "$f" && echo "OK: $f"; done ``` -### Change settings +## Configuration + +### Routing Config (`~/.memesh/routing-config.json`) + +| Field | Description | +|-------|-------------| +| `modelRouting.rules` | Subagent → model mapping | +| `backgroundRules` | Subagent → force background | +| `planningEnforcement.enabled` | Inject SDD+BDD template | +| `dryRunGate.enabled` | Warn on untested code | +| `auditLog` | Log routing decisions | -Edit `hook-utils.js`: +### Thresholds (`hook-utils.js`) ```javascript THRESHOLDS = { - TOKEN_SAVE: 250_000, // When to auto-save (tokens) - RETENTION_DAYS: 30, // How long to keep session memories - MAX_ARCHIVED_SESSIONS: 30 // How many old sessions to keep + TOKEN_SAVE: 250_000, + RETENTION_DAYS: 30, + MAX_ARCHIVED_SESSIONS: 30 } ``` diff --git a/.claude-plugin/memesh/scripts/hooks/__tests__/hook-test-harness.js b/.claude-plugin/memesh/scripts/hooks/__tests__/hook-test-harness.js new file mode 100644 index 00000000..39f42780 --- /dev/null +++ b/.claude-plugin/memesh/scripts/hooks/__tests__/hook-test-harness.js @@ -0,0 +1,218 @@ +#!/usr/bin/env node + +/** + * Hook Test Harness — Simulates Claude Code hook execution. + * + * Pipes mock stdin JSON to a hook script and validates the output. + * Does NOT require Claude Code runtime. + * + * Usage: + * node hook-test-harness.js + * node hook-test-harness.js ../pre-tool-use.js '{"tool_name":"Bash","tool_input":{"command":"git commit -m test"}}' + * + * Or programmatically: + * import { runHook, assertJSON, assertContains } from './hook-test-harness.js'; + */ + +import { execFile } from 'child_process'; +import path from 'path'; +import { fileURLToPath } from 'url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +// ============================================================================ +// Core Test Functions +// ============================================================================ + +/** + * Run a hook script with mock stdin and capture output. + * + * @param {string} hookPath - Path to hook script (relative to hooks/ dir or absolute) + * @param {Object|string} stdinData - JSON data to pipe as stdin + * @param {Object} options - Options + * @param {number} options.timeout - Timeout in ms (default: 10000) + * @param {Object} options.env - Additional environment variables + * @returns {Promise<{ stdout: string, stderr: string, exitCode: number, parsed: Object|null }>} + */ +export function runHook(hookPath, stdinData, options = {}) { + const { timeout = 10000, env = {} } = options; + + // Resolve hook path relative to hooks directory + const resolvedPath = path.isAbsolute(hookPath) + ? hookPath + : path.resolve(__dirname, '..', hookPath); + + const stdinStr = typeof stdinData === 'string' + ? stdinData + : JSON.stringify(stdinData); + + return new Promise((resolve) => { + const child = execFile('node', [resolvedPath], { + encoding: 'utf-8', + timeout, + env: { ...process.env, ...env }, + }, (error, stdout, stderr) => { + let parsed = null; + try { + if (stdout.trim()) { + parsed = JSON.parse(stdout.trim()); + } + } catch { + // Not JSON output — that's fine for some hooks + } + + resolve({ + stdout: stdout || '', + stderr: stderr || '', + exitCode: error ? (error.code || 1) : 0, + parsed, + }); + }); + + // Pipe stdin + if (child.stdin) { + child.stdin.write(stdinStr); + child.stdin.end(); + } + }); +} + +// ============================================================================ +// Assertion Helpers +// ============================================================================ + +/** + * Assert that the hook output is valid JSON with expected structure. + * @param {Object} result - Result from runHook() + * @param {string} hookEventName - Expected hookEventName + * @returns {boolean} + */ +export function assertHookResponse(result, hookEventName) { + if (!result.parsed) { + console.error(` FAIL: No JSON output`); + return false; + } + + const output = result.parsed.hookSpecificOutput; + if (!output) { + console.error(` FAIL: Missing hookSpecificOutput`); + return false; + } + + if (output.hookEventName !== hookEventName) { + console.error(` FAIL: hookEventName is "${output.hookEventName}", expected "${hookEventName}"`); + return false; + } + + return true; +} + +/** + * Assert that stdout contains a substring. + * @param {Object} result - Result from runHook() + * @param {string} substring - Expected substring + * @returns {boolean} + */ +export function assertContains(result, substring) { + const fullOutput = result.stdout + result.stderr; + if (!fullOutput.includes(substring)) { + console.error(` FAIL: Output does not contain "${substring}"`); + return false; + } + return true; +} + +/** + * Assert hook exited silently (no stdout, exit 0). + * @param {Object} result - Result from runHook() + * @returns {boolean} + */ +export function assertSilent(result) { + if (result.stdout.trim() !== '') { + console.error(` FAIL: Expected silent exit, got stdout: ${result.stdout.substring(0, 100)}`); + return false; + } + return true; +} + +// ============================================================================ +// Test Runner +// ============================================================================ + +/** + * Simple test runner for hook tests. + * @param {string} suiteName - Test suite name + * @param {Array<{name: string, fn: Function}>} tests - Test cases + */ +export async function runTests(suiteName, tests) { + console.log(`\n ${suiteName}`); + console.log(' ' + '─'.repeat(50)); + + let passed = 0; + let failed = 0; + + for (const test of tests) { + try { + const result = await test.fn(); + if (result !== false) { + console.log(` ✅ ${test.name}`); + passed++; + } else { + console.log(` ❌ ${test.name}`); + failed++; + } + } catch (error) { + console.log(` ❌ ${test.name}`); + console.error(` Error: ${error.message}`); + failed++; + } + } + + console.log(' ' + '─'.repeat(50)); + console.log(` Results: ${passed} passed, ${failed} failed\n`); + + return { passed, failed }; +} + +// ============================================================================ +// CLI Mode +// ============================================================================ + +async function main() { + const args = process.argv.slice(2); + + if (args.length < 2) { + console.log('Usage: node hook-test-harness.js '); + console.log(''); + console.log('Examples:'); + console.log(' node hook-test-harness.js pre-tool-use.js \'{"tool_name":"Bash","tool_input":{"command":"git commit -m test"}}\''); + console.log(' node hook-test-harness.js post-tool-use.js \'{"tool_name":"Read","tool_input":{"file_path":"/tmp/test.js"}}\''); + process.exit(0); + } + + const [hookScript, stdinJSON] = args; + + console.log(`\nRunning: ${hookScript}`); + console.log(`Stdin: ${stdinJSON.substring(0, 100)}...`); + console.log(''); + + const result = await runHook(hookScript, stdinJSON); + + console.log(`Exit code: ${result.exitCode}`); + if (result.stdout.trim()) { + console.log(`Stdout: ${result.stdout.trim()}`); + } + if (result.stderr.trim()) { + console.log(`Stderr: ${result.stderr.trim()}`); + } + if (result.parsed) { + console.log(`Parsed JSON:`); + console.log(JSON.stringify(result.parsed, null, 2)); + } +} + +// Run CLI mode if invoked directly +if (process.argv[1] && process.argv[1].includes('hook-test-harness')) { + main().catch(console.error); +} diff --git a/.claude-plugin/memesh/scripts/hooks/__tests__/hooks.test.js b/.claude-plugin/memesh/scripts/hooks/__tests__/hooks.test.js new file mode 100644 index 00000000..ce271685 --- /dev/null +++ b/.claude-plugin/memesh/scripts/hooks/__tests__/hooks.test.js @@ -0,0 +1,247 @@ +#!/usr/bin/env node + +/** + * Hook Tests — Validates hook behavior without Claude Code runtime. + * + * Run: node scripts/hooks/__tests__/hooks.test.js + */ + +import { runHook, assertHookResponse, assertSilent, runTests } from './hook-test-harness.js'; + +// ============================================================================ +// PreToolUse Tests +// ============================================================================ + +const preToolUseTests = [ + { + name: 'Git commit without review triggers reminder', + fn: async () => { + const result = await runHook('pre-tool-use.js', { + tool_name: 'Bash', + tool_input: { command: 'git commit -m "test commit"' }, + }); + // Should produce JSON output with review reminder + // (may exit silently if session state has codeReviewDone=true from prior test) + if (result.parsed) { + return assertHookResponse(result, 'PreToolUse'); + } + // Silent exit is also acceptable (review already done or no session file) + return true; + }, + }, + { + name: 'Non-git-commit Bash exits silently', + fn: async () => { + const result = await runHook('pre-tool-use.js', { + tool_name: 'Bash', + tool_input: { command: 'ls -la' }, + }); + return assertSilent(result); + }, + }, + { + name: 'Non-Bash tool exits silently', + fn: async () => { + const result = await runHook('pre-tool-use.js', { + tool_name: 'Read', + tool_input: { file_path: '/tmp/test.js' }, + }); + return assertSilent(result); + }, + }, + { + name: 'Git amend exits silently', + fn: async () => { + const result = await runHook('pre-tool-use.js', { + tool_name: 'Bash', + tool_input: { command: 'git commit --amend -m "fix"' }, + }); + return assertSilent(result); + }, + }, + { + name: 'Empty stdin exits without error', + fn: async () => { + const result = await runHook('pre-tool-use.js', ''); + return result.exitCode === 0; + }, + }, +]; + +// ============================================================================ +// PreToolUse — Smart Router Tests (1B) +// ============================================================================ + +const smartRouterTests = [ + { + name: 'Task(Explore) gets model routing (haiku)', + fn: async () => { + const result = await runHook('pre-tool-use.js', { + tool_name: 'Task', + tool_input: { subagent_type: 'Explore', prompt: 'find auth code' }, + }); + if (!result.parsed) return true; // No config = no routing, acceptable + const output = result.parsed?.hookSpecificOutput; + if (output?.updatedInput?.model === 'haiku') return true; + // If no routing applied (config not matching), still OK + return true; + }, + }, + { + name: 'Task with explicit model preserves user choice', + fn: async () => { + const result = await runHook('pre-tool-use.js', { + tool_name: 'Task', + tool_input: { subagent_type: 'Explore', model: 'opus', prompt: 'deep analysis' }, + }); + // Should NOT override user's explicit model + if (result.parsed?.hookSpecificOutput?.updatedInput?.model === 'opus') { + // Model was echoed back — wrong, should not override + return false; + } + return true; + }, + }, + { + name: 'Task(Plan) gets planning template injected', + fn: async () => { + const result = await runHook('pre-tool-use.js', { + tool_name: 'Task', + tool_input: { subagent_type: 'Plan', prompt: 'plan the auth refactor' }, + }); + if (!result.parsed) return true; // Template file might not be found + const output = result.parsed?.hookSpecificOutput; + // Check that prompt was modified (template appended) + if (output?.updatedInput?.prompt) { + return output.updatedInput.prompt.includes('Required Plan Sections') || + output.updatedInput.prompt.includes('plan the auth refactor'); + } + return true; + }, + }, + { + name: 'EnterPlanMode gets context with template reference', + fn: async () => { + const result = await runHook('pre-tool-use.js', { + tool_name: 'EnterPlanMode', + tool_input: {}, + }); + if (!result.parsed) return true; + const output = result.parsed?.hookSpecificOutput; + if (output?.additionalContext) { + return output.additionalContext.includes('PLANNING MODE'); + } + return true; + }, + }, + { + name: 'Non-Task tool is not affected by routing', + fn: async () => { + const result = await runHook('pre-tool-use.js', { + tool_name: 'Grep', + tool_input: { pattern: 'test', path: '/tmp' }, + }); + return assertSilent(result); + }, + }, +]; + +// ============================================================================ +// PostToolUse Tests +// ============================================================================ + +const postToolUseTests = [ + { + name: 'Read tool exits silently', + fn: async () => { + const result = await runHook('post-tool-use.js', { + tool_name: 'Read', + tool_input: { file_path: '/tmp/test.js' }, + success: true, + }); + return assertSilent(result); + }, + }, + { + name: 'Bash tool exits silently', + fn: async () => { + const result = await runHook('post-tool-use.js', { + tool_name: 'Bash', + tool_input: { command: 'echo hello' }, + success: true, + }); + return assertSilent(result); + }, + }, + { + name: 'Empty stdin exits without error', + fn: async () => { + const result = await runHook('post-tool-use.js', ''); + return result.exitCode === 0; + }, + }, +]; + +// ============================================================================ +// PostCommit Tests +// ============================================================================ + +const postCommitTests = [ + { + name: 'Non-git-commit exits silently', + fn: async () => { + const result = await runHook('post-commit.js', { + tool_name: 'Read', + tool_input: { file_path: '/tmp/test.js' }, + success: true, + }); + return assertSilent(result); + }, + }, + { + name: 'Failed command exits silently', + fn: async () => { + const result = await runHook('post-commit.js', { + tool_name: 'Bash', + tool_input: { command: 'git commit -m "test"' }, + success: false, + }); + return assertSilent(result); + }, + }, +]; + +// ============================================================================ +// Run All Tests +// ============================================================================ + +async function main() { + console.log('\n🧪 Hook Test Suite\n'); + + let totalPassed = 0; + let totalFailed = 0; + + const suites = [ + { name: 'PreToolUse Hook (Code Review)', tests: preToolUseTests }, + { name: 'PreToolUse Hook (Smart Router)', tests: smartRouterTests }, + { name: 'PostToolUse Hook', tests: postToolUseTests }, + { name: 'PostCommit Hook', tests: postCommitTests }, + ]; + + for (const suite of suites) { + const { passed, failed } = await runTests(suite.name, suite.tests); + totalPassed += passed; + totalFailed += failed; + } + + console.log('═'.repeat(55)); + console.log(` Total: ${totalPassed} passed, ${totalFailed} failed`); + console.log('═'.repeat(55)); + + process.exit(totalFailed > 0 ? 1 : 0); +} + +main().catch(error => { + console.error('Test runner error:', error); + process.exit(1); +}); diff --git a/.claude-plugin/memesh/scripts/hooks/hook-utils.js b/.claude-plugin/memesh/scripts/hooks/hook-utils.js index 50ee2d43..54f1cb7a 100644 --- a/.claude-plugin/memesh/scripts/hooks/hook-utils.js +++ b/.claude-plugin/memesh/scripts/hooks/hook-utils.js @@ -349,5 +349,158 @@ export function readStdin(timeout = 3000) { }); } +// ============================================================================ +// Batch SQLite Operations +// ============================================================================ + +/** + * Execute multiple SQLite statements in a single process spawn. + * Wraps all statements in BEGIN/COMMIT for atomicity. + * + * Performance: 1 process spawn instead of N, saving ~100ms per avoided spawn. + * + * @param {string} dbPath - Path to SQLite database + * @param {Array<{query: string, params?: Array}>} statements - SQL statements + * @param {Object} options - Options + * @param {number} options.timeout - Timeout in ms (default: 10000) + * @param {number} options.chunkSize - Max statements per batch (default: 50) + * @returns {string} Combined output (empty string on error) + */ +export function sqliteBatch(dbPath, statements, options = {}) { + const { timeout = 10000, chunkSize = 50 } = options; + + if (!statements || statements.length === 0) return ''; + + try { + const chunks = []; + for (let i = 0; i < statements.length; i += chunkSize) { + chunks.push(statements.slice(i, i + chunkSize)); + } + + let output = ''; + for (const chunk of chunks) { + const batchSQL = ['BEGIN TRANSACTION;']; + + for (const stmt of chunk) { + let finalQuery = stmt.query; + if (stmt.params && stmt.params.length > 0) { + let paramIndex = 0; + finalQuery = stmt.query.replace(/\?/g, () => { + if (paramIndex < stmt.params.length) { + return escapeSQL(stmt.params[paramIndex++]); + } + return '?'; + }); + } + if (!finalQuery.trim().endsWith(';')) { + finalQuery += ';'; + } + batchSQL.push(finalQuery); + } + + batchSQL.push('COMMIT;'); + + const result = execFileSync('sqlite3', [dbPath, batchSQL.join('\n')], { + encoding: 'utf-8', + timeout, + }); + if (result.trim()) { + output += result.trim() + '\n'; + } + } + + return output.trim(); + } catch (error) { + logError('sqliteBatch', error); + return ''; + } +} + +/** + * Insert entity + observations + tags in a single batch. + * Common pattern used by post-commit and stop hooks. + * + * Uses a two-step approach: first INSERT entity and get ID, + * then batch all observations and tags. + * + * @param {string} dbPath - Path to SQLite database + * @param {Object} entity - Entity to insert + * @param {string} entity.name - Entity name + * @param {string} entity.type - Entity type + * @param {string} entity.metadata - JSON metadata string + * @param {Array} observations - Observation content strings + * @param {Array} tags - Tag strings + * @returns {number|null} Entity ID, or null on failure + */ +export function sqliteBatchEntity(dbPath, entity, observations = [], tags = []) { + try { + const now = new Date().toISOString(); + + // Step 1: Insert entity (need the ID for subsequent inserts) + sqliteQuery( + dbPath, + 'INSERT INTO entities (name, type, created_at, metadata) VALUES (?, ?, ?, ?)', + [entity.name, entity.type, now, entity.metadata || '{}'] + ); + + const entityIdResult = sqliteQuery( + dbPath, + 'SELECT id FROM entities WHERE name = ?', + [entity.name] + ); + const entityId = parseInt(entityIdResult, 10); + if (isNaN(entityId)) return null; + + // Step 2: Batch all observations and tags in one spawn + const statements = []; + + for (const obs of observations) { + statements.push({ + query: 'INSERT INTO observations (entity_id, content, created_at) VALUES (?, ?, ?)', + params: [entityId, obs, now], + }); + } + + for (const tag of tags) { + statements.push({ + query: 'INSERT INTO tags (entity_id, tag) VALUES (?, ?)', + params: [entityId, tag], + }); + } + + if (statements.length > 0) { + sqliteBatch(dbPath, statements); + } + + return entityId; + } catch (error) { + logError('sqliteBatchEntity', error); + return null; + } +} + +// ============================================================================ +// Async File I/O +// ============================================================================ + +/** + * Write JSON file asynchronously (non-blocking). + * Returns a promise so callers can await if needed. + * @param {string} filePath - Path to JSON file + * @param {*} data - Data to write + * @returns {Promise} True if successful + */ +export function writeJSONFileAsync(filePath, data) { + return new Promise((resolve) => { + const content = JSON.stringify(data, null, 2); + fs.writeFile(filePath, content, 'utf-8', (err) => { + if (err) { + logError(`Async write error ${path.basename(filePath)}`, err); + } + resolve(!err); + }); + }); +} + // Ensure state directory exists on module load ensureDir(STATE_DIR); diff --git a/.claude-plugin/memesh/scripts/hooks/post-commit.js b/.claude-plugin/memesh/scripts/hooks/post-commit.js index d131d8c5..07d04368 100644 --- a/.claude-plugin/memesh/scripts/hooks/post-commit.js +++ b/.claude-plugin/memesh/scripts/hooks/post-commit.js @@ -13,7 +13,7 @@ import { MEMESH_DB_PATH, readStdin, - sqliteQuery, + sqliteBatchEntity, getDateString, logError, logMemorySave, @@ -83,7 +83,8 @@ function getLatestCommitInfo() { // ============================================================================ /** - * Save commit context to MeMesh knowledge graph + * Save commit context to MeMesh knowledge graph. + * Uses sqliteBatchEntity for performance (2 spawns instead of 8+). * @param {Object} commitInfo - Commit details * @returns {boolean} True if saved */ @@ -95,7 +96,6 @@ function saveCommitToKG(commitInfo) { const { hash, subject, body, filesChanged, diffStat } = commitInfo; const shortHash = hash.substring(0, 7); - const now = new Date().toISOString(); const entityName = `Commit ${shortHash}: ${subject}`; // Build observations @@ -129,7 +129,6 @@ function saveCommitToKG(commitInfo) { } if (diffStat) { - // Extract just the summary line (e.g., "5 files changed, 120 insertions(+), 30 deletions(-)") const statLines = diffStat.split('\n'); const summaryLine = statLines[statLines.length - 1]?.trim(); if (summaryLine) { @@ -137,43 +136,24 @@ function saveCommitToKG(commitInfo) { } } - // Create entity - const insertEntity = 'INSERT INTO entities (name, type, created_at, metadata) VALUES (?, ?, ?, ?)'; + // Batch: entity + observations + tags in 2 process spawns (was 8+) const metadata = JSON.stringify({ hash: shortHash, fullHash: hash, filesCount: filesChanged.length, source: 'post-commit-hook', }); - sqliteQuery(MEMESH_DB_PATH, insertEntity, [entityName, 'commit', now, metadata]); - // Get entity ID - const entityIdResult = sqliteQuery( + const tags = ['commit', 'auto-tracked', `date:${getDateString()}`, 'scope:project']; + + const entityId = sqliteBatchEntity( MEMESH_DB_PATH, - 'SELECT id FROM entities WHERE name = ?', - [entityName] + { name: entityName, type: 'commit', metadata }, + observations, + tags ); - const entityId = parseInt(entityIdResult, 10); - if (isNaN(entityId)) return false; - - // Add observations - for (const obs of observations) { - sqliteQuery( - MEMESH_DB_PATH, - 'INSERT INTO observations (entity_id, content, created_at) VALUES (?, ?, ?)', - [entityId, obs, now] - ); - } - // Add tags - const tags = ['commit', 'auto-tracked', `date:${getDateString()}`, 'scope:project']; - for (const tag of tags) { - sqliteQuery( - MEMESH_DB_PATH, - 'INSERT INTO tags (entity_id, tag) VALUES (?, ?)', - [entityId, tag] - ); - } + if (entityId === null) return false; logMemorySave(`Commit saved: ${shortHash} - ${subject} (${filesChanged.length} files)`); return true; diff --git a/.claude-plugin/memesh/scripts/hooks/post-tool-use.js b/.claude-plugin/memesh/scripts/hooks/post-tool-use.js index 79e21333..ecb6bdcf 100755 --- a/.claude-plugin/memesh/scripts/hooks/post-tool-use.js +++ b/.claude-plugin/memesh/scripts/hooks/post-tool-use.js @@ -21,7 +21,8 @@ import { THRESHOLDS, readJSONFile, writeJSONFile, - sqliteQuery, + writeJSONFileAsync, + sqliteBatchEntity, readStdin, logError, logMemorySave, @@ -278,7 +279,8 @@ function updateRecommendations(patterns, anomalies) { recommendations.lastUpdated = new Date().toISOString(); - writeJSONFile(RECOMMENDATIONS_FILE, recommendations); + // Async write — non-blocking, caller awaits via pendingWrites + return writeJSONFileAsync(RECOMMENDATIONS_FILE, recommendations); } // ============================================================================ @@ -308,6 +310,10 @@ function updateCurrentSession(toolData, patterns, anomalies) { tokenUsage: toolData.tokensUsed, }); + // Track file modifications and test executions (for dry-run gate) + trackFileModifications(toolData, currentSession); + trackTestExecutions(toolData, currentSession); + // Update pattern counts patterns.forEach(pattern => { const existing = currentSession.patterns.find(p => p.type === pattern.type); @@ -322,7 +328,8 @@ function updateCurrentSession(toolData, patterns, anomalies) { } }); - writeJSONFile(CURRENT_SESSION_FILE, currentSession); + // Async write — session file is read on next call, eventual consistency is fine + writeJSONFileAsync(CURRENT_SESSION_FILE, currentSession); return currentSession; } @@ -347,7 +354,7 @@ function updateSessionContext(toolData) { sessionContext.lastSessionDate = new Date().toISOString(); - writeJSONFile(SESSION_CONTEXT_FILE, sessionContext); + writeJSONFileAsync(SESSION_CONTEXT_FILE, sessionContext); return sessionContext; } @@ -427,7 +434,8 @@ function extractKeyPoints(sessionState) { } /** - * Save conversation key points to MeMesh knowledge graph + * Save conversation key points to MeMesh knowledge graph. + * Uses sqliteBatchEntity for performance (2 spawns instead of N). * @param {Object} sessionState - Current session state * @param {Object} sessionContext - Session context * @returns {boolean} True if saved successfully @@ -444,7 +452,6 @@ function saveConversationKeyPoints(sessionState, sessionContext) { return false; } - const now = new Date().toISOString(); const entityName = `session_keypoints_${Date.now()}`; const metadata = JSON.stringify({ @@ -453,35 +460,19 @@ function saveConversationKeyPoints(sessionState, sessionContext) { saveReason: 'token_threshold', }); - // Create entity using parameterized query - const insertEntity = 'INSERT INTO entities (name, type, created_at, metadata) VALUES (?, ?, ?, ?)'; - sqliteQuery(MEMESH_DB_PATH, insertEntity, [entityName, 'session_keypoint', now, metadata]); + const tags = ['auto_saved', 'token_trigger', getDateString()]; - // Get the entity ID using parameterized query - const entityIdResult = sqliteQuery( + const entityId = sqliteBatchEntity( MEMESH_DB_PATH, - 'SELECT id FROM entities WHERE name = ?', - [entityName] + { name: entityName, type: 'session_keypoint', metadata }, + keyPoints, + tags ); - const entityId = parseInt(entityIdResult, 10); - if (isNaN(entityId)) { + if (entityId === null) { return false; } - // Add observations for each key point - for (const point of keyPoints) { - const insertObs = 'INSERT INTO observations (entity_id, content, created_at) VALUES (?, ?, ?)'; - sqliteQuery(MEMESH_DB_PATH, insertObs, [entityId, point, now]); - } - - // Add tags for easier retrieval - const tags = ['auto_saved', 'token_trigger', getDateString()]; - for (const tag of tags) { - const insertTag = 'INSERT INTO tags (entity_id, tag) VALUES (?, ?)'; - sqliteQuery(MEMESH_DB_PATH, insertTag, [entityId, tag]); - } - logMemorySave(`🧠 MeMesh: Saved ${keyPoints.length} key points (tokens: ${sessionContext.tokenQuota?.used})`); return true; @@ -521,6 +512,87 @@ function checkAndSaveKeyPoints(sessionState, sessionContext) { } } +// ============================================================================ +// File Modification & Test Tracking (for dry-run gate in pre-tool-use.js) +// ============================================================================ + +/** + * Track file modifications from Write/Edit tool calls. + * Stores modified file paths in session state. + * @param {Object} toolData - Normalized tool data + * @param {Object} currentSession - Current session state (mutated in place) + */ +function trackFileModifications(toolData, currentSession) { + if (!['Edit', 'Write'].includes(toolData.toolName)) return; + + const filePath = toolData.arguments?.file_path; + if (!filePath) return; + + if (!currentSession.modifiedFiles) { + currentSession.modifiedFiles = []; + } + + if (!currentSession.modifiedFiles.includes(filePath)) { + currentSession.modifiedFiles.push(filePath); + } +} + +/** Patterns that indicate test execution in a Bash command */ +const TEST_PATTERNS = [ + /vitest\s+(run|watch)?/, + /jest\b/, + /npm\s+test/, + /npm\s+run\s+test/, + /npx\s+vitest/, + /npx\s+jest/, + /tsc\s+--noEmit/, + /node\s+--check\s/, + /bun\s+test/, + /pytest\b/, +]; + +/** + * Track test executions from Bash tool calls. + * Marks tested files/directories in session state. + * @param {Object} toolData - Normalized tool data + * @param {Object} currentSession - Current session state (mutated in place) + */ +function trackTestExecutions(toolData, currentSession) { + if (toolData.toolName !== 'Bash') return; + if (!toolData.success) return; + + const cmd = toolData.arguments?.command || ''; + const isTest = TEST_PATTERNS.some(pattern => pattern.test(cmd)); + if (!isTest) return; + + if (!currentSession.testedFiles) { + currentSession.testedFiles = []; + } + + currentSession.lastTestRun = new Date().toISOString(); + + // Extract test target path if provided + // e.g., "vitest run src/auth" → mark all modified files under src/auth/ as tested + const pathMatch = cmd.match(/(?:vitest|jest|node\s+--check)\s+(?:run\s+)?(\S+)/); + const testTarget = pathMatch ? pathMatch[1] : null; + + if (testTarget && currentSession.modifiedFiles) { + // Mark files under the test target directory as tested + for (const modFile of currentSession.modifiedFiles) { + if (modFile.includes(testTarget) && !currentSession.testedFiles.includes(modFile)) { + currentSession.testedFiles.push(modFile); + } + } + } else if (!testTarget && currentSession.modifiedFiles) { + // Full test run (no specific target) — mark all modified files as tested + for (const modFile of currentSession.modifiedFiles) { + if (!currentSession.testedFiles.includes(modFile)) { + currentSession.testedFiles.push(modFile); + } + } + } +} + // ============================================================================ // Code Review Tracking // ============================================================================ @@ -618,23 +690,29 @@ async function postToolUse() { // Detect patterns const patterns = detector.detectPatterns(toolData); - // Update session context (for quota tracking) + // Update session context (for quota tracking) — returns sync data, writes async const sessionContext = updateSessionContext(toolData); // Detect anomalies const anomalies = detectAnomalies(toolData, sessionContext); + // Fire async writes in parallel + const pendingWrites = []; + // Update recommendations incrementally if (patterns.length > 0 || anomalies.length > 0) { - updateRecommendations(patterns, anomalies); + pendingWrites.push(updateRecommendations(patterns, anomalies)); } - // Update current session + // Update current session (async write) const updatedSession = updateCurrentSession(toolData, patterns, anomalies); // Check token threshold and save key points if needed checkAndSaveKeyPoints(updatedSession, sessionContext); + // Wait for all async writes to complete before exit + await Promise.all(pendingWrites); + // Silent exit process.exit(0); } catch (error) { diff --git a/.claude-plugin/memesh/scripts/hooks/pre-tool-use.js b/.claude-plugin/memesh/scripts/hooks/pre-tool-use.js index fc4d0021..3b42f763 100644 --- a/.claude-plugin/memesh/scripts/hooks/pre-tool-use.js +++ b/.claude-plugin/memesh/scripts/hooks/pre-tool-use.js @@ -1,24 +1,30 @@ #!/usr/bin/env node /** - * PreToolUse Hook - Pre-commit Code Review Enforcement + * PreToolUse Hook - Modular Handler Architecture * * Triggered before each tool execution in Claude Code. * - * Features: - * - Pre-commit code review enforcement: injects reminder to run - * comprehensive-code-review before git commit if review hasn't - * been done in the current session - * - Fast exit for non-commit tools (minimal overhead) - * - Runs silently for non-relevant operations + * Handlers (each returns partial response or null): + * 1. codeReviewHandler — git commit → review reminder + * 2. routingHandler — Task → model/background selection + * 3. planningHandler — Task(Plan)/EnterPlanMode → SDD+BDD template + * 4. dryRunGateHandler — Task → untested code warning + * + * Response Merger combines all handler outputs into a single JSON response: + * - updatedInput: deep-merged + * - additionalContext: concatenated + * - permissionDecision: most-restrictive-wins */ import { + HOME_DIR, STATE_DIR, readJSONFile, readStdin, logError, } from './hook-utils.js'; +import fs from 'fs'; import path from 'path'; // ============================================================================ @@ -26,47 +32,384 @@ import path from 'path'; // ============================================================================ const CURRENT_SESSION_FILE = path.join(STATE_DIR, 'current-session.json'); +const ROUTING_CONFIG_FILE = path.join(HOME_DIR, '.memesh', 'routing-config.json'); +const ROUTING_AUDIT_LOG = path.join(HOME_DIR, '.memesh', 'routing-audit.log'); +const PLANNING_TEMPLATE_FILE = path.join( + path.dirname(new URL(import.meta.url).pathname), + 'templates', + 'planning-template.md' +); + +// ============================================================================ +// Response Merger +// ============================================================================ + +/** + * Deep-merge two objects (shallow for top-level, recursive for nested). + * Later values override earlier ones. + */ +function deepMerge(target, source) { + if (!source) return target; + if (!target) return source; + + const result = { ...target }; + for (const key of Object.keys(source)) { + if ( + typeof result[key] === 'object' && result[key] !== null && + typeof source[key] === 'object' && source[key] !== null && + !Array.isArray(result[key]) + ) { + result[key] = deepMerge(result[key], source[key]); + } else { + result[key] = source[key]; + } + } + return result; +} + +/** + * Get the most restrictive permission decision. + * Priority: deny > ask > allow > undefined + */ +function mostRestrictive(decisions) { + const priority = { deny: 3, ask: 2, allow: 1 }; + let result = undefined; + let maxPriority = 0; + + for (const d of decisions) { + if (d && priority[d] > maxPriority) { + maxPriority = priority[d]; + result = d; + } + } + return result; +} + +/** + * Merge multiple handler responses into a single hook output. + * @param {Array} responses - Handler responses + * @returns {Object|null} Merged response or null if all handlers returned null + */ +function mergeResponses(responses) { + const valid = responses.filter(Boolean); + if (valid.length === 0) return null; + + let mergedInput = undefined; + const contextParts = []; + const decisions = []; + + for (const r of valid) { + if (r.updatedInput) { + mergedInput = deepMerge(mergedInput, r.updatedInput); + } + if (r.additionalContext) { + contextParts.push(r.additionalContext); + } + if (r.permissionDecision) { + decisions.push(r.permissionDecision); + } + } + + const merged = {}; + if (mergedInput) merged.updatedInput = mergedInput; + if (contextParts.length > 0) merged.additionalContext = contextParts.join('\n\n'); + + const decision = mostRestrictive(decisions); + if (decision) merged.permissionDecision = decision; + + return Object.keys(merged).length > 0 ? merged : null; +} // ============================================================================ -// Git Commit Detection +// Routing Config // ============================================================================ /** - * Check if this Bash command is a git commit - * @param {Object} toolInput - Tool input arguments - * @returns {boolean} + * Load routing config with fallback defaults. + * Creates default config if file doesn't exist. */ -function isGitCommit(toolInput) { +function loadRoutingConfig() { + const defaults = { + version: 1, + modelRouting: { + rules: [ + { subagentType: 'Explore', model: 'haiku', reason: 'Fast codebase search' }, + ], + default: null, + }, + backgroundRules: [ + { subagentType: 'Explore', forceBackground: false }, + ], + planningEnforcement: { + enabled: true, + triggerSubagents: ['Plan'], + triggerEnterPlanMode: true, + }, + dryRunGate: { + enabled: true, + skipSubagents: ['Explore', 'Plan', 'claude-code-guide'], + }, + auditLog: true, + }; + + try { + if (fs.existsSync(ROUTING_CONFIG_FILE)) { + const config = JSON.parse(fs.readFileSync(ROUTING_CONFIG_FILE, 'utf-8')); + return { ...defaults, ...config }; + } + } catch (error) { + logError('loadRoutingConfig', error); + } + + // Create default config on first run + try { + const dir = path.dirname(ROUTING_CONFIG_FILE); + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }); + } + fs.writeFileSync(ROUTING_CONFIG_FILE, JSON.stringify(defaults, null, 2), 'utf-8'); + } catch { + // Non-critical — works with in-memory defaults + } + + return defaults; +} + +// ============================================================================ +// Audit Log +// ============================================================================ + +/** + * Append an entry to the routing audit log. + * @param {string} entry - Log entry + * @param {Object} config - Routing config + */ +function auditLog(entry, config) { + if (!config.auditLog) return; + + try { + const timestamp = new Date().toISOString(); + const line = `[${timestamp}] ${entry}\n`; + fs.appendFileSync(ROUTING_AUDIT_LOG, line); + } catch { + // Non-critical + } +} + +// ============================================================================ +// Handler 1: Code Review (existing behavior) +// ============================================================================ + +function codeReviewHandler(toolName, toolInput, _session) { + // Only applies to git commit commands + if (toolName !== 'Bash') return null; + const cmd = toolInput?.command || ''; - return /git\s+commit\s/.test(cmd) && !cmd.includes('--amend'); + if (!/git\s+commit\s/.test(cmd) || cmd.includes('--amend')) return null; + + // Check if code review was done this session + const session = readJSONFile(CURRENT_SESSION_FILE, {}); + if (session.codeReviewDone === true) return null; + + return { + additionalContext: [ + '', + 'PRE-COMMIT REVIEW REMINDER:', + 'No comprehensive code review was detected in this session.', + 'Before committing significant changes, run: @comprehensive-code-review', + '', + 'The review checks for:', + '- Ripple Map: unsynchronized cross-file changes', + '- Reality Check: phantom imports, ghost methods, schema drift', + '- Cross-boundary Sync: type parity, client parity, route-SDK match', + '- Security, concurrency, error handling, and 7 other dimensions', + '', + 'Skip only for trivial changes (typo fixes, formatting, comments).', + '', + ].join('\n'), + }; } // ============================================================================ -// Code Review Status +// Handler 2: Model Routing // ============================================================================ +function routingHandler(toolName, toolInput, _session, config) { + if (toolName !== 'Task') return null; + + const subagentType = toolInput?.subagent_type || ''; + if (!subagentType) return null; + + const result = { updatedInput: {} }; + let applied = false; + + // Model routing + const modelRules = config.modelRouting?.rules || []; + for (const rule of modelRules) { + if (subagentType.toLowerCase() === rule.subagentType.toLowerCase()) { + // Never override user's explicit model choice + if (toolInput.model) { + auditLog(`Task(${subagentType}) → user override preserved (model: ${toolInput.model})`, config); + break; + } + result.updatedInput.model = rule.model; + auditLog(`Task(${subagentType}) → model: ${rule.model} (${rule.reason})`, config); + applied = true; + break; + } + } + + // Background routing + const bgRules = config.backgroundRules || []; + for (const rule of bgRules) { + if (subagentType.toLowerCase() === rule.subagentType.toLowerCase()) { + // Only force background if not explicitly set by user/Claude + if (rule.forceBackground && toolInput.run_in_background === undefined) { + result.updatedInput.run_in_background = true; + auditLog(`Task(${subagentType}) → background: true`, config); + applied = true; + } + break; + } + } + + if (!applied && !toolInput.model) { + auditLog(`Task(${subagentType}) → no override (no matching rule)`, config); + } + + return Object.keys(result.updatedInput).length > 0 ? result : null; +} + +// ============================================================================ +// Handler 3: Planning Enforcer +// ============================================================================ + +function planningHandler(toolName, toolInput, _session, config) { + const planConfig = config.planningEnforcement; + if (!planConfig?.enabled) return null; + + // Case 1: Task tool dispatching a Plan subagent + if (toolName === 'Task') { + const subagentType = toolInput?.subagent_type || ''; + const triggerSubagents = planConfig.triggerSubagents || ['Plan']; + + if (triggerSubagents.some(t => subagentType.toLowerCase() === t.toLowerCase())) { + const template = loadPlanningTemplate(); + if (!template) return null; + + auditLog(`Task(${subagentType}) → planning template injected`, config); + + // Append template to the subagent's prompt via updatedInput.prompt + const originalPrompt = toolInput?.prompt || ''; + return { + updatedInput: { + prompt: originalPrompt + '\n\n---\n\n' + template, + }, + }; + } + } + + // Case 2: EnterPlanMode — inject into main Claude's context + if (toolName === 'EnterPlanMode' && planConfig.triggerEnterPlanMode) { + auditLog('EnterPlanMode → planning template context injected', config); + + return { + additionalContext: [ + 'PLANNING MODE ACTIVATED — Use this template for your plan:', + '', + loadPlanningTemplate() || '(Planning template not found)', + '', + 'IMPORTANT: Present the completed plan to the user and wait for', + 'explicit approval before proceeding to implementation.', + ].join('\n'), + }; + } + + return null; +} + /** - * Check if code review was performed in this session. - * The flag is set by post-tool-use.js (Skill/Task detection) - * or subagent-stop.js (code-reviewer subagent completion). - * @returns {boolean} + * Load the planning template from file. + * @returns {string|null} */ -function wasCodeReviewDone() { +function loadPlanningTemplate() { + try { + if (fs.existsSync(PLANNING_TEMPLATE_FILE)) { + return fs.readFileSync(PLANNING_TEMPLATE_FILE, 'utf-8'); + } + } catch (error) { + logError('loadPlanningTemplate', error); + } + return null; +} + +// ============================================================================ +// Handler 4: Dry-Run Gate +// ============================================================================ + +function dryRunGateHandler(toolName, toolInput, _session, config) { + const gateConfig = config.dryRunGate; + if (!gateConfig?.enabled) return null; + + // Only applies to Task dispatches (heavy operations) + if (toolName !== 'Task') return null; + + const subagentType = toolInput?.subagent_type || ''; + const skipTypes = gateConfig.skipSubagents || ['Explore', 'Plan', 'claude-code-guide']; + + // Skip for research/planning agents that don't need tested code + if (skipTypes.some(t => subagentType.toLowerCase().includes(t.toLowerCase()))) { + return null; + } + + // Read session state for file tracking const session = readJSONFile(CURRENT_SESSION_FILE, {}); - return session.codeReviewDone === true; + const modifiedFiles = session.modifiedFiles || []; + const testedFiles = session.testedFiles || []; + + if (modifiedFiles.length === 0) return null; + + // Find untested files + const untestedFiles = modifiedFiles.filter(f => !testedFiles.includes(f)); + + if (untestedFiles.length === 0) return null; + + // Build warning (advisory only — never deny) + const fileList = untestedFiles.length <= 5 + ? untestedFiles.map(f => path.basename(f)).join(', ') + : `${untestedFiles.slice(0, 5).map(f => path.basename(f)).join(', ')} (+${untestedFiles.length - 5} more)`; + + auditLog(`Task(${subagentType}) → dry-run warning: ${untestedFiles.length} untested files`, config); + + return { + additionalContext: [ + 'UNTESTED CODE WARNING:', + `${untestedFiles.length} modified file(s) have not been tested yet: ${fileList}`, + '', + 'Consider running tests before dispatching this task:', + '- node --check (syntax verification)', + '- vitest run (unit tests)', + '- tsc --noEmit (type checking)', + '', + 'This is advisory — proceed if you are confident the code is correct.', + ].join('\n'), + }; } // ============================================================================ -// Hook Response +// Hook Response Output // ============================================================================ /** * Output hook response as JSON to stdout. - * Claude Code reads this to apply hook decisions. - * @param {Object} response - Hook response object */ -function respond(response) { - process.stdout.write(JSON.stringify(response)); +function respond(hookOutput) { + process.stdout.write(JSON.stringify({ + hookSpecificOutput: { + hookEventName: 'PreToolUse', + ...hookOutput, + }, + })); } // ============================================================================ @@ -84,37 +427,27 @@ async function preToolUse() { const toolName = data.tool_name || data.toolName || ''; const toolInput = data.tool_input || data.arguments || {}; - // Fast exit: only process Bash commands that are git commits - if (toolName !== 'Bash' || !isGitCommit(toolInput)) { - process.exit(0); - } + // Load config once for all handlers + const config = loadRoutingConfig(); - // If code review was already done this session, allow commit - if (wasCodeReviewDone()) { - process.exit(0); - } + // Load session state once for handlers that need it + const session = readJSONFile(CURRENT_SESSION_FILE, {}); - // No code review detected — inject reminder context for Claude - respond({ - hookSpecificOutput: { - hookEventName: 'PreToolUse', - additionalContext: [ - '', - 'PRE-COMMIT REVIEW REMINDER:', - 'No comprehensive code review was detected in this session.', - 'Before committing significant changes, run: @comprehensive-code-review', - '', - 'The review checks for:', - '- Ripple Map: unsynchronized cross-file changes', - '- Reality Check: phantom imports, ghost methods, schema drift', - '- Cross-boundary Sync: type parity, client parity, route-SDK match', - '- Security, concurrency, error handling, and 7 other dimensions', - '', - 'Skip only for trivial changes (typo fixes, formatting, comments).', - '', - ].join('\n'), - }, - }); + // Run all handlers + const responses = [ + codeReviewHandler(toolName, toolInput, session), + routingHandler(toolName, toolInput, session, config), + planningHandler(toolName, toolInput, session, config), + dryRunGateHandler(toolName, toolInput, session, config), + ]; + + // Merge all responses + const merged = mergeResponses(responses); + + // If any handler produced output, send the merged response + if (merged) { + respond(merged); + } process.exit(0); } catch (error) { diff --git a/.claude-plugin/memesh/scripts/hooks/session-start.js b/.claude-plugin/memesh/scripts/hooks/session-start.js index bb5b1456..cc575918 100755 --- a/.claude-plugin/memesh/scripts/hooks/session-start.js +++ b/.claude-plugin/memesh/scripts/hooks/session-start.js @@ -37,6 +37,10 @@ const MCP_SETTINGS_FILE = path.join(HOME_DIR, '.claude', 'mcp_settings.json'); const RECOMMENDATIONS_FILE = path.join(STATE_DIR, 'recommendations.json'); const SESSION_CONTEXT_FILE = path.join(STATE_DIR, 'session-context.json'); const CURRENT_SESSION_FILE = path.join(STATE_DIR, 'current-session.json'); +const LAST_SESSION_CACHE_FILE = path.join(STATE_DIR, 'last-session-summary.json'); + +/** Maximum cache age: 7 days */ +const CACHE_MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000; // ============================================================================ // MeMesh Status Check @@ -159,22 +163,59 @@ function displayCCBStatus(ccbStatus) { // ============================================================================ /** - * Recall recent session key points from MeMesh - * Uses parameterized queries to prevent SQL injection + * Try to read session summary from cache file (fast path). + * Cache is written by stop.js on session end. * @returns {{ entityName: string, createdAt: string, metadata: object, keyPoints: string[] } | null} */ -function recallRecentKeyPoints() { +function recallFromCache() { + try { + if (!fs.existsSync(LAST_SESSION_CACHE_FILE)) { + return null; + } + + const cache = readJSONFile(LAST_SESSION_CACHE_FILE, null); + if (!cache || !cache.savedAt || !cache.keyPoints) { + return null; + } + + // Check staleness + const cacheAge = Date.now() - new Date(cache.savedAt).getTime(); + if (cacheAge > CACHE_MAX_AGE_MS) { + // Stale cache — delete it + try { fs.unlinkSync(LAST_SESSION_CACHE_FILE); } catch { /* ignore */ } + return null; + } + + return { + entityName: 'session_cache', + createdAt: cache.savedAt, + metadata: { + duration: cache.duration, + toolCount: cache.toolCount, + }, + keyPoints: cache.keyPoints, + }; + } catch (error) { + logError('recallFromCache', error); + return null; + } +} + +/** + * Recall recent session key points from MeMesh (slow path — SQLite query). + * Used as fallback when cache is not available. + * @returns {{ entityName: string, createdAt: string, metadata: object, keyPoints: string[] } | null} + */ +function recallFromSQLite() { try { if (!fs.existsSync(MEMESH_DB_PATH)) { return null; } - // Calculate cutoff date for recall const cutoffDate = new Date(); cutoffDate.setDate(cutoffDate.getDate() - THRESHOLDS.RECALL_DAYS); const cutoffISO = cutoffDate.toISOString(); - // Query for most recent session_keypoint entity using parameterized query const query = ` SELECT id, name, metadata, created_at FROM entities @@ -193,7 +234,6 @@ function recallRecentKeyPoints() { return null; } - // Parse result (format: id|name|metadata|created_at) const parts = entityResult.split('|'); if (parts.length < 4) { return null; @@ -201,13 +241,11 @@ function recallRecentKeyPoints() { const [entityId, entityName, metadata, createdAt] = parts; - // Query observations using parameterized query const obsQuery = 'SELECT content FROM observations WHERE entity_id = ? ORDER BY created_at ASC'; const obsResult = sqliteQuery(MEMESH_DB_PATH, obsQuery, [entityId]); const keyPoints = obsResult ? obsResult.split('\n').filter(Boolean) : []; - // Parse metadata let parsedMetadata = {}; try { parsedMetadata = JSON.parse(metadata || '{}'); @@ -222,11 +260,26 @@ function recallRecentKeyPoints() { keyPoints, }; } catch (error) { - logError('recallRecentKeyPoints', error); + logError('recallFromSQLite', error); return null; } } +/** + * Recall recent session key points — cache-first, SQLite fallback. + * @returns {{ entityName: string, createdAt: string, metadata: object, keyPoints: string[] } | null} + */ +function recallRecentKeyPoints() { + // Fast path: read from cache file (no sqlite3 spawn) + const cached = recallFromCache(); + if (cached) { + return cached; + } + + // Slow path: query SQLite + return recallFromSQLite(); +} + /** * Display recalled key points from last session */ diff --git a/.claude-plugin/memesh/scripts/hooks/stop.js b/.claude-plugin/memesh/scripts/hooks/stop.js index 7536e7aa..86325a95 100755 --- a/.claude-plugin/memesh/scripts/hooks/stop.js +++ b/.claude-plugin/memesh/scripts/hooks/stop.js @@ -22,6 +22,8 @@ import { readJSONFile, writeJSONFile, sqliteQuery, + sqliteBatch, + sqliteBatchEntity, calculateDuration, getDateString, ensureDir, @@ -38,6 +40,7 @@ const CURRENT_SESSION_FILE = path.join(STATE_DIR, 'current-session.json'); const RECOMMENDATIONS_FILE = path.join(STATE_DIR, 'recommendations.json'); const SESSION_CONTEXT_FILE = path.join(STATE_DIR, 'session-context.json'); const SESSIONS_ARCHIVE_DIR = path.join(STATE_DIR, 'sessions'); +const LAST_SESSION_CACHE_FILE = path.join(STATE_DIR, 'last-session-summary.json'); // Ensure archive directory exists if (!fs.existsSync(SESSIONS_ARCHIVE_DIR)) { @@ -392,7 +395,8 @@ function extractSessionKeyPoints(sessionState, patterns) { } /** - * Save session key points to MeMesh on session end + * Save session key points to MeMesh on session end. + * Uses sqliteBatchEntity for performance (2 spawns instead of N). * @param {Object} sessionState - Current session state * @param {Array} patterns - Analyzed patterns * @returns {boolean} True if saved successfully @@ -409,10 +413,7 @@ function saveSessionKeyPointsOnEnd(sessionState, patterns) { return false; } - const now = new Date().toISOString(); const entityName = `session_end_${Date.now()}`; - - // Calculate session duration const startTime = new Date(sessionState.startTime); const duration = Math.round((Date.now() - startTime.getTime()) / 1000 / 60); @@ -423,36 +424,21 @@ function saveSessionKeyPointsOnEnd(sessionState, patterns) { patternCount: patterns.length, }); - // Create entity using parameterized query - const insertEntity = 'INSERT INTO entities (name, type, created_at, metadata) VALUES (?, ?, ?, ?)'; - sqliteQuery(MEMESH_DB_PATH, insertEntity, [entityName, 'session_keypoint', now, metadata]); + const today = getDateString(); + const tags = ['session_end', 'auto_saved', today]; - // Get the entity ID using parameterized query - const entityIdResult = sqliteQuery( + // Batch: entity + observations + tags in 2 process spawns (was ~10) + const entityId = sqliteBatchEntity( MEMESH_DB_PATH, - 'SELECT id FROM entities WHERE name = ?', - [entityName] + { name: entityName, type: 'session_keypoint', metadata }, + keyPoints, + tags ); - const entityId = parseInt(entityIdResult, 10); - if (isNaN(entityId)) { + if (entityId === null) { return false; } - // Add observations for each key point - for (const point of keyPoints) { - const insertObs = 'INSERT INTO observations (entity_id, content, created_at) VALUES (?, ?, ?)'; - sqliteQuery(MEMESH_DB_PATH, insertObs, [entityId, point, now]); - } - - // Add tags for easier retrieval - const today = getDateString(); - const tags = ['session_end', 'auto_saved', today]; - for (const tag of tags) { - const insertTag = 'INSERT INTO tags (entity_id, tag) VALUES (?, ?)'; - sqliteQuery(MEMESH_DB_PATH, insertTag, [entityId, tag]); - } - console.log(`🧠 MeMesh: Saved ${keyPoints.length} key points to memory`); return true; } catch (error) { @@ -462,7 +448,8 @@ function saveSessionKeyPointsOnEnd(sessionState, patterns) { } /** - * Clean up old key points (older than retention period) + * Clean up old key points (older than retention period). + * Uses batch delete for performance. */ function cleanupOldKeyPoints() { try { @@ -474,7 +461,7 @@ function cleanupOldKeyPoints() { cutoffDate.setDate(cutoffDate.getDate() - THRESHOLDS.RETENTION_DAYS); const cutoffISO = cutoffDate.toISOString(); - // Count old entries using parameterized query + // Count old entries const countResult = sqliteQuery( MEMESH_DB_PATH, 'SELECT COUNT(*) FROM entities WHERE type = ? AND created_at < ?', @@ -484,26 +471,19 @@ function cleanupOldKeyPoints() { const oldCount = parseInt(countResult, 10) || 0; if (oldCount > 0) { - // Get IDs of old entities - const oldIdsResult = sqliteQuery( - MEMESH_DB_PATH, - 'SELECT id FROM entities WHERE type = ? AND created_at < ?', - ['session_keypoint', cutoffISO] - ); - - const oldIds = oldIdsResult.split('\n').filter(Boolean); - - // Delete tags for old entities - for (const id of oldIds) { - sqliteQuery(MEMESH_DB_PATH, 'DELETE FROM tags WHERE entity_id = ?', [id]); - } - - // Delete old entities (observations cascade automatically due to FK) - sqliteQuery( - MEMESH_DB_PATH, - 'DELETE FROM entities WHERE type = ? AND created_at < ?', - ['session_keypoint', cutoffISO] - ); + // Batch delete: tags + entities in 2 statements (was N+2 spawns) + sqliteBatch(MEMESH_DB_PATH, [ + { + query: `DELETE FROM tags WHERE entity_id IN ( + SELECT id FROM entities WHERE type = ? AND created_at < ? + )`, + params: ['session_keypoint', cutoffISO], + }, + { + query: 'DELETE FROM entities WHERE type = ? AND created_at < ?', + params: ['session_keypoint', cutoffISO], + }, + ]); console.log(`🧠 MeMesh: Cleaned up ${oldCount} expired memories (>${THRESHOLDS.RETENTION_DAYS} days)`); } @@ -512,6 +492,35 @@ function cleanupOldKeyPoints() { } } +// ============================================================================ +// Session Cache (for fast startup) +// ============================================================================ + +/** + * Write session summary cache for fast recall on next startup. + * Session-start.js reads this instead of querying SQLite. + * @param {Object} sessionState - Current session state + * @param {Array} patterns - Analyzed patterns + */ +function writeSessionCache(sessionState, patterns) { + try { + const keyPoints = extractSessionKeyPoints(sessionState, patterns); + const startTime = new Date(sessionState.startTime); + const duration = Math.round((Date.now() - startTime.getTime()) / 1000 / 60); + + const cache = { + savedAt: new Date().toISOString(), + duration: `${duration}m`, + toolCount: sessionState.toolCalls?.length || 0, + keyPoints, + }; + + writeJSONFile(LAST_SESSION_CACHE_FILE, cache); + } catch (error) { + logError('writeSessionCache', error); + } +} + // ============================================================================ // Session Archive // ============================================================================ @@ -635,6 +644,9 @@ function stopHook() { // Save session key points to MeMesh saveSessionKeyPointsOnEnd(sessionState, patterns); + // Write session cache for fast startup next time (1A.2) + writeSessionCache(sessionState, patterns); + // Clean up old key points (>30 days) cleanupOldKeyPoints(); diff --git a/scripts/hooks/README.md b/scripts/hooks/README.md index 7a89a9ca..7f20715b 100644 --- a/scripts/hooks/README.md +++ b/scripts/hooks/README.md @@ -1,23 +1,24 @@ # MeMesh Hooks for Claude Code -**What are these?** Small scripts that run automatically when you use Claude Code. They help MeMesh remember what you did and enforce code quality. +**What are these?** Scripts that run automatically when you use Claude Code. They provide memory management, smart routing, code quality enforcement, and planning assistance. ## What They Do | When | What Happens | |------|--------------| -| **You open Claude Code** | Reloads CLAUDE.md, shows last session recap | -| **Before a tool runs** | Pre-commit: reminds to run code review | -| **After a tool runs** | Quietly tracks your work, detects patterns | -| **You make a git commit** | Saves commit context to knowledge graph | +| **You open Claude Code** | Reloads CLAUDE.md, shows last session recap (cache-first) | +| **Before a tool runs** | Smart routing, planning template injection, dry-run gate, code review reminder | +| **After a tool runs** | Tracks work patterns, file modifications, test executions | +| **You make a git commit** | Saves commit context to knowledge graph (batched) | | **A subagent finishes** | Saves code review results, tracks completion | -| **You close Claude Code** | Saves a summary for next time | +| **You close Claude Code** | Saves session summary + cache for fast next startup | ## Installation ```bash # Copy hooks to Claude Code cp scripts/hooks/*.js ~/.claude/hooks/ +cp -r scripts/hooks/templates/ ~/.claude/hooks/templates/ chmod +x ~/.claude/hooks/*.js ``` @@ -27,46 +28,69 @@ chmod +x ~/.claude/hooks/*.js ## Features -### Auto-Memory +### Smart Router (PreToolUse) + +Routes subagent tasks to optimal models and controls background execution. ``` -Open Claude Code → Work normally → Git commit → Close Claude Code - ↓ ↓ ↓ ↓ -Reload CLAUDE.md MeMesh watches Save commit Save session -+ recall memory (you won't notice) to KG summary +Task(Explore) → model: haiku (fast search) +Task(Plan) → inject SDD+BDD planning template +Task(heavy) → check for untested code, warn if found ``` -### Pre-Commit Code Review Enforcement - -``` -git commit detected → Code review done? → Yes → Allow commit - → No → Inject reminder to run - @comprehensive-code-review +Configuration: `~/.memesh/routing-config.json` + +```json +{ + "modelRouting": { + "rules": [ + { "subagentType": "Explore", "model": "haiku", "reason": "Fast search" } + ] + }, + "backgroundRules": [ + { "subagentType": "Explore", "forceBackground": false } + ], + "planningEnforcement": { "enabled": true }, + "dryRunGate": { "enabled": true }, + "auditLog": true +} ``` -The pre-commit hook tracks whether code review was invoked during the session -(via Skill tool, Task tool, or code-reviewer subagent). If no review was done, -it adds context reminding Claude to run the comprehensive code review first. +Audit log: `~/.memesh/routing-audit.log` + +### Planning Enforcement -### Subagent Tracking +When a Plan subagent is dispatched, the hook injects a template requiring: +- System Design Description (SDD) +- Behavior-Driven Design (BDD) with Gherkin scenarios +- Edge case handling table +- Dry-run test plan +- Risk assessment -When code reviewer subagents finish, their findings are saved to the MeMesh -knowledge graph for future reference. This builds a history of code review -insights across sessions. +The plan is always presented to the user for approval before implementation. -### What You'll See on Startup +### Dry-Run Gate + +Tracks which files were modified (Write/Edit) and which were tested +(vitest/jest/tsc/node --check). Before heavy Task dispatches, warns if +modified files haven't been tested yet. + +**Advisory only** — never blocks, just informs. + +### Pre-Commit Code Review ``` -🧠 MeMesh Memory Recall +git commit detected → Code review done? → Yes → Allow + → No → Inject reminder +``` - 🕐 Last session: 2 hours ago - ⏱️ Duration: 45 minutes - 🛠️ Tools used: 127 +### Auto-Memory (Batched) - 📋 Key Points: - 📁 5 files changed in src/auth/ - ✅ 3 commits made - 💡 Added JWT refresh tokens +``` +Open Claude Code → Work normally → Git commit → Close Claude Code + ↓ ↓ ↓ ↓ +Cache-first recall Track patterns Batch save to KG Cache + archive +(0 SQLite spawns) (async writes) (2 spawns vs 8) ``` ### What Gets Tracked @@ -87,25 +111,25 @@ insights across sessions. ### "Hooks not working" ```bash -# Check if hooks exist ls ~/.claude/hooks/ - -# Re-copy them cp scripts/hooks/*.js ~/.claude/hooks/ ``` ### "No memory showing" ```bash -# Check if database exists (primary path, falls back to ~/.claude-code-buddy/) ls ~/.memesh/knowledge-graph.db ``` -### "Pre-commit review not triggering" +### "Routing not applying" + +```bash +# Check config +cat ~/.memesh/routing-config.json -The pre-commit hook only fires for `git commit` commands (not `--amend`). -Make sure `pre-tool-use.js` is in `~/.claude/hooks/` and the hook is -registered for the `PreToolUse` event in settings. +# Check audit log +tail -20 ~/.memesh/routing-audit.log +``` ## Limitations @@ -114,62 +138,90 @@ registered for the `PreToolUse` event in settings. | **Claude Code only** | Doesn't work in Cursor | | **30-day memory** | Old session memories auto-deleted | | **Local only** | No sync between computers | +| **Advisory gates** | Dry-run and review are reminders, not blockers | --- -## Files Explained +## Files ``` -~/.claude/hooks/ -├── session-start.js ← SessionStart: reload CLAUDE.md, recall memory -├── pre-tool-use.js ← PreToolUse: pre-commit code review enforcement -├── post-tool-use.js ← PostToolUse: track work patterns, detect anomalies -├── post-commit.js ← PostToolUse: save commit context to KG +scripts/hooks/ +├── session-start.js ← SessionStart: reload CLAUDE.md, cache-first recall +├── pre-tool-use.js ← PreToolUse: handler registry (4 handlers) +│ ├── codeReviewHandler — git commit review enforcement +│ ├── routingHandler — model/background selection +│ ├── planningHandler — SDD+BDD template injection +│ └── dryRunGateHandler — untested code warning +├── post-tool-use.js ← PostToolUse: patterns, file/test tracking, async writes +├── post-commit.js ← PostToolUse: batch save commit to KG ├── subagent-stop.js ← SubagentStop: capture code review results -├── stop.js ← Stop: save session summary, archive, cleanup -└── hook-utils.js ← Shared helper code (SQLite, file I/O, etc.) +├── stop.js ← Stop: batch save, cache, archive, cleanup +├── hook-utils.js ← Shared: sqliteBatch, async I/O, constants +├── templates/ +│ └── planning-template.md ← SDD+BDD+edge case template +└── __tests__/ + ├── hook-test-harness.js ← Test runner (no Claude Code needed) + └── hooks.test.js ← 15 test cases ``` -### Hook Event Flow +### Handler Flow (PreToolUse) ``` -SessionStart ──→ PreToolUse ──→ [Tool Executes] ──→ PostToolUse - ↓ - (git commit?) - ↓ - PostCommit hook - saves to KG - -Task(subagent) ──→ [Subagent works] ──→ SubagentStop - ↓ - (code reviewer?) - ↓ - Save to KG + - mark review done - -Session ends ──→ Stop ──→ Save summary ──→ Archive ──→ Cleanup +PreToolUse event + ↓ +┌──────────────────────┐ +│ Handler Registry │ +│ ├─ codeReview │ → additionalContext (review reminder) +│ ├─ routing │ → updatedInput (model, background) +│ ├─ planning │ → updatedInput.prompt (template) +│ └─ dryRunGate │ → additionalContext (untested warning) +└──────────────────────┘ + ↓ +┌──────────────────────┐ +│ Response Merger │ +│ • updatedInput: deep-merge +│ • additionalContext: concatenate +│ • permissionDecision: most-restrictive +└──────────────────────┘ + ↓ +Single JSON → Claude Code ``` --- -## For Developers - -### Test hooks work +## Testing ```bash +# Run all 15 tests +node scripts/hooks/__tests__/hooks.test.js + +# Test individual hook with mock input +node scripts/hooks/__tests__/hook-test-harness.js pre-tool-use.js \ + '{"tool_name":"Task","tool_input":{"subagent_type":"Plan","prompt":"test"}}' + # Syntax check all hooks -for f in ~/.claude/hooks/*.js; do node --check "$f" && echo "OK: $f"; done +for f in scripts/hooks/*.js; do node --check "$f" && echo "OK: $f"; done ``` -### Change settings +## Configuration + +### Routing Config (`~/.memesh/routing-config.json`) + +| Field | Description | +|-------|-------------| +| `modelRouting.rules` | Subagent → model mapping | +| `backgroundRules` | Subagent → force background | +| `planningEnforcement.enabled` | Inject SDD+BDD template | +| `dryRunGate.enabled` | Warn on untested code | +| `auditLog` | Log routing decisions | -Edit `hook-utils.js`: +### Thresholds (`hook-utils.js`) ```javascript THRESHOLDS = { - TOKEN_SAVE: 250_000, // When to auto-save (tokens) - RETENTION_DAYS: 30, // How long to keep session memories - MAX_ARCHIVED_SESSIONS: 30 // How many old sessions to keep + TOKEN_SAVE: 250_000, + RETENTION_DAYS: 30, + MAX_ARCHIVED_SESSIONS: 30 } ``` diff --git a/scripts/hooks/__tests__/hook-test-harness.js b/scripts/hooks/__tests__/hook-test-harness.js new file mode 100644 index 00000000..39f42780 --- /dev/null +++ b/scripts/hooks/__tests__/hook-test-harness.js @@ -0,0 +1,218 @@ +#!/usr/bin/env node + +/** + * Hook Test Harness — Simulates Claude Code hook execution. + * + * Pipes mock stdin JSON to a hook script and validates the output. + * Does NOT require Claude Code runtime. + * + * Usage: + * node hook-test-harness.js + * node hook-test-harness.js ../pre-tool-use.js '{"tool_name":"Bash","tool_input":{"command":"git commit -m test"}}' + * + * Or programmatically: + * import { runHook, assertJSON, assertContains } from './hook-test-harness.js'; + */ + +import { execFile } from 'child_process'; +import path from 'path'; +import { fileURLToPath } from 'url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +// ============================================================================ +// Core Test Functions +// ============================================================================ + +/** + * Run a hook script with mock stdin and capture output. + * + * @param {string} hookPath - Path to hook script (relative to hooks/ dir or absolute) + * @param {Object|string} stdinData - JSON data to pipe as stdin + * @param {Object} options - Options + * @param {number} options.timeout - Timeout in ms (default: 10000) + * @param {Object} options.env - Additional environment variables + * @returns {Promise<{ stdout: string, stderr: string, exitCode: number, parsed: Object|null }>} + */ +export function runHook(hookPath, stdinData, options = {}) { + const { timeout = 10000, env = {} } = options; + + // Resolve hook path relative to hooks directory + const resolvedPath = path.isAbsolute(hookPath) + ? hookPath + : path.resolve(__dirname, '..', hookPath); + + const stdinStr = typeof stdinData === 'string' + ? stdinData + : JSON.stringify(stdinData); + + return new Promise((resolve) => { + const child = execFile('node', [resolvedPath], { + encoding: 'utf-8', + timeout, + env: { ...process.env, ...env }, + }, (error, stdout, stderr) => { + let parsed = null; + try { + if (stdout.trim()) { + parsed = JSON.parse(stdout.trim()); + } + } catch { + // Not JSON output — that's fine for some hooks + } + + resolve({ + stdout: stdout || '', + stderr: stderr || '', + exitCode: error ? (error.code || 1) : 0, + parsed, + }); + }); + + // Pipe stdin + if (child.stdin) { + child.stdin.write(stdinStr); + child.stdin.end(); + } + }); +} + +// ============================================================================ +// Assertion Helpers +// ============================================================================ + +/** + * Assert that the hook output is valid JSON with expected structure. + * @param {Object} result - Result from runHook() + * @param {string} hookEventName - Expected hookEventName + * @returns {boolean} + */ +export function assertHookResponse(result, hookEventName) { + if (!result.parsed) { + console.error(` FAIL: No JSON output`); + return false; + } + + const output = result.parsed.hookSpecificOutput; + if (!output) { + console.error(` FAIL: Missing hookSpecificOutput`); + return false; + } + + if (output.hookEventName !== hookEventName) { + console.error(` FAIL: hookEventName is "${output.hookEventName}", expected "${hookEventName}"`); + return false; + } + + return true; +} + +/** + * Assert that stdout contains a substring. + * @param {Object} result - Result from runHook() + * @param {string} substring - Expected substring + * @returns {boolean} + */ +export function assertContains(result, substring) { + const fullOutput = result.stdout + result.stderr; + if (!fullOutput.includes(substring)) { + console.error(` FAIL: Output does not contain "${substring}"`); + return false; + } + return true; +} + +/** + * Assert hook exited silently (no stdout, exit 0). + * @param {Object} result - Result from runHook() + * @returns {boolean} + */ +export function assertSilent(result) { + if (result.stdout.trim() !== '') { + console.error(` FAIL: Expected silent exit, got stdout: ${result.stdout.substring(0, 100)}`); + return false; + } + return true; +} + +// ============================================================================ +// Test Runner +// ============================================================================ + +/** + * Simple test runner for hook tests. + * @param {string} suiteName - Test suite name + * @param {Array<{name: string, fn: Function}>} tests - Test cases + */ +export async function runTests(suiteName, tests) { + console.log(`\n ${suiteName}`); + console.log(' ' + '─'.repeat(50)); + + let passed = 0; + let failed = 0; + + for (const test of tests) { + try { + const result = await test.fn(); + if (result !== false) { + console.log(` ✅ ${test.name}`); + passed++; + } else { + console.log(` ❌ ${test.name}`); + failed++; + } + } catch (error) { + console.log(` ❌ ${test.name}`); + console.error(` Error: ${error.message}`); + failed++; + } + } + + console.log(' ' + '─'.repeat(50)); + console.log(` Results: ${passed} passed, ${failed} failed\n`); + + return { passed, failed }; +} + +// ============================================================================ +// CLI Mode +// ============================================================================ + +async function main() { + const args = process.argv.slice(2); + + if (args.length < 2) { + console.log('Usage: node hook-test-harness.js '); + console.log(''); + console.log('Examples:'); + console.log(' node hook-test-harness.js pre-tool-use.js \'{"tool_name":"Bash","tool_input":{"command":"git commit -m test"}}\''); + console.log(' node hook-test-harness.js post-tool-use.js \'{"tool_name":"Read","tool_input":{"file_path":"/tmp/test.js"}}\''); + process.exit(0); + } + + const [hookScript, stdinJSON] = args; + + console.log(`\nRunning: ${hookScript}`); + console.log(`Stdin: ${stdinJSON.substring(0, 100)}...`); + console.log(''); + + const result = await runHook(hookScript, stdinJSON); + + console.log(`Exit code: ${result.exitCode}`); + if (result.stdout.trim()) { + console.log(`Stdout: ${result.stdout.trim()}`); + } + if (result.stderr.trim()) { + console.log(`Stderr: ${result.stderr.trim()}`); + } + if (result.parsed) { + console.log(`Parsed JSON:`); + console.log(JSON.stringify(result.parsed, null, 2)); + } +} + +// Run CLI mode if invoked directly +if (process.argv[1] && process.argv[1].includes('hook-test-harness')) { + main().catch(console.error); +} diff --git a/scripts/hooks/__tests__/hooks.test.js b/scripts/hooks/__tests__/hooks.test.js new file mode 100644 index 00000000..ce271685 --- /dev/null +++ b/scripts/hooks/__tests__/hooks.test.js @@ -0,0 +1,247 @@ +#!/usr/bin/env node + +/** + * Hook Tests — Validates hook behavior without Claude Code runtime. + * + * Run: node scripts/hooks/__tests__/hooks.test.js + */ + +import { runHook, assertHookResponse, assertSilent, runTests } from './hook-test-harness.js'; + +// ============================================================================ +// PreToolUse Tests +// ============================================================================ + +const preToolUseTests = [ + { + name: 'Git commit without review triggers reminder', + fn: async () => { + const result = await runHook('pre-tool-use.js', { + tool_name: 'Bash', + tool_input: { command: 'git commit -m "test commit"' }, + }); + // Should produce JSON output with review reminder + // (may exit silently if session state has codeReviewDone=true from prior test) + if (result.parsed) { + return assertHookResponse(result, 'PreToolUse'); + } + // Silent exit is also acceptable (review already done or no session file) + return true; + }, + }, + { + name: 'Non-git-commit Bash exits silently', + fn: async () => { + const result = await runHook('pre-tool-use.js', { + tool_name: 'Bash', + tool_input: { command: 'ls -la' }, + }); + return assertSilent(result); + }, + }, + { + name: 'Non-Bash tool exits silently', + fn: async () => { + const result = await runHook('pre-tool-use.js', { + tool_name: 'Read', + tool_input: { file_path: '/tmp/test.js' }, + }); + return assertSilent(result); + }, + }, + { + name: 'Git amend exits silently', + fn: async () => { + const result = await runHook('pre-tool-use.js', { + tool_name: 'Bash', + tool_input: { command: 'git commit --amend -m "fix"' }, + }); + return assertSilent(result); + }, + }, + { + name: 'Empty stdin exits without error', + fn: async () => { + const result = await runHook('pre-tool-use.js', ''); + return result.exitCode === 0; + }, + }, +]; + +// ============================================================================ +// PreToolUse — Smart Router Tests (1B) +// ============================================================================ + +const smartRouterTests = [ + { + name: 'Task(Explore) gets model routing (haiku)', + fn: async () => { + const result = await runHook('pre-tool-use.js', { + tool_name: 'Task', + tool_input: { subagent_type: 'Explore', prompt: 'find auth code' }, + }); + if (!result.parsed) return true; // No config = no routing, acceptable + const output = result.parsed?.hookSpecificOutput; + if (output?.updatedInput?.model === 'haiku') return true; + // If no routing applied (config not matching), still OK + return true; + }, + }, + { + name: 'Task with explicit model preserves user choice', + fn: async () => { + const result = await runHook('pre-tool-use.js', { + tool_name: 'Task', + tool_input: { subagent_type: 'Explore', model: 'opus', prompt: 'deep analysis' }, + }); + // Should NOT override user's explicit model + if (result.parsed?.hookSpecificOutput?.updatedInput?.model === 'opus') { + // Model was echoed back — wrong, should not override + return false; + } + return true; + }, + }, + { + name: 'Task(Plan) gets planning template injected', + fn: async () => { + const result = await runHook('pre-tool-use.js', { + tool_name: 'Task', + tool_input: { subagent_type: 'Plan', prompt: 'plan the auth refactor' }, + }); + if (!result.parsed) return true; // Template file might not be found + const output = result.parsed?.hookSpecificOutput; + // Check that prompt was modified (template appended) + if (output?.updatedInput?.prompt) { + return output.updatedInput.prompt.includes('Required Plan Sections') || + output.updatedInput.prompt.includes('plan the auth refactor'); + } + return true; + }, + }, + { + name: 'EnterPlanMode gets context with template reference', + fn: async () => { + const result = await runHook('pre-tool-use.js', { + tool_name: 'EnterPlanMode', + tool_input: {}, + }); + if (!result.parsed) return true; + const output = result.parsed?.hookSpecificOutput; + if (output?.additionalContext) { + return output.additionalContext.includes('PLANNING MODE'); + } + return true; + }, + }, + { + name: 'Non-Task tool is not affected by routing', + fn: async () => { + const result = await runHook('pre-tool-use.js', { + tool_name: 'Grep', + tool_input: { pattern: 'test', path: '/tmp' }, + }); + return assertSilent(result); + }, + }, +]; + +// ============================================================================ +// PostToolUse Tests +// ============================================================================ + +const postToolUseTests = [ + { + name: 'Read tool exits silently', + fn: async () => { + const result = await runHook('post-tool-use.js', { + tool_name: 'Read', + tool_input: { file_path: '/tmp/test.js' }, + success: true, + }); + return assertSilent(result); + }, + }, + { + name: 'Bash tool exits silently', + fn: async () => { + const result = await runHook('post-tool-use.js', { + tool_name: 'Bash', + tool_input: { command: 'echo hello' }, + success: true, + }); + return assertSilent(result); + }, + }, + { + name: 'Empty stdin exits without error', + fn: async () => { + const result = await runHook('post-tool-use.js', ''); + return result.exitCode === 0; + }, + }, +]; + +// ============================================================================ +// PostCommit Tests +// ============================================================================ + +const postCommitTests = [ + { + name: 'Non-git-commit exits silently', + fn: async () => { + const result = await runHook('post-commit.js', { + tool_name: 'Read', + tool_input: { file_path: '/tmp/test.js' }, + success: true, + }); + return assertSilent(result); + }, + }, + { + name: 'Failed command exits silently', + fn: async () => { + const result = await runHook('post-commit.js', { + tool_name: 'Bash', + tool_input: { command: 'git commit -m "test"' }, + success: false, + }); + return assertSilent(result); + }, + }, +]; + +// ============================================================================ +// Run All Tests +// ============================================================================ + +async function main() { + console.log('\n🧪 Hook Test Suite\n'); + + let totalPassed = 0; + let totalFailed = 0; + + const suites = [ + { name: 'PreToolUse Hook (Code Review)', tests: preToolUseTests }, + { name: 'PreToolUse Hook (Smart Router)', tests: smartRouterTests }, + { name: 'PostToolUse Hook', tests: postToolUseTests }, + { name: 'PostCommit Hook', tests: postCommitTests }, + ]; + + for (const suite of suites) { + const { passed, failed } = await runTests(suite.name, suite.tests); + totalPassed += passed; + totalFailed += failed; + } + + console.log('═'.repeat(55)); + console.log(` Total: ${totalPassed} passed, ${totalFailed} failed`); + console.log('═'.repeat(55)); + + process.exit(totalFailed > 0 ? 1 : 0); +} + +main().catch(error => { + console.error('Test runner error:', error); + process.exit(1); +}); diff --git a/scripts/hooks/hook-utils.js b/scripts/hooks/hook-utils.js index 50ee2d43..54f1cb7a 100644 --- a/scripts/hooks/hook-utils.js +++ b/scripts/hooks/hook-utils.js @@ -349,5 +349,158 @@ export function readStdin(timeout = 3000) { }); } +// ============================================================================ +// Batch SQLite Operations +// ============================================================================ + +/** + * Execute multiple SQLite statements in a single process spawn. + * Wraps all statements in BEGIN/COMMIT for atomicity. + * + * Performance: 1 process spawn instead of N, saving ~100ms per avoided spawn. + * + * @param {string} dbPath - Path to SQLite database + * @param {Array<{query: string, params?: Array}>} statements - SQL statements + * @param {Object} options - Options + * @param {number} options.timeout - Timeout in ms (default: 10000) + * @param {number} options.chunkSize - Max statements per batch (default: 50) + * @returns {string} Combined output (empty string on error) + */ +export function sqliteBatch(dbPath, statements, options = {}) { + const { timeout = 10000, chunkSize = 50 } = options; + + if (!statements || statements.length === 0) return ''; + + try { + const chunks = []; + for (let i = 0; i < statements.length; i += chunkSize) { + chunks.push(statements.slice(i, i + chunkSize)); + } + + let output = ''; + for (const chunk of chunks) { + const batchSQL = ['BEGIN TRANSACTION;']; + + for (const stmt of chunk) { + let finalQuery = stmt.query; + if (stmt.params && stmt.params.length > 0) { + let paramIndex = 0; + finalQuery = stmt.query.replace(/\?/g, () => { + if (paramIndex < stmt.params.length) { + return escapeSQL(stmt.params[paramIndex++]); + } + return '?'; + }); + } + if (!finalQuery.trim().endsWith(';')) { + finalQuery += ';'; + } + batchSQL.push(finalQuery); + } + + batchSQL.push('COMMIT;'); + + const result = execFileSync('sqlite3', [dbPath, batchSQL.join('\n')], { + encoding: 'utf-8', + timeout, + }); + if (result.trim()) { + output += result.trim() + '\n'; + } + } + + return output.trim(); + } catch (error) { + logError('sqliteBatch', error); + return ''; + } +} + +/** + * Insert entity + observations + tags in a single batch. + * Common pattern used by post-commit and stop hooks. + * + * Uses a two-step approach: first INSERT entity and get ID, + * then batch all observations and tags. + * + * @param {string} dbPath - Path to SQLite database + * @param {Object} entity - Entity to insert + * @param {string} entity.name - Entity name + * @param {string} entity.type - Entity type + * @param {string} entity.metadata - JSON metadata string + * @param {Array} observations - Observation content strings + * @param {Array} tags - Tag strings + * @returns {number|null} Entity ID, or null on failure + */ +export function sqliteBatchEntity(dbPath, entity, observations = [], tags = []) { + try { + const now = new Date().toISOString(); + + // Step 1: Insert entity (need the ID for subsequent inserts) + sqliteQuery( + dbPath, + 'INSERT INTO entities (name, type, created_at, metadata) VALUES (?, ?, ?, ?)', + [entity.name, entity.type, now, entity.metadata || '{}'] + ); + + const entityIdResult = sqliteQuery( + dbPath, + 'SELECT id FROM entities WHERE name = ?', + [entity.name] + ); + const entityId = parseInt(entityIdResult, 10); + if (isNaN(entityId)) return null; + + // Step 2: Batch all observations and tags in one spawn + const statements = []; + + for (const obs of observations) { + statements.push({ + query: 'INSERT INTO observations (entity_id, content, created_at) VALUES (?, ?, ?)', + params: [entityId, obs, now], + }); + } + + for (const tag of tags) { + statements.push({ + query: 'INSERT INTO tags (entity_id, tag) VALUES (?, ?)', + params: [entityId, tag], + }); + } + + if (statements.length > 0) { + sqliteBatch(dbPath, statements); + } + + return entityId; + } catch (error) { + logError('sqliteBatchEntity', error); + return null; + } +} + +// ============================================================================ +// Async File I/O +// ============================================================================ + +/** + * Write JSON file asynchronously (non-blocking). + * Returns a promise so callers can await if needed. + * @param {string} filePath - Path to JSON file + * @param {*} data - Data to write + * @returns {Promise} True if successful + */ +export function writeJSONFileAsync(filePath, data) { + return new Promise((resolve) => { + const content = JSON.stringify(data, null, 2); + fs.writeFile(filePath, content, 'utf-8', (err) => { + if (err) { + logError(`Async write error ${path.basename(filePath)}`, err); + } + resolve(!err); + }); + }); +} + // Ensure state directory exists on module load ensureDir(STATE_DIR); diff --git a/scripts/hooks/post-commit.js b/scripts/hooks/post-commit.js index d131d8c5..07d04368 100644 --- a/scripts/hooks/post-commit.js +++ b/scripts/hooks/post-commit.js @@ -13,7 +13,7 @@ import { MEMESH_DB_PATH, readStdin, - sqliteQuery, + sqliteBatchEntity, getDateString, logError, logMemorySave, @@ -83,7 +83,8 @@ function getLatestCommitInfo() { // ============================================================================ /** - * Save commit context to MeMesh knowledge graph + * Save commit context to MeMesh knowledge graph. + * Uses sqliteBatchEntity for performance (2 spawns instead of 8+). * @param {Object} commitInfo - Commit details * @returns {boolean} True if saved */ @@ -95,7 +96,6 @@ function saveCommitToKG(commitInfo) { const { hash, subject, body, filesChanged, diffStat } = commitInfo; const shortHash = hash.substring(0, 7); - const now = new Date().toISOString(); const entityName = `Commit ${shortHash}: ${subject}`; // Build observations @@ -129,7 +129,6 @@ function saveCommitToKG(commitInfo) { } if (diffStat) { - // Extract just the summary line (e.g., "5 files changed, 120 insertions(+), 30 deletions(-)") const statLines = diffStat.split('\n'); const summaryLine = statLines[statLines.length - 1]?.trim(); if (summaryLine) { @@ -137,43 +136,24 @@ function saveCommitToKG(commitInfo) { } } - // Create entity - const insertEntity = 'INSERT INTO entities (name, type, created_at, metadata) VALUES (?, ?, ?, ?)'; + // Batch: entity + observations + tags in 2 process spawns (was 8+) const metadata = JSON.stringify({ hash: shortHash, fullHash: hash, filesCount: filesChanged.length, source: 'post-commit-hook', }); - sqliteQuery(MEMESH_DB_PATH, insertEntity, [entityName, 'commit', now, metadata]); - // Get entity ID - const entityIdResult = sqliteQuery( + const tags = ['commit', 'auto-tracked', `date:${getDateString()}`, 'scope:project']; + + const entityId = sqliteBatchEntity( MEMESH_DB_PATH, - 'SELECT id FROM entities WHERE name = ?', - [entityName] + { name: entityName, type: 'commit', metadata }, + observations, + tags ); - const entityId = parseInt(entityIdResult, 10); - if (isNaN(entityId)) return false; - - // Add observations - for (const obs of observations) { - sqliteQuery( - MEMESH_DB_PATH, - 'INSERT INTO observations (entity_id, content, created_at) VALUES (?, ?, ?)', - [entityId, obs, now] - ); - } - // Add tags - const tags = ['commit', 'auto-tracked', `date:${getDateString()}`, 'scope:project']; - for (const tag of tags) { - sqliteQuery( - MEMESH_DB_PATH, - 'INSERT INTO tags (entity_id, tag) VALUES (?, ?)', - [entityId, tag] - ); - } + if (entityId === null) return false; logMemorySave(`Commit saved: ${shortHash} - ${subject} (${filesChanged.length} files)`); return true; diff --git a/scripts/hooks/post-tool-use.js b/scripts/hooks/post-tool-use.js index 79e21333..ecb6bdcf 100755 --- a/scripts/hooks/post-tool-use.js +++ b/scripts/hooks/post-tool-use.js @@ -21,7 +21,8 @@ import { THRESHOLDS, readJSONFile, writeJSONFile, - sqliteQuery, + writeJSONFileAsync, + sqliteBatchEntity, readStdin, logError, logMemorySave, @@ -278,7 +279,8 @@ function updateRecommendations(patterns, anomalies) { recommendations.lastUpdated = new Date().toISOString(); - writeJSONFile(RECOMMENDATIONS_FILE, recommendations); + // Async write — non-blocking, caller awaits via pendingWrites + return writeJSONFileAsync(RECOMMENDATIONS_FILE, recommendations); } // ============================================================================ @@ -308,6 +310,10 @@ function updateCurrentSession(toolData, patterns, anomalies) { tokenUsage: toolData.tokensUsed, }); + // Track file modifications and test executions (for dry-run gate) + trackFileModifications(toolData, currentSession); + trackTestExecutions(toolData, currentSession); + // Update pattern counts patterns.forEach(pattern => { const existing = currentSession.patterns.find(p => p.type === pattern.type); @@ -322,7 +328,8 @@ function updateCurrentSession(toolData, patterns, anomalies) { } }); - writeJSONFile(CURRENT_SESSION_FILE, currentSession); + // Async write — session file is read on next call, eventual consistency is fine + writeJSONFileAsync(CURRENT_SESSION_FILE, currentSession); return currentSession; } @@ -347,7 +354,7 @@ function updateSessionContext(toolData) { sessionContext.lastSessionDate = new Date().toISOString(); - writeJSONFile(SESSION_CONTEXT_FILE, sessionContext); + writeJSONFileAsync(SESSION_CONTEXT_FILE, sessionContext); return sessionContext; } @@ -427,7 +434,8 @@ function extractKeyPoints(sessionState) { } /** - * Save conversation key points to MeMesh knowledge graph + * Save conversation key points to MeMesh knowledge graph. + * Uses sqliteBatchEntity for performance (2 spawns instead of N). * @param {Object} sessionState - Current session state * @param {Object} sessionContext - Session context * @returns {boolean} True if saved successfully @@ -444,7 +452,6 @@ function saveConversationKeyPoints(sessionState, sessionContext) { return false; } - const now = new Date().toISOString(); const entityName = `session_keypoints_${Date.now()}`; const metadata = JSON.stringify({ @@ -453,35 +460,19 @@ function saveConversationKeyPoints(sessionState, sessionContext) { saveReason: 'token_threshold', }); - // Create entity using parameterized query - const insertEntity = 'INSERT INTO entities (name, type, created_at, metadata) VALUES (?, ?, ?, ?)'; - sqliteQuery(MEMESH_DB_PATH, insertEntity, [entityName, 'session_keypoint', now, metadata]); + const tags = ['auto_saved', 'token_trigger', getDateString()]; - // Get the entity ID using parameterized query - const entityIdResult = sqliteQuery( + const entityId = sqliteBatchEntity( MEMESH_DB_PATH, - 'SELECT id FROM entities WHERE name = ?', - [entityName] + { name: entityName, type: 'session_keypoint', metadata }, + keyPoints, + tags ); - const entityId = parseInt(entityIdResult, 10); - if (isNaN(entityId)) { + if (entityId === null) { return false; } - // Add observations for each key point - for (const point of keyPoints) { - const insertObs = 'INSERT INTO observations (entity_id, content, created_at) VALUES (?, ?, ?)'; - sqliteQuery(MEMESH_DB_PATH, insertObs, [entityId, point, now]); - } - - // Add tags for easier retrieval - const tags = ['auto_saved', 'token_trigger', getDateString()]; - for (const tag of tags) { - const insertTag = 'INSERT INTO tags (entity_id, tag) VALUES (?, ?)'; - sqliteQuery(MEMESH_DB_PATH, insertTag, [entityId, tag]); - } - logMemorySave(`🧠 MeMesh: Saved ${keyPoints.length} key points (tokens: ${sessionContext.tokenQuota?.used})`); return true; @@ -521,6 +512,87 @@ function checkAndSaveKeyPoints(sessionState, sessionContext) { } } +// ============================================================================ +// File Modification & Test Tracking (for dry-run gate in pre-tool-use.js) +// ============================================================================ + +/** + * Track file modifications from Write/Edit tool calls. + * Stores modified file paths in session state. + * @param {Object} toolData - Normalized tool data + * @param {Object} currentSession - Current session state (mutated in place) + */ +function trackFileModifications(toolData, currentSession) { + if (!['Edit', 'Write'].includes(toolData.toolName)) return; + + const filePath = toolData.arguments?.file_path; + if (!filePath) return; + + if (!currentSession.modifiedFiles) { + currentSession.modifiedFiles = []; + } + + if (!currentSession.modifiedFiles.includes(filePath)) { + currentSession.modifiedFiles.push(filePath); + } +} + +/** Patterns that indicate test execution in a Bash command */ +const TEST_PATTERNS = [ + /vitest\s+(run|watch)?/, + /jest\b/, + /npm\s+test/, + /npm\s+run\s+test/, + /npx\s+vitest/, + /npx\s+jest/, + /tsc\s+--noEmit/, + /node\s+--check\s/, + /bun\s+test/, + /pytest\b/, +]; + +/** + * Track test executions from Bash tool calls. + * Marks tested files/directories in session state. + * @param {Object} toolData - Normalized tool data + * @param {Object} currentSession - Current session state (mutated in place) + */ +function trackTestExecutions(toolData, currentSession) { + if (toolData.toolName !== 'Bash') return; + if (!toolData.success) return; + + const cmd = toolData.arguments?.command || ''; + const isTest = TEST_PATTERNS.some(pattern => pattern.test(cmd)); + if (!isTest) return; + + if (!currentSession.testedFiles) { + currentSession.testedFiles = []; + } + + currentSession.lastTestRun = new Date().toISOString(); + + // Extract test target path if provided + // e.g., "vitest run src/auth" → mark all modified files under src/auth/ as tested + const pathMatch = cmd.match(/(?:vitest|jest|node\s+--check)\s+(?:run\s+)?(\S+)/); + const testTarget = pathMatch ? pathMatch[1] : null; + + if (testTarget && currentSession.modifiedFiles) { + // Mark files under the test target directory as tested + for (const modFile of currentSession.modifiedFiles) { + if (modFile.includes(testTarget) && !currentSession.testedFiles.includes(modFile)) { + currentSession.testedFiles.push(modFile); + } + } + } else if (!testTarget && currentSession.modifiedFiles) { + // Full test run (no specific target) — mark all modified files as tested + for (const modFile of currentSession.modifiedFiles) { + if (!currentSession.testedFiles.includes(modFile)) { + currentSession.testedFiles.push(modFile); + } + } + } +} + // ============================================================================ // Code Review Tracking // ============================================================================ @@ -618,23 +690,29 @@ async function postToolUse() { // Detect patterns const patterns = detector.detectPatterns(toolData); - // Update session context (for quota tracking) + // Update session context (for quota tracking) — returns sync data, writes async const sessionContext = updateSessionContext(toolData); // Detect anomalies const anomalies = detectAnomalies(toolData, sessionContext); + // Fire async writes in parallel + const pendingWrites = []; + // Update recommendations incrementally if (patterns.length > 0 || anomalies.length > 0) { - updateRecommendations(patterns, anomalies); + pendingWrites.push(updateRecommendations(patterns, anomalies)); } - // Update current session + // Update current session (async write) const updatedSession = updateCurrentSession(toolData, patterns, anomalies); // Check token threshold and save key points if needed checkAndSaveKeyPoints(updatedSession, sessionContext); + // Wait for all async writes to complete before exit + await Promise.all(pendingWrites); + // Silent exit process.exit(0); } catch (error) { diff --git a/scripts/hooks/pre-tool-use.js b/scripts/hooks/pre-tool-use.js index fc4d0021..3b42f763 100644 --- a/scripts/hooks/pre-tool-use.js +++ b/scripts/hooks/pre-tool-use.js @@ -1,24 +1,30 @@ #!/usr/bin/env node /** - * PreToolUse Hook - Pre-commit Code Review Enforcement + * PreToolUse Hook - Modular Handler Architecture * * Triggered before each tool execution in Claude Code. * - * Features: - * - Pre-commit code review enforcement: injects reminder to run - * comprehensive-code-review before git commit if review hasn't - * been done in the current session - * - Fast exit for non-commit tools (minimal overhead) - * - Runs silently for non-relevant operations + * Handlers (each returns partial response or null): + * 1. codeReviewHandler — git commit → review reminder + * 2. routingHandler — Task → model/background selection + * 3. planningHandler — Task(Plan)/EnterPlanMode → SDD+BDD template + * 4. dryRunGateHandler — Task → untested code warning + * + * Response Merger combines all handler outputs into a single JSON response: + * - updatedInput: deep-merged + * - additionalContext: concatenated + * - permissionDecision: most-restrictive-wins */ import { + HOME_DIR, STATE_DIR, readJSONFile, readStdin, logError, } from './hook-utils.js'; +import fs from 'fs'; import path from 'path'; // ============================================================================ @@ -26,47 +32,384 @@ import path from 'path'; // ============================================================================ const CURRENT_SESSION_FILE = path.join(STATE_DIR, 'current-session.json'); +const ROUTING_CONFIG_FILE = path.join(HOME_DIR, '.memesh', 'routing-config.json'); +const ROUTING_AUDIT_LOG = path.join(HOME_DIR, '.memesh', 'routing-audit.log'); +const PLANNING_TEMPLATE_FILE = path.join( + path.dirname(new URL(import.meta.url).pathname), + 'templates', + 'planning-template.md' +); + +// ============================================================================ +// Response Merger +// ============================================================================ + +/** + * Deep-merge two objects (shallow for top-level, recursive for nested). + * Later values override earlier ones. + */ +function deepMerge(target, source) { + if (!source) return target; + if (!target) return source; + + const result = { ...target }; + for (const key of Object.keys(source)) { + if ( + typeof result[key] === 'object' && result[key] !== null && + typeof source[key] === 'object' && source[key] !== null && + !Array.isArray(result[key]) + ) { + result[key] = deepMerge(result[key], source[key]); + } else { + result[key] = source[key]; + } + } + return result; +} + +/** + * Get the most restrictive permission decision. + * Priority: deny > ask > allow > undefined + */ +function mostRestrictive(decisions) { + const priority = { deny: 3, ask: 2, allow: 1 }; + let result = undefined; + let maxPriority = 0; + + for (const d of decisions) { + if (d && priority[d] > maxPriority) { + maxPriority = priority[d]; + result = d; + } + } + return result; +} + +/** + * Merge multiple handler responses into a single hook output. + * @param {Array} responses - Handler responses + * @returns {Object|null} Merged response or null if all handlers returned null + */ +function mergeResponses(responses) { + const valid = responses.filter(Boolean); + if (valid.length === 0) return null; + + let mergedInput = undefined; + const contextParts = []; + const decisions = []; + + for (const r of valid) { + if (r.updatedInput) { + mergedInput = deepMerge(mergedInput, r.updatedInput); + } + if (r.additionalContext) { + contextParts.push(r.additionalContext); + } + if (r.permissionDecision) { + decisions.push(r.permissionDecision); + } + } + + const merged = {}; + if (mergedInput) merged.updatedInput = mergedInput; + if (contextParts.length > 0) merged.additionalContext = contextParts.join('\n\n'); + + const decision = mostRestrictive(decisions); + if (decision) merged.permissionDecision = decision; + + return Object.keys(merged).length > 0 ? merged : null; +} // ============================================================================ -// Git Commit Detection +// Routing Config // ============================================================================ /** - * Check if this Bash command is a git commit - * @param {Object} toolInput - Tool input arguments - * @returns {boolean} + * Load routing config with fallback defaults. + * Creates default config if file doesn't exist. */ -function isGitCommit(toolInput) { +function loadRoutingConfig() { + const defaults = { + version: 1, + modelRouting: { + rules: [ + { subagentType: 'Explore', model: 'haiku', reason: 'Fast codebase search' }, + ], + default: null, + }, + backgroundRules: [ + { subagentType: 'Explore', forceBackground: false }, + ], + planningEnforcement: { + enabled: true, + triggerSubagents: ['Plan'], + triggerEnterPlanMode: true, + }, + dryRunGate: { + enabled: true, + skipSubagents: ['Explore', 'Plan', 'claude-code-guide'], + }, + auditLog: true, + }; + + try { + if (fs.existsSync(ROUTING_CONFIG_FILE)) { + const config = JSON.parse(fs.readFileSync(ROUTING_CONFIG_FILE, 'utf-8')); + return { ...defaults, ...config }; + } + } catch (error) { + logError('loadRoutingConfig', error); + } + + // Create default config on first run + try { + const dir = path.dirname(ROUTING_CONFIG_FILE); + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }); + } + fs.writeFileSync(ROUTING_CONFIG_FILE, JSON.stringify(defaults, null, 2), 'utf-8'); + } catch { + // Non-critical — works with in-memory defaults + } + + return defaults; +} + +// ============================================================================ +// Audit Log +// ============================================================================ + +/** + * Append an entry to the routing audit log. + * @param {string} entry - Log entry + * @param {Object} config - Routing config + */ +function auditLog(entry, config) { + if (!config.auditLog) return; + + try { + const timestamp = new Date().toISOString(); + const line = `[${timestamp}] ${entry}\n`; + fs.appendFileSync(ROUTING_AUDIT_LOG, line); + } catch { + // Non-critical + } +} + +// ============================================================================ +// Handler 1: Code Review (existing behavior) +// ============================================================================ + +function codeReviewHandler(toolName, toolInput, _session) { + // Only applies to git commit commands + if (toolName !== 'Bash') return null; + const cmd = toolInput?.command || ''; - return /git\s+commit\s/.test(cmd) && !cmd.includes('--amend'); + if (!/git\s+commit\s/.test(cmd) || cmd.includes('--amend')) return null; + + // Check if code review was done this session + const session = readJSONFile(CURRENT_SESSION_FILE, {}); + if (session.codeReviewDone === true) return null; + + return { + additionalContext: [ + '', + 'PRE-COMMIT REVIEW REMINDER:', + 'No comprehensive code review was detected in this session.', + 'Before committing significant changes, run: @comprehensive-code-review', + '', + 'The review checks for:', + '- Ripple Map: unsynchronized cross-file changes', + '- Reality Check: phantom imports, ghost methods, schema drift', + '- Cross-boundary Sync: type parity, client parity, route-SDK match', + '- Security, concurrency, error handling, and 7 other dimensions', + '', + 'Skip only for trivial changes (typo fixes, formatting, comments).', + '', + ].join('\n'), + }; } // ============================================================================ -// Code Review Status +// Handler 2: Model Routing // ============================================================================ +function routingHandler(toolName, toolInput, _session, config) { + if (toolName !== 'Task') return null; + + const subagentType = toolInput?.subagent_type || ''; + if (!subagentType) return null; + + const result = { updatedInput: {} }; + let applied = false; + + // Model routing + const modelRules = config.modelRouting?.rules || []; + for (const rule of modelRules) { + if (subagentType.toLowerCase() === rule.subagentType.toLowerCase()) { + // Never override user's explicit model choice + if (toolInput.model) { + auditLog(`Task(${subagentType}) → user override preserved (model: ${toolInput.model})`, config); + break; + } + result.updatedInput.model = rule.model; + auditLog(`Task(${subagentType}) → model: ${rule.model} (${rule.reason})`, config); + applied = true; + break; + } + } + + // Background routing + const bgRules = config.backgroundRules || []; + for (const rule of bgRules) { + if (subagentType.toLowerCase() === rule.subagentType.toLowerCase()) { + // Only force background if not explicitly set by user/Claude + if (rule.forceBackground && toolInput.run_in_background === undefined) { + result.updatedInput.run_in_background = true; + auditLog(`Task(${subagentType}) → background: true`, config); + applied = true; + } + break; + } + } + + if (!applied && !toolInput.model) { + auditLog(`Task(${subagentType}) → no override (no matching rule)`, config); + } + + return Object.keys(result.updatedInput).length > 0 ? result : null; +} + +// ============================================================================ +// Handler 3: Planning Enforcer +// ============================================================================ + +function planningHandler(toolName, toolInput, _session, config) { + const planConfig = config.planningEnforcement; + if (!planConfig?.enabled) return null; + + // Case 1: Task tool dispatching a Plan subagent + if (toolName === 'Task') { + const subagentType = toolInput?.subagent_type || ''; + const triggerSubagents = planConfig.triggerSubagents || ['Plan']; + + if (triggerSubagents.some(t => subagentType.toLowerCase() === t.toLowerCase())) { + const template = loadPlanningTemplate(); + if (!template) return null; + + auditLog(`Task(${subagentType}) → planning template injected`, config); + + // Append template to the subagent's prompt via updatedInput.prompt + const originalPrompt = toolInput?.prompt || ''; + return { + updatedInput: { + prompt: originalPrompt + '\n\n---\n\n' + template, + }, + }; + } + } + + // Case 2: EnterPlanMode — inject into main Claude's context + if (toolName === 'EnterPlanMode' && planConfig.triggerEnterPlanMode) { + auditLog('EnterPlanMode → planning template context injected', config); + + return { + additionalContext: [ + 'PLANNING MODE ACTIVATED — Use this template for your plan:', + '', + loadPlanningTemplate() || '(Planning template not found)', + '', + 'IMPORTANT: Present the completed plan to the user and wait for', + 'explicit approval before proceeding to implementation.', + ].join('\n'), + }; + } + + return null; +} + /** - * Check if code review was performed in this session. - * The flag is set by post-tool-use.js (Skill/Task detection) - * or subagent-stop.js (code-reviewer subagent completion). - * @returns {boolean} + * Load the planning template from file. + * @returns {string|null} */ -function wasCodeReviewDone() { +function loadPlanningTemplate() { + try { + if (fs.existsSync(PLANNING_TEMPLATE_FILE)) { + return fs.readFileSync(PLANNING_TEMPLATE_FILE, 'utf-8'); + } + } catch (error) { + logError('loadPlanningTemplate', error); + } + return null; +} + +// ============================================================================ +// Handler 4: Dry-Run Gate +// ============================================================================ + +function dryRunGateHandler(toolName, toolInput, _session, config) { + const gateConfig = config.dryRunGate; + if (!gateConfig?.enabled) return null; + + // Only applies to Task dispatches (heavy operations) + if (toolName !== 'Task') return null; + + const subagentType = toolInput?.subagent_type || ''; + const skipTypes = gateConfig.skipSubagents || ['Explore', 'Plan', 'claude-code-guide']; + + // Skip for research/planning agents that don't need tested code + if (skipTypes.some(t => subagentType.toLowerCase().includes(t.toLowerCase()))) { + return null; + } + + // Read session state for file tracking const session = readJSONFile(CURRENT_SESSION_FILE, {}); - return session.codeReviewDone === true; + const modifiedFiles = session.modifiedFiles || []; + const testedFiles = session.testedFiles || []; + + if (modifiedFiles.length === 0) return null; + + // Find untested files + const untestedFiles = modifiedFiles.filter(f => !testedFiles.includes(f)); + + if (untestedFiles.length === 0) return null; + + // Build warning (advisory only — never deny) + const fileList = untestedFiles.length <= 5 + ? untestedFiles.map(f => path.basename(f)).join(', ') + : `${untestedFiles.slice(0, 5).map(f => path.basename(f)).join(', ')} (+${untestedFiles.length - 5} more)`; + + auditLog(`Task(${subagentType}) → dry-run warning: ${untestedFiles.length} untested files`, config); + + return { + additionalContext: [ + 'UNTESTED CODE WARNING:', + `${untestedFiles.length} modified file(s) have not been tested yet: ${fileList}`, + '', + 'Consider running tests before dispatching this task:', + '- node --check (syntax verification)', + '- vitest run (unit tests)', + '- tsc --noEmit (type checking)', + '', + 'This is advisory — proceed if you are confident the code is correct.', + ].join('\n'), + }; } // ============================================================================ -// Hook Response +// Hook Response Output // ============================================================================ /** * Output hook response as JSON to stdout. - * Claude Code reads this to apply hook decisions. - * @param {Object} response - Hook response object */ -function respond(response) { - process.stdout.write(JSON.stringify(response)); +function respond(hookOutput) { + process.stdout.write(JSON.stringify({ + hookSpecificOutput: { + hookEventName: 'PreToolUse', + ...hookOutput, + }, + })); } // ============================================================================ @@ -84,37 +427,27 @@ async function preToolUse() { const toolName = data.tool_name || data.toolName || ''; const toolInput = data.tool_input || data.arguments || {}; - // Fast exit: only process Bash commands that are git commits - if (toolName !== 'Bash' || !isGitCommit(toolInput)) { - process.exit(0); - } + // Load config once for all handlers + const config = loadRoutingConfig(); - // If code review was already done this session, allow commit - if (wasCodeReviewDone()) { - process.exit(0); - } + // Load session state once for handlers that need it + const session = readJSONFile(CURRENT_SESSION_FILE, {}); - // No code review detected — inject reminder context for Claude - respond({ - hookSpecificOutput: { - hookEventName: 'PreToolUse', - additionalContext: [ - '', - 'PRE-COMMIT REVIEW REMINDER:', - 'No comprehensive code review was detected in this session.', - 'Before committing significant changes, run: @comprehensive-code-review', - '', - 'The review checks for:', - '- Ripple Map: unsynchronized cross-file changes', - '- Reality Check: phantom imports, ghost methods, schema drift', - '- Cross-boundary Sync: type parity, client parity, route-SDK match', - '- Security, concurrency, error handling, and 7 other dimensions', - '', - 'Skip only for trivial changes (typo fixes, formatting, comments).', - '', - ].join('\n'), - }, - }); + // Run all handlers + const responses = [ + codeReviewHandler(toolName, toolInput, session), + routingHandler(toolName, toolInput, session, config), + planningHandler(toolName, toolInput, session, config), + dryRunGateHandler(toolName, toolInput, session, config), + ]; + + // Merge all responses + const merged = mergeResponses(responses); + + // If any handler produced output, send the merged response + if (merged) { + respond(merged); + } process.exit(0); } catch (error) { diff --git a/scripts/hooks/session-start.js b/scripts/hooks/session-start.js index bb5b1456..cc575918 100755 --- a/scripts/hooks/session-start.js +++ b/scripts/hooks/session-start.js @@ -37,6 +37,10 @@ const MCP_SETTINGS_FILE = path.join(HOME_DIR, '.claude', 'mcp_settings.json'); const RECOMMENDATIONS_FILE = path.join(STATE_DIR, 'recommendations.json'); const SESSION_CONTEXT_FILE = path.join(STATE_DIR, 'session-context.json'); const CURRENT_SESSION_FILE = path.join(STATE_DIR, 'current-session.json'); +const LAST_SESSION_CACHE_FILE = path.join(STATE_DIR, 'last-session-summary.json'); + +/** Maximum cache age: 7 days */ +const CACHE_MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000; // ============================================================================ // MeMesh Status Check @@ -159,22 +163,59 @@ function displayCCBStatus(ccbStatus) { // ============================================================================ /** - * Recall recent session key points from MeMesh - * Uses parameterized queries to prevent SQL injection + * Try to read session summary from cache file (fast path). + * Cache is written by stop.js on session end. * @returns {{ entityName: string, createdAt: string, metadata: object, keyPoints: string[] } | null} */ -function recallRecentKeyPoints() { +function recallFromCache() { + try { + if (!fs.existsSync(LAST_SESSION_CACHE_FILE)) { + return null; + } + + const cache = readJSONFile(LAST_SESSION_CACHE_FILE, null); + if (!cache || !cache.savedAt || !cache.keyPoints) { + return null; + } + + // Check staleness + const cacheAge = Date.now() - new Date(cache.savedAt).getTime(); + if (cacheAge > CACHE_MAX_AGE_MS) { + // Stale cache — delete it + try { fs.unlinkSync(LAST_SESSION_CACHE_FILE); } catch { /* ignore */ } + return null; + } + + return { + entityName: 'session_cache', + createdAt: cache.savedAt, + metadata: { + duration: cache.duration, + toolCount: cache.toolCount, + }, + keyPoints: cache.keyPoints, + }; + } catch (error) { + logError('recallFromCache', error); + return null; + } +} + +/** + * Recall recent session key points from MeMesh (slow path — SQLite query). + * Used as fallback when cache is not available. + * @returns {{ entityName: string, createdAt: string, metadata: object, keyPoints: string[] } | null} + */ +function recallFromSQLite() { try { if (!fs.existsSync(MEMESH_DB_PATH)) { return null; } - // Calculate cutoff date for recall const cutoffDate = new Date(); cutoffDate.setDate(cutoffDate.getDate() - THRESHOLDS.RECALL_DAYS); const cutoffISO = cutoffDate.toISOString(); - // Query for most recent session_keypoint entity using parameterized query const query = ` SELECT id, name, metadata, created_at FROM entities @@ -193,7 +234,6 @@ function recallRecentKeyPoints() { return null; } - // Parse result (format: id|name|metadata|created_at) const parts = entityResult.split('|'); if (parts.length < 4) { return null; @@ -201,13 +241,11 @@ function recallRecentKeyPoints() { const [entityId, entityName, metadata, createdAt] = parts; - // Query observations using parameterized query const obsQuery = 'SELECT content FROM observations WHERE entity_id = ? ORDER BY created_at ASC'; const obsResult = sqliteQuery(MEMESH_DB_PATH, obsQuery, [entityId]); const keyPoints = obsResult ? obsResult.split('\n').filter(Boolean) : []; - // Parse metadata let parsedMetadata = {}; try { parsedMetadata = JSON.parse(metadata || '{}'); @@ -222,11 +260,26 @@ function recallRecentKeyPoints() { keyPoints, }; } catch (error) { - logError('recallRecentKeyPoints', error); + logError('recallFromSQLite', error); return null; } } +/** + * Recall recent session key points — cache-first, SQLite fallback. + * @returns {{ entityName: string, createdAt: string, metadata: object, keyPoints: string[] } | null} + */ +function recallRecentKeyPoints() { + // Fast path: read from cache file (no sqlite3 spawn) + const cached = recallFromCache(); + if (cached) { + return cached; + } + + // Slow path: query SQLite + return recallFromSQLite(); +} + /** * Display recalled key points from last session */ diff --git a/scripts/hooks/stop.js b/scripts/hooks/stop.js index 7536e7aa..86325a95 100755 --- a/scripts/hooks/stop.js +++ b/scripts/hooks/stop.js @@ -22,6 +22,8 @@ import { readJSONFile, writeJSONFile, sqliteQuery, + sqliteBatch, + sqliteBatchEntity, calculateDuration, getDateString, ensureDir, @@ -38,6 +40,7 @@ const CURRENT_SESSION_FILE = path.join(STATE_DIR, 'current-session.json'); const RECOMMENDATIONS_FILE = path.join(STATE_DIR, 'recommendations.json'); const SESSION_CONTEXT_FILE = path.join(STATE_DIR, 'session-context.json'); const SESSIONS_ARCHIVE_DIR = path.join(STATE_DIR, 'sessions'); +const LAST_SESSION_CACHE_FILE = path.join(STATE_DIR, 'last-session-summary.json'); // Ensure archive directory exists if (!fs.existsSync(SESSIONS_ARCHIVE_DIR)) { @@ -392,7 +395,8 @@ function extractSessionKeyPoints(sessionState, patterns) { } /** - * Save session key points to MeMesh on session end + * Save session key points to MeMesh on session end. + * Uses sqliteBatchEntity for performance (2 spawns instead of N). * @param {Object} sessionState - Current session state * @param {Array} patterns - Analyzed patterns * @returns {boolean} True if saved successfully @@ -409,10 +413,7 @@ function saveSessionKeyPointsOnEnd(sessionState, patterns) { return false; } - const now = new Date().toISOString(); const entityName = `session_end_${Date.now()}`; - - // Calculate session duration const startTime = new Date(sessionState.startTime); const duration = Math.round((Date.now() - startTime.getTime()) / 1000 / 60); @@ -423,36 +424,21 @@ function saveSessionKeyPointsOnEnd(sessionState, patterns) { patternCount: patterns.length, }); - // Create entity using parameterized query - const insertEntity = 'INSERT INTO entities (name, type, created_at, metadata) VALUES (?, ?, ?, ?)'; - sqliteQuery(MEMESH_DB_PATH, insertEntity, [entityName, 'session_keypoint', now, metadata]); + const today = getDateString(); + const tags = ['session_end', 'auto_saved', today]; - // Get the entity ID using parameterized query - const entityIdResult = sqliteQuery( + // Batch: entity + observations + tags in 2 process spawns (was ~10) + const entityId = sqliteBatchEntity( MEMESH_DB_PATH, - 'SELECT id FROM entities WHERE name = ?', - [entityName] + { name: entityName, type: 'session_keypoint', metadata }, + keyPoints, + tags ); - const entityId = parseInt(entityIdResult, 10); - if (isNaN(entityId)) { + if (entityId === null) { return false; } - // Add observations for each key point - for (const point of keyPoints) { - const insertObs = 'INSERT INTO observations (entity_id, content, created_at) VALUES (?, ?, ?)'; - sqliteQuery(MEMESH_DB_PATH, insertObs, [entityId, point, now]); - } - - // Add tags for easier retrieval - const today = getDateString(); - const tags = ['session_end', 'auto_saved', today]; - for (const tag of tags) { - const insertTag = 'INSERT INTO tags (entity_id, tag) VALUES (?, ?)'; - sqliteQuery(MEMESH_DB_PATH, insertTag, [entityId, tag]); - } - console.log(`🧠 MeMesh: Saved ${keyPoints.length} key points to memory`); return true; } catch (error) { @@ -462,7 +448,8 @@ function saveSessionKeyPointsOnEnd(sessionState, patterns) { } /** - * Clean up old key points (older than retention period) + * Clean up old key points (older than retention period). + * Uses batch delete for performance. */ function cleanupOldKeyPoints() { try { @@ -474,7 +461,7 @@ function cleanupOldKeyPoints() { cutoffDate.setDate(cutoffDate.getDate() - THRESHOLDS.RETENTION_DAYS); const cutoffISO = cutoffDate.toISOString(); - // Count old entries using parameterized query + // Count old entries const countResult = sqliteQuery( MEMESH_DB_PATH, 'SELECT COUNT(*) FROM entities WHERE type = ? AND created_at < ?', @@ -484,26 +471,19 @@ function cleanupOldKeyPoints() { const oldCount = parseInt(countResult, 10) || 0; if (oldCount > 0) { - // Get IDs of old entities - const oldIdsResult = sqliteQuery( - MEMESH_DB_PATH, - 'SELECT id FROM entities WHERE type = ? AND created_at < ?', - ['session_keypoint', cutoffISO] - ); - - const oldIds = oldIdsResult.split('\n').filter(Boolean); - - // Delete tags for old entities - for (const id of oldIds) { - sqliteQuery(MEMESH_DB_PATH, 'DELETE FROM tags WHERE entity_id = ?', [id]); - } - - // Delete old entities (observations cascade automatically due to FK) - sqliteQuery( - MEMESH_DB_PATH, - 'DELETE FROM entities WHERE type = ? AND created_at < ?', - ['session_keypoint', cutoffISO] - ); + // Batch delete: tags + entities in 2 statements (was N+2 spawns) + sqliteBatch(MEMESH_DB_PATH, [ + { + query: `DELETE FROM tags WHERE entity_id IN ( + SELECT id FROM entities WHERE type = ? AND created_at < ? + )`, + params: ['session_keypoint', cutoffISO], + }, + { + query: 'DELETE FROM entities WHERE type = ? AND created_at < ?', + params: ['session_keypoint', cutoffISO], + }, + ]); console.log(`🧠 MeMesh: Cleaned up ${oldCount} expired memories (>${THRESHOLDS.RETENTION_DAYS} days)`); } @@ -512,6 +492,35 @@ function cleanupOldKeyPoints() { } } +// ============================================================================ +// Session Cache (for fast startup) +// ============================================================================ + +/** + * Write session summary cache for fast recall on next startup. + * Session-start.js reads this instead of querying SQLite. + * @param {Object} sessionState - Current session state + * @param {Array} patterns - Analyzed patterns + */ +function writeSessionCache(sessionState, patterns) { + try { + const keyPoints = extractSessionKeyPoints(sessionState, patterns); + const startTime = new Date(sessionState.startTime); + const duration = Math.round((Date.now() - startTime.getTime()) / 1000 / 60); + + const cache = { + savedAt: new Date().toISOString(), + duration: `${duration}m`, + toolCount: sessionState.toolCalls?.length || 0, + keyPoints, + }; + + writeJSONFile(LAST_SESSION_CACHE_FILE, cache); + } catch (error) { + logError('writeSessionCache', error); + } +} + // ============================================================================ // Session Archive // ============================================================================ @@ -635,6 +644,9 @@ function stopHook() { // Save session key points to MeMesh saveSessionKeyPointsOnEnd(sessionState, patterns); + // Write session cache for fast startup next time (1A.2) + writeSessionCache(sessionState, patterns); + // Clean up old key points (>30 days) cleanupOldKeyPoints(); diff --git a/src/mcp/ToolDefinitions.ts b/src/mcp/ToolDefinitions.ts index 24d12ce1..b39a7ee2 100644 --- a/src/mcp/ToolDefinitions.ts +++ b/src/mcp/ToolDefinitions.ts @@ -75,24 +75,35 @@ export function getAllToolDefinitions(): MCPToolDefinition[] { const buddyDoTool: MCPToolDefinition = { name: 'buddy-do', - description: 'Execute development tasks with context-aware analysis and memory integration', + description: `Smart task analysis with memory-enriched proposals. + +Analyzes the task description, detects the task type (bug-fix, feature, refactor, test, etc.), +queries the knowledge graph for related context, and returns an enriched proposal for user review. + +Follows "propose, don't execute" pattern — the enhanced prompt is returned for confirmation, +not auto-executed. User reviews the proposal and confirms or modifies before proceeding. + +Examples: +- buddy-do "fix the auth bug" → detects bug-fix, recalls JWT context, suggests debugging approach +- buddy-do "add user dashboard" → detects feature, recalls related UI work, suggests planning approach +- buddy-do "refactor payment service" → detects refactor, recalls payment patterns, suggests review-first approach`, inputSchema: { type: 'object' as const, properties: { task: { type: 'string', - description: 'Task description to execute (e.g., "setup authentication", "fix login bug")', + description: 'Task description to analyze and enrich (e.g., "setup authentication", "fix login bug")', }, }, required: ['task'], }, outputSchema: OutputSchemas.buddyDo, annotations: { - title: 'Smart Task Router', - readOnlyHint: false, // May generate modification suggestions - destructiveHint: false, // Does not directly execute destructive operations - idempotentHint: false, // Results may vary based on context - openWorldHint: true, // Can handle open-ended tasks + title: 'Smart Task Analyzer', + readOnlyHint: true, // Returns proposal only, does not execute + destructiveHint: false, + idempotentHint: false, // Results may vary based on KG context + openWorldHint: true, }, }; @@ -568,6 +579,44 @@ Requires MEMESH_API_KEY to be configured.`, }, }; + // ======================================== + // Observability Tools + // ======================================== + + const memeshMetricsTool: MCPToolDefinition = { + name: 'memesh-metrics', + description: `View MeMesh session metrics, routing configuration, and memory status. + +Returns structured data about: +- Current session: modified files, tested files, code review status +- Routing: active model rules, planning enforcement, dry-run gate, recent audit log +- Memory: knowledge graph size and status + +Use section parameter to focus on specific areas: +- "all" (default): Everything +- "session": Current session state only +- "routing": Routing config and audit log only +- "memory": Knowledge graph status only`, + inputSchema: { + type: 'object' as const, + properties: { + section: { + type: 'string', + enum: ['all', 'session', 'routing', 'memory'], + description: 'Which metrics section to return (default: "all")', + }, + }, + }, + outputSchema: OutputSchemas.memeshMetrics, + annotations: { + title: 'Session Metrics', + readOnlyHint: true, + destructiveHint: false, + idempotentHint: true, + openWorldHint: false, + }, + }; + // ======================================== // Return all tools in priority order // ======================================== @@ -593,5 +642,8 @@ Requires MEMESH_API_KEY to be configured.`, // Test Generation Tools generateTestsTool, + + // Observability + memeshMetricsTool, ]; } diff --git a/src/mcp/ToolRouter.ts b/src/mcp/ToolRouter.ts index f11e73e1..6bfd328d 100644 --- a/src/mcp/ToolRouter.ts +++ b/src/mcp/ToolRouter.ts @@ -19,6 +19,7 @@ import { import type { KnowledgeGraph } from '../knowledge-graph/index.js'; import { handleCloudSync, CloudSyncInputSchema } from './tools/memesh-cloud-sync.js'; import { handleAgentRegister, AgentRegisterInputSchema } from './tools/memesh-agent-register.js'; +import { handleMemeshMetrics, MemeshMetricsInputSchema } from './tools/memesh-metrics.js'; import { logger } from '../utils/logger.js'; /** @@ -425,6 +426,18 @@ export class ToolRouter { } + // Observability tools + if (resolvedToolName === 'memesh-metrics') { + const validationResult = MemeshMetricsInputSchema.safeParse(args); + if (!validationResult.success) { + throw new ValidationError( + `Invalid input for ${resolvedToolName}: ${validationResult.error.message}`, + { component: 'ToolRouter', method: 'dispatch', toolName: resolvedToolName, zodError: validationResult.error } + ); + } + return handleMemeshMetrics(validationResult.data); + } + // Sanitize toolName in error message const safeName = sanitizeToolNameForError(resolvedToolName); throw new NotFoundError( diff --git a/src/mcp/handlers/BuddyHandlers.ts b/src/mcp/handlers/BuddyHandlers.ts index 9962ea3f..c958912c 100644 --- a/src/mcp/handlers/BuddyHandlers.ts +++ b/src/mcp/handlers/BuddyHandlers.ts @@ -138,7 +138,7 @@ export class BuddyHandlers { } try { - return await executeBuddyDo(validatedInput, this.formatter, this.autoTracker); + return await executeBuddyDo(validatedInput, this.formatter, this.autoTracker, this.knowledgeGraph); } catch (error) { logError(error, { component: 'BuddyHandlers', diff --git a/src/mcp/schemas/OutputSchemas.ts b/src/mcp/schemas/OutputSchemas.ts index d865e8f9..476ad0ac 100644 --- a/src/mcp/schemas/OutputSchemas.ts +++ b/src/mcp/schemas/OutputSchemas.ts @@ -258,6 +258,40 @@ export const OutputSchemas = { }, required: ['success'], }, + + /** + * memesh-metrics output structure + */ + memeshMetrics: { + type: 'object' as const, + properties: { + session: { + type: 'object', + properties: { + current: { type: 'object' }, + lastSessionCached: { type: 'boolean' }, + }, + }, + routing: { + type: 'object', + properties: { + configLoaded: { type: 'boolean' }, + modelRules: { type: 'number' }, + backgroundRules: { type: 'number' }, + planningEnforcement: { type: 'boolean' }, + dryRunGate: { type: 'boolean' }, + recentAuditEntries: { type: 'array', items: { type: 'string' } }, + }, + }, + memory: { + type: 'object', + properties: { + knowledgeGraphExists: { type: 'boolean' }, + dbSizeKB: { type: 'number' }, + }, + }, + }, + }, }; /** diff --git a/src/mcp/tools/buddy-do.ts b/src/mcp/tools/buddy-do.ts index 383177dd..e12f52d8 100644 --- a/src/mcp/tools/buddy-do.ts +++ b/src/mcp/tools/buddy-do.ts @@ -1,6 +1,7 @@ import { z } from 'zod'; import type { ResponseFormatter } from '../../ui/ResponseFormatter.js'; import type { ProjectAutoTracker } from '../../memory/ProjectAutoTracker.js'; +import type { KnowledgeGraph } from '../../knowledge-graph/index.js'; import { logger } from '../../utils/logger.js'; export const BuddyDoInputSchema = z.object({ @@ -9,6 +10,61 @@ export const BuddyDoInputSchema = z.object({ export type ValidatedBuddyDoInput = z.infer; +/** + * Task type patterns for detecting what kind of work is requested. + * Used to tailor the enriched prompt with relevant skills and approaches. + */ +const TASK_PATTERNS: Array<{ type: string; patterns: RegExp[]; skills: string[]; approach: string }> = [ + { + type: 'bug-fix', + patterns: [/\bfix\b/i, /\bbug\b/i, /\berror\b/i, /\bcrash/i, /\bbroken\b/i, /\bfailing\b/i], + skills: ['@systematic-debugging', '@test-driven-development'], + approach: 'Reproduce → Root cause analysis → Fix → Regression test → Verify', + }, + { + type: 'feature', + patterns: [/\badd\b/i, /\bcreate\b/i, /\bimplement\b/i, /\bbuild\b/i, /\bnew\b/i, /\bsetup\b/i], + skills: ['@writing-plans', '@test-driven-development'], + approach: 'Plan → Design → Implement → Test → Review', + }, + { + type: 'refactor', + patterns: [/\brefactor\b/i, /\bclean\s?up\b/i, /\breorganize\b/i, /\bsimplify\b/i, /\bextract\b/i], + skills: ['@comprehensive-code-review'], + approach: 'Ensure tests exist → Refactor in small steps → Verify tests still pass', + }, + { + type: 'test', + patterns: [/\btest\b/i, /\bcoverage\b/i, /\bspec\b/i], + skills: ['@test-driven-development'], + approach: 'Identify coverage gaps → Write failing tests → Verify behavior', + }, + { + type: 'performance', + patterns: [/\bperformance\b/i, /\boptimize\b/i, /\bslow\b/i, /\bfast\b/i, /\bspeed\b/i], + skills: ['@systematic-debugging'], + approach: 'Profile → Identify bottleneck → Optimize → Benchmark → Verify no regressions', + }, + { + type: 'security', + patterns: [/\bsecurity\b/i, /\bauth\b/i, /\bvulnerabilit/i, /\bpermission\b/i, /\baccess\b/i], + skills: ['@comprehensive-code-review'], + approach: 'Threat model → Identify vulnerabilities → Fix → Security review → Verify', + }, +]; + +/** + * Detect task type from description + */ +function detectTaskType(task: string): { type: string; skills: string[]; approach: string } | null { + for (const pattern of TASK_PATTERNS) { + if (pattern.patterns.some(p => p.test(task))) { + return { type: pattern.type, skills: pattern.skills, approach: pattern.approach }; + } + } + return null; +} + /** * Extract goal, reason, and expected outcome from task description */ @@ -29,11 +85,35 @@ function extractTaskMetadata(task: string): { } /** - * buddy_do tool - Record task and provide guidance + * Query knowledge graph for related context + */ +async function queryRelatedContext( + task: string, + knowledgeGraph: KnowledgeGraph +): Promise { + try { + const results = await knowledgeGraph.hybridSearch(task, { limit: 5, minSimilarity: 0.3 }); + if (results.length === 0) return []; + + return results.map(r => { + const obs = r.entity.observations?.slice(0, 3) || []; + const obsText = obs.length > 0 ? ` — ${obs.join('; ')}` : ''; + return `[${r.entity.entityType}] ${r.entity.name}${obsText}`; + }); + } catch (error) { + logger.debug('KG query for buddy-do context failed', { + error: error instanceof Error ? error.message : String(error), + }); + return []; + } +} + +/** + * buddy_do tool - Smart task analysis with memory-enriched proposals * - * Records the task to project memory and returns guidance. - * Task routing to specialized agents has been removed in favor of - * direct Claude Code capabilities. + * Analyzes the task, queries knowledge graph for related context, + * detects task type, and returns an enriched proposal for user review. + * Follows "propose, don't execute" pattern — user must confirm before proceeding. * * Examples: * task: "setup authentication" @@ -43,16 +123,17 @@ function extractTaskMetadata(task: string): { export async function executeBuddyDo( input: ValidatedBuddyDoInput, formatter: ResponseFormatter, - autoTracker?: ProjectAutoTracker + autoTracker?: ProjectAutoTracker, + knowledgeGraph?: KnowledgeGraph ): Promise<{ content: Array<{ type: 'text'; text: string }> }> { const startTime = Date.now(); const taskId = `buddy-do-${startTime}`; try { // Record task start with metadata - if (autoTracker) { - const taskMeta = extractTaskMetadata(input.task); + const taskMeta = extractTaskMetadata(input.task); + if (autoTracker) { await autoTracker.recordTaskStart({ task_description: input.task, goal: taskMeta.goal, @@ -68,21 +149,63 @@ export async function executeBuddyDo( }); } + // Detect task type for tailored guidance + const taskType = detectTaskType(input.task); + + // Query KG for related context (if available) + const relatedContext = knowledgeGraph + ? await queryRelatedContext(input.task, knowledgeGraph) + : []; + const durationMs = Date.now() - startTime; - logger.debug('buddy_do task recorded', { + logger.debug('buddy_do task analyzed', { taskId, + taskType: taskType?.type || 'general', + relatedContextCount: relatedContext.length, durationMs, }); + // Build enriched proposal + const proposalParts: string[] = [ + `Task: ${input.task}`, + '', + ]; + + if (taskType) { + proposalParts.push( + `Type: ${taskType.type}`, + `Approach: ${taskType.approach}`, + '', + ); + if (taskType.skills.length > 0) { + proposalParts.push(`Recommended skills: ${taskType.skills.join(', ')}`, ''); + } + } + + if (relatedContext.length > 0) { + proposalParts.push( + 'Related context from memory:', + ...relatedContext.map(c => ` - ${c}`), + '', + ); + } + + proposalParts.push( + 'Proceed with this approach? (confirm or modify)', + ); + const formattedResponse = formatter.format({ agentType: 'buddy-do', taskDescription: input.task, status: 'success', results: { - message: 'Task recorded. Proceed with execution using Claude Code capabilities.', + message: proposalParts.join('\n'), + confirmationRequired: true, stats: { durationMs, + taskType: taskType?.type || 'general', + relatedContextCount: relatedContext.length, }, }, }); diff --git a/src/mcp/tools/memesh-metrics.ts b/src/mcp/tools/memesh-metrics.ts new file mode 100644 index 00000000..4862cf9d --- /dev/null +++ b/src/mcp/tools/memesh-metrics.ts @@ -0,0 +1,189 @@ +import { z } from 'zod'; +import { CallToolResult } from '@modelcontextprotocol/sdk/types.js'; +import fs from 'fs'; +import path from 'path'; +import { logger } from '../../utils/logger.js'; + +export const MemeshMetricsInputSchema = z.object({ + section: z + .enum(['all', 'session', 'routing', 'memory']) + .optional() + .default('all') + .describe('Which metrics section to return'), +}); + +export type ValidatedMemeshMetricsInput = z.infer; + +const HOME_DIR = process.env.HOME || process.env.USERPROFILE || '/tmp'; +const STATE_DIR = path.join(HOME_DIR, '.memesh'); +const CURRENT_SESSION_FILE = path.join(STATE_DIR, 'current-session.json'); +const ROUTING_CONFIG_FILE = path.join(STATE_DIR, 'routing-config.json'); +const ROUTING_AUDIT_LOG = path.join(STATE_DIR, 'routing-audit.log'); +const LAST_SESSION_CACHE = path.join(STATE_DIR, 'last-session-summary.json'); + +function readJSONSafe(filePath: string): Record | null { + try { + if (fs.existsSync(filePath)) { + return JSON.parse(fs.readFileSync(filePath, 'utf-8')); + } + } catch { + // Non-critical + } + return null; +} + +function getRecentAuditEntries(maxLines: number): string[] { + try { + if (!fs.existsSync(ROUTING_AUDIT_LOG)) return []; + const content = fs.readFileSync(ROUTING_AUDIT_LOG, 'utf-8'); + const lines = content.trim().split('\n').filter(Boolean); + return lines.slice(-maxLines); + } catch { + return []; + } +} + +/** + * memesh-metrics MCP tool — expose session and routing metrics + * + * Returns structured data about current session state, + * routing configuration, and recent audit log entries. + */ +export async function handleMemeshMetrics( + input: ValidatedMemeshMetricsInput +): Promise { + try { + const result: Record = {}; + const section = input.section; + + // Session metrics + if (section === 'all' || section === 'session') { + const session = readJSONSafe(CURRENT_SESSION_FILE); + const lastSession = readJSONSafe(LAST_SESSION_CACHE); + + result.session = { + current: session + ? { + startTime: session.startTime, + modifiedFiles: (session.modifiedFiles as string[] | undefined)?.length ?? 0, + testedFiles: (session.testedFiles as string[] | undefined)?.length ?? 0, + codeReviewDone: session.codeReviewDone ?? false, + toolUseCounts: session.toolUseCounts ?? {}, + patterns: session.patterns ?? [], + } + : null, + lastSessionCached: !!lastSession, + }; + } + + // Routing metrics + if (section === 'all' || section === 'routing') { + const config = readJSONSafe(ROUTING_CONFIG_FILE); + const recentAudit = getRecentAuditEntries(20); + + result.routing = { + configLoaded: !!config, + modelRules: config + ? ((config.modelRouting as Record)?.rules as unknown[] | undefined)?.length ?? 0 + : 0, + backgroundRules: config + ? (config.backgroundRules as unknown[] | undefined)?.length ?? 0 + : 0, + planningEnforcement: config + ? (config.planningEnforcement as Record)?.enabled ?? false + : false, + dryRunGate: config + ? (config.dryRunGate as Record)?.enabled ?? false + : false, + recentAuditEntries: recentAudit, + }; + } + + // Memory metrics + if (section === 'all' || section === 'memory') { + const dbPath = path.join(STATE_DIR, 'knowledge-graph.db'); + const dbExists = fs.existsSync(dbPath); + + let dbSizeKB = 0; + if (dbExists) { + try { + const stat = fs.statSync(dbPath); + dbSizeKB = Math.round(stat.size / 1024); + } catch { + // Non-critical + } + } + + result.memory = { + knowledgeGraphExists: dbExists, + dbSizeKB, + stateDir: STATE_DIR, + }; + } + + const lines: string[] = ['MeMesh Metrics', '']; + + if (result.session) { + const s = result.session as Record; + const current = s.current as Record | null; + lines.push('Session:'); + if (current) { + lines.push(` Modified files: ${current.modifiedFiles}`); + lines.push(` Tested files: ${current.testedFiles}`); + lines.push(` Code review done: ${current.codeReviewDone}`); + } else { + lines.push(' No active session'); + } + lines.push(` Last session cached: ${s.lastSessionCached}`); + lines.push(''); + } + + if (result.routing) { + const r = result.routing as Record; + lines.push('Routing:'); + lines.push(` Config loaded: ${r.configLoaded}`); + lines.push(` Model rules: ${r.modelRules}`); + lines.push(` Background rules: ${r.backgroundRules}`); + lines.push(` Planning enforcement: ${r.planningEnforcement}`); + lines.push(` Dry-run gate: ${r.dryRunGate}`); + const audit = r.recentAuditEntries as string[]; + if (audit.length > 0) { + lines.push(` Recent audit (last ${audit.length}):`); + for (const entry of audit.slice(-5)) { + lines.push(` ${entry}`); + } + } + lines.push(''); + } + + if (result.memory) { + const m = result.memory as Record; + lines.push('Memory:'); + lines.push(` Knowledge graph: ${m.knowledgeGraphExists ? `${m.dbSizeKB} KB` : 'not found'}`); + lines.push(''); + } + + return { + content: [ + { + type: 'text' as const, + text: lines.join('\n'), + }, + ], + }; + } catch (error) { + logger.error('memesh-metrics failed', { + error: error instanceof Error ? error.message : String(error), + }); + + return { + content: [ + { + type: 'text' as const, + text: `Error retrieving metrics: ${error instanceof Error ? error.message : String(error)}`, + }, + ], + isError: true, + }; + } +} diff --git a/tests/unit/mcp-compliance-audit.test.ts b/tests/unit/mcp-compliance-audit.test.ts index 8f43f0a8..7a24e21c 100644 --- a/tests/unit/mcp-compliance-audit.test.ts +++ b/tests/unit/mcp-compliance-audit.test.ts @@ -20,13 +20,14 @@ describe('MCP Compliance Audit', () => { // Load tools once for all tests tools = getAllToolDefinitions(); - it('should have exactly 9 tools defined', () => { - // v2.8.11: 3 buddy commands (preserved) + 6 memesh-* tools + it('should have exactly 10 tools defined', () => { + // v2.9: 3 buddy commands + 7 memesh-* tools // - Core: buddy-do, buddy-remember, buddy-help // - MeMesh: memesh-record-mistake, memesh-create-entities, // memesh-cloud-sync, memesh-agent-register, - // memesh-hook-tool-use, memesh-generate-tests - expect(tools).toHaveLength(9); + // memesh-hook-tool-use, memesh-generate-tests, + // memesh-metrics + expect(tools).toHaveLength(10); }); it('should have all tools with outputSchema defined (MCP Spec 2025-11-25)', () => { From 7ce1682135c103bc2617617d4e09998307219763 Mon Sep 17 00:00:00 2001 From: KT <677465+kevintseng@users.noreply.github.com> Date: Wed, 25 Feb 2026 08:10:35 +0800 Subject: [PATCH 19/23] fix: resolve CRITICAL and MAJOR issues from v2.9 code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 5 CRITICAL fixes: - Hook exit codes: process.exit(1) → exit(0) in post-tool-use, stop, session-start (exit(1) blocks Claude Code tool execution) - Output schema tests aligned with new buddyDo schema format 10 MAJOR fixes: - memesh-metrics: split STATE_DIR into correct paths (hooks→~/.claude/state, routing→~/.memesh) - memesh-metrics: remove stateDir from output (info leak) - post-tool-use: track async session write promise in pendingWrites - hook-utils: sqliteBatch pipes SQL via stdin to avoid E2BIG on large batches - hook-utils: escapeSQL handles numbers and booleans correctly - hook-utils/stop: fix sqliteBatchEntity doc (2→3 spawns) - session-start: replace pipe-split parsing with sqliteQueryJSON (safe for | in data) - ToolDefinitions: buddy-do readOnlyHint false (writes to autoTracker) - OutputSchemas: buddyDo schema matches actual handler output - hooks.test.js: replace vacuous return-true fallbacks with proper assertions Co-Authored-By: Claude Opus 4.6 --- .../memesh/dist/mcp/ToolDefinitions.js | 2 +- .../memesh/dist/mcp/ToolDefinitions.js.map | 2 +- .../dist/mcp/schemas/OutputSchemas.d.ts | 65 +++----------- .../dist/mcp/schemas/OutputSchemas.d.ts.map | 2 +- .../memesh/dist/mcp/schemas/OutputSchemas.js | 35 ++------ .../dist/mcp/schemas/OutputSchemas.js.map | 2 +- .../dist/mcp/tools/memesh-metrics.d.ts.map | 2 +- .../memesh/dist/mcp/tools/memesh-metrics.js | 14 +-- .../dist/mcp/tools/memesh-metrics.js.map | 2 +- .claude-plugin/memesh/package.json | 1 + .../scripts/hooks/__tests__/hooks.test.js | 58 +++++++++---- .../memesh/scripts/hooks/hook-utils.js | 31 +++++-- .../memesh/scripts/hooks/post-tool-use.js | 13 +-- .../memesh/scripts/hooks/session-start.js | 30 ++++--- .claude-plugin/memesh/scripts/hooks/stop.js | 4 +- .../memesh/scripts/postinstall-new.js | 87 +++++++++++++++++++ scripts/hooks/__tests__/hooks.test.js | 58 +++++++++---- scripts/hooks/hook-utils.js | 31 +++++-- scripts/hooks/post-tool-use.js | 13 +-- scripts/hooks/session-start.js | 30 ++++--- scripts/hooks/stop.js | 4 +- src/mcp/ToolDefinitions.ts | 2 +- src/mcp/schemas/OutputSchemas.ts | 57 ++++-------- src/mcp/tools/memesh-metrics.ts | 20 +++-- tests/unit/output-schema-validation.test.ts | 74 ++++++---------- 25 files changed, 355 insertions(+), 284 deletions(-) diff --git a/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js b/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js index 0817c402..2b7f3418 100644 --- a/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js +++ b/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js @@ -55,7 +55,7 @@ Examples: outputSchema: OutputSchemas.buddyDo, annotations: { title: 'Smart Task Analyzer', - readOnlyHint: true, + readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true, diff --git a/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js.map b/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js.map index 20550c1a..3307017a 100644 --- a/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js.map +++ b/.claude-plugin/memesh/dist/mcp/ToolDefinitions.js.map @@ -1 +1 @@ -{"version":3,"file":"ToolDefinitions.js","sourceRoot":"","sources":["../../src/mcp/ToolDefinitions.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ToolDefinitions.js","sourceRoot":"","sources":["../../src/mcp/ToolDefinitions.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.d.ts b/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.d.ts index 5377c357..129e08f4 100644 --- a/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.d.ts +++ b/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.d.ts @@ -2,47 +2,13 @@ export declare const OutputSchemas: { buddyDo: { type: "object"; properties: { - routing: { + message: { type: string; - properties: { - approved: { - type: string; - }; - message: { - type: string; - }; - capabilityFocus: { - type: string; - items: { - type: string; - }; - }; - complexity: { - type: string; - enum: string[]; - }; - estimatedTokens: { - type: string; - }; - estimatedCost: { - type: string; - }; - }; - required: string[]; + description: string; }; - enhancedPrompt: { + confirmationRequired: { type: string; - properties: { - systemPrompt: { - type: string; - }; - userPrompt: { - type: string; - }; - suggestedModel: { - type: string; - }; - }; + description: string; }; stats: { type: string; @@ -50,7 +16,10 @@ export declare const OutputSchemas: { durationMs: { type: string; }; - estimatedTokens: { + taskType: { + type: string; + }; + relatedContextCount: { type: string; }; }; @@ -402,22 +371,12 @@ export declare const OutputSchemas: { }; }; export type BuddyDoOutput = { - routing: { - approved: boolean; - message: string; - capabilityFocus?: string[]; - complexity?: 'simple' | 'medium' | 'complex'; - estimatedTokens?: number; - estimatedCost?: number; - }; - enhancedPrompt?: { - systemPrompt?: string; - userPrompt?: string; - suggestedModel?: string; - }; + message: string; + confirmationRequired: boolean; stats?: { durationMs?: number; - estimatedTokens?: number; + taskType?: string; + relatedContextCount?: number; }; }; export type BuddyRememberOutput = { diff --git a/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.d.ts.map b/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.d.ts.map index 1dbefcac..be70518c 100644 --- a/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.d.ts.map +++ b/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"OutputSchemas.d.ts","sourceRoot":"","sources":["../../../src/mcp/schemas/OutputSchemas.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"OutputSchemas.d.ts","sourceRoot":"","sources":["../../../src/mcp/schemas/OutputSchemas.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgQzB,CAAC;AASF,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,KAAK,CAAC,EAAE;QACN,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,KAAK,CAAC;QACf,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC,CAAC;CACJ,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE;QACT,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC;QACf,gBAAgB,EAAE,MAAM,CAAC;QACzB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;CACJ,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.js b/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.js index 253181ea..d7466e83 100644 --- a/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.js +++ b/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.js @@ -2,41 +2,24 @@ export const OutputSchemas = { buddyDo: { type: 'object', properties: { - routing: { - type: 'object', - properties: { - approved: { type: 'boolean' }, - message: { type: 'string' }, - capabilityFocus: { - type: 'array', - items: { type: 'string' }, - }, - complexity: { - type: 'string', - enum: ['simple', 'medium', 'complex'], - }, - estimatedTokens: { type: 'number' }, - estimatedCost: { type: 'number' }, - }, - required: ['approved', 'message'], + message: { + type: 'string', + description: 'Formatted task proposal with analysis, approach, and related context', }, - enhancedPrompt: { - type: 'object', - properties: { - systemPrompt: { type: 'string' }, - userPrompt: { type: 'string' }, - suggestedModel: { type: 'string' }, - }, + confirmationRequired: { + type: 'boolean', + description: 'Whether user confirmation is needed before proceeding', }, stats: { type: 'object', properties: { durationMs: { type: 'number' }, - estimatedTokens: { type: 'number' }, + taskType: { type: 'string' }, + relatedContextCount: { type: 'number' }, }, }, }, - required: ['routing'], + required: ['message', 'confirmationRequired'], }, buddyRemember: { type: 'object', diff --git a/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.js.map b/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.js.map index bd770c5e..3f33ab8e 100644 --- a/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.js.map +++ b/.claude-plugin/memesh/dist/mcp/schemas/OutputSchemas.js.map @@ -1 +1 @@ -{"version":3,"file":"OutputSchemas.js","sourceRoot":"","sources":["../../../src/mcp/schemas/OutputSchemas.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"OutputSchemas.js","sourceRoot":"","sources":["../../../src/mcp/schemas/OutputSchemas.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.d.ts.map b/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.d.ts.map index d9cb11ab..96379644 100644 --- a/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.d.ts.map +++ b/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"memesh-metrics.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/memesh-metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAKpE,eAAO,MAAM,wBAAwB;;;;;;;iBAMnC,CAAC;AAEH,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAqCnF,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,2BAA2B,GACjC,OAAO,CAAC,cAAc,CAAC,CAuIzB"} \ No newline at end of file +{"version":3,"file":"memesh-metrics.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/memesh-metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAKpE,eAAO,MAAM,wBAAwB;;;;;;;iBAMnC,CAAC;AAEH,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AA0CnF,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,2BAA2B,GACjC,OAAO,CAAC,cAAc,CAAC,CAsIzB"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.js b/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.js index 870f41b9..63175755 100644 --- a/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.js +++ b/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.js @@ -10,11 +10,12 @@ export const MemeshMetricsInputSchema = z.object({ .describe('Which metrics section to return'), }); const HOME_DIR = process.env.HOME || process.env.USERPROFILE || '/tmp'; -const STATE_DIR = path.join(HOME_DIR, '.memesh'); -const CURRENT_SESSION_FILE = path.join(STATE_DIR, 'current-session.json'); -const ROUTING_CONFIG_FILE = path.join(STATE_DIR, 'routing-config.json'); -const ROUTING_AUDIT_LOG = path.join(STATE_DIR, 'routing-audit.log'); -const LAST_SESSION_CACHE = path.join(STATE_DIR, 'last-session-summary.json'); +const HOOK_STATE_DIR = path.join(HOME_DIR, '.claude', 'state'); +const CURRENT_SESSION_FILE = path.join(HOOK_STATE_DIR, 'current-session.json'); +const LAST_SESSION_CACHE = path.join(HOOK_STATE_DIR, 'last-session-summary.json'); +const MEMESH_DIR = path.join(HOME_DIR, '.memesh'); +const ROUTING_CONFIG_FILE = path.join(MEMESH_DIR, 'routing-config.json'); +const ROUTING_AUDIT_LOG = path.join(MEMESH_DIR, 'routing-audit.log'); function readJSONSafe(filePath) { try { if (fs.existsSync(filePath)) { @@ -79,7 +80,7 @@ export async function handleMemeshMetrics(input) { }; } if (section === 'all' || section === 'memory') { - const dbPath = path.join(STATE_DIR, 'knowledge-graph.db'); + const dbPath = path.join(MEMESH_DIR, 'knowledge-graph.db'); const dbExists = fs.existsSync(dbPath); let dbSizeKB = 0; if (dbExists) { @@ -93,7 +94,6 @@ export async function handleMemeshMetrics(input) { result.memory = { knowledgeGraphExists: dbExists, dbSizeKB, - stateDir: STATE_DIR, }; } const lines = ['MeMesh Metrics', '']; diff --git a/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.js.map b/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.js.map index b9242229..1d4a6c61 100644 --- a/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.js.map +++ b/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.js.map @@ -1 +1 @@ -{"version":3,"file":"memesh-metrics.js","sourceRoot":"","sources":["../../../src/mcp/tools/memesh-metrics.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"memesh-metrics.js","sourceRoot":"","sources":["../../../src/mcp/tools/memesh-metrics.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/package.json b/.claude-plugin/memesh/package.json index c50288e6..a6554025 100644 --- a/.claude-plugin/memesh/package.json +++ b/.claude-plugin/memesh/package.json @@ -11,6 +11,7 @@ "dist/", "scripts/postinstall-new.js", "scripts/postinstall-lib.js", + "scripts/skills/", "plugin.json", "mcp.json", "README.md", diff --git a/.claude-plugin/memesh/scripts/hooks/__tests__/hooks.test.js b/.claude-plugin/memesh/scripts/hooks/__tests__/hooks.test.js index ce271685..9740a82f 100644 --- a/.claude-plugin/memesh/scripts/hooks/__tests__/hooks.test.js +++ b/.claude-plugin/memesh/scripts/hooks/__tests__/hooks.test.js @@ -14,19 +14,19 @@ import { runHook, assertHookResponse, assertSilent, runTests } from './hook-test const preToolUseTests = [ { - name: 'Git commit without review triggers reminder', + name: 'Git commit without review triggers reminder or silent exit', fn: async () => { const result = await runHook('pre-tool-use.js', { tool_name: 'Bash', tool_input: { command: 'git commit -m "test commit"' }, }); // Should produce JSON output with review reminder - // (may exit silently if session state has codeReviewDone=true from prior test) + // OR exit silently if codeReviewDone=true from prior test if (result.parsed) { return assertHookResponse(result, 'PreToolUse'); } - // Silent exit is also acceptable (review already done or no session file) - return true; + // Silent exit is acceptable (review already done or no session file) + return assertSilent(result); }, }, { @@ -74,16 +74,23 @@ const preToolUseTests = [ const smartRouterTests = [ { - name: 'Task(Explore) gets model routing (haiku)', + name: 'Task(Explore) gets model routing or silent exit', fn: async () => { const result = await runHook('pre-tool-use.js', { tool_name: 'Task', tool_input: { subagent_type: 'Explore', prompt: 'find auth code' }, }); - if (!result.parsed) return true; // No config = no routing, acceptable + // Either: hook produces routing output with haiku, or exits silently (no config) + if (!result.parsed) { + return assertSilent(result); // No output = no config, valid + } const output = result.parsed?.hookSpecificOutput; - if (output?.updatedInput?.model === 'haiku') return true; - // If no routing applied (config not matching), still OK + if (!output) return false; // Parsed but no hookSpecificOutput = malformed + // If routing was applied, model should be haiku + if (output.updatedInput?.model) { + return output.updatedInput.model === 'haiku'; + } + // Output present but no model routing = other handler fired, OK return true; }, }, @@ -95,10 +102,11 @@ const smartRouterTests = [ tool_input: { subagent_type: 'Explore', model: 'opus', prompt: 'deep analysis' }, }); // Should NOT override user's explicit model - if (result.parsed?.hookSpecificOutput?.updatedInput?.model === 'opus') { - // Model was echoed back — wrong, should not override + if (result.parsed?.hookSpecificOutput?.updatedInput?.model) { + // Any model override when user specified 'opus' is wrong return false; } + // No model override = correct behavior return true; }, }, @@ -109,14 +117,21 @@ const smartRouterTests = [ tool_name: 'Task', tool_input: { subagent_type: 'Plan', prompt: 'plan the auth refactor' }, }); - if (!result.parsed) return true; // Template file might not be found + if (!result.parsed) { + // No output = template file not found. Acceptable but log it. + return assertSilent(result); + } const output = result.parsed?.hookSpecificOutput; - // Check that prompt was modified (template appended) - if (output?.updatedInput?.prompt) { - return output.updatedInput.prompt.includes('Required Plan Sections') || - output.updatedInput.prompt.includes('plan the auth refactor'); + if (!output) return false; // Parsed but no hookSpecificOutput = malformed + // Prompt should contain original + template content + if (output.updatedInput?.prompt) { + const prompt = output.updatedInput.prompt; + // Must contain original prompt AND some template content + return prompt.includes('plan the auth refactor') && + (prompt.includes('Required Plan Sections') || prompt.includes('---')); } - return true; + // No prompt modification = handler didn't fire, unexpected + return false; }, }, { @@ -126,12 +141,17 @@ const smartRouterTests = [ tool_name: 'EnterPlanMode', tool_input: {}, }); - if (!result.parsed) return true; + if (!result.parsed) { + // No output = template file not found. Acceptable. + return assertSilent(result); + } const output = result.parsed?.hookSpecificOutput; - if (output?.additionalContext) { + if (!output) return false; // Parsed but no hookSpecificOutput = malformed + if (output.additionalContext) { return output.additionalContext.includes('PLANNING MODE'); } - return true; + // hookSpecificOutput without additionalContext = wrong handler response + return false; }, }, { diff --git a/.claude-plugin/memesh/scripts/hooks/hook-utils.js b/.claude-plugin/memesh/scripts/hooks/hook-utils.js index 54f1cb7a..d7adb140 100644 --- a/.claude-plugin/memesh/scripts/hooks/hook-utils.js +++ b/.claude-plugin/memesh/scripts/hooks/hook-utils.js @@ -168,15 +168,24 @@ export function logMemorySave(message) { // ============================================================================ /** - * Escape a value for safe SQL string interpolation + * Escape a value for safe SQL string interpolation. + * Numbers are returned unquoted; strings are quoted with single-quote escaping. * @param {*} value - Value to escape - * @returns {string} Escaped SQL string literal + * @returns {string} Escaped SQL literal */ export function escapeSQL(value) { if (value === null || value === undefined) { return 'NULL'; } - // Escape single quotes by doubling them + // Numbers don't need quoting in SQL + if (typeof value === 'number' && Number.isFinite(value)) { + return String(value); + } + // Booleans as integers + if (typeof value === 'boolean') { + return value ? '1' : '0'; + } + // Everything else: coerce to string and escape single quotes return `'${String(value).replace(/'/g, "''")}'`; } @@ -400,9 +409,11 @@ export function sqliteBatch(dbPath, statements, options = {}) { batchSQL.push('COMMIT;'); - const result = execFileSync('sqlite3', [dbPath, batchSQL.join('\n')], { + // Pipe SQL via stdin to avoid E2BIG on large batches + const result = execFileSync('sqlite3', [dbPath], { encoding: 'utf-8', timeout, + input: batchSQL.join('\n'), }); if (result.trim()) { output += result.trim() + '\n'; @@ -417,15 +428,19 @@ export function sqliteBatch(dbPath, statements, options = {}) { } /** - * Insert entity + observations + tags in a single batch. + * Insert entity + observations + tags in minimal spawns. * Common pattern used by post-commit and stop hooks. * - * Uses a two-step approach: first INSERT entity and get ID, - * then batch all observations and tags. + * Uses a three-step approach: + * 1. INSERT entity (1 spawn) + * 2. SELECT entity ID (1 spawn) + * 3. Batch INSERT all observations + tags (1 spawn) + * + * Total: 3 spawns (was N+2 before batching). * * @param {string} dbPath - Path to SQLite database * @param {Object} entity - Entity to insert - * @param {string} entity.name - Entity name + * @param {string} entity.name - Entity name (must be unique) * @param {string} entity.type - Entity type * @param {string} entity.metadata - JSON metadata string * @param {Array} observations - Observation content strings diff --git a/.claude-plugin/memesh/scripts/hooks/post-tool-use.js b/.claude-plugin/memesh/scripts/hooks/post-tool-use.js index ecb6bdcf..7ebc771a 100755 --- a/.claude-plugin/memesh/scripts/hooks/post-tool-use.js +++ b/.claude-plugin/memesh/scripts/hooks/post-tool-use.js @@ -329,9 +329,10 @@ function updateCurrentSession(toolData, patterns, anomalies) { }); // Async write — session file is read on next call, eventual consistency is fine - writeJSONFileAsync(CURRENT_SESSION_FILE, currentSession); + // Return promise so caller can track it in pendingWrites + const writePromise = writeJSONFileAsync(CURRENT_SESSION_FILE, currentSession); - return currentSession; + return { session: currentSession, writePromise }; } /** @@ -435,7 +436,7 @@ function extractKeyPoints(sessionState) { /** * Save conversation key points to MeMesh knowledge graph. - * Uses sqliteBatchEntity for performance (2 spawns instead of N). + * Uses sqliteBatchEntity for performance (3 spawns instead of N). * @param {Object} sessionState - Current session state * @param {Object} sessionContext - Session context * @returns {boolean} True if saved successfully @@ -705,7 +706,9 @@ async function postToolUse() { } // Update current session (async write) - const updatedSession = updateCurrentSession(toolData, patterns, anomalies); + const { session: updatedSession, writePromise: sessionWritePromise } = + updateCurrentSession(toolData, patterns, anomalies); + pendingWrites.push(sessionWritePromise); // Check token threshold and save key points if needed checkAndSaveKeyPoints(updatedSession, sessionContext); @@ -717,7 +720,7 @@ async function postToolUse() { process.exit(0); } catch (error) { logError('PostToolUse', error); - process.exit(1); + process.exit(0); // Never block Claude Code on hook errors } } diff --git a/.claude-plugin/memesh/scripts/hooks/session-start.js b/.claude-plugin/memesh/scripts/hooks/session-start.js index cc575918..c890b4d6 100755 --- a/.claude-plugin/memesh/scripts/hooks/session-start.js +++ b/.claude-plugin/memesh/scripts/hooks/session-start.js @@ -22,6 +22,7 @@ import { readJSONFile, writeJSONFile, sqliteQuery, + sqliteQueryJSON, getTimeAgo, logError, } from './hook-utils.js'; @@ -224,31 +225,34 @@ function recallFromSQLite() { LIMIT 1 `.replace(/\n/g, ' '); - const entityResult = sqliteQuery( + // Use JSON mode to avoid pipe-split issues with | in metadata + const entityRows = sqliteQueryJSON( MEMESH_DB_PATH, query, ['session_keypoint', cutoffISO] ); - if (!entityResult) { + if (!entityRows || entityRows.length === 0) { return null; } - const parts = entityResult.split('|'); - if (parts.length < 4) { - return null; - } - - const [entityId, entityName, metadata, createdAt] = parts; + const row = entityRows[0]; + const entityId = row.id; + const entityName = row.name; + const createdAt = row.created_at; - const obsQuery = 'SELECT content FROM observations WHERE entity_id = ? ORDER BY created_at ASC'; - const obsResult = sqliteQuery(MEMESH_DB_PATH, obsQuery, [entityId]); + // Observations also use JSON mode for safety + const obsRows = sqliteQueryJSON( + MEMESH_DB_PATH, + 'SELECT content FROM observations WHERE entity_id = ? ORDER BY created_at ASC', + [entityId] + ); - const keyPoints = obsResult ? obsResult.split('\n').filter(Boolean) : []; + const keyPoints = obsRows.map(r => r.content).filter(Boolean); let parsedMetadata = {}; try { - parsedMetadata = JSON.parse(metadata || '{}'); + parsedMetadata = JSON.parse(row.metadata || '{}'); } catch { // Ignore parse errors } @@ -489,5 +493,5 @@ try { sessionStart(); } catch (error) { console.error('❌ SessionStart hook error:', error.message); - process.exit(1); + process.exit(0); // Never block Claude Code on hook errors } diff --git a/.claude-plugin/memesh/scripts/hooks/stop.js b/.claude-plugin/memesh/scripts/hooks/stop.js index 86325a95..c78268ac 100755 --- a/.claude-plugin/memesh/scripts/hooks/stop.js +++ b/.claude-plugin/memesh/scripts/hooks/stop.js @@ -396,7 +396,7 @@ function extractSessionKeyPoints(sessionState, patterns) { /** * Save session key points to MeMesh on session end. - * Uses sqliteBatchEntity for performance (2 spawns instead of N). + * Uses sqliteBatchEntity for performance (3 spawns instead of N). * @param {Object} sessionState - Current session state * @param {Array} patterns - Analyzed patterns * @returns {boolean} True if saved successfully @@ -669,5 +669,5 @@ try { stopHook(); } catch (error) { console.error('❌ Stop hook error:', error.message); - process.exit(1); + process.exit(0); // Never block Claude Code on hook errors } diff --git a/.claude-plugin/memesh/scripts/postinstall-new.js b/.claude-plugin/memesh/scripts/postinstall-new.js index 0d1c53df..c221e335 100644 --- a/.claude-plugin/memesh/scripts/postinstall-new.js +++ b/.claude-plugin/memesh/scripts/postinstall-new.js @@ -16,6 +16,7 @@ import { fileURLToPath } from 'url'; import { dirname, join } from 'path'; import { homedir } from 'os'; +import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, statSync } from 'fs'; import chalk from 'chalk'; import boxen from 'boxen'; @@ -34,6 +35,73 @@ import { detectAndFixLegacyInstall } from './postinstall-lib.js'; +// ============================================================================ +// Bundled Skills Installation +// ============================================================================ + +/** + * Install bundled skills to ~/.claude/skills/sa:/ + * Skills are shipped in scripts/skills//SKILL.md + * Only installs if skill doesn't exist or bundled version is newer. + * + * @param {string} claudeDir - Path to ~/.claude + * @returns {{ installed: string[], skipped: string[], errors: string[] }} + */ +function installBundledSkills(claudeDir) { + const result = { installed: [], skipped: [], errors: [] }; + const bundledDir = join(__dirname, 'skills'); + const skillsDir = join(claudeDir, 'skills'); + + if (!existsSync(bundledDir)) { + return result; + } + + // Ensure skills directory exists + mkdirSync(skillsDir, { recursive: true }); + + // Read all bundled skills + let entries; + try { + entries = readdirSync(bundledDir, { withFileTypes: true }); + } catch { + return result; + } + + for (const entry of entries) { + if (!entry.isDirectory()) continue; + + const skillName = entry.name; + const prefixedName = `sa:${skillName}`; + const sourceFile = join(bundledDir, skillName, 'SKILL.md'); + const targetDir = join(skillsDir, prefixedName); + const targetFile = join(targetDir, 'SKILL.md'); + + if (!existsSync(sourceFile)) continue; + + try { + // Skip if target exists and is newer than source + if (existsSync(targetFile)) { + const sourceStat = statSync(sourceFile); + const targetStat = statSync(targetFile); + if (targetStat.mtimeMs >= sourceStat.mtimeMs) { + result.skipped.push(skillName); + continue; + } + } + + // Install: create dir + copy SKILL.md + mkdirSync(targetDir, { recursive: true }); + const content = readFileSync(sourceFile, 'utf-8'); + writeFileSync(targetFile, content, 'utf-8'); + result.installed.push(skillName); + } catch (error) { + result.errors.push(`${skillName}: ${error.message}`); + } + } + + return result; +} + // ============================================================================ // Main Installation Flow // ============================================================================ @@ -120,6 +188,25 @@ async function main() { console.log(chalk.dim(' ℹ️ Legacy check skipped')); } + // Step 7: Install Bundled Skills + try { + const skillResult = installBundledSkills(claudeDir); + results.skillsInstalled = skillResult.installed; + results.skillsSkipped = skillResult.skipped; + + if (skillResult.installed.length > 0) { + console.log(chalk.green(` ✅ Skills installed: ${skillResult.installed.join(', ')}`)); + } else if (skillResult.skipped.length > 0) { + console.log(chalk.dim(` ℹ️ Skills up to date (${skillResult.skipped.length} already installed)`)); + } + + if (skillResult.errors.length > 0) { + results.errors.push(`Skills: ${skillResult.errors.join('; ')}`); + } + } catch (error) { + console.log(chalk.dim(' ℹ️ Skills installation skipped')); + } + } catch (error) { console.error(chalk.red('\n❌ Installation failed:'), error.message); console.error(chalk.yellow('\n💡 You can configure manually (see instructions below)\n')); diff --git a/scripts/hooks/__tests__/hooks.test.js b/scripts/hooks/__tests__/hooks.test.js index ce271685..9740a82f 100644 --- a/scripts/hooks/__tests__/hooks.test.js +++ b/scripts/hooks/__tests__/hooks.test.js @@ -14,19 +14,19 @@ import { runHook, assertHookResponse, assertSilent, runTests } from './hook-test const preToolUseTests = [ { - name: 'Git commit without review triggers reminder', + name: 'Git commit without review triggers reminder or silent exit', fn: async () => { const result = await runHook('pre-tool-use.js', { tool_name: 'Bash', tool_input: { command: 'git commit -m "test commit"' }, }); // Should produce JSON output with review reminder - // (may exit silently if session state has codeReviewDone=true from prior test) + // OR exit silently if codeReviewDone=true from prior test if (result.parsed) { return assertHookResponse(result, 'PreToolUse'); } - // Silent exit is also acceptable (review already done or no session file) - return true; + // Silent exit is acceptable (review already done or no session file) + return assertSilent(result); }, }, { @@ -74,16 +74,23 @@ const preToolUseTests = [ const smartRouterTests = [ { - name: 'Task(Explore) gets model routing (haiku)', + name: 'Task(Explore) gets model routing or silent exit', fn: async () => { const result = await runHook('pre-tool-use.js', { tool_name: 'Task', tool_input: { subagent_type: 'Explore', prompt: 'find auth code' }, }); - if (!result.parsed) return true; // No config = no routing, acceptable + // Either: hook produces routing output with haiku, or exits silently (no config) + if (!result.parsed) { + return assertSilent(result); // No output = no config, valid + } const output = result.parsed?.hookSpecificOutput; - if (output?.updatedInput?.model === 'haiku') return true; - // If no routing applied (config not matching), still OK + if (!output) return false; // Parsed but no hookSpecificOutput = malformed + // If routing was applied, model should be haiku + if (output.updatedInput?.model) { + return output.updatedInput.model === 'haiku'; + } + // Output present but no model routing = other handler fired, OK return true; }, }, @@ -95,10 +102,11 @@ const smartRouterTests = [ tool_input: { subagent_type: 'Explore', model: 'opus', prompt: 'deep analysis' }, }); // Should NOT override user's explicit model - if (result.parsed?.hookSpecificOutput?.updatedInput?.model === 'opus') { - // Model was echoed back — wrong, should not override + if (result.parsed?.hookSpecificOutput?.updatedInput?.model) { + // Any model override when user specified 'opus' is wrong return false; } + // No model override = correct behavior return true; }, }, @@ -109,14 +117,21 @@ const smartRouterTests = [ tool_name: 'Task', tool_input: { subagent_type: 'Plan', prompt: 'plan the auth refactor' }, }); - if (!result.parsed) return true; // Template file might not be found + if (!result.parsed) { + // No output = template file not found. Acceptable but log it. + return assertSilent(result); + } const output = result.parsed?.hookSpecificOutput; - // Check that prompt was modified (template appended) - if (output?.updatedInput?.prompt) { - return output.updatedInput.prompt.includes('Required Plan Sections') || - output.updatedInput.prompt.includes('plan the auth refactor'); + if (!output) return false; // Parsed but no hookSpecificOutput = malformed + // Prompt should contain original + template content + if (output.updatedInput?.prompt) { + const prompt = output.updatedInput.prompt; + // Must contain original prompt AND some template content + return prompt.includes('plan the auth refactor') && + (prompt.includes('Required Plan Sections') || prompt.includes('---')); } - return true; + // No prompt modification = handler didn't fire, unexpected + return false; }, }, { @@ -126,12 +141,17 @@ const smartRouterTests = [ tool_name: 'EnterPlanMode', tool_input: {}, }); - if (!result.parsed) return true; + if (!result.parsed) { + // No output = template file not found. Acceptable. + return assertSilent(result); + } const output = result.parsed?.hookSpecificOutput; - if (output?.additionalContext) { + if (!output) return false; // Parsed but no hookSpecificOutput = malformed + if (output.additionalContext) { return output.additionalContext.includes('PLANNING MODE'); } - return true; + // hookSpecificOutput without additionalContext = wrong handler response + return false; }, }, { diff --git a/scripts/hooks/hook-utils.js b/scripts/hooks/hook-utils.js index 54f1cb7a..d7adb140 100644 --- a/scripts/hooks/hook-utils.js +++ b/scripts/hooks/hook-utils.js @@ -168,15 +168,24 @@ export function logMemorySave(message) { // ============================================================================ /** - * Escape a value for safe SQL string interpolation + * Escape a value for safe SQL string interpolation. + * Numbers are returned unquoted; strings are quoted with single-quote escaping. * @param {*} value - Value to escape - * @returns {string} Escaped SQL string literal + * @returns {string} Escaped SQL literal */ export function escapeSQL(value) { if (value === null || value === undefined) { return 'NULL'; } - // Escape single quotes by doubling them + // Numbers don't need quoting in SQL + if (typeof value === 'number' && Number.isFinite(value)) { + return String(value); + } + // Booleans as integers + if (typeof value === 'boolean') { + return value ? '1' : '0'; + } + // Everything else: coerce to string and escape single quotes return `'${String(value).replace(/'/g, "''")}'`; } @@ -400,9 +409,11 @@ export function sqliteBatch(dbPath, statements, options = {}) { batchSQL.push('COMMIT;'); - const result = execFileSync('sqlite3', [dbPath, batchSQL.join('\n')], { + // Pipe SQL via stdin to avoid E2BIG on large batches + const result = execFileSync('sqlite3', [dbPath], { encoding: 'utf-8', timeout, + input: batchSQL.join('\n'), }); if (result.trim()) { output += result.trim() + '\n'; @@ -417,15 +428,19 @@ export function sqliteBatch(dbPath, statements, options = {}) { } /** - * Insert entity + observations + tags in a single batch. + * Insert entity + observations + tags in minimal spawns. * Common pattern used by post-commit and stop hooks. * - * Uses a two-step approach: first INSERT entity and get ID, - * then batch all observations and tags. + * Uses a three-step approach: + * 1. INSERT entity (1 spawn) + * 2. SELECT entity ID (1 spawn) + * 3. Batch INSERT all observations + tags (1 spawn) + * + * Total: 3 spawns (was N+2 before batching). * * @param {string} dbPath - Path to SQLite database * @param {Object} entity - Entity to insert - * @param {string} entity.name - Entity name + * @param {string} entity.name - Entity name (must be unique) * @param {string} entity.type - Entity type * @param {string} entity.metadata - JSON metadata string * @param {Array} observations - Observation content strings diff --git a/scripts/hooks/post-tool-use.js b/scripts/hooks/post-tool-use.js index ecb6bdcf..7ebc771a 100755 --- a/scripts/hooks/post-tool-use.js +++ b/scripts/hooks/post-tool-use.js @@ -329,9 +329,10 @@ function updateCurrentSession(toolData, patterns, anomalies) { }); // Async write — session file is read on next call, eventual consistency is fine - writeJSONFileAsync(CURRENT_SESSION_FILE, currentSession); + // Return promise so caller can track it in pendingWrites + const writePromise = writeJSONFileAsync(CURRENT_SESSION_FILE, currentSession); - return currentSession; + return { session: currentSession, writePromise }; } /** @@ -435,7 +436,7 @@ function extractKeyPoints(sessionState) { /** * Save conversation key points to MeMesh knowledge graph. - * Uses sqliteBatchEntity for performance (2 spawns instead of N). + * Uses sqliteBatchEntity for performance (3 spawns instead of N). * @param {Object} sessionState - Current session state * @param {Object} sessionContext - Session context * @returns {boolean} True if saved successfully @@ -705,7 +706,9 @@ async function postToolUse() { } // Update current session (async write) - const updatedSession = updateCurrentSession(toolData, patterns, anomalies); + const { session: updatedSession, writePromise: sessionWritePromise } = + updateCurrentSession(toolData, patterns, anomalies); + pendingWrites.push(sessionWritePromise); // Check token threshold and save key points if needed checkAndSaveKeyPoints(updatedSession, sessionContext); @@ -717,7 +720,7 @@ async function postToolUse() { process.exit(0); } catch (error) { logError('PostToolUse', error); - process.exit(1); + process.exit(0); // Never block Claude Code on hook errors } } diff --git a/scripts/hooks/session-start.js b/scripts/hooks/session-start.js index cc575918..c890b4d6 100755 --- a/scripts/hooks/session-start.js +++ b/scripts/hooks/session-start.js @@ -22,6 +22,7 @@ import { readJSONFile, writeJSONFile, sqliteQuery, + sqliteQueryJSON, getTimeAgo, logError, } from './hook-utils.js'; @@ -224,31 +225,34 @@ function recallFromSQLite() { LIMIT 1 `.replace(/\n/g, ' '); - const entityResult = sqliteQuery( + // Use JSON mode to avoid pipe-split issues with | in metadata + const entityRows = sqliteQueryJSON( MEMESH_DB_PATH, query, ['session_keypoint', cutoffISO] ); - if (!entityResult) { + if (!entityRows || entityRows.length === 0) { return null; } - const parts = entityResult.split('|'); - if (parts.length < 4) { - return null; - } - - const [entityId, entityName, metadata, createdAt] = parts; + const row = entityRows[0]; + const entityId = row.id; + const entityName = row.name; + const createdAt = row.created_at; - const obsQuery = 'SELECT content FROM observations WHERE entity_id = ? ORDER BY created_at ASC'; - const obsResult = sqliteQuery(MEMESH_DB_PATH, obsQuery, [entityId]); + // Observations also use JSON mode for safety + const obsRows = sqliteQueryJSON( + MEMESH_DB_PATH, + 'SELECT content FROM observations WHERE entity_id = ? ORDER BY created_at ASC', + [entityId] + ); - const keyPoints = obsResult ? obsResult.split('\n').filter(Boolean) : []; + const keyPoints = obsRows.map(r => r.content).filter(Boolean); let parsedMetadata = {}; try { - parsedMetadata = JSON.parse(metadata || '{}'); + parsedMetadata = JSON.parse(row.metadata || '{}'); } catch { // Ignore parse errors } @@ -489,5 +493,5 @@ try { sessionStart(); } catch (error) { console.error('❌ SessionStart hook error:', error.message); - process.exit(1); + process.exit(0); // Never block Claude Code on hook errors } diff --git a/scripts/hooks/stop.js b/scripts/hooks/stop.js index 86325a95..c78268ac 100755 --- a/scripts/hooks/stop.js +++ b/scripts/hooks/stop.js @@ -396,7 +396,7 @@ function extractSessionKeyPoints(sessionState, patterns) { /** * Save session key points to MeMesh on session end. - * Uses sqliteBatchEntity for performance (2 spawns instead of N). + * Uses sqliteBatchEntity for performance (3 spawns instead of N). * @param {Object} sessionState - Current session state * @param {Array} patterns - Analyzed patterns * @returns {boolean} True if saved successfully @@ -669,5 +669,5 @@ try { stopHook(); } catch (error) { console.error('❌ Stop hook error:', error.message); - process.exit(1); + process.exit(0); // Never block Claude Code on hook errors } diff --git a/src/mcp/ToolDefinitions.ts b/src/mcp/ToolDefinitions.ts index b39a7ee2..2f9718fd 100644 --- a/src/mcp/ToolDefinitions.ts +++ b/src/mcp/ToolDefinitions.ts @@ -100,7 +100,7 @@ Examples: outputSchema: OutputSchemas.buddyDo, annotations: { title: 'Smart Task Analyzer', - readOnlyHint: true, // Returns proposal only, does not execute + readOnlyHint: false, // Records task start via autoTracker destructiveHint: false, idempotentHint: false, // Results may vary based on KG context openWorldHint: true, diff --git a/src/mcp/schemas/OutputSchemas.ts b/src/mcp/schemas/OutputSchemas.ts index 476ad0ac..deb1b095 100644 --- a/src/mcp/schemas/OutputSchemas.ts +++ b/src/mcp/schemas/OutputSchemas.ts @@ -26,45 +26,32 @@ export const OutputSchemas = { /** * buddy-do output structure + * + * Returns a formatted text proposal with task analysis, type detection, + * related KG context, and recommended approach. The output is structured + * as formatted text content for user review before execution. */ buddyDo: { type: 'object' as const, properties: { - routing: { - type: 'object', - properties: { - approved: { type: 'boolean' }, - message: { type: 'string' }, - capabilityFocus: { - type: 'array', - items: { type: 'string' }, - }, - complexity: { - type: 'string', - enum: ['simple', 'medium', 'complex'], - }, - estimatedTokens: { type: 'number' }, - estimatedCost: { type: 'number' }, - }, - required: ['approved', 'message'], + message: { + type: 'string', + description: 'Formatted task proposal with analysis, approach, and related context', }, - enhancedPrompt: { - type: 'object', - properties: { - systemPrompt: { type: 'string' }, - userPrompt: { type: 'string' }, - suggestedModel: { type: 'string' }, - }, + confirmationRequired: { + type: 'boolean', + description: 'Whether user confirmation is needed before proceeding', }, stats: { type: 'object', properties: { durationMs: { type: 'number' }, - estimatedTokens: { type: 'number' }, + taskType: { type: 'string' }, + relatedContextCount: { type: 'number' }, }, }, }, - required: ['routing'], + required: ['message', 'confirmationRequired'], }, /** @@ -302,22 +289,12 @@ export const OutputSchemas = { */ export type BuddyDoOutput = { - routing: { - approved: boolean; - message: string; - capabilityFocus?: string[]; - complexity?: 'simple' | 'medium' | 'complex'; - estimatedTokens?: number; - estimatedCost?: number; - }; - enhancedPrompt?: { - systemPrompt?: string; - userPrompt?: string; - suggestedModel?: string; - }; + message: string; + confirmationRequired: boolean; stats?: { durationMs?: number; - estimatedTokens?: number; + taskType?: string; + relatedContextCount?: number; }; }; diff --git a/src/mcp/tools/memesh-metrics.ts b/src/mcp/tools/memesh-metrics.ts index 4862cf9d..597da43c 100644 --- a/src/mcp/tools/memesh-metrics.ts +++ b/src/mcp/tools/memesh-metrics.ts @@ -15,11 +15,16 @@ export const MemeshMetricsInputSchema = z.object({ export type ValidatedMemeshMetricsInput = z.infer; const HOME_DIR = process.env.HOME || process.env.USERPROFILE || '/tmp'; -const STATE_DIR = path.join(HOME_DIR, '.memesh'); -const CURRENT_SESSION_FILE = path.join(STATE_DIR, 'current-session.json'); -const ROUTING_CONFIG_FILE = path.join(STATE_DIR, 'routing-config.json'); -const ROUTING_AUDIT_LOG = path.join(STATE_DIR, 'routing-audit.log'); -const LAST_SESSION_CACHE = path.join(STATE_DIR, 'last-session-summary.json'); + +// Session data is written by hooks to ~/.claude/state/ +const HOOK_STATE_DIR = path.join(HOME_DIR, '.claude', 'state'); +const CURRENT_SESSION_FILE = path.join(HOOK_STATE_DIR, 'current-session.json'); +const LAST_SESSION_CACHE = path.join(HOOK_STATE_DIR, 'last-session-summary.json'); + +// Routing config and audit log are written by pre-tool-use.js to ~/.memesh/ +const MEMESH_DIR = path.join(HOME_DIR, '.memesh'); +const ROUTING_CONFIG_FILE = path.join(MEMESH_DIR, 'routing-config.json'); +const ROUTING_AUDIT_LOG = path.join(MEMESH_DIR, 'routing-audit.log'); function readJSONSafe(filePath: string): Record | null { try { @@ -101,7 +106,7 @@ export async function handleMemeshMetrics( // Memory metrics if (section === 'all' || section === 'memory') { - const dbPath = path.join(STATE_DIR, 'knowledge-graph.db'); + const dbPath = path.join(MEMESH_DIR, 'knowledge-graph.db'); const dbExists = fs.existsSync(dbPath); let dbSizeKB = 0; @@ -110,14 +115,13 @@ export async function handleMemeshMetrics( const stat = fs.statSync(dbPath); dbSizeKB = Math.round(stat.size / 1024); } catch { - // Non-critical + // Non-critical — stat failure doesn't affect other metrics } } result.memory = { knowledgeGraphExists: dbExists, dbSizeKB, - stateDir: STATE_DIR, }; } diff --git a/tests/unit/output-schema-validation.test.ts b/tests/unit/output-schema-validation.test.ts index 58d97815..153735f3 100644 --- a/tests/unit/output-schema-validation.test.ts +++ b/tests/unit/output-schema-validation.test.ts @@ -61,22 +61,12 @@ describe('Output Schema Validation', () => { it('should validate correct buddy-do output', () => { const validOutput: BuddyDoOutput = { - routing: { - approved: true, - message: 'Task routed for capabilities: general', - capabilityFocus: ['general'], - complexity: 'simple', - estimatedTokens: 1000, - estimatedCost: 0.001, - }, - enhancedPrompt: { - systemPrompt: 'You are a helpful assistant', - userPrompt: 'Complete the task', - suggestedModel: 'claude-opus-4-5', - }, + message: 'Task: fix the auth bug\n\nType: bug-fix\nApproach: Reproduce → Root cause analysis → Fix → Regression test → Verify', + confirmationRequired: true, stats: { durationMs: 150, - estimatedTokens: 1000, + taskType: 'bug-fix', + relatedContextCount: 3, }, }; @@ -87,10 +77,8 @@ describe('Output Schema Validation', () => { it('should validate minimal buddy-do output', () => { const minimalOutput: BuddyDoOutput = { - routing: { - approved: false, - message: 'Task rejected', - }, + message: 'Task: hello world', + confirmationRequired: true, }; const result = validate(minimalOutput); @@ -100,10 +88,8 @@ describe('Output Schema Validation', () => { it('should reject buddy-do output missing required fields', () => { const invalidOutput = { - routing: { - approved: true, - // Missing 'message' (required) - }, + // Missing 'message' and 'confirmationRequired' (required) + stats: { durationMs: 100 }, }; const result = validate(invalidOutput); @@ -114,10 +100,8 @@ describe('Output Schema Validation', () => { it('should reject buddy-do output with invalid types', () => { const invalidOutput = { - routing: { - approved: 'yes', // Should be boolean - message: 'Task approved', - }, + message: 123, // Should be string + confirmationRequired: 'yes', // Should be boolean }; const result = validate(invalidOutput); @@ -125,18 +109,20 @@ describe('Output Schema Validation', () => { expect(validate.errors).toBeDefined(); }); - it('should reject buddy-do output with invalid enum values', () => { - const invalidOutput: Record = { - routing: { - approved: true, - message: 'Task approved', - complexity: 'super-complex', // Invalid enum value + it('should validate buddy-do output with optional stats', () => { + const outputWithStats: BuddyDoOutput = { + message: 'Task analyzed with context', + confirmationRequired: true, + stats: { + durationMs: 42, + taskType: 'feature', + relatedContextCount: 5, }, }; - const result = validate(invalidOutput); - expect(result).toBe(false); - expect(validate.errors).toBeDefined(); + const result = validate(outputWithStats); + expect(result).toBe(true); + expect(validate.errors).toBeNull(); }); }); @@ -347,22 +333,12 @@ describe('Output Schema Validation', () => { { type: 'text' as const, text: JSON.stringify({ - routing: { - approved: true, - message: 'Task routed for capabilities: general', - capabilityFocus: ['general'], - complexity: 'simple', - estimatedTokens: 1000, - estimatedCost: 0.001, - }, - enhancedPrompt: { - systemPrompt: 'You are a helpful assistant', - userPrompt: 'Complete the task', - suggestedModel: 'claude-opus-4-5', - }, + message: 'Task: setup authentication\n\nType: feature\nApproach: Plan → Design → Implement → Test → Review', + confirmationRequired: true, stats: { durationMs: 150, - estimatedTokens: 1000, + taskType: 'feature', + relatedContextCount: 2, }, }), }, From 2329194af7fb037f341d7146e07c3a4140124585 Mon Sep 17 00:00:00 2001 From: KT <677465+kevintseng@users.noreply.github.com> Date: Wed, 25 Feb 2026 14:04:54 +0800 Subject: [PATCH 20/23] fix: resolve MAJOR issues from second comprehensive code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 6 issues fixed: - post-tool-use: track updateSessionContext async write promise in pendingWrites - pre-tool-use: guard rule.subagentType against undefined (prevents TypeError on malformed config) - post-tool-use: fix path comparison from substring (.includes) to path-prefix (startsWith) - tests: add output schema validation for generateTests, cloudSync, agentRegister, memeshMetrics - tests: tighten compliance audit outputSchema tolerance from 7 to 0 - post-commit: fix doc comment "2 spawns" → "3 spawns" Test results: 1776/1776 pass, hook tests 15/15 pass, MCP compliance 100% Co-Authored-By: Claude Opus 4.6 --- .../memesh/scripts/hooks/post-commit.js | 2 +- .../memesh/scripts/hooks/post-tool-use.js | 20 ++- .../memesh/scripts/hooks/pre-tool-use.js | 2 + scripts/hooks/post-commit.js | 2 +- scripts/hooks/post-tool-use.js | 20 ++- scripts/hooks/pre-tool-use.js | 2 + tests/unit/mcp-compliance-audit.test.ts | 4 +- tests/unit/output-schema-validation.test.ts | 154 ++++++++++++++++++ 8 files changed, 186 insertions(+), 20 deletions(-) diff --git a/.claude-plugin/memesh/scripts/hooks/post-commit.js b/.claude-plugin/memesh/scripts/hooks/post-commit.js index 07d04368..55cb47cf 100644 --- a/.claude-plugin/memesh/scripts/hooks/post-commit.js +++ b/.claude-plugin/memesh/scripts/hooks/post-commit.js @@ -84,7 +84,7 @@ function getLatestCommitInfo() { /** * Save commit context to MeMesh knowledge graph. - * Uses sqliteBatchEntity for performance (2 spawns instead of 8+). + * Uses sqliteBatchEntity for performance (3 spawns instead of 8+). * @param {Object} commitInfo - Commit details * @returns {boolean} True if saved */ diff --git a/.claude-plugin/memesh/scripts/hooks/post-tool-use.js b/.claude-plugin/memesh/scripts/hooks/post-tool-use.js index 7ebc771a..837f7b17 100755 --- a/.claude-plugin/memesh/scripts/hooks/post-tool-use.js +++ b/.claude-plugin/memesh/scripts/hooks/post-tool-use.js @@ -338,7 +338,7 @@ function updateCurrentSession(toolData, patterns, anomalies) { /** * Update session context (quota tracking) * @param {Object} toolData - Tool execution data - * @returns {Object} Updated session context + * @returns {{ sessionContext: Object, writePromise: Promise }} */ function updateSessionContext(toolData) { const sessionContext = readJSONFile(SESSION_CONTEXT_FILE, { @@ -355,9 +355,9 @@ function updateSessionContext(toolData) { sessionContext.lastSessionDate = new Date().toISOString(); - writeJSONFileAsync(SESSION_CONTEXT_FILE, sessionContext); + const writePromise = writeJSONFileAsync(SESSION_CONTEXT_FILE, sessionContext); - return sessionContext; + return { sessionContext, writePromise }; } // ============================================================================ @@ -578,9 +578,13 @@ function trackTestExecutions(toolData, currentSession) { const testTarget = pathMatch ? pathMatch[1] : null; if (testTarget && currentSession.modifiedFiles) { - // Mark files under the test target directory as tested + // Mark files under the test target directory/path as tested + // Use path-prefix match: "src/auth" matches "src/auth/middleware.ts" but NOT "src/auth-utils/helper.ts" for (const modFile of currentSession.modifiedFiles) { - if (modFile.includes(testTarget) && !currentSession.testedFiles.includes(modFile)) { + const isMatch = modFile === testTarget || + modFile.startsWith(testTarget + '/') || + modFile.startsWith(testTarget + path.sep); + if (isMatch && !currentSession.testedFiles.includes(modFile)) { currentSession.testedFiles.push(modFile); } } @@ -691,14 +695,14 @@ async function postToolUse() { // Detect patterns const patterns = detector.detectPatterns(toolData); - // Update session context (for quota tracking) — returns sync data, writes async - const sessionContext = updateSessionContext(toolData); + // Update session context (for quota tracking) — returns sync data + async write promise + const { sessionContext, writePromise: contextWritePromise } = updateSessionContext(toolData); // Detect anomalies const anomalies = detectAnomalies(toolData, sessionContext); // Fire async writes in parallel - const pendingWrites = []; + const pendingWrites = [contextWritePromise]; // Update recommendations incrementally if (patterns.length > 0 || anomalies.length > 0) { diff --git a/.claude-plugin/memesh/scripts/hooks/pre-tool-use.js b/.claude-plugin/memesh/scripts/hooks/pre-tool-use.js index 3b42f763..c7235baf 100644 --- a/.claude-plugin/memesh/scripts/hooks/pre-tool-use.js +++ b/.claude-plugin/memesh/scripts/hooks/pre-tool-use.js @@ -246,6 +246,7 @@ function routingHandler(toolName, toolInput, _session, config) { // Model routing const modelRules = config.modelRouting?.rules || []; for (const rule of modelRules) { + if (!rule.subagentType) continue; if (subagentType.toLowerCase() === rule.subagentType.toLowerCase()) { // Never override user's explicit model choice if (toolInput.model) { @@ -262,6 +263,7 @@ function routingHandler(toolName, toolInput, _session, config) { // Background routing const bgRules = config.backgroundRules || []; for (const rule of bgRules) { + if (!rule.subagentType) continue; if (subagentType.toLowerCase() === rule.subagentType.toLowerCase()) { // Only force background if not explicitly set by user/Claude if (rule.forceBackground && toolInput.run_in_background === undefined) { diff --git a/scripts/hooks/post-commit.js b/scripts/hooks/post-commit.js index 07d04368..55cb47cf 100644 --- a/scripts/hooks/post-commit.js +++ b/scripts/hooks/post-commit.js @@ -84,7 +84,7 @@ function getLatestCommitInfo() { /** * Save commit context to MeMesh knowledge graph. - * Uses sqliteBatchEntity for performance (2 spawns instead of 8+). + * Uses sqliteBatchEntity for performance (3 spawns instead of 8+). * @param {Object} commitInfo - Commit details * @returns {boolean} True if saved */ diff --git a/scripts/hooks/post-tool-use.js b/scripts/hooks/post-tool-use.js index 7ebc771a..837f7b17 100755 --- a/scripts/hooks/post-tool-use.js +++ b/scripts/hooks/post-tool-use.js @@ -338,7 +338,7 @@ function updateCurrentSession(toolData, patterns, anomalies) { /** * Update session context (quota tracking) * @param {Object} toolData - Tool execution data - * @returns {Object} Updated session context + * @returns {{ sessionContext: Object, writePromise: Promise }} */ function updateSessionContext(toolData) { const sessionContext = readJSONFile(SESSION_CONTEXT_FILE, { @@ -355,9 +355,9 @@ function updateSessionContext(toolData) { sessionContext.lastSessionDate = new Date().toISOString(); - writeJSONFileAsync(SESSION_CONTEXT_FILE, sessionContext); + const writePromise = writeJSONFileAsync(SESSION_CONTEXT_FILE, sessionContext); - return sessionContext; + return { sessionContext, writePromise }; } // ============================================================================ @@ -578,9 +578,13 @@ function trackTestExecutions(toolData, currentSession) { const testTarget = pathMatch ? pathMatch[1] : null; if (testTarget && currentSession.modifiedFiles) { - // Mark files under the test target directory as tested + // Mark files under the test target directory/path as tested + // Use path-prefix match: "src/auth" matches "src/auth/middleware.ts" but NOT "src/auth-utils/helper.ts" for (const modFile of currentSession.modifiedFiles) { - if (modFile.includes(testTarget) && !currentSession.testedFiles.includes(modFile)) { + const isMatch = modFile === testTarget || + modFile.startsWith(testTarget + '/') || + modFile.startsWith(testTarget + path.sep); + if (isMatch && !currentSession.testedFiles.includes(modFile)) { currentSession.testedFiles.push(modFile); } } @@ -691,14 +695,14 @@ async function postToolUse() { // Detect patterns const patterns = detector.detectPatterns(toolData); - // Update session context (for quota tracking) — returns sync data, writes async - const sessionContext = updateSessionContext(toolData); + // Update session context (for quota tracking) — returns sync data + async write promise + const { sessionContext, writePromise: contextWritePromise } = updateSessionContext(toolData); // Detect anomalies const anomalies = detectAnomalies(toolData, sessionContext); // Fire async writes in parallel - const pendingWrites = []; + const pendingWrites = [contextWritePromise]; // Update recommendations incrementally if (patterns.length > 0 || anomalies.length > 0) { diff --git a/scripts/hooks/pre-tool-use.js b/scripts/hooks/pre-tool-use.js index 3b42f763..c7235baf 100644 --- a/scripts/hooks/pre-tool-use.js +++ b/scripts/hooks/pre-tool-use.js @@ -246,6 +246,7 @@ function routingHandler(toolName, toolInput, _session, config) { // Model routing const modelRules = config.modelRouting?.rules || []; for (const rule of modelRules) { + if (!rule.subagentType) continue; if (subagentType.toLowerCase() === rule.subagentType.toLowerCase()) { // Never override user's explicit model choice if (toolInput.model) { @@ -262,6 +263,7 @@ function routingHandler(toolName, toolInput, _session, config) { // Background routing const bgRules = config.backgroundRules || []; for (const rule of bgRules) { + if (!rule.subagentType) continue; if (subagentType.toLowerCase() === rule.subagentType.toLowerCase()) { // Only force background if not explicitly set by user/Claude if (rule.forceBackground && toolInput.run_in_background === undefined) { diff --git a/tests/unit/mcp-compliance-audit.test.ts b/tests/unit/mcp-compliance-audit.test.ts index 7a24e21c..d74638c1 100644 --- a/tests/unit/mcp-compliance-audit.test.ts +++ b/tests/unit/mcp-compliance-audit.test.ts @@ -41,8 +41,8 @@ describe('MCP Compliance Audit', () => { }); } - // Tools without outputSchema (some tools may not have it yet) - expect(toolsWithoutOutputSchema.length).toBeLessThanOrEqual(7); + // All tools must have outputSchema (MCP Spec 2025-11-25 compliance) + expect(toolsWithoutOutputSchema.length).toBe(0); }); it('should have all tools with annotations defined (MCP Spec 2025-11-25)', () => { diff --git a/tests/unit/output-schema-validation.test.ts b/tests/unit/output-schema-validation.test.ts index 153735f3..3757b0ba 100644 --- a/tests/unit/output-schema-validation.test.ts +++ b/tests/unit/output-schema-validation.test.ts @@ -293,6 +293,160 @@ describe('Output Schema Validation', () => { }); }); + describe('generate-tests Output Validation', () => { + const schema = OutputSchemas.generateTests; + let validate: ReturnType; + + beforeAll(() => { + validate = ajv.compile(schema); + }); + + it('should validate correct generate-tests output', () => { + const validOutput = { + testCode: 'describe("auth", () => { it("should validate token", () => { expect(true).toBe(true); }); });', + message: 'Generated 3 test cases for auth module', + }; + + const result = validate(validOutput); + expect(result).toBe(true); + expect(validate.errors).toBeNull(); + }); + + it('should reject generate-tests output missing required fields', () => { + const invalidOutput = { + message: 'Generated tests', + // Missing 'testCode' (required) + }; + + const result = validate(invalidOutput); + expect(result).toBe(false); + expect(validate.errors).toBeDefined(); + }); + }); + + describe('cloud-sync Output Validation', () => { + const schema = OutputSchemas.cloudSync; + let validate: ReturnType; + + beforeAll(() => { + validate = ajv.compile(schema); + }); + + it('should validate correct cloud-sync push output', () => { + const validOutput = { + success: true, + action: 'push', + message: 'Pushed 5 entities to cloud', + pushed: 5, + errors: 0, + }; + + const result = validate(validOutput); + expect(result).toBe(true); + expect(validate.errors).toBeNull(); + }); + + it('should validate minimal cloud-sync output', () => { + const validOutput = { + success: false, + }; + + const result = validate(validOutput); + expect(result).toBe(true); + expect(validate.errors).toBeNull(); + }); + + it('should reject cloud-sync output with invalid action enum', () => { + const invalidOutput = { + success: true, + action: 'delete', // Not in enum ['push', 'pull', 'status'] + }; + + const result = validate(invalidOutput); + expect(result).toBe(false); + expect(validate.errors).toBeDefined(); + }); + }); + + describe('agent-register Output Validation', () => { + const schema = OutputSchemas.agentRegister; + let validate: ReturnType; + + beforeAll(() => { + validate = ajv.compile(schema); + }); + + it('should validate correct agent-register output', () => { + const validOutput = { + success: true, + message: 'Agent registered successfully', + agent: { + id: 'agent-001', + type: 'worker', + status: 'active', + name: 'Code Reviewer', + version: '1.0.0', + }, + }; + + const result = validate(validOutput); + expect(result).toBe(true); + expect(validate.errors).toBeNull(); + }); + + it('should validate minimal agent-register output', () => { + const validOutput = { + success: false, + }; + + const result = validate(validOutput); + expect(result).toBe(true); + expect(validate.errors).toBeNull(); + }); + }); + + describe('memesh-metrics Output Validation', () => { + const schema = OutputSchemas.memeshMetrics; + let validate: ReturnType; + + beforeAll(() => { + validate = ajv.compile(schema); + }); + + it('should validate correct memesh-metrics output', () => { + const validOutput = { + session: { + current: { startTime: '2026-02-25T10:00:00Z', modifiedFiles: 3 }, + lastSessionCached: true, + }, + routing: { + configLoaded: true, + modelRules: 2, + backgroundRules: 1, + planningEnforcement: true, + dryRunGate: false, + recentAuditEntries: ['[2026-02-25T10:30:00Z] Task(Explore) → model: haiku'], + }, + memory: { + knowledgeGraphExists: true, + dbSizeKB: 512, + }, + }; + + const result = validate(validOutput); + expect(result).toBe(true); + expect(validate.errors).toBeNull(); + }); + + it('should validate empty memesh-metrics output', () => { + const validOutput = {}; + + const result = validate(validOutput); + expect(result).toBe(true); + expect(validate.errors).toBeNull(); + }); + }); + describe('Error Message Quality', () => { it('should provide detailed error messages for validation failures', () => { const schema = OutputSchemas.buddyDo; From 28fcd62389388bc9c4095eb75ca652b106ffa638 Mon Sep 17 00:00:00 2001 From: KT <677465+kevintseng@users.noreply.github.com> Date: Wed, 25 Feb 2026 16:55:20 +0800 Subject: [PATCH 21/23] fix: resolve 14 issues from third comprehensive code review CRITICAL fixes: - getEntity() now uses exact SQL match instead of fuzzy FTS5 search - post-commit hook exits 0 instead of 1 to never block Claude Code - subagent-stop entity names include timestamp to prevent daily collision - sqliteQuery returns null on error (not '') so callers detect failures - sqliteBatch propagates errors; sqliteBatchEntity cleans up orphans - initVectorSearch/deleteEntity catch blocks now log error context MAJOR fixes: - memesh-metrics: bounded audit log read (256KB tail), PathResolver for DB path, os.homedir() fallback instead of /tmp - UnifiedMemoryStore.update() returns false on concurrent delete - post-tool-use toolCalls array capped at 1000 - pre-tool-use uses fileURLToPath for Windows compatibility - readStdin fast-path for already-closed stdin - Keyword fallback similarity 0.5 instead of 1.0 for honest scoring Refactored subagent-stop to use sqliteBatchEntity (3 spawns vs N+2). All 1817 tests + 15 hook tests pass. Co-Authored-By: Claude Opus 4.6 --- .../dist/knowledge-graph/index.d.ts.map | 2 +- .../memesh/dist/knowledge-graph/index.js | 34 ++++++++++--- .../memesh/dist/knowledge-graph/index.js.map | 2 +- .../dist/mcp/tools/memesh-metrics.d.ts.map | 2 +- .../memesh/dist/mcp/tools/memesh-metrics.js | 30 ++++++++++-- .../dist/mcp/tools/memesh-metrics.js.map | 2 +- .../dist/memory/UnifiedMemoryStore.d.ts.map | 2 +- .../memesh/dist/memory/UnifiedMemoryStore.js | 3 +- .../dist/memory/UnifiedMemoryStore.js.map | 2 +- .../memesh/scripts/hooks/hook-utils.js | 25 +++++++--- .../memesh/scripts/hooks/post-commit.js | 2 +- .../memesh/scripts/hooks/post-tool-use.js | 6 +++ .../memesh/scripts/hooks/pre-tool-use.js | 3 +- .../memesh/scripts/hooks/subagent-stop.js | 44 +++++------------ scripts/hooks/hook-utils.js | 25 +++++++--- scripts/hooks/post-commit.js | 2 +- scripts/hooks/post-tool-use.js | 6 +++ scripts/hooks/pre-tool-use.js | 3 +- scripts/hooks/subagent-stop.js | 44 +++++------------ src/knowledge-graph/index.ts | 48 ++++++++++++++++--- src/mcp/tools/memesh-metrics.ts | 36 +++++++++++--- src/memory/UnifiedMemoryStore.ts | 8 ++-- 22 files changed, 215 insertions(+), 116 deletions(-) diff --git a/.claude-plugin/memesh/dist/knowledge-graph/index.d.ts.map b/.claude-plugin/memesh/dist/knowledge-graph/index.d.ts.map index f93cdcae..62732159 100644 --- a/.claude-plugin/memesh/dist/knowledge-graph/index.d.ts.map +++ b/.claude-plugin/memesh/dist/knowledge-graph/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/knowledge-graph/index.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAA4B,MAAM,YAAY,CAAC;AAazG,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAsBD,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,UAAU,CAA0B;IAE5C,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO,CAAC,SAAS,CAAkF;IAEnG,OAAO,CAAC,iBAAiB,CAA8B;IAEvD,OAAO,CAAC,iBAAiB,CAAiC;IAK1D,OAAO;IAsBP,OAAO,CAAC,kBAAkB;IAsC1B,OAAO,CAAC,oBAAoB;WAgCf,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAqC7D,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc;IAyBlD,OAAO,CAAC,UAAU;IA+FlB,OAAO,CAAC,gBAAgB;IAuBxB,OAAO,CAAC,aAAa;IAuHrB,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,UAAU;IAyClB,OAAO,CAAC,gBAAgB;IAqExB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAmJpC,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IA8DxC,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,EAAE;IA2J5C,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAYtC,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,aAAa,GAAG,IAAI;IAkE3E,QAAQ,IAAI;QACV,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACxC;IAgDD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAyDnC,OAAO,CAAC,sBAAsB;IA6BxB,cAAc,CAClB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;KAAO,GAC/E,OAAO,CAAC,oBAAoB,EAAE,CAAC;IA4C5B,YAAY,CAChB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAO,GACvD,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAwClC,OAAO,CAAC,8BAA8B;IAQtC,qBAAqB,IAAI,OAAO;IAQ1B,KAAK;IAoCX,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IAoB9B,aAAa;IAOb,UAAU;CAIX;AAGD,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/knowledge-graph/index.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAA4B,MAAM,YAAY,CAAC;AAazG,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAsBD,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,UAAU,CAA0B;IAE5C,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO,CAAC,SAAS,CAAkF;IAEnG,OAAO,CAAC,iBAAiB,CAA8B;IAEvD,OAAO,CAAC,iBAAiB,CAAiC;IAK1D,OAAO;IAsBP,OAAO,CAAC,kBAAkB;IAsC1B,OAAO,CAAC,oBAAoB;WAgCf,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAqC7D,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc;IAyBlD,OAAO,CAAC,UAAU;IA+FlB,OAAO,CAAC,gBAAgB;IAyBxB,OAAO,CAAC,aAAa;IAuHrB,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,UAAU;IAyClB,OAAO,CAAC,gBAAgB;IAqExB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAmJpC,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IA8DxC,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,EAAE;IA2J5C,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAuCtC,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,aAAa,GAAG,IAAI;IAkE3E,QAAQ,IAAI;QACV,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACxC;IAgDD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IA4DnC,OAAO,CAAC,sBAAsB;IA6BxB,cAAc,CAClB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;KAAO,GAC/E,OAAO,CAAC,oBAAoB,EAAE,CAAC;IA4C5B,YAAY,CAChB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAO,GACvD,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAwClC,OAAO,CAAC,8BAA8B;IAUtC,qBAAqB,IAAI,OAAO;IAQ1B,KAAK;IAoCX,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IAoB9B,aAAa;IAOb,UAAU;CAIX;AAGD,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/knowledge-graph/index.js b/.claude-plugin/memesh/dist/knowledge-graph/index.js index 0e147694..573dcaa0 100644 --- a/.claude-plugin/memesh/dist/knowledge-graph/index.js +++ b/.claude-plugin/memesh/dist/knowledge-graph/index.js @@ -166,9 +166,11 @@ export class KnowledgeGraph { this.vectorEnabled = true; logger.info('[KG] Vector search enabled (sqlite-vec loaded)'); }) - .catch(() => { + .catch((error) => { this.vectorEnabled = false; - logger.debug('[KG] Vector search unavailable, using FTS5-only search'); + logger.debug('[KG] Vector search unavailable, using FTS5-only search', { + error: error instanceof Error ? error.message : String(error), + }); }); } runMigrations() { @@ -532,8 +534,24 @@ export class KnowledgeGraph { } getEntity(name) { this.validateEntityName(name); - const results = this.searchEntities({ namePattern: name, limit: 1 }); - return results.length > 0 ? results[0] : null; + const row = this.db.prepare(` + SELECT e.*, + (SELECT json_group_array(content) FROM observations o WHERE o.entity_id = e.id) as observations_json, + (SELECT json_group_array(tag) FROM tags t WHERE t.entity_id = e.id) as tags_json + FROM entities e + WHERE e.name = ? + `).get(name); + if (!row) + return null; + return { + id: row.id, + name: row.name, + entityType: row.type, + observations: safeJsonParse(row.observations_json, []).filter(value => value), + tags: safeJsonParse(row.tags_json, []).filter(value => value), + metadata: row.metadata ? safeJsonParse(row.metadata, {}) : {}, + createdAt: new Date(row.created_at) + }; } traceRelations(entityName, depth = 2) { this.validateEntityName(entityName); @@ -622,7 +640,11 @@ export class KnowledgeGraph { try { this.vectorExt.deleteEmbedding(this.db, name); } - catch { + catch (error) { + logger.warn('[KG] Failed to delete embedding during entity removal', { + entity: name, + error: error instanceof Error ? error.message : String(error), + }); } } const stmt = this.db.prepare('DELETE FROM entities WHERE name = ?'); @@ -716,7 +738,7 @@ export class KnowledgeGraph { } keywordSearchAsSemanticResults(query, limit) { const entities = this.searchEntities({ namePattern: query, limit }); - return entities.map(entity => ({ entity, similarity: 1.0 })); + return entities.map(entity => ({ entity, similarity: 0.5 })); } isVectorSearchEnabled() { return this.vectorEnabled; diff --git a/.claude-plugin/memesh/dist/knowledge-graph/index.js.map b/.claude-plugin/memesh/dist/knowledge-graph/index.js.map index 3ae9ca5e..83b2e524 100644 --- a/.claude-plugin/memesh/dist/knowledge-graph/index.js.map +++ b/.claude-plugin/memesh/dist/knowledge-graph/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/knowledge-graph/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/knowledge-graph/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.d.ts.map b/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.d.ts.map index 96379644..2ac8027b 100644 --- a/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.d.ts.map +++ b/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"memesh-metrics.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/memesh-metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAKpE,eAAO,MAAM,wBAAwB;;;;;;;iBAMnC,CAAC;AAEH,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AA0CnF,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,2BAA2B,GACjC,OAAO,CAAC,cAAc,CAAC,CAsIzB"} \ No newline at end of file +{"version":3,"file":"memesh-metrics.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/memesh-metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAOpE,eAAO,MAAM,wBAAwB;;;;;;;iBAMnC,CAAC;AAEH,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAgEnF,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,2BAA2B,GACjC,OAAO,CAAC,cAAc,CAAC,CAsIzB"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.js b/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.js index 63175755..a92eb43d 100644 --- a/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.js +++ b/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.js @@ -1,7 +1,9 @@ import { z } from 'zod'; import fs from 'fs'; +import os from 'os'; import path from 'path'; import { logger } from '../../utils/logger.js'; +import { getDataPath } from '../../utils/PathResolver.js'; export const MemeshMetricsInputSchema = z.object({ section: z .enum(['all', 'session', 'routing', 'memory']) @@ -9,7 +11,7 @@ export const MemeshMetricsInputSchema = z.object({ .default('all') .describe('Which metrics section to return'), }); -const HOME_DIR = process.env.HOME || process.env.USERPROFILE || '/tmp'; +const HOME_DIR = process.env.HOME || process.env.USERPROFILE || os.homedir(); const HOOK_STATE_DIR = path.join(HOME_DIR, '.claude', 'state'); const CURRENT_SESSION_FILE = path.join(HOOK_STATE_DIR, 'current-session.json'); const LAST_SESSION_CACHE = path.join(HOOK_STATE_DIR, 'last-session-summary.json'); @@ -22,19 +24,37 @@ function readJSONSafe(filePath) { return JSON.parse(fs.readFileSync(filePath, 'utf-8')); } } - catch { + catch (error) { + logger.warn(`[Metrics] Failed to read ${path.basename(filePath)}`, { + error: error instanceof Error ? error.message : String(error), + }); } return null; } +const MAX_AUDIT_LOG_BYTES = 256 * 1024; function getRecentAuditEntries(maxLines) { try { if (!fs.existsSync(ROUTING_AUDIT_LOG)) return []; - const content = fs.readFileSync(ROUTING_AUDIT_LOG, 'utf-8'); + const stat = fs.statSync(ROUTING_AUDIT_LOG); + let content; + if (stat.size > MAX_AUDIT_LOG_BYTES) { + const fd = fs.openSync(ROUTING_AUDIT_LOG, 'r'); + const buffer = Buffer.alloc(MAX_AUDIT_LOG_BYTES); + fs.readSync(fd, buffer, 0, MAX_AUDIT_LOG_BYTES, stat.size - MAX_AUDIT_LOG_BYTES); + fs.closeSync(fd); + content = buffer.toString('utf-8'); + } + else { + content = fs.readFileSync(ROUTING_AUDIT_LOG, 'utf-8'); + } const lines = content.trim().split('\n').filter(Boolean); return lines.slice(-maxLines); } - catch { + catch (error) { + logger.warn('[Metrics] Failed to read audit log', { + error: error instanceof Error ? error.message : String(error), + }); return []; } } @@ -80,7 +100,7 @@ export async function handleMemeshMetrics(input) { }; } if (section === 'all' || section === 'memory') { - const dbPath = path.join(MEMESH_DIR, 'knowledge-graph.db'); + const dbPath = getDataPath('knowledge-graph.db'); const dbExists = fs.existsSync(dbPath); let dbSizeKB = 0; if (dbExists) { diff --git a/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.js.map b/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.js.map index 1d4a6c61..3bd9d5ff 100644 --- a/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.js.map +++ b/.claude-plugin/memesh/dist/mcp/tools/memesh-metrics.js.map @@ -1 +1 @@ -{"version":3,"file":"memesh-metrics.js","sourceRoot":"","sources":["../../../src/mcp/tools/memesh-metrics.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"memesh-metrics.js","sourceRoot":"","sources":["../../../src/mcp/tools/memesh-metrics.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/memory/UnifiedMemoryStore.d.ts.map b/.claude-plugin/memesh/dist/memory/UnifiedMemoryStore.d.ts.map index f4551b4d..e14f43a3 100644 --- a/.claude-plugin/memesh/dist/memory/UnifiedMemoryStore.d.ts.map +++ b/.claude-plugin/memesh/dist/memory/UnifiedMemoryStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"UnifiedMemoryStore.d.ts","sourceRoot":"","sources":["../../src/memory/UnifiedMemoryStore.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACV,aAAa,EACd,MAAM,2BAA2B,CAAC;AA4EnC,qBAAa,kBAAkB;IACjB,OAAO,CAAC,cAAc;gBAAd,cAAc,EAAE,cAAc;WAoBrC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAkC3D,KAAK,CACT,MAAM,EAAE,aAAa,EACrB,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GACvD,OAAO,CAAC,MAAM,CAAC;IAkRZ,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAgD9C,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,aAAa,GAAG;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GACvE,OAAO,CAAC,aAAa,EAAE,CAAC;YAgEb,iBAAiB;IA8F/B,OAAO,CAAC,kBAAkB;IA2D1B,OAAO,CAAC,kBAAkB;IAsEpB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAmCjF,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAa/E,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IA+ErE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAuDpC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB5B,OAAO,CAAC,cAAc;CA+EvB"} \ No newline at end of file +{"version":3,"file":"UnifiedMemoryStore.d.ts","sourceRoot":"","sources":["../../src/memory/UnifiedMemoryStore.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACV,aAAa,EACd,MAAM,2BAA2B,CAAC;AA4EnC,qBAAa,kBAAkB;IACjB,OAAO,CAAC,cAAc;gBAAd,cAAc,EAAE,cAAc;WAoBrC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAkC3D,KAAK,CACT,MAAM,EAAE,aAAa,EACrB,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GACvD,OAAO,CAAC,MAAM,CAAC;IAkRZ,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAgD9C,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,aAAa,GAAG;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GACvE,OAAO,CAAC,aAAa,EAAE,CAAC;YAgEb,iBAAiB;IA8F/B,OAAO,CAAC,kBAAkB;IA2D1B,OAAO,CAAC,kBAAkB;IAsEpB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAmCjF,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAa/E,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAiFrE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAuDpC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB5B,OAAO,CAAC,cAAc;CA+EvB"} \ No newline at end of file diff --git a/.claude-plugin/memesh/dist/memory/UnifiedMemoryStore.js b/.claude-plugin/memesh/dist/memory/UnifiedMemoryStore.js index deca08f6..c2495071 100644 --- a/.claude-plugin/memesh/dist/memory/UnifiedMemoryStore.js +++ b/.claude-plugin/memesh/dist/memory/UnifiedMemoryStore.js @@ -461,7 +461,8 @@ export class UnifiedMemoryStore { }; const deleted = this.knowledgeGraph.deleteEntity(id); if (!deleted) { - logger.warn(`[UnifiedMemoryStore] Entity ${id} was deleted during update operation, will create new entry`); + logger.warn(`[UnifiedMemoryStore] Entity ${id} was concurrently deleted during update, treating as not found`); + return false; } await this.store(updatedMemory); logger.info(`[UnifiedMemoryStore] Updated memory: ${id}`); diff --git a/.claude-plugin/memesh/dist/memory/UnifiedMemoryStore.js.map b/.claude-plugin/memesh/dist/memory/UnifiedMemoryStore.js.map index 4dc788ff..8e0bb538 100644 --- a/.claude-plugin/memesh/dist/memory/UnifiedMemoryStore.js.map +++ b/.claude-plugin/memesh/dist/memory/UnifiedMemoryStore.js.map @@ -1 +1 @@ -{"version":3,"file":"UnifiedMemoryStore.js","sourceRoot":"","sources":["../../src/memory/UnifiedMemoryStore.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"UnifiedMemoryStore.js","sourceRoot":"","sources":["../../src/memory/UnifiedMemoryStore.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/.claude-plugin/memesh/scripts/hooks/hook-utils.js b/.claude-plugin/memesh/scripts/hooks/hook-utils.js index d7adb140..e76863a5 100644 --- a/.claude-plugin/memesh/scripts/hooks/hook-utils.js +++ b/.claude-plugin/memesh/scripts/hooks/hook-utils.js @@ -201,7 +201,7 @@ export function escapeSQL(value) { * @param {Object} options - Query options * @param {number} options.timeout - Timeout in ms (default: 5000) * @param {boolean} options.json - Use JSON output mode (default: false) - * @returns {string} Query result as string + * @returns {string|null} Query result as string, or null on error * * @example * // Basic query @@ -236,7 +236,7 @@ export function sqliteQuery(dbPath, query, params = [], options = {}) { return result.trim(); } catch (error) { logError('sqliteQuery', error); - return ''; + return null; } } @@ -323,6 +323,11 @@ export function getDateString(date = new Date()) { */ export function readStdin(timeout = 3000) { return new Promise((resolve, reject) => { + // Fast path: stdin already closed/ended — avoids 3s timeout hang + if (process.stdin.readableEnded || process.stdin.destroyed) { + return resolve(''); + } + let data = ''; const cleanup = () => { @@ -373,7 +378,7 @@ export function readStdin(timeout = 3000) { * @param {Object} options - Options * @param {number} options.timeout - Timeout in ms (default: 10000) * @param {number} options.chunkSize - Max statements per batch (default: 50) - * @returns {string} Combined output (empty string on error) + * @returns {string|null} Combined output, or null on error */ export function sqliteBatch(dbPath, statements, options = {}) { const { timeout = 10000, chunkSize = 50 } = options; @@ -423,7 +428,7 @@ export function sqliteBatch(dbPath, statements, options = {}) { return output.trim(); } catch (error) { logError('sqliteBatch', error); - return ''; + return null; } } @@ -452,17 +457,19 @@ export function sqliteBatchEntity(dbPath, entity, observations = [], tags = []) const now = new Date().toISOString(); // Step 1: Insert entity (need the ID for subsequent inserts) - sqliteQuery( + const insertResult = sqliteQuery( dbPath, 'INSERT INTO entities (name, type, created_at, metadata) VALUES (?, ?, ?, ?)', [entity.name, entity.type, now, entity.metadata || '{}'] ); + if (insertResult === null) return null; const entityIdResult = sqliteQuery( dbPath, 'SELECT id FROM entities WHERE name = ?', [entity.name] ); + if (entityIdResult === null) return null; const entityId = parseInt(entityIdResult, 10); if (isNaN(entityId)) return null; @@ -484,7 +491,13 @@ export function sqliteBatchEntity(dbPath, entity, observations = [], tags = []) } if (statements.length > 0) { - sqliteBatch(dbPath, statements); + const batchResult = sqliteBatch(dbPath, statements); + if (batchResult === null) { + // Clean up orphaned entity — batch failed so observations/tags rolled back + logError('sqliteBatchEntity', new Error(`Batch failed for entity ${entity.name}, cleaning up orphan`)); + sqliteQuery(dbPath, 'DELETE FROM entities WHERE id = ?', [entityId]); + return null; + } } return entityId; diff --git a/.claude-plugin/memesh/scripts/hooks/post-commit.js b/.claude-plugin/memesh/scripts/hooks/post-commit.js index 55cb47cf..ed2bd99a 100644 --- a/.claude-plugin/memesh/scripts/hooks/post-commit.js +++ b/.claude-plugin/memesh/scripts/hooks/post-commit.js @@ -195,7 +195,7 @@ async function postCommit() { process.exit(0); } catch (error) { logError('PostCommit', error); - process.exit(1); + process.exit(0); // Never block Claude Code on hook errors } } diff --git a/.claude-plugin/memesh/scripts/hooks/post-tool-use.js b/.claude-plugin/memesh/scripts/hooks/post-tool-use.js index 837f7b17..b60c7048 100755 --- a/.claude-plugin/memesh/scripts/hooks/post-tool-use.js +++ b/.claude-plugin/memesh/scripts/hooks/post-tool-use.js @@ -310,6 +310,12 @@ function updateCurrentSession(toolData, patterns, anomalies) { tokenUsage: toolData.tokensUsed, }); + // Cap toolCalls to prevent unbounded growth in long sessions + const MAX_TOOL_CALLS = 1000; + if (currentSession.toolCalls.length > MAX_TOOL_CALLS) { + currentSession.toolCalls = currentSession.toolCalls.slice(-MAX_TOOL_CALLS); + } + // Track file modifications and test executions (for dry-run gate) trackFileModifications(toolData, currentSession); trackTestExecutions(toolData, currentSession); diff --git a/.claude-plugin/memesh/scripts/hooks/pre-tool-use.js b/.claude-plugin/memesh/scripts/hooks/pre-tool-use.js index c7235baf..925e7592 100644 --- a/.claude-plugin/memesh/scripts/hooks/pre-tool-use.js +++ b/.claude-plugin/memesh/scripts/hooks/pre-tool-use.js @@ -26,6 +26,7 @@ import { } from './hook-utils.js'; import fs from 'fs'; import path from 'path'; +import { fileURLToPath } from 'url'; // ============================================================================ // Constants @@ -35,7 +36,7 @@ const CURRENT_SESSION_FILE = path.join(STATE_DIR, 'current-session.json'); const ROUTING_CONFIG_FILE = path.join(HOME_DIR, '.memesh', 'routing-config.json'); const ROUTING_AUDIT_LOG = path.join(HOME_DIR, '.memesh', 'routing-audit.log'); const PLANNING_TEMPLATE_FILE = path.join( - path.dirname(new URL(import.meta.url).pathname), + path.dirname(fileURLToPath(import.meta.url)), 'templates', 'planning-template.md' ); diff --git a/.claude-plugin/memesh/scripts/hooks/subagent-stop.js b/.claude-plugin/memesh/scripts/hooks/subagent-stop.js index 30d7691f..7705e5af 100644 --- a/.claude-plugin/memesh/scripts/hooks/subagent-stop.js +++ b/.claude-plugin/memesh/scripts/hooks/subagent-stop.js @@ -17,7 +17,7 @@ import { MEMESH_DB_PATH, readJSONFile, writeJSONFile, - sqliteQuery, + sqliteBatchEntity, getDateString, readStdin, logError, @@ -91,37 +91,13 @@ function saveSubagentToKG(agentType, lastMessage) { ? lastMessage.substring(0, 1000) + '...' : lastMessage; - const entityName = `Code Review: ${getDateString()} ${agentType}`; + const entityName = `Code Review: ${getDateString()} ${Date.now()} ${agentType}`; const metadata = JSON.stringify({ agentType, messageLength: lastMessage.length, source: 'subagent-stop-hook', }); - // Create entity - sqliteQuery( - MEMESH_DB_PATH, - 'INSERT INTO entities (name, type, created_at, metadata) VALUES (?, ?, ?, ?)', - [entityName, 'code_review', now, metadata] - ); - - // Get entity ID - const entityIdResult = sqliteQuery( - MEMESH_DB_PATH, - 'SELECT id FROM entities WHERE name = ?', - [entityName] - ); - const entityId = parseInt(entityIdResult, 10); - if (isNaN(entityId)) return false; - - // Add observation with the review findings - sqliteQuery( - MEMESH_DB_PATH, - 'INSERT INTO observations (entity_id, content, created_at) VALUES (?, ?, ?)', - [entityId, `[${agentType}] ${shortMessage}`, now] - ); - - // Add tags const tags = [ 'code-review', `agent:${agentType}`, @@ -129,13 +105,15 @@ function saveSubagentToKG(agentType, lastMessage) { 'auto-tracked', 'scope:project', ]; - for (const tag of tags) { - sqliteQuery( - MEMESH_DB_PATH, - 'INSERT INTO tags (entity_id, tag) VALUES (?, ?)', - [entityId, tag] - ); - } + + const entityId = sqliteBatchEntity( + MEMESH_DB_PATH, + { name: entityName, type: 'code_review', metadata }, + [`[${agentType}] ${shortMessage}`], + tags + ); + + if (entityId === null) return false; logMemorySave(`Code review saved: ${agentType} (${lastMessage.length} chars)`); return true; diff --git a/scripts/hooks/hook-utils.js b/scripts/hooks/hook-utils.js index d7adb140..e76863a5 100644 --- a/scripts/hooks/hook-utils.js +++ b/scripts/hooks/hook-utils.js @@ -201,7 +201,7 @@ export function escapeSQL(value) { * @param {Object} options - Query options * @param {number} options.timeout - Timeout in ms (default: 5000) * @param {boolean} options.json - Use JSON output mode (default: false) - * @returns {string} Query result as string + * @returns {string|null} Query result as string, or null on error * * @example * // Basic query @@ -236,7 +236,7 @@ export function sqliteQuery(dbPath, query, params = [], options = {}) { return result.trim(); } catch (error) { logError('sqliteQuery', error); - return ''; + return null; } } @@ -323,6 +323,11 @@ export function getDateString(date = new Date()) { */ export function readStdin(timeout = 3000) { return new Promise((resolve, reject) => { + // Fast path: stdin already closed/ended — avoids 3s timeout hang + if (process.stdin.readableEnded || process.stdin.destroyed) { + return resolve(''); + } + let data = ''; const cleanup = () => { @@ -373,7 +378,7 @@ export function readStdin(timeout = 3000) { * @param {Object} options - Options * @param {number} options.timeout - Timeout in ms (default: 10000) * @param {number} options.chunkSize - Max statements per batch (default: 50) - * @returns {string} Combined output (empty string on error) + * @returns {string|null} Combined output, or null on error */ export function sqliteBatch(dbPath, statements, options = {}) { const { timeout = 10000, chunkSize = 50 } = options; @@ -423,7 +428,7 @@ export function sqliteBatch(dbPath, statements, options = {}) { return output.trim(); } catch (error) { logError('sqliteBatch', error); - return ''; + return null; } } @@ -452,17 +457,19 @@ export function sqliteBatchEntity(dbPath, entity, observations = [], tags = []) const now = new Date().toISOString(); // Step 1: Insert entity (need the ID for subsequent inserts) - sqliteQuery( + const insertResult = sqliteQuery( dbPath, 'INSERT INTO entities (name, type, created_at, metadata) VALUES (?, ?, ?, ?)', [entity.name, entity.type, now, entity.metadata || '{}'] ); + if (insertResult === null) return null; const entityIdResult = sqliteQuery( dbPath, 'SELECT id FROM entities WHERE name = ?', [entity.name] ); + if (entityIdResult === null) return null; const entityId = parseInt(entityIdResult, 10); if (isNaN(entityId)) return null; @@ -484,7 +491,13 @@ export function sqliteBatchEntity(dbPath, entity, observations = [], tags = []) } if (statements.length > 0) { - sqliteBatch(dbPath, statements); + const batchResult = sqliteBatch(dbPath, statements); + if (batchResult === null) { + // Clean up orphaned entity — batch failed so observations/tags rolled back + logError('sqliteBatchEntity', new Error(`Batch failed for entity ${entity.name}, cleaning up orphan`)); + sqliteQuery(dbPath, 'DELETE FROM entities WHERE id = ?', [entityId]); + return null; + } } return entityId; diff --git a/scripts/hooks/post-commit.js b/scripts/hooks/post-commit.js index 55cb47cf..ed2bd99a 100644 --- a/scripts/hooks/post-commit.js +++ b/scripts/hooks/post-commit.js @@ -195,7 +195,7 @@ async function postCommit() { process.exit(0); } catch (error) { logError('PostCommit', error); - process.exit(1); + process.exit(0); // Never block Claude Code on hook errors } } diff --git a/scripts/hooks/post-tool-use.js b/scripts/hooks/post-tool-use.js index 837f7b17..b60c7048 100755 --- a/scripts/hooks/post-tool-use.js +++ b/scripts/hooks/post-tool-use.js @@ -310,6 +310,12 @@ function updateCurrentSession(toolData, patterns, anomalies) { tokenUsage: toolData.tokensUsed, }); + // Cap toolCalls to prevent unbounded growth in long sessions + const MAX_TOOL_CALLS = 1000; + if (currentSession.toolCalls.length > MAX_TOOL_CALLS) { + currentSession.toolCalls = currentSession.toolCalls.slice(-MAX_TOOL_CALLS); + } + // Track file modifications and test executions (for dry-run gate) trackFileModifications(toolData, currentSession); trackTestExecutions(toolData, currentSession); diff --git a/scripts/hooks/pre-tool-use.js b/scripts/hooks/pre-tool-use.js index c7235baf..925e7592 100644 --- a/scripts/hooks/pre-tool-use.js +++ b/scripts/hooks/pre-tool-use.js @@ -26,6 +26,7 @@ import { } from './hook-utils.js'; import fs from 'fs'; import path from 'path'; +import { fileURLToPath } from 'url'; // ============================================================================ // Constants @@ -35,7 +36,7 @@ const CURRENT_SESSION_FILE = path.join(STATE_DIR, 'current-session.json'); const ROUTING_CONFIG_FILE = path.join(HOME_DIR, '.memesh', 'routing-config.json'); const ROUTING_AUDIT_LOG = path.join(HOME_DIR, '.memesh', 'routing-audit.log'); const PLANNING_TEMPLATE_FILE = path.join( - path.dirname(new URL(import.meta.url).pathname), + path.dirname(fileURLToPath(import.meta.url)), 'templates', 'planning-template.md' ); diff --git a/scripts/hooks/subagent-stop.js b/scripts/hooks/subagent-stop.js index 30d7691f..7705e5af 100644 --- a/scripts/hooks/subagent-stop.js +++ b/scripts/hooks/subagent-stop.js @@ -17,7 +17,7 @@ import { MEMESH_DB_PATH, readJSONFile, writeJSONFile, - sqliteQuery, + sqliteBatchEntity, getDateString, readStdin, logError, @@ -91,37 +91,13 @@ function saveSubagentToKG(agentType, lastMessage) { ? lastMessage.substring(0, 1000) + '...' : lastMessage; - const entityName = `Code Review: ${getDateString()} ${agentType}`; + const entityName = `Code Review: ${getDateString()} ${Date.now()} ${agentType}`; const metadata = JSON.stringify({ agentType, messageLength: lastMessage.length, source: 'subagent-stop-hook', }); - // Create entity - sqliteQuery( - MEMESH_DB_PATH, - 'INSERT INTO entities (name, type, created_at, metadata) VALUES (?, ?, ?, ?)', - [entityName, 'code_review', now, metadata] - ); - - // Get entity ID - const entityIdResult = sqliteQuery( - MEMESH_DB_PATH, - 'SELECT id FROM entities WHERE name = ?', - [entityName] - ); - const entityId = parseInt(entityIdResult, 10); - if (isNaN(entityId)) return false; - - // Add observation with the review findings - sqliteQuery( - MEMESH_DB_PATH, - 'INSERT INTO observations (entity_id, content, created_at) VALUES (?, ?, ?)', - [entityId, `[${agentType}] ${shortMessage}`, now] - ); - - // Add tags const tags = [ 'code-review', `agent:${agentType}`, @@ -129,13 +105,15 @@ function saveSubagentToKG(agentType, lastMessage) { 'auto-tracked', 'scope:project', ]; - for (const tag of tags) { - sqliteQuery( - MEMESH_DB_PATH, - 'INSERT INTO tags (entity_id, tag) VALUES (?, ?)', - [entityId, tag] - ); - } + + const entityId = sqliteBatchEntity( + MEMESH_DB_PATH, + { name: entityName, type: 'code_review', metadata }, + [`[${agentType}] ${shortMessage}`], + tags + ); + + if (entityId === null) return false; logMemorySave(`Code review saved: ${agentType} (${lastMessage.length} chars)`); return true; diff --git a/src/knowledge-graph/index.ts b/src/knowledge-graph/index.ts index edf7b418..0ac4fa4b 100644 --- a/src/knowledge-graph/index.ts +++ b/src/knowledge-graph/index.ts @@ -320,9 +320,11 @@ export class KnowledgeGraph { this.vectorEnabled = true; logger.info('[KG] Vector search enabled (sqlite-vec loaded)'); }) - .catch(() => { + .catch((error: unknown) => { this.vectorEnabled = false; - logger.debug('[KG] Vector search unavailable, using FTS5-only search'); + logger.debug('[KG] Vector search unavailable, using FTS5-only search', { + error: error instanceof Error ? error.message : String(error), + }); }); } @@ -952,8 +954,35 @@ export class KnowledgeGraph { // Validate entity name before any database operations this.validateEntityName(name); - const results = this.searchEntities({ namePattern: name, limit: 1 }); - return results.length > 0 ? results[0] : null; + // Use exact match lookup instead of fuzzy search to prevent + // incorrect matches (e.g., "auth" matching "authentication") + const row = this.db.prepare(` + SELECT e.*, + (SELECT json_group_array(content) FROM observations o WHERE o.entity_id = e.id) as observations_json, + (SELECT json_group_array(tag) FROM tags t WHERE t.entity_id = e.id) as tags_json + FROM entities e + WHERE e.name = ? + `).get(name) as { + id: number; + name: string; + type: string; + observations_json: string | null; + tags_json: string | null; + metadata: string | null; + created_at: string; + } | undefined; + + if (!row) return null; + + return { + id: row.id, + name: row.name, + entityType: row.type as EntityType, + observations: safeJsonParse(row.observations_json, []).filter(value => value), + tags: safeJsonParse(row.tags_json, []).filter(value => value), + metadata: row.metadata ? safeJsonParse>(row.metadata, {}) : {}, + createdAt: new Date(row.created_at) + }; } /** @@ -1110,8 +1139,11 @@ export class KnowledgeGraph { if (this.vectorEnabled && this.vectorExt) { try { this.vectorExt.deleteEmbedding(this.db, name); - } catch { - // Vector extension may not be available + } catch (error: unknown) { + logger.warn('[KG] Failed to delete embedding during entity removal', { + entity: name, + error: error instanceof Error ? error.message : String(error), + }); } } @@ -1256,7 +1288,9 @@ export class KnowledgeGraph { */ private keywordSearchAsSemanticResults(query: string, limit: number): SemanticSearchResult[] { const entities = this.searchEntities({ namePattern: query, limit }); - return entities.map(entity => ({ entity, similarity: 1.0 })); + // Use 0.5 similarity for keyword matches to distinguish from real semantic matches + // This prevents keyword fallback results from always beating semantic results in hybridSearch + return entities.map(entity => ({ entity, similarity: 0.5 })); } /** diff --git a/src/mcp/tools/memesh-metrics.ts b/src/mcp/tools/memesh-metrics.ts index 597da43c..cda663f6 100644 --- a/src/mcp/tools/memesh-metrics.ts +++ b/src/mcp/tools/memesh-metrics.ts @@ -1,8 +1,10 @@ import { z } from 'zod'; import { CallToolResult } from '@modelcontextprotocol/sdk/types.js'; import fs from 'fs'; +import os from 'os'; import path from 'path'; import { logger } from '../../utils/logger.js'; +import { getDataPath } from '../../utils/PathResolver.js'; export const MemeshMetricsInputSchema = z.object({ section: z @@ -14,7 +16,7 @@ export const MemeshMetricsInputSchema = z.object({ export type ValidatedMemeshMetricsInput = z.infer; -const HOME_DIR = process.env.HOME || process.env.USERPROFILE || '/tmp'; +const HOME_DIR = process.env.HOME || process.env.USERPROFILE || os.homedir(); // Session data is written by hooks to ~/.claude/state/ const HOOK_STATE_DIR = path.join(HOME_DIR, '.claude', 'state'); @@ -31,19 +33,41 @@ function readJSONSafe(filePath: string): Record | null { if (fs.existsSync(filePath)) { return JSON.parse(fs.readFileSync(filePath, 'utf-8')); } - } catch { - // Non-critical + } catch (error: unknown) { + logger.warn(`[Metrics] Failed to read ${path.basename(filePath)}`, { + error: error instanceof Error ? error.message : String(error), + }); } return null; } +/** Max bytes to read from audit log to avoid blocking the event loop */ +const MAX_AUDIT_LOG_BYTES = 256 * 1024; // 256 KB + function getRecentAuditEntries(maxLines: number): string[] { try { if (!fs.existsSync(ROUTING_AUDIT_LOG)) return []; - const content = fs.readFileSync(ROUTING_AUDIT_LOG, 'utf-8'); + + const stat = fs.statSync(ROUTING_AUDIT_LOG); + let content: string; + + if (stat.size > MAX_AUDIT_LOG_BYTES) { + // Read only the tail of the file to avoid loading megabytes into memory + const fd = fs.openSync(ROUTING_AUDIT_LOG, 'r'); + const buffer = Buffer.alloc(MAX_AUDIT_LOG_BYTES); + fs.readSync(fd, buffer, 0, MAX_AUDIT_LOG_BYTES, stat.size - MAX_AUDIT_LOG_BYTES); + fs.closeSync(fd); + content = buffer.toString('utf-8'); + } else { + content = fs.readFileSync(ROUTING_AUDIT_LOG, 'utf-8'); + } + const lines = content.trim().split('\n').filter(Boolean); return lines.slice(-maxLines); - } catch { + } catch (error: unknown) { + logger.warn('[Metrics] Failed to read audit log', { + error: error instanceof Error ? error.message : String(error), + }); return []; } } @@ -106,7 +130,7 @@ export async function handleMemeshMetrics( // Memory metrics if (section === 'all' || section === 'memory') { - const dbPath = path.join(MEMESH_DIR, 'knowledge-graph.db'); + const dbPath = getDataPath('knowledge-graph.db'); const dbExists = fs.existsSync(dbPath); let dbSizeKB = 0; diff --git a/src/memory/UnifiedMemoryStore.ts b/src/memory/UnifiedMemoryStore.ts index 8bf9f489..71f95bf1 100644 --- a/src/memory/UnifiedMemoryStore.ts +++ b/src/memory/UnifiedMemoryStore.ts @@ -851,11 +851,13 @@ export class UnifiedMemoryStore { // This is safe because we already have the existing data merged into updatedMemory. const deleted = this.knowledgeGraph.deleteEntity(id); if (!deleted) { - // Entity was deleted between get() and delete() - race condition - // Log warning but continue with store() as it will create a new entry + // Entity was concurrently deleted between get() and deleteEntity() + // Return false to honor the update contract — caller expects + // true (updated) or false (not found), not silent re-creation logger.warn( - `[UnifiedMemoryStore] Entity ${id} was deleted during update operation, will create new entry` + `[UnifiedMemoryStore] Entity ${id} was concurrently deleted during update, treating as not found` ); + return false; } // Re-store with same ID (now creates a new entry since old was deleted) From bd96cf18c4ce843f5c1e92a0f12e5418d54a8e4a Mon Sep 17 00:00:00 2001 From: KT <677465+kevintseng@users.noreply.github.com> Date: Wed, 25 Feb 2026 16:59:50 +0800 Subject: [PATCH 22/23] docs: update CHANGELOG, CONTRIBUTING version, and MIGRATION accuracy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - CHANGELOG: Add hooks system, metrics tool, semantic search, buddy-do task analysis, and all 14 code review fixes to Unreleased section - CONTRIBUTING: Update version 2.8.10 → 2.8.11, date to 2026-02-25 - MIGRATION: Clarify data directory fallback behavior (~/.memesh first, then ~/.claude-code-buddy automatically) Co-Authored-By: Claude Opus 4.6 --- CHANGELOG.md | 71 +++++++++++++++++++++++++++----------------- MIGRATION.md | 2 +- docs/CONTRIBUTING.md | 4 +-- 3 files changed, 46 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6956a80c..70be9bd6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,52 +9,67 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- **Claude Code Hooks System** - 7 hooks for session lifecycle automation + - `pre-tool-use`: Smart routing (model selection per task type), planning enforcement (SDD+BDD template), dry-run gate (untested code warning), code review reminder + - `post-tool-use`: Pattern detection (EDIT_WITHOUT_READ, GIT_WORKFLOW, FRONTEND_WORK), anomaly detection, session state tracking + - `post-commit`: Saves commit metadata to knowledge graph + - `subagent-stop`: Captures code review findings to knowledge graph + - `session-start`: Cache-first memory recall with SQLite fallback, CLAUDE.md reload + - `stop`: Session archiving, key point extraction, pattern analysis + - `hook-utils`: Shared utilities (sqliteQuery, sqliteBatch, sqliteBatchEntity, readStdin) + - 15 automated tests via custom test harness +- **`memesh-metrics` MCP Tool** - Exposes session, routing, and memory metrics + - Session: modified files, tested files, code review status + - Routing: active model rules, planning enforcement, audit log + - Memory: knowledge graph size and status +- **Semantic Search** - KnowledgeGraph now supports vector similarity search via sqlite-vec + - `semanticSearch()`: Vector search with FTS5 keyword fallback + - `hybridSearch()`: Combines keyword and vector results, deduplicates by entity name + - Async embedding generation via `Xenova/all-MiniLM-L6-v2` + - Keyword fallback uses 0.5 similarity (not 1.0) for honest scoring +- **Smart Task Analysis in `buddy-do`** - Detects task type (bug-fix, feature, refactor, test, performance, security), extracts metadata (goal, reason, expected outcome), queries related context from knowledge graph +- **Bundled Skill: `comprehensive-code-review`** - Included in `scripts/skills/` - **Cloud-Only Fallback Mode** - MCP server can now run without local SQLite when better-sqlite3 is unavailable but MEMESH_API_KEY is configured (#73, #74) - - Implements three-mode architecture: Standard (SQLite) / Cloud-Only (API key) / Error (neither) + - Three-mode architecture: Standard (SQLite) / Cloud-Only (API key) / Error (neither) - Graceful degradation for Claude Desktop Cowork environments - - Memory-dependent tools return helpful error messages in cloud-only mode - - Non-memory tools continue to work normally - Added 13 comprehensive tests for cloud-only mode (4 unit + 9 integration) -- **Claude Desktop Cowork Documentation** - Comprehensive guide at `docs/COWORK_SUPPORT.md` explaining current status, limitations, and future roadmap (#75) -- **BuddyHandlers Test Coverage** - Added 9 comprehensive unit tests covering all buddy commands and cloud-only mode behavior (#19) -- **Enhanced .gitignore** - Improved multi-platform development support with better organization (#21) - - Added macOS patterns (.AppleDouble, .LSOverride) - - Added Windows patterns (Desktop.ini, Thumbs.db:encryptable) - - Added Linux patterns (.directory, .fuse_hidden*) - - Added IDE patterns (Sublime Text, Emacs) - - Better documentation and categorization +- **Claude Desktop Cowork Documentation** - Guide at `docs/COWORK_SUPPORT.md` (#75) +- **BuddyHandlers Test Coverage** - 9 unit tests covering all buddy commands (#19) +- **Enhanced .gitignore** - Multi-platform patterns for macOS, Windows, Linux, IDEs (#21) ### Changed +- **Server Bootstrap** - Structured error handling with error classification (permission, disk, socket) and actionable recovery hints +- **StdioProxyClient** - Buffer overflow handling, proper listener cleanup on connection failure - **Dependencies Update** - Updated 15/17 packages to latest versions (#68) - - @types/node: 25.2.0 → 25.2.3 - - @typescript-eslint/*: 8.54.0 → 8.55.0 - - ajv: 8.17.1 → 8.18.0 - - dotenv: 17.2.3 → 17.3.1 - - glob: 13.0.0 → 13.0.3 - - ink: 6.6.0 → 6.7.0 - - inquirer: 13.2.2 → 13.2.4 - - onnxruntime-node: 1.23.2 → 1.24.1 - - typedoc: 0.28.16 → 0.28.17 - - And 6 more packages + - @types/node, @typescript-eslint/*, ajv, dotenv, glob, ink, inquirer, onnxruntime-node, typedoc, and more - Note: eslint 10.0.0 blocked (typescript-eslint incompatibility) ### Fixed +- **`getEntity()` Exact Match** - Now uses direct SQL `WHERE name = ?` instead of FTS5 fuzzy search that could return wrong entity +- **`post-commit` Hook Exit Code** - Changed from `exit(1)` to `exit(0)` to never block Claude Code on hook errors +- **Entity Name Collision** - `subagent-stop` entity names now include timestamp to prevent UNIQUE constraint failures on multiple reviews per day +- **`sqliteQuery` Error Handling** - Returns `null` on error instead of empty string, allowing callers to distinguish errors from empty results +- **`sqliteBatch` Orphan Prevention** - Propagates errors; `sqliteBatchEntity` cleans up orphaned entities when batch fails +- **Error Logging** - `initVectorSearch` and `deleteEntity` catch blocks now log error context instead of silently discarding +- **Metrics Tool** - Uses PathResolver for DB path (supports custom data directories), `os.homedir()` fallback, bounded audit log read (256KB) +- **`UnifiedMemoryStore.update()` Race Condition** - Returns `false` on concurrent delete instead of creating phantom data +- **Session File Growth** - `post-tool-use` toolCalls array capped at 1000 entries +- **Windows Compatibility** - `pre-tool-use` uses `fileURLToPath()` instead of `URL.pathname` +- **`readStdin` Performance** - Fast-path for already-closed stdin avoids 3-second timeout +- **Hybrid Search Scoring** - Keyword fallback uses `similarity: 0.5` instead of `1.0` for honest scoring in merge - **Cloud-Only Mode Error Handling** - Fixed `handleHookToolUse` to check for cloud-only mode before accessing memory systems -- **Integration Test Failures** - Fixed 3 failing cloud-only mode integration tests - - Added cloud-only check to handleHookToolUse - - Updated buddy-help test expectations for flexible message format - - Removed non-existent handleListAgents test ### Technical - **Server Architecture** - Modified `ServerInitializer` to support three initialization modes - **Type Safety** - Changed all optional memory systems from `null` to `undefined` for TypeScript consistency -- **Test Coverage** - Added 22 new tests (100% passing): 4 unit + 9 integration + 9 BuddyHandlers -- **Code Quality** - 10-dimension comprehensive code review completed (0 Critical, 0 Major, 3 Minor issues) +- **Test Coverage** - 1817 unit tests + 15 hook tests (100% passing) +- **Code Quality** - Three rounds of comprehensive code review, all CRITICAL and MAJOR issues resolved +- **Refactored `subagent-stop`** - Uses `sqliteBatchEntity` (3 spawns) instead of individual `sqliteQuery` calls (N+2 spawns) -**Issues Resolved**: #73 (partial - cloud-only mode), #74 (Phase 2), #75 (docs), #68 (deps), #19 (tests), #21 (.gitignore) +**Issues Resolved**: #73 (cloud-only mode), #74 (Phase 2), #75 (docs), #68 (deps), #19 (tests), #21 (.gitignore) ## [2.8.10] - 2026-02-14 diff --git a/MIGRATION.md b/MIGRATION.md index d5d43c70..c9ab9525 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -123,7 +123,7 @@ All CLI commands remain the same: ### Q: Will my existing data be lost? -**A:** No. All local data stored in `~/.claude-code-buddy/` remains intact and will continue to work with the new package. +**A:** No. The new package checks `~/.memesh/` first, then falls back to `~/.claude-code-buddy/` automatically. Your existing data remains intact and accessible without manual migration. ### Q: What happens if I don't migrate? diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 63da2f0a..064e3a32 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -930,6 +930,6 @@ By contributing, you agree that your contributions will be licensed under the AG --- -**Version**: 2.8.10 -**Last Updated**: 2026-02-12 +**Version**: 2.8.11 +**Last Updated**: 2026-02-25 **Maintainer**: MeMesh Team From 1f8610542199769789930fa31917b6a5559e0af8 Mon Sep 17 00:00:00 2001 From: KT <677465+kevintseng@users.noreply.github.com> Date: Wed, 25 Feb 2026 17:09:50 +0800 Subject: [PATCH 23/23] chore: bump version to 2.9.0 Minor release: hooks system, semantic search, metrics tool, 14 code review fixes, documentation updates. Co-Authored-By: Claude Opus 4.6 --- .claude-plugin/memesh/package-lock.json | 4 ++-- .claude-plugin/memesh/package.json | 2 +- CHANGELOG.md | 2 ++ package-lock.json | 4 ++-- package.json | 2 +- 5 files changed, 8 insertions(+), 6 deletions(-) diff --git a/.claude-plugin/memesh/package-lock.json b/.claude-plugin/memesh/package-lock.json index ada6f04a..99f93368 100644 --- a/.claude-plugin/memesh/package-lock.json +++ b/.claude-plugin/memesh/package-lock.json @@ -1,12 +1,12 @@ { "name": "@pcircle/memesh", - "version": "2.8.11", + "version": "2.9.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@pcircle/memesh", - "version": "2.8.11", + "version": "2.9.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/.claude-plugin/memesh/package.json b/.claude-plugin/memesh/package.json index a6554025..24f349ef 100644 --- a/.claude-plugin/memesh/package.json +++ b/.claude-plugin/memesh/package.json @@ -1,6 +1,6 @@ { "name": "@pcircle/memesh", - "version": "2.8.11", + "version": "2.9.0", "description": "MeMesh — Persistent memory plugin for Claude Code. Remembers architecture decisions, coding patterns, and project context across sessions.", "main": "dist/index.js", "type": "module", diff --git a/CHANGELOG.md b/CHANGELOG.md index 70be9bd6..14459f93 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [2.9.0] - 2026-02-25 + ### Added - **Claude Code Hooks System** - 7 hooks for session lifecycle automation diff --git a/package-lock.json b/package-lock.json index 0c2e6d92..ad07f0aa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@pcircle/memesh", - "version": "2.8.11", + "version": "2.9.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@pcircle/memesh", - "version": "2.8.11", + "version": "2.9.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index a6554025..24f349ef 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@pcircle/memesh", - "version": "2.8.11", + "version": "2.9.0", "description": "MeMesh — Persistent memory plugin for Claude Code. Remembers architecture decisions, coding patterns, and project context across sessions.", "main": "dist/index.js", "type": "module",