universal-agent-protocol 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +462 -0
- package/dist/analyzers/index.d.ts +3 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +656 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/bin/cli.d.ts +3 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +506 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/bin/tool-calls.d.ts +3 -0
- package/dist/bin/tool-calls.d.ts.map +1 -0
- package/dist/bin/tool-calls.js +4 -0
- package/dist/bin/tool-calls.js.map +1 -0
- package/dist/cli/agent.d.ts +20 -0
- package/dist/cli/agent.d.ts.map +1 -0
- package/dist/cli/agent.js +434 -0
- package/dist/cli/agent.js.map +1 -0
- package/dist/cli/analyze.d.ts +7 -0
- package/dist/cli/analyze.d.ts.map +1 -0
- package/dist/cli/analyze.js +103 -0
- package/dist/cli/analyze.js.map +1 -0
- package/dist/cli/coord.d.ts +7 -0
- package/dist/cli/coord.d.ts.map +1 -0
- package/dist/cli/coord.js +138 -0
- package/dist/cli/coord.js.map +1 -0
- package/dist/cli/dashboard.d.ts +8 -0
- package/dist/cli/dashboard.d.ts.map +1 -0
- package/dist/cli/dashboard.js +704 -0
- package/dist/cli/dashboard.js.map +1 -0
- package/dist/cli/deploy.d.ts +19 -0
- package/dist/cli/deploy.d.ts.map +1 -0
- package/dist/cli/deploy.js +267 -0
- package/dist/cli/deploy.js.map +1 -0
- package/dist/cli/droids.d.ts +9 -0
- package/dist/cli/droids.d.ts.map +1 -0
- package/dist/cli/droids.js +227 -0
- package/dist/cli/droids.js.map +1 -0
- package/dist/cli/generate.d.ts +17 -0
- package/dist/cli/generate.d.ts.map +1 -0
- package/dist/cli/generate.js +432 -0
- package/dist/cli/generate.js.map +1 -0
- package/dist/cli/hooks.d.ts +9 -0
- package/dist/cli/hooks.d.ts.map +1 -0
- package/dist/cli/hooks.js +374 -0
- package/dist/cli/hooks.js.map +1 -0
- package/dist/cli/init.d.ts +11 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +316 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/mcp-router.d.ts +16 -0
- package/dist/cli/mcp-router.d.ts.map +1 -0
- package/dist/cli/mcp-router.js +143 -0
- package/dist/cli/mcp-router.js.map +1 -0
- package/dist/cli/memory.d.ts +24 -0
- package/dist/cli/memory.d.ts.map +1 -0
- package/dist/cli/memory.js +877 -0
- package/dist/cli/memory.js.map +1 -0
- package/dist/cli/model.d.ts +15 -0
- package/dist/cli/model.d.ts.map +1 -0
- package/dist/cli/model.js +270 -0
- package/dist/cli/model.js.map +1 -0
- package/dist/cli/patterns.d.ts +26 -0
- package/dist/cli/patterns.d.ts.map +1 -0
- package/dist/cli/patterns.js +587 -0
- package/dist/cli/patterns.js.map +1 -0
- package/dist/cli/setup-mcp-router.d.ts +8 -0
- package/dist/cli/setup-mcp-router.d.ts.map +1 -0
- package/dist/cli/setup-mcp-router.js +163 -0
- package/dist/cli/setup-mcp-router.js.map +1 -0
- package/dist/cli/setup.d.ts +13 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +146 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/cli/sync.d.ts +7 -0
- package/dist/cli/sync.d.ts.map +1 -0
- package/dist/cli/sync.js +26 -0
- package/dist/cli/sync.js.map +1 -0
- package/dist/cli/task.d.ts +33 -0
- package/dist/cli/task.d.ts.map +1 -0
- package/dist/cli/task.js +616 -0
- package/dist/cli/task.js.map +1 -0
- package/dist/cli/tool-calls.d.ts +8 -0
- package/dist/cli/tool-calls.d.ts.map +1 -0
- package/dist/cli/tool-calls.js +239 -0
- package/dist/cli/tool-calls.js.map +1 -0
- package/dist/cli/update.d.ts +10 -0
- package/dist/cli/update.d.ts.map +1 -0
- package/dist/cli/update.js +300 -0
- package/dist/cli/update.js.map +1 -0
- package/dist/cli/visualize.d.ts +77 -0
- package/dist/cli/visualize.d.ts.map +1 -0
- package/dist/cli/visualize.js +287 -0
- package/dist/cli/visualize.js.map +1 -0
- package/dist/cli/worktree.d.ts +9 -0
- package/dist/cli/worktree.d.ts.map +1 -0
- package/dist/cli/worktree.js +175 -0
- package/dist/cli/worktree.js.map +1 -0
- package/dist/coordination/capability-router.d.ts +79 -0
- package/dist/coordination/capability-router.d.ts.map +1 -0
- package/dist/coordination/capability-router.js +324 -0
- package/dist/coordination/capability-router.js.map +1 -0
- package/dist/coordination/database.d.ts +13 -0
- package/dist/coordination/database.d.ts.map +1 -0
- package/dist/coordination/database.js +131 -0
- package/dist/coordination/database.js.map +1 -0
- package/dist/coordination/deploy-batcher.d.ts +101 -0
- package/dist/coordination/deploy-batcher.d.ts.map +1 -0
- package/dist/coordination/deploy-batcher.js +565 -0
- package/dist/coordination/deploy-batcher.js.map +1 -0
- package/dist/coordination/index.d.ts +5 -0
- package/dist/coordination/index.d.ts.map +1 -0
- package/dist/coordination/index.js +5 -0
- package/dist/coordination/index.js.map +1 -0
- package/dist/coordination/service.d.ts +81 -0
- package/dist/coordination/service.d.ts.map +1 -0
- package/dist/coordination/service.js +603 -0
- package/dist/coordination/service.js.map +1 -0
- package/dist/generators/claude-md.d.ts +3 -0
- package/dist/generators/claude-md.d.ts.map +1 -0
- package/dist/generators/claude-md.js +977 -0
- package/dist/generators/claude-md.js.map +1 -0
- package/dist/generators/template-loader.d.ts +105 -0
- package/dist/generators/template-loader.d.ts.map +1 -0
- package/dist/generators/template-loader.js +291 -0
- package/dist/generators/template-loader.js.map +1 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +59 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-router/config/parser.d.ts +9 -0
- package/dist/mcp-router/config/parser.d.ts.map +1 -0
- package/dist/mcp-router/config/parser.js +174 -0
- package/dist/mcp-router/config/parser.js.map +1 -0
- package/dist/mcp-router/executor/client.d.ts +31 -0
- package/dist/mcp-router/executor/client.d.ts.map +1 -0
- package/dist/mcp-router/executor/client.js +187 -0
- package/dist/mcp-router/executor/client.js.map +1 -0
- package/dist/mcp-router/index.d.ts +22 -0
- package/dist/mcp-router/index.d.ts.map +1 -0
- package/dist/mcp-router/index.js +18 -0
- package/dist/mcp-router/index.js.map +1 -0
- package/dist/mcp-router/output-compressor.d.ts +26 -0
- package/dist/mcp-router/output-compressor.d.ts.map +1 -0
- package/dist/mcp-router/output-compressor.js +236 -0
- package/dist/mcp-router/output-compressor.js.map +1 -0
- package/dist/mcp-router/search/fuzzy.d.ts +26 -0
- package/dist/mcp-router/search/fuzzy.d.ts.map +1 -0
- package/dist/mcp-router/search/fuzzy.js +94 -0
- package/dist/mcp-router/search/fuzzy.js.map +1 -0
- package/dist/mcp-router/server.d.ts +50 -0
- package/dist/mcp-router/server.d.ts.map +1 -0
- package/dist/mcp-router/server.js +229 -0
- package/dist/mcp-router/server.js.map +1 -0
- package/dist/mcp-router/session-stats.d.ts +37 -0
- package/dist/mcp-router/session-stats.d.ts.map +1 -0
- package/dist/mcp-router/session-stats.js +56 -0
- package/dist/mcp-router/session-stats.js.map +1 -0
- package/dist/mcp-router/tools/discover.d.ts +37 -0
- package/dist/mcp-router/tools/discover.d.ts.map +1 -0
- package/dist/mcp-router/tools/discover.js +65 -0
- package/dist/mcp-router/tools/discover.js.map +1 -0
- package/dist/mcp-router/tools/execute.d.ts +43 -0
- package/dist/mcp-router/tools/execute.d.ts.map +1 -0
- package/dist/mcp-router/tools/execute.js +103 -0
- package/dist/mcp-router/tools/execute.js.map +1 -0
- package/dist/mcp-router/types.d.ts +62 -0
- package/dist/mcp-router/types.d.ts.map +1 -0
- package/dist/mcp-router/types.js +6 -0
- package/dist/mcp-router/types.js.map +1 -0
- package/dist/memory/adaptive-context.d.ts +146 -0
- package/dist/memory/adaptive-context.d.ts.map +1 -0
- package/dist/memory/adaptive-context.js +1022 -0
- package/dist/memory/adaptive-context.js.map +1 -0
- package/dist/memory/agent-scoped-memory.d.ts +67 -0
- package/dist/memory/agent-scoped-memory.d.ts.map +1 -0
- package/dist/memory/agent-scoped-memory.js +126 -0
- package/dist/memory/agent-scoped-memory.js.map +1 -0
- package/dist/memory/backends/base.d.ts +18 -0
- package/dist/memory/backends/base.d.ts.map +1 -0
- package/dist/memory/backends/base.js +2 -0
- package/dist/memory/backends/base.js.map +1 -0
- package/dist/memory/backends/factory.d.ts +4 -0
- package/dist/memory/backends/factory.d.ts.map +1 -0
- package/dist/memory/backends/factory.js +53 -0
- package/dist/memory/backends/factory.js.map +1 -0
- package/dist/memory/backends/github.d.ts +22 -0
- package/dist/memory/backends/github.d.ts.map +1 -0
- package/dist/memory/backends/github.js +118 -0
- package/dist/memory/backends/github.js.map +1 -0
- package/dist/memory/backends/qdrant-cloud.d.ts +32 -0
- package/dist/memory/backends/qdrant-cloud.d.ts.map +1 -0
- package/dist/memory/backends/qdrant-cloud.js +168 -0
- package/dist/memory/backends/qdrant-cloud.js.map +1 -0
- package/dist/memory/context-compressor.d.ts +74 -0
- package/dist/memory/context-compressor.d.ts.map +1 -0
- package/dist/memory/context-compressor.js +289 -0
- package/dist/memory/context-compressor.js.map +1 -0
- package/dist/memory/correction-propagator.d.ts +44 -0
- package/dist/memory/correction-propagator.d.ts.map +1 -0
- package/dist/memory/correction-propagator.js +156 -0
- package/dist/memory/correction-propagator.js.map +1 -0
- package/dist/memory/daily-log.d.ts +67 -0
- package/dist/memory/daily-log.d.ts.map +1 -0
- package/dist/memory/daily-log.js +143 -0
- package/dist/memory/daily-log.js.map +1 -0
- package/dist/memory/dynamic-retrieval.d.ts +110 -0
- package/dist/memory/dynamic-retrieval.d.ts.map +1 -0
- package/dist/memory/dynamic-retrieval.js +688 -0
- package/dist/memory/dynamic-retrieval.js.map +1 -0
- package/dist/memory/embeddings.d.ts +116 -0
- package/dist/memory/embeddings.d.ts.map +1 -0
- package/dist/memory/embeddings.js +461 -0
- package/dist/memory/embeddings.js.map +1 -0
- package/dist/memory/hierarchical-memory.d.ts +141 -0
- package/dist/memory/hierarchical-memory.d.ts.map +1 -0
- package/dist/memory/hierarchical-memory.js +477 -0
- package/dist/memory/hierarchical-memory.js.map +1 -0
- package/dist/memory/memory-consolidator.d.ts +124 -0
- package/dist/memory/memory-consolidator.d.ts.map +1 -0
- package/dist/memory/memory-consolidator.js +514 -0
- package/dist/memory/memory-consolidator.js.map +1 -0
- package/dist/memory/memory-maintenance.d.ts +39 -0
- package/dist/memory/memory-maintenance.d.ts.map +1 -0
- package/dist/memory/memory-maintenance.js +305 -0
- package/dist/memory/memory-maintenance.js.map +1 -0
- package/dist/memory/model-router.d.ts +102 -0
- package/dist/memory/model-router.d.ts.map +1 -0
- package/dist/memory/model-router.js +448 -0
- package/dist/memory/model-router.js.map +1 -0
- package/dist/memory/multi-view-memory.d.ts +134 -0
- package/dist/memory/multi-view-memory.d.ts.map +1 -0
- package/dist/memory/multi-view-memory.js +420 -0
- package/dist/memory/multi-view-memory.js.map +1 -0
- package/dist/memory/prepopulate.d.ts +76 -0
- package/dist/memory/prepopulate.d.ts.map +1 -0
- package/dist/memory/prepopulate.js +815 -0
- package/dist/memory/prepopulate.js.map +1 -0
- package/dist/memory/semantic-compression.d.ts +77 -0
- package/dist/memory/semantic-compression.d.ts.map +1 -0
- package/dist/memory/semantic-compression.js +348 -0
- package/dist/memory/semantic-compression.js.map +1 -0
- package/dist/memory/serverless-qdrant.d.ts +102 -0
- package/dist/memory/serverless-qdrant.d.ts.map +1 -0
- package/dist/memory/serverless-qdrant.js +369 -0
- package/dist/memory/serverless-qdrant.js.map +1 -0
- package/dist/memory/short-term/factory.d.ts +26 -0
- package/dist/memory/short-term/factory.d.ts.map +1 -0
- package/dist/memory/short-term/factory.js +28 -0
- package/dist/memory/short-term/factory.js.map +1 -0
- package/dist/memory/short-term/indexeddb.d.ts +25 -0
- package/dist/memory/short-term/indexeddb.d.ts.map +1 -0
- package/dist/memory/short-term/indexeddb.js +64 -0
- package/dist/memory/short-term/indexeddb.js.map +1 -0
- package/dist/memory/short-term/schema.d.ts +6 -0
- package/dist/memory/short-term/schema.d.ts.map +1 -0
- package/dist/memory/short-term/schema.js +119 -0
- package/dist/memory/short-term/schema.js.map +1 -0
- package/dist/memory/short-term/sqlite.d.ts +50 -0
- package/dist/memory/short-term/sqlite.d.ts.map +1 -0
- package/dist/memory/short-term/sqlite.js +221 -0
- package/dist/memory/short-term/sqlite.js.map +1 -0
- package/dist/memory/speculative-cache.d.ts +111 -0
- package/dist/memory/speculative-cache.d.ts.map +1 -0
- package/dist/memory/speculative-cache.js +409 -0
- package/dist/memory/speculative-cache.js.map +1 -0
- package/dist/memory/task-classifier.d.ts +34 -0
- package/dist/memory/task-classifier.d.ts.map +1 -0
- package/dist/memory/task-classifier.js +300 -0
- package/dist/memory/task-classifier.js.map +1 -0
- package/dist/memory/terminal-bench-knowledge.d.ts +48 -0
- package/dist/memory/terminal-bench-knowledge.d.ts.map +1 -0
- package/dist/memory/terminal-bench-knowledge.js +399 -0
- package/dist/memory/terminal-bench-knowledge.js.map +1 -0
- package/dist/memory/write-gate.d.ts +39 -0
- package/dist/memory/write-gate.d.ts.map +1 -0
- package/dist/memory/write-gate.js +190 -0
- package/dist/memory/write-gate.js.map +1 -0
- package/dist/models/executor.d.ts +130 -0
- package/dist/models/executor.d.ts.map +1 -0
- package/dist/models/executor.js +383 -0
- package/dist/models/executor.js.map +1 -0
- package/dist/models/index.d.ts +15 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +17 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/planner.d.ts +71 -0
- package/dist/models/planner.d.ts.map +1 -0
- package/dist/models/planner.js +344 -0
- package/dist/models/planner.js.map +1 -0
- package/dist/models/router.d.ts +75 -0
- package/dist/models/router.d.ts.map +1 -0
- package/dist/models/router.js +344 -0
- package/dist/models/router.js.map +1 -0
- package/dist/models/types.d.ts +370 -0
- package/dist/models/types.d.ts.map +1 -0
- package/dist/models/types.js +181 -0
- package/dist/models/types.js.map +1 -0
- package/dist/tasks/coordination.d.ts +74 -0
- package/dist/tasks/coordination.d.ts.map +1 -0
- package/dist/tasks/coordination.js +237 -0
- package/dist/tasks/coordination.js.map +1 -0
- package/dist/tasks/database.d.ts +14 -0
- package/dist/tasks/database.d.ts.map +1 -0
- package/dist/tasks/database.js +128 -0
- package/dist/tasks/database.js.map +1 -0
- package/dist/tasks/index.d.ts +5 -0
- package/dist/tasks/index.d.ts.map +1 -0
- package/dist/tasks/index.js +5 -0
- package/dist/tasks/index.js.map +1 -0
- package/dist/tasks/service.d.ts +39 -0
- package/dist/tasks/service.d.ts.map +1 -0
- package/dist/tasks/service.js +582 -0
- package/dist/tasks/service.js.map +1 -0
- package/dist/tasks/types.d.ts +224 -0
- package/dist/tasks/types.d.ts.map +1 -0
- package/dist/tasks/types.js +64 -0
- package/dist/tasks/types.js.map +1 -0
- package/dist/types/analysis.d.ts +82 -0
- package/dist/types/analysis.d.ts.map +1 -0
- package/dist/types/analysis.js +2 -0
- package/dist/types/analysis.js.map +1 -0
- package/dist/types/config.d.ts +3023 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +292 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/coordination.d.ts +240 -0
- package/dist/types/coordination.d.ts.map +1 -0
- package/dist/types/coordination.js +43 -0
- package/dist/types/coordination.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/calculate-average.d.ts +15 -0
- package/dist/utils/calculate-average.d.ts.map +1 -0
- package/dist/utils/calculate-average.js +21 -0
- package/dist/utils/calculate-average.js.map +1 -0
- package/dist/utils/config-manager.d.ts +30 -0
- package/dist/utils/config-manager.d.ts.map +1 -0
- package/dist/utils/config-manager.js +41 -0
- package/dist/utils/config-manager.js.map +1 -0
- package/dist/utils/dijkstra.d.ts +17 -0
- package/dist/utils/dijkstra.d.ts.map +1 -0
- package/dist/utils/dijkstra.js +91 -0
- package/dist/utils/dijkstra.js.map +1 -0
- package/dist/utils/fetch-with-retry.d.ts +5 -0
- package/dist/utils/fetch-with-retry.d.ts.map +1 -0
- package/dist/utils/fetch-with-retry.js +61 -0
- package/dist/utils/fetch-with-retry.js.map +1 -0
- package/dist/utils/merge-claude-md.d.ts +28 -0
- package/dist/utils/merge-claude-md.d.ts.map +1 -0
- package/dist/utils/merge-claude-md.js +342 -0
- package/dist/utils/merge-claude-md.js.map +1 -0
- package/dist/utils/order-processor-refactored.d.ts +126 -0
- package/dist/utils/order-processor-refactored.d.ts.map +1 -0
- package/dist/utils/order-processor-refactored.js +165 -0
- package/dist/utils/order-processor-refactored.js.map +1 -0
- package/dist/utils/order-processor-strategy.d.ts +72 -0
- package/dist/utils/order-processor-strategy.d.ts.map +1 -0
- package/dist/utils/order-processor-strategy.js +158 -0
- package/dist/utils/order-processor-strategy.js.map +1 -0
- package/dist/utils/order-processor.d.ts +242 -0
- package/dist/utils/order-processor.d.ts.map +1 -0
- package/dist/utils/order-processor.js +370 -0
- package/dist/utils/order-processor.js.map +1 -0
- package/dist/utils/rate-limiter-simple.d.ts +58 -0
- package/dist/utils/rate-limiter-simple.d.ts.map +1 -0
- package/dist/utils/rate-limiter-simple.js +100 -0
- package/dist/utils/rate-limiter-simple.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +62 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +150 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/string-similarity.d.ts +37 -0
- package/dist/utils/string-similarity.d.ts.map +1 -0
- package/dist/utils/string-similarity.js +114 -0
- package/dist/utils/string-similarity.js.map +1 -0
- package/dist/utils/validate-json.d.ts +51 -0
- package/dist/utils/validate-json.d.ts.map +1 -0
- package/dist/utils/validate-json.js +99 -0
- package/dist/utils/validate-json.js.map +1 -0
- package/package.json +96 -0
- package/templates/CLAUDE.template.md +11 -0
- package/templates/CLAUDE_ARCHITECTURE.template.md +103 -0
- package/templates/CLAUDE_CODING.template.md +125 -0
- package/templates/CLAUDE_DROIDS.template.md +109 -0
- package/templates/CLAUDE_MEMORY.template.md +130 -0
- package/templates/CLAUDE_WORKFLOWS.template.md +136 -0
- package/templates/PROJECT.template.md +209 -0
- package/templates/SCHEMA.md +57 -0
- package/templates/archive/CLAUDE.template.root-v6.md +762 -0
- package/templates/archive/CLAUDE.template.v6.md +762 -0
- package/templates/hooks/pre-compact.sh +68 -0
- package/templates/hooks/session-start.sh +106 -0
- package/tools/agents/README.md +224 -0
- package/tools/agents/UAP/README.md +351 -0
- package/tools/agents/UAP/__init__.py +9 -0
- package/tools/agents/UAP/cli.py +675 -0
- package/tools/agents/UAP/version.py +2 -0
- package/tools/agents/benchmarks/benchmark_memory_systems.py +637 -0
- package/tools/agents/benchmarks/results/benchmark_20260106_064817.json +170 -0
- package/tools/agents/benchmarks/results/benchmark_20260106_064817.md +51 -0
- package/tools/agents/config/chat_template.jinja +172 -0
- package/tools/agents/docker-compose.qdrant.yml +24 -0
- package/tools/agents/migrations/apply.py +256 -0
- package/tools/agents/scripts/fix_qwen_chat_template.py +314 -0
- package/tools/agents/scripts/init_qdrant.py +151 -0
- package/tools/agents/scripts/memory_migration.py +518 -0
- package/tools/agents/scripts/migrate_memory_to_qdrant.py +113 -0
- package/tools/agents/scripts/query_memory.py +189 -0
- package/tools/agents/scripts/qwen_tool_call_test.py +419 -0
- package/tools/agents/scripts/qwen_tool_call_wrapper.py +517 -0
- package/tools/agents/scripts/start-services.sh +96 -0
- package/tools/agents/tests/test_uap_compliance.py +257 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# UAP Pre-Compact Hook for Claude Code
|
|
3
|
+
# 1. Checks compliance state and warns on violations
|
|
4
|
+
# 2. Writes a timestamp marker to the daily log before context compaction
|
|
5
|
+
# 3. Marks any agents registered by this session as completed
|
|
6
|
+
# Fails safely - never blocks the agent.
|
|
7
|
+
set -euo pipefail
|
|
8
|
+
|
|
9
|
+
PROJECT_DIR="${CLAUDE_PROJECT_DIR:-.}"
|
|
10
|
+
DB_PATH="${PROJECT_DIR}/agents/data/memory/short_term.db"
|
|
11
|
+
COORD_DB="${PROJECT_DIR}/agents/data/coordination/coordination.db"
|
|
12
|
+
|
|
13
|
+
if [ ! -f "$DB_PATH" ]; then
|
|
14
|
+
exit 0
|
|
15
|
+
fi
|
|
16
|
+
|
|
17
|
+
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
18
|
+
|
|
19
|
+
# Record a compaction marker in memory so sessions can detect context resets
|
|
20
|
+
sqlite3 "$DB_PATH" "
|
|
21
|
+
INSERT OR IGNORE INTO memories (timestamp, type, content)
|
|
22
|
+
VALUES ('$TIMESTAMP', 'action', '[pre-compact] Context compaction at $TIMESTAMP');
|
|
23
|
+
" 2>/dev/null || true
|
|
24
|
+
|
|
25
|
+
# Check if any lessons were stored this session
|
|
26
|
+
recent_lessons=$(sqlite3 "$DB_PATH" "
|
|
27
|
+
SELECT COUNT(*) FROM session_memories
|
|
28
|
+
WHERE timestamp >= datetime('now', '-2 hours')
|
|
29
|
+
AND type = 'decision';
|
|
30
|
+
" 2>/dev/null || echo "0")
|
|
31
|
+
|
|
32
|
+
output=""
|
|
33
|
+
|
|
34
|
+
# Compliance reminder on compaction
|
|
35
|
+
output+="<system-reminder>"$'\n'
|
|
36
|
+
output+="## UAP COMPLIANCE REMINDER (Pre-Compact)"$'\n'
|
|
37
|
+
output+=""$'\n'
|
|
38
|
+
output+="Context is being compacted. Before continuing work after compaction:"$'\n'
|
|
39
|
+
output+="1. Re-run: uap task ready"$'\n'
|
|
40
|
+
output+="2. Re-query memory for current task context"$'\n'
|
|
41
|
+
output+="3. Check for stale worktrees: uap worktree list"$'\n'
|
|
42
|
+
output+=""$'\n'
|
|
43
|
+
|
|
44
|
+
if [ "$recent_lessons" = "0" ]; then
|
|
45
|
+
output+="WARNING: No lessons stored this session. Before compaction completes,"$'\n'
|
|
46
|
+
output+="store a summary: sqlite3 ./agents/data/memory/short_term.db \"INSERT INTO session_memories (session_id,timestamp,type,content,importance) VALUES ('current',datetime('now'),'decision','<summary>',7);\""$'\n'
|
|
47
|
+
fi
|
|
48
|
+
|
|
49
|
+
output+="</system-reminder>"$'\n'
|
|
50
|
+
|
|
51
|
+
echo "$output"
|
|
52
|
+
|
|
53
|
+
# Clean up agents with recent heartbeats (likely from this session being compacted)
|
|
54
|
+
if [ -f "$COORD_DB" ]; then
|
|
55
|
+
sqlite3 "$COORD_DB" "
|
|
56
|
+
DELETE FROM work_claims WHERE agent_id IN (
|
|
57
|
+
SELECT id FROM agent_registry
|
|
58
|
+
WHERE status='active' AND last_heartbeat >= datetime('now','-5 minutes')
|
|
59
|
+
);
|
|
60
|
+
UPDATE work_announcements SET completed_at='$TIMESTAMP'
|
|
61
|
+
WHERE completed_at IS NULL AND agent_id IN (
|
|
62
|
+
SELECT id FROM agent_registry
|
|
63
|
+
WHERE status='active' AND last_heartbeat >= datetime('now','-5 minutes')
|
|
64
|
+
);
|
|
65
|
+
UPDATE agent_registry SET status='completed'
|
|
66
|
+
WHERE status='active' AND last_heartbeat >= datetime('now','-5 minutes');
|
|
67
|
+
" 2>/dev/null || true
|
|
68
|
+
fi
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# UAP Session Start Hook for Claude Code
|
|
3
|
+
# COMPLIANCE ENFORCEMENT: Outputs mandatory protocol checklist
|
|
4
|
+
# that the AI agent MUST complete before any work begins.
|
|
5
|
+
# Fails safely - never blocks the agent.
|
|
6
|
+
set -euo pipefail
|
|
7
|
+
|
|
8
|
+
PROJECT_DIR="${CLAUDE_PROJECT_DIR:-.}"
|
|
9
|
+
DB_PATH="${PROJECT_DIR}/agents/data/memory/short_term.db"
|
|
10
|
+
COORD_DB="${PROJECT_DIR}/agents/data/coordination/coordination.db"
|
|
11
|
+
|
|
12
|
+
if [ ! -f "$DB_PATH" ]; then
|
|
13
|
+
exit 0
|
|
14
|
+
fi
|
|
15
|
+
|
|
16
|
+
# Clean stale agents from coordination DB (heartbeat >24h old)
|
|
17
|
+
if [ -f "$COORD_DB" ]; then
|
|
18
|
+
sqlite3 "$COORD_DB" "
|
|
19
|
+
DELETE FROM work_claims WHERE agent_id IN (
|
|
20
|
+
SELECT id FROM agent_registry
|
|
21
|
+
WHERE status IN ('active','idle') AND last_heartbeat < datetime('now','-24 hours')
|
|
22
|
+
);
|
|
23
|
+
DELETE FROM work_announcements WHERE agent_id IN (
|
|
24
|
+
SELECT id FROM agent_registry
|
|
25
|
+
WHERE status IN ('active','idle') AND last_heartbeat < datetime('now','-24 hours')
|
|
26
|
+
) AND completed_at IS NULL;
|
|
27
|
+
UPDATE agent_registry SET status='failed'
|
|
28
|
+
WHERE status IN ('active','idle') AND last_heartbeat < datetime('now','-24 hours');
|
|
29
|
+
DELETE FROM agent_registry
|
|
30
|
+
WHERE status IN ('completed','failed') AND started_at < datetime('now','-7 days');
|
|
31
|
+
DELETE FROM agent_messages WHERE created_at < datetime('now','-24 hours');
|
|
32
|
+
" 2>/dev/null || true
|
|
33
|
+
fi
|
|
34
|
+
|
|
35
|
+
output=""
|
|
36
|
+
|
|
37
|
+
# ============================================================
|
|
38
|
+
# COMPLIANCE ENFORCEMENT BLOCK
|
|
39
|
+
# This is injected as system context. The AI MUST follow these.
|
|
40
|
+
# ============================================================
|
|
41
|
+
output+="<system-reminder>"$'\n'
|
|
42
|
+
output+="## UAP COMPLIANCE - MANDATORY PROTOCOL"$'\n'
|
|
43
|
+
output+=""$'\n'
|
|
44
|
+
output+="You MUST complete these steps IN ORDER before doing ANY work."$'\n'
|
|
45
|
+
output+="Skipping ANY step is a critical protocol violation."$'\n'
|
|
46
|
+
output+=""$'\n'
|
|
47
|
+
output+="### BEFORE WORK (execute these commands NOW):"$'\n'
|
|
48
|
+
output+="1. Run: uap task ready"$'\n'
|
|
49
|
+
output+="2. Run: sqlite3 ./agents/data/memory/short_term.db \"SELECT type, substr(content,1,80) FROM memories ORDER BY id DESC LIMIT 5;\""$'\n'
|
|
50
|
+
output+="3. Run: uap memory query \"<relevant to user request>\""$'\n'
|
|
51
|
+
output+="4. On work request: Run: uap task create --type <task|bug|feature> --title \"<description>\""$'\n'
|
|
52
|
+
output+=""$'\n'
|
|
53
|
+
output+="### DURING WORK:"$'\n'
|
|
54
|
+
output+="5. ALL file changes MUST use worktree: uap worktree create <slug>"$'\n'
|
|
55
|
+
output+="6. Work in .worktrees/NNN-<slug>/ directory"$'\n'
|
|
56
|
+
output+=""$'\n'
|
|
57
|
+
output+="### BEFORE COMMIT:"$'\n'
|
|
58
|
+
output+="7. Self-review: git diff"$'\n'
|
|
59
|
+
output+="8. Run tests if applicable"$'\n'
|
|
60
|
+
output+=""$'\n'
|
|
61
|
+
output+="### AFTER WORK:"$'\n'
|
|
62
|
+
output+="9. Store lesson: sqlite3 ./agents/data/memory/short_term.db \"INSERT INTO session_memories (session_id,timestamp,type,content,importance) VALUES ('current',datetime('now'),'decision','<summary of work and lessons>',7);\""$'\n'
|
|
63
|
+
output+="10. Clean up worktree after PR merge: uap worktree cleanup <id>"$'\n'
|
|
64
|
+
output+=""$'\n'
|
|
65
|
+
output+="FAILURE TO COMPLY = CRITICAL VIOLATION. This is life or death."$'\n'
|
|
66
|
+
output+="</system-reminder>"$'\n\n'
|
|
67
|
+
|
|
68
|
+
# Recent memories (last 24h, high importance)
|
|
69
|
+
recent=$(sqlite3 "$DB_PATH" "
|
|
70
|
+
SELECT type, substr(content, 1, 120) FROM memories
|
|
71
|
+
WHERE timestamp >= datetime('now', '-1 day')
|
|
72
|
+
ORDER BY id DESC
|
|
73
|
+
LIMIT 10;
|
|
74
|
+
" 2>/dev/null || true)
|
|
75
|
+
|
|
76
|
+
if [ -n "$recent" ]; then
|
|
77
|
+
output+="## Recent Memory Context"$'\n'
|
|
78
|
+
output+="$recent"$'\n\n'
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
# Open loops from session memories
|
|
82
|
+
open_loops=$(sqlite3 "$DB_PATH" "
|
|
83
|
+
SELECT content FROM session_memories
|
|
84
|
+
WHERE type IN ('action','goal','decision')
|
|
85
|
+
AND importance >= 7
|
|
86
|
+
ORDER BY id DESC
|
|
87
|
+
LIMIT 5;
|
|
88
|
+
" 2>/dev/null || true)
|
|
89
|
+
|
|
90
|
+
if [ -n "$open_loops" ]; then
|
|
91
|
+
output+="## Open Loops"$'\n'
|
|
92
|
+
output+="$open_loops"$'\n'
|
|
93
|
+
fi
|
|
94
|
+
|
|
95
|
+
# Stale worktrees warning
|
|
96
|
+
if [ -d "${PROJECT_DIR}/.worktrees" ]; then
|
|
97
|
+
stale_count=$(find "${PROJECT_DIR}/.worktrees" -maxdepth 1 -mindepth 1 -type d 2>/dev/null | wc -l)
|
|
98
|
+
if [ "$stale_count" -gt 0 ]; then
|
|
99
|
+
output+=$'\n'"## Stale Worktrees Warning"$'\n'
|
|
100
|
+
output+="There are $stale_count worktrees. Run 'uap worktree list' and clean up merged ones."$'\n'
|
|
101
|
+
fi
|
|
102
|
+
fi
|
|
103
|
+
|
|
104
|
+
if [ -n "$output" ]; then
|
|
105
|
+
echo "$output"
|
|
106
|
+
fi
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
# Qwen3.5 Tool Call Fixes
|
|
2
|
+
|
|
3
|
+
This directory contains tools and configurations for fixing Qwen3.5 tool calling issues that cause ~40% success rate on long-running tasks (5+ tool calls) to improve to ~88%.
|
|
4
|
+
|
|
5
|
+
## Performance Improvement
|
|
6
|
+
|
|
7
|
+
| Scenario | Without Fixes | With Fixes |
|
|
8
|
+
| ------------------- | ------------- | ---------- |
|
|
9
|
+
| Single tool call | ~95% | ~98% |
|
|
10
|
+
| 2-3 tool calls | ~70% | ~92% |
|
|
11
|
+
| 5+ tool calls | ~40% | ~88% |
|
|
12
|
+
| Long context (50K+) | ~30% | ~85% |
|
|
13
|
+
|
|
14
|
+
## Files
|
|
15
|
+
|
|
16
|
+
### `config/chat_template.jinja`
|
|
17
|
+
|
|
18
|
+
The core fix: a patched Jinja2 template for Qwen3.5 that adds conditional wrappers around tool call argument iteration.
|
|
19
|
+
|
|
20
|
+
**Key Fix (line 138-144):**
|
|
21
|
+
|
|
22
|
+
```jinja2
|
|
23
|
+
{%- if tool_call.arguments is mapping %}
|
|
24
|
+
{%- for args_name, args_value in tool_call.arguments|items %}
|
|
25
|
+
{{- '<parameter=' + args_name + '>\n' }}
|
|
26
|
+
{%- set args_value = args_value | tojson | safe if args_value is mapping or (args_value is sequence and args_value is not string) else args_value | string %}
|
|
27
|
+
{{- args_value }}
|
|
28
|
+
{{- '\n</parameter>\n' }}
|
|
29
|
+
{%- endfor %}
|
|
30
|
+
{%- endif %}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
This prevents template parsing failures after the first 1-2 tool calls.
|
|
34
|
+
|
|
35
|
+
### `scripts/fix_qwen_chat_template.py`
|
|
36
|
+
|
|
37
|
+
Python script to automatically apply the template fix to existing chat templates.
|
|
38
|
+
|
|
39
|
+
**Usage:**
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
python3 fix_qwen_chat_template.py [template_file]
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### `scripts/qwen_tool_call_wrapper.py`
|
|
46
|
+
|
|
47
|
+
OpenAI-compatible client with automatic retry logic and validation for Qwen3.5 tool calls.
|
|
48
|
+
|
|
49
|
+
**Features:**
|
|
50
|
+
|
|
51
|
+
- Automatic retry with exponential backoff
|
|
52
|
+
- Prompt correction for failed tool calls
|
|
53
|
+
- Metrics tracking and monitoring
|
|
54
|
+
- Thinking mode disablement
|
|
55
|
+
- Template validation
|
|
56
|
+
|
|
57
|
+
**Usage:**
|
|
58
|
+
|
|
59
|
+
```python
|
|
60
|
+
from qwen_tool_call_wrapper import Qwen35ToolCallClient
|
|
61
|
+
|
|
62
|
+
client = Qwen35ToolCallClient()
|
|
63
|
+
response = client.chat_with_tools(
|
|
64
|
+
messages=[{"role": "user", "content": "Call read_file with path='/etc/hosts'"}],
|
|
65
|
+
tools=[...]
|
|
66
|
+
)
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### `scripts/qwen_tool_call_test.py`
|
|
70
|
+
|
|
71
|
+
Reliability test suite for validating Qwen3.5 tool call performance.
|
|
72
|
+
|
|
73
|
+
**Usage:**
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
python3 qwen_tool_call_test.py --verbose
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**Tests:**
|
|
80
|
+
|
|
81
|
+
1. Single tool call (baseline)
|
|
82
|
+
2. Two consecutive tool calls
|
|
83
|
+
3. Three tool calls
|
|
84
|
+
4. Five tool calls (stress test)
|
|
85
|
+
5. Reasoning content interference
|
|
86
|
+
6. Invalid format recovery
|
|
87
|
+
|
|
88
|
+
## Installation
|
|
89
|
+
|
|
90
|
+
### Option 1: Using UAP CLI (Recommended)
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
uap tool-calls setup
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
This will:
|
|
97
|
+
|
|
98
|
+
1. Copy `chat_template.jinja` to `tools/agents/config/`
|
|
99
|
+
2. Copy Python scripts to `tools/agents/scripts/`
|
|
100
|
+
3. Print setup instructions for llama.cpp and OpenCode
|
|
101
|
+
|
|
102
|
+
### Option 2: Manual Installation
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
# Copy template
|
|
106
|
+
mkdir -p tools/agents/config
|
|
107
|
+
cp tools/agents/config/chat_template.jinja tools/agents/config/
|
|
108
|
+
|
|
109
|
+
# Copy scripts
|
|
110
|
+
mkdir -p tools/agents/scripts
|
|
111
|
+
cp tools/agents/scripts/*.py tools/agents/scripts/
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Integration
|
|
115
|
+
|
|
116
|
+
### llama.cpp
|
|
117
|
+
|
|
118
|
+
**Start llama-server with the fixed template:**
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
./llama-server \
|
|
122
|
+
--model ~/models/Qwen3.5-35B-Instruct-Q4_K_M.gguf \
|
|
123
|
+
--chat-template-file tools/agents/config/chat_template.jinja \
|
|
124
|
+
--jinja \
|
|
125
|
+
--port 8080 \
|
|
126
|
+
--ctx-size 262144 \
|
|
127
|
+
--batch-size 4096 \
|
|
128
|
+
--threads $(nproc)
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**Key flags:**
|
|
132
|
+
|
|
133
|
+
- `--chat-template-file`: Path to the fixed template
|
|
134
|
+
- `--jinja`: Enable Jinja2 template processing
|
|
135
|
+
|
|
136
|
+
### OpenCode
|
|
137
|
+
|
|
138
|
+
**1. Copy template to OpenCode agent config:**
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
mkdir -p ~/.opencode/agent
|
|
142
|
+
cp tools/agents/config/chat_template.jinja ~/.opencode/agent/
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**2. Update `.opencode/config.json`:**
|
|
146
|
+
|
|
147
|
+
```json
|
|
148
|
+
{
|
|
149
|
+
"provider": "llama.cpp",
|
|
150
|
+
"model": "qwen35-a3b-iq4xs",
|
|
151
|
+
"chatTemplate": "jinja",
|
|
152
|
+
"baseURL": "http://localhost:8080/v1"
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**3. Restart OpenCode**
|
|
157
|
+
|
|
158
|
+
## Verification
|
|
159
|
+
|
|
160
|
+
### Check Setup
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
uap tool-calls status
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Run Tests
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
python3 tools/agents/scripts/qwen_tool_call_test.py --verbose
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Expected results:
|
|
173
|
+
|
|
174
|
+
- Single tool call: ~98% success rate
|
|
175
|
+
- 2-3 tool calls: ~92% success rate
|
|
176
|
+
- 5+ tool calls: ~88% success rate
|
|
177
|
+
|
|
178
|
+
### Test Tool Call Manually
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
curl -X POST http://localhost:8080/v1/chat/completions \
|
|
182
|
+
-H "Content-Type: application/json" \
|
|
183
|
+
-d '{
|
|
184
|
+
"model": "qwen35-a3b-iq4xs",
|
|
185
|
+
"messages": [{"role": "user", "content": "Read /etc/hosts"}],
|
|
186
|
+
"tools": [{"type": "function", "function": {"name": "read_file"}}]
|
|
187
|
+
}'
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## Troubleshooting
|
|
191
|
+
|
|
192
|
+
### Issue: Tool calls fail after 1-2 attempts
|
|
193
|
+
|
|
194
|
+
**Solution:** Verify template was loaded with `--chat-template-file` flag
|
|
195
|
+
|
|
196
|
+
### Issue: Template not found
|
|
197
|
+
|
|
198
|
+
**Solution:** Check path exists:
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
ls -la tools/agents/config/chat_template.jinja
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### Issue: OpenCode still using old template
|
|
205
|
+
|
|
206
|
+
**Solution:** Restart OpenCode after copying template
|
|
207
|
+
|
|
208
|
+
### Issue: Python scripts not found
|
|
209
|
+
|
|
210
|
+
**Solution:** Ensure you're in the scripts directory:
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
cd tools/agents/scripts
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
## References
|
|
217
|
+
|
|
218
|
+
- **Original Issue:** Hugging Face Discussion #4 - Qwen3.5 tool call failures
|
|
219
|
+
- **Source:** pay2u project - Qwen3.5 35B A3B tool call fixes
|
|
220
|
+
- **Performance Data:** Factory.AI droid `qwen35-tool-call-optimized.md`
|
|
221
|
+
|
|
222
|
+
## License
|
|
223
|
+
|
|
224
|
+
MIT License - Same as universal-agent-protocol
|