claude-code-swarm 0.3.4 → 0.3.6
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-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +22 -1
- package/.claude-plugin/run-agent-inbox-mcp.sh +95 -0
- package/.claude-plugin/run-minimem-mcp.sh +98 -0
- package/.claude-plugin/run-opentasks-mcp.sh +65 -0
- package/.gitattributes +3 -0
- package/.opentasks/config.json +9 -0
- package/.opentasks/graph.jsonl +0 -0
- package/CLAUDE.md +196 -36
- package/e2e/helpers/cleanup.mjs +17 -3
- package/e2e/helpers/map-mock-server.mjs +201 -25
- package/e2e/helpers/opentasks-daemon.mjs +149 -0
- package/e2e/helpers/sidecar.mjs +222 -0
- package/e2e/helpers/workspace.mjs +2 -1
- package/e2e/tier5-sidecar-inbox.test.mjs +900 -0
- package/e2e/tier6-inbox-mcp.test.mjs +173 -0
- package/e2e/tier6-live-agent.test.mjs +759 -0
- package/e2e/tier6-live-inbox-flow.test.mjs +938 -0
- package/e2e/tier7-hooks.test.mjs +992 -0
- package/e2e/tier7-minimem.test.mjs +461 -0
- package/e2e/tier7-opentasks.test.mjs +513 -0
- package/e2e/tier7-skilltree.test.mjs +506 -0
- package/e2e/vitest.config.e2e.mjs +1 -1
- package/hooks/hooks.json +15 -8
- package/package.json +17 -1
- package/references/agent-inbox/CLAUDE.md +151 -0
- package/references/agent-inbox/README.md +238 -0
- package/references/agent-inbox/docs/CLAUDE-CODE-SWARM-PROPOSAL.md +137 -0
- package/references/agent-inbox/docs/DESIGN.md +1156 -0
- package/references/agent-inbox/hooks/inbox-hook.mjs +119 -0
- package/references/agent-inbox/hooks/register-hook.mjs +69 -0
- package/references/agent-inbox/package-lock.json +3347 -0
- package/references/agent-inbox/package.json +58 -0
- package/references/agent-inbox/rules/agent-inbox.md +78 -0
- package/references/agent-inbox/src/federation/address.ts +61 -0
- package/references/agent-inbox/src/federation/connection-manager.ts +573 -0
- package/references/agent-inbox/src/federation/delivery-queue.ts +222 -0
- package/references/agent-inbox/src/federation/index.ts +6 -0
- package/references/agent-inbox/src/federation/routing-engine.ts +188 -0
- package/references/agent-inbox/src/federation/trust.ts +71 -0
- package/references/agent-inbox/src/index.ts +404 -0
- package/references/agent-inbox/src/ipc/ipc-server.ts +265 -0
- package/references/agent-inbox/src/jsonrpc/mail-server.ts +382 -0
- package/references/agent-inbox/src/map/map-client.ts +414 -0
- package/references/agent-inbox/src/mcp/mcp-proxy.ts +326 -0
- package/references/agent-inbox/src/mcp/mcp-server.ts +272 -0
- package/references/agent-inbox/src/mesh/delivery-bridge.ts +110 -0
- package/references/agent-inbox/src/mesh/mesh-connector.ts +41 -0
- package/references/agent-inbox/src/mesh/mesh-transport.ts +157 -0
- package/references/agent-inbox/src/mesh/type-mapper.ts +239 -0
- package/references/agent-inbox/src/push/notifier.ts +233 -0
- package/references/agent-inbox/src/registry/warm-registry.ts +255 -0
- package/references/agent-inbox/src/router/message-router.ts +175 -0
- package/references/agent-inbox/src/storage/interface.ts +48 -0
- package/references/agent-inbox/src/storage/memory.ts +145 -0
- package/references/agent-inbox/src/storage/sqlite.ts +671 -0
- package/references/agent-inbox/src/traceability/traceability.ts +183 -0
- package/references/agent-inbox/src/types.ts +329 -0
- package/references/agent-inbox/test/federation/address.test.ts +101 -0
- package/references/agent-inbox/test/federation/connection-manager.test.ts +546 -0
- package/references/agent-inbox/test/federation/delivery-queue.test.ts +159 -0
- package/references/agent-inbox/test/federation/integration.test.ts +857 -0
- package/references/agent-inbox/test/federation/routing-engine.test.ts +117 -0
- package/references/agent-inbox/test/federation/sdk-integration.test.ts +744 -0
- package/references/agent-inbox/test/federation/trust.test.ts +89 -0
- package/references/agent-inbox/test/ipc-jsonrpc.test.ts +113 -0
- package/references/agent-inbox/test/ipc-new-commands.test.ts +200 -0
- package/references/agent-inbox/test/ipc-server.test.ts +197 -0
- package/references/agent-inbox/test/mail-server.test.ts +285 -0
- package/references/agent-inbox/test/map-client.test.ts +408 -0
- package/references/agent-inbox/test/mcp-proxy.test.ts +191 -0
- package/references/agent-inbox/test/mesh/delivery-bridge.test.ts +178 -0
- package/references/agent-inbox/test/mesh/e2e-mesh.test.ts +527 -0
- package/references/agent-inbox/test/mesh/e2e-real-meshpeer.test.ts +629 -0
- package/references/agent-inbox/test/mesh/federation-mesh.test.ts +269 -0
- package/references/agent-inbox/test/mesh/mesh-connector.test.ts +66 -0
- package/references/agent-inbox/test/mesh/mesh-transport.test.ts +191 -0
- package/references/agent-inbox/test/mesh/meshpeer-integration.test.ts +442 -0
- package/references/agent-inbox/test/mesh/mock-mesh.ts +125 -0
- package/references/agent-inbox/test/mesh/mock-meshpeer.ts +266 -0
- package/references/agent-inbox/test/mesh/type-mapper.test.ts +226 -0
- package/references/agent-inbox/test/message-router.test.ts +184 -0
- package/references/agent-inbox/test/push-notifier.test.ts +139 -0
- package/references/agent-inbox/test/registry/warm-registry.test.ts +171 -0
- package/references/agent-inbox/test/sqlite-prefix.test.ts +192 -0
- package/references/agent-inbox/test/sqlite-storage.test.ts +243 -0
- package/references/agent-inbox/test/storage.test.ts +196 -0
- package/references/agent-inbox/test/traceability.test.ts +123 -0
- package/references/agent-inbox/test/wake.test.ts +330 -0
- package/references/agent-inbox/tsconfig.json +20 -0
- package/references/agent-inbox/tsup.config.ts +10 -0
- package/references/agent-inbox/vitest.config.ts +8 -0
- 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 +329 -0
- package/references/minimem/README.md +565 -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 +76 -0
- package/references/minimem/scripts/postbuild.js +49 -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-frontmatter.test.ts +148 -0
- package/references/minimem/src/__tests__/knowledge.test.ts +148 -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 +760 -0
- package/references/minimem/src/cli/__tests__/contained-layout.test.ts +286 -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 +415 -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 +166 -0
- package/references/minimem/src/cli/commands/mcp.ts +221 -0
- package/references/minimem/src/cli/commands/push-pull.ts +213 -0
- package/references/minimem/src/cli/commands/search.ts +223 -0
- package/references/minimem/src/cli/commands/status.ts +84 -0
- package/references/minimem/src/cli/commands/store.ts +189 -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 +611 -0
- package/references/minimem/src/cli/index.ts +299 -0
- package/references/minimem/src/cli/shared.ts +189 -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 +205 -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 +358 -0
- package/references/minimem/src/cli/sync/validation.ts +206 -0
- package/references/minimem/src/cli/sync/watcher.ts +237 -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 +132 -0
- package/references/minimem/src/internal.ts +299 -0
- package/references/minimem/src/minimem.ts +1291 -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 +347 -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/src/store/__tests__/manifest.test.ts +177 -0
- package/references/minimem/src/store/__tests__/materialize.test.ts +52 -0
- package/references/minimem/src/store/__tests__/store-graph.test.ts +228 -0
- package/references/minimem/src/store/index.ts +27 -0
- package/references/minimem/src/store/manifest.ts +203 -0
- package/references/minimem/src/store/materialize.ts +185 -0
- package/references/minimem/src/store/store-graph.ts +252 -0
- package/references/minimem/tsconfig.json +19 -0
- package/references/minimem/tsup.config.ts +26 -0
- package/references/minimem/vitest.config.ts +29 -0
- package/references/multi-agent-protocol/.sudocode/issues.jsonl +120 -0
- package/references/multi-agent-protocol/.sudocode/specs.jsonl +15 -0
- package/references/multi-agent-protocol/LICENSE +21 -0
- package/references/multi-agent-protocol/README.md +113 -0
- package/references/multi-agent-protocol/docs/00-design-specification.md +496 -0
- package/references/multi-agent-protocol/docs/01-open-questions.md +1050 -0
- package/references/multi-agent-protocol/docs/02-wire-protocol.md +296 -0
- package/references/multi-agent-protocol/docs/03-streaming-semantics.md +252 -0
- package/references/multi-agent-protocol/docs/04-error-handling.md +231 -0
- package/references/multi-agent-protocol/docs/05-connection-model.md +244 -0
- package/references/multi-agent-protocol/docs/06-visibility-permissions.md +243 -0
- package/references/multi-agent-protocol/docs/07-federation.md +335 -0
- package/references/multi-agent-protocol/docs/08-macro-agent-migration.md +253 -0
- package/references/multi-agent-protocol/docs/09-authentication.md +748 -0
- package/references/multi-agent-protocol/docs/10-environment-awareness.md +242 -0
- package/references/multi-agent-protocol/docs/10-mail-protocol.md +553 -0
- package/references/multi-agent-protocol/docs/11-anp-inspired-improvements.md +1079 -0
- package/references/multi-agent-protocol/docs/11-trajectory-protocol.md +292 -0
- package/references/multi-agent-protocol/docs/12-anp-implementation-plan.md +641 -0
- package/references/multi-agent-protocol/docs/agent-iam-integration.md +877 -0
- package/references/multi-agent-protocol/docs/agentic-mesh-integration-draft.md +459 -0
- package/references/multi-agent-protocol/docs/git-transport-draft.md +251 -0
- package/references/multi-agent-protocol/docs-site/Gemfile +22 -0
- package/references/multi-agent-protocol/docs-site/README.md +82 -0
- package/references/multi-agent-protocol/docs-site/_config.yml +91 -0
- package/references/multi-agent-protocol/docs-site/_includes/head_custom.html +20 -0
- package/references/multi-agent-protocol/docs-site/_sass/color_schemes/map.scss +42 -0
- package/references/multi-agent-protocol/docs-site/_sass/custom/custom.scss +34 -0
- package/references/multi-agent-protocol/docs-site/examples/full-integration.md +510 -0
- package/references/multi-agent-protocol/docs-site/examples/index.md +138 -0
- package/references/multi-agent-protocol/docs-site/examples/simple-chat.md +282 -0
- package/references/multi-agent-protocol/docs-site/examples/task-queue.md +399 -0
- package/references/multi-agent-protocol/docs-site/getting-started/index.md +98 -0
- package/references/multi-agent-protocol/docs-site/getting-started/installation.md +219 -0
- package/references/multi-agent-protocol/docs-site/getting-started/overview.md +172 -0
- package/references/multi-agent-protocol/docs-site/getting-started/quickstart.md +237 -0
- package/references/multi-agent-protocol/docs-site/index.md +136 -0
- package/references/multi-agent-protocol/docs-site/protocol/authentication.md +391 -0
- package/references/multi-agent-protocol/docs-site/protocol/connection-model.md +376 -0
- package/references/multi-agent-protocol/docs-site/protocol/design.md +284 -0
- package/references/multi-agent-protocol/docs-site/protocol/error-handling.md +312 -0
- package/references/multi-agent-protocol/docs-site/protocol/federation.md +449 -0
- package/references/multi-agent-protocol/docs-site/protocol/index.md +129 -0
- package/references/multi-agent-protocol/docs-site/protocol/permissions.md +398 -0
- package/references/multi-agent-protocol/docs-site/protocol/streaming.md +353 -0
- package/references/multi-agent-protocol/docs-site/protocol/wire-protocol.md +369 -0
- package/references/multi-agent-protocol/docs-site/sdk/api/agent.md +357 -0
- package/references/multi-agent-protocol/docs-site/sdk/api/client.md +380 -0
- package/references/multi-agent-protocol/docs-site/sdk/api/index.md +62 -0
- package/references/multi-agent-protocol/docs-site/sdk/api/server.md +453 -0
- package/references/multi-agent-protocol/docs-site/sdk/api/types.md +468 -0
- package/references/multi-agent-protocol/docs-site/sdk/guides/agent.md +375 -0
- package/references/multi-agent-protocol/docs-site/sdk/guides/authentication.md +405 -0
- package/references/multi-agent-protocol/docs-site/sdk/guides/client.md +352 -0
- package/references/multi-agent-protocol/docs-site/sdk/guides/index.md +89 -0
- package/references/multi-agent-protocol/docs-site/sdk/guides/server.md +360 -0
- package/references/multi-agent-protocol/docs-site/sdk/guides/testing.md +446 -0
- package/references/multi-agent-protocol/docs-site/sdk/guides/transports.md +363 -0
- package/references/multi-agent-protocol/docs-site/sdk/index.md +206 -0
- package/references/multi-agent-protocol/package-lock.json +4230 -0
- package/references/multi-agent-protocol/package.json +56 -0
- package/references/multi-agent-protocol/schema/meta.json +584 -0
- package/references/multi-agent-protocol/schema/schema.json +3067 -0
- package/references/openhive/.claude/settings.json +6 -0
- package/references/openhive/.dockerignore +54 -0
- package/references/openhive/.github/workflows/docker.yml +52 -0
- package/references/openhive/.sudocode/issues.jsonl +24 -0
- package/references/openhive/.sudocode/specs.jsonl +4 -0
- package/references/openhive/CLAUDE.md +88 -0
- package/references/openhive/Dockerfile +105 -0
- package/references/openhive/README.md +745 -0
- package/references/openhive/bin/openhive.js +6 -0
- package/references/openhive/cloudbuild.yaml +80 -0
- package/references/openhive/deploy/cloud-run.sh +106 -0
- package/references/openhive/deploy/openhive.env.example +80 -0
- package/references/openhive/deploy/openhive.service +91 -0
- package/references/openhive/docker-compose.yml +67 -0
- package/references/openhive/docker-entrypoint.sh +117 -0
- package/references/openhive/docs/API_MIGRATION.md +176 -0
- package/references/openhive/docs/DEPLOYMENT.md +847 -0
- package/references/openhive/docs/DESIGN_v1.md +489 -0
- package/references/openhive/docs/DESIGN_v2.md +564 -0
- package/references/openhive/docs/HEADSCALE_HOSTING_SPEC.md +513 -0
- package/references/openhive/docs/HIVE_SYNC_DESIGN.md +2362 -0
- package/references/openhive/docs/HIVE_SYNC_IMPLEMENTATION_PLAN.md +1169 -0
- package/references/openhive/docs/HOSTING.md +601 -0
- package/references/openhive/docs/IMPLEMENTATION_PLAN.md +428 -0
- package/references/openhive/docs/LOCAL_SETUP.md +506 -0
- package/references/openhive/docs/MACRO_AGENT_ATLAS_EXTENSION.md +351 -0
- package/references/openhive/docs/MEMORY_BANK_SYNC_SPEC.md +909 -0
- package/references/openhive/docs/PLAN_v1.md +471 -0
- package/references/openhive/docs/PLAN_v2.md +623 -0
- package/references/openhive/docs/WEBSOCKET.md +267 -0
- package/references/openhive/docs/openswarm-bootstrap-token-spec.md +240 -0
- package/references/openhive/ecosystem.config.cjs +76 -0
- package/references/openhive/fly.toml +63 -0
- package/references/openhive/package-lock.json +17640 -0
- package/references/openhive/package.json +128 -0
- package/references/openhive/packages/openhive-types/package-lock.json +1473 -0
- package/references/openhive/packages/openhive-types/package.json +42 -0
- package/references/openhive/packages/openhive-types/src/index.ts +36 -0
- package/references/openhive/packages/openhive-types/src/map-coordination.ts +92 -0
- package/references/openhive/packages/openhive-types/src/map-session-sync.ts +50 -0
- package/references/openhive/packages/openhive-types/src/map-sync.ts +68 -0
- package/references/openhive/packages/openhive-types/tsconfig.json +15 -0
- package/references/openhive/packages/openhive-types/tsconfig.tsbuildinfo +1 -0
- package/references/openhive/packages/openhive-types/tsup.config.ts +12 -0
- package/references/openhive/railway.json +13 -0
- package/references/openhive/railway.toml +24 -0
- package/references/openhive/render.yaml +51 -0
- package/references/openhive/src/__tests__/auth.test.ts +148 -0
- package/references/openhive/src/__tests__/bridge/credentials.test.ts +65 -0
- package/references/openhive/src/__tests__/bridge/dal.test.ts +279 -0
- package/references/openhive/src/__tests__/bridge/inbound.test.ts +349 -0
- package/references/openhive/src/__tests__/bridge/manager.test.ts +419 -0
- package/references/openhive/src/__tests__/bridge/mentions.test.ts +83 -0
- package/references/openhive/src/__tests__/bridge/outbound.test.ts +209 -0
- package/references/openhive/src/__tests__/bridge/slack-adapter.test.ts +276 -0
- package/references/openhive/src/__tests__/cli.test.ts +342 -0
- package/references/openhive/src/__tests__/config.test.ts +205 -0
- package/references/openhive/src/__tests__/coordination/coordination.test.ts +1072 -0
- package/references/openhive/src/__tests__/coordination/cross-instance.test.ts +540 -0
- package/references/openhive/src/__tests__/coordination/e2e.test.ts +780 -0
- package/references/openhive/src/__tests__/data-dir.test.ts +332 -0
- package/references/openhive/src/__tests__/db.test.ts +258 -0
- package/references/openhive/src/__tests__/discovery.test.ts +288 -0
- package/references/openhive/src/__tests__/events/dal.test.ts +371 -0
- package/references/openhive/src/__tests__/events/dispatch.test.ts +202 -0
- package/references/openhive/src/__tests__/events/e2e.test.ts +528 -0
- package/references/openhive/src/__tests__/events/normalizers.test.ts +263 -0
- package/references/openhive/src/__tests__/events/router.test.ts +314 -0
- package/references/openhive/src/__tests__/events/routes.test.ts +407 -0
- package/references/openhive/src/__tests__/follows.test.ts +328 -0
- package/references/openhive/src/__tests__/helpers/test-dirs.ts +44 -0
- package/references/openhive/src/__tests__/ingest-keys.test.ts +925 -0
- package/references/openhive/src/__tests__/map/sync-client-content.test.ts +288 -0
- package/references/openhive/src/__tests__/map/sync-client.test.ts +500 -0
- package/references/openhive/src/__tests__/map/sync-listener.test.ts +504 -0
- package/references/openhive/src/__tests__/middleware/hostname-guard.test.ts +73 -0
- package/references/openhive/src/__tests__/migrations.test.ts +260 -0
- package/references/openhive/src/__tests__/opentasks/client.test.ts +497 -0
- package/references/openhive/src/__tests__/opentasks/discovery.test.ts +283 -0
- package/references/openhive/src/__tests__/opentasks/e2e.test.ts +767 -0
- package/references/openhive/src/__tests__/routes/agents.test.ts +417 -0
- package/references/openhive/src/__tests__/routes/opentasks-content.test.ts +493 -0
- package/references/openhive/src/__tests__/routes/resource-content.test.ts +1741 -0
- package/references/openhive/src/__tests__/sessions/adapters.test.ts +524 -0
- package/references/openhive/src/__tests__/sessions/routes.test.ts +1053 -0
- package/references/openhive/src/__tests__/sessions/storage.test.ts +545 -0
- package/references/openhive/src/__tests__/sessions/trajectory-checkpoints.test.ts +349 -0
- package/references/openhive/src/__tests__/sessions/trajectory-routes.test.ts +290 -0
- package/references/openhive/src/__tests__/swarm/config.test.ts +125 -0
- package/references/openhive/src/__tests__/swarm/credentials.test.ts +254 -0
- package/references/openhive/src/__tests__/swarm/dal.test.ts +290 -0
- package/references/openhive/src/__tests__/swarm/e2e.test.ts +827 -0
- package/references/openhive/src/__tests__/swarm/fixtures/exit-immediately.js +3 -0
- package/references/openhive/src/__tests__/swarm/fixtures/map-server.js +147 -0
- package/references/openhive/src/__tests__/swarm/fixtures/sleep-server.js +52 -0
- package/references/openhive/src/__tests__/swarm/local-provider.test.ts +279 -0
- package/references/openhive/src/__tests__/swarm/manager.test.ts +305 -0
- package/references/openhive/src/__tests__/swarm/routes.test.ts +396 -0
- package/references/openhive/src/__tests__/swarm/workspace.test.ts +257 -0
- package/references/openhive/src/__tests__/swarmhub/client.test.ts +324 -0
- package/references/openhive/src/__tests__/swarmhub/config.test.ts +213 -0
- package/references/openhive/src/__tests__/swarmhub/connector.test.ts +581 -0
- package/references/openhive/src/__tests__/swarmhub/routes.test.ts +639 -0
- package/references/openhive/src/__tests__/swarmhub/slack-client.test.ts +164 -0
- package/references/openhive/src/__tests__/swarmhub/slack-connector.test.ts +164 -0
- package/references/openhive/src/__tests__/swarmhub/slack-routes.test.ts +373 -0
- package/references/openhive/src/__tests__/swarmhub/webhook-handler.test.ts +295 -0
- package/references/openhive/src/__tests__/sync/resource-sync.test.ts +1418 -0
- package/references/openhive/src/__tests__/sync/sync.test.ts +800 -0
- package/references/openhive/src/api/index.ts +65 -0
- package/references/openhive/src/api/middleware/auth.ts +227 -0
- package/references/openhive/src/api/middleware/hostname-guard.ts +38 -0
- package/references/openhive/src/api/routes/admin.ts +366 -0
- package/references/openhive/src/api/routes/agents.ts +223 -0
- package/references/openhive/src/api/routes/auth.ts +164 -0
- package/references/openhive/src/api/routes/bridges.ts +384 -0
- package/references/openhive/src/api/routes/comments.ts +294 -0
- package/references/openhive/src/api/routes/coordination.ts +312 -0
- package/references/openhive/src/api/routes/events.ts +158 -0
- package/references/openhive/src/api/routes/federation.ts +367 -0
- package/references/openhive/src/api/routes/feed.ts +212 -0
- package/references/openhive/src/api/routes/hives.ts +264 -0
- package/references/openhive/src/api/routes/map.ts +674 -0
- package/references/openhive/src/api/routes/memory-banks.ts +971 -0
- package/references/openhive/src/api/routes/posts.ts +342 -0
- package/references/openhive/src/api/routes/resource-content.ts +727 -0
- package/references/openhive/src/api/routes/resources.ts +1013 -0
- package/references/openhive/src/api/routes/search.ts +45 -0
- package/references/openhive/src/api/routes/sessions.ts +1187 -0
- package/references/openhive/src/api/routes/swarm-hosting.ts +313 -0
- package/references/openhive/src/api/routes/sync-protocol.ts +168 -0
- package/references/openhive/src/api/routes/sync.ts +279 -0
- package/references/openhive/src/api/routes/uploads.ts +174 -0
- package/references/openhive/src/api/routes/webhooks.ts +603 -0
- package/references/openhive/src/api/schemas/agents.ts +26 -0
- package/references/openhive/src/api/schemas/comments.ts +22 -0
- package/references/openhive/src/api/schemas/hives.ts +33 -0
- package/references/openhive/src/api/schemas/posts.ts +37 -0
- package/references/openhive/src/api/schemas/sync.ts +56 -0
- package/references/openhive/src/auth/index.ts +2 -0
- package/references/openhive/src/auth/jwks.ts +58 -0
- package/references/openhive/src/bridge/adapters/slack.ts +306 -0
- package/references/openhive/src/bridge/credentials.ts +72 -0
- package/references/openhive/src/bridge/inbound.ts +288 -0
- package/references/openhive/src/bridge/index.ts +42 -0
- package/references/openhive/src/bridge/manager.ts +425 -0
- package/references/openhive/src/bridge/mentions.ts +42 -0
- package/references/openhive/src/bridge/outbound.ts +103 -0
- package/references/openhive/src/bridge/schema.ts +82 -0
- package/references/openhive/src/bridge/types.ts +238 -0
- package/references/openhive/src/cli/network.ts +480 -0
- package/references/openhive/src/cli.ts +620 -0
- package/references/openhive/src/config.ts +611 -0
- package/references/openhive/src/coordination/index.ts +43 -0
- package/references/openhive/src/coordination/listener.ts +92 -0
- package/references/openhive/src/coordination/schema.ts +79 -0
- package/references/openhive/src/coordination/service.ts +233 -0
- package/references/openhive/src/coordination/types.ts +177 -0
- package/references/openhive/src/data-dir.ts +105 -0
- package/references/openhive/src/db/adapters/index.ts +21 -0
- package/references/openhive/src/db/adapters/postgres.ts +310 -0
- package/references/openhive/src/db/adapters/sqlite.ts +56 -0
- package/references/openhive/src/db/adapters/types.ts +65 -0
- package/references/openhive/src/db/dal/agents.ts +430 -0
- package/references/openhive/src/db/dal/bridge.ts +336 -0
- package/references/openhive/src/db/dal/comments.ts +213 -0
- package/references/openhive/src/db/dal/coordination.ts +361 -0
- package/references/openhive/src/db/dal/events.ts +381 -0
- package/references/openhive/src/db/dal/follows.ts +96 -0
- package/references/openhive/src/db/dal/hives.ts +198 -0
- package/references/openhive/src/db/dal/ingest-keys.ts +176 -0
- package/references/openhive/src/db/dal/instances.ts +196 -0
- package/references/openhive/src/db/dal/invites.ts +123 -0
- package/references/openhive/src/db/dal/map.ts +750 -0
- package/references/openhive/src/db/dal/posts.ts +274 -0
- package/references/openhive/src/db/dal/remote-agents.ts +56 -0
- package/references/openhive/src/db/dal/search.ts +238 -0
- package/references/openhive/src/db/dal/sync-events.ts +160 -0
- package/references/openhive/src/db/dal/sync-groups.ts +100 -0
- package/references/openhive/src/db/dal/sync-peer-configs.ts +216 -0
- package/references/openhive/src/db/dal/sync-peers.ts +145 -0
- package/references/openhive/src/db/dal/syncable-resources.ts +888 -0
- package/references/openhive/src/db/dal/trajectory-checkpoints.ts +291 -0
- package/references/openhive/src/db/dal/uploads.ts +124 -0
- package/references/openhive/src/db/dal/votes.ts +124 -0
- package/references/openhive/src/db/index.ts +293 -0
- package/references/openhive/src/db/providers/index.ts +75 -0
- package/references/openhive/src/db/providers/postgres.ts +529 -0
- package/references/openhive/src/db/providers/sqlite.ts +1383 -0
- package/references/openhive/src/db/providers/turso.ts +1360 -0
- package/references/openhive/src/db/providers/types.ts +516 -0
- package/references/openhive/src/db/schema.ts +641 -0
- package/references/openhive/src/discovery/index.ts +403 -0
- package/references/openhive/src/events/dispatch.ts +106 -0
- package/references/openhive/src/events/index.ts +17 -0
- package/references/openhive/src/events/normalizers/github.ts +133 -0
- package/references/openhive/src/events/normalizers/index.ts +62 -0
- package/references/openhive/src/events/normalizers/slack.ts +50 -0
- package/references/openhive/src/events/router.ts +156 -0
- package/references/openhive/src/events/schema.ts +66 -0
- package/references/openhive/src/events/types.ts +130 -0
- package/references/openhive/src/federation/index.ts +1 -0
- package/references/openhive/src/federation/service.ts +776 -0
- package/references/openhive/src/headscale/client.ts +256 -0
- package/references/openhive/src/headscale/config.ts +212 -0
- package/references/openhive/src/headscale/index.ts +23 -0
- package/references/openhive/src/headscale/manager.ts +249 -0
- package/references/openhive/src/headscale/sync.ts +272 -0
- package/references/openhive/src/headscale/types.ts +231 -0
- package/references/openhive/src/index.ts +225 -0
- package/references/openhive/src/map/client-entry.ts +26 -0
- package/references/openhive/src/map/index.ts +76 -0
- package/references/openhive/src/map/schema.ts +119 -0
- package/references/openhive/src/map/service.ts +323 -0
- package/references/openhive/src/map/sync-client.ts +696 -0
- package/references/openhive/src/map/sync-listener.ts +409 -0
- package/references/openhive/src/map/types.ts +290 -0
- package/references/openhive/src/network/factory.ts +118 -0
- package/references/openhive/src/network/headscale-provider.ts +437 -0
- package/references/openhive/src/network/index.ts +43 -0
- package/references/openhive/src/network/tailscale-client.ts +289 -0
- package/references/openhive/src/network/tailscale-provider.ts +287 -0
- package/references/openhive/src/network/types.ts +178 -0
- package/references/openhive/src/opentasks-client/client.ts +374 -0
- package/references/openhive/src/opentasks-client/index.ts +7 -0
- package/references/openhive/src/realtime/index.ts +282 -0
- package/references/openhive/src/server.ts +1069 -0
- package/references/openhive/src/services/email.ts +177 -0
- package/references/openhive/src/services/sitemap.ts +135 -0
- package/references/openhive/src/sessions/adapters/claude.ts +466 -0
- package/references/openhive/src/sessions/adapters/codex.ts +265 -0
- package/references/openhive/src/sessions/adapters/index.ts +263 -0
- package/references/openhive/src/sessions/adapters/raw.ts +144 -0
- package/references/openhive/src/sessions/adapters/types.ts +83 -0
- package/references/openhive/src/sessions/index.ts +50 -0
- package/references/openhive/src/sessions/storage/adapters/gcs.ts +277 -0
- package/references/openhive/src/sessions/storage/adapters/local.ts +240 -0
- package/references/openhive/src/sessions/storage/adapters/s3.ts +321 -0
- package/references/openhive/src/sessions/storage/index.ts +231 -0
- package/references/openhive/src/sessions/storage/types.ts +189 -0
- package/references/openhive/src/sessions/types.ts +415 -0
- package/references/openhive/src/shared/types/index.ts +45 -0
- package/references/openhive/src/shared/types/map-coordination.ts +92 -0
- package/references/openhive/src/shared/types/map-session-sync.ts +170 -0
- package/references/openhive/src/shared/types/map-sync.ts +68 -0
- package/references/openhive/src/skill.ts +203 -0
- package/references/openhive/src/storage/adapters/local.ts +169 -0
- package/references/openhive/src/storage/adapters/s3.ts +195 -0
- package/references/openhive/src/storage/index.ts +64 -0
- package/references/openhive/src/storage/types.ts +69 -0
- package/references/openhive/src/swarm/credentials.ts +98 -0
- package/references/openhive/src/swarm/dal.ts +206 -0
- package/references/openhive/src/swarm/index.ts +28 -0
- package/references/openhive/src/swarm/manager.ts +917 -0
- package/references/openhive/src/swarm/providers/local.ts +338 -0
- package/references/openhive/src/swarm/providers/sandboxed-local.ts +478 -0
- package/references/openhive/src/swarm/providers/workspace.ts +52 -0
- package/references/openhive/src/swarm/schema.ts +43 -0
- package/references/openhive/src/swarm/types.ts +333 -0
- package/references/openhive/src/swarmhub/client.ts +279 -0
- package/references/openhive/src/swarmhub/connector.ts +463 -0
- package/references/openhive/src/swarmhub/index.ts +43 -0
- package/references/openhive/src/swarmhub/routes.ts +296 -0
- package/references/openhive/src/swarmhub/types.ts +213 -0
- package/references/openhive/src/swarmhub/webhook-handler.ts +126 -0
- package/references/openhive/src/sync/compaction.ts +193 -0
- package/references/openhive/src/sync/coordination-hooks.ts +154 -0
- package/references/openhive/src/sync/crypto.ts +79 -0
- package/references/openhive/src/sync/gossip.ts +136 -0
- package/references/openhive/src/sync/hooks.ts +202 -0
- package/references/openhive/src/sync/materializer-repo.ts +256 -0
- package/references/openhive/src/sync/materializer.ts +682 -0
- package/references/openhive/src/sync/middleware.ts +140 -0
- package/references/openhive/src/sync/peer-resolver.ts +157 -0
- package/references/openhive/src/sync/resource-hooks.ts +161 -0
- package/references/openhive/src/sync/schema.ts +158 -0
- package/references/openhive/src/sync/service.ts +990 -0
- package/references/openhive/src/sync/types.ts +369 -0
- package/references/openhive/src/terminal/index.ts +4 -0
- package/references/openhive/src/terminal/pty-manager.ts +337 -0
- package/references/openhive/src/terminal/resolve-tui.ts +44 -0
- package/references/openhive/src/terminal/terminal-ws.ts +251 -0
- package/references/openhive/src/types.ts +442 -0
- package/references/openhive/src/utils/git-remote.ts +329 -0
- package/references/openhive/src/web/App.tsx +77 -0
- package/references/openhive/src/web/__tests__/components/dashboard/RecentActivity.test.tsx +77 -0
- package/references/openhive/src/web/__tests__/components/dashboard/StatsOverview.test.tsx +62 -0
- package/references/openhive/src/web/__tests__/components/dashboard/SwarmStatusSummary.test.tsx +122 -0
- package/references/openhive/src/web/__tests__/components/dashboard/SyncResourcesStatus.test.tsx +104 -0
- package/references/openhive/src/web/__tests__/components/layout/Sidebar.test.tsx +110 -0
- package/references/openhive/src/web/__tests__/components/swarm/StatusBadges.test.tsx +65 -0
- package/references/openhive/src/web/__tests__/components/terminal/query-responses.test.ts +143 -0
- package/references/openhive/src/web/__tests__/components/terminal/terminal-mouse.test.ts +509 -0
- package/references/openhive/src/web/__tests__/hooks/useEventsApi.test.ts +378 -0
- package/references/openhive/src/web/__tests__/pages/Dashboard.test.tsx +57 -0
- package/references/openhive/src/web/__tests__/pages/Events.test.tsx +886 -0
- package/references/openhive/src/web/__tests__/pages/Explore.test.tsx +63 -0
- package/references/openhive/src/web/__tests__/routing.test.tsx +79 -0
- package/references/openhive/src/web/__tests__/setup.ts +37 -0
- package/references/openhive/src/web/__tests__/stores/dashboard.test.ts +49 -0
- package/references/openhive/src/web/components/common/AgentBadge.tsx +58 -0
- package/references/openhive/src/web/components/common/Avatar.tsx +78 -0
- package/references/openhive/src/web/components/common/ErrorBoundary.tsx +76 -0
- package/references/openhive/src/web/components/common/Highlight.tsx +79 -0
- package/references/openhive/src/web/components/common/ImageUpload.tsx +209 -0
- package/references/openhive/src/web/components/common/LoadingSpinner.tsx +37 -0
- package/references/openhive/src/web/components/common/Logo.tsx +21 -0
- package/references/openhive/src/web/components/common/Markdown.tsx +53 -0
- package/references/openhive/src/web/components/common/ProtectedRoute.tsx +18 -0
- package/references/openhive/src/web/components/common/ThemeToggle.tsx +38 -0
- package/references/openhive/src/web/components/common/TimeAgo.tsx +17 -0
- package/references/openhive/src/web/components/common/Toast.tsx +70 -0
- package/references/openhive/src/web/components/common/VoteButtons.tsx +100 -0
- package/references/openhive/src/web/components/dashboard/RecentActivity.tsx +100 -0
- package/references/openhive/src/web/components/dashboard/StatsOverview.tsx +40 -0
- package/references/openhive/src/web/components/dashboard/SwarmStatusSummary.tsx +89 -0
- package/references/openhive/src/web/components/dashboard/SyncResourcesStatus.tsx +81 -0
- package/references/openhive/src/web/components/feed/FeedControls.tsx +38 -0
- package/references/openhive/src/web/components/feed/NewPostsIndicator.tsx +75 -0
- package/references/openhive/src/web/components/feed/PostCard.tsx +129 -0
- package/references/openhive/src/web/components/feed/PostList.tsx +83 -0
- package/references/openhive/src/web/components/layout/Footer.tsx +5 -0
- package/references/openhive/src/web/components/layout/Layout.tsx +29 -0
- package/references/openhive/src/web/components/layout/Sidebar.tsx +348 -0
- package/references/openhive/src/web/components/post/CommentForm.tsx +59 -0
- package/references/openhive/src/web/components/post/CommentTree.tsx +145 -0
- package/references/openhive/src/web/components/resources/MemoryBrowser.tsx +208 -0
- package/references/openhive/src/web/components/resources/OpenTasksSummary.tsx +138 -0
- package/references/openhive/src/web/components/resources/SkillBrowser.tsx +284 -0
- package/references/openhive/src/web/components/swarm/StatusBadges.tsx +56 -0
- package/references/openhive/src/web/components/terminal/TerminalPanel.tsx +485 -0
- package/references/openhive/src/web/components/terminal/index.ts +2 -0
- package/references/openhive/src/web/components/terminal/query-responses.ts +70 -0
- package/references/openhive/src/web/components/terminal/terminal-mouse.ts +222 -0
- package/references/openhive/src/web/hooks/useApi.ts +740 -0
- package/references/openhive/src/web/hooks/useDocumentTitle.ts +49 -0
- package/references/openhive/src/web/hooks/useInfiniteScroll.ts +58 -0
- package/references/openhive/src/web/hooks/useRealtimeUpdates.ts +154 -0
- package/references/openhive/src/web/hooks/useWebSocket.ts +225 -0
- package/references/openhive/src/web/index.html +73 -0
- package/references/openhive/src/web/lib/api.ts +518 -0
- package/references/openhive/src/web/main.tsx +32 -0
- package/references/openhive/src/web/pages/About.tsx +131 -0
- package/references/openhive/src/web/pages/Agent.tsx +130 -0
- package/references/openhive/src/web/pages/Agents.tsx +69 -0
- package/references/openhive/src/web/pages/AuthCallback.tsx +75 -0
- package/references/openhive/src/web/pages/Dashboard.tsx +41 -0
- package/references/openhive/src/web/pages/Events.tsx +1025 -0
- package/references/openhive/src/web/pages/Explore.tsx +43 -0
- package/references/openhive/src/web/pages/Hive.tsx +134 -0
- package/references/openhive/src/web/pages/Hives.tsx +64 -0
- package/references/openhive/src/web/pages/Home.tsx +43 -0
- package/references/openhive/src/web/pages/Login.tsx +122 -0
- package/references/openhive/src/web/pages/Post.tsx +216 -0
- package/references/openhive/src/web/pages/ResourceDetail.tsx +426 -0
- package/references/openhive/src/web/pages/Resources.tsx +276 -0
- package/references/openhive/src/web/pages/Search.tsx +234 -0
- package/references/openhive/src/web/pages/SessionDetail.tsx +703 -0
- package/references/openhive/src/web/pages/Sessions.tsx +129 -0
- package/references/openhive/src/web/pages/Settings.tsx +826 -0
- package/references/openhive/src/web/pages/SwarmCraft.tsx +16 -0
- package/references/openhive/src/web/pages/Swarms.tsx +981 -0
- package/references/openhive/src/web/pages/Terminal.tsx +69 -0
- package/references/openhive/src/web/postcss.config.js +5 -0
- package/references/openhive/src/web/public/favicon.svg +11 -0
- package/references/openhive/src/web/public/manifest.json +21 -0
- package/references/openhive/src/web/stores/auth.ts +207 -0
- package/references/openhive/src/web/stores/dashboard.ts +23 -0
- package/references/openhive/src/web/stores/realtime.ts +90 -0
- package/references/openhive/src/web/stores/theme.ts +70 -0
- package/references/openhive/src/web/stores/toast.ts +63 -0
- package/references/openhive/src/web/styles/globals.css +503 -0
- package/references/openhive/src/web/sw.ts +228 -0
- package/references/openhive/src/web/utils/serviceWorker.ts +86 -0
- package/references/openhive/src/web/vite.config.ts +81 -0
- package/references/openhive/tsconfig.json +32 -0
- package/references/openhive/tsup.config.ts +17 -0
- package/references/openhive/vitest.config.ts +30 -0
- package/references/openhive/vitest.web.config.ts +20 -0
- package/references/opentasks/.claude/settings.json +6 -0
- package/references/opentasks/.claude-plugin/plugin.json +20 -0
- package/references/opentasks/.lintstagedrc.json +4 -0
- package/references/opentasks/.prettierignore +4 -0
- package/references/opentasks/.prettierrc.json +11 -0
- package/references/opentasks/.sudocode/issues.jsonl +89 -0
- package/references/opentasks/.sudocode/specs.jsonl +24 -0
- package/references/opentasks/README.md +401 -0
- package/references/opentasks/docs/ARCHITECTURE.md +841 -0
- package/references/opentasks/docs/DESIGN.md +689 -0
- package/references/opentasks/docs/INTERFACE.md +670 -0
- package/references/opentasks/docs/PERSISTENCE.md +1638 -0
- package/references/opentasks/docs/PROVIDERS.md +1412 -0
- package/references/opentasks/docs/SCHEMA.md +815 -0
- package/references/opentasks/docs/TESTING.md +1081 -0
- package/references/opentasks/eslint.config.js +58 -0
- package/references/opentasks/package-lock.json +4348 -0
- package/references/opentasks/package.json +81 -0
- package/references/opentasks/skills/opentasks/SKILL.md +139 -0
- package/references/opentasks/skills/opentasks/dependency-management.md +119 -0
- package/references/opentasks/skills/opentasks/feedback-and-review.md +100 -0
- package/references/opentasks/skills/opentasks/linking-external-data.md +103 -0
- package/references/opentasks/skills/opentasks/spec-to-implementation.md +98 -0
- package/references/opentasks/src/__tests__/cli-tools.test.ts +800 -0
- package/references/opentasks/src/__tests__/cli.test.ts +97 -0
- package/references/opentasks/src/__tests__/p1-p3-gaps.test.ts +635 -0
- package/references/opentasks/src/cli.ts +929 -0
- package/references/opentasks/src/client/__tests__/client-crud.test.ts +546 -0
- package/references/opentasks/src/client/__tests__/client.test.ts +658 -0
- package/references/opentasks/src/client/__tests__/socket-discovery.test.ts +122 -0
- package/references/opentasks/src/client/client.ts +560 -0
- package/references/opentasks/src/client/index.ts +32 -0
- package/references/opentasks/src/config/__tests__/defaults.test.ts +66 -0
- package/references/opentasks/src/config/__tests__/env.test.ts +155 -0
- package/references/opentasks/src/config/__tests__/index.test.ts +148 -0
- package/references/opentasks/src/config/__tests__/loader.test.ts +173 -0
- package/references/opentasks/src/config/__tests__/merge.test.ts +121 -0
- package/references/opentasks/src/config/__tests__/schema.test.ts +446 -0
- package/references/opentasks/src/config/defaults.ts +18 -0
- package/references/opentasks/src/config/env.ts +170 -0
- package/references/opentasks/src/config/errors.ts +33 -0
- package/references/opentasks/src/config/index.ts +63 -0
- package/references/opentasks/src/config/loader.ts +90 -0
- package/references/opentasks/src/config/merge.ts +64 -0
- package/references/opentasks/src/config/schema.ts +767 -0
- package/references/opentasks/src/core/__tests__/conditional-redirects.test.ts +116 -0
- package/references/opentasks/src/core/__tests__/connections.test.ts +194 -0
- package/references/opentasks/src/core/__tests__/hash.test.ts +161 -0
- package/references/opentasks/src/core/__tests__/id.test.ts +175 -0
- package/references/opentasks/src/core/__tests__/init.test.ts +115 -0
- package/references/opentasks/src/core/__tests__/location.test.ts +94 -0
- package/references/opentasks/src/core/__tests__/merge-driver.test.ts +300 -0
- package/references/opentasks/src/core/__tests__/redirects.test.ts +169 -0
- package/references/opentasks/src/core/__tests__/resolve-location-target.test.ts +468 -0
- package/references/opentasks/src/core/__tests__/uri.test.ts +228 -0
- package/references/opentasks/src/core/__tests__/worktree.test.ts +160 -0
- package/references/opentasks/src/core/conditional-redirects.ts +100 -0
- package/references/opentasks/src/core/connections.ts +217 -0
- package/references/opentasks/src/core/discover.ts +195 -0
- package/references/opentasks/src/core/hash.ts +74 -0
- package/references/opentasks/src/core/id.ts +174 -0
- package/references/opentasks/src/core/index.ts +108 -0
- package/references/opentasks/src/core/init.ts +66 -0
- package/references/opentasks/src/core/location.ts +139 -0
- package/references/opentasks/src/core/merge-driver.ts +280 -0
- package/references/opentasks/src/core/redirects.ts +182 -0
- package/references/opentasks/src/core/uri.ts +270 -0
- package/references/opentasks/src/core/worktree.ts +504 -0
- package/references/opentasks/src/daemon/__tests__/e2e-live-agent.test.ts +344 -0
- package/references/opentasks/src/daemon/__tests__/e2e-session-pipeline.test.ts +447 -0
- package/references/opentasks/src/daemon/__tests__/e2e-watch.test.ts +279 -0
- package/references/opentasks/src/daemon/__tests__/entire-linker.test.ts +1074 -0
- package/references/opentasks/src/daemon/__tests__/entire-watcher.test.ts +659 -0
- package/references/opentasks/src/daemon/__tests__/flush.test.ts +306 -0
- package/references/opentasks/src/daemon/__tests__/integration.test.ts +338 -0
- package/references/opentasks/src/daemon/__tests__/ipc.test.ts +406 -0
- package/references/opentasks/src/daemon/__tests__/lifecycle.test.ts +378 -0
- package/references/opentasks/src/daemon/__tests__/lock.test.ts +240 -0
- package/references/opentasks/src/daemon/__tests__/methods/graph.test.ts +372 -0
- package/references/opentasks/src/daemon/__tests__/methods/provider.test.ts +238 -0
- package/references/opentasks/src/daemon/__tests__/methods/tools.test.ts +690 -0
- package/references/opentasks/src/daemon/__tests__/multi-location.test.ts +945 -0
- package/references/opentasks/src/daemon/__tests__/registry.test.ts +268 -0
- package/references/opentasks/src/daemon/__tests__/watcher.test.ts +329 -0
- package/references/opentasks/src/daemon/entire-linker.ts +615 -0
- package/references/opentasks/src/daemon/entire-watcher.ts +415 -0
- package/references/opentasks/src/daemon/factory.ts +133 -0
- package/references/opentasks/src/daemon/flush.ts +168 -0
- package/references/opentasks/src/daemon/index.ts +120 -0
- package/references/opentasks/src/daemon/ipc.ts +491 -0
- package/references/opentasks/src/daemon/lifecycle.ts +1106 -0
- package/references/opentasks/src/daemon/location-state.ts +481 -0
- package/references/opentasks/src/daemon/lock.ts +168 -0
- package/references/opentasks/src/daemon/methods/__tests__/graph.test.ts +359 -0
- package/references/opentasks/src/daemon/methods/__tests__/provider.test.ts +227 -0
- package/references/opentasks/src/daemon/methods/__tests__/tools.test.ts +360 -0
- package/references/opentasks/src/daemon/methods/__tests__/watch.test.ts +656 -0
- package/references/opentasks/src/daemon/methods/archive.ts +193 -0
- package/references/opentasks/src/daemon/methods/graph.ts +274 -0
- package/references/opentasks/src/daemon/methods/lifecycle.ts +112 -0
- package/references/opentasks/src/daemon/methods/location.ts +118 -0
- package/references/opentasks/src/daemon/methods/provider.ts +159 -0
- package/references/opentasks/src/daemon/methods/tools.ts +221 -0
- package/references/opentasks/src/daemon/methods/watch.ts +206 -0
- package/references/opentasks/src/daemon/registry.ts +244 -0
- package/references/opentasks/src/daemon/types.ts +163 -0
- package/references/opentasks/src/daemon/watcher.ts +248 -0
- package/references/opentasks/src/entire/__tests__/agent-registry.test.ts +127 -0
- package/references/opentasks/src/entire/__tests__/claude-generator.test.ts +49 -0
- package/references/opentasks/src/entire/__tests__/commit-msg.test.ts +89 -0
- package/references/opentasks/src/entire/__tests__/cursor-agent.test.ts +224 -0
- package/references/opentasks/src/entire/__tests__/flush-sentinel.test.ts +93 -0
- package/references/opentasks/src/entire/__tests__/gemini-agent.test.ts +375 -0
- package/references/opentasks/src/entire/__tests__/git-hooks.test.ts +85 -0
- package/references/opentasks/src/entire/__tests__/hook-managers.test.ts +128 -0
- package/references/opentasks/src/entire/__tests__/opencode-agent.test.ts +329 -0
- package/references/opentasks/src/entire/__tests__/redaction.test.ts +143 -0
- package/references/opentasks/src/entire/__tests__/session-store.test.ts +83 -0
- package/references/opentasks/src/entire/__tests__/summarize.test.ts +346 -0
- package/references/opentasks/src/entire/__tests__/transcript-timestamp.test.ts +127 -0
- package/references/opentasks/src/entire/__tests__/types.test.ts +112 -0
- package/references/opentasks/src/entire/__tests__/utils.test.ts +296 -0
- package/references/opentasks/src/entire/__tests__/validation.test.ts +103 -0
- package/references/opentasks/src/entire/__tests__/worktree.test.ts +66 -0
- package/references/opentasks/src/entire/agent/registry.ts +143 -0
- package/references/opentasks/src/entire/agent/session-types.ts +117 -0
- package/references/opentasks/src/entire/agent/types.ts +217 -0
- package/references/opentasks/src/entire/commands/clean.ts +134 -0
- package/references/opentasks/src/entire/commands/disable.ts +85 -0
- package/references/opentasks/src/entire/commands/doctor.ts +152 -0
- package/references/opentasks/src/entire/commands/enable.ts +149 -0
- package/references/opentasks/src/entire/commands/explain.ts +271 -0
- package/references/opentasks/src/entire/commands/reset.ts +105 -0
- package/references/opentasks/src/entire/commands/resume.ts +194 -0
- package/references/opentasks/src/entire/commands/rewind.ts +204 -0
- package/references/opentasks/src/entire/commands/status.ts +150 -0
- package/references/opentasks/src/entire/config.ts +153 -0
- package/references/opentasks/src/entire/git-operations.ts +485 -0
- package/references/opentasks/src/entire/hooks/git-hooks.ts +171 -0
- package/references/opentasks/src/entire/hooks/lifecycle.ts +224 -0
- package/references/opentasks/src/entire/index.ts +644 -0
- package/references/opentasks/src/entire/security/redaction.ts +263 -0
- package/references/opentasks/src/entire/session/state-machine.ts +463 -0
- package/references/opentasks/src/entire/store/checkpoint-store.ts +489 -0
- package/references/opentasks/src/entire/store/native-store.ts +178 -0
- package/references/opentasks/src/entire/store/provider-types.ts +99 -0
- package/references/opentasks/src/entire/store/session-store.ts +233 -0
- package/references/opentasks/src/entire/strategy/attribution.ts +300 -0
- package/references/opentasks/src/entire/strategy/common.ts +222 -0
- package/references/opentasks/src/entire/strategy/content-overlap.ts +242 -0
- package/references/opentasks/src/entire/strategy/manual-commit.ts +1008 -0
- package/references/opentasks/src/entire/strategy/types.ts +285 -0
- package/references/opentasks/src/entire/summarize/claude-generator.ts +119 -0
- package/references/opentasks/src/entire/summarize/summarize.ts +432 -0
- package/references/opentasks/src/entire/types.ts +408 -0
- package/references/opentasks/src/entire/utils/chunk-files.ts +49 -0
- package/references/opentasks/src/entire/utils/commit-message.ts +65 -0
- package/references/opentasks/src/entire/utils/detect-agent.ts +36 -0
- package/references/opentasks/src/entire/utils/hook-managers.ts +118 -0
- package/references/opentasks/src/entire/utils/ide-tags.ts +32 -0
- package/references/opentasks/src/entire/utils/paths.ts +59 -0
- package/references/opentasks/src/entire/utils/preview-rewind.ts +86 -0
- package/references/opentasks/src/entire/utils/rewind-conflict.ts +121 -0
- package/references/opentasks/src/entire/utils/shadow-branch.ts +113 -0
- package/references/opentasks/src/entire/utils/string-utils.ts +46 -0
- package/references/opentasks/src/entire/utils/todo-extract.ts +193 -0
- package/references/opentasks/src/entire/utils/trailers.ts +190 -0
- package/references/opentasks/src/entire/utils/transcript-parse.ts +177 -0
- package/references/opentasks/src/entire/utils/transcript-timestamp.ts +61 -0
- package/references/opentasks/src/entire/utils/tree-ops.ts +227 -0
- package/references/opentasks/src/entire/utils/tty.ts +72 -0
- package/references/opentasks/src/entire/utils/validation.ts +67 -0
- package/references/opentasks/src/entire/utils/worktree.ts +58 -0
- package/references/opentasks/src/graph/EdgeTypeRegistry.ts +330 -0
- package/references/opentasks/src/graph/FederatedGraph.ts +796 -0
- package/references/opentasks/src/graph/GraphologyAdapter.ts +374 -0
- package/references/opentasks/src/graph/HydratingFederatedGraph.ts +533 -0
- package/references/opentasks/src/graph/__tests__/EdgeTypeRegistry.test.ts +263 -0
- package/references/opentasks/src/graph/__tests__/FederatedGraph.test.ts +821 -0
- package/references/opentasks/src/graph/__tests__/GraphologyAdapter.test.ts +408 -0
- package/references/opentasks/src/graph/__tests__/HydratingFederatedGraph.test.ts +735 -0
- package/references/opentasks/src/graph/__tests__/debounce.test.ts +276 -0
- package/references/opentasks/src/graph/__tests__/e2e-store-roundtrip.test.ts +349 -0
- package/references/opentasks/src/graph/__tests__/edge-cases.test.ts +595 -0
- package/references/opentasks/src/graph/__tests__/expansion.test.ts +304 -0
- package/references/opentasks/src/graph/__tests__/git-graph-syncer.test.ts +572 -0
- package/references/opentasks/src/graph/__tests__/provider-store.test.ts +1091 -0
- package/references/opentasks/src/graph/__tests__/query.test.ts +991 -0
- package/references/opentasks/src/graph/__tests__/store.test.ts +998 -0
- package/references/opentasks/src/graph/__tests__/sync.test.ts +178 -0
- package/references/opentasks/src/graph/__tests__/validation.test.ts +657 -0
- package/references/opentasks/src/graph/coordination.ts +454 -0
- package/references/opentasks/src/graph/debounce.ts +154 -0
- package/references/opentasks/src/graph/expansion.ts +364 -0
- package/references/opentasks/src/graph/git-graph-syncer.ts +321 -0
- package/references/opentasks/src/graph/history.ts +438 -0
- package/references/opentasks/src/graph/index.ts +145 -0
- package/references/opentasks/src/graph/provider-store.ts +1077 -0
- package/references/opentasks/src/graph/query.ts +651 -0
- package/references/opentasks/src/graph/store.ts +861 -0
- package/references/opentasks/src/graph/sync.ts +116 -0
- package/references/opentasks/src/graph/types.ts +420 -0
- package/references/opentasks/src/graph/validation.ts +520 -0
- package/references/opentasks/src/index.ts +270 -0
- package/references/opentasks/src/materialization/CLAUDE.md +88 -0
- package/references/opentasks/src/materialization/README.md +187 -0
- package/references/opentasks/src/materialization/__tests__/archive-methods.test.ts +194 -0
- package/references/opentasks/src/materialization/__tests__/archiver.test.ts +528 -0
- package/references/opentasks/src/materialization/__tests__/config.test.ts +123 -0
- package/references/opentasks/src/materialization/__tests__/git-remote-store.test.ts +533 -0
- package/references/opentasks/src/materialization/__tests__/graph-id.test.ts +82 -0
- package/references/opentasks/src/materialization/__tests__/http-remote-store.test.ts +263 -0
- package/references/opentasks/src/materialization/__tests__/materialize-before-archive.test.ts +246 -0
- package/references/opentasks/src/materialization/__tests__/remote-store-factory.test.ts +152 -0
- package/references/opentasks/src/materialization/__tests__/snapshot.test.ts +209 -0
- package/references/opentasks/src/materialization/archiver.ts +318 -0
- package/references/opentasks/src/materialization/git-archive-store.ts +568 -0
- package/references/opentasks/src/materialization/git-remote-store.ts +551 -0
- package/references/opentasks/src/materialization/graph-id.ts +173 -0
- package/references/opentasks/src/materialization/http-remote-store.ts +190 -0
- package/references/opentasks/src/materialization/index.ts +62 -0
- package/references/opentasks/src/materialization/remote-store-factory.ts +55 -0
- package/references/opentasks/src/materialization/snapshot.ts +230 -0
- package/references/opentasks/src/materialization/types.ts +410 -0
- package/references/opentasks/src/providers/__tests__/beads.test.ts +752 -0
- package/references/opentasks/src/providers/__tests__/claude-tasks.test.ts +485 -0
- package/references/opentasks/src/providers/__tests__/entire-e2e.test.ts +692 -0
- package/references/opentasks/src/providers/__tests__/entire-sessionlog-e2e.test.ts +1113 -0
- package/references/opentasks/src/providers/__tests__/entire.test.ts +1016 -0
- package/references/opentasks/src/providers/__tests__/from-config.test.ts +183 -0
- package/references/opentasks/src/providers/__tests__/global.test.ts +515 -0
- package/references/opentasks/src/providers/__tests__/materialization.test.ts +567 -0
- package/references/opentasks/src/providers/__tests__/native.test.ts +693 -0
- package/references/opentasks/src/providers/__tests__/registry.test.ts +232 -0
- package/references/opentasks/src/providers/beads.ts +1155 -0
- package/references/opentasks/src/providers/claude-tasks.ts +402 -0
- package/references/opentasks/src/providers/entire.ts +608 -0
- package/references/opentasks/src/providers/from-config.ts +210 -0
- package/references/opentasks/src/providers/global.ts +460 -0
- package/references/opentasks/src/providers/index.ts +147 -0
- package/references/opentasks/src/providers/location.ts +237 -0
- package/references/opentasks/src/providers/materialization.ts +346 -0
- package/references/opentasks/src/providers/native.ts +725 -0
- package/references/opentasks/src/providers/registry.ts +114 -0
- package/references/opentasks/src/providers/sudocode.ts +1292 -0
- package/references/opentasks/src/providers/sync.ts +485 -0
- package/references/opentasks/src/providers/traits/RelationshipQueryable.ts +169 -0
- package/references/opentasks/src/providers/traits/TaskManageable.ts +211 -0
- package/references/opentasks/src/providers/traits/Watchable.ts +260 -0
- package/references/opentasks/src/providers/traits/__tests__/RelationshipQueryable.test.ts +217 -0
- package/references/opentasks/src/providers/traits/__tests__/TaskManageable.test.ts +241 -0
- package/references/opentasks/src/providers/traits/index.ts +42 -0
- package/references/opentasks/src/providers/types.ts +439 -0
- package/references/opentasks/src/schema/__tests__/validation.test.ts +283 -0
- package/references/opentasks/src/schema/base.ts +88 -0
- package/references/opentasks/src/schema/edges.ts +78 -0
- package/references/opentasks/src/schema/index.ts +37 -0
- package/references/opentasks/src/schema/nodes.ts +119 -0
- package/references/opentasks/src/schema/storage.ts +130 -0
- package/references/opentasks/src/schema/validation.ts +209 -0
- package/references/opentasks/src/storage/__tests__/atomic-write.test.ts +227 -0
- package/references/opentasks/src/storage/__tests__/file-lock.test.ts +120 -0
- package/references/opentasks/src/storage/__tests__/jsonl.test.ts +267 -0
- package/references/opentasks/src/storage/__tests__/locked-writer.test.ts +134 -0
- package/references/opentasks/src/storage/__tests__/sqlite.test.ts +572 -0
- package/references/opentasks/src/storage/atomic-write.ts +86 -0
- package/references/opentasks/src/storage/file-lock.ts +215 -0
- package/references/opentasks/src/storage/index.ts +24 -0
- package/references/opentasks/src/storage/interface.ts +289 -0
- package/references/opentasks/src/storage/jsonl.ts +264 -0
- package/references/opentasks/src/storage/locked-writer.ts +140 -0
- package/references/opentasks/src/storage/sqlite-schema.ts +177 -0
- package/references/opentasks/src/storage/sqlite.ts +791 -0
- package/references/opentasks/src/tools/__tests__/annotate.test.ts +381 -0
- package/references/opentasks/src/tools/__tests__/link.test.ts +299 -0
- package/references/opentasks/src/tools/__tests__/query.test.ts +350 -0
- package/references/opentasks/src/tools/__tests__/task.test.ts +218 -0
- package/references/opentasks/src/tools/annotate.ts +277 -0
- package/references/opentasks/src/tools/index.ts +57 -0
- package/references/opentasks/src/tools/link.ts +163 -0
- package/references/opentasks/src/tools/query.ts +468 -0
- package/references/opentasks/src/tools/task.ts +213 -0
- package/references/opentasks/src/tools/types.ts +451 -0
- package/references/opentasks/src/tracking/__tests__/claude-tool-categorizer.test.ts +223 -0
- package/references/opentasks/src/tracking/__tests__/transcript-extractor.test.ts +262 -0
- package/references/opentasks/src/tracking/claude-tool-categorizer.ts +155 -0
- package/references/opentasks/src/tracking/index.ts +32 -0
- package/references/opentasks/src/tracking/skill-tracker.ts +322 -0
- package/references/opentasks/src/tracking/transcript-extractor.ts +225 -0
- package/references/opentasks/tests/e2e/helpers/assertions.ts +211 -0
- package/references/opentasks/tests/e2e/helpers/beads-helpers.ts +487 -0
- package/references/opentasks/tests/e2e/helpers/fixtures.ts +236 -0
- package/references/opentasks/tests/e2e/helpers/index.ts +122 -0
- package/references/opentasks/tests/e2e/helpers/sudocode-helpers.ts +341 -0
- package/references/opentasks/tests/e2e/helpers/system-setup.ts +504 -0
- package/references/opentasks/tests/e2e/helpers/test-agent.ts +504 -0
- package/references/opentasks/tests/e2e/infrastructure.e2e.test.ts +521 -0
- package/references/opentasks/tests/e2e/skill-tracking.e2e.test.ts +625 -0
- package/references/opentasks/tests/e2e/workflows/feedback-loop.e2e.test.ts +279 -0
- package/references/opentasks/tests/e2e/workflows/multi-agent.e2e.test.ts +304 -0
- package/references/opentasks/tests/e2e/workflows/provider-sync/background-sync.e2e.test.ts +292 -0
- package/references/opentasks/tests/e2e/workflows/provider-sync/beads-provider-compat.e2e.test.ts +249 -0
- package/references/opentasks/tests/e2e/workflows/provider-sync/cross-provider-edges.e2e.test.ts +407 -0
- package/references/opentasks/tests/e2e/workflows/provider-sync/federated-ready.e2e.test.ts +504 -0
- package/references/opentasks/tests/e2e/workflows/provider-sync/hydration.e2e.test.ts +340 -0
- package/references/opentasks/tests/e2e/workflows/provider-sync/materialization.e2e.test.ts +370 -0
- package/references/opentasks/tests/e2e/workflows/provider-sync/sudocode-provider-compat.e2e.test.ts +683 -0
- package/references/opentasks/tests/e2e/workflows/provider-sync/watchable-beads.e2e.test.ts +573 -0
- package/references/opentasks/tests/e2e/workflows/spec-driven.e2e.test.ts +244 -0
- package/references/opentasks/tests/e2e/worktree-location.e2e.test.ts +699 -0
- package/references/opentasks/tests/integration/daemon/helpers.ts +147 -0
- package/references/opentasks/tests/integration/daemon/ipc.integration.test.ts +343 -0
- package/references/opentasks/tests/integration/daemon/lifecycle.integration.test.ts +407 -0
- package/references/opentasks/tests/integration/graph/federated-graph.integration.test.ts +660 -0
- package/references/opentasks/tests/integration/helpers/flags.ts +28 -0
- package/references/opentasks/tests/integration/helpers/index.ts +47 -0
- package/references/opentasks/tests/integration/helpers/process.ts +133 -0
- package/references/opentasks/tests/integration/helpers/temp.ts +105 -0
- package/references/opentasks/tests/integration/helpers/wait.ts +133 -0
- package/references/opentasks/tests/integration/helpers.test.ts +120 -0
- package/references/opentasks/tests/integration/providers/beads-task-manageable.integration.test.ts +450 -0
- package/references/opentasks/tests/integration/providers/beads.integration.test.ts +388 -0
- package/references/opentasks/tests/integration/providers/native-task-manageable.integration.test.ts +667 -0
- package/references/opentasks/tests/integration/providers/sudocode-task-manageable.integration.test.ts +406 -0
- package/references/opentasks/tests/integration/providers/sudocode.integration.test.ts +342 -0
- package/references/opentasks/tests/integration/storage/jsonl-durability.integration.test.ts +390 -0
- package/references/opentasks/tests/integration/storage/sqlite-durability.integration.test.ts +527 -0
- package/references/opentasks/tests/integration/worktree/redirect-location-resolution.integration.test.ts +578 -0
- package/references/opentasks/tests/integration/worktree/worktree-flow.integration.test.ts +656 -0
- package/references/opentasks/tsconfig.json +18 -0
- package/references/opentasks/vitest.config.ts +27 -0
- package/references/opentasks/vitest.e2e.config.ts +35 -0
- package/references/opentasks/vitest.integration.config.ts +19 -0
- package/references/openteams/.claude/settings.json +6 -0
- package/references/openteams/CLAUDE.md +98 -0
- package/references/openteams/README.md +508 -0
- package/references/openteams/SKILL.md +198 -0
- package/references/openteams/design.md +250 -0
- package/references/openteams/docs/visual-editor-design.md +1225 -0
- package/references/openteams/editor/index.html +15 -0
- package/references/openteams/editor/package.json +39 -0
- package/references/openteams/editor/src/App.tsx +48 -0
- package/references/openteams/editor/src/components/canvas/Canvas.tsx +131 -0
- package/references/openteams/editor/src/components/canvas/QuickAddMenu.tsx +134 -0
- package/references/openteams/editor/src/components/edges/PeerRouteEdge.tsx +82 -0
- package/references/openteams/editor/src/components/edges/SignalFlowEdge.tsx +77 -0
- package/references/openteams/editor/src/components/edges/SpawnEdge.tsx +54 -0
- package/references/openteams/editor/src/components/inspector/ChannelInspector.tsx +158 -0
- package/references/openteams/editor/src/components/inspector/EdgeInspector.tsx +168 -0
- package/references/openteams/editor/src/components/inspector/Inspector.tsx +46 -0
- package/references/openteams/editor/src/components/inspector/RoleInspector.tsx +508 -0
- package/references/openteams/editor/src/components/inspector/TeamInspector.tsx +126 -0
- package/references/openteams/editor/src/components/nodes/ChannelNode.tsx +103 -0
- package/references/openteams/editor/src/components/nodes/RoleNode.tsx +157 -0
- package/references/openteams/editor/src/components/nodes/node-styles.ts +101 -0
- package/references/openteams/editor/src/components/sidebar/Sidebar.tsx +227 -0
- package/references/openteams/editor/src/components/toolbar/ExportModal.tsx +110 -0
- package/references/openteams/editor/src/components/toolbar/ImportModal.tsx +139 -0
- package/references/openteams/editor/src/components/toolbar/Toolbar.tsx +190 -0
- package/references/openteams/editor/src/hooks/use-autosave.ts +126 -0
- package/references/openteams/editor/src/hooks/use-keyboard.ts +106 -0
- package/references/openteams/editor/src/hooks/use-validation.ts +45 -0
- package/references/openteams/editor/src/index.css +245 -0
- package/references/openteams/editor/src/lib/auto-layout.ts +51 -0
- package/references/openteams/editor/src/lib/bundled-templates.ts +42 -0
- package/references/openteams/editor/src/lib/compiler.ts +75 -0
- package/references/openteams/editor/src/lib/load-template.ts +103 -0
- package/references/openteams/editor/src/lib/rebuild-edges.ts +104 -0
- package/references/openteams/editor/src/lib/serializer.ts +408 -0
- package/references/openteams/editor/src/lib/signal-catalog.ts +50 -0
- package/references/openteams/editor/src/lib/validator.ts +172 -0
- package/references/openteams/editor/src/main.tsx +10 -0
- package/references/openteams/editor/src/stores/canvas-store.ts +80 -0
- package/references/openteams/editor/src/stores/config-store.ts +243 -0
- package/references/openteams/editor/src/stores/history-store.ts +143 -0
- package/references/openteams/editor/src/stores/theme-store.ts +66 -0
- package/references/openteams/editor/src/stores/ui-store.ts +46 -0
- package/references/openteams/editor/src/stores/validation-store.ts +27 -0
- package/references/openteams/editor/src/types/editor.ts +74 -0
- package/references/openteams/editor/src/vite-env.d.ts +1 -0
- package/references/openteams/editor/tests/compiler.test.ts +151 -0
- package/references/openteams/editor/tests/e2e-add-remove.test.ts +386 -0
- package/references/openteams/editor/tests/e2e-components.test.tsx +424 -0
- package/references/openteams/editor/tests/e2e-export-roundtrip.test.ts +299 -0
- package/references/openteams/editor/tests/e2e-template-load.test.ts +204 -0
- package/references/openteams/editor/tests/e2e-ui-store.test.ts +126 -0
- package/references/openteams/editor/tests/e2e-undo-redo.test.ts +203 -0
- package/references/openteams/editor/tests/e2e-validation.test.ts +307 -0
- package/references/openteams/editor/tests/serializer.test.ts +142 -0
- package/references/openteams/editor/tests/setup.ts +52 -0
- package/references/openteams/editor/tests/validator.test.ts +92 -0
- package/references/openteams/editor/tsconfig.json +21 -0
- package/references/openteams/editor/tsconfig.tsbuildinfo +1 -0
- package/references/openteams/editor/vite.config.ts +28 -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/bug-fix-pipeline/roles/fixer.yaml +9 -0
- package/references/openteams/examples/bug-fix-pipeline/roles/investigator.yaml +8 -0
- package/references/openteams/examples/bug-fix-pipeline/roles/pr-creator.yaml +6 -0
- package/references/openteams/examples/bug-fix-pipeline/roles/triager.yaml +7 -0
- package/references/openteams/examples/bug-fix-pipeline/roles/verifier.yaml +8 -0
- package/references/openteams/examples/bug-fix-pipeline/team.yaml +88 -0
- package/references/openteams/examples/codebase-migration/roles/assessor.yaml +7 -0
- package/references/openteams/examples/codebase-migration/roles/migrator.yaml +9 -0
- package/references/openteams/examples/codebase-migration/roles/planner.yaml +5 -0
- package/references/openteams/examples/codebase-migration/roles/test-extractor.yaml +9 -0
- package/references/openteams/examples/codebase-migration/roles/validator.yaml +7 -0
- package/references/openteams/examples/codebase-migration/team.yaml +81 -0
- package/references/openteams/examples/docs-sync/roles/adr-writer.yaml +7 -0
- package/references/openteams/examples/docs-sync/roles/api-doc-writer.yaml +7 -0
- package/references/openteams/examples/docs-sync/roles/change-detector.yaml +7 -0
- package/references/openteams/examples/docs-sync/roles/doc-reviewer.yaml +7 -0
- package/references/openteams/examples/docs-sync/roles/guide-writer.yaml +7 -0
- package/references/openteams/examples/docs-sync/team.yaml +84 -0
- package/references/openteams/examples/gsd/prompts/codebase-mapper/ROLE.md +17 -0
- package/references/openteams/examples/gsd/prompts/codebase-mapper/SOUL.md +5 -0
- package/references/openteams/examples/gsd/prompts/debugger/ROLE.md +25 -0
- package/references/openteams/examples/gsd/prompts/debugger/SOUL.md +5 -0
- package/references/openteams/examples/gsd/prompts/executor/ROLE.md +34 -0
- package/references/openteams/examples/gsd/prompts/executor/SOUL.md +5 -0
- package/references/openteams/examples/gsd/prompts/integration-checker/ROLE.md +18 -0
- package/references/openteams/examples/gsd/prompts/integration-checker/SOUL.md +3 -0
- package/references/openteams/examples/gsd/prompts/orchestrator/ROLE.md +42 -0
- package/references/openteams/examples/gsd/prompts/orchestrator/SOUL.md +5 -0
- package/references/openteams/examples/gsd/prompts/phase-researcher/ROLE.md +15 -0
- package/references/openteams/examples/gsd/prompts/phase-researcher/SOUL.md +3 -0
- package/references/openteams/examples/gsd/prompts/plan-checker/ROLE.md +17 -0
- package/references/openteams/examples/gsd/prompts/plan-checker/SOUL.md +3 -0
- package/references/openteams/examples/gsd/prompts/planner/ROLE.md +28 -0
- package/references/openteams/examples/gsd/prompts/planner/SOUL.md +5 -0
- package/references/openteams/examples/gsd/prompts/project-researcher/ROLE.md +16 -0
- package/references/openteams/examples/gsd/prompts/project-researcher/SOUL.md +3 -0
- package/references/openteams/examples/gsd/prompts/research-synthesizer/ROLE.md +13 -0
- package/references/openteams/examples/gsd/prompts/research-synthesizer/SOUL.md +3 -0
- package/references/openteams/examples/gsd/prompts/roadmapper/ROLE.md +14 -0
- package/references/openteams/examples/gsd/prompts/roadmapper/SOUL.md +3 -0
- package/references/openteams/examples/gsd/prompts/verifier/ROLE.md +19 -0
- package/references/openteams/examples/gsd/prompts/verifier/SOUL.md +5 -0
- package/references/openteams/examples/gsd/roles/codebase-mapper.yaml +8 -0
- package/references/openteams/examples/gsd/roles/debugger.yaml +8 -0
- package/references/openteams/examples/gsd/roles/executor.yaml +8 -0
- package/references/openteams/examples/gsd/roles/integration-checker.yaml +8 -0
- package/references/openteams/examples/gsd/roles/orchestrator.yaml +9 -0
- package/references/openteams/examples/gsd/roles/phase-researcher.yaml +7 -0
- package/references/openteams/examples/gsd/roles/plan-checker.yaml +8 -0
- package/references/openteams/examples/gsd/roles/planner.yaml +8 -0
- package/references/openteams/examples/gsd/roles/project-researcher.yaml +8 -0
- package/references/openteams/examples/gsd/roles/research-synthesizer.yaml +7 -0
- package/references/openteams/examples/gsd/roles/roadmapper.yaml +7 -0
- package/references/openteams/examples/gsd/roles/verifier.yaml +8 -0
- package/references/openteams/examples/gsd/team.yaml +154 -0
- package/references/openteams/examples/incident-response/roles/communicator.yaml +5 -0
- package/references/openteams/examples/incident-response/roles/fix-proposer.yaml +7 -0
- package/references/openteams/examples/incident-response/roles/incident-triager.yaml +8 -0
- package/references/openteams/examples/incident-response/roles/investigator.yaml +8 -0
- package/references/openteams/examples/incident-response/team.yaml +68 -0
- package/references/openteams/examples/pr-review-checks/roles/code-reviewer.yaml +7 -0
- package/references/openteams/examples/pr-review-checks/roles/security-scanner.yaml +6 -0
- package/references/openteams/examples/pr-review-checks/roles/summarizer.yaml +6 -0
- package/references/openteams/examples/pr-review-checks/roles/test-checker.yaml +8 -0
- package/references/openteams/examples/pr-review-checks/team.yaml +64 -0
- package/references/openteams/examples/security-audit/roles/code-analyzer.yaml +6 -0
- package/references/openteams/examples/security-audit/roles/dep-scanner.yaml +7 -0
- package/references/openteams/examples/security-audit/roles/fixer.yaml +9 -0
- package/references/openteams/examples/security-audit/roles/pr-creator.yaml +6 -0
- package/references/openteams/examples/security-audit/roles/prioritizer.yaml +6 -0
- package/references/openteams/examples/security-audit/roles/secrets-scanner.yaml +6 -0
- package/references/openteams/examples/security-audit/roles/verifier.yaml +8 -0
- package/references/openteams/examples/security-audit/team.yaml +102 -0
- package/references/openteams/media/banner.png +0 -0
- package/references/openteams/media/editor.png +0 -0
- package/references/openteams/package-lock.json +4804 -0
- package/references/openteams/package.json +58 -0
- package/references/openteams/schema/role.schema.json +147 -0
- package/references/openteams/schema/team.schema.json +311 -0
- package/references/openteams/src/cli/editor.ts +170 -0
- package/references/openteams/src/cli/generate.test.ts +191 -0
- package/references/openteams/src/cli/generate.ts +242 -0
- package/references/openteams/src/cli/prompt-utils.ts +42 -0
- package/references/openteams/src/cli/template.test.ts +365 -0
- package/references/openteams/src/cli/template.ts +205 -0
- package/references/openteams/src/cli.ts +22 -0
- package/references/openteams/src/generators/agent-prompt-generator.test.ts +426 -0
- package/references/openteams/src/generators/agent-prompt-generator.ts +556 -0
- package/references/openteams/src/generators/package-generator.test.ts +129 -0
- package/references/openteams/src/generators/package-generator.ts +110 -0
- package/references/openteams/src/generators/skill-generator.test.ts +274 -0
- package/references/openteams/src/generators/skill-generator.ts +394 -0
- package/references/openteams/src/index.ts +84 -0
- package/references/openteams/src/template/builtins.test.ts +74 -0
- package/references/openteams/src/template/builtins.ts +108 -0
- package/references/openteams/src/template/install-service.test.ts +452 -0
- package/references/openteams/src/template/install-service.ts +332 -0
- package/references/openteams/src/template/loader.test.ts +1696 -0
- package/references/openteams/src/template/loader.ts +804 -0
- package/references/openteams/src/template/resolver.test.ts +304 -0
- package/references/openteams/src/template/resolver.ts +251 -0
- package/references/openteams/src/template/types.ts +229 -0
- package/references/openteams/tsconfig.cjs.json +7 -0
- package/references/openteams/tsconfig.esm.json +8 -0
- package/references/openteams/tsconfig.json +16 -0
- package/references/openteams/vitest.config.ts +9 -0
- package/references/sessionlog/.husky/pre-commit +1 -0
- package/references/sessionlog/.lintstagedrc.json +4 -0
- package/references/sessionlog/.prettierignore +4 -0
- package/references/sessionlog/.prettierrc.json +11 -0
- package/references/sessionlog/LICENSE +21 -0
- package/references/sessionlog/README.md +453 -0
- package/references/sessionlog/eslint.config.js +58 -0
- package/references/sessionlog/package-lock.json +3672 -0
- package/references/sessionlog/package.json +65 -0
- package/references/sessionlog/src/__tests__/agent-hooks.test.ts +570 -0
- package/references/sessionlog/src/__tests__/agent-registry.test.ts +127 -0
- package/references/sessionlog/src/__tests__/claude-code-hooks.test.ts +225 -0
- package/references/sessionlog/src/__tests__/claude-generator.test.ts +46 -0
- package/references/sessionlog/src/__tests__/commit-msg.test.ts +86 -0
- package/references/sessionlog/src/__tests__/cursor-agent.test.ts +224 -0
- package/references/sessionlog/src/__tests__/e2e-live.test.ts +890 -0
- package/references/sessionlog/src/__tests__/event-log.test.ts +183 -0
- package/references/sessionlog/src/__tests__/flush-sentinel.test.ts +105 -0
- package/references/sessionlog/src/__tests__/gemini-agent.test.ts +375 -0
- package/references/sessionlog/src/__tests__/git-hooks.test.ts +78 -0
- package/references/sessionlog/src/__tests__/hook-managers.test.ts +121 -0
- package/references/sessionlog/src/__tests__/lifecycle-tasks.test.ts +759 -0
- package/references/sessionlog/src/__tests__/opencode-agent.test.ts +338 -0
- package/references/sessionlog/src/__tests__/redaction.test.ts +136 -0
- package/references/sessionlog/src/__tests__/session-repo.test.ts +353 -0
- package/references/sessionlog/src/__tests__/session-store.test.ts +166 -0
- package/references/sessionlog/src/__tests__/setup-ccweb.test.ts +466 -0
- package/references/sessionlog/src/__tests__/skill-live.test.ts +461 -0
- package/references/sessionlog/src/__tests__/summarize.test.ts +348 -0
- package/references/sessionlog/src/__tests__/task-plan-e2e.test.ts +610 -0
- package/references/sessionlog/src/__tests__/task-plan-live.test.ts +632 -0
- package/references/sessionlog/src/__tests__/transcript-timestamp.test.ts +121 -0
- package/references/sessionlog/src/__tests__/types.test.ts +166 -0
- package/references/sessionlog/src/__tests__/utils.test.ts +333 -0
- package/references/sessionlog/src/__tests__/validation.test.ts +103 -0
- package/references/sessionlog/src/__tests__/worktree.test.ts +57 -0
- package/references/sessionlog/src/agent/registry.ts +143 -0
- package/references/sessionlog/src/agent/session-types.ts +113 -0
- package/references/sessionlog/src/agent/types.ts +220 -0
- package/references/sessionlog/src/cli.ts +597 -0
- package/references/sessionlog/src/commands/clean.ts +133 -0
- package/references/sessionlog/src/commands/disable.ts +84 -0
- package/references/sessionlog/src/commands/doctor.ts +145 -0
- package/references/sessionlog/src/commands/enable.ts +202 -0
- package/references/sessionlog/src/commands/explain.ts +261 -0
- package/references/sessionlog/src/commands/reset.ts +105 -0
- package/references/sessionlog/src/commands/resume.ts +180 -0
- package/references/sessionlog/src/commands/rewind.ts +195 -0
- package/references/sessionlog/src/commands/setup-ccweb.ts +275 -0
- package/references/sessionlog/src/commands/status.ts +172 -0
- package/references/sessionlog/src/config.ts +165 -0
- package/references/sessionlog/src/events/event-log.ts +126 -0
- package/references/sessionlog/src/git-operations.ts +558 -0
- package/references/sessionlog/src/hooks/git-hooks.ts +165 -0
- package/references/sessionlog/src/hooks/lifecycle.ts +391 -0
- package/references/sessionlog/src/index.ts +650 -0
- package/references/sessionlog/src/security/redaction.ts +283 -0
- package/references/sessionlog/src/session/state-machine.ts +452 -0
- package/references/sessionlog/src/store/checkpoint-store.ts +509 -0
- package/references/sessionlog/src/store/native-store.ts +173 -0
- package/references/sessionlog/src/store/provider-types.ts +99 -0
- package/references/sessionlog/src/store/session-store.ts +266 -0
- package/references/sessionlog/src/strategy/attribution.ts +296 -0
- package/references/sessionlog/src/strategy/common.ts +207 -0
- package/references/sessionlog/src/strategy/content-overlap.ts +228 -0
- package/references/sessionlog/src/strategy/manual-commit.ts +988 -0
- package/references/sessionlog/src/strategy/types.ts +279 -0
- package/references/sessionlog/src/summarize/claude-generator.ts +115 -0
- package/references/sessionlog/src/summarize/summarize.ts +432 -0
- package/references/sessionlog/src/types.ts +508 -0
- package/references/sessionlog/src/utils/chunk-files.ts +49 -0
- package/references/sessionlog/src/utils/commit-message.ts +65 -0
- package/references/sessionlog/src/utils/detect-agent.ts +36 -0
- package/references/sessionlog/src/utils/hook-managers.ts +125 -0
- package/references/sessionlog/src/utils/ide-tags.ts +32 -0
- package/references/sessionlog/src/utils/paths.ts +79 -0
- package/references/sessionlog/src/utils/preview-rewind.ts +80 -0
- package/references/sessionlog/src/utils/rewind-conflict.ts +121 -0
- package/references/sessionlog/src/utils/shadow-branch.ts +109 -0
- package/references/sessionlog/src/utils/string-utils.ts +46 -0
- package/references/sessionlog/src/utils/todo-extract.ts +188 -0
- package/references/sessionlog/src/utils/trailers.ts +187 -0
- package/references/sessionlog/src/utils/transcript-parse.ts +177 -0
- package/references/sessionlog/src/utils/transcript-timestamp.ts +59 -0
- package/references/sessionlog/src/utils/tree-ops.ts +219 -0
- package/references/sessionlog/src/utils/tty.ts +72 -0
- package/references/sessionlog/src/utils/validation.ts +65 -0
- package/references/sessionlog/src/utils/worktree.ts +58 -0
- package/references/sessionlog/src/wire-types.ts +59 -0
- package/references/sessionlog/templates/setup-env.sh +153 -0
- package/references/sessionlog/tsconfig.json +18 -0
- package/references/sessionlog/vitest.config.ts +12 -0
- package/references/skill-tree/.claude/settings.json +6 -0
- package/references/skill-tree/.sudocode/issues.jsonl +19 -0
- package/references/skill-tree/.sudocode/specs.jsonl +3 -0
- package/references/skill-tree/CLAUDE.md +132 -0
- package/references/skill-tree/README.md +396 -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 +157 -0
- package/references/skill-tree/package-lock.json +1852 -0
- package/references/skill-tree/package.json +66 -0
- package/references/skill-tree/plan.md +78 -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/references/swarmkit/LICENSE +21 -0
- package/references/swarmkit/README.md +130 -0
- package/references/swarmkit/docs/design.md +453 -0
- package/references/swarmkit/docs/package-setup-reference.md +519 -0
- package/references/swarmkit/package-lock.json +1938 -0
- package/references/swarmkit/package.json +43 -0
- package/references/swarmkit/src/cli.ts +41 -0
- package/references/swarmkit/src/commands/add.ts +126 -0
- package/references/swarmkit/src/commands/doctor.ts +117 -0
- package/references/swarmkit/src/commands/hive.ts +279 -0
- package/references/swarmkit/src/commands/init/phases/configure.ts +74 -0
- package/references/swarmkit/src/commands/init/phases/global-setup.ts +104 -0
- package/references/swarmkit/src/commands/init/phases/packages.ts +44 -0
- package/references/swarmkit/src/commands/init/phases/project.ts +81 -0
- package/references/swarmkit/src/commands/init/phases/use-case.ts +47 -0
- package/references/swarmkit/src/commands/init/state.test.ts +23 -0
- package/references/swarmkit/src/commands/init/state.ts +22 -0
- package/references/swarmkit/src/commands/init/wizard.ts +160 -0
- package/references/swarmkit/src/commands/init.ts +17 -0
- package/references/swarmkit/src/commands/login.ts +106 -0
- package/references/swarmkit/src/commands/logout.ts +22 -0
- package/references/swarmkit/src/commands/remove.ts +72 -0
- package/references/swarmkit/src/commands/status.ts +101 -0
- package/references/swarmkit/src/commands/update.ts +62 -0
- package/references/swarmkit/src/commands/whoami.ts +41 -0
- package/references/swarmkit/src/config/global.test.ts +258 -0
- package/references/swarmkit/src/config/global.ts +141 -0
- package/references/swarmkit/src/config/keys.test.ts +109 -0
- package/references/swarmkit/src/config/keys.ts +49 -0
- package/references/swarmkit/src/doctor/checks.test.ts +366 -0
- package/references/swarmkit/src/doctor/checks.ts +292 -0
- package/references/swarmkit/src/doctor/types.ts +33 -0
- package/references/swarmkit/src/hub/auth-flow.test.ts +127 -0
- package/references/swarmkit/src/hub/auth-flow.ts +144 -0
- package/references/swarmkit/src/hub/client.test.ts +224 -0
- package/references/swarmkit/src/hub/client.ts +185 -0
- package/references/swarmkit/src/hub/credentials.test.ts +132 -0
- package/references/swarmkit/src/hub/credentials.ts +51 -0
- package/references/swarmkit/src/index.ts +116 -0
- package/references/swarmkit/src/packages/installer.test.ts +365 -0
- package/references/swarmkit/src/packages/installer.ts +206 -0
- package/references/swarmkit/src/packages/plugin.test.ts +141 -0
- package/references/swarmkit/src/packages/plugin.ts +46 -0
- package/references/swarmkit/src/packages/registry.test.ts +235 -0
- package/references/swarmkit/src/packages/registry.ts +209 -0
- package/references/swarmkit/src/packages/setup.test.ts +1395 -0
- package/references/swarmkit/src/packages/setup.ts +671 -0
- package/references/swarmkit/src/utils/ui.test.ts +115 -0
- package/references/swarmkit/src/utils/ui.ts +62 -0
- package/references/swarmkit/tsconfig.json +17 -0
- package/references/swarmkit/vitest.config.ts +9 -0
- package/scripts/bootstrap.mjs +33 -1
- package/scripts/generate-agents.mjs +5 -1
- package/scripts/map-hook.mjs +100 -63
- package/scripts/map-sidecar.mjs +198 -25
- package/scripts/team-loader.mjs +26 -48
- package/skills/swarm/SKILL.md +85 -27
- package/src/__tests__/agent-generator.test.mjs +15 -23
- package/src/__tests__/bootstrap.test.mjs +124 -1
- package/src/__tests__/config.test.mjs +72 -27
- package/src/__tests__/context-output.test.mjs +13 -14
- package/src/__tests__/e2e-inbox-integration.test.mjs +732 -0
- package/src/__tests__/e2e-live-inbox.test.mjs +597 -0
- package/src/__tests__/e2e-live-map.test.mjs +536 -0
- package/src/__tests__/e2e-mesh-sidecar.test.mjs +570 -0
- package/src/__tests__/e2e-native-task-hooks.test.mjs +376 -0
- package/src/__tests__/e2e-sidecar-bridge.test.mjs +477 -0
- package/src/__tests__/helpers.mjs +13 -0
- package/src/__tests__/inbox-integration.test.mjs +298 -0
- package/src/__tests__/inbox.test.mjs +22 -89
- package/src/__tests__/index.test.mjs +33 -9
- package/src/__tests__/integration.test.mjs +514 -0
- package/src/__tests__/map-events.test.mjs +514 -150
- package/src/__tests__/mesh-connection.test.mjs +308 -0
- package/src/__tests__/opentasks-client.test.mjs +517 -0
- package/src/__tests__/paths.test.mjs +185 -54
- package/src/__tests__/sidecar-client.test.mjs +35 -0
- package/src/__tests__/sidecar-server.test.mjs +124 -0
- package/src/__tests__/skilltree-client.test.mjs +126 -0
- package/src/agent-generator.mjs +129 -67
- package/src/bootstrap.mjs +174 -13
- package/src/config.mjs +35 -1
- package/src/context-output.mjs +254 -30
- package/src/inbox.mjs +9 -54
- package/src/index.mjs +38 -7
- package/src/map-connection.mjs +1 -0
- package/src/map-events.mjs +350 -80
- package/src/mesh-connection.mjs +148 -0
- package/src/opentasks-client.mjs +269 -0
- package/src/paths.mjs +178 -28
- package/src/sessionlog.mjs +14 -9
- package/src/sidecar-client.mjs +79 -25
- package/src/sidecar-server.mjs +205 -16
- package/src/skilltree-client.mjs +218 -0
- package/src/template.mjs +68 -4
- package/vitest.config.mjs +1 -0
|
@@ -0,0 +1,1081 @@
|
|
|
1
|
+
# OpenTasks Testing Strategy
|
|
2
|
+
|
|
3
|
+
This document outlines the current state of testing in OpenTasks, identifies gaps, and proposes a tiered testing strategy for comprehensive coverage.
|
|
4
|
+
|
|
5
|
+
## Current State
|
|
6
|
+
|
|
7
|
+
### Test Coverage Summary
|
|
8
|
+
|
|
9
|
+
| Layer | Test Files | Tests | Coverage Type |
|
|
10
|
+
|-------|-----------|-------|---------------|
|
|
11
|
+
| Core | 2 | 34 | Unit |
|
|
12
|
+
| Schema | 1 | 24 | Unit |
|
|
13
|
+
| Storage | 2 | 65 | Unit + File I/O |
|
|
14
|
+
| Graph | 9 | 332 | Unit |
|
|
15
|
+
| Daemon | 8 | 174 | Unit |
|
|
16
|
+
| Tools | 3 | 59 | Unit |
|
|
17
|
+
| Client | 1 | 23 | Unit |
|
|
18
|
+
| Providers | 6 | 215 | Unit |
|
|
19
|
+
| **Total** | **33** | **926** | **Primarily Unit** |
|
|
20
|
+
|
|
21
|
+
### What's Tested
|
|
22
|
+
|
|
23
|
+
**Well-tested with unit tests:**
|
|
24
|
+
- ID generation and hashing (deterministic, collision-resistant)
|
|
25
|
+
- Schema validation (Zod parsing, type guards)
|
|
26
|
+
- JSONL and SQLite persistence (file operations, transactions)
|
|
27
|
+
- Graph operations (CRUD, queries, validation, cycles)
|
|
28
|
+
- **Federated Graph layer:**
|
|
29
|
+
- EdgeTypeRegistry (12 built-in types, inverse relationships, provider support)
|
|
30
|
+
- GraphologyAdapter (in-memory graph with Graphology library)
|
|
31
|
+
- FederatedGraph (traversal API: related, reachable, shortestPath, traverse)
|
|
32
|
+
- HydratingFederatedGraph (lazy hydration, caching, federated ready query)
|
|
33
|
+
- Provider-aware store (cross-provider resolution)
|
|
34
|
+
- Selector syntax (+uri, uri+, @uri) and introspection methods
|
|
35
|
+
- Daemon lifecycle, IPC, file watching, flush management
|
|
36
|
+
- Daemon method handlers (graph operations, tool operations)
|
|
37
|
+
- 3-tool agent interface (link, query, annotate)
|
|
38
|
+
- Client library (connection, method calls, error handling)
|
|
39
|
+
- Provider interface (URI parsing, type conversion, CRUD)
|
|
40
|
+
- **Provider traits:**
|
|
41
|
+
- RelationshipQueryable (queryEdges, supportedEdgeTypes)
|
|
42
|
+
- NativeProvider with full edge support
|
|
43
|
+
- BeadsProvider with relationship queries
|
|
44
|
+
|
|
45
|
+
**File I/O tested with temp directories:**
|
|
46
|
+
- JSONL persister writes to real temp files
|
|
47
|
+
- SQLite persister uses in-memory databases
|
|
48
|
+
- File watcher uses real file system events (with delays)
|
|
49
|
+
|
|
50
|
+
### Testing Gaps
|
|
51
|
+
|
|
52
|
+
#### Gap 1: Provider Integration Tests
|
|
53
|
+
|
|
54
|
+
All provider tests use mocks. No tests verify actual integration with:
|
|
55
|
+
|
|
56
|
+
| Provider | Mock Strategy | Integration Gap |
|
|
57
|
+
|----------|---------------|-----------------|
|
|
58
|
+
| **BeadsProvider** | Mocks `child_process.exec` | Never calls real `bd` CLI |
|
|
59
|
+
| **ClaudeTasksProvider** | Uses in-memory store | Never interacts with Claude Code task system |
|
|
60
|
+
| **NativeProvider** | Mocks GraphStore | N/A (no external system) |
|
|
61
|
+
|
|
62
|
+
#### Gap 2: End-to-End Agent Workflows
|
|
63
|
+
|
|
64
|
+
No tests verify complete agent workflows:
|
|
65
|
+
- Agent creates context → links tasks → provides feedback
|
|
66
|
+
- Multi-agent coordination with blocking dependencies
|
|
67
|
+
- Full daemon lifecycle with real IPC communication
|
|
68
|
+
|
|
69
|
+
#### Gap 3: Cross-System Integration
|
|
70
|
+
|
|
71
|
+
No tests verify:
|
|
72
|
+
- OpenTasks ↔ Beads bidirectional sync
|
|
73
|
+
- OpenTasks ↔ Claude Code task materialization
|
|
74
|
+
- Multi-location graph operations
|
|
75
|
+
|
|
76
|
+
#### Gap 4: Performance and Stress Testing
|
|
77
|
+
|
|
78
|
+
No tests for:
|
|
79
|
+
- Large graph operations (10k+ nodes)
|
|
80
|
+
- High-frequency flush operations
|
|
81
|
+
- Concurrent multi-client access
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Tiered Testing Strategy
|
|
86
|
+
|
|
87
|
+
### Test Flags
|
|
88
|
+
|
|
89
|
+
Tests are gated by environment flags to control which tests run:
|
|
90
|
+
|
|
91
|
+
| Flag | Purpose | When to Use |
|
|
92
|
+
|------|---------|-------------|
|
|
93
|
+
| (none) | Unit tests only | Every commit, CI default |
|
|
94
|
+
| `RUN_SLOW_TESTS=1` | + Integration tests | Pre-merge, nightly CI |
|
|
95
|
+
| `RUN_FULL_AGENT_TESTS=1` | + E2E agent tests | Release validation, manual |
|
|
96
|
+
|
|
97
|
+
**Flag behavior:**
|
|
98
|
+
- `RUN_SLOW_TESTS` enables storage durability, daemon IPC, and provider integration tests
|
|
99
|
+
- `RUN_FULL_AGENT_TESTS` enables full agent workflow tests (implies `RUN_SLOW_TESTS`)
|
|
100
|
+
- Tests check flags via `process.env` and skip with descriptive messages
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
// Example usage in tests
|
|
104
|
+
const SLOW_TESTS = process.env.RUN_SLOW_TESTS === '1'
|
|
105
|
+
const AGENT_TESTS = process.env.RUN_FULL_AGENT_TESTS === '1'
|
|
106
|
+
|
|
107
|
+
describe.skipIf(!SLOW_TESTS)('Storage Durability', () => {
|
|
108
|
+
// These tests take 10+ seconds each
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
describe.skipIf(!AGENT_TESTS)('Multi-Agent Coordination', () => {
|
|
112
|
+
// These tests require full system setup
|
|
113
|
+
})
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
### Tier 1: Unit Tests (Current)
|
|
119
|
+
|
|
120
|
+
**Status:** ✅ Complete (723 tests)
|
|
121
|
+
|
|
122
|
+
**Purpose:** Verify individual components work correctly in isolation.
|
|
123
|
+
|
|
124
|
+
**Characteristics:**
|
|
125
|
+
- Fast execution (<5 seconds total)
|
|
126
|
+
- No external dependencies
|
|
127
|
+
- Mocked collaborators
|
|
128
|
+
- Run on every commit
|
|
129
|
+
|
|
130
|
+
**Location:** `src/**/__tests__/*.test.ts`
|
|
131
|
+
|
|
132
|
+
**Flag:** None (always run)
|
|
133
|
+
|
|
134
|
+
### Tier 2: Integration Tests
|
|
135
|
+
|
|
136
|
+
**Status:** ✅ Phases 1-4 Complete (127 tests)
|
|
137
|
+
|
|
138
|
+
**Purpose:** Verify components work together with real I/O and external systems.
|
|
139
|
+
|
|
140
|
+
**Characteristics:**
|
|
141
|
+
- Slower execution (10-60 seconds per test)
|
|
142
|
+
- Real file I/O, process spawning, IPC
|
|
143
|
+
- Run before merge, nightly CI
|
|
144
|
+
|
|
145
|
+
**Location:** `tests/integration/`
|
|
146
|
+
|
|
147
|
+
**Flag:** `RUN_SLOW_TESTS=1`
|
|
148
|
+
|
|
149
|
+
#### 2.1 Storage Integration Tests (Priority: High)
|
|
150
|
+
|
|
151
|
+
**Purpose:** Verify persistence durability and performance under stress.
|
|
152
|
+
|
|
153
|
+
**Requirements:**
|
|
154
|
+
- File system access
|
|
155
|
+
- Sufficient disk space for large tests
|
|
156
|
+
|
|
157
|
+
**Test Cases:**
|
|
158
|
+
```typescript
|
|
159
|
+
// tests/integration/storage/jsonl-durability.integration.test.ts
|
|
160
|
+
|
|
161
|
+
const SLOW_TESTS = process.env.RUN_SLOW_TESTS === '1'
|
|
162
|
+
|
|
163
|
+
describe.skipIf(!SLOW_TESTS)('JSONL Durability', () => {
|
|
164
|
+
describe('crash recovery', () => {
|
|
165
|
+
it('should recover from incomplete write (simulated crash)', async () => {
|
|
166
|
+
// Write partial line, verify recovery on reload
|
|
167
|
+
})
|
|
168
|
+
|
|
169
|
+
it('should handle corrupted trailing entry', async () => {
|
|
170
|
+
// Append garbage, verify load skips bad entry
|
|
171
|
+
})
|
|
172
|
+
})
|
|
173
|
+
|
|
174
|
+
describe('compaction', () => {
|
|
175
|
+
it('should compact correctly with 1000+ entries', async () => {
|
|
176
|
+
// Create 1000 nodes, delete 500, compact, verify
|
|
177
|
+
})
|
|
178
|
+
|
|
179
|
+
it('should maintain data integrity during compaction', async () => {
|
|
180
|
+
// Verify no data loss during compaction
|
|
181
|
+
})
|
|
182
|
+
})
|
|
183
|
+
|
|
184
|
+
describe('concurrent access', () => {
|
|
185
|
+
it('should handle concurrent readers during write', async () => {
|
|
186
|
+
// Spawn multiple read processes while writing
|
|
187
|
+
})
|
|
188
|
+
})
|
|
189
|
+
})
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
```typescript
|
|
193
|
+
// tests/integration/storage/sqlite-durability.integration.test.ts
|
|
194
|
+
|
|
195
|
+
describe.skipIf(!SLOW_TESTS)('SQLite Durability', () => {
|
|
196
|
+
describe('crash recovery', () => {
|
|
197
|
+
it('should survive simulated crash during transaction', async () => {
|
|
198
|
+
// Use WAL mode, kill process mid-transaction, verify recovery
|
|
199
|
+
})
|
|
200
|
+
})
|
|
201
|
+
|
|
202
|
+
describe('performance', () => {
|
|
203
|
+
it('should handle 10k+ nodes efficiently', async () => {
|
|
204
|
+
// Create 10k nodes, measure insert/query times
|
|
205
|
+
// Assert: bulk insert < 5s, query < 100ms
|
|
206
|
+
})
|
|
207
|
+
|
|
208
|
+
it('should handle complex graph queries', async () => {
|
|
209
|
+
// Create deep dependency chains, measure traversal
|
|
210
|
+
})
|
|
211
|
+
})
|
|
212
|
+
|
|
213
|
+
describe('WAL mode', () => {
|
|
214
|
+
it('should support concurrent readers and single writer', async () => {
|
|
215
|
+
// Spawn reader processes while writing
|
|
216
|
+
})
|
|
217
|
+
})
|
|
218
|
+
})
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
#### 2.2 Daemon Integration Tests (Priority: High)
|
|
222
|
+
|
|
223
|
+
**Purpose:** Verify daemon lifecycle and IPC with real processes.
|
|
224
|
+
|
|
225
|
+
**Requirements:**
|
|
226
|
+
- Ability to spawn child processes
|
|
227
|
+
- IPC socket access
|
|
228
|
+
- Process signal handling
|
|
229
|
+
|
|
230
|
+
**Test Cases:**
|
|
231
|
+
```typescript
|
|
232
|
+
// tests/integration/daemon/lifecycle.integration.test.ts
|
|
233
|
+
|
|
234
|
+
describe.skipIf(!SLOW_TESTS)('Daemon Lifecycle', () => {
|
|
235
|
+
let daemonProcess: ChildProcess
|
|
236
|
+
|
|
237
|
+
afterEach(async () => {
|
|
238
|
+
if (daemonProcess) {
|
|
239
|
+
daemonProcess.kill('SIGTERM')
|
|
240
|
+
await waitForExit(daemonProcess)
|
|
241
|
+
}
|
|
242
|
+
})
|
|
243
|
+
|
|
244
|
+
describe('startup', () => {
|
|
245
|
+
it('should start and create socket file', async () => {
|
|
246
|
+
daemonProcess = spawn('node', ['./dist/daemon.js', '--socket', socketPath])
|
|
247
|
+
await waitForSocket(socketPath, 5000)
|
|
248
|
+
expect(existsSync(socketPath)).toBe(true)
|
|
249
|
+
})
|
|
250
|
+
|
|
251
|
+
it('should detect existing daemon and refuse to start', async () => {
|
|
252
|
+
// Start first daemon
|
|
253
|
+
daemonProcess = spawn('node', ['./dist/daemon.js', '--socket', socketPath])
|
|
254
|
+
await waitForSocket(socketPath)
|
|
255
|
+
|
|
256
|
+
// Try to start second daemon
|
|
257
|
+
const second = spawn('node', ['./dist/daemon.js', '--socket', socketPath])
|
|
258
|
+
const exitCode = await waitForExit(second)
|
|
259
|
+
expect(exitCode).toBe(1)
|
|
260
|
+
})
|
|
261
|
+
})
|
|
262
|
+
|
|
263
|
+
describe('shutdown', () => {
|
|
264
|
+
it('should flush pending writes on SIGTERM', async () => {
|
|
265
|
+
daemonProcess = spawn('node', ['./dist/daemon.js'])
|
|
266
|
+
await waitForSocket(socketPath)
|
|
267
|
+
|
|
268
|
+
// Make some writes via IPC
|
|
269
|
+
const client = createIPCClient(socketPath)
|
|
270
|
+
await client.connect()
|
|
271
|
+
await client.createNode({ type: 'context', title: 'Test' })
|
|
272
|
+
|
|
273
|
+
// Send SIGTERM
|
|
274
|
+
daemonProcess.kill('SIGTERM')
|
|
275
|
+
await waitForExit(daemonProcess)
|
|
276
|
+
|
|
277
|
+
// Verify data persisted
|
|
278
|
+
const persister = createJSONLPersister(dataPath)
|
|
279
|
+
const data = await persister.load()
|
|
280
|
+
expect(data.nodes).toHaveLength(1)
|
|
281
|
+
})
|
|
282
|
+
|
|
283
|
+
it('should clean up socket file on exit', async () => {
|
|
284
|
+
daemonProcess = spawn('node', ['./dist/daemon.js', '--socket', socketPath])
|
|
285
|
+
await waitForSocket(socketPath)
|
|
286
|
+
|
|
287
|
+
daemonProcess.kill('SIGTERM')
|
|
288
|
+
await waitForExit(daemonProcess)
|
|
289
|
+
|
|
290
|
+
expect(existsSync(socketPath)).toBe(false)
|
|
291
|
+
})
|
|
292
|
+
})
|
|
293
|
+
})
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
```typescript
|
|
297
|
+
// tests/integration/daemon/ipc.integration.test.ts
|
|
298
|
+
|
|
299
|
+
describe.skipIf(!SLOW_TESTS)('Daemon IPC', () => {
|
|
300
|
+
let daemon: ChildProcess
|
|
301
|
+
let client: IPCClient
|
|
302
|
+
|
|
303
|
+
beforeAll(async () => {
|
|
304
|
+
daemon = spawn('node', ['./dist/daemon.js', '--socket', socketPath])
|
|
305
|
+
await waitForSocket(socketPath, 5000)
|
|
306
|
+
client = createIPCClient(socketPath)
|
|
307
|
+
await client.connect()
|
|
308
|
+
})
|
|
309
|
+
|
|
310
|
+
afterAll(async () => {
|
|
311
|
+
await client.disconnect()
|
|
312
|
+
daemon.kill('SIGTERM')
|
|
313
|
+
await waitForExit(daemon)
|
|
314
|
+
})
|
|
315
|
+
|
|
316
|
+
describe('round-trip', () => {
|
|
317
|
+
it('should handle create → get → update → delete cycle', async () => {
|
|
318
|
+
const created = await client.createNode({ type: 'context', title: 'Test' })
|
|
319
|
+
expect(created.id).toMatch(/^s-/)
|
|
320
|
+
|
|
321
|
+
const fetched = await client.getNode(created.id)
|
|
322
|
+
expect(fetched?.title).toBe('Test')
|
|
323
|
+
|
|
324
|
+
const updated = await client.updateNode(created.id, { title: 'Updated' })
|
|
325
|
+
expect(updated.title).toBe('Updated')
|
|
326
|
+
|
|
327
|
+
await client.deleteNode(created.id)
|
|
328
|
+
const deleted = await client.getNode(created.id)
|
|
329
|
+
expect(deleted).toBeNull()
|
|
330
|
+
})
|
|
331
|
+
})
|
|
332
|
+
|
|
333
|
+
describe('concurrent clients', () => {
|
|
334
|
+
it('should handle 10 concurrent clients', async () => {
|
|
335
|
+
const clients = await Promise.all(
|
|
336
|
+
Array.from({ length: 10 }, async () => {
|
|
337
|
+
const c = createIPCClient(socketPath)
|
|
338
|
+
await c.connect()
|
|
339
|
+
return c
|
|
340
|
+
})
|
|
341
|
+
)
|
|
342
|
+
|
|
343
|
+
// All clients create nodes concurrently
|
|
344
|
+
const results = await Promise.all(
|
|
345
|
+
clients.map((c, i) => c.createNode({ type: 'task', title: `Issue ${i}` }))
|
|
346
|
+
)
|
|
347
|
+
|
|
348
|
+
expect(results).toHaveLength(10)
|
|
349
|
+
expect(new Set(results.map(r => r.id)).size).toBe(10) // All unique IDs
|
|
350
|
+
|
|
351
|
+
await Promise.all(clients.map(c => c.disconnect()))
|
|
352
|
+
})
|
|
353
|
+
})
|
|
354
|
+
|
|
355
|
+
describe('error handling', () => {
|
|
356
|
+
it('should return error for invalid node ID', async () => {
|
|
357
|
+
await expect(client.getNode('invalid-id')).rejects.toThrow()
|
|
358
|
+
})
|
|
359
|
+
|
|
360
|
+
it('should recover from client disconnect', async () => {
|
|
361
|
+
const tempClient = createIPCClient(socketPath)
|
|
362
|
+
await tempClient.connect()
|
|
363
|
+
await tempClient.createNode({ type: 'context', title: 'Before disconnect' })
|
|
364
|
+
|
|
365
|
+
// Abrupt disconnect (no graceful close)
|
|
366
|
+
tempClient.socket.destroy()
|
|
367
|
+
|
|
368
|
+
// Original client should still work
|
|
369
|
+
const result = await client.createNode({ type: 'context', title: 'After disconnect' })
|
|
370
|
+
expect(result.id).toBeDefined()
|
|
371
|
+
})
|
|
372
|
+
})
|
|
373
|
+
})
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
#### 2.3 BeadsProvider Integration Tests (Priority: Medium)
|
|
377
|
+
|
|
378
|
+
**Purpose:** Verify BeadsProvider works with real `bd` CLI.
|
|
379
|
+
|
|
380
|
+
**Requirements:**
|
|
381
|
+
- Beads (`bd`) CLI installed and configured
|
|
382
|
+
- Test Beads directory with fixtures
|
|
383
|
+
|
|
384
|
+
**Test Fixtures:**
|
|
385
|
+
```
|
|
386
|
+
tests/fixtures/beads/
|
|
387
|
+
├── .beads/ # Beads database directory
|
|
388
|
+
│ └── beads.db # SQLite database
|
|
389
|
+
├── bd-test1.md # Test bead with known content
|
|
390
|
+
├── bd-test2.md # Test bead for update operations
|
|
391
|
+
└── bd-temp.md # For create/delete tests
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
**Test Cases:**
|
|
395
|
+
|
|
396
|
+
```typescript
|
|
397
|
+
// tests/integration/providers/beads.integration.test.ts
|
|
398
|
+
|
|
399
|
+
const SLOW_TESTS = process.env.RUN_SLOW_TESTS === '1'
|
|
400
|
+
|
|
401
|
+
// Additional check: skip if bd CLI not available
|
|
402
|
+
async function checkBdAvailable(): Promise<boolean> {
|
|
403
|
+
try {
|
|
404
|
+
await exec('bd --version')
|
|
405
|
+
return true
|
|
406
|
+
} catch {
|
|
407
|
+
return false
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
describe.skipIf(!SLOW_TESTS)('BeadsProvider Integration', () => {
|
|
412
|
+
beforeAll(async () => {
|
|
413
|
+
if (!(await checkBdAvailable())) {
|
|
414
|
+
console.log('Skipping: bd CLI not installed')
|
|
415
|
+
return
|
|
416
|
+
}
|
|
417
|
+
})
|
|
418
|
+
|
|
419
|
+
describe('read operations', () => {
|
|
420
|
+
it('should read existing bead from real Beads directory')
|
|
421
|
+
it('should parse bead frontmatter correctly')
|
|
422
|
+
it('should handle bead with links')
|
|
423
|
+
it('should return null for non-existent bead')
|
|
424
|
+
})
|
|
425
|
+
|
|
426
|
+
describe('write operations', () => {
|
|
427
|
+
it('should create new bead via bd CLI')
|
|
428
|
+
it('should update existing bead')
|
|
429
|
+
it('should delete bead')
|
|
430
|
+
})
|
|
431
|
+
|
|
432
|
+
describe('search operations', () => {
|
|
433
|
+
it('should search beads by content')
|
|
434
|
+
it('should filter by type/tags')
|
|
435
|
+
})
|
|
436
|
+
|
|
437
|
+
describe('URI handling', () => {
|
|
438
|
+
it('should resolve relative beads:// URIs')
|
|
439
|
+
it('should handle workspace-relative paths')
|
|
440
|
+
})
|
|
441
|
+
})
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
**Dev Dependencies:**
|
|
445
|
+
- None required (uses system `bd` CLI)
|
|
446
|
+
- CI skips if `bd` not available
|
|
447
|
+
|
|
448
|
+
#### 2.4 ClaudeTasksProvider Integration Tests (Priority: Low)
|
|
449
|
+
|
|
450
|
+
**Purpose:** Verify file-backed task store persistence.
|
|
451
|
+
|
|
452
|
+
**Challenge:** Claude Code's task system is not directly accessible outside of Claude Code sessions. Integration tests focus on the file-backed store abstraction.
|
|
453
|
+
|
|
454
|
+
**Test Cases:**
|
|
455
|
+
```typescript
|
|
456
|
+
// tests/integration/providers/claude-tasks.integration.test.ts
|
|
457
|
+
|
|
458
|
+
const SLOW_TESTS = process.env.RUN_SLOW_TESTS === '1'
|
|
459
|
+
|
|
460
|
+
describe.skipIf(!SLOW_TESTS)('ClaudeTasksProvider File Store', () => {
|
|
461
|
+
let tempDir: string
|
|
462
|
+
|
|
463
|
+
beforeEach(async () => {
|
|
464
|
+
tempDir = await mkdtemp(join(tmpdir(), 'claude-tasks-'))
|
|
465
|
+
})
|
|
466
|
+
|
|
467
|
+
afterEach(async () => {
|
|
468
|
+
await rm(tempDir, { recursive: true })
|
|
469
|
+
})
|
|
470
|
+
|
|
471
|
+
describe('persistence', () => {
|
|
472
|
+
it('should persist tasks to JSON file', async () => {
|
|
473
|
+
const store = createFileBackedTaskStore(join(tempDir, 'tasks.json'))
|
|
474
|
+
await store.create({ subject: 'Test', description: 'Desc' })
|
|
475
|
+
|
|
476
|
+
// Reload from file
|
|
477
|
+
const store2 = createFileBackedTaskStore(join(tempDir, 'tasks.json'))
|
|
478
|
+
const tasks = await store2.list()
|
|
479
|
+
expect(tasks).toHaveLength(1)
|
|
480
|
+
})
|
|
481
|
+
|
|
482
|
+
it('should handle concurrent access', async () => {
|
|
483
|
+
const path = join(tempDir, 'tasks.json')
|
|
484
|
+
const stores = Array.from({ length: 5 }, () => createFileBackedTaskStore(path))
|
|
485
|
+
|
|
486
|
+
// Concurrent writes
|
|
487
|
+
await Promise.all(
|
|
488
|
+
stores.map((s, i) => s.create({ subject: `Task ${i}`, description: '' }))
|
|
489
|
+
)
|
|
490
|
+
|
|
491
|
+
const finalStore = createFileBackedTaskStore(path)
|
|
492
|
+
const tasks = await finalStore.list()
|
|
493
|
+
expect(tasks.length).toBeGreaterThanOrEqual(1) // At least some should persist
|
|
494
|
+
})
|
|
495
|
+
})
|
|
496
|
+
})
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
**Recommendation:** Full Claude Tasks integration best tested via E2E tests (Tier 3) running within actual Claude Code sessions.
|
|
500
|
+
|
|
501
|
+
### Tier 3: End-to-End Tests (Proposed)
|
|
502
|
+
|
|
503
|
+
**Purpose:** Verify complete workflows from agent perspective.
|
|
504
|
+
|
|
505
|
+
**Characteristics:**
|
|
506
|
+
- Slowest execution (minutes)
|
|
507
|
+
- Requires full system setup (daemon, storage, providers)
|
|
508
|
+
- Run before release, manual validation
|
|
509
|
+
|
|
510
|
+
**Location:** `tests/e2e/`
|
|
511
|
+
|
|
512
|
+
**Flag:** `RUN_FULL_AGENT_TESTS=1` (implies `RUN_SLOW_TESTS=1`)
|
|
513
|
+
|
|
514
|
+
#### 3.1 Agent Workflow E2E Tests
|
|
515
|
+
|
|
516
|
+
**Test Harness:**
|
|
517
|
+
```typescript
|
|
518
|
+
// tests/e2e/harness.ts
|
|
519
|
+
|
|
520
|
+
interface TestAgent {
|
|
521
|
+
// Simulates an agent making tool calls
|
|
522
|
+
link(params: LinkParams): Promise<LinkResult>
|
|
523
|
+
query(params: QueryParams): Promise<QueryResult>
|
|
524
|
+
annotate(params: AnnotateParams): Promise<AnnotateResult>
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
function createTestAgent(client: OpenTasksClient): TestAgent
|
|
528
|
+
```
|
|
529
|
+
|
|
530
|
+
**Test Cases:**
|
|
531
|
+
```typescript
|
|
532
|
+
// tests/e2e/workflows/context-driven-development.e2e.test.ts
|
|
533
|
+
|
|
534
|
+
const AGENT_TESTS = process.env.RUN_FULL_AGENT_TESTS === '1'
|
|
535
|
+
|
|
536
|
+
describe.skipIf(!AGENT_TESTS)('Context-Driven Development Workflow', () => {
|
|
537
|
+
let agent: TestAgent
|
|
538
|
+
|
|
539
|
+
it('should complete full context→task→implementation cycle', async () => {
|
|
540
|
+
// 1. Create context
|
|
541
|
+
const contextResult = await agent.link({
|
|
542
|
+
action: 'create',
|
|
543
|
+
type: 'context',
|
|
544
|
+
title: 'Test Feature',
|
|
545
|
+
content: 'Feature requirements...',
|
|
546
|
+
})
|
|
547
|
+
expect(contextResult.id).toMatch(/^c-/)
|
|
548
|
+
|
|
549
|
+
// 2. Create implementing issue
|
|
550
|
+
const issueResult = await agent.link({
|
|
551
|
+
action: 'create',
|
|
552
|
+
type: 'task',
|
|
553
|
+
title: 'Implement Test Feature',
|
|
554
|
+
implements: specResult.id,
|
|
555
|
+
})
|
|
556
|
+
|
|
557
|
+
// 3. Query ready work
|
|
558
|
+
const readyResult = await agent.query({ type: 'ready' })
|
|
559
|
+
expect(readyResult.nodes).toContainEqual(
|
|
560
|
+
expect.objectContaining({ id: issueResult.id })
|
|
561
|
+
)
|
|
562
|
+
|
|
563
|
+
// 4. Provide feedback
|
|
564
|
+
await agent.annotate({
|
|
565
|
+
target_id: specResult.id,
|
|
566
|
+
feedback_type: 'comment',
|
|
567
|
+
content: 'Implementation complete',
|
|
568
|
+
})
|
|
569
|
+
|
|
570
|
+
// 5. Close issue
|
|
571
|
+
await agent.link({
|
|
572
|
+
action: 'update',
|
|
573
|
+
id: issueResult.id,
|
|
574
|
+
status: 'closed',
|
|
575
|
+
})
|
|
576
|
+
|
|
577
|
+
// 6. Verify issue no longer ready
|
|
578
|
+
const finalReady = await agent.query({ type: 'ready' })
|
|
579
|
+
expect(finalReady.nodes).not.toContainEqual(
|
|
580
|
+
expect.objectContaining({ id: issueResult.id })
|
|
581
|
+
)
|
|
582
|
+
})
|
|
583
|
+
})
|
|
584
|
+
```
|
|
585
|
+
|
|
586
|
+
#### 3.2 Multi-Agent Coordination E2E Tests
|
|
587
|
+
|
|
588
|
+
```typescript
|
|
589
|
+
// tests/e2e/workflows/multi-agent.e2e.test.ts
|
|
590
|
+
|
|
591
|
+
const AGENT_TESTS = process.env.RUN_FULL_AGENT_TESTS === '1'
|
|
592
|
+
|
|
593
|
+
describe.skipIf(!AGENT_TESTS)('Multi-Agent Coordination', () => {
|
|
594
|
+
let agent1: TestAgent
|
|
595
|
+
let agent2: TestAgent
|
|
596
|
+
|
|
597
|
+
it('should coordinate via blocking dependencies', async () => {
|
|
598
|
+
// Agent 1 creates foundation issue
|
|
599
|
+
const foundationIssue = await agent1.link({
|
|
600
|
+
action: 'create',
|
|
601
|
+
type: 'task',
|
|
602
|
+
title: 'Foundation Work',
|
|
603
|
+
})
|
|
604
|
+
|
|
605
|
+
// Agent 1 creates dependent issue
|
|
606
|
+
const dependentIssue = await agent1.link({
|
|
607
|
+
action: 'create',
|
|
608
|
+
type: 'task',
|
|
609
|
+
title: 'Dependent Work',
|
|
610
|
+
blocked_by: [foundationIssue.id],
|
|
611
|
+
})
|
|
612
|
+
|
|
613
|
+
// Agent 2 sees only foundation as ready
|
|
614
|
+
const agent2Ready = await agent2.query({ type: 'ready' })
|
|
615
|
+
expect(agent2Ready.nodes).toHaveLength(1)
|
|
616
|
+
expect(agent2Ready.nodes[0].id).toBe(foundationIssue.id)
|
|
617
|
+
|
|
618
|
+
// Agent 1 completes foundation
|
|
619
|
+
await agent1.link({
|
|
620
|
+
action: 'update',
|
|
621
|
+
id: foundationIssue.id,
|
|
622
|
+
status: 'closed',
|
|
623
|
+
})
|
|
624
|
+
|
|
625
|
+
// Agent 2 now sees dependent as ready
|
|
626
|
+
const agent2ReadyAfter = await agent2.query({ type: 'ready' })
|
|
627
|
+
expect(agent2ReadyAfter.nodes[0].id).toBe(dependentIssue.id)
|
|
628
|
+
})
|
|
629
|
+
})
|
|
630
|
+
```
|
|
631
|
+
|
|
632
|
+
#### 3.3 Provider Sync E2E Tests
|
|
633
|
+
|
|
634
|
+
```typescript
|
|
635
|
+
// tests/e2e/workflows/provider-sync.e2e.test.ts
|
|
636
|
+
|
|
637
|
+
const AGENT_TESTS = process.env.RUN_FULL_AGENT_TESTS === '1'
|
|
638
|
+
|
|
639
|
+
describe.skipIf(!AGENT_TESTS)('Provider Synchronization', () => {
|
|
640
|
+
describe('OpenTasks ↔ Beads', () => {
|
|
641
|
+
it('should materialize Beads reference on first access')
|
|
642
|
+
it('should refresh stale materialized nodes')
|
|
643
|
+
it('should sync changes back to Beads')
|
|
644
|
+
})
|
|
645
|
+
|
|
646
|
+
describe('OpenTasks ↔ Claude Tasks', () => {
|
|
647
|
+
it('should bridge Claude task to OpenTasks issue')
|
|
648
|
+
it('should update Claude task when issue closes')
|
|
649
|
+
})
|
|
650
|
+
})
|
|
651
|
+
```
|
|
652
|
+
|
|
653
|
+
---
|
|
654
|
+
|
|
655
|
+
## Test Infrastructure
|
|
656
|
+
|
|
657
|
+
### Test Configuration
|
|
658
|
+
|
|
659
|
+
```typescript
|
|
660
|
+
// vitest.config.ts additions
|
|
661
|
+
|
|
662
|
+
export default defineConfig({
|
|
663
|
+
test: {
|
|
664
|
+
// Unit tests (fast, no external deps)
|
|
665
|
+
include: ['src/**/__tests__/*.test.ts'],
|
|
666
|
+
|
|
667
|
+
// Integration tests (separate config)
|
|
668
|
+
// Run with: vitest --config vitest.integration.config.ts
|
|
669
|
+
},
|
|
670
|
+
})
|
|
671
|
+
```
|
|
672
|
+
|
|
673
|
+
```typescript
|
|
674
|
+
// vitest.integration.config.ts
|
|
675
|
+
|
|
676
|
+
export default defineConfig({
|
|
677
|
+
test: {
|
|
678
|
+
include: ['tests/integration/**/*.test.ts'],
|
|
679
|
+
testTimeout: 30000, // 30 seconds for external calls
|
|
680
|
+
hookTimeout: 60000, // 60 seconds for setup/teardown
|
|
681
|
+
},
|
|
682
|
+
})
|
|
683
|
+
```
|
|
684
|
+
|
|
685
|
+
```typescript
|
|
686
|
+
// vitest.e2e.config.ts
|
|
687
|
+
|
|
688
|
+
export default defineConfig({
|
|
689
|
+
test: {
|
|
690
|
+
include: ['tests/e2e/**/*.test.ts'],
|
|
691
|
+
testTimeout: 120000, // 2 minutes per test
|
|
692
|
+
hookTimeout: 300000, // 5 minutes for full setup
|
|
693
|
+
maxConcurrency: 1, // Run sequentially
|
|
694
|
+
},
|
|
695
|
+
})
|
|
696
|
+
```
|
|
697
|
+
|
|
698
|
+
### npm Scripts
|
|
699
|
+
|
|
700
|
+
```json
|
|
701
|
+
{
|
|
702
|
+
"scripts": {
|
|
703
|
+
"test": "vitest run",
|
|
704
|
+
"test:watch": "vitest",
|
|
705
|
+
"test:slow": "RUN_SLOW_TESTS=1 vitest run",
|
|
706
|
+
"test:slow:watch": "RUN_SLOW_TESTS=1 vitest",
|
|
707
|
+
"test:e2e": "RUN_FULL_AGENT_TESTS=1 vitest run",
|
|
708
|
+
"test:all": "RUN_FULL_AGENT_TESTS=1 vitest run"
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
```
|
|
712
|
+
|
|
713
|
+
**Usage:**
|
|
714
|
+
```bash
|
|
715
|
+
# Fast unit tests only (CI default)
|
|
716
|
+
npm test
|
|
717
|
+
|
|
718
|
+
# Include integration tests (slower, real I/O)
|
|
719
|
+
npm run test:slow
|
|
720
|
+
|
|
721
|
+
# Full test suite including E2E (slowest)
|
|
722
|
+
npm run test:e2e
|
|
723
|
+
|
|
724
|
+
# Watch mode with integration tests
|
|
725
|
+
npm run test:slow:watch
|
|
726
|
+
```
|
|
727
|
+
|
|
728
|
+
### CI Pipeline
|
|
729
|
+
|
|
730
|
+
```yaml
|
|
731
|
+
# .github/workflows/test.yml
|
|
732
|
+
|
|
733
|
+
name: Tests
|
|
734
|
+
|
|
735
|
+
on: [push, pull_request]
|
|
736
|
+
|
|
737
|
+
jobs:
|
|
738
|
+
unit:
|
|
739
|
+
name: Unit Tests
|
|
740
|
+
runs-on: ubuntu-latest
|
|
741
|
+
steps:
|
|
742
|
+
- uses: actions/checkout@v4
|
|
743
|
+
- uses: actions/setup-node@v4
|
|
744
|
+
with:
|
|
745
|
+
node-version: '20'
|
|
746
|
+
cache: 'npm'
|
|
747
|
+
- run: npm ci
|
|
748
|
+
- run: npm test
|
|
749
|
+
|
|
750
|
+
integration:
|
|
751
|
+
name: Integration Tests (RUN_SLOW_TESTS)
|
|
752
|
+
runs-on: ubuntu-latest
|
|
753
|
+
needs: unit
|
|
754
|
+
steps:
|
|
755
|
+
- uses: actions/checkout@v4
|
|
756
|
+
- uses: actions/setup-node@v4
|
|
757
|
+
with:
|
|
758
|
+
node-version: '20'
|
|
759
|
+
cache: 'npm'
|
|
760
|
+
- run: npm ci
|
|
761
|
+
- run: npm run build # Need compiled daemon
|
|
762
|
+
- name: Run integration tests
|
|
763
|
+
run: npm run test:slow
|
|
764
|
+
env:
|
|
765
|
+
RUN_SLOW_TESTS: '1'
|
|
766
|
+
|
|
767
|
+
e2e:
|
|
768
|
+
name: E2E Tests (RUN_FULL_AGENT_TESTS)
|
|
769
|
+
runs-on: ubuntu-latest
|
|
770
|
+
needs: integration
|
|
771
|
+
if: github.ref == 'refs/heads/main' || github.event_name == 'release'
|
|
772
|
+
steps:
|
|
773
|
+
- uses: actions/checkout@v4
|
|
774
|
+
- uses: actions/setup-node@v4
|
|
775
|
+
with:
|
|
776
|
+
node-version: '20'
|
|
777
|
+
cache: 'npm'
|
|
778
|
+
- run: npm ci
|
|
779
|
+
- run: npm run build
|
|
780
|
+
- name: Run E2E tests
|
|
781
|
+
run: npm run test:e2e
|
|
782
|
+
env:
|
|
783
|
+
RUN_FULL_AGENT_TESTS: '1'
|
|
784
|
+
```
|
|
785
|
+
|
|
786
|
+
**Note:** Beads integration tests will skip automatically if `bd` CLI is not installed. To run Beads tests in CI, add a step to install the CLI.
|
|
787
|
+
|
|
788
|
+
---
|
|
789
|
+
|
|
790
|
+
## Implementation Roadmap
|
|
791
|
+
|
|
792
|
+
### Phase 1: Integration Test Infrastructure ✅ COMPLETE
|
|
793
|
+
|
|
794
|
+
1. ✅ Create `tests/integration/` directory structure
|
|
795
|
+
2. ✅ Add `vitest.integration.config.ts`
|
|
796
|
+
3. ✅ Add npm scripts with flag support
|
|
797
|
+
4. ✅ Create test helper utilities (process spawning, temp dirs, wait helpers)
|
|
798
|
+
|
|
799
|
+
**Deliverables:**
|
|
800
|
+
- ✅ `tests/integration/helpers/` - shared utilities (flags, process, wait, temp)
|
|
801
|
+
- ✅ `vitest.integration.config.ts`
|
|
802
|
+
- ✅ Updated `package.json` scripts
|
|
803
|
+
|
|
804
|
+
### Phase 2: Storage Integration Tests (RUN_SLOW_TESTS) ✅ COMPLETE
|
|
805
|
+
|
|
806
|
+
**Priority: High** - Foundation for all persistence
|
|
807
|
+
|
|
808
|
+
1. ✅ Create JSONL durability tests (16 tests)
|
|
809
|
+
- Crash recovery (partial writes, corrupted entries)
|
|
810
|
+
- Compaction with 1000+ entries
|
|
811
|
+
- Concurrent readers
|
|
812
|
+
- Performance baselines
|
|
813
|
+
2. ✅ Create SQLite durability tests (17 tests)
|
|
814
|
+
- Transaction crash recovery
|
|
815
|
+
- 10k+ node performance baselines (insert <1s, query <500ms)
|
|
816
|
+
- WAL mode concurrent access
|
|
817
|
+
- Complex graph queries
|
|
818
|
+
3. ✅ Add performance assertions
|
|
819
|
+
|
|
820
|
+
**Deliverables:**
|
|
821
|
+
- ✅ `tests/integration/storage/jsonl-durability.integration.test.ts`
|
|
822
|
+
- ✅ `tests/integration/storage/sqlite-durability.integration.test.ts`
|
|
823
|
+
|
|
824
|
+
### Phase 3: Daemon Integration Tests (RUN_SLOW_TESTS) ✅ COMPLETE
|
|
825
|
+
|
|
826
|
+
**Priority: High** - Foundation for client-server architecture
|
|
827
|
+
|
|
828
|
+
1. ✅ Create daemon spawn/lifecycle helpers
|
|
829
|
+
2. ✅ Write lifecycle tests (19 tests: startup, shutdown, lock, registry)
|
|
830
|
+
3. ✅ Write IPC round-trip tests (21 tests: request/response, error handling)
|
|
831
|
+
4. ✅ Write concurrent client tests
|
|
832
|
+
5. ✅ Write connection tracking tests
|
|
833
|
+
|
|
834
|
+
**Deliverables:**
|
|
835
|
+
- ✅ `tests/integration/daemon/helpers.ts`
|
|
836
|
+
- ✅ `tests/integration/daemon/lifecycle.integration.test.ts`
|
|
837
|
+
- ✅ `tests/integration/daemon/ipc.integration.test.ts`
|
|
838
|
+
|
|
839
|
+
### Phase 4: Provider & Graph Integration Tests (RUN_SLOW_TESTS) ✅ COMPLETE
|
|
840
|
+
|
|
841
|
+
**Priority: Medium** - External system integration and federated graph
|
|
842
|
+
|
|
843
|
+
1. ✅ BeadsProvider integration (17 tests)
|
|
844
|
+
- CRUD operations (create, get, list, update, delete)
|
|
845
|
+
- Search operations
|
|
846
|
+
- URI handling
|
|
847
|
+
- Error handling
|
|
848
|
+
- Concurrent operations (5 creates, 10 reads)
|
|
849
|
+
- Workspace isolation
|
|
850
|
+
- Uses temp directories with git init + bd init
|
|
851
|
+
|
|
852
|
+
2. ✅ Federated Graph integration (26 tests)
|
|
853
|
+
- Schema migration (edge metadata columns)
|
|
854
|
+
- Edge type registry with inverse relationships
|
|
855
|
+
- Graphology adapter synchronization
|
|
856
|
+
- Traversal API (related, reachable, shortestPath, traverse)
|
|
857
|
+
- Provider hydration with TTL caching
|
|
858
|
+
- Federated ready query with external blockers
|
|
859
|
+
- Cross-provider edge resolution
|
|
860
|
+
- Cache staleness detection
|
|
861
|
+
- Cycle handling
|
|
862
|
+
|
|
863
|
+
3. ClaudeTasksProvider file store
|
|
864
|
+
- File-backed persistence tests (future work)
|
|
865
|
+
|
|
866
|
+
**Deliverables:**
|
|
867
|
+
- ✅ `tests/integration/providers/beads.integration.test.ts`
|
|
868
|
+
- ✅ `tests/integration/graph/federated-graph.integration.test.ts`
|
|
869
|
+
- `tests/integration/providers/claude-tasks.integration.test.ts` (future)
|
|
870
|
+
|
|
871
|
+
**Provider Fixes Made:**
|
|
872
|
+
- Fixed shell escaping for arguments with spaces
|
|
873
|
+
- Fixed "not found" detection to handle bd error messages
|
|
874
|
+
- Fixed bd show/update returning arrays instead of single objects
|
|
875
|
+
|
|
876
|
+
### Phase 5: E2E Test Infrastructure (RUN_FULL_AGENT_TESTS) ✅ COMPLETE
|
|
877
|
+
|
|
878
|
+
1. ✅ Create `tests/e2e/` directory structure
|
|
879
|
+
2. ✅ Add `vitest.e2e.config.ts`
|
|
880
|
+
3. ✅ Create TestAgent harness wrapping client
|
|
881
|
+
4. ✅ Create full system setup/teardown helpers
|
|
882
|
+
|
|
883
|
+
**Deliverables:**
|
|
884
|
+
- ✅ `tests/e2e/helpers/system-setup.ts` - Full system setup (IPC server, SQLite storage, graph store, tool handlers, provider registry)
|
|
885
|
+
- ✅ `tests/e2e/helpers/test-agent.ts` - TestAgent wrapper with 3-tool interface + provider operations + convenience methods
|
|
886
|
+
- ✅ `tests/e2e/helpers/assertions.ts` - Assertion helpers (expectReady, expectNotReady, expectBlocks, expectBlockers, expectFeedback)
|
|
887
|
+
- ✅ `tests/e2e/helpers/fixtures.ts` - Fixture helpers (createTestContext, createTestTask, createBlockingChain, createDiamondDependency)
|
|
888
|
+
- ✅ `tests/e2e/helpers/index.ts` - Exports
|
|
889
|
+
- ✅ `tests/e2e/infrastructure.e2e.test.ts` - 39 infrastructure tests
|
|
890
|
+
- ✅ `vitest.e2e.config.ts` - E2E-specific configuration
|
|
891
|
+
|
|
892
|
+
**Infrastructure Features:**
|
|
893
|
+
- `setupE2ESystem()` / `withE2ESystem()` - Create isolated test environment with storage, IPC, client, and provider registry
|
|
894
|
+
- `createTestAgent()` - Wrap client with named agent, logging, and provider operations (createContext, createTask, updateNode, closeTask, getNode)
|
|
895
|
+
- `createMultiAgents()` - Create multiple agents for coordination tests
|
|
896
|
+
- Assertion helpers for common test patterns
|
|
897
|
+
- Fixture helpers for creating test data structures (chains, diamonds, context+tasks)
|
|
898
|
+
- Automatic cleanup on teardown
|
|
899
|
+
|
|
900
|
+
### Phase 6: Agent Workflow E2E Tests (RUN_FULL_AGENT_TESTS) ✅ COMPLETE
|
|
901
|
+
|
|
902
|
+
**Priority: High** - Core value proposition validation
|
|
903
|
+
|
|
904
|
+
1. ✅ Context-driven development workflow (10 tests)
|
|
905
|
+
- Full context→task→close cycle
|
|
906
|
+
- Multiple tasks implementing one context
|
|
907
|
+
- Task status filtering (open vs in_progress vs closed)
|
|
908
|
+
- Priority storage and retrieval
|
|
909
|
+
- Context content preservation and updates
|
|
910
|
+
|
|
911
|
+
2. ✅ Multi-agent coordination (9 tests)
|
|
912
|
+
- Sequential blocking between agents
|
|
913
|
+
- Cross-agent blocking relationships
|
|
914
|
+
- Diamond dependency resolution
|
|
915
|
+
- Concurrent issue creation
|
|
916
|
+
- Transitive blocking queries (blockers/blocking with transitive option)
|
|
917
|
+
- Agent isolation with shared state
|
|
918
|
+
|
|
919
|
+
3. ✅ Feedback loop tests (10 tests)
|
|
920
|
+
- Basic feedback operations (add, query, types)
|
|
921
|
+
- Feedback with issue context (from_id)
|
|
922
|
+
- Resolve/reopen feedback lifecycle
|
|
923
|
+
- Dismiss and filter feedback
|
|
924
|
+
- Filter by type
|
|
925
|
+
- Anchored feedback
|
|
926
|
+
- Feedback assertion helper
|
|
927
|
+
|
|
928
|
+
**Deliverables:**
|
|
929
|
+
- ✅ `tests/e2e/workflows/context-driven.e2e.test.ts` - 10 tests
|
|
930
|
+
- ✅ `tests/e2e/workflows/multi-agent.e2e.test.ts` - 9 tests
|
|
931
|
+
- ✅ `tests/e2e/workflows/feedback-loop.e2e.test.ts` - 10 tests
|
|
932
|
+
|
|
933
|
+
**Key Learnings:**
|
|
934
|
+
- Ready query only returns `status: 'open'` tasks (not `in_progress`)
|
|
935
|
+
- Ready query doesn't sort by priority
|
|
936
|
+
- LinkResult uses `success` and `edge_id` fields
|
|
937
|
+
|
|
938
|
+
### Phase 7: Provider Sync E2E Tests (RUN_FULL_AGENT_TESTS) ✅ COMPLETE
|
|
939
|
+
|
|
940
|
+
**Priority: Medium** - Cross-provider integration validation
|
|
941
|
+
|
|
942
|
+
**Purpose:** Test cross-provider blocking dependencies between NativeProvider and BeadsProvider, hydration/caching behavior, materialization strategies, and background sync.
|
|
943
|
+
|
|
944
|
+
**Requirements:**
|
|
945
|
+
- `bd` CLI installed (tests skip gracefully if unavailable)
|
|
946
|
+
- `RUN_FULL_AGENT_TESTS=1` environment variable
|
|
947
|
+
|
|
948
|
+
1. ✅ Hydration & Caching tests (12 tests)
|
|
949
|
+
- First access hydration from BeadsProvider
|
|
950
|
+
- cached_at timestamp tracking
|
|
951
|
+
- Cache reuse without re-fetching when fresh
|
|
952
|
+
- Staleness detection (TTL-based, non-hydrated nodes)
|
|
953
|
+
- Missing/non-existent node handling
|
|
954
|
+
- Concurrent hydration (same node, different nodes)
|
|
955
|
+
- Resolve API (single and batch resolution)
|
|
956
|
+
|
|
957
|
+
2. ✅ Cross-provider edges (8 tests, 1 skipped)
|
|
958
|
+
- Native → External edge creation and queries
|
|
959
|
+
- External → Native edge creation and queries
|
|
960
|
+
- Bidirectional traversal via federated graph
|
|
961
|
+
- Transitive cross-provider chains (Native → Beads → Native)
|
|
962
|
+
- Ready query with cross-provider blockers
|
|
963
|
+
- Status change detection (skipped - requires cache invalidation investigation)
|
|
964
|
+
|
|
965
|
+
3. ✅ Federated ready query (10 tests)
|
|
966
|
+
- Basic ready query (unblocked, closed blocker, open blocker)
|
|
967
|
+
- Cross-provider blockers (open external blocks, closed external unblocks)
|
|
968
|
+
- Multiple blockers (all native, mixed native+external)
|
|
969
|
+
- External status mapping (closed, open, in_progress)
|
|
970
|
+
|
|
971
|
+
4. ✅ Materialization strategies (10 tests)
|
|
972
|
+
- Lazy strategy (materialize on resolve, explicit flag)
|
|
973
|
+
- On-demand strategy (explicit request only)
|
|
974
|
+
- Eager strategy (all access types)
|
|
975
|
+
- None strategy (never materialize)
|
|
976
|
+
- Per-provider strategy overrides
|
|
977
|
+
- Staleness detection (TTL, missing cached_at, stale flag)
|
|
978
|
+
- URI extraction for strategy lookup
|
|
979
|
+
|
|
980
|
+
5. ✅ Background sync (16 tests)
|
|
981
|
+
- Start/stop lifecycle (running state, stop behavior)
|
|
982
|
+
- Configuration (interval=0 disables, negative interval, multiple starts)
|
|
983
|
+
- Materialization context (access types, explicit flag)
|
|
984
|
+
- Strategy handling (lazy, eager, on-demand, none)
|
|
985
|
+
- Default configuration and partial config merging
|
|
986
|
+
|
|
987
|
+
**Deliverables:**
|
|
988
|
+
- ✅ `tests/e2e/helpers/beads-helpers.ts` - Beads CLI helpers (isBdAvailable, createBeadsTask, getBeadsTask, updateBeadsStatus)
|
|
989
|
+
- ✅ `tests/e2e/workflows/provider-sync/hydration.e2e.test.ts` - 12 tests
|
|
990
|
+
- ✅ `tests/e2e/workflows/provider-sync/cross-provider-edges.e2e.test.ts` - 8 tests (1 skipped)
|
|
991
|
+
- ✅ `tests/e2e/workflows/provider-sync/federated-ready.e2e.test.ts` - 10 tests
|
|
992
|
+
- ✅ `tests/e2e/workflows/provider-sync/materialization.e2e.test.ts` - 10 tests
|
|
993
|
+
- ✅ `tests/e2e/workflows/provider-sync/background-sync.e2e.test.ts` - 16 tests
|
|
994
|
+
|
|
995
|
+
**Key Technical Patterns:**
|
|
996
|
+
- Cross-provider queries use `HydratingFederatedGraph.related()` instead of daemon queries
|
|
997
|
+
- Native nodes use `native://` URI prefix and must be added to GraphologyAdapter
|
|
998
|
+
- bd CLI only supports statuses: `open`, `closed`, `blocked`, `in_progress`
|
|
999
|
+
- CLOSED_STATUSES list includes: `closed`, `done`, `resolved`, `completed`, `cancelled`
|
|
1000
|
+
|
|
1001
|
+
**Running Provider Sync Tests:**
|
|
1002
|
+
```bash
|
|
1003
|
+
# Run all provider sync tests (requires bd CLI)
|
|
1004
|
+
RUN_FULL_AGENT_TESTS=1 npx vitest run tests/e2e/workflows/provider-sync/
|
|
1005
|
+
|
|
1006
|
+
# Tests skip gracefully if bd CLI is not available
|
|
1007
|
+
```
|
|
1008
|
+
|
|
1009
|
+
---
|
|
1010
|
+
|
|
1011
|
+
## Dev Dependencies to Consider
|
|
1012
|
+
|
|
1013
|
+
| Package | Purpose | Decision Criteria |
|
|
1014
|
+
|---------|---------|-------------------|
|
|
1015
|
+
| `execa` | Better child process handling | If spawn tests become complex |
|
|
1016
|
+
| `tempy` | Temp directory management | If current approach insufficient |
|
|
1017
|
+
| `wait-for-expect` | Async assertion helpers | If timeout handling needed |
|
|
1018
|
+
| `msw` | Mock Service Worker | Only if HTTP mocking needed |
|
|
1019
|
+
|
|
1020
|
+
**Current recommendation:** Start without additional dependencies, add as needed.
|
|
1021
|
+
|
|
1022
|
+
---
|
|
1023
|
+
|
|
1024
|
+
## Success Metrics
|
|
1025
|
+
|
|
1026
|
+
### Coverage Targets
|
|
1027
|
+
|
|
1028
|
+
| Tier | Target | Current |
|
|
1029
|
+
|------|--------|---------|
|
|
1030
|
+
| Unit | >90% | 926 tests ✅ |
|
|
1031
|
+
| Integration | >70% of external interfaces | 127 tests (Phases 1-4) ✅ |
|
|
1032
|
+
| E2E | >80% of documented workflows | 124 tests (Phases 5-7) ✅ |
|
|
1033
|
+
|
|
1034
|
+
### Performance Baselines
|
|
1035
|
+
|
|
1036
|
+
| Operation | Target | Measured |
|
|
1037
|
+
|-----------|--------|----------|
|
|
1038
|
+
| Unit test suite | <10s | ~3s ✅ |
|
|
1039
|
+
| Integration test suite | <2min | ~20s ✅ |
|
|
1040
|
+
| E2E test suite | <10min | ~2s (124 tests) ✅ |
|
|
1041
|
+
| Create 1000 nodes (JSONL) | <1s | <500ms ✅ |
|
|
1042
|
+
| Load 1000 nodes (JSONL) | <500ms | <100ms ✅ |
|
|
1043
|
+
| Insert 10k nodes (SQLite) | <5s | ~650ms ✅ |
|
|
1044
|
+
| Query 10k nodes (SQLite) | <1s | ~15ms ✅ |
|
|
1045
|
+
|
|
1046
|
+
---
|
|
1047
|
+
|
|
1048
|
+
## Next Steps
|
|
1049
|
+
|
|
1050
|
+
1. ~~**Immediate:** Implement Phase 1 (test infrastructure, helpers, config)~~ ✅ DONE
|
|
1051
|
+
2. ~~**Short-term:** Implement Phases 2-3 (storage + daemon integration tests)~~ ✅ DONE
|
|
1052
|
+
3. ~~**Medium-term:** Implement Phase 4 (provider + graph integration)~~ ✅ DONE
|
|
1053
|
+
4. ~~**Next:** Implement Phase 5 (E2E infrastructure)~~ ✅ DONE
|
|
1054
|
+
5. ~~**Next:** Implement Phase 6 (agent workflow E2E tests)~~ ✅ DONE
|
|
1055
|
+
6. ~~**Next:** Implement Phase 7 (provider sync E2E tests)~~ ✅ DONE
|
|
1056
|
+
|
|
1057
|
+
**All phases complete!** Future work may include:
|
|
1058
|
+
- ClaudeTasksProvider integration tests (when accessible outside Claude Code sessions)
|
|
1059
|
+
- Additional stress/performance tests for large graphs
|
|
1060
|
+
- CI integration with bd CLI installation
|
|
1061
|
+
|
|
1062
|
+
The testing strategy prioritizes system-level tests (storage, daemon) first as they:
|
|
1063
|
+
- Have no external dependencies (no `bd` CLI needed)
|
|
1064
|
+
- Test the foundation that all other features rely on
|
|
1065
|
+
- Can be gated with `RUN_SLOW_TESTS` for fast CI cycles
|
|
1066
|
+
|
|
1067
|
+
## Progress Summary
|
|
1068
|
+
|
|
1069
|
+
| Phase | Status | Tests |
|
|
1070
|
+
|-------|--------|-------|
|
|
1071
|
+
| Phase 1: Infrastructure | ✅ Complete | 11 helper tests |
|
|
1072
|
+
| Phase 2: Storage | ✅ Complete | 33 tests (JSONL + SQLite) |
|
|
1073
|
+
| Phase 3: Daemon | ✅ Complete | 40 tests (lifecycle + IPC) |
|
|
1074
|
+
| Phase 4: Providers & Graph | ✅ Complete | 43 tests (BeadsProvider + FederatedGraph) |
|
|
1075
|
+
| Phase 5: E2E Infrastructure | ✅ Complete | 39 tests (system setup, TestAgent, providers, assertions, fixtures) |
|
|
1076
|
+
| Phase 6: Agent Workflows | ✅ Complete | 29 tests (context-driven, multi-agent, feedback-loop) |
|
|
1077
|
+
| Phase 7: Provider Sync | ✅ Complete | 56 tests (hydration, cross-provider, federated-ready, materialization, background-sync) |
|
|
1078
|
+
|
|
1079
|
+
**Total Tests:** 1177 (926 unit + 127 integration + 124 E2E)
|
|
1080
|
+
|
|
1081
|
+
**Note:** Provider sync tests require `bd` CLI and skip gracefully if unavailable. Run with `RUN_FULL_AGENT_TESTS=1`.
|