macro-agent 0.1.0 → 0.1.2
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/.claude/settings.local.json +3 -1
- package/.sudocode/issues.jsonl +28 -0
- package/.sudocode/specs.jsonl +8 -0
- package/CLAUDE.md +25 -17
- package/README.md +11 -29
- package/dist/acp/macro-agent.d.ts +15 -0
- package/dist/acp/macro-agent.d.ts.map +1 -1
- package/dist/acp/macro-agent.js +131 -35
- package/dist/acp/macro-agent.js.map +1 -1
- package/dist/acp/types.d.ts +32 -1
- package/dist/acp/types.d.ts.map +1 -1
- package/dist/acp/types.js.map +1 -1
- package/dist/agent/agent-manager.d.ts +65 -1
- package/dist/agent/agent-manager.d.ts.map +1 -1
- package/dist/agent/agent-manager.js +544 -200
- package/dist/agent/agent-manager.js.map +1 -1
- package/dist/agent/types.d.ts +8 -1
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/api/server.d.ts +8 -1
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +136 -8
- package/dist/api/server.js.map +1 -1
- package/dist/api/types.d.ts +1 -1
- package/dist/api/types.d.ts.map +1 -1
- package/dist/auth/index.d.ts +2 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +2 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/token.d.ts +41 -0
- package/dist/auth/token.d.ts.map +1 -0
- package/dist/auth/token.js +73 -0
- package/dist/auth/token.js.map +1 -0
- package/dist/cli/acp.d.ts +2 -23
- package/dist/cli/acp.d.ts.map +1 -1
- package/dist/cli/acp.js +197 -61
- package/dist/cli/acp.js.map +1 -1
- package/dist/cli/index.js +152 -16
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/mcp.d.ts +6 -0
- package/dist/cli/mcp.d.ts.map +1 -1
- package/dist/cli/mcp.js +279 -173
- package/dist/cli/mcp.js.map +1 -1
- package/dist/cli/parse-args.d.ts +20 -0
- package/dist/cli/parse-args.d.ts.map +1 -0
- package/dist/cli/parse-args.js +43 -0
- package/dist/cli/parse-args.js.map +1 -0
- package/dist/cli/stable-instance-id.d.ts +8 -0
- package/dist/cli/stable-instance-id.d.ts.map +1 -0
- package/dist/cli/stable-instance-id.js +14 -0
- package/dist/cli/stable-instance-id.js.map +1 -0
- package/dist/config/project-config.d.ts +85 -7
- package/dist/config/project-config.d.ts.map +1 -1
- package/dist/config/project-config.js +133 -20
- package/dist/config/project-config.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lifecycle/handlers/index.d.ts +7 -3
- package/dist/lifecycle/handlers/index.d.ts.map +1 -1
- package/dist/lifecycle/handlers/index.js +25 -8
- package/dist/lifecycle/handlers/index.js.map +1 -1
- package/dist/lifecycle/types.d.ts +2 -0
- package/dist/lifecycle/types.d.ts.map +1 -1
- package/dist/lifecycle/types.js.map +1 -1
- package/dist/map/adapter/acp-over-map.d.ts +17 -0
- package/dist/map/adapter/acp-over-map.d.ts.map +1 -1
- package/dist/map/adapter/acp-over-map.js +384 -23
- package/dist/map/adapter/acp-over-map.js.map +1 -1
- package/dist/map/adapter/connection-manager.d.ts.map +1 -1
- package/dist/map/adapter/connection-manager.js +3 -0
- package/dist/map/adapter/connection-manager.js.map +1 -1
- package/dist/map/adapter/event-log.d.ts +87 -0
- package/dist/map/adapter/event-log.d.ts.map +1 -0
- package/dist/map/adapter/event-log.js +122 -0
- package/dist/map/adapter/event-log.js.map +1 -0
- package/dist/map/adapter/event-translator.js +6 -6
- package/dist/map/adapter/event-translator.js.map +1 -1
- package/dist/map/adapter/extensions/agent-lifecycle.d.ts +82 -0
- package/dist/map/adapter/extensions/agent-lifecycle.d.ts.map +1 -0
- package/dist/map/adapter/extensions/agent-lifecycle.js +164 -0
- package/dist/map/adapter/extensions/agent-lifecycle.js.map +1 -0
- package/dist/map/adapter/extensions/index.d.ts +13 -1
- package/dist/map/adapter/extensions/index.d.ts.map +1 -1
- package/dist/map/adapter/extensions/index.js +61 -0
- package/dist/map/adapter/extensions/index.js.map +1 -1
- package/dist/map/adapter/extensions/mcp-bridge.d.ts +57 -0
- package/dist/map/adapter/extensions/mcp-bridge.d.ts.map +1 -0
- package/dist/map/adapter/extensions/mcp-bridge.js +745 -0
- package/dist/map/adapter/extensions/mcp-bridge.js.map +1 -0
- package/dist/map/adapter/extensions/rename.d.ts +29 -0
- package/dist/map/adapter/extensions/rename.d.ts.map +1 -0
- package/dist/map/adapter/extensions/rename.js +49 -0
- package/dist/map/adapter/extensions/rename.js.map +1 -0
- package/dist/map/adapter/extensions/streams.d.ts +95 -0
- package/dist/map/adapter/extensions/streams.d.ts.map +1 -0
- package/dist/map/adapter/extensions/streams.js +515 -0
- package/dist/map/adapter/extensions/streams.js.map +1 -0
- package/dist/map/adapter/extensions/task.d.ts.map +1 -1
- package/dist/map/adapter/extensions/task.js +10 -0
- package/dist/map/adapter/extensions/task.js.map +1 -1
- package/dist/map/adapter/extensions/update-metadata.d.ts +29 -0
- package/dist/map/adapter/extensions/update-metadata.d.ts.map +1 -0
- package/dist/map/adapter/extensions/update-metadata.js +67 -0
- package/dist/map/adapter/extensions/update-metadata.js.map +1 -0
- package/dist/map/adapter/index.d.ts +2 -1
- package/dist/map/adapter/index.d.ts.map +1 -1
- package/dist/map/adapter/index.js +10 -2
- package/dist/map/adapter/index.js.map +1 -1
- package/dist/map/adapter/interface.d.ts +2 -0
- package/dist/map/adapter/interface.d.ts.map +1 -1
- package/dist/map/adapter/map-adapter.d.ts +3 -0
- package/dist/map/adapter/map-adapter.d.ts.map +1 -1
- package/dist/map/adapter/map-adapter.js +258 -35
- package/dist/map/adapter/map-adapter.js.map +1 -1
- package/dist/map/adapter/subscription-manager.d.ts.map +1 -1
- package/dist/map/adapter/subscription-manager.js +5 -1
- package/dist/map/adapter/subscription-manager.js.map +1 -1
- package/dist/map/adapter/types.d.ts +3 -1
- package/dist/map/adapter/types.d.ts.map +1 -1
- package/dist/mcp/map-client.d.ts +39 -0
- package/dist/mcp/map-client.d.ts.map +1 -0
- package/dist/mcp/map-client.js +129 -0
- package/dist/mcp/map-client.js.map +1 -0
- package/dist/mcp/mcp-server.d.ts +16 -0
- package/dist/mcp/mcp-server.d.ts.map +1 -1
- package/dist/mcp/mcp-server.js +125 -88
- package/dist/mcp/mcp-server.js.map +1 -1
- package/dist/mcp/tools/done.d.ts.map +1 -1
- package/dist/mcp/tools/done.js +18 -0
- package/dist/mcp/tools/done.js.map +1 -1
- package/dist/mcp/types.d.ts +9 -1
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/mcp/types.js.map +1 -1
- package/dist/metrics/metrics.js +1 -1
- package/dist/metrics/metrics.js.map +1 -1
- package/dist/roles/builtin/coordinator.d.ts.map +1 -1
- package/dist/roles/builtin/coordinator.js +2 -1
- package/dist/roles/builtin/coordinator.js.map +1 -1
- package/dist/roles/builtin/integrator.d.ts.map +1 -1
- package/dist/roles/builtin/integrator.js +2 -1
- package/dist/roles/builtin/integrator.js.map +1 -1
- package/dist/roles/builtin/worker.d.ts.map +1 -1
- package/dist/roles/builtin/worker.js +3 -1
- package/dist/roles/builtin/worker.js.map +1 -1
- package/dist/roles/capabilities.d.ts +9 -1
- package/dist/roles/capabilities.d.ts.map +1 -1
- package/dist/roles/capabilities.js +27 -7
- package/dist/roles/capabilities.js.map +1 -1
- package/dist/roles/config-loader.d.ts +6 -6
- package/dist/roles/config-loader.d.ts.map +1 -1
- package/dist/roles/config-loader.js +8 -7
- package/dist/roles/config-loader.js.map +1 -1
- package/dist/roles/registry.d.ts +2 -2
- package/dist/roles/registry.js +2 -2
- package/dist/roles/types.d.ts +3 -1
- package/dist/roles/types.d.ts.map +1 -1
- package/dist/server/combined-server.d.ts +28 -1
- package/dist/server/combined-server.d.ts.map +1 -1
- package/dist/server/combined-server.js +111 -8
- package/dist/server/combined-server.js.map +1 -1
- package/dist/store/event-store.d.ts +2 -1
- package/dist/store/event-store.d.ts.map +1 -1
- package/dist/store/event-store.js +80 -24
- package/dist/store/event-store.js.map +1 -1
- package/dist/store/instance.d.ts +1 -1
- package/dist/store/instance.d.ts.map +1 -1
- package/dist/store/instance.js +2 -2
- package/dist/store/instance.js.map +1 -1
- package/dist/store/types/agents.d.ts +23 -0
- package/dist/store/types/agents.d.ts.map +1 -1
- package/dist/store/types/events.d.ts +1 -1
- package/dist/store/types/events.d.ts.map +1 -1
- package/dist/task/backend/index.d.ts +47 -29
- package/dist/task/backend/index.d.ts.map +1 -1
- package/dist/task/backend/index.js +109 -71
- package/dist/task/backend/index.js.map +1 -1
- package/dist/task/backend/memory.d.ts +1 -0
- package/dist/task/backend/memory.d.ts.map +1 -1
- package/dist/task/backend/memory.js +3 -0
- package/dist/task/backend/memory.js.map +1 -1
- package/dist/task/backend/opentasks/backend.d.ts +140 -0
- package/dist/task/backend/opentasks/backend.d.ts.map +1 -0
- package/dist/task/backend/opentasks/backend.js +1023 -0
- package/dist/task/backend/opentasks/backend.js.map +1 -0
- package/dist/task/backend/opentasks/client.d.ts +337 -0
- package/dist/task/backend/opentasks/client.d.ts.map +1 -0
- package/dist/task/backend/opentasks/client.js +225 -0
- package/dist/task/backend/opentasks/client.js.map +1 -0
- package/dist/task/backend/opentasks/daemon-manager.d.ts +89 -0
- package/dist/task/backend/opentasks/daemon-manager.d.ts.map +1 -0
- package/dist/task/backend/opentasks/daemon-manager.js +195 -0
- package/dist/task/backend/opentasks/daemon-manager.js.map +1 -0
- package/dist/task/backend/opentasks/index.d.ts +21 -0
- package/dist/task/backend/opentasks/index.d.ts.map +1 -0
- package/dist/task/backend/opentasks/index.js +21 -0
- package/dist/task/backend/opentasks/index.js.map +1 -0
- package/dist/task/backend/opentasks/mapping.d.ts +48 -0
- package/dist/task/backend/opentasks/mapping.d.ts.map +1 -0
- package/dist/task/backend/opentasks/mapping.js +77 -0
- package/dist/task/backend/opentasks/mapping.js.map +1 -0
- package/dist/task/backend/types.d.ts +33 -53
- package/dist/task/backend/types.d.ts.map +1 -1
- package/dist/task/backend/types.js +7 -11
- package/dist/task/backend/types.js.map +1 -1
- package/dist/task/backend/unified-tool-provider.d.ts +57 -0
- package/dist/task/backend/unified-tool-provider.d.ts.map +1 -0
- package/dist/task/backend/unified-tool-provider.js +623 -0
- package/dist/task/backend/unified-tool-provider.js.map +1 -0
- package/dist/teams/index.d.ts +3 -1
- package/dist/teams/index.d.ts.map +1 -1
- package/dist/teams/index.js +2 -0
- package/dist/teams/index.js.map +1 -1
- package/dist/teams/seed-defaults.d.ts +20 -0
- package/dist/teams/seed-defaults.d.ts.map +1 -0
- package/dist/teams/seed-defaults.js +71 -0
- package/dist/teams/seed-defaults.js.map +1 -0
- package/dist/teams/team-loader.d.ts +7 -3
- package/dist/teams/team-loader.d.ts.map +1 -1
- package/dist/teams/team-loader.js +156 -164
- package/dist/teams/team-loader.js.map +1 -1
- package/dist/teams/team-manager.d.ts +112 -0
- package/dist/teams/team-manager.d.ts.map +1 -0
- package/dist/teams/team-manager.js +305 -0
- package/dist/teams/team-manager.js.map +1 -0
- package/dist/teams/team-runtime.d.ts +125 -19
- package/dist/teams/team-runtime.d.ts.map +1 -1
- package/dist/teams/team-runtime.js +529 -119
- package/dist/teams/team-runtime.js.map +1 -1
- package/dist/teams/types.d.ts +41 -151
- package/dist/teams/types.d.ts.map +1 -1
- package/dist/teams/types.js +2 -3
- package/dist/teams/types.js.map +1 -1
- package/docs/architecture.md +7 -6
- package/docs/configuration.md +26 -62
- package/docs/implementation-details.md +5 -5
- package/docs/implementation-summary.md +17 -17
- package/docs/plan-self-driving-support.md +4 -4
- package/docs/spec-self-driving-support.md +10 -10
- package/docs/team-templates.md +2 -2
- package/docs/teams.md +76 -3
- package/docs/troubleshooting.md +10 -11
- package/package.json +7 -4
- package/references/minimem/.claude/settings.json +7 -0
- package/references/minimem/.sudocode/issues.jsonl +18 -0
- package/references/minimem/.sudocode/specs.jsonl +1 -0
- package/references/minimem/CLAUDE.md +310 -0
- package/references/minimem/README.md +562 -0
- package/references/minimem/claude-plugin/.claude-plugin/plugin.json +10 -0
- package/references/minimem/claude-plugin/.mcp.json +7 -0
- package/references/minimem/claude-plugin/README.md +158 -0
- package/references/minimem/claude-plugin/commands/recall.md +47 -0
- package/references/minimem/claude-plugin/commands/remember.md +41 -0
- package/references/minimem/claude-plugin/hooks/__tests__/hooks.test.ts +272 -0
- package/references/minimem/claude-plugin/hooks/hooks.json +27 -0
- package/references/minimem/claude-plugin/hooks/session-end.sh +86 -0
- package/references/minimem/claude-plugin/hooks/session-start.sh +85 -0
- package/references/minimem/claude-plugin/skills/memory/SKILL.md +108 -0
- package/references/minimem/media/banner.png +0 -0
- package/references/minimem/package-lock.json +5373 -0
- package/references/minimem/package.json +72 -0
- package/references/minimem/scripts/postbuild.js +35 -0
- package/references/minimem/src/__tests__/edge-cases.test.ts +371 -0
- package/references/minimem/src/__tests__/errors.test.ts +265 -0
- package/references/minimem/src/__tests__/helpers.ts +199 -0
- package/references/minimem/src/__tests__/internal.test.ts +407 -0
- package/references/minimem/src/__tests__/knowledge.test.ts +287 -0
- package/references/minimem/src/__tests__/minimem.integration.test.ts +1127 -0
- package/references/minimem/src/__tests__/session.test.ts +190 -0
- package/references/minimem/src/cli/__tests__/commands.test.ts +759 -0
- package/references/minimem/src/cli/commands/__tests__/conflicts.test.ts +141 -0
- package/references/minimem/src/cli/commands/append.ts +76 -0
- package/references/minimem/src/cli/commands/config.ts +262 -0
- package/references/minimem/src/cli/commands/conflicts.ts +413 -0
- package/references/minimem/src/cli/commands/daemon.ts +169 -0
- package/references/minimem/src/cli/commands/index.ts +12 -0
- package/references/minimem/src/cli/commands/init.ts +88 -0
- package/references/minimem/src/cli/commands/mcp.ts +177 -0
- package/references/minimem/src/cli/commands/push-pull.ts +213 -0
- package/references/minimem/src/cli/commands/search.ts +158 -0
- package/references/minimem/src/cli/commands/status.ts +84 -0
- package/references/minimem/src/cli/commands/sync-init.ts +290 -0
- package/references/minimem/src/cli/commands/sync.ts +70 -0
- package/references/minimem/src/cli/commands/upsert.ts +197 -0
- package/references/minimem/src/cli/config.ts +584 -0
- package/references/minimem/src/cli/index.ts +264 -0
- package/references/minimem/src/cli/shared.ts +161 -0
- package/references/minimem/src/cli/sync/__tests__/central.test.ts +152 -0
- package/references/minimem/src/cli/sync/__tests__/conflicts.test.ts +209 -0
- package/references/minimem/src/cli/sync/__tests__/daemon.test.ts +118 -0
- package/references/minimem/src/cli/sync/__tests__/detection.test.ts +207 -0
- package/references/minimem/src/cli/sync/__tests__/integration.test.ts +476 -0
- package/references/minimem/src/cli/sync/__tests__/registry.test.ts +363 -0
- package/references/minimem/src/cli/sync/__tests__/state.test.ts +255 -0
- package/references/minimem/src/cli/sync/__tests__/validation.test.ts +193 -0
- package/references/minimem/src/cli/sync/__tests__/watcher.test.ts +178 -0
- package/references/minimem/src/cli/sync/central.ts +292 -0
- package/references/minimem/src/cli/sync/conflicts.ts +204 -0
- package/references/minimem/src/cli/sync/daemon.ts +407 -0
- package/references/minimem/src/cli/sync/detection.ts +138 -0
- package/references/minimem/src/cli/sync/index.ts +107 -0
- package/references/minimem/src/cli/sync/operations.ts +373 -0
- package/references/minimem/src/cli/sync/registry.ts +279 -0
- package/references/minimem/src/cli/sync/state.ts +355 -0
- package/references/minimem/src/cli/sync/validation.ts +206 -0
- package/references/minimem/src/cli/sync/watcher.ts +234 -0
- package/references/minimem/src/cli/version.ts +34 -0
- package/references/minimem/src/core/index.ts +9 -0
- package/references/minimem/src/core/indexer.ts +628 -0
- package/references/minimem/src/core/searcher.ts +221 -0
- package/references/minimem/src/db/schema.ts +183 -0
- package/references/minimem/src/db/sqlite-vec.ts +24 -0
- package/references/minimem/src/embeddings/__tests__/embeddings.test.ts +431 -0
- package/references/minimem/src/embeddings/batch-gemini.ts +392 -0
- package/references/minimem/src/embeddings/batch-openai.ts +409 -0
- package/references/minimem/src/embeddings/embeddings.ts +434 -0
- package/references/minimem/src/index.ts +109 -0
- package/references/minimem/src/internal.ts +299 -0
- package/references/minimem/src/minimem.ts +1276 -0
- package/references/minimem/src/search/__tests__/hybrid.test.ts +247 -0
- package/references/minimem/src/search/graph.ts +234 -0
- package/references/minimem/src/search/hybrid.ts +151 -0
- package/references/minimem/src/search/search.ts +256 -0
- package/references/minimem/src/server/__tests__/mcp.test.ts +341 -0
- package/references/minimem/src/server/__tests__/tools.test.ts +364 -0
- package/references/minimem/src/server/mcp.ts +326 -0
- package/references/minimem/src/server/tools.ts +720 -0
- package/references/minimem/src/session.ts +460 -0
- package/references/minimem/tsconfig.json +19 -0
- package/references/minimem/tsup.config.ts +26 -0
- package/references/minimem/vitest.config.ts +24 -0
- package/references/openteams/.claude/settings.json +6 -0
- package/references/openteams/README.md +1 -0
- package/references/openteams/SKILL.md +341 -0
- package/references/openteams/design.md +411 -0
- package/references/openteams/examples/bmad-method/prompts/analyst/ROLE.md +16 -0
- package/references/openteams/examples/bmad-method/prompts/analyst/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/prompts/architect/ROLE.md +24 -0
- package/references/openteams/examples/bmad-method/prompts/architect/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/prompts/developer/ROLE.md +25 -0
- package/references/openteams/examples/bmad-method/prompts/developer/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/prompts/master/ROLE.md +21 -0
- package/references/openteams/examples/bmad-method/prompts/master/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/prompts/pm/ROLE.md +20 -0
- package/references/openteams/examples/bmad-method/prompts/pm/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/prompts/qa/ROLE.md +17 -0
- package/references/openteams/examples/bmad-method/prompts/qa/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/prompts/quick-flow-dev/ROLE.md +23 -0
- package/references/openteams/examples/bmad-method/prompts/quick-flow-dev/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/prompts/scrum-master/ROLE.md +27 -0
- package/references/openteams/examples/bmad-method/prompts/scrum-master/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/prompts/tech-writer/ROLE.md +21 -0
- package/references/openteams/examples/bmad-method/prompts/tech-writer/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/prompts/ux-designer/ROLE.md +16 -0
- package/references/openteams/examples/bmad-method/prompts/ux-designer/SOUL.md +5 -0
- package/references/openteams/examples/bmad-method/roles/analyst.yaml +9 -0
- package/references/openteams/examples/bmad-method/roles/architect.yaml +9 -0
- package/references/openteams/examples/bmad-method/roles/developer.yaml +8 -0
- package/references/openteams/examples/bmad-method/roles/master.yaml +8 -0
- package/references/openteams/examples/bmad-method/roles/pm.yaml +9 -0
- package/references/openteams/examples/bmad-method/roles/qa.yaml +8 -0
- package/references/openteams/examples/bmad-method/roles/quick-flow-dev.yaml +8 -0
- package/references/openteams/examples/bmad-method/roles/scrum-master.yaml +9 -0
- package/references/openteams/examples/bmad-method/roles/tech-writer.yaml +8 -0
- package/references/openteams/examples/bmad-method/roles/ux-designer.yaml +8 -0
- package/references/openteams/examples/bmad-method/team.yaml +161 -0
- package/references/openteams/examples/get-shit-done/prompts/codebase-mapper/ROLE.md +17 -0
- package/references/openteams/examples/get-shit-done/prompts/codebase-mapper/SOUL.md +5 -0
- package/references/openteams/examples/get-shit-done/prompts/debugger/ROLE.md +25 -0
- package/references/openteams/examples/get-shit-done/prompts/debugger/SOUL.md +5 -0
- package/references/openteams/examples/get-shit-done/prompts/executor/ROLE.md +34 -0
- package/references/openteams/examples/get-shit-done/prompts/executor/SOUL.md +5 -0
- package/references/openteams/examples/get-shit-done/prompts/integration-checker/ROLE.md +18 -0
- package/references/openteams/examples/get-shit-done/prompts/integration-checker/SOUL.md +3 -0
- package/references/openteams/examples/get-shit-done/prompts/orchestrator/ROLE.md +42 -0
- package/references/openteams/examples/get-shit-done/prompts/orchestrator/SOUL.md +5 -0
- package/references/openteams/examples/get-shit-done/prompts/phase-researcher/ROLE.md +15 -0
- package/references/openteams/examples/get-shit-done/prompts/phase-researcher/SOUL.md +3 -0
- package/references/openteams/examples/get-shit-done/prompts/plan-checker/ROLE.md +17 -0
- package/references/openteams/examples/get-shit-done/prompts/plan-checker/SOUL.md +3 -0
- package/references/openteams/examples/get-shit-done/prompts/planner/ROLE.md +28 -0
- package/references/openteams/examples/get-shit-done/prompts/planner/SOUL.md +5 -0
- package/references/openteams/examples/get-shit-done/prompts/project-researcher/ROLE.md +16 -0
- package/references/openteams/examples/get-shit-done/prompts/project-researcher/SOUL.md +3 -0
- package/references/openteams/examples/get-shit-done/prompts/research-synthesizer/ROLE.md +13 -0
- package/references/openteams/examples/get-shit-done/prompts/research-synthesizer/SOUL.md +3 -0
- package/references/openteams/examples/get-shit-done/prompts/roadmapper/ROLE.md +14 -0
- package/references/openteams/examples/get-shit-done/prompts/roadmapper/SOUL.md +3 -0
- package/references/openteams/examples/get-shit-done/prompts/verifier/ROLE.md +19 -0
- package/references/openteams/examples/get-shit-done/prompts/verifier/SOUL.md +5 -0
- package/references/openteams/examples/get-shit-done/roles/codebase-mapper.yaml +8 -0
- package/references/openteams/examples/get-shit-done/roles/debugger.yaml +8 -0
- package/references/openteams/examples/get-shit-done/roles/executor.yaml +8 -0
- package/references/openteams/examples/get-shit-done/roles/integration-checker.yaml +8 -0
- package/references/openteams/examples/get-shit-done/roles/orchestrator.yaml +9 -0
- package/references/openteams/examples/get-shit-done/roles/phase-researcher.yaml +7 -0
- package/references/openteams/examples/get-shit-done/roles/plan-checker.yaml +8 -0
- package/references/openteams/examples/get-shit-done/roles/planner.yaml +8 -0
- package/references/openteams/examples/get-shit-done/roles/project-researcher.yaml +8 -0
- package/references/openteams/examples/get-shit-done/roles/research-synthesizer.yaml +7 -0
- package/references/openteams/examples/get-shit-done/roles/roadmapper.yaml +7 -0
- package/references/openteams/examples/get-shit-done/roles/verifier.yaml +8 -0
- package/references/openteams/examples/get-shit-done/team.yaml +154 -0
- package/references/openteams/package-lock.json +2181 -0
- package/references/openteams/package.json +48 -0
- package/references/openteams/schema/role.schema.json +125 -0
- package/references/openteams/schema/team.schema.json +284 -0
- package/references/openteams/src/cli/agent.ts +104 -0
- package/references/openteams/src/cli/cli.test.ts +381 -0
- package/references/openteams/src/cli/generate.ts +220 -0
- package/references/openteams/src/cli/message.ts +241 -0
- package/references/openteams/src/cli/task.ts +154 -0
- package/references/openteams/src/cli/team.ts +104 -0
- package/references/openteams/src/cli/template.ts +207 -0
- package/references/openteams/src/cli.ts +45 -0
- package/references/openteams/src/db/database.test.ts +185 -0
- package/references/openteams/src/db/database.ts +240 -0
- package/references/openteams/src/generators/agent-prompt-generator.test.ts +332 -0
- package/references/openteams/src/generators/agent-prompt-generator.ts +521 -0
- package/references/openteams/src/generators/package-generator.test.ts +129 -0
- package/references/openteams/src/generators/package-generator.ts +102 -0
- package/references/openteams/src/generators/skill-generator.test.ts +246 -0
- package/references/openteams/src/generators/skill-generator.ts +374 -0
- package/references/openteams/src/index.ts +104 -0
- package/references/openteams/src/services/agent-service.test.ts +158 -0
- package/references/openteams/src/services/agent-service.ts +84 -0
- package/references/openteams/src/services/communication-service.test.ts +455 -0
- package/references/openteams/src/services/communication-service.ts +371 -0
- package/references/openteams/src/services/message-service.test.ts +342 -0
- package/references/openteams/src/services/message-service.ts +203 -0
- package/references/openteams/src/services/task-service.test.ts +434 -0
- package/references/openteams/src/services/task-service.ts +239 -0
- package/references/openteams/src/services/team-service.test.ts +181 -0
- package/references/openteams/src/services/team-service.ts +139 -0
- package/references/openteams/src/services/template-service.test.ts +306 -0
- package/references/openteams/src/services/template-service.ts +182 -0
- package/references/openteams/src/spawner/acp-factory.ts +96 -0
- package/references/openteams/src/spawner/interface.ts +31 -0
- package/references/openteams/src/spawner/mock.test.ts +93 -0
- package/references/openteams/src/spawner/mock.ts +59 -0
- package/references/openteams/src/template/loader.test.ts +1319 -0
- package/references/openteams/src/template/loader.ts +698 -0
- package/references/openteams/src/template/types.ts +200 -0
- package/references/openteams/src/types.ts +205 -0
- package/references/openteams/tsconfig.json +18 -0
- package/references/openteams/vitest.config.ts +9 -0
- package/references/skill-tree/.claude/settings.json +6 -0
- package/references/skill-tree/.sudocode/issues.jsonl +11 -0
- package/references/skill-tree/.sudocode/specs.jsonl +1 -0
- package/references/skill-tree/CLAUDE.md +150 -0
- package/references/skill-tree/README.md +324 -0
- package/references/skill-tree/docs/GAPS_v1.md +221 -0
- package/references/skill-tree/docs/INTEGRATION_PLAN.md +467 -0
- package/references/skill-tree/docs/TODOS.md +91 -0
- package/references/skill-tree/docs/anthropic_skill_guide.md +1364 -0
- package/references/skill-tree/docs/design/federated-skill-trees.md +524 -0
- package/references/skill-tree/docs/design/multi-agent-sync.md +759 -0
- package/references/skill-tree/docs/scraper/BRAINSTORM.md +583 -0
- package/references/skill-tree/docs/scraper/POC_PLAN.md +420 -0
- package/references/skill-tree/docs/scraper/README.md +170 -0
- package/references/skill-tree/examples/basic-usage.ts +190 -0
- package/references/skill-tree/package-lock.json +1509 -0
- package/references/skill-tree/package.json +66 -0
- package/references/skill-tree/scraper/README.md +123 -0
- package/references/skill-tree/scraper/docs/DESIGN.md +683 -0
- package/references/skill-tree/scraper/docs/PLAN.md +336 -0
- package/references/skill-tree/scraper/drizzle.config.ts +10 -0
- package/references/skill-tree/scraper/package-lock.json +6329 -0
- package/references/skill-tree/scraper/package.json +68 -0
- package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-description.md +7 -0
- package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-name.md +7 -0
- package/references/skill-tree/scraper/test/fixtures/minimal-skill/SKILL.md +27 -0
- package/references/skill-tree/scraper/test/fixtures/skill-json/SKILL.json +21 -0
- package/references/skill-tree/scraper/test/fixtures/skill-with-meta/SKILL.md +54 -0
- package/references/skill-tree/scraper/test/fixtures/skill-with-meta/_meta.json +24 -0
- package/references/skill-tree/scraper/test/fixtures/valid-skill/SKILL.md +93 -0
- package/references/skill-tree/scraper/test/fixtures/valid-skill/_meta.json +22 -0
- package/references/skill-tree/scraper/tsup.config.ts +14 -0
- package/references/skill-tree/scraper/vitest.config.ts +17 -0
- package/references/skill-tree/scripts/convert-to-vitest.ts +166 -0
- package/references/skill-tree/skills/skill-writer/SKILL.md +339 -0
- package/references/skill-tree/skills/skill-writer/references/examples.md +326 -0
- package/references/skill-tree/skills/skill-writer/references/patterns.md +210 -0
- package/references/skill-tree/skills/skill-writer/references/quality-checklist.md +123 -0
- package/references/skill-tree/test/run-all.ts +106 -0
- package/references/skill-tree/test/utils.ts +128 -0
- package/references/skill-tree/vitest.config.ts +16 -0
- package/src/__tests__/e2e/agent-spawn-visibility.e2e.test.ts +761 -0
- package/src/__tests__/e2e/full-agent-conflict-resolution.e2e.test.ts +2 -2
- package/src/__tests__/e2e/mcp-thin-client-bridge.e2e.test.ts +304 -0
- package/src/__tests__/e2e/mcp-tools-available.e2e.test.ts +324 -0
- package/src/__tests__/e2e/multi-agent.e2e.test.ts +5 -5
- package/src/__tests__/e2e/spawn-session-streaming.e2e.test.ts +563 -0
- package/src/acp/__tests__/integration.test.ts +56 -31
- package/src/acp/__tests__/macro-agent.test.ts +16 -7
- package/src/acp/macro-agent.ts +170 -36
- package/src/acp/types.ts +46 -1
- package/src/agent/__tests__/agent-manager.test.ts +228 -2
- package/src/agent/agent-manager.ts +809 -285
- package/src/agent/types.ts +12 -1
- package/src/api/__tests__/server.test.ts +203 -4
- package/src/api/server.ts +169 -10
- package/src/api/types.ts +3 -1
- package/src/auth/__tests__/token.test.ts +100 -0
- package/src/auth/index.ts +1 -0
- package/src/auth/token.ts +82 -0
- package/src/cli/__tests__/acp.test.ts +1 -1
- package/src/cli/__tests__/stable-instance-id.test.ts +1 -1
- package/src/cli/acp.ts +197 -72
- package/src/cli/index.ts +125 -15
- package/src/cli/mcp.ts +315 -197
- package/src/cli/parse-args.ts +54 -0
- package/src/cli/stable-instance-id.ts +14 -0
- package/src/config/project-config.ts +214 -27
- package/src/index.ts +3 -0
- package/src/lifecycle/__tests__/cascade-termination.test.ts +1 -1
- package/src/lifecycle/__tests__/handlers.test.ts +53 -0
- package/src/lifecycle/handlers/index.ts +25 -8
- package/src/lifecycle/types.ts +3 -0
- package/src/map/adapter/__tests__/acp-over-map-cancel.test.ts +22 -4
- package/src/map/adapter/__tests__/acp-over-map-getmodels.test.ts +355 -0
- package/src/map/adapter/__tests__/acp-over-map-history.test.ts +263 -0
- package/src/map/adapter/__tests__/acp-over-map-persistence.e2e.test.ts +1 -1
- package/src/map/adapter/__tests__/event-broadcast.test.ts +420 -0
- package/src/map/adapter/__tests__/event-log.test.ts +527 -0
- package/src/map/adapter/__tests__/event-translator.test.ts +3 -3
- package/src/map/adapter/__tests__/extensions.test.ts +408 -0
- package/src/map/adapter/__tests__/map-adapter.test.ts +99 -0
- package/src/map/adapter/__tests__/mcp-bridge.test.ts +1187 -0
- package/src/map/adapter/__tests__/multi-client-broadcast.test.ts +711 -0
- package/src/map/adapter/__tests__/stream-extensions.test.ts +494 -0
- package/src/map/adapter/__tests__/websocket-integration.test.ts +218 -0
- package/src/map/adapter/acp-over-map.ts +678 -66
- package/src/map/adapter/connection-manager.ts +3 -0
- package/src/map/adapter/event-log.ts +208 -0
- package/src/map/adapter/event-translator.ts +6 -6
- package/src/map/adapter/extensions/agent-lifecycle.ts +267 -0
- package/src/map/adapter/extensions/index.ts +96 -0
- package/src/map/adapter/extensions/mcp-bridge.ts +995 -0
- package/src/map/adapter/extensions/streams.ts +839 -0
- package/src/map/adapter/extensions/task.ts +11 -0
- package/src/map/adapter/extensions/update-metadata.ts +126 -0
- package/src/map/adapter/index.ts +33 -0
- package/src/map/adapter/interface.ts +2 -0
- package/src/map/adapter/map-adapter.ts +312 -47
- package/src/map/adapter/subscription-manager.ts +5 -1
- package/src/map/adapter/types.ts +10 -1
- package/src/mcp/__tests__/map-client.test.ts +386 -0
- package/src/mcp/__tests__/mcp-server-thin-client.test.ts +368 -0
- package/src/mcp/__tests__/mcp-server.test.ts +100 -1
- package/src/mcp/map-client.ts +177 -0
- package/src/mcp/mcp-server.ts +205 -103
- package/src/mcp/tools/done.ts +19 -0
- package/src/mcp/types.ts +6 -1
- package/src/metrics/metrics.ts +1 -1
- package/src/monitor/__tests__/stale-agent-flow.integration.test.ts +1 -1
- package/src/roles/__tests__/config-loader.test.ts +7 -7
- package/src/roles/builtin/coordinator.ts +2 -0
- package/src/roles/builtin/integrator.ts +2 -0
- package/src/roles/builtin/worker.ts +3 -0
- package/src/roles/capabilities.ts +28 -7
- package/src/roles/config-loader.ts +8 -7
- package/src/roles/registry.ts +2 -2
- package/src/roles/types.ts +7 -0
- package/src/server/__tests__/combined-server.test.ts +94 -21
- package/src/server/combined-server.ts +203 -33
- package/src/steering/__tests__/steering-integration.test.ts +1 -1
- package/src/store/__tests__/event-store-oob.test.ts +109 -0
- package/src/store/__tests__/event-store.test.ts +196 -1
- package/src/store/__tests__/instance.test.ts +3 -3
- package/src/store/event-store.ts +92 -23
- package/src/store/instance.ts +2 -2
- package/src/store/types/agents.ts +20 -0
- package/src/store/types/events.ts +1 -1
- package/src/task/backend/__tests__/create-task-backend.test.ts +225 -0
- package/src/task/backend/__tests__/e2e/unified-tool-provider-opentasks.e2e.test.ts +524 -0
- package/src/task/backend/__tests__/memory-pull-mode.test.ts +153 -0
- package/src/task/backend/__tests__/unified-tool-provider.test.ts +579 -0
- package/src/task/backend/index.ts +156 -106
- package/src/task/backend/memory.ts +4 -0
- package/src/task/backend/opentasks/__tests__/backend.test.ts +968 -0
- package/src/task/backend/opentasks/__tests__/daemon-manager.test.ts +406 -0
- package/src/task/backend/opentasks/__tests__/mapping.test.ts +84 -0
- package/src/task/backend/opentasks/__tests__/opentasks-backend.e2e.test.ts +1338 -0
- package/src/task/backend/opentasks/backend.ts +1323 -0
- package/src/task/backend/opentasks/client.ts +652 -0
- package/src/task/backend/opentasks/daemon-manager.ts +256 -0
- package/src/task/backend/opentasks/index.ts +69 -0
- package/src/task/backend/opentasks/mapping.ts +94 -0
- package/src/task/backend/types.ts +42 -66
- package/src/task/backend/unified-tool-provider.ts +779 -0
- package/src/teams/CLAUDE.md +180 -0
- package/src/teams/__tests__/cross-subsystem.integration.test.ts +1 -1
- package/src/teams/__tests__/e2e/workspace-isolation.e2e.test.ts +1263 -0
- package/src/teams/__tests__/team-manager.test.ts +814 -0
- package/src/teams/__tests__/team-system.test.ts +1291 -8
- package/src/teams/index.ts +21 -3
- package/src/teams/seed-defaults.ts +79 -0
- package/src/teams/team-loader.ts +202 -236
- package/src/teams/team-manager.ts +387 -0
- package/src/teams/team-runtime.ts +592 -121
- package/src/teams/types.ts +99 -200
- package/test_fixtures/README.md +2 -3
- package/test_fixtures/fixtures/index.ts +0 -3
- package/test_fixtures/fixtures/projects/project-with-specs.ts +7 -149
- package/test_fixtures/fixtures/repos/index.ts +1 -3
- package/test_fixtures/fixtures/repos/temp-repo-factory.ts +0 -116
- package/test_fixtures/fixtures/repos/types.ts +0 -11
- package/test_fixtures/harness/__tests__/fixtures.test.ts +10 -102
- package/test_fixtures/harness/__tests__/temp-repo-and-simulator.test.ts +0 -33
- package/test_fixtures/harness/simulator/agent-simulator.ts +4 -4
- package/vitest.config.ts +1 -1
- package/vitest.e2e.config.ts +1 -1
- package/vitest.setup.ts +1 -30
- package/.macro-agent/teams/self-driving/prompts/grinder.md +0 -27
- package/.macro-agent/teams/self-driving/prompts/judge.md +0 -27
- package/.macro-agent/teams/self-driving/prompts/planner.md +0 -33
- package/.macro-agent/teams/self-driving/roles/grinder.yaml +0 -17
- package/.macro-agent/teams/self-driving/roles/judge.yaml +0 -24
- package/.macro-agent/teams/self-driving/roles/planner.yaml +0 -18
- package/.macro-agent/teams/self-driving/team.yaml +0 -103
- package/.macro-agent/teams/structured/prompts/developer.md +0 -26
- package/.macro-agent/teams/structured/prompts/lead.md +0 -25
- package/.macro-agent/teams/structured/prompts/reviewer.md +0 -24
- package/.macro-agent/teams/structured/roles/developer.yaml +0 -12
- package/.macro-agent/teams/structured/roles/lead.yaml +0 -11
- package/.macro-agent/teams/structured/roles/reviewer.yaml +0 -19
- package/.macro-agent/teams/structured/team.yaml +0 -89
- package/docs/sudocode-integration.md +0 -383
- package/src/task/backend/__tests__/backend-parity.test.ts +0 -451
- package/src/task/backend/__tests__/tool-provider-edge-cases.test.ts +0 -430
- package/src/task/backend/__tests__/tool-provider.test.ts +0 -983
- package/src/task/backend/sudocode/__tests__/backend-edge-cases.test.ts +0 -575
- package/src/task/backend/sudocode/__tests__/backend.test.ts +0 -1194
- package/src/task/backend/sudocode/__tests__/client-integration.test.ts +0 -418
- package/src/task/backend/sudocode/__tests__/client.test.ts +0 -345
- package/src/task/backend/sudocode/__tests__/e2e/backend.e2e.test.ts +0 -753
- package/src/task/backend/sudocode/__tests__/e2e/server-client.e2e.test.ts +0 -680
- package/src/task/backend/sudocode/__tests__/e2e-workflow.test.ts +0 -666
- package/src/task/backend/sudocode/__tests__/integration/standalone-client.integration.test.ts +0 -396
- package/src/task/backend/sudocode/__tests__/integration/sudocode-cli.integration.test.ts +0 -328
- package/src/task/backend/sudocode/__tests__/integration/test-utils.ts +0 -175
- package/src/task/backend/sudocode/__tests__/mapping-edge-cases.test.ts +0 -265
- package/src/task/backend/sudocode/__tests__/server-client.test.ts +0 -675
- package/src/task/backend/sudocode/__tests__/sync-policy-edge-cases.test.ts +0 -521
- package/src/task/backend/sudocode/__tests__/sync-policy.test.ts +0 -519
- package/src/task/backend/sudocode/__tests__/tools.test.ts +0 -471
- package/src/task/backend/sudocode/backend.ts +0 -1237
- package/src/task/backend/sudocode/client.ts +0 -515
- package/src/task/backend/sudocode/index.ts +0 -120
- package/src/task/backend/sudocode/mapping.ts +0 -93
- package/src/task/backend/sudocode/server-client.ts +0 -522
- package/src/task/backend/sudocode/standalone-client.ts +0 -623
- package/src/task/backend/sudocode/sync-policy.ts +0 -387
- package/src/task/backend/sudocode/tools.ts +0 -896
- package/src/task/backend/tool-provider.ts +0 -506
- package/test_fixtures/fixtures/sudocode/index.ts +0 -29
- package/test_fixtures/fixtures/sudocode/issues.ts +0 -185
- package/test_fixtures/fixtures/sudocode/specs.ts +0 -159
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance for Claude Code when working with this repository.
|
|
4
|
+
|
|
5
|
+
## Project Overview
|
|
6
|
+
|
|
7
|
+
**skill-tree** is a TypeScript library for managing agent skill versions and evolution. It extracts, iterates, and adapts skills from agent trajectories, enabling AI agents to build and maintain reusable skill libraries.
|
|
8
|
+
|
|
9
|
+
## Key Architecture
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
src/
|
|
13
|
+
├── index.ts # Main exports
|
|
14
|
+
├── skill-bank.ts # Main orchestrator (SkillBank class)
|
|
15
|
+
├── types.ts # Core type definitions
|
|
16
|
+
├── semver.ts # Semantic versioning utilities
|
|
17
|
+
├── adapters/ # Session format adapters (Claude Code, OpenAI, etc.)
|
|
18
|
+
├── extraction/ # Manual and automatic skill extraction
|
|
19
|
+
├── storage/ # Storage adapters (memory, filesystem, SQLite)
|
|
20
|
+
├── matching/ # Semantic skill matching with embeddings
|
|
21
|
+
├── versioning/ # Lineage tracking and version management
|
|
22
|
+
├── learning/ # Learning providers for skill extraction
|
|
23
|
+
│ ├── types.ts # LearningProvider interface, candidate types
|
|
24
|
+
│ └── providers/ # Provider implementations
|
|
25
|
+
│ ├── naive.ts # Simple heuristic-based extraction
|
|
26
|
+
│ └── cognitive-core.ts # Advanced batch learning via cognitive-core
|
|
27
|
+
├── validation/ # Skill validation and testing
|
|
28
|
+
├── metrics/ # Usage tracking and analytics
|
|
29
|
+
├── hooks/ # Event hooks and activation system
|
|
30
|
+
├── agents/ # AGENTS.md generation and parsing
|
|
31
|
+
├── composition/ # Skill composition and merging
|
|
32
|
+
└── cli/ # Command-line interface
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Core Concepts
|
|
36
|
+
|
|
37
|
+
### Skill
|
|
38
|
+
A reusable piece of knowledge with:
|
|
39
|
+
- `problem`: What it solves
|
|
40
|
+
- `triggerConditions`: When to apply
|
|
41
|
+
- `solution`: Step-by-step guidance
|
|
42
|
+
- `verification`: How to verify success
|
|
43
|
+
- Semantic versioning and lineage tracking
|
|
44
|
+
|
|
45
|
+
### Trajectory
|
|
46
|
+
An agent session parsed into structured turns (user, assistant, tool interactions) with metadata and outcome.
|
|
47
|
+
|
|
48
|
+
### LearningProvider
|
|
49
|
+
Interface for extracting candidates from trajectories. Two implementations:
|
|
50
|
+
- `NaiveLearningProvider`: Simple, synchronous extraction
|
|
51
|
+
- `CognitiveCoreProvider`: Advanced batch learning with dependency injection
|
|
52
|
+
|
|
53
|
+
### LearningCandidate
|
|
54
|
+
Extracted knowledge before promotion to a versioned skill. Has kinds: `skill`, `strategy`, `pattern`, `error-fix`.
|
|
55
|
+
|
|
56
|
+
## Development Commands
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# Build
|
|
60
|
+
npm run build
|
|
61
|
+
|
|
62
|
+
# Run all tests
|
|
63
|
+
npm test
|
|
64
|
+
|
|
65
|
+
# Run specific test file
|
|
66
|
+
npx tsx test/learning.test.ts
|
|
67
|
+
|
|
68
|
+
# Type check
|
|
69
|
+
npx tsc --noEmit
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Testing Patterns
|
|
73
|
+
|
|
74
|
+
Tests use a simple test harness in `test/run-all.ts`. Each test file exports tests via `describe()` and `it()` functions.
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
describe('My Feature', () => {
|
|
78
|
+
it('does something', () => {
|
|
79
|
+
// assertions
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Mock factories are used for dependency injection testing, especially for `CognitiveCoreProvider`:
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
function createMockCognitiveCoreFactory(): CognitiveCoreFactory & MockInspection {
|
|
88
|
+
// Returns mock implementations with inspection helpers
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## CognitiveCoreProvider
|
|
93
|
+
|
|
94
|
+
This provider integrates with [cognitive-core](./references/cognitive-core/) (Atlas) for advanced learning. Key design decisions:
|
|
95
|
+
|
|
96
|
+
1. **Dependency Injection**: Uses `CognitiveCoreFactory` interface instead of direct imports to avoid `tsconfig.json` `rootDir` issues and maintain clean separation.
|
|
97
|
+
|
|
98
|
+
2. **Batch Accumulation**: Accumulates trajectories until `minTrajectories` threshold, then runs batch extraction for cross-trajectory pattern detection.
|
|
99
|
+
|
|
100
|
+
3. **Trajectory Conversion**: Converts skill-tree `Turn[]` to cognitive-core's ReAct `Step[]` format when `convertToReAct: true`.
|
|
101
|
+
|
|
102
|
+
4. **Kind Inference**: Automatically determines `LearningKind` from playbook content (error triggers → `error-fix`, strategy keywords → `strategy`, etc.).
|
|
103
|
+
|
|
104
|
+
5. **Outcome Feedback**: Records success/failure to refine playbook confidence over time.
|
|
105
|
+
|
|
106
|
+
See `src/learning/providers/README.md` for detailed documentation.
|
|
107
|
+
|
|
108
|
+
## Important Files
|
|
109
|
+
|
|
110
|
+
- `src/skill-bank.ts`: Main API entry point
|
|
111
|
+
- `src/learning/types.ts`: Learning interface definitions
|
|
112
|
+
- `src/learning/providers/cognitive-core.ts`: Cognitive-core adapter
|
|
113
|
+
- `test/learning.test.ts`: Comprehensive learning provider tests
|
|
114
|
+
|
|
115
|
+
## Common Tasks
|
|
116
|
+
|
|
117
|
+
### Adding a new learning provider
|
|
118
|
+
|
|
119
|
+
1. Implement `LearningProvider` interface in `src/learning/providers/`
|
|
120
|
+
2. Export from `src/learning/providers/index.ts`
|
|
121
|
+
3. Re-export from `src/learning/index.ts`
|
|
122
|
+
4. Add tests in `test/learning.test.ts`
|
|
123
|
+
|
|
124
|
+
### Extending CognitiveCoreProvider
|
|
125
|
+
|
|
126
|
+
The provider uses interface types (`CCPlaybook`, `CCTrajectory`, etc.) that mirror cognitive-core. If cognitive-core adds new fields, update the interfaces in `cognitive-core.ts`.
|
|
127
|
+
|
|
128
|
+
### Running a subset of tests
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
# Run only learning tests
|
|
132
|
+
npx tsx test/learning.test.ts
|
|
133
|
+
|
|
134
|
+
# Run with verbose output
|
|
135
|
+
DEBUG=1 npx tsx test/learning.test.ts
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Code Style
|
|
139
|
+
|
|
140
|
+
- TypeScript with strict mode
|
|
141
|
+
- ES modules (`.js` extensions in imports)
|
|
142
|
+
- JSDoc comments for public APIs
|
|
143
|
+
- Interface types preferred over type aliases for extensibility
|
|
144
|
+
- Dependency injection for external integrations
|
|
145
|
+
|
|
146
|
+
## References
|
|
147
|
+
|
|
148
|
+
- [cognitive-core (Atlas)](./references/cognitive-core/README.md): External learning engine
|
|
149
|
+
- [OpenSkills](https://github.com/numman-ali/openskills): Skill format inspiration
|
|
150
|
+
- [Claudeception](https://github.com/blader/Claudeception): Quality gates concept
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
# skill-tree
|
|
2
|
+
|
|
3
|
+
A TypeScript library for managing agent skill versions and evolution. Extract, iterate, and adapt skills from agent trajectories.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
skill-tree helps you build and maintain a library of reusable skills for AI agents by:
|
|
8
|
+
|
|
9
|
+
- **Extracting skills** from agent sessions/trajectories (manual or automatic)
|
|
10
|
+
- **Storing skills** in a versioned, searchable format (OpenSkills-compatible)
|
|
11
|
+
- **Evolving skills** through versioning, forking, and merging
|
|
12
|
+
- **Quality gates** to ensure extracted skills are reusable and non-trivial
|
|
13
|
+
|
|
14
|
+
Inspired by research on skill libraries ([arXiv:2512.17102](https://arxiv.org/abs/2512.17102)), [Claudeception](https://github.com/blader/Claudeception), and [OpenSkills](https://github.com/numman-ali/openskills).
|
|
15
|
+
|
|
16
|
+
## Installation
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install skill-tree
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Quick Start
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
import { createSkillBank } from 'skill-tree';
|
|
26
|
+
|
|
27
|
+
// Create a skill bank with filesystem storage
|
|
28
|
+
const skillBank = createSkillBank({
|
|
29
|
+
storage: {
|
|
30
|
+
type: 'filesystem',
|
|
31
|
+
basePath: './skills',
|
|
32
|
+
openSkillsCompatible: true,
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
await skillBank.initialize();
|
|
37
|
+
|
|
38
|
+
// Parse a Claude Code session
|
|
39
|
+
const trajectory = await skillBank.parseSession(sessionContent);
|
|
40
|
+
|
|
41
|
+
// Extract a skill manually
|
|
42
|
+
const result = await skillBank.extractManual(trajectory, {
|
|
43
|
+
suggestedName: 'typescript-import-fix',
|
|
44
|
+
description: 'Fix TypeScript ES module import errors',
|
|
45
|
+
tags: ['typescript', 'imports'],
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
if (result.success) {
|
|
49
|
+
console.log('Extracted skill:', result.skill.name);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Search for skills
|
|
53
|
+
const skills = await skillBank.searchSkills('typescript error');
|
|
54
|
+
|
|
55
|
+
// Create a new version
|
|
56
|
+
const updated = await skillBank.createVersion('typescript-import-fix', {
|
|
57
|
+
solution: 'Updated solution...',
|
|
58
|
+
}, { bumpType: 'minor' });
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Core Concepts
|
|
62
|
+
|
|
63
|
+
### Skills
|
|
64
|
+
|
|
65
|
+
A skill represents a reusable piece of knowledge extracted from agent interactions:
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
interface Skill {
|
|
69
|
+
id: string; // Unique identifier
|
|
70
|
+
name: string; // Human-readable name
|
|
71
|
+
version: string; // Semantic version
|
|
72
|
+
description: string; // For semantic matching
|
|
73
|
+
problem: string; // What problem this solves
|
|
74
|
+
triggerConditions: TriggerCondition[]; // When to apply
|
|
75
|
+
solution: string; // Step-by-step solution
|
|
76
|
+
verification: string; // How to verify it worked
|
|
77
|
+
examples: SkillExample[]; // Usage examples
|
|
78
|
+
// ... metadata, metrics, lineage
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Trajectories
|
|
83
|
+
|
|
84
|
+
Agent sessions are parsed into trajectories:
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
interface Trajectory {
|
|
88
|
+
sessionId: string;
|
|
89
|
+
turns: Turn[]; // User/assistant/tool interactions
|
|
90
|
+
metadata: TrajectoryMetadata;
|
|
91
|
+
outcome?: TrajectoryOutcome;
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Quality Gates
|
|
96
|
+
|
|
97
|
+
Extraction includes quality gates (inspired by Claudeception) to ensure skills are:
|
|
98
|
+
|
|
99
|
+
- **Reusable**: Applicable across multiple future tasks
|
|
100
|
+
- **Non-trivial**: Involves discovery beyond documentation lookup
|
|
101
|
+
- **Specific**: Has clear trigger conditions
|
|
102
|
+
- **Verified**: Solution demonstrably works
|
|
103
|
+
|
|
104
|
+
## Features
|
|
105
|
+
|
|
106
|
+
### Session Adapters
|
|
107
|
+
|
|
108
|
+
Parse different agent session formats:
|
|
109
|
+
|
|
110
|
+
```typescript
|
|
111
|
+
// Built-in: Claude Code JSONL
|
|
112
|
+
const trajectory = await skillBank.parseSession(jsonlContent);
|
|
113
|
+
|
|
114
|
+
// Register custom adapters
|
|
115
|
+
skillBank.registerAdapter(myCustomAdapter);
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Extraction Modes
|
|
119
|
+
|
|
120
|
+
**Manual extraction** with user guidance:
|
|
121
|
+
|
|
122
|
+
```typescript
|
|
123
|
+
const result = await skillBank.extractManual(trajectory, {
|
|
124
|
+
turnRange: [5, 15], // Extract specific turns
|
|
125
|
+
suggestedName: 'my-skill',
|
|
126
|
+
tags: ['debugging'],
|
|
127
|
+
});
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**Automatic extraction** using LLM:
|
|
131
|
+
|
|
132
|
+
```typescript
|
|
133
|
+
skillBank.setLLMProvider(myLLMProvider);
|
|
134
|
+
|
|
135
|
+
const results = await skillBank.extractAutomatic(trajectory, {
|
|
136
|
+
minConfidence: 0.7,
|
|
137
|
+
});
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Storage
|
|
141
|
+
|
|
142
|
+
**Filesystem storage** (OpenSkills-compatible):
|
|
143
|
+
|
|
144
|
+
```typescript
|
|
145
|
+
const skillBank = createSkillBank({
|
|
146
|
+
storage: {
|
|
147
|
+
type: 'filesystem',
|
|
148
|
+
basePath: '~/.skills',
|
|
149
|
+
openSkillsCompatible: true, // YAML frontmatter + Markdown
|
|
150
|
+
},
|
|
151
|
+
});
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**Memory storage** (for testing):
|
|
155
|
+
|
|
156
|
+
```typescript
|
|
157
|
+
const skillBank = createSkillBank({
|
|
158
|
+
storage: { type: 'memory' },
|
|
159
|
+
});
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Skills are stored in the OpenSkills format:
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
skills/
|
|
166
|
+
├── my-skill/
|
|
167
|
+
│ ├── SKILL.md # Skill content (YAML + Markdown)
|
|
168
|
+
│ └── .skilltree.json # Metadata and lineage
|
|
169
|
+
└── .versions/
|
|
170
|
+
└── my-skill/
|
|
171
|
+
├── 1.0.0.json # Version snapshots
|
|
172
|
+
└── 1.1.0.json
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### Versioning
|
|
176
|
+
|
|
177
|
+
Semantic versioning with full lineage tracking:
|
|
178
|
+
|
|
179
|
+
```typescript
|
|
180
|
+
// Create new version
|
|
181
|
+
const v2 = await skillBank.createVersion('my-skill', updates, {
|
|
182
|
+
bumpType: 'minor',
|
|
183
|
+
changelog: 'Added alternative solution',
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
// Get version history
|
|
187
|
+
const history = await skillBank.getVersionHistory('my-skill');
|
|
188
|
+
|
|
189
|
+
// Rollback to previous version
|
|
190
|
+
const restored = await skillBank.rollbackSkill('my-skill', '1.0.0');
|
|
191
|
+
|
|
192
|
+
// Compare versions
|
|
193
|
+
const diff = await skillBank.compareVersions('my-skill', '1.0.0', '2.0.0');
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Skill Evolution
|
|
197
|
+
|
|
198
|
+
Fork and merge skills:
|
|
199
|
+
|
|
200
|
+
```typescript
|
|
201
|
+
// Fork for a specialized use case
|
|
202
|
+
const forked = await skillBank.forkSkill('my-skill', {
|
|
203
|
+
newId: 'my-skill-react',
|
|
204
|
+
newName: 'My Skill (React variant)',
|
|
205
|
+
reason: 'Specialized for React projects',
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
// Merge improvements back
|
|
209
|
+
const merged = await skillBank.lineageTracker.mergeSkill(
|
|
210
|
+
'my-skill',
|
|
211
|
+
'my-skill-react',
|
|
212
|
+
{ fields: ['solution', 'examples'] }
|
|
213
|
+
);
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Events
|
|
217
|
+
|
|
218
|
+
Subscribe to skill bank events:
|
|
219
|
+
|
|
220
|
+
```typescript
|
|
221
|
+
const unsubscribe = skillBank.on((event) => {
|
|
222
|
+
switch (event.type) {
|
|
223
|
+
case 'skill:created':
|
|
224
|
+
console.log('New skill:', event.skill.name);
|
|
225
|
+
break;
|
|
226
|
+
case 'extraction:completed':
|
|
227
|
+
console.log('Extraction confidence:', event.result.confidence);
|
|
228
|
+
break;
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
## API Reference
|
|
234
|
+
|
|
235
|
+
### SkillBank
|
|
236
|
+
|
|
237
|
+
Main orchestrator class.
|
|
238
|
+
|
|
239
|
+
| Method | Description |
|
|
240
|
+
|--------|-------------|
|
|
241
|
+
| `initialize()` | Initialize storage (required before use) |
|
|
242
|
+
| `parseSession(content, adapter?)` | Parse session into trajectory |
|
|
243
|
+
| `extractManual(trajectory, options?)` | Extract skill with guidance |
|
|
244
|
+
| `extractAutomatic(trajectory, options?)` | Extract skills using LLM |
|
|
245
|
+
| `getSkill(id, version?)` | Get skill by ID |
|
|
246
|
+
| `listSkills(filter?)` | List skills with optional filter |
|
|
247
|
+
| `searchSkills(query)` | Search skills by text |
|
|
248
|
+
| `saveSkill(skill)` | Save or update a skill |
|
|
249
|
+
| `deleteSkill(id, version?)` | Delete a skill |
|
|
250
|
+
| `createVersion(id, updates, options?)` | Create new version |
|
|
251
|
+
| `forkSkill(id, options)` | Fork a skill |
|
|
252
|
+
| `getVersionHistory(id)` | Get version history |
|
|
253
|
+
| `rollbackSkill(id, version)` | Rollback to version |
|
|
254
|
+
| `on(handler)` | Subscribe to events |
|
|
255
|
+
|
|
256
|
+
### Versioning Utilities
|
|
257
|
+
|
|
258
|
+
```typescript
|
|
259
|
+
import {
|
|
260
|
+
parseVersion,
|
|
261
|
+
compareVersions,
|
|
262
|
+
bumpVersion,
|
|
263
|
+
satisfiesRange,
|
|
264
|
+
} from 'skill-tree';
|
|
265
|
+
|
|
266
|
+
bumpVersion('1.2.3', 'minor'); // '1.3.0'
|
|
267
|
+
satisfiesRange('1.5.0', '^1.2.0'); // true
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
## Skill Format
|
|
271
|
+
|
|
272
|
+
Skills use YAML frontmatter + Markdown (OpenSkills-compatible):
|
|
273
|
+
|
|
274
|
+
```markdown
|
|
275
|
+
---
|
|
276
|
+
name: typescript-esm-import-fix
|
|
277
|
+
description: |
|
|
278
|
+
Fix TypeScript ES module import errors by adding .js extension
|
|
279
|
+
version: 1.0.0
|
|
280
|
+
author: extracted
|
|
281
|
+
status: active
|
|
282
|
+
date: 2024-01-15
|
|
283
|
+
tags:
|
|
284
|
+
- typescript
|
|
285
|
+
- esm
|
|
286
|
+
- imports
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## Problem
|
|
290
|
+
|
|
291
|
+
TypeScript with ES modules requires explicit .js extensions in imports.
|
|
292
|
+
|
|
293
|
+
## Trigger Conditions
|
|
294
|
+
|
|
295
|
+
- **error**: `Cannot find module './utils'`
|
|
296
|
+
- **pattern**: `import .* from '\./[^']+(?<!\.js)'`
|
|
297
|
+
|
|
298
|
+
## Solution
|
|
299
|
+
|
|
300
|
+
1. Add `.js` extension to relative imports
|
|
301
|
+
2. Even for `.ts` files, use `.js` in the import path
|
|
302
|
+
|
|
303
|
+
## Verification
|
|
304
|
+
|
|
305
|
+
Run `tsc` and verify no module resolution errors.
|
|
306
|
+
|
|
307
|
+
## Examples
|
|
308
|
+
|
|
309
|
+
### Basic import fix
|
|
310
|
+
|
|
311
|
+
**Before:**
|
|
312
|
+
```typescript
|
|
313
|
+
import { helper } from './utils'
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
**After:**
|
|
317
|
+
```typescript
|
|
318
|
+
import { helper } from './utils.js'
|
|
319
|
+
```
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
## License
|
|
323
|
+
|
|
324
|
+
MIT
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
# Integration Gaps Tracking - v1
|
|
2
|
+
|
|
3
|
+
This document tracks the remaining work to complete the skill indexer integration as defined in [INTEGRATION_PLAN.md](./INTEGRATION_PLAN.md).
|
|
4
|
+
|
|
5
|
+
## Status Overview
|
|
6
|
+
|
|
7
|
+
| Phase | Status | Completion |
|
|
8
|
+
|-------|--------|------------|
|
|
9
|
+
| Phase 1: Import Pipeline | ✅ Complete | 100% |
|
|
10
|
+
| Phase 2: CLI Unification | ✅ Complete | 100% |
|
|
11
|
+
| Phase 3: Unified Storage | ✅ Complete | 100% |
|
|
12
|
+
| Phase 4: Direct Integration | ✅ Complete | 100% |
|
|
13
|
+
| Phase 5: Bidirectional Sync | ✅ Complete | 100% |
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## High Priority Items
|
|
18
|
+
|
|
19
|
+
### 1. Unified Configuration System
|
|
20
|
+
|
|
21
|
+
**Status**: ✅ Complete
|
|
22
|
+
|
|
23
|
+
**Goal**: Single config file for both skill-tree and indexer settings.
|
|
24
|
+
|
|
25
|
+
**Location**: `~/.skill-tree/config.yaml`
|
|
26
|
+
|
|
27
|
+
**Tasks**:
|
|
28
|
+
- [x] Create `src/config/` module
|
|
29
|
+
- [x] Define `SkillTreeConfig` interface
|
|
30
|
+
- [x] Implement config file loading with defaults
|
|
31
|
+
- [x] Support environment variable substitution
|
|
32
|
+
- [x] Integrate with CLI global options
|
|
33
|
+
- [x] Integrate with IndexerService
|
|
34
|
+
|
|
35
|
+
**Files Created**:
|
|
36
|
+
- `src/config/types.ts` - Configuration type definitions
|
|
37
|
+
- `src/config/loader.ts` - Config loading and merging logic
|
|
38
|
+
- `src/config/index.ts` - Module exports
|
|
39
|
+
- `src/cli/commands/config.ts` - CLI config command
|
|
40
|
+
|
|
41
|
+
**Config Schema**:
|
|
42
|
+
```yaml
|
|
43
|
+
storage:
|
|
44
|
+
type: sqlite | filesystem | memory
|
|
45
|
+
path: ~/.skill-tree/skills.db
|
|
46
|
+
|
|
47
|
+
indexer:
|
|
48
|
+
github_token: ${GITHUB_TOKEN}
|
|
49
|
+
anthropic_key: ${ANTHROPIC_API_KEY}
|
|
50
|
+
sources:
|
|
51
|
+
- https://github.com/VoltAgent/awesome-agent-skills
|
|
52
|
+
batch_size: 10
|
|
53
|
+
min_confidence: 0.7
|
|
54
|
+
|
|
55
|
+
matching:
|
|
56
|
+
embedding_model: text-embedding-3-small
|
|
57
|
+
similarity_threshold: 0.8
|
|
58
|
+
|
|
59
|
+
sync:
|
|
60
|
+
auto_check: false
|
|
61
|
+
check_interval_hours: 24
|
|
62
|
+
conflict_resolution: prompt
|
|
63
|
+
|
|
64
|
+
cli:
|
|
65
|
+
output_format: table
|
|
66
|
+
color: true
|
|
67
|
+
quiet: false
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
### 2. IndexerService Direct Execution
|
|
73
|
+
|
|
74
|
+
**Status**: ✅ Complete
|
|
75
|
+
|
|
76
|
+
**Goal**: CLI commands execute directly instead of delegating to subprocess.
|
|
77
|
+
|
|
78
|
+
**Tasks**:
|
|
79
|
+
- [x] Update `IndexerService.initialize()` to properly load scraper modules
|
|
80
|
+
- [x] Implement `scrape()` method with actual scraper integration
|
|
81
|
+
- [x] Implement `classify()` method with actual indexer integration
|
|
82
|
+
- [x] Implement `detectRelationships()` method
|
|
83
|
+
- [x] Implement `getTaxonomyTree()` using storage adapter
|
|
84
|
+
- [x] Implement `getStats()` method
|
|
85
|
+
- [x] Update CLI commands to use IndexerService directly
|
|
86
|
+
- [x] Add fallback to subprocess if modules unavailable
|
|
87
|
+
|
|
88
|
+
**Files Modified**:
|
|
89
|
+
- `src/services/indexer.ts` - Full IndexerService implementation
|
|
90
|
+
- `src/cli/commands/indexer/scrape.ts` - Direct execution with fallback
|
|
91
|
+
- `src/cli/commands/indexer/classify.ts` - Direct execution with fallback
|
|
92
|
+
- `src/cli/commands/indexer/taxonomy.ts` - Direct execution with fallback
|
|
93
|
+
- `src/cli/commands/indexer/relationships.ts` - Direct execution with fallback
|
|
94
|
+
- `src/cli/commands/indexer/stats.ts` - Direct execution with fallback
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Medium Priority Items
|
|
99
|
+
|
|
100
|
+
### 3. Direct SkillBank Integration
|
|
101
|
+
|
|
102
|
+
**Status**: ✅ Complete
|
|
103
|
+
|
|
104
|
+
**Goal**: IndexerService writes directly to SkillBank, no export/import step.
|
|
105
|
+
|
|
106
|
+
**Tasks**:
|
|
107
|
+
- [x] Implement `IndexerService.scrapeAndIndex()` method
|
|
108
|
+
- [x] Convert scraped skills on-the-fly using converter
|
|
109
|
+
- [x] Store directly via SkillBank.addSkill()
|
|
110
|
+
- [x] Auto-place in taxonomy after save
|
|
111
|
+
- [x] Update `skill-tree index scrape` to use direct integration
|
|
112
|
+
|
|
113
|
+
**Files Modified**:
|
|
114
|
+
- `src/services/indexer.ts` - Added `scrapeAndIndex()` method
|
|
115
|
+
- `src/skill-bank.ts` - Added `addSkill()` method with taxonomy placement
|
|
116
|
+
- `src/cli/commands/indexer/scrape.ts` - Added `--import` flag for auto-import
|
|
117
|
+
|
|
118
|
+
**Workflow After**:
|
|
119
|
+
```bash
|
|
120
|
+
# One command does everything
|
|
121
|
+
skill-tree index scrape https://github.com/org/repo
|
|
122
|
+
# Skills immediately available in skill-tree
|
|
123
|
+
skill-tree list
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
### 4. SkillBank Event System
|
|
129
|
+
|
|
130
|
+
**Status**: ✅ Complete
|
|
131
|
+
|
|
132
|
+
**Goal**: Event-driven hooks for skill lifecycle.
|
|
133
|
+
|
|
134
|
+
**Tasks**:
|
|
135
|
+
- [x] Add EventEmitter to SkillBank (already existed via `on()`)
|
|
136
|
+
- [x] Define event types: `skill:created`, `skill:updated`, `skill:deleted`
|
|
137
|
+
- [x] Emit events from `addSkill()`, `updateSkill()`, `deleteSkill()`
|
|
138
|
+
- [x] Hook relationship detection to `skill:created` for imported skills
|
|
139
|
+
- [x] Add `on()` and `off()` methods to SkillBank API
|
|
140
|
+
- [x] Add `onEvent()` for typed event subscriptions
|
|
141
|
+
- [x] Add `getStorage()` for advanced integration
|
|
142
|
+
|
|
143
|
+
**Files Modified**:
|
|
144
|
+
- `src/skill-bank.ts` - Enhanced event system with `off()`, `onEvent()`, `getStorage()`
|
|
145
|
+
|
|
146
|
+
**Event Interface**:
|
|
147
|
+
```typescript
|
|
148
|
+
interface SkillEvent {
|
|
149
|
+
type: 'skill:created' | 'skill:updated' | 'skill:deleted' | 'skill:deprecated';
|
|
150
|
+
skill: Skill;
|
|
151
|
+
timestamp: Date;
|
|
152
|
+
source?: 'manual' | 'imported' | 'extracted';
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## Lower Priority Items
|
|
159
|
+
|
|
160
|
+
### 5. Bidirectional Sync
|
|
161
|
+
|
|
162
|
+
**Status**: ✅ Complete
|
|
163
|
+
|
|
164
|
+
**Goal**: Keep skills in sync with remote sources.
|
|
165
|
+
|
|
166
|
+
**Tasks**:
|
|
167
|
+
- [x] Create `src/services/sync.ts`
|
|
168
|
+
- [x] Define `SkillSyncState` type
|
|
169
|
+
- [x] Implement `checkForUpdates()` - compare ETags/versions
|
|
170
|
+
- [x] Implement `pullRemoteChanges()` - fetch and merge
|
|
171
|
+
- [x] Implement `detectConflicts()` - local vs remote changes
|
|
172
|
+
- [x] Add `skill-tree index sync` command with options:
|
|
173
|
+
- [x] `--status` - show sync state
|
|
174
|
+
- [x] `--pull` - pull remote changes
|
|
175
|
+
- [x] `--dry-run` - preview changes
|
|
176
|
+
|
|
177
|
+
**Files Created**:
|
|
178
|
+
- `src/services/sync.ts` - Full SyncService implementation
|
|
179
|
+
|
|
180
|
+
**Files Modified**:
|
|
181
|
+
- `src/cli/commands/indexer/sync.ts` - Updated with sync status and pull commands
|
|
182
|
+
|
|
183
|
+
**Note**: SQLite sync_state table not yet added to schema (sync states stored in memory for now). This can be added in a future iteration.
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## Open Questions (Decisions Made)
|
|
188
|
+
|
|
189
|
+
| Question | Status | Decision |
|
|
190
|
+
|----------|--------|----------|
|
|
191
|
+
| Taxonomy ownership | ✅ Resolved | Preserve original, allow re-classification on demand |
|
|
192
|
+
| Deduplication strategy | ✅ Resolved | Use `externalSource.url` as dedup key |
|
|
193
|
+
| Version conflict resolution | ✅ Resolved | Default to manual, with `--resolve` flag for automation |
|
|
194
|
+
| Namespace separation | ✅ Resolved | Use `source.type` field, no namespace prefix |
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## Success Criteria Checklist
|
|
199
|
+
|
|
200
|
+
- [x] Single CLI (`skill-tree`) for all operations
|
|
201
|
+
- [x] Single database with skills from all sources
|
|
202
|
+
- [x] Taxonomy browsing works for all skills
|
|
203
|
+
- [x] Relationships detected across indexed and extracted skills
|
|
204
|
+
- [x] Clear provenance tracking (source: extracted vs indexed)
|
|
205
|
+
- [x] Seamless workflow from discovery to usage
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Change Log
|
|
210
|
+
|
|
211
|
+
| Date | Change |
|
|
212
|
+
|------|--------|
|
|
213
|
+
| 2025-01-XX | Initial gap analysis created |
|
|
214
|
+
| 2025-01-XX | Phases 1-3 implemented |
|
|
215
|
+
| 2025-01-XX | Tests added (56 tests) |
|
|
216
|
+
| 2025-02-01 | Unified configuration system implemented |
|
|
217
|
+
| 2025-02-01 | IndexerService direct execution implemented |
|
|
218
|
+
| 2025-02-01 | Direct SkillBank integration implemented |
|
|
219
|
+
| 2025-02-01 | SkillBank event system enhanced |
|
|
220
|
+
| 2025-02-01 | Bidirectional sync service implemented |
|
|
221
|
+
| 2025-02-01 | All phases complete |
|