claude-code-swarm 0.3.2 → 0.3.4
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 +1 -1
- package/CLAUDE.md +4 -0
- package/README.md +65 -0
- package/package.json +4 -4
- package/src/__tests__/config.test.mjs +128 -0
- package/src/__tests__/index.test.mjs +2 -0
- package/src/__tests__/paths.test.mjs +13 -0
- package/src/config.mjs +46 -16
- package/src/index.mjs +3 -1
- package/src/map-connection.mjs +3 -3
- package/src/paths.mjs +5 -0
- package/src/sidecar-client.mjs +2 -2
- package/references/multi-agent-protocol/.sudocode/issues.jsonl +0 -120
- package/references/multi-agent-protocol/.sudocode/specs.jsonl +0 -15
- package/references/multi-agent-protocol/LICENSE +0 -21
- package/references/multi-agent-protocol/README.md +0 -113
- package/references/multi-agent-protocol/docs/00-design-specification.md +0 -496
- package/references/multi-agent-protocol/docs/01-open-questions.md +0 -1050
- package/references/multi-agent-protocol/docs/02-wire-protocol.md +0 -296
- package/references/multi-agent-protocol/docs/03-streaming-semantics.md +0 -252
- package/references/multi-agent-protocol/docs/04-error-handling.md +0 -231
- package/references/multi-agent-protocol/docs/05-connection-model.md +0 -244
- package/references/multi-agent-protocol/docs/06-visibility-permissions.md +0 -243
- package/references/multi-agent-protocol/docs/07-federation.md +0 -335
- package/references/multi-agent-protocol/docs/08-macro-agent-migration.md +0 -253
- package/references/multi-agent-protocol/docs/09-authentication.md +0 -748
- package/references/multi-agent-protocol/docs/10-environment-awareness.md +0 -242
- package/references/multi-agent-protocol/docs/10-mail-protocol.md +0 -553
- package/references/multi-agent-protocol/docs/11-anp-inspired-improvements.md +0 -1079
- package/references/multi-agent-protocol/docs/11-trajectory-protocol.md +0 -292
- package/references/multi-agent-protocol/docs/12-anp-implementation-plan.md +0 -641
- package/references/multi-agent-protocol/docs/agent-iam-integration.md +0 -877
- package/references/multi-agent-protocol/docs/agentic-mesh-integration-draft.md +0 -459
- package/references/multi-agent-protocol/docs/git-transport-draft.md +0 -251
- package/references/multi-agent-protocol/docs-site/Gemfile +0 -22
- package/references/multi-agent-protocol/docs-site/README.md +0 -82
- package/references/multi-agent-protocol/docs-site/_config.yml +0 -91
- package/references/multi-agent-protocol/docs-site/_includes/head_custom.html +0 -20
- package/references/multi-agent-protocol/docs-site/_sass/color_schemes/map.scss +0 -42
- package/references/multi-agent-protocol/docs-site/_sass/custom/custom.scss +0 -34
- package/references/multi-agent-protocol/docs-site/examples/full-integration.md +0 -510
- package/references/multi-agent-protocol/docs-site/examples/index.md +0 -138
- package/references/multi-agent-protocol/docs-site/examples/simple-chat.md +0 -282
- package/references/multi-agent-protocol/docs-site/examples/task-queue.md +0 -399
- package/references/multi-agent-protocol/docs-site/getting-started/index.md +0 -98
- package/references/multi-agent-protocol/docs-site/getting-started/installation.md +0 -219
- package/references/multi-agent-protocol/docs-site/getting-started/overview.md +0 -172
- package/references/multi-agent-protocol/docs-site/getting-started/quickstart.md +0 -237
- package/references/multi-agent-protocol/docs-site/index.md +0 -136
- package/references/multi-agent-protocol/docs-site/protocol/authentication.md +0 -391
- package/references/multi-agent-protocol/docs-site/protocol/connection-model.md +0 -376
- package/references/multi-agent-protocol/docs-site/protocol/design.md +0 -284
- package/references/multi-agent-protocol/docs-site/protocol/error-handling.md +0 -312
- package/references/multi-agent-protocol/docs-site/protocol/federation.md +0 -449
- package/references/multi-agent-protocol/docs-site/protocol/index.md +0 -129
- package/references/multi-agent-protocol/docs-site/protocol/permissions.md +0 -398
- package/references/multi-agent-protocol/docs-site/protocol/streaming.md +0 -353
- package/references/multi-agent-protocol/docs-site/protocol/wire-protocol.md +0 -369
- package/references/multi-agent-protocol/docs-site/sdk/api/agent.md +0 -357
- package/references/multi-agent-protocol/docs-site/sdk/api/client.md +0 -380
- package/references/multi-agent-protocol/docs-site/sdk/api/index.md +0 -62
- package/references/multi-agent-protocol/docs-site/sdk/api/server.md +0 -453
- package/references/multi-agent-protocol/docs-site/sdk/api/types.md +0 -468
- package/references/multi-agent-protocol/docs-site/sdk/guides/agent.md +0 -375
- package/references/multi-agent-protocol/docs-site/sdk/guides/authentication.md +0 -405
- package/references/multi-agent-protocol/docs-site/sdk/guides/client.md +0 -352
- package/references/multi-agent-protocol/docs-site/sdk/guides/index.md +0 -89
- package/references/multi-agent-protocol/docs-site/sdk/guides/server.md +0 -360
- package/references/multi-agent-protocol/docs-site/sdk/guides/testing.md +0 -446
- package/references/multi-agent-protocol/docs-site/sdk/guides/transports.md +0 -363
- package/references/multi-agent-protocol/docs-site/sdk/index.md +0 -206
- package/references/multi-agent-protocol/package-lock.json +0 -4230
- package/references/multi-agent-protocol/package.json +0 -56
- package/references/multi-agent-protocol/schema/meta.json +0 -584
- package/references/multi-agent-protocol/schema/schema.json +0 -3067
- package/references/openhive/.claude/settings.json +0 -6
- package/references/openhive/.dockerignore +0 -54
- package/references/openhive/.github/workflows/docker.yml +0 -52
- package/references/openhive/.sudocode/issues.jsonl +0 -24
- package/references/openhive/.sudocode/specs.jsonl +0 -4
- package/references/openhive/CLAUDE.md +0 -88
- package/references/openhive/Dockerfile +0 -105
- package/references/openhive/README.md +0 -745
- package/references/openhive/bin/openhive.js +0 -6
- package/references/openhive/cloudbuild.yaml +0 -80
- package/references/openhive/deploy/cloud-run.sh +0 -106
- package/references/openhive/deploy/openhive.env.example +0 -80
- package/references/openhive/deploy/openhive.service +0 -91
- package/references/openhive/docker-compose.yml +0 -67
- package/references/openhive/docker-entrypoint.sh +0 -117
- package/references/openhive/docs/API_MIGRATION.md +0 -176
- package/references/openhive/docs/DEPLOYMENT.md +0 -847
- package/references/openhive/docs/DESIGN_v1.md +0 -489
- package/references/openhive/docs/DESIGN_v2.md +0 -564
- package/references/openhive/docs/HEADSCALE_HOSTING_SPEC.md +0 -513
- package/references/openhive/docs/HIVE_SYNC_DESIGN.md +0 -2362
- package/references/openhive/docs/HIVE_SYNC_IMPLEMENTATION_PLAN.md +0 -1169
- package/references/openhive/docs/HOSTING.md +0 -601
- package/references/openhive/docs/IMPLEMENTATION_PLAN.md +0 -428
- package/references/openhive/docs/LOCAL_SETUP.md +0 -506
- package/references/openhive/docs/MACRO_AGENT_ATLAS_EXTENSION.md +0 -351
- package/references/openhive/docs/MEMORY_BANK_SYNC_SPEC.md +0 -909
- package/references/openhive/docs/PLAN_v1.md +0 -471
- package/references/openhive/docs/PLAN_v2.md +0 -623
- package/references/openhive/docs/WEBSOCKET.md +0 -267
- package/references/openhive/docs/openswarm-bootstrap-token-spec.md +0 -240
- package/references/openhive/ecosystem.config.cjs +0 -76
- package/references/openhive/fly.toml +0 -63
- package/references/openhive/package-lock.json +0 -17640
- package/references/openhive/package.json +0 -128
- package/references/openhive/packages/openhive-types/package-lock.json +0 -1473
- package/references/openhive/packages/openhive-types/package.json +0 -42
- package/references/openhive/packages/openhive-types/src/index.ts +0 -36
- package/references/openhive/packages/openhive-types/src/map-coordination.ts +0 -92
- package/references/openhive/packages/openhive-types/src/map-session-sync.ts +0 -50
- package/references/openhive/packages/openhive-types/src/map-sync.ts +0 -68
- package/references/openhive/packages/openhive-types/tsconfig.json +0 -15
- package/references/openhive/packages/openhive-types/tsconfig.tsbuildinfo +0 -1
- package/references/openhive/packages/openhive-types/tsup.config.ts +0 -12
- package/references/openhive/railway.json +0 -13
- package/references/openhive/railway.toml +0 -24
- package/references/openhive/render.yaml +0 -51
- package/references/openhive/src/__tests__/auth.test.ts +0 -148
- package/references/openhive/src/__tests__/bridge/credentials.test.ts +0 -65
- package/references/openhive/src/__tests__/bridge/dal.test.ts +0 -279
- package/references/openhive/src/__tests__/bridge/inbound.test.ts +0 -349
- package/references/openhive/src/__tests__/bridge/manager.test.ts +0 -419
- package/references/openhive/src/__tests__/bridge/mentions.test.ts +0 -83
- package/references/openhive/src/__tests__/bridge/outbound.test.ts +0 -209
- package/references/openhive/src/__tests__/bridge/slack-adapter.test.ts +0 -276
- package/references/openhive/src/__tests__/cli.test.ts +0 -342
- package/references/openhive/src/__tests__/config.test.ts +0 -205
- package/references/openhive/src/__tests__/coordination/coordination.test.ts +0 -1072
- package/references/openhive/src/__tests__/coordination/cross-instance.test.ts +0 -540
- package/references/openhive/src/__tests__/coordination/e2e.test.ts +0 -780
- package/references/openhive/src/__tests__/data-dir.test.ts +0 -332
- package/references/openhive/src/__tests__/db.test.ts +0 -258
- package/references/openhive/src/__tests__/discovery.test.ts +0 -288
- package/references/openhive/src/__tests__/events/dal.test.ts +0 -371
- package/references/openhive/src/__tests__/events/dispatch.test.ts +0 -202
- package/references/openhive/src/__tests__/events/e2e.test.ts +0 -528
- package/references/openhive/src/__tests__/events/normalizers.test.ts +0 -263
- package/references/openhive/src/__tests__/events/router.test.ts +0 -314
- package/references/openhive/src/__tests__/events/routes.test.ts +0 -407
- package/references/openhive/src/__tests__/follows.test.ts +0 -328
- package/references/openhive/src/__tests__/helpers/test-dirs.ts +0 -44
- package/references/openhive/src/__tests__/ingest-keys.test.ts +0 -925
- package/references/openhive/src/__tests__/map/sync-client-content.test.ts +0 -288
- package/references/openhive/src/__tests__/map/sync-client.test.ts +0 -500
- package/references/openhive/src/__tests__/map/sync-listener.test.ts +0 -504
- package/references/openhive/src/__tests__/middleware/hostname-guard.test.ts +0 -73
- package/references/openhive/src/__tests__/migrations.test.ts +0 -260
- package/references/openhive/src/__tests__/opentasks/client.test.ts +0 -497
- package/references/openhive/src/__tests__/opentasks/discovery.test.ts +0 -283
- package/references/openhive/src/__tests__/opentasks/e2e.test.ts +0 -767
- package/references/openhive/src/__tests__/routes/agents.test.ts +0 -417
- package/references/openhive/src/__tests__/routes/opentasks-content.test.ts +0 -493
- package/references/openhive/src/__tests__/routes/resource-content.test.ts +0 -1741
- package/references/openhive/src/__tests__/sessions/adapters.test.ts +0 -524
- package/references/openhive/src/__tests__/sessions/routes.test.ts +0 -1053
- package/references/openhive/src/__tests__/sessions/storage.test.ts +0 -545
- package/references/openhive/src/__tests__/sessions/trajectory-checkpoints.test.ts +0 -349
- package/references/openhive/src/__tests__/sessions/trajectory-routes.test.ts +0 -290
- package/references/openhive/src/__tests__/swarm/config.test.ts +0 -125
- package/references/openhive/src/__tests__/swarm/credentials.test.ts +0 -254
- package/references/openhive/src/__tests__/swarm/dal.test.ts +0 -290
- package/references/openhive/src/__tests__/swarm/e2e.test.ts +0 -827
- package/references/openhive/src/__tests__/swarm/fixtures/exit-immediately.js +0 -3
- package/references/openhive/src/__tests__/swarm/fixtures/map-server.js +0 -147
- package/references/openhive/src/__tests__/swarm/fixtures/sleep-server.js +0 -52
- package/references/openhive/src/__tests__/swarm/local-provider.test.ts +0 -279
- package/references/openhive/src/__tests__/swarm/manager.test.ts +0 -305
- package/references/openhive/src/__tests__/swarm/routes.test.ts +0 -396
- package/references/openhive/src/__tests__/swarm/workspace.test.ts +0 -257
- package/references/openhive/src/__tests__/swarmhub/client.test.ts +0 -324
- package/references/openhive/src/__tests__/swarmhub/config.test.ts +0 -213
- package/references/openhive/src/__tests__/swarmhub/connector.test.ts +0 -581
- package/references/openhive/src/__tests__/swarmhub/routes.test.ts +0 -639
- package/references/openhive/src/__tests__/swarmhub/slack-client.test.ts +0 -164
- package/references/openhive/src/__tests__/swarmhub/slack-connector.test.ts +0 -164
- package/references/openhive/src/__tests__/swarmhub/slack-routes.test.ts +0 -373
- package/references/openhive/src/__tests__/swarmhub/webhook-handler.test.ts +0 -295
- package/references/openhive/src/__tests__/sync/resource-sync.test.ts +0 -1418
- package/references/openhive/src/__tests__/sync/sync.test.ts +0 -800
- package/references/openhive/src/api/index.ts +0 -65
- package/references/openhive/src/api/middleware/auth.ts +0 -227
- package/references/openhive/src/api/middleware/hostname-guard.ts +0 -38
- package/references/openhive/src/api/routes/admin.ts +0 -366
- package/references/openhive/src/api/routes/agents.ts +0 -223
- package/references/openhive/src/api/routes/auth.ts +0 -164
- package/references/openhive/src/api/routes/bridges.ts +0 -384
- package/references/openhive/src/api/routes/comments.ts +0 -294
- package/references/openhive/src/api/routes/coordination.ts +0 -312
- package/references/openhive/src/api/routes/events.ts +0 -158
- package/references/openhive/src/api/routes/federation.ts +0 -367
- package/references/openhive/src/api/routes/feed.ts +0 -212
- package/references/openhive/src/api/routes/hives.ts +0 -264
- package/references/openhive/src/api/routes/map.ts +0 -674
- package/references/openhive/src/api/routes/memory-banks.ts +0 -971
- package/references/openhive/src/api/routes/posts.ts +0 -342
- package/references/openhive/src/api/routes/resource-content.ts +0 -727
- package/references/openhive/src/api/routes/resources.ts +0 -1013
- package/references/openhive/src/api/routes/search.ts +0 -45
- package/references/openhive/src/api/routes/sessions.ts +0 -1187
- package/references/openhive/src/api/routes/swarm-hosting.ts +0 -313
- package/references/openhive/src/api/routes/sync-protocol.ts +0 -168
- package/references/openhive/src/api/routes/sync.ts +0 -279
- package/references/openhive/src/api/routes/uploads.ts +0 -174
- package/references/openhive/src/api/routes/webhooks.ts +0 -603
- package/references/openhive/src/api/schemas/agents.ts +0 -26
- package/references/openhive/src/api/schemas/comments.ts +0 -22
- package/references/openhive/src/api/schemas/hives.ts +0 -33
- package/references/openhive/src/api/schemas/posts.ts +0 -37
- package/references/openhive/src/api/schemas/sync.ts +0 -56
- package/references/openhive/src/auth/index.ts +0 -2
- package/references/openhive/src/auth/jwks.ts +0 -58
- package/references/openhive/src/bridge/adapters/slack.ts +0 -306
- package/references/openhive/src/bridge/credentials.ts +0 -72
- package/references/openhive/src/bridge/inbound.ts +0 -288
- package/references/openhive/src/bridge/index.ts +0 -42
- package/references/openhive/src/bridge/manager.ts +0 -425
- package/references/openhive/src/bridge/mentions.ts +0 -42
- package/references/openhive/src/bridge/outbound.ts +0 -103
- package/references/openhive/src/bridge/schema.ts +0 -82
- package/references/openhive/src/bridge/types.ts +0 -238
- package/references/openhive/src/cli/network.ts +0 -480
- package/references/openhive/src/cli.ts +0 -620
- package/references/openhive/src/config.ts +0 -611
- package/references/openhive/src/coordination/index.ts +0 -43
- package/references/openhive/src/coordination/listener.ts +0 -92
- package/references/openhive/src/coordination/schema.ts +0 -79
- package/references/openhive/src/coordination/service.ts +0 -233
- package/references/openhive/src/coordination/types.ts +0 -177
- package/references/openhive/src/data-dir.ts +0 -105
- package/references/openhive/src/db/adapters/index.ts +0 -21
- package/references/openhive/src/db/adapters/postgres.ts +0 -310
- package/references/openhive/src/db/adapters/sqlite.ts +0 -56
- package/references/openhive/src/db/adapters/types.ts +0 -65
- package/references/openhive/src/db/dal/agents.ts +0 -430
- package/references/openhive/src/db/dal/bridge.ts +0 -336
- package/references/openhive/src/db/dal/comments.ts +0 -213
- package/references/openhive/src/db/dal/coordination.ts +0 -361
- package/references/openhive/src/db/dal/events.ts +0 -381
- package/references/openhive/src/db/dal/follows.ts +0 -96
- package/references/openhive/src/db/dal/hives.ts +0 -198
- package/references/openhive/src/db/dal/ingest-keys.ts +0 -176
- package/references/openhive/src/db/dal/instances.ts +0 -196
- package/references/openhive/src/db/dal/invites.ts +0 -123
- package/references/openhive/src/db/dal/map.ts +0 -750
- package/references/openhive/src/db/dal/posts.ts +0 -274
- package/references/openhive/src/db/dal/remote-agents.ts +0 -56
- package/references/openhive/src/db/dal/search.ts +0 -238
- package/references/openhive/src/db/dal/sync-events.ts +0 -160
- package/references/openhive/src/db/dal/sync-groups.ts +0 -100
- package/references/openhive/src/db/dal/sync-peer-configs.ts +0 -216
- package/references/openhive/src/db/dal/sync-peers.ts +0 -145
- package/references/openhive/src/db/dal/syncable-resources.ts +0 -888
- package/references/openhive/src/db/dal/trajectory-checkpoints.ts +0 -291
- package/references/openhive/src/db/dal/uploads.ts +0 -124
- package/references/openhive/src/db/dal/votes.ts +0 -124
- package/references/openhive/src/db/index.ts +0 -293
- package/references/openhive/src/db/providers/index.ts +0 -75
- package/references/openhive/src/db/providers/postgres.ts +0 -529
- package/references/openhive/src/db/providers/sqlite.ts +0 -1383
- package/references/openhive/src/db/providers/turso.ts +0 -1360
- package/references/openhive/src/db/providers/types.ts +0 -516
- package/references/openhive/src/db/schema.ts +0 -641
- package/references/openhive/src/discovery/index.ts +0 -403
- package/references/openhive/src/events/dispatch.ts +0 -106
- package/references/openhive/src/events/index.ts +0 -17
- package/references/openhive/src/events/normalizers/github.ts +0 -133
- package/references/openhive/src/events/normalizers/index.ts +0 -62
- package/references/openhive/src/events/normalizers/slack.ts +0 -50
- package/references/openhive/src/events/router.ts +0 -156
- package/references/openhive/src/events/schema.ts +0 -66
- package/references/openhive/src/events/types.ts +0 -130
- package/references/openhive/src/federation/index.ts +0 -1
- package/references/openhive/src/federation/service.ts +0 -776
- package/references/openhive/src/headscale/client.ts +0 -256
- package/references/openhive/src/headscale/config.ts +0 -212
- package/references/openhive/src/headscale/index.ts +0 -23
- package/references/openhive/src/headscale/manager.ts +0 -249
- package/references/openhive/src/headscale/sync.ts +0 -272
- package/references/openhive/src/headscale/types.ts +0 -231
- package/references/openhive/src/index.ts +0 -225
- package/references/openhive/src/map/client-entry.ts +0 -26
- package/references/openhive/src/map/index.ts +0 -76
- package/references/openhive/src/map/schema.ts +0 -119
- package/references/openhive/src/map/service.ts +0 -323
- package/references/openhive/src/map/sync-client.ts +0 -696
- package/references/openhive/src/map/sync-listener.ts +0 -409
- package/references/openhive/src/map/types.ts +0 -290
- package/references/openhive/src/network/factory.ts +0 -118
- package/references/openhive/src/network/headscale-provider.ts +0 -437
- package/references/openhive/src/network/index.ts +0 -43
- package/references/openhive/src/network/tailscale-client.ts +0 -289
- package/references/openhive/src/network/tailscale-provider.ts +0 -287
- package/references/openhive/src/network/types.ts +0 -178
- package/references/openhive/src/opentasks-client/client.ts +0 -374
- package/references/openhive/src/opentasks-client/index.ts +0 -7
- package/references/openhive/src/realtime/index.ts +0 -282
- package/references/openhive/src/server.ts +0 -1069
- package/references/openhive/src/services/email.ts +0 -177
- package/references/openhive/src/services/sitemap.ts +0 -135
- package/references/openhive/src/sessions/adapters/claude.ts +0 -466
- package/references/openhive/src/sessions/adapters/codex.ts +0 -265
- package/references/openhive/src/sessions/adapters/index.ts +0 -263
- package/references/openhive/src/sessions/adapters/raw.ts +0 -144
- package/references/openhive/src/sessions/adapters/types.ts +0 -83
- package/references/openhive/src/sessions/index.ts +0 -50
- package/references/openhive/src/sessions/storage/adapters/gcs.ts +0 -277
- package/references/openhive/src/sessions/storage/adapters/local.ts +0 -240
- package/references/openhive/src/sessions/storage/adapters/s3.ts +0 -321
- package/references/openhive/src/sessions/storage/index.ts +0 -231
- package/references/openhive/src/sessions/storage/types.ts +0 -189
- package/references/openhive/src/sessions/types.ts +0 -415
- package/references/openhive/src/shared/types/index.ts +0 -45
- package/references/openhive/src/shared/types/map-coordination.ts +0 -92
- package/references/openhive/src/shared/types/map-session-sync.ts +0 -170
- package/references/openhive/src/shared/types/map-sync.ts +0 -68
- package/references/openhive/src/skill.ts +0 -203
- package/references/openhive/src/storage/adapters/local.ts +0 -169
- package/references/openhive/src/storage/adapters/s3.ts +0 -195
- package/references/openhive/src/storage/index.ts +0 -64
- package/references/openhive/src/storage/types.ts +0 -69
- package/references/openhive/src/swarm/credentials.ts +0 -98
- package/references/openhive/src/swarm/dal.ts +0 -206
- package/references/openhive/src/swarm/index.ts +0 -28
- package/references/openhive/src/swarm/manager.ts +0 -917
- package/references/openhive/src/swarm/providers/local.ts +0 -338
- package/references/openhive/src/swarm/providers/sandboxed-local.ts +0 -478
- package/references/openhive/src/swarm/providers/workspace.ts +0 -52
- package/references/openhive/src/swarm/schema.ts +0 -43
- package/references/openhive/src/swarm/types.ts +0 -333
- package/references/openhive/src/swarmhub/client.ts +0 -279
- package/references/openhive/src/swarmhub/connector.ts +0 -463
- package/references/openhive/src/swarmhub/index.ts +0 -43
- package/references/openhive/src/swarmhub/routes.ts +0 -296
- package/references/openhive/src/swarmhub/types.ts +0 -213
- package/references/openhive/src/swarmhub/webhook-handler.ts +0 -126
- package/references/openhive/src/sync/compaction.ts +0 -193
- package/references/openhive/src/sync/coordination-hooks.ts +0 -154
- package/references/openhive/src/sync/crypto.ts +0 -79
- package/references/openhive/src/sync/gossip.ts +0 -136
- package/references/openhive/src/sync/hooks.ts +0 -202
- package/references/openhive/src/sync/materializer-repo.ts +0 -256
- package/references/openhive/src/sync/materializer.ts +0 -682
- package/references/openhive/src/sync/middleware.ts +0 -140
- package/references/openhive/src/sync/peer-resolver.ts +0 -157
- package/references/openhive/src/sync/resource-hooks.ts +0 -161
- package/references/openhive/src/sync/schema.ts +0 -158
- package/references/openhive/src/sync/service.ts +0 -990
- package/references/openhive/src/sync/types.ts +0 -369
- package/references/openhive/src/terminal/index.ts +0 -4
- package/references/openhive/src/terminal/pty-manager.ts +0 -337
- package/references/openhive/src/terminal/resolve-tui.ts +0 -44
- package/references/openhive/src/terminal/terminal-ws.ts +0 -251
- package/references/openhive/src/types.ts +0 -442
- package/references/openhive/src/utils/git-remote.ts +0 -329
- package/references/openhive/src/web/App.tsx +0 -77
- package/references/openhive/src/web/__tests__/components/dashboard/RecentActivity.test.tsx +0 -77
- package/references/openhive/src/web/__tests__/components/dashboard/StatsOverview.test.tsx +0 -62
- package/references/openhive/src/web/__tests__/components/dashboard/SwarmStatusSummary.test.tsx +0 -122
- package/references/openhive/src/web/__tests__/components/dashboard/SyncResourcesStatus.test.tsx +0 -104
- package/references/openhive/src/web/__tests__/components/layout/Sidebar.test.tsx +0 -110
- package/references/openhive/src/web/__tests__/components/swarm/StatusBadges.test.tsx +0 -65
- package/references/openhive/src/web/__tests__/components/terminal/query-responses.test.ts +0 -143
- package/references/openhive/src/web/__tests__/components/terminal/terminal-mouse.test.ts +0 -509
- package/references/openhive/src/web/__tests__/hooks/useEventsApi.test.ts +0 -378
- package/references/openhive/src/web/__tests__/pages/Dashboard.test.tsx +0 -57
- package/references/openhive/src/web/__tests__/pages/Events.test.tsx +0 -886
- package/references/openhive/src/web/__tests__/pages/Explore.test.tsx +0 -63
- package/references/openhive/src/web/__tests__/routing.test.tsx +0 -79
- package/references/openhive/src/web/__tests__/setup.ts +0 -37
- package/references/openhive/src/web/__tests__/stores/dashboard.test.ts +0 -49
- package/references/openhive/src/web/components/common/AgentBadge.tsx +0 -58
- package/references/openhive/src/web/components/common/Avatar.tsx +0 -78
- package/references/openhive/src/web/components/common/ErrorBoundary.tsx +0 -76
- package/references/openhive/src/web/components/common/Highlight.tsx +0 -79
- package/references/openhive/src/web/components/common/ImageUpload.tsx +0 -209
- package/references/openhive/src/web/components/common/LoadingSpinner.tsx +0 -37
- package/references/openhive/src/web/components/common/Logo.tsx +0 -21
- package/references/openhive/src/web/components/common/Markdown.tsx +0 -53
- package/references/openhive/src/web/components/common/ProtectedRoute.tsx +0 -18
- package/references/openhive/src/web/components/common/ThemeToggle.tsx +0 -38
- package/references/openhive/src/web/components/common/TimeAgo.tsx +0 -17
- package/references/openhive/src/web/components/common/Toast.tsx +0 -70
- package/references/openhive/src/web/components/common/VoteButtons.tsx +0 -100
- package/references/openhive/src/web/components/dashboard/RecentActivity.tsx +0 -100
- package/references/openhive/src/web/components/dashboard/StatsOverview.tsx +0 -40
- package/references/openhive/src/web/components/dashboard/SwarmStatusSummary.tsx +0 -89
- package/references/openhive/src/web/components/dashboard/SyncResourcesStatus.tsx +0 -81
- package/references/openhive/src/web/components/feed/FeedControls.tsx +0 -38
- package/references/openhive/src/web/components/feed/NewPostsIndicator.tsx +0 -75
- package/references/openhive/src/web/components/feed/PostCard.tsx +0 -129
- package/references/openhive/src/web/components/feed/PostList.tsx +0 -83
- package/references/openhive/src/web/components/layout/Footer.tsx +0 -5
- package/references/openhive/src/web/components/layout/Layout.tsx +0 -29
- package/references/openhive/src/web/components/layout/Sidebar.tsx +0 -348
- package/references/openhive/src/web/components/post/CommentForm.tsx +0 -59
- package/references/openhive/src/web/components/post/CommentTree.tsx +0 -145
- package/references/openhive/src/web/components/resources/MemoryBrowser.tsx +0 -208
- package/references/openhive/src/web/components/resources/OpenTasksSummary.tsx +0 -138
- package/references/openhive/src/web/components/resources/SkillBrowser.tsx +0 -284
- package/references/openhive/src/web/components/swarm/StatusBadges.tsx +0 -56
- package/references/openhive/src/web/components/terminal/TerminalPanel.tsx +0 -485
- package/references/openhive/src/web/components/terminal/index.ts +0 -2
- package/references/openhive/src/web/components/terminal/query-responses.ts +0 -70
- package/references/openhive/src/web/components/terminal/terminal-mouse.ts +0 -222
- package/references/openhive/src/web/hooks/useApi.ts +0 -740
- package/references/openhive/src/web/hooks/useDocumentTitle.ts +0 -49
- package/references/openhive/src/web/hooks/useInfiniteScroll.ts +0 -58
- package/references/openhive/src/web/hooks/useRealtimeUpdates.ts +0 -154
- package/references/openhive/src/web/hooks/useWebSocket.ts +0 -225
- package/references/openhive/src/web/index.html +0 -73
- package/references/openhive/src/web/lib/api.ts +0 -518
- package/references/openhive/src/web/main.tsx +0 -32
- package/references/openhive/src/web/pages/About.tsx +0 -131
- package/references/openhive/src/web/pages/Agent.tsx +0 -130
- package/references/openhive/src/web/pages/Agents.tsx +0 -69
- package/references/openhive/src/web/pages/AuthCallback.tsx +0 -75
- package/references/openhive/src/web/pages/Dashboard.tsx +0 -41
- package/references/openhive/src/web/pages/Events.tsx +0 -1025
- package/references/openhive/src/web/pages/Explore.tsx +0 -43
- package/references/openhive/src/web/pages/Hive.tsx +0 -134
- package/references/openhive/src/web/pages/Hives.tsx +0 -64
- package/references/openhive/src/web/pages/Home.tsx +0 -43
- package/references/openhive/src/web/pages/Login.tsx +0 -122
- package/references/openhive/src/web/pages/Post.tsx +0 -216
- package/references/openhive/src/web/pages/ResourceDetail.tsx +0 -426
- package/references/openhive/src/web/pages/Resources.tsx +0 -276
- package/references/openhive/src/web/pages/Search.tsx +0 -234
- package/references/openhive/src/web/pages/SessionDetail.tsx +0 -703
- package/references/openhive/src/web/pages/Sessions.tsx +0 -129
- package/references/openhive/src/web/pages/Settings.tsx +0 -826
- package/references/openhive/src/web/pages/SwarmCraft.tsx +0 -16
- package/references/openhive/src/web/pages/Swarms.tsx +0 -981
- package/references/openhive/src/web/pages/Terminal.tsx +0 -69
- package/references/openhive/src/web/postcss.config.js +0 -5
- package/references/openhive/src/web/public/favicon.svg +0 -11
- package/references/openhive/src/web/public/manifest.json +0 -21
- package/references/openhive/src/web/stores/auth.ts +0 -207
- package/references/openhive/src/web/stores/dashboard.ts +0 -23
- package/references/openhive/src/web/stores/realtime.ts +0 -90
- package/references/openhive/src/web/stores/theme.ts +0 -70
- package/references/openhive/src/web/stores/toast.ts +0 -63
- package/references/openhive/src/web/styles/globals.css +0 -503
- package/references/openhive/src/web/sw.ts +0 -228
- package/references/openhive/src/web/utils/serviceWorker.ts +0 -86
- package/references/openhive/src/web/vite.config.ts +0 -81
- package/references/openhive/tsconfig.json +0 -32
- package/references/openhive/tsup.config.ts +0 -17
- package/references/openhive/vitest.config.ts +0 -30
- package/references/openhive/vitest.web.config.ts +0 -20
- package/references/opentasks/.claude/settings.json +0 -6
- package/references/opentasks/.claude-plugin/plugin.json +0 -20
- package/references/opentasks/.lintstagedrc.json +0 -4
- package/references/opentasks/.prettierignore +0 -4
- package/references/opentasks/.prettierrc.json +0 -11
- package/references/opentasks/.sudocode/issues.jsonl +0 -89
- package/references/opentasks/.sudocode/specs.jsonl +0 -24
- package/references/opentasks/README.md +0 -401
- package/references/opentasks/docs/ARCHITECTURE.md +0 -841
- package/references/opentasks/docs/DESIGN.md +0 -689
- package/references/opentasks/docs/INTERFACE.md +0 -670
- package/references/opentasks/docs/PERSISTENCE.md +0 -1638
- package/references/opentasks/docs/PROVIDERS.md +0 -1412
- package/references/opentasks/docs/SCHEMA.md +0 -815
- package/references/opentasks/docs/TESTING.md +0 -1081
- package/references/opentasks/eslint.config.js +0 -58
- package/references/opentasks/package-lock.json +0 -4348
- package/references/opentasks/package.json +0 -81
- package/references/opentasks/skills/opentasks/SKILL.md +0 -139
- package/references/opentasks/skills/opentasks/dependency-management.md +0 -119
- package/references/opentasks/skills/opentasks/feedback-and-review.md +0 -100
- package/references/opentasks/skills/opentasks/linking-external-data.md +0 -103
- package/references/opentasks/skills/opentasks/spec-to-implementation.md +0 -98
- package/references/opentasks/src/__tests__/cli-tools.test.ts +0 -800
- package/references/opentasks/src/__tests__/cli.test.ts +0 -97
- package/references/opentasks/src/__tests__/p1-p3-gaps.test.ts +0 -635
- package/references/opentasks/src/cli.ts +0 -929
- package/references/opentasks/src/client/__tests__/client-crud.test.ts +0 -546
- package/references/opentasks/src/client/__tests__/client.test.ts +0 -658
- package/references/opentasks/src/client/__tests__/socket-discovery.test.ts +0 -122
- package/references/opentasks/src/client/client.ts +0 -560
- package/references/opentasks/src/client/index.ts +0 -32
- package/references/opentasks/src/config/__tests__/defaults.test.ts +0 -66
- package/references/opentasks/src/config/__tests__/env.test.ts +0 -155
- package/references/opentasks/src/config/__tests__/index.test.ts +0 -148
- package/references/opentasks/src/config/__tests__/loader.test.ts +0 -173
- package/references/opentasks/src/config/__tests__/merge.test.ts +0 -121
- package/references/opentasks/src/config/__tests__/schema.test.ts +0 -446
- package/references/opentasks/src/config/defaults.ts +0 -18
- package/references/opentasks/src/config/env.ts +0 -170
- package/references/opentasks/src/config/errors.ts +0 -33
- package/references/opentasks/src/config/index.ts +0 -63
- package/references/opentasks/src/config/loader.ts +0 -90
- package/references/opentasks/src/config/merge.ts +0 -64
- package/references/opentasks/src/config/schema.ts +0 -767
- package/references/opentasks/src/core/__tests__/conditional-redirects.test.ts +0 -116
- package/references/opentasks/src/core/__tests__/connections.test.ts +0 -194
- package/references/opentasks/src/core/__tests__/hash.test.ts +0 -161
- package/references/opentasks/src/core/__tests__/id.test.ts +0 -175
- package/references/opentasks/src/core/__tests__/init.test.ts +0 -115
- package/references/opentasks/src/core/__tests__/location.test.ts +0 -94
- package/references/opentasks/src/core/__tests__/merge-driver.test.ts +0 -300
- package/references/opentasks/src/core/__tests__/redirects.test.ts +0 -169
- package/references/opentasks/src/core/__tests__/resolve-location-target.test.ts +0 -468
- package/references/opentasks/src/core/__tests__/uri.test.ts +0 -228
- package/references/opentasks/src/core/__tests__/worktree.test.ts +0 -160
- package/references/opentasks/src/core/conditional-redirects.ts +0 -100
- package/references/opentasks/src/core/connections.ts +0 -217
- package/references/opentasks/src/core/discover.ts +0 -195
- package/references/opentasks/src/core/hash.ts +0 -74
- package/references/opentasks/src/core/id.ts +0 -174
- package/references/opentasks/src/core/index.ts +0 -108
- package/references/opentasks/src/core/init.ts +0 -66
- package/references/opentasks/src/core/location.ts +0 -139
- package/references/opentasks/src/core/merge-driver.ts +0 -280
- package/references/opentasks/src/core/redirects.ts +0 -182
- package/references/opentasks/src/core/uri.ts +0 -270
- package/references/opentasks/src/core/worktree.ts +0 -504
- package/references/opentasks/src/daemon/__tests__/e2e-live-agent.test.ts +0 -344
- package/references/opentasks/src/daemon/__tests__/e2e-session-pipeline.test.ts +0 -447
- package/references/opentasks/src/daemon/__tests__/e2e-watch.test.ts +0 -279
- package/references/opentasks/src/daemon/__tests__/entire-linker.test.ts +0 -1074
- package/references/opentasks/src/daemon/__tests__/entire-watcher.test.ts +0 -659
- package/references/opentasks/src/daemon/__tests__/flush.test.ts +0 -306
- package/references/opentasks/src/daemon/__tests__/integration.test.ts +0 -338
- package/references/opentasks/src/daemon/__tests__/ipc.test.ts +0 -406
- package/references/opentasks/src/daemon/__tests__/lifecycle.test.ts +0 -378
- package/references/opentasks/src/daemon/__tests__/lock.test.ts +0 -240
- package/references/opentasks/src/daemon/__tests__/methods/graph.test.ts +0 -372
- package/references/opentasks/src/daemon/__tests__/methods/provider.test.ts +0 -238
- package/references/opentasks/src/daemon/__tests__/methods/tools.test.ts +0 -690
- package/references/opentasks/src/daemon/__tests__/multi-location.test.ts +0 -945
- package/references/opentasks/src/daemon/__tests__/registry.test.ts +0 -268
- package/references/opentasks/src/daemon/__tests__/watcher.test.ts +0 -329
- package/references/opentasks/src/daemon/entire-linker.ts +0 -615
- package/references/opentasks/src/daemon/entire-watcher.ts +0 -415
- package/references/opentasks/src/daemon/factory.ts +0 -133
- package/references/opentasks/src/daemon/flush.ts +0 -168
- package/references/opentasks/src/daemon/index.ts +0 -120
- package/references/opentasks/src/daemon/ipc.ts +0 -491
- package/references/opentasks/src/daemon/lifecycle.ts +0 -1106
- package/references/opentasks/src/daemon/location-state.ts +0 -481
- package/references/opentasks/src/daemon/lock.ts +0 -168
- package/references/opentasks/src/daemon/methods/__tests__/graph.test.ts +0 -359
- package/references/opentasks/src/daemon/methods/__tests__/provider.test.ts +0 -227
- package/references/opentasks/src/daemon/methods/__tests__/tools.test.ts +0 -360
- package/references/opentasks/src/daemon/methods/__tests__/watch.test.ts +0 -656
- package/references/opentasks/src/daemon/methods/archive.ts +0 -193
- package/references/opentasks/src/daemon/methods/graph.ts +0 -274
- package/references/opentasks/src/daemon/methods/lifecycle.ts +0 -112
- package/references/opentasks/src/daemon/methods/location.ts +0 -118
- package/references/opentasks/src/daemon/methods/provider.ts +0 -159
- package/references/opentasks/src/daemon/methods/tools.ts +0 -221
- package/references/opentasks/src/daemon/methods/watch.ts +0 -206
- package/references/opentasks/src/daemon/registry.ts +0 -244
- package/references/opentasks/src/daemon/types.ts +0 -163
- package/references/opentasks/src/daemon/watcher.ts +0 -248
- package/references/opentasks/src/entire/__tests__/agent-registry.test.ts +0 -127
- package/references/opentasks/src/entire/__tests__/claude-generator.test.ts +0 -49
- package/references/opentasks/src/entire/__tests__/commit-msg.test.ts +0 -89
- package/references/opentasks/src/entire/__tests__/cursor-agent.test.ts +0 -224
- package/references/opentasks/src/entire/__tests__/flush-sentinel.test.ts +0 -93
- package/references/opentasks/src/entire/__tests__/gemini-agent.test.ts +0 -375
- package/references/opentasks/src/entire/__tests__/git-hooks.test.ts +0 -85
- package/references/opentasks/src/entire/__tests__/hook-managers.test.ts +0 -128
- package/references/opentasks/src/entire/__tests__/opencode-agent.test.ts +0 -329
- package/references/opentasks/src/entire/__tests__/redaction.test.ts +0 -143
- package/references/opentasks/src/entire/__tests__/session-store.test.ts +0 -83
- package/references/opentasks/src/entire/__tests__/summarize.test.ts +0 -346
- package/references/opentasks/src/entire/__tests__/transcript-timestamp.test.ts +0 -127
- package/references/opentasks/src/entire/__tests__/types.test.ts +0 -112
- package/references/opentasks/src/entire/__tests__/utils.test.ts +0 -296
- package/references/opentasks/src/entire/__tests__/validation.test.ts +0 -103
- package/references/opentasks/src/entire/__tests__/worktree.test.ts +0 -66
- package/references/opentasks/src/entire/agent/registry.ts +0 -143
- package/references/opentasks/src/entire/agent/session-types.ts +0 -117
- package/references/opentasks/src/entire/agent/types.ts +0 -217
- package/references/opentasks/src/entire/commands/clean.ts +0 -134
- package/references/opentasks/src/entire/commands/disable.ts +0 -85
- package/references/opentasks/src/entire/commands/doctor.ts +0 -152
- package/references/opentasks/src/entire/commands/enable.ts +0 -149
- package/references/opentasks/src/entire/commands/explain.ts +0 -271
- package/references/opentasks/src/entire/commands/reset.ts +0 -105
- package/references/opentasks/src/entire/commands/resume.ts +0 -194
- package/references/opentasks/src/entire/commands/rewind.ts +0 -204
- package/references/opentasks/src/entire/commands/status.ts +0 -150
- package/references/opentasks/src/entire/config.ts +0 -153
- package/references/opentasks/src/entire/git-operations.ts +0 -485
- package/references/opentasks/src/entire/hooks/git-hooks.ts +0 -171
- package/references/opentasks/src/entire/hooks/lifecycle.ts +0 -224
- package/references/opentasks/src/entire/index.ts +0 -644
- package/references/opentasks/src/entire/security/redaction.ts +0 -263
- package/references/opentasks/src/entire/session/state-machine.ts +0 -463
- package/references/opentasks/src/entire/store/checkpoint-store.ts +0 -489
- package/references/opentasks/src/entire/store/native-store.ts +0 -178
- package/references/opentasks/src/entire/store/provider-types.ts +0 -99
- package/references/opentasks/src/entire/store/session-store.ts +0 -233
- package/references/opentasks/src/entire/strategy/attribution.ts +0 -300
- package/references/opentasks/src/entire/strategy/common.ts +0 -222
- package/references/opentasks/src/entire/strategy/content-overlap.ts +0 -242
- package/references/opentasks/src/entire/strategy/manual-commit.ts +0 -1008
- package/references/opentasks/src/entire/strategy/types.ts +0 -285
- package/references/opentasks/src/entire/summarize/claude-generator.ts +0 -119
- package/references/opentasks/src/entire/summarize/summarize.ts +0 -432
- package/references/opentasks/src/entire/types.ts +0 -408
- package/references/opentasks/src/entire/utils/chunk-files.ts +0 -49
- package/references/opentasks/src/entire/utils/commit-message.ts +0 -65
- package/references/opentasks/src/entire/utils/detect-agent.ts +0 -36
- package/references/opentasks/src/entire/utils/hook-managers.ts +0 -118
- package/references/opentasks/src/entire/utils/ide-tags.ts +0 -32
- package/references/opentasks/src/entire/utils/paths.ts +0 -59
- package/references/opentasks/src/entire/utils/preview-rewind.ts +0 -86
- package/references/opentasks/src/entire/utils/rewind-conflict.ts +0 -121
- package/references/opentasks/src/entire/utils/shadow-branch.ts +0 -113
- package/references/opentasks/src/entire/utils/string-utils.ts +0 -46
- package/references/opentasks/src/entire/utils/todo-extract.ts +0 -193
- package/references/opentasks/src/entire/utils/trailers.ts +0 -190
- package/references/opentasks/src/entire/utils/transcript-parse.ts +0 -177
- package/references/opentasks/src/entire/utils/transcript-timestamp.ts +0 -61
- package/references/opentasks/src/entire/utils/tree-ops.ts +0 -227
- package/references/opentasks/src/entire/utils/tty.ts +0 -72
- package/references/opentasks/src/entire/utils/validation.ts +0 -67
- package/references/opentasks/src/entire/utils/worktree.ts +0 -58
- package/references/opentasks/src/graph/EdgeTypeRegistry.ts +0 -330
- package/references/opentasks/src/graph/FederatedGraph.ts +0 -796
- package/references/opentasks/src/graph/GraphologyAdapter.ts +0 -374
- package/references/opentasks/src/graph/HydratingFederatedGraph.ts +0 -533
- package/references/opentasks/src/graph/__tests__/EdgeTypeRegistry.test.ts +0 -263
- package/references/opentasks/src/graph/__tests__/FederatedGraph.test.ts +0 -821
- package/references/opentasks/src/graph/__tests__/GraphologyAdapter.test.ts +0 -408
- package/references/opentasks/src/graph/__tests__/HydratingFederatedGraph.test.ts +0 -735
- package/references/opentasks/src/graph/__tests__/debounce.test.ts +0 -276
- package/references/opentasks/src/graph/__tests__/e2e-store-roundtrip.test.ts +0 -349
- package/references/opentasks/src/graph/__tests__/edge-cases.test.ts +0 -595
- package/references/opentasks/src/graph/__tests__/expansion.test.ts +0 -304
- package/references/opentasks/src/graph/__tests__/git-graph-syncer.test.ts +0 -572
- package/references/opentasks/src/graph/__tests__/provider-store.test.ts +0 -1091
- package/references/opentasks/src/graph/__tests__/query.test.ts +0 -991
- package/references/opentasks/src/graph/__tests__/store.test.ts +0 -998
- package/references/opentasks/src/graph/__tests__/sync.test.ts +0 -178
- package/references/opentasks/src/graph/__tests__/validation.test.ts +0 -657
- package/references/opentasks/src/graph/coordination.ts +0 -454
- package/references/opentasks/src/graph/debounce.ts +0 -154
- package/references/opentasks/src/graph/expansion.ts +0 -364
- package/references/opentasks/src/graph/git-graph-syncer.ts +0 -321
- package/references/opentasks/src/graph/history.ts +0 -438
- package/references/opentasks/src/graph/index.ts +0 -145
- package/references/opentasks/src/graph/provider-store.ts +0 -1077
- package/references/opentasks/src/graph/query.ts +0 -651
- package/references/opentasks/src/graph/store.ts +0 -861
- package/references/opentasks/src/graph/sync.ts +0 -116
- package/references/opentasks/src/graph/types.ts +0 -420
- package/references/opentasks/src/graph/validation.ts +0 -520
- package/references/opentasks/src/index.ts +0 -270
- package/references/opentasks/src/materialization/CLAUDE.md +0 -88
- package/references/opentasks/src/materialization/README.md +0 -187
- package/references/opentasks/src/materialization/__tests__/archive-methods.test.ts +0 -194
- package/references/opentasks/src/materialization/__tests__/archiver.test.ts +0 -528
- package/references/opentasks/src/materialization/__tests__/config.test.ts +0 -123
- package/references/opentasks/src/materialization/__tests__/git-remote-store.test.ts +0 -533
- package/references/opentasks/src/materialization/__tests__/graph-id.test.ts +0 -82
- package/references/opentasks/src/materialization/__tests__/http-remote-store.test.ts +0 -263
- package/references/opentasks/src/materialization/__tests__/materialize-before-archive.test.ts +0 -246
- package/references/opentasks/src/materialization/__tests__/remote-store-factory.test.ts +0 -152
- package/references/opentasks/src/materialization/__tests__/snapshot.test.ts +0 -209
- package/references/opentasks/src/materialization/archiver.ts +0 -318
- package/references/opentasks/src/materialization/git-archive-store.ts +0 -568
- package/references/opentasks/src/materialization/git-remote-store.ts +0 -551
- package/references/opentasks/src/materialization/graph-id.ts +0 -173
- package/references/opentasks/src/materialization/http-remote-store.ts +0 -190
- package/references/opentasks/src/materialization/index.ts +0 -62
- package/references/opentasks/src/materialization/remote-store-factory.ts +0 -55
- package/references/opentasks/src/materialization/snapshot.ts +0 -230
- package/references/opentasks/src/materialization/types.ts +0 -410
- package/references/opentasks/src/providers/__tests__/beads.test.ts +0 -752
- package/references/opentasks/src/providers/__tests__/claude-tasks.test.ts +0 -485
- package/references/opentasks/src/providers/__tests__/entire-e2e.test.ts +0 -692
- package/references/opentasks/src/providers/__tests__/entire-sessionlog-e2e.test.ts +0 -1113
- package/references/opentasks/src/providers/__tests__/entire.test.ts +0 -1016
- package/references/opentasks/src/providers/__tests__/from-config.test.ts +0 -183
- package/references/opentasks/src/providers/__tests__/global.test.ts +0 -515
- package/references/opentasks/src/providers/__tests__/materialization.test.ts +0 -567
- package/references/opentasks/src/providers/__tests__/native.test.ts +0 -693
- package/references/opentasks/src/providers/__tests__/registry.test.ts +0 -232
- package/references/opentasks/src/providers/beads.ts +0 -1155
- package/references/opentasks/src/providers/claude-tasks.ts +0 -402
- package/references/opentasks/src/providers/entire.ts +0 -608
- package/references/opentasks/src/providers/from-config.ts +0 -210
- package/references/opentasks/src/providers/global.ts +0 -460
- package/references/opentasks/src/providers/index.ts +0 -147
- package/references/opentasks/src/providers/location.ts +0 -237
- package/references/opentasks/src/providers/materialization.ts +0 -346
- package/references/opentasks/src/providers/native.ts +0 -725
- package/references/opentasks/src/providers/registry.ts +0 -114
- package/references/opentasks/src/providers/sudocode.ts +0 -1292
- package/references/opentasks/src/providers/sync.ts +0 -485
- package/references/opentasks/src/providers/traits/RelationshipQueryable.ts +0 -169
- package/references/opentasks/src/providers/traits/TaskManageable.ts +0 -211
- package/references/opentasks/src/providers/traits/Watchable.ts +0 -260
- package/references/opentasks/src/providers/traits/__tests__/RelationshipQueryable.test.ts +0 -217
- package/references/opentasks/src/providers/traits/__tests__/TaskManageable.test.ts +0 -241
- package/references/opentasks/src/providers/traits/index.ts +0 -42
- package/references/opentasks/src/providers/types.ts +0 -439
- package/references/opentasks/src/schema/__tests__/validation.test.ts +0 -283
- package/references/opentasks/src/schema/base.ts +0 -88
- package/references/opentasks/src/schema/edges.ts +0 -78
- package/references/opentasks/src/schema/index.ts +0 -37
- package/references/opentasks/src/schema/nodes.ts +0 -119
- package/references/opentasks/src/schema/storage.ts +0 -130
- package/references/opentasks/src/schema/validation.ts +0 -209
- package/references/opentasks/src/storage/__tests__/atomic-write.test.ts +0 -227
- package/references/opentasks/src/storage/__tests__/file-lock.test.ts +0 -120
- package/references/opentasks/src/storage/__tests__/jsonl.test.ts +0 -267
- package/references/opentasks/src/storage/__tests__/locked-writer.test.ts +0 -134
- package/references/opentasks/src/storage/__tests__/sqlite.test.ts +0 -572
- package/references/opentasks/src/storage/atomic-write.ts +0 -86
- package/references/opentasks/src/storage/file-lock.ts +0 -215
- package/references/opentasks/src/storage/index.ts +0 -24
- package/references/opentasks/src/storage/interface.ts +0 -289
- package/references/opentasks/src/storage/jsonl.ts +0 -264
- package/references/opentasks/src/storage/locked-writer.ts +0 -140
- package/references/opentasks/src/storage/sqlite-schema.ts +0 -177
- package/references/opentasks/src/storage/sqlite.ts +0 -791
- package/references/opentasks/src/tools/__tests__/annotate.test.ts +0 -381
- package/references/opentasks/src/tools/__tests__/link.test.ts +0 -299
- package/references/opentasks/src/tools/__tests__/query.test.ts +0 -350
- package/references/opentasks/src/tools/__tests__/task.test.ts +0 -218
- package/references/opentasks/src/tools/annotate.ts +0 -277
- package/references/opentasks/src/tools/index.ts +0 -57
- package/references/opentasks/src/tools/link.ts +0 -163
- package/references/opentasks/src/tools/query.ts +0 -468
- package/references/opentasks/src/tools/task.ts +0 -213
- package/references/opentasks/src/tools/types.ts +0 -451
- package/references/opentasks/src/tracking/__tests__/claude-tool-categorizer.test.ts +0 -223
- package/references/opentasks/src/tracking/__tests__/transcript-extractor.test.ts +0 -262
- package/references/opentasks/src/tracking/claude-tool-categorizer.ts +0 -155
- package/references/opentasks/src/tracking/index.ts +0 -32
- package/references/opentasks/src/tracking/skill-tracker.ts +0 -322
- package/references/opentasks/src/tracking/transcript-extractor.ts +0 -225
- package/references/opentasks/tests/e2e/helpers/assertions.ts +0 -211
- package/references/opentasks/tests/e2e/helpers/beads-helpers.ts +0 -487
- package/references/opentasks/tests/e2e/helpers/fixtures.ts +0 -236
- package/references/opentasks/tests/e2e/helpers/index.ts +0 -122
- package/references/opentasks/tests/e2e/helpers/sudocode-helpers.ts +0 -341
- package/references/opentasks/tests/e2e/helpers/system-setup.ts +0 -504
- package/references/opentasks/tests/e2e/helpers/test-agent.ts +0 -504
- package/references/opentasks/tests/e2e/infrastructure.e2e.test.ts +0 -521
- package/references/opentasks/tests/e2e/skill-tracking.e2e.test.ts +0 -625
- package/references/opentasks/tests/e2e/workflows/feedback-loop.e2e.test.ts +0 -279
- package/references/opentasks/tests/e2e/workflows/multi-agent.e2e.test.ts +0 -304
- package/references/opentasks/tests/e2e/workflows/provider-sync/background-sync.e2e.test.ts +0 -292
- package/references/opentasks/tests/e2e/workflows/provider-sync/beads-provider-compat.e2e.test.ts +0 -249
- package/references/opentasks/tests/e2e/workflows/provider-sync/cross-provider-edges.e2e.test.ts +0 -407
- package/references/opentasks/tests/e2e/workflows/provider-sync/federated-ready.e2e.test.ts +0 -504
- package/references/opentasks/tests/e2e/workflows/provider-sync/hydration.e2e.test.ts +0 -340
- package/references/opentasks/tests/e2e/workflows/provider-sync/materialization.e2e.test.ts +0 -370
- package/references/opentasks/tests/e2e/workflows/provider-sync/sudocode-provider-compat.e2e.test.ts +0 -683
- package/references/opentasks/tests/e2e/workflows/provider-sync/watchable-beads.e2e.test.ts +0 -573
- package/references/opentasks/tests/e2e/workflows/spec-driven.e2e.test.ts +0 -244
- package/references/opentasks/tests/e2e/worktree-location.e2e.test.ts +0 -699
- package/references/opentasks/tests/integration/daemon/helpers.ts +0 -147
- package/references/opentasks/tests/integration/daemon/ipc.integration.test.ts +0 -343
- package/references/opentasks/tests/integration/daemon/lifecycle.integration.test.ts +0 -407
- package/references/opentasks/tests/integration/graph/federated-graph.integration.test.ts +0 -660
- package/references/opentasks/tests/integration/helpers/flags.ts +0 -28
- package/references/opentasks/tests/integration/helpers/index.ts +0 -47
- package/references/opentasks/tests/integration/helpers/process.ts +0 -133
- package/references/opentasks/tests/integration/helpers/temp.ts +0 -105
- package/references/opentasks/tests/integration/helpers/wait.ts +0 -133
- package/references/opentasks/tests/integration/helpers.test.ts +0 -120
- package/references/opentasks/tests/integration/providers/beads-task-manageable.integration.test.ts +0 -450
- package/references/opentasks/tests/integration/providers/beads.integration.test.ts +0 -388
- package/references/opentasks/tests/integration/providers/native-task-manageable.integration.test.ts +0 -667
- package/references/opentasks/tests/integration/providers/sudocode-task-manageable.integration.test.ts +0 -406
- package/references/opentasks/tests/integration/providers/sudocode.integration.test.ts +0 -342
- package/references/opentasks/tests/integration/storage/jsonl-durability.integration.test.ts +0 -390
- package/references/opentasks/tests/integration/storage/sqlite-durability.integration.test.ts +0 -527
- package/references/opentasks/tests/integration/worktree/redirect-location-resolution.integration.test.ts +0 -578
- package/references/opentasks/tests/integration/worktree/worktree-flow.integration.test.ts +0 -656
- package/references/opentasks/tsconfig.json +0 -18
- package/references/opentasks/vitest.config.ts +0 -27
- package/references/opentasks/vitest.e2e.config.ts +0 -35
- package/references/opentasks/vitest.integration.config.ts +0 -19
- package/references/openteams/.claude/settings.json +0 -6
- package/references/openteams/CLAUDE.md +0 -98
- package/references/openteams/README.md +0 -508
- package/references/openteams/SKILL.md +0 -198
- package/references/openteams/design.md +0 -250
- package/references/openteams/docs/visual-editor-design.md +0 -1225
- package/references/openteams/editor/index.html +0 -15
- package/references/openteams/editor/package.json +0 -39
- package/references/openteams/editor/src/App.tsx +0 -48
- package/references/openteams/editor/src/components/canvas/Canvas.tsx +0 -131
- package/references/openteams/editor/src/components/canvas/QuickAddMenu.tsx +0 -134
- package/references/openteams/editor/src/components/edges/PeerRouteEdge.tsx +0 -82
- package/references/openteams/editor/src/components/edges/SignalFlowEdge.tsx +0 -77
- package/references/openteams/editor/src/components/edges/SpawnEdge.tsx +0 -54
- package/references/openteams/editor/src/components/inspector/ChannelInspector.tsx +0 -158
- package/references/openteams/editor/src/components/inspector/EdgeInspector.tsx +0 -168
- package/references/openteams/editor/src/components/inspector/Inspector.tsx +0 -46
- package/references/openteams/editor/src/components/inspector/RoleInspector.tsx +0 -508
- package/references/openteams/editor/src/components/inspector/TeamInspector.tsx +0 -126
- package/references/openteams/editor/src/components/nodes/ChannelNode.tsx +0 -103
- package/references/openteams/editor/src/components/nodes/RoleNode.tsx +0 -157
- package/references/openteams/editor/src/components/nodes/node-styles.ts +0 -101
- package/references/openteams/editor/src/components/sidebar/Sidebar.tsx +0 -227
- package/references/openteams/editor/src/components/toolbar/ExportModal.tsx +0 -110
- package/references/openteams/editor/src/components/toolbar/ImportModal.tsx +0 -139
- package/references/openteams/editor/src/components/toolbar/Toolbar.tsx +0 -190
- package/references/openteams/editor/src/hooks/use-autosave.ts +0 -126
- package/references/openteams/editor/src/hooks/use-keyboard.ts +0 -106
- package/references/openteams/editor/src/hooks/use-validation.ts +0 -45
- package/references/openteams/editor/src/index.css +0 -245
- package/references/openteams/editor/src/lib/auto-layout.ts +0 -51
- package/references/openteams/editor/src/lib/bundled-templates.ts +0 -42
- package/references/openteams/editor/src/lib/compiler.ts +0 -75
- package/references/openteams/editor/src/lib/load-template.ts +0 -103
- package/references/openteams/editor/src/lib/rebuild-edges.ts +0 -104
- package/references/openteams/editor/src/lib/serializer.ts +0 -408
- package/references/openteams/editor/src/lib/signal-catalog.ts +0 -50
- package/references/openteams/editor/src/lib/validator.ts +0 -172
- package/references/openteams/editor/src/main.tsx +0 -10
- package/references/openteams/editor/src/stores/canvas-store.ts +0 -80
- package/references/openteams/editor/src/stores/config-store.ts +0 -243
- package/references/openteams/editor/src/stores/history-store.ts +0 -143
- package/references/openteams/editor/src/stores/theme-store.ts +0 -66
- package/references/openteams/editor/src/stores/ui-store.ts +0 -46
- package/references/openteams/editor/src/stores/validation-store.ts +0 -27
- package/references/openteams/editor/src/types/editor.ts +0 -74
- package/references/openteams/editor/src/vite-env.d.ts +0 -1
- package/references/openteams/editor/tests/compiler.test.ts +0 -151
- package/references/openteams/editor/tests/e2e-add-remove.test.ts +0 -386
- package/references/openteams/editor/tests/e2e-components.test.tsx +0 -424
- package/references/openteams/editor/tests/e2e-export-roundtrip.test.ts +0 -299
- package/references/openteams/editor/tests/e2e-template-load.test.ts +0 -204
- package/references/openteams/editor/tests/e2e-ui-store.test.ts +0 -126
- package/references/openteams/editor/tests/e2e-undo-redo.test.ts +0 -203
- package/references/openteams/editor/tests/e2e-validation.test.ts +0 -307
- package/references/openteams/editor/tests/serializer.test.ts +0 -142
- package/references/openteams/editor/tests/setup.ts +0 -52
- package/references/openteams/editor/tests/validator.test.ts +0 -92
- package/references/openteams/editor/tsconfig.json +0 -21
- package/references/openteams/editor/tsconfig.tsbuildinfo +0 -1
- package/references/openteams/editor/vite.config.ts +0 -28
- package/references/openteams/examples/bmad-method/prompts/analyst/ROLE.md +0 -16
- package/references/openteams/examples/bmad-method/prompts/analyst/SOUL.md +0 -5
- package/references/openteams/examples/bmad-method/prompts/architect/ROLE.md +0 -24
- package/references/openteams/examples/bmad-method/prompts/architect/SOUL.md +0 -5
- package/references/openteams/examples/bmad-method/prompts/developer/ROLE.md +0 -25
- package/references/openteams/examples/bmad-method/prompts/developer/SOUL.md +0 -5
- package/references/openteams/examples/bmad-method/prompts/master/ROLE.md +0 -21
- package/references/openteams/examples/bmad-method/prompts/master/SOUL.md +0 -5
- package/references/openteams/examples/bmad-method/prompts/pm/ROLE.md +0 -20
- package/references/openteams/examples/bmad-method/prompts/pm/SOUL.md +0 -5
- package/references/openteams/examples/bmad-method/prompts/qa/ROLE.md +0 -17
- package/references/openteams/examples/bmad-method/prompts/qa/SOUL.md +0 -5
- package/references/openteams/examples/bmad-method/prompts/quick-flow-dev/ROLE.md +0 -23
- package/references/openteams/examples/bmad-method/prompts/quick-flow-dev/SOUL.md +0 -5
- package/references/openteams/examples/bmad-method/prompts/scrum-master/ROLE.md +0 -27
- package/references/openteams/examples/bmad-method/prompts/scrum-master/SOUL.md +0 -5
- package/references/openteams/examples/bmad-method/prompts/tech-writer/ROLE.md +0 -21
- package/references/openteams/examples/bmad-method/prompts/tech-writer/SOUL.md +0 -5
- package/references/openteams/examples/bmad-method/prompts/ux-designer/ROLE.md +0 -16
- package/references/openteams/examples/bmad-method/prompts/ux-designer/SOUL.md +0 -5
- package/references/openteams/examples/bmad-method/roles/analyst.yaml +0 -9
- package/references/openteams/examples/bmad-method/roles/architect.yaml +0 -9
- package/references/openteams/examples/bmad-method/roles/developer.yaml +0 -8
- package/references/openteams/examples/bmad-method/roles/master.yaml +0 -8
- package/references/openteams/examples/bmad-method/roles/pm.yaml +0 -9
- package/references/openteams/examples/bmad-method/roles/qa.yaml +0 -8
- package/references/openteams/examples/bmad-method/roles/quick-flow-dev.yaml +0 -8
- package/references/openteams/examples/bmad-method/roles/scrum-master.yaml +0 -9
- package/references/openteams/examples/bmad-method/roles/tech-writer.yaml +0 -8
- package/references/openteams/examples/bmad-method/roles/ux-designer.yaml +0 -8
- package/references/openteams/examples/bmad-method/team.yaml +0 -161
- package/references/openteams/examples/bug-fix-pipeline/roles/fixer.yaml +0 -9
- package/references/openteams/examples/bug-fix-pipeline/roles/investigator.yaml +0 -8
- package/references/openteams/examples/bug-fix-pipeline/roles/pr-creator.yaml +0 -6
- package/references/openteams/examples/bug-fix-pipeline/roles/triager.yaml +0 -7
- package/references/openteams/examples/bug-fix-pipeline/roles/verifier.yaml +0 -8
- package/references/openteams/examples/bug-fix-pipeline/team.yaml +0 -88
- package/references/openteams/examples/codebase-migration/roles/assessor.yaml +0 -7
- package/references/openteams/examples/codebase-migration/roles/migrator.yaml +0 -9
- package/references/openteams/examples/codebase-migration/roles/planner.yaml +0 -5
- package/references/openteams/examples/codebase-migration/roles/test-extractor.yaml +0 -9
- package/references/openteams/examples/codebase-migration/roles/validator.yaml +0 -7
- package/references/openteams/examples/codebase-migration/team.yaml +0 -81
- package/references/openteams/examples/docs-sync/roles/adr-writer.yaml +0 -7
- package/references/openteams/examples/docs-sync/roles/api-doc-writer.yaml +0 -7
- package/references/openteams/examples/docs-sync/roles/change-detector.yaml +0 -7
- package/references/openteams/examples/docs-sync/roles/doc-reviewer.yaml +0 -7
- package/references/openteams/examples/docs-sync/roles/guide-writer.yaml +0 -7
- package/references/openteams/examples/docs-sync/team.yaml +0 -84
- package/references/openteams/examples/gsd/prompts/codebase-mapper/ROLE.md +0 -17
- package/references/openteams/examples/gsd/prompts/codebase-mapper/SOUL.md +0 -5
- package/references/openteams/examples/gsd/prompts/debugger/ROLE.md +0 -25
- package/references/openteams/examples/gsd/prompts/debugger/SOUL.md +0 -5
- package/references/openteams/examples/gsd/prompts/executor/ROLE.md +0 -34
- package/references/openteams/examples/gsd/prompts/executor/SOUL.md +0 -5
- package/references/openteams/examples/gsd/prompts/integration-checker/ROLE.md +0 -18
- package/references/openteams/examples/gsd/prompts/integration-checker/SOUL.md +0 -3
- package/references/openteams/examples/gsd/prompts/orchestrator/ROLE.md +0 -42
- package/references/openteams/examples/gsd/prompts/orchestrator/SOUL.md +0 -5
- package/references/openteams/examples/gsd/prompts/phase-researcher/ROLE.md +0 -15
- package/references/openteams/examples/gsd/prompts/phase-researcher/SOUL.md +0 -3
- package/references/openteams/examples/gsd/prompts/plan-checker/ROLE.md +0 -17
- package/references/openteams/examples/gsd/prompts/plan-checker/SOUL.md +0 -3
- package/references/openteams/examples/gsd/prompts/planner/ROLE.md +0 -28
- package/references/openteams/examples/gsd/prompts/planner/SOUL.md +0 -5
- package/references/openteams/examples/gsd/prompts/project-researcher/ROLE.md +0 -16
- package/references/openteams/examples/gsd/prompts/project-researcher/SOUL.md +0 -3
- package/references/openteams/examples/gsd/prompts/research-synthesizer/ROLE.md +0 -13
- package/references/openteams/examples/gsd/prompts/research-synthesizer/SOUL.md +0 -3
- package/references/openteams/examples/gsd/prompts/roadmapper/ROLE.md +0 -14
- package/references/openteams/examples/gsd/prompts/roadmapper/SOUL.md +0 -3
- package/references/openteams/examples/gsd/prompts/verifier/ROLE.md +0 -19
- package/references/openteams/examples/gsd/prompts/verifier/SOUL.md +0 -5
- package/references/openteams/examples/gsd/roles/codebase-mapper.yaml +0 -8
- package/references/openteams/examples/gsd/roles/debugger.yaml +0 -8
- package/references/openteams/examples/gsd/roles/executor.yaml +0 -8
- package/references/openteams/examples/gsd/roles/integration-checker.yaml +0 -8
- package/references/openteams/examples/gsd/roles/orchestrator.yaml +0 -9
- package/references/openteams/examples/gsd/roles/phase-researcher.yaml +0 -7
- package/references/openteams/examples/gsd/roles/plan-checker.yaml +0 -8
- package/references/openteams/examples/gsd/roles/planner.yaml +0 -8
- package/references/openteams/examples/gsd/roles/project-researcher.yaml +0 -8
- package/references/openteams/examples/gsd/roles/research-synthesizer.yaml +0 -7
- package/references/openteams/examples/gsd/roles/roadmapper.yaml +0 -7
- package/references/openteams/examples/gsd/roles/verifier.yaml +0 -8
- package/references/openteams/examples/gsd/team.yaml +0 -154
- package/references/openteams/examples/incident-response/roles/communicator.yaml +0 -5
- package/references/openteams/examples/incident-response/roles/fix-proposer.yaml +0 -7
- package/references/openteams/examples/incident-response/roles/incident-triager.yaml +0 -8
- package/references/openteams/examples/incident-response/roles/investigator.yaml +0 -8
- package/references/openteams/examples/incident-response/team.yaml +0 -68
- package/references/openteams/examples/pr-review-checks/roles/code-reviewer.yaml +0 -7
- package/references/openteams/examples/pr-review-checks/roles/security-scanner.yaml +0 -6
- package/references/openteams/examples/pr-review-checks/roles/summarizer.yaml +0 -6
- package/references/openteams/examples/pr-review-checks/roles/test-checker.yaml +0 -8
- package/references/openteams/examples/pr-review-checks/team.yaml +0 -64
- package/references/openteams/examples/security-audit/roles/code-analyzer.yaml +0 -6
- package/references/openteams/examples/security-audit/roles/dep-scanner.yaml +0 -7
- package/references/openteams/examples/security-audit/roles/fixer.yaml +0 -9
- package/references/openteams/examples/security-audit/roles/pr-creator.yaml +0 -6
- package/references/openteams/examples/security-audit/roles/prioritizer.yaml +0 -6
- package/references/openteams/examples/security-audit/roles/secrets-scanner.yaml +0 -6
- package/references/openteams/examples/security-audit/roles/verifier.yaml +0 -8
- package/references/openteams/examples/security-audit/team.yaml +0 -102
- package/references/openteams/media/banner.png +0 -0
- package/references/openteams/media/editor.png +0 -0
- package/references/openteams/package-lock.json +0 -4804
- package/references/openteams/package.json +0 -58
- package/references/openteams/schema/role.schema.json +0 -147
- package/references/openteams/schema/team.schema.json +0 -311
- package/references/openteams/src/cli/editor.ts +0 -170
- package/references/openteams/src/cli/generate.test.ts +0 -191
- package/references/openteams/src/cli/generate.ts +0 -220
- package/references/openteams/src/cli/prompt-utils.ts +0 -42
- package/references/openteams/src/cli/template.test.ts +0 -365
- package/references/openteams/src/cli/template.ts +0 -205
- package/references/openteams/src/cli.ts +0 -22
- package/references/openteams/src/generators/agent-prompt-generator.test.ts +0 -332
- package/references/openteams/src/generators/agent-prompt-generator.ts +0 -527
- package/references/openteams/src/generators/package-generator.test.ts +0 -129
- package/references/openteams/src/generators/package-generator.ts +0 -102
- package/references/openteams/src/generators/skill-generator.test.ts +0 -246
- package/references/openteams/src/generators/skill-generator.ts +0 -388
- package/references/openteams/src/index.ts +0 -84
- package/references/openteams/src/template/builtins.test.ts +0 -74
- package/references/openteams/src/template/builtins.ts +0 -108
- package/references/openteams/src/template/install-service.test.ts +0 -452
- package/references/openteams/src/template/install-service.ts +0 -332
- package/references/openteams/src/template/loader.test.ts +0 -1696
- package/references/openteams/src/template/loader.ts +0 -804
- package/references/openteams/src/template/resolver.test.ts +0 -304
- package/references/openteams/src/template/resolver.ts +0 -251
- package/references/openteams/src/template/types.ts +0 -229
- package/references/openteams/tsconfig.cjs.json +0 -7
- package/references/openteams/tsconfig.esm.json +0 -8
- package/references/openteams/tsconfig.json +0 -16
- package/references/openteams/vitest.config.ts +0 -9
- package/references/sessionlog/.husky/pre-commit +0 -1
- package/references/sessionlog/.lintstagedrc.json +0 -4
- package/references/sessionlog/.prettierignore +0 -4
- package/references/sessionlog/.prettierrc.json +0 -11
- package/references/sessionlog/LICENSE +0 -21
- package/references/sessionlog/README.md +0 -453
- package/references/sessionlog/eslint.config.js +0 -58
- package/references/sessionlog/package-lock.json +0 -3672
- package/references/sessionlog/package.json +0 -65
- package/references/sessionlog/src/__tests__/agent-hooks.test.ts +0 -570
- package/references/sessionlog/src/__tests__/agent-registry.test.ts +0 -127
- package/references/sessionlog/src/__tests__/claude-code-hooks.test.ts +0 -225
- package/references/sessionlog/src/__tests__/claude-generator.test.ts +0 -46
- package/references/sessionlog/src/__tests__/commit-msg.test.ts +0 -86
- package/references/sessionlog/src/__tests__/cursor-agent.test.ts +0 -224
- package/references/sessionlog/src/__tests__/e2e-live.test.ts +0 -890
- package/references/sessionlog/src/__tests__/event-log.test.ts +0 -183
- package/references/sessionlog/src/__tests__/flush-sentinel.test.ts +0 -105
- package/references/sessionlog/src/__tests__/gemini-agent.test.ts +0 -375
- package/references/sessionlog/src/__tests__/git-hooks.test.ts +0 -78
- package/references/sessionlog/src/__tests__/hook-managers.test.ts +0 -121
- package/references/sessionlog/src/__tests__/lifecycle-tasks.test.ts +0 -759
- package/references/sessionlog/src/__tests__/opencode-agent.test.ts +0 -338
- package/references/sessionlog/src/__tests__/redaction.test.ts +0 -136
- package/references/sessionlog/src/__tests__/session-repo.test.ts +0 -353
- package/references/sessionlog/src/__tests__/session-store.test.ts +0 -166
- package/references/sessionlog/src/__tests__/setup-ccweb.test.ts +0 -466
- package/references/sessionlog/src/__tests__/skill-live.test.ts +0 -461
- package/references/sessionlog/src/__tests__/summarize.test.ts +0 -348
- package/references/sessionlog/src/__tests__/task-plan-e2e.test.ts +0 -610
- package/references/sessionlog/src/__tests__/task-plan-live.test.ts +0 -632
- package/references/sessionlog/src/__tests__/transcript-timestamp.test.ts +0 -121
- package/references/sessionlog/src/__tests__/types.test.ts +0 -166
- package/references/sessionlog/src/__tests__/utils.test.ts +0 -333
- package/references/sessionlog/src/__tests__/validation.test.ts +0 -103
- package/references/sessionlog/src/__tests__/worktree.test.ts +0 -57
- package/references/sessionlog/src/agent/registry.ts +0 -143
- package/references/sessionlog/src/agent/session-types.ts +0 -113
- package/references/sessionlog/src/agent/types.ts +0 -220
- package/references/sessionlog/src/cli.ts +0 -597
- package/references/sessionlog/src/commands/clean.ts +0 -133
- package/references/sessionlog/src/commands/disable.ts +0 -84
- package/references/sessionlog/src/commands/doctor.ts +0 -145
- package/references/sessionlog/src/commands/enable.ts +0 -202
- package/references/sessionlog/src/commands/explain.ts +0 -261
- package/references/sessionlog/src/commands/reset.ts +0 -105
- package/references/sessionlog/src/commands/resume.ts +0 -180
- package/references/sessionlog/src/commands/rewind.ts +0 -195
- package/references/sessionlog/src/commands/setup-ccweb.ts +0 -275
- package/references/sessionlog/src/commands/status.ts +0 -172
- package/references/sessionlog/src/config.ts +0 -165
- package/references/sessionlog/src/events/event-log.ts +0 -126
- package/references/sessionlog/src/git-operations.ts +0 -558
- package/references/sessionlog/src/hooks/git-hooks.ts +0 -165
- package/references/sessionlog/src/hooks/lifecycle.ts +0 -391
- package/references/sessionlog/src/index.ts +0 -650
- package/references/sessionlog/src/security/redaction.ts +0 -283
- package/references/sessionlog/src/session/state-machine.ts +0 -452
- package/references/sessionlog/src/store/checkpoint-store.ts +0 -509
- package/references/sessionlog/src/store/native-store.ts +0 -173
- package/references/sessionlog/src/store/provider-types.ts +0 -99
- package/references/sessionlog/src/store/session-store.ts +0 -266
- package/references/sessionlog/src/strategy/attribution.ts +0 -296
- package/references/sessionlog/src/strategy/common.ts +0 -207
- package/references/sessionlog/src/strategy/content-overlap.ts +0 -228
- package/references/sessionlog/src/strategy/manual-commit.ts +0 -988
- package/references/sessionlog/src/strategy/types.ts +0 -279
- package/references/sessionlog/src/summarize/claude-generator.ts +0 -115
- package/references/sessionlog/src/summarize/summarize.ts +0 -432
- package/references/sessionlog/src/types.ts +0 -508
- package/references/sessionlog/src/utils/chunk-files.ts +0 -49
- package/references/sessionlog/src/utils/commit-message.ts +0 -65
- package/references/sessionlog/src/utils/detect-agent.ts +0 -36
- package/references/sessionlog/src/utils/hook-managers.ts +0 -125
- package/references/sessionlog/src/utils/ide-tags.ts +0 -32
- package/references/sessionlog/src/utils/paths.ts +0 -79
- package/references/sessionlog/src/utils/preview-rewind.ts +0 -80
- package/references/sessionlog/src/utils/rewind-conflict.ts +0 -121
- package/references/sessionlog/src/utils/shadow-branch.ts +0 -109
- package/references/sessionlog/src/utils/string-utils.ts +0 -46
- package/references/sessionlog/src/utils/todo-extract.ts +0 -188
- package/references/sessionlog/src/utils/trailers.ts +0 -187
- package/references/sessionlog/src/utils/transcript-parse.ts +0 -177
- package/references/sessionlog/src/utils/transcript-timestamp.ts +0 -59
- package/references/sessionlog/src/utils/tree-ops.ts +0 -219
- package/references/sessionlog/src/utils/tty.ts +0 -72
- package/references/sessionlog/src/utils/validation.ts +0 -65
- package/references/sessionlog/src/utils/worktree.ts +0 -58
- package/references/sessionlog/src/wire-types.ts +0 -59
- package/references/sessionlog/templates/setup-env.sh +0 -153
- package/references/sessionlog/tsconfig.json +0 -18
- package/references/sessionlog/vitest.config.ts +0 -12
- package/references/swarmkit/LICENSE +0 -21
- package/references/swarmkit/README.md +0 -130
- package/references/swarmkit/docs/design.md +0 -453
- package/references/swarmkit/docs/package-setup-reference.md +0 -519
- package/references/swarmkit/package-lock.json +0 -1938
- package/references/swarmkit/package.json +0 -43
- package/references/swarmkit/src/cli.ts +0 -41
- package/references/swarmkit/src/commands/add.ts +0 -126
- package/references/swarmkit/src/commands/doctor.ts +0 -117
- package/references/swarmkit/src/commands/hive.ts +0 -279
- package/references/swarmkit/src/commands/init/phases/configure.ts +0 -96
- package/references/swarmkit/src/commands/init/phases/global-setup.ts +0 -102
- package/references/swarmkit/src/commands/init/phases/packages.ts +0 -44
- package/references/swarmkit/src/commands/init/phases/project.ts +0 -81
- package/references/swarmkit/src/commands/init/phases/use-case.ts +0 -47
- package/references/swarmkit/src/commands/init/state.test.ts +0 -23
- package/references/swarmkit/src/commands/init/state.ts +0 -22
- package/references/swarmkit/src/commands/init/wizard.ts +0 -160
- package/references/swarmkit/src/commands/init.ts +0 -17
- package/references/swarmkit/src/commands/login.ts +0 -106
- package/references/swarmkit/src/commands/logout.ts +0 -22
- package/references/swarmkit/src/commands/remove.ts +0 -72
- package/references/swarmkit/src/commands/status.ts +0 -101
- package/references/swarmkit/src/commands/update.ts +0 -62
- package/references/swarmkit/src/commands/whoami.ts +0 -41
- package/references/swarmkit/src/config/global.test.ts +0 -258
- package/references/swarmkit/src/config/global.ts +0 -141
- package/references/swarmkit/src/config/keys.test.ts +0 -109
- package/references/swarmkit/src/config/keys.ts +0 -49
- package/references/swarmkit/src/doctor/checks.test.ts +0 -366
- package/references/swarmkit/src/doctor/checks.ts +0 -292
- package/references/swarmkit/src/doctor/types.ts +0 -33
- package/references/swarmkit/src/hub/auth-flow.test.ts +0 -127
- package/references/swarmkit/src/hub/auth-flow.ts +0 -144
- package/references/swarmkit/src/hub/client.test.ts +0 -224
- package/references/swarmkit/src/hub/client.ts +0 -185
- package/references/swarmkit/src/hub/credentials.test.ts +0 -132
- package/references/swarmkit/src/hub/credentials.ts +0 -51
- package/references/swarmkit/src/index.ts +0 -116
- package/references/swarmkit/src/packages/installer.test.ts +0 -365
- package/references/swarmkit/src/packages/installer.ts +0 -206
- package/references/swarmkit/src/packages/plugin.test.ts +0 -141
- package/references/swarmkit/src/packages/plugin.ts +0 -46
- package/references/swarmkit/src/packages/registry.test.ts +0 -235
- package/references/swarmkit/src/packages/registry.ts +0 -209
- package/references/swarmkit/src/packages/setup.test.ts +0 -1349
- package/references/swarmkit/src/packages/setup.ts +0 -635
- package/references/swarmkit/src/utils/ui.test.ts +0 -115
- package/references/swarmkit/src/utils/ui.ts +0 -62
- package/references/swarmkit/tsconfig.json +0 -17
- package/references/swarmkit/vitest.config.ts +0 -9
|
@@ -1,1412 +0,0 @@
|
|
|
1
|
-
# OpenTasks Providers
|
|
2
|
-
|
|
3
|
-
This document defines the provider architecture for OpenTasks.
|
|
4
|
-
|
|
5
|
-
See also:
|
|
6
|
-
- [DESIGN.md](./DESIGN.md) — Design rationale and core concepts
|
|
7
|
-
- [SCHEMA.md](./SCHEMA.md) — Data model and types
|
|
8
|
-
- [PERSISTENCE.md](./PERSISTENCE.md) — Storage and sync
|
|
9
|
-
- [ARCHITECTURE.md](./ARCHITECTURE.md) — Location hierarchy and daemon
|
|
10
|
-
- [INTERFACE.md](./INTERFACE.md) — API
|
|
11
|
-
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
## Overview
|
|
15
|
-
|
|
16
|
-
OpenTasks uses a **federated graph model** where:
|
|
17
|
-
|
|
18
|
-
- **OpenTasks owns the graph structure** — edges, relationships, and node references
|
|
19
|
-
- **Providers own node content** — the actual context and task data
|
|
20
|
-
- **Daemon coordinates access** — all provider operations go through the location daemon
|
|
21
|
-
- **Location isolation** — each `.opentasks/` location has its own provider configuration
|
|
22
|
-
|
|
23
|
-
This separation allows OpenTasks to integrate with existing tools (Beads, Taskmaster, Linear) without duplicating data or creating sync conflicts.
|
|
24
|
-
|
|
25
|
-
### Integration Patterns
|
|
26
|
-
|
|
27
|
-
OpenTasks supports multiple integration patterns depending on the external system:
|
|
28
|
-
|
|
29
|
-
| Pattern | Direction | Use Case | Example |
|
|
30
|
-
|---------|-----------|----------|---------|
|
|
31
|
-
| **Provider** | Read-heavy | External system is source of truth | Beads, Jira (read-only) |
|
|
32
|
-
| **Adapter** | Bidirectional | Full sync between systems | Linear ↔ OpenTasks |
|
|
33
|
-
| **SyncTarget** | Write-heavy | OpenTasks is source of truth | Export to GitHub Issues |
|
|
34
|
-
|
|
35
|
-
The Provider interface (described below) is the foundation. Adapters and SyncTargets extend it with additional capabilities.
|
|
36
|
-
|
|
37
|
-
```
|
|
38
|
-
┌─────────────────────────────────────────────────────────────────┐
|
|
39
|
-
│ OpenTasks Location (graph.jsonl) │
|
|
40
|
-
│ │
|
|
41
|
-
│ ┌────────────────────────────────────────────────────────────┐ │
|
|
42
|
-
│ │ Native Nodes │ │
|
|
43
|
-
│ │ Context (c-a2b3) Task (t-x7k9) Feedback (f-m4n5) │ │
|
|
44
|
-
│ └────────────────────────────────────────────────────────────┘ │
|
|
45
|
-
│ │
|
|
46
|
-
│ ┌────────────────────────────────────────────────────────────┐ │
|
|
47
|
-
│ │ ExternalNodes (cached) │ │
|
|
48
|
-
│ │ e-bd1: beads://./bd-123 (materialized) │ │
|
|
49
|
-
│ │ e-tm1: taskmaster://./prd-1 (materialized) │ │
|
|
50
|
-
│ │ e-jir: jira://PROJ-456 (phantom, not yet fetched) │ │
|
|
51
|
-
│ └────────────────────────────────────────────────────────────┘ │
|
|
52
|
-
│ │
|
|
53
|
-
│ ┌────────────────────────────────────────────────────────────┐ │
|
|
54
|
-
│ │ Edges │ │
|
|
55
|
-
│ │ t-x7k9 ──implements──▶ c-a2b3 │ │
|
|
56
|
-
│ │ t-x7k9 ──blocks──▶ beads://./bd-456 │ │
|
|
57
|
-
│ │ e-bd1 ──discovered-from──▶ e-tm1 │ │
|
|
58
|
-
│ └────────────────────────────────────────────────────────────┘ │
|
|
59
|
-
└─────────────────────────────────────────────────────────────────┘
|
|
60
|
-
│
|
|
61
|
-
Daemon (IPC)
|
|
62
|
-
│
|
|
63
|
-
┌─────────────────┼─────────────────┐
|
|
64
|
-
▼ ▼ ▼
|
|
65
|
-
┌───────────────────┐ ┌───────────────┐ ┌───────────────────┐
|
|
66
|
-
│ Task Providers │ │ Context Providers│ │ Other Locations │
|
|
67
|
-
│ │ │ │ │ │
|
|
68
|
-
│ • Beads CLI │ │ • Taskmaster │ │ opentasks://~ │
|
|
69
|
-
│ • Linear API │ │ • spec-kit │ │ opentasks://../ │
|
|
70
|
-
│ • Jira API │ │ │ │ │
|
|
71
|
-
└───────────────────┘ └───────────────┘ └───────────────────┘
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
---
|
|
75
|
-
|
|
76
|
-
## Design Principles
|
|
77
|
-
|
|
78
|
-
### 1. Separation of Concerns
|
|
79
|
-
|
|
80
|
-
| Component | Owner | Storage |
|
|
81
|
-
|-----------|-------|---------|
|
|
82
|
-
| **Graph Structure** | OpenTasks | `.opentasks/graph.jsonl` |
|
|
83
|
-
| ↳ Edges/Relationships | OpenTasks | (in graph.jsonl) |
|
|
84
|
-
| ↳ Native Nodes | OpenTasks | (in graph.jsonl) |
|
|
85
|
-
| ↳ ExternalNodes (cache) | OpenTasks | (in graph.jsonl) |
|
|
86
|
-
| ↳ Feedback | OpenTasks | (in graph.jsonl) |
|
|
87
|
-
| **External Task Content** | Task Provider | Provider's storage |
|
|
88
|
-
| **External Context Content** | Context Provider | Provider's storage |
|
|
89
|
-
|
|
90
|
-
See [PERSISTENCE.md](./PERSISTENCE.md) for details on the unified graph storage.
|
|
91
|
-
|
|
92
|
-
### 2. Provider Authority
|
|
93
|
-
|
|
94
|
-
Providers are the **source of truth** for their content. OpenTasks:
|
|
95
|
-
|
|
96
|
-
- **Reads** content from providers on demand
|
|
97
|
-
- **Caches** metadata for display (title, status)
|
|
98
|
-
- **Never duplicates** full content
|
|
99
|
-
- **Delegates** CRUD operations to providers
|
|
100
|
-
|
|
101
|
-
### 3. URI-Based References
|
|
102
|
-
|
|
103
|
-
OpenTasks uses two URI schemes:
|
|
104
|
-
|
|
105
|
-
**Provider URIs** — References to external system content:
|
|
106
|
-
```
|
|
107
|
-
beads://[workspace]/[id] # Beads issue
|
|
108
|
-
taskmaster://[project]/[id] # Taskmaster PRD/task
|
|
109
|
-
linear://[team]/[id] # Linear issue
|
|
110
|
-
jira://[project]/[key] # Jira issue
|
|
111
|
-
github://[owner]/[repo]/[num] # GitHub issue
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
**OpenTasks URIs** — Cross-location references (see [ARCHITECTURE.md](./ARCHITECTURE.md)):
|
|
115
|
-
```
|
|
116
|
-
opentasks://~/.opentasks/c-a2b3 # User location
|
|
117
|
-
opentasks://./t-x7k9 # Current location
|
|
118
|
-
opentasks://../.opentasks/c-c4d5 # Parent directory
|
|
119
|
-
opentasks:///abs/path/.opentasks/t-e6f7 # Absolute path
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
**URI Resolution Priority:**
|
|
123
|
-
1. Local ID lookup (if no scheme prefix, e.g., `c-a2b3`)
|
|
124
|
-
2. OpenTasks URI resolution (for `opentasks://` scheme)
|
|
125
|
-
3. Provider URI resolution (for provider schemes like `beads://`, `jira://`)
|
|
126
|
-
|
|
127
|
-
### 4. Graceful Degradation & Phantom Nodes
|
|
128
|
-
|
|
129
|
-
OpenTasks supports **progressive materialization** for external references:
|
|
130
|
-
|
|
131
|
-
```
|
|
132
|
-
URI Reference → Phantom Node → Materialized Node
|
|
133
|
-
│ │ │
|
|
134
|
-
│ │ └── Full data fetched, cached
|
|
135
|
-
│ └── ExternalNode exists, materialized=false
|
|
136
|
-
└── Just a string in an edge target
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
**Degradation chain:**
|
|
140
|
-
1. **Provider available**: Fetch fresh data, cache it
|
|
141
|
-
2. **Provider unavailable**: Use cached data (with `stale: true`)
|
|
142
|
-
3. **No cache**: Return phantom node (just URI and type)
|
|
143
|
-
4. **No ExternalNode**: Edge still valid, target resolves to URI string
|
|
144
|
-
|
|
145
|
-
This aligns with the `ExternalNode` type in [SCHEMA.md](./SCHEMA.md):
|
|
146
|
-
```typescript
|
|
147
|
-
interface ExternalNode {
|
|
148
|
-
type: 'external'
|
|
149
|
-
uri: string // Canonical URI (e.g., "jira://PROJ-123")
|
|
150
|
-
source: string // Provider name
|
|
151
|
-
materialized: boolean // Has data been fetched?
|
|
152
|
-
cached_at?: string // When last fetched
|
|
153
|
-
stale?: boolean // Needs refresh
|
|
154
|
-
external_data?: Record<string, unknown>
|
|
155
|
-
}
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
---
|
|
159
|
-
|
|
160
|
-
## Provider Interface
|
|
161
|
-
|
|
162
|
-
### Base Provider
|
|
163
|
-
|
|
164
|
-
```typescript
|
|
165
|
-
/**
|
|
166
|
-
* Base interface for all content providers
|
|
167
|
-
*/
|
|
168
|
-
interface ContentProvider {
|
|
169
|
-
/** Unique provider identifier */
|
|
170
|
-
readonly name: string
|
|
171
|
-
|
|
172
|
-
/** URI scheme(s) this provider handles */
|
|
173
|
-
readonly schemes: string[]
|
|
174
|
-
|
|
175
|
-
/** Node types this provider manages */
|
|
176
|
-
readonly nodeTypes: ('context' | 'task')[]
|
|
177
|
-
|
|
178
|
-
/** Provider capabilities */
|
|
179
|
-
readonly capabilities: ProviderCapabilities
|
|
180
|
-
|
|
181
|
-
// === Lifecycle ===
|
|
182
|
-
|
|
183
|
-
/** Initialize provider (called once on startup) */
|
|
184
|
-
initialize?(config: ProviderConfig): Promise<void>
|
|
185
|
-
|
|
186
|
-
/** Check if provider is available/healthy */
|
|
187
|
-
healthCheck?(): Promise<HealthStatus>
|
|
188
|
-
|
|
189
|
-
// === Read Operations ===
|
|
190
|
-
|
|
191
|
-
/** Get a single node by ID */
|
|
192
|
-
get(id: string): Promise<ProviderNode | null>
|
|
193
|
-
|
|
194
|
-
/** List nodes with optional filtering */
|
|
195
|
-
list(filter?: ProviderFilter): Promise<ProviderNode[]>
|
|
196
|
-
|
|
197
|
-
/** Search nodes by query string */
|
|
198
|
-
search?(query: string): Promise<ProviderNode[]>
|
|
199
|
-
|
|
200
|
-
/** Get nodes ready for work (no blockers) */
|
|
201
|
-
ready?(): Promise<ProviderNode[]>
|
|
202
|
-
|
|
203
|
-
// === Write Operations (optional) ===
|
|
204
|
-
|
|
205
|
-
/** Create a new node */
|
|
206
|
-
create?(input: CreateNodeInput): Promise<ProviderNode>
|
|
207
|
-
|
|
208
|
-
/** Update an existing node */
|
|
209
|
-
update?(id: string, updates: UpdateNodeInput): Promise<ProviderNode>
|
|
210
|
-
|
|
211
|
-
/** Close/complete a node */
|
|
212
|
-
close?(id: string, reason?: string): Promise<ProviderNode>
|
|
213
|
-
|
|
214
|
-
/** Delete a node */
|
|
215
|
-
delete?(id: string): Promise<void>
|
|
216
|
-
|
|
217
|
-
// === Sync Operations (optional) ===
|
|
218
|
-
|
|
219
|
-
/** Watch for changes (real-time updates) */
|
|
220
|
-
watch?(callback: (event: ProviderEvent) => void): Unsubscribe
|
|
221
|
-
|
|
222
|
-
/** Pull changes since last sync */
|
|
223
|
-
pullChanges?(since?: string): Promise<ChangeSet>
|
|
224
|
-
|
|
225
|
-
// === Mapping ===
|
|
226
|
-
|
|
227
|
-
/** Convert provider-native format to OpenTasks node */
|
|
228
|
-
toOpenTasks(native: unknown): ProviderNode
|
|
229
|
-
|
|
230
|
-
/** Convert OpenTasks node to provider-native format */
|
|
231
|
-
fromOpenTasks(node: ProviderNode): unknown
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
interface ProviderCapabilities {
|
|
235
|
-
read: boolean
|
|
236
|
-
write: boolean
|
|
237
|
-
delete: boolean
|
|
238
|
-
search: boolean
|
|
239
|
-
watch: boolean
|
|
240
|
-
ready: boolean // supports "ready" query
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
interface ProviderNode {
|
|
244
|
-
/** Provider-specific ID */
|
|
245
|
-
id: string
|
|
246
|
-
|
|
247
|
-
/** Full URI for this node */
|
|
248
|
-
uri: string
|
|
249
|
-
|
|
250
|
-
/** Node type */
|
|
251
|
-
type: 'context' | 'task'
|
|
252
|
-
|
|
253
|
-
/** Display title */
|
|
254
|
-
title: string
|
|
255
|
-
|
|
256
|
-
/** Full content (markdown) */
|
|
257
|
-
content?: string
|
|
258
|
-
|
|
259
|
-
/** Provider's status value */
|
|
260
|
-
status?: string
|
|
261
|
-
|
|
262
|
-
/** Priority (0-4) */
|
|
263
|
-
priority?: number
|
|
264
|
-
|
|
265
|
-
/** Tags/labels */
|
|
266
|
-
tags?: string[]
|
|
267
|
-
|
|
268
|
-
/** Assignment */
|
|
269
|
-
assignee?: string
|
|
270
|
-
|
|
271
|
-
/** Timestamps */
|
|
272
|
-
created_at: string
|
|
273
|
-
updated_at: string
|
|
274
|
-
|
|
275
|
-
/** Provider-specific data */
|
|
276
|
-
provider_data?: Record<string, unknown>
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
interface ProviderEvent {
|
|
280
|
-
type: 'created' | 'updated' | 'deleted'
|
|
281
|
-
uri: string
|
|
282
|
-
node?: ProviderNode
|
|
283
|
-
timestamp: string
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
type Unsubscribe = () => void
|
|
287
|
-
```
|
|
288
|
-
|
|
289
|
-
---
|
|
290
|
-
|
|
291
|
-
## Daemon Integration
|
|
292
|
-
|
|
293
|
-
All provider operations are coordinated through the location daemon. This ensures:
|
|
294
|
-
- Consistent caching across clients
|
|
295
|
-
- Proper lock management
|
|
296
|
-
- Event propagation to watchers
|
|
297
|
-
- Cross-location resolution
|
|
298
|
-
|
|
299
|
-
### Provider Registration Flow
|
|
300
|
-
|
|
301
|
-
```
|
|
302
|
-
┌───────────────────────────────────────────────────────────────────┐
|
|
303
|
-
│ Daemon Startup │
|
|
304
|
-
│ │
|
|
305
|
-
│ 1. Read .opentasks/config.json for provider config │
|
|
306
|
-
│ 2. Initialize configured providers │
|
|
307
|
-
│ 3. Register providers in ProviderRegistry │
|
|
308
|
-
│ 4. Start watchers for providers with watch capability │
|
|
309
|
-
└───────────────────────────────────────────────────────────────────┘
|
|
310
|
-
```
|
|
311
|
-
|
|
312
|
-
### Request Flow
|
|
313
|
-
|
|
314
|
-
```typescript
|
|
315
|
-
// Client makes request
|
|
316
|
-
const node = await client.get('beads://./bd-x7k9')
|
|
317
|
-
|
|
318
|
-
// Daemon handles:
|
|
319
|
-
// 1. Parse URI to determine provider
|
|
320
|
-
// 2. Check ExternalNode cache
|
|
321
|
-
// 3. If stale or missing, delegate to provider
|
|
322
|
-
// 4. Update ExternalNode with fetched data
|
|
323
|
-
// 5. Return to client
|
|
324
|
-
```
|
|
325
|
-
|
|
326
|
-
### IPC Methods for Providers
|
|
327
|
-
|
|
328
|
-
The daemon exposes these provider-related IPC methods:
|
|
329
|
-
|
|
330
|
-
| Method | Description |
|
|
331
|
-
|--------|-------------|
|
|
332
|
-
| `provider.resolve` | Resolve URI to node (with caching) |
|
|
333
|
-
| `provider.list` | List nodes from a provider |
|
|
334
|
-
| `provider.search` | Search across providers |
|
|
335
|
-
| `provider.ready` | Get ready items (with cross-provider blocking) |
|
|
336
|
-
| `provider.create` | Create via provider (if writable) |
|
|
337
|
-
| `provider.update` | Update via provider (if writable) |
|
|
338
|
-
| `provider.refresh` | Force refresh from provider |
|
|
339
|
-
|
|
340
|
-
### Cross-Location Provider Resolution
|
|
341
|
-
|
|
342
|
-
When an edge references a node in another location:
|
|
343
|
-
|
|
344
|
-
```typescript
|
|
345
|
-
// Edge in ~/projects/app-a/.opentasks/
|
|
346
|
-
{
|
|
347
|
-
from_id: "t-local",
|
|
348
|
-
to_id: "opentasks://~/projects/app-b/.opentasks/t-x7k9",
|
|
349
|
-
type: "blocks"
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
// Resolution:
|
|
353
|
-
// 1. Parse opentasks:// URI
|
|
354
|
-
// 2. Find daemon for ~/projects/app-b/.opentasks/
|
|
355
|
-
// 3. Request node from that daemon
|
|
356
|
-
// 4. That daemon may further resolve to a provider URI
|
|
357
|
-
```
|
|
358
|
-
|
|
359
|
-
This enables multi-hop resolution:
|
|
360
|
-
```
|
|
361
|
-
opentasks://location-b/e-ext1 → beads://./bd-123 → Beads CLI
|
|
362
|
-
```
|
|
363
|
-
|
|
364
|
-
---
|
|
365
|
-
|
|
366
|
-
## Task Providers
|
|
367
|
-
|
|
368
|
-
### Beads Provider
|
|
369
|
-
|
|
370
|
-
[Beads](https://github.com/steveyegge/beads) is a distributed, git-backed issue tracker designed for AI agents.
|
|
371
|
-
|
|
372
|
-
```typescript
|
|
373
|
-
interface BeadsProvider extends ContentProvider {
|
|
374
|
-
name: 'beads'
|
|
375
|
-
schemes: ['beads']
|
|
376
|
-
nodeTypes: ['task']
|
|
377
|
-
|
|
378
|
-
capabilities: {
|
|
379
|
-
read: true,
|
|
380
|
-
write: true,
|
|
381
|
-
delete: true,
|
|
382
|
-
search: true,
|
|
383
|
-
watch: true, // via file watcher on .beads/issues.jsonl
|
|
384
|
-
ready: true // `bd ready` command
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
```
|
|
388
|
-
|
|
389
|
-
#### URI Format
|
|
390
|
-
|
|
391
|
-
```
|
|
392
|
-
beads://[workspace]/[id]
|
|
393
|
-
|
|
394
|
-
Examples:
|
|
395
|
-
beads://./bd-x7k9 # Current workspace
|
|
396
|
-
beads:///path/to/repo/bd-y8 # Absolute path
|
|
397
|
-
beads://bd-z9a1 # Implicit current workspace
|
|
398
|
-
```
|
|
399
|
-
|
|
400
|
-
#### Field Mapping
|
|
401
|
-
|
|
402
|
-
| Beads Field | OpenTasks Field | Notes |
|
|
403
|
-
|-------------|-----------------|-------|
|
|
404
|
-
| `id` | `id` | Hash-based (bd-xxxx) |
|
|
405
|
-
| `title` | `title` | Direct mapping |
|
|
406
|
-
| `description` | `content` | Primary content |
|
|
407
|
-
| `design`, `acceptance_criteria`, `notes` | `content` | Concatenated with separators |
|
|
408
|
-
| `status` | `status` | open, in_progress, blocked, closed, etc. |
|
|
409
|
-
| `priority` | `priority` | 0-4 (same semantics) |
|
|
410
|
-
| `labels` | `tags` | Direct mapping |
|
|
411
|
-
| `assignee` | `assignee` | Direct mapping |
|
|
412
|
-
| `dependencies` | Edges | Converted to OpenTasks edges |
|
|
413
|
-
| `comments` | Feedback nodes | Each comment becomes feedback |
|
|
414
|
-
|
|
415
|
-
#### Dependency Mapping
|
|
416
|
-
|
|
417
|
-
Beads dependencies map to OpenTasks edges:
|
|
418
|
-
|
|
419
|
-
| Beads Dependency | OpenTasks Edge | Direction |
|
|
420
|
-
|------------------|----------------|-----------|
|
|
421
|
-
| `blocks` | `blocks` | from → to |
|
|
422
|
-
| `parent-child` | `parent-of` | parent → child |
|
|
423
|
-
| `related` | `related` | bidirectional |
|
|
424
|
-
| `discovered-from` | `discovered-from` | from → to |
|
|
425
|
-
|
|
426
|
-
#### Implementation
|
|
427
|
-
|
|
428
|
-
```typescript
|
|
429
|
-
class BeadsProvider implements ContentProvider {
|
|
430
|
-
private workspace: string
|
|
431
|
-
|
|
432
|
-
constructor(config: { workspace?: string }) {
|
|
433
|
-
this.workspace = config.workspace || process.cwd()
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
async get(id: string): Promise<ProviderNode | null> {
|
|
437
|
-
// Use `bd show <id> --json` or read directly from .beads/
|
|
438
|
-
const result = await exec(`bd show ${id} --json`, {
|
|
439
|
-
cwd: this.workspace
|
|
440
|
-
})
|
|
441
|
-
if (!result) return null
|
|
442
|
-
return this.toOpenTasks(JSON.parse(result))
|
|
443
|
-
}
|
|
444
|
-
|
|
445
|
-
async list(filter?: ProviderFilter): Promise<ProviderNode[]> {
|
|
446
|
-
// Use `bd list --json` with filters
|
|
447
|
-
const args = this.buildListArgs(filter)
|
|
448
|
-
const result = await exec(`bd list ${args} --json`, {
|
|
449
|
-
cwd: this.workspace
|
|
450
|
-
})
|
|
451
|
-
return JSON.parse(result).map(this.toOpenTasks)
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
async ready(): Promise<ProviderNode[]> {
|
|
455
|
-
// Use `bd ready --json`
|
|
456
|
-
const result = await exec('bd ready --json', {
|
|
457
|
-
cwd: this.workspace
|
|
458
|
-
})
|
|
459
|
-
return JSON.parse(result).map(this.toOpenTasks)
|
|
460
|
-
}
|
|
461
|
-
|
|
462
|
-
async create(input: CreateNodeInput): Promise<ProviderNode> {
|
|
463
|
-
// Use `bd new`
|
|
464
|
-
const result = await exec(
|
|
465
|
-
`bd new -t "${input.title}" -d "${input.content || ''}"`,
|
|
466
|
-
{ cwd: this.workspace }
|
|
467
|
-
)
|
|
468
|
-
const id = this.parseCreatedId(result)
|
|
469
|
-
return this.get(id)
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
async update(id: string, updates: UpdateNodeInput): Promise<ProviderNode> {
|
|
473
|
-
// Use `bd update`
|
|
474
|
-
const args = this.buildUpdateArgs(updates)
|
|
475
|
-
await exec(`bd update ${id} ${args}`, { cwd: this.workspace })
|
|
476
|
-
return this.get(id)
|
|
477
|
-
}
|
|
478
|
-
|
|
479
|
-
watch(callback: (event: ProviderEvent) => void): Unsubscribe {
|
|
480
|
-
// Watch .beads/issues.jsonl for changes
|
|
481
|
-
const watcher = fs.watch(
|
|
482
|
-
path.join(this.workspace, '.beads', 'issues.jsonl'),
|
|
483
|
-
() => callback({ type: 'updated', uri: 'beads://*', timestamp: new Date().toISOString() })
|
|
484
|
-
)
|
|
485
|
-
return () => watcher.close()
|
|
486
|
-
}
|
|
487
|
-
|
|
488
|
-
toOpenTasks(bead: BeadsIssue): ProviderNode {
|
|
489
|
-
// Concatenate content fields
|
|
490
|
-
const contentParts = [
|
|
491
|
-
bead.description,
|
|
492
|
-
bead.design && `## Design\n\n${bead.design}`,
|
|
493
|
-
bead.acceptance_criteria && `## Acceptance Criteria\n\n${bead.acceptance_criteria}`,
|
|
494
|
-
bead.notes && `## Notes\n\n${bead.notes}`,
|
|
495
|
-
].filter(Boolean)
|
|
496
|
-
|
|
497
|
-
return {
|
|
498
|
-
id: bead.id,
|
|
499
|
-
uri: `beads://${this.workspace}/${bead.id}`,
|
|
500
|
-
type: 'task',
|
|
501
|
-
title: bead.title,
|
|
502
|
-
content: contentParts.join('\n\n---\n\n'),
|
|
503
|
-
status: this.mapStatus(bead.status),
|
|
504
|
-
priority: bead.priority,
|
|
505
|
-
tags: bead.labels,
|
|
506
|
-
assignee: bead.assignee,
|
|
507
|
-
created_at: bead.created_at,
|
|
508
|
-
updated_at: bead.updated_at,
|
|
509
|
-
provider_data: {
|
|
510
|
-
issue_type: bead.issue_type,
|
|
511
|
-
estimated_minutes: bead.estimated_minutes,
|
|
512
|
-
dependencies: bead.dependencies,
|
|
513
|
-
}
|
|
514
|
-
}
|
|
515
|
-
}
|
|
516
|
-
|
|
517
|
-
private mapStatus(beadsStatus: string): string {
|
|
518
|
-
// Beads has more statuses; map to OpenTasks core set
|
|
519
|
-
const mapping: Record<string, string> = {
|
|
520
|
-
'open': 'open',
|
|
521
|
-
'in_progress': 'in_progress',
|
|
522
|
-
'blocked': 'blocked',
|
|
523
|
-
'deferred': 'blocked',
|
|
524
|
-
'closed': 'closed',
|
|
525
|
-
'tombstone': 'closed',
|
|
526
|
-
'pinned': 'open',
|
|
527
|
-
'hooked': 'blocked',
|
|
528
|
-
}
|
|
529
|
-
return mapping[beadsStatus] || beadsStatus
|
|
530
|
-
}
|
|
531
|
-
}
|
|
532
|
-
```
|
|
533
|
-
|
|
534
|
-
#### Configuration
|
|
535
|
-
|
|
536
|
-
```json
|
|
537
|
-
// .opentasks/config.json
|
|
538
|
-
{
|
|
539
|
-
"providers": {
|
|
540
|
-
"issues": {
|
|
541
|
-
"primary": "beads",
|
|
542
|
-
"beads": {
|
|
543
|
-
"workspace": ".",
|
|
544
|
-
"cli": "bd"
|
|
545
|
-
}
|
|
546
|
-
}
|
|
547
|
-
}
|
|
548
|
-
}
|
|
549
|
-
```
|
|
550
|
-
|
|
551
|
-
---
|
|
552
|
-
|
|
553
|
-
### Linear Provider
|
|
554
|
-
|
|
555
|
-
[Linear](https://linear.app) is a project management tool with a GraphQL API.
|
|
556
|
-
|
|
557
|
-
```typescript
|
|
558
|
-
interface LinearProvider extends ContentProvider {
|
|
559
|
-
name: 'linear'
|
|
560
|
-
schemes: ['linear']
|
|
561
|
-
nodeTypes: ['task']
|
|
562
|
-
|
|
563
|
-
capabilities: {
|
|
564
|
-
read: true,
|
|
565
|
-
write: true,
|
|
566
|
-
delete: false, // Linear doesn't support hard delete
|
|
567
|
-
search: true,
|
|
568
|
-
watch: true, // via webhooks
|
|
569
|
-
ready: false // no native "ready" concept
|
|
570
|
-
}
|
|
571
|
-
}
|
|
572
|
-
```
|
|
573
|
-
|
|
574
|
-
#### URI Format
|
|
575
|
-
|
|
576
|
-
```
|
|
577
|
-
linear://[team]/[id]
|
|
578
|
-
|
|
579
|
-
Examples:
|
|
580
|
-
linear://ENG/ENG-123
|
|
581
|
-
linear://PROD/PROD-456
|
|
582
|
-
```
|
|
583
|
-
|
|
584
|
-
#### Field Mapping
|
|
585
|
-
|
|
586
|
-
| Linear Field | OpenTasks Field |
|
|
587
|
-
|--------------|-----------------|
|
|
588
|
-
| `id` | `id` |
|
|
589
|
-
| `identifier` | URI path (`ENG-123`) |
|
|
590
|
-
| `title` | `title` |
|
|
591
|
-
| `description` | `content` |
|
|
592
|
-
| `state.name` | `status` |
|
|
593
|
-
| `priority` | `priority` (mapped 0-4) |
|
|
594
|
-
| `labels` | `tags` |
|
|
595
|
-
| `assignee.name` | `assignee` |
|
|
596
|
-
|
|
597
|
-
---
|
|
598
|
-
|
|
599
|
-
### Native Task Provider
|
|
600
|
-
|
|
601
|
-
Fallback provider when no external task tracker is configured. Unlike external providers, native nodes are stored directly in `graph.jsonl` as `Task` type (not `ExternalNode`).
|
|
602
|
-
|
|
603
|
-
```typescript
|
|
604
|
-
interface NativeTaskProvider extends ContentProvider {
|
|
605
|
-
name: 'native'
|
|
606
|
-
schemes: ['native', 'opentasks']
|
|
607
|
-
nodeTypes: ['task']
|
|
608
|
-
|
|
609
|
-
capabilities: {
|
|
610
|
-
read: true,
|
|
611
|
-
write: true,
|
|
612
|
-
delete: true,
|
|
613
|
-
search: true,
|
|
614
|
-
watch: true, // file watcher on graph.jsonl
|
|
615
|
-
ready: true // computed from edges
|
|
616
|
-
}
|
|
617
|
-
}
|
|
618
|
-
```
|
|
619
|
-
|
|
620
|
-
**Storage**: Native tasks use the `Task` type directly in `graph.jsonl`:
|
|
621
|
-
```json
|
|
622
|
-
{
|
|
623
|
-
"id": "t-x7k9",
|
|
624
|
-
"type": "task",
|
|
625
|
-
"title": "Implement feature",
|
|
626
|
-
"status": "open",
|
|
627
|
-
...
|
|
628
|
-
}
|
|
629
|
-
```
|
|
630
|
-
|
|
631
|
-
This is different from external providers, which create `ExternalNode` wrappers.
|
|
632
|
-
|
|
633
|
-
---
|
|
634
|
-
|
|
635
|
-
## Context Providers
|
|
636
|
-
|
|
637
|
-
### Taskmaster Provider
|
|
638
|
-
|
|
639
|
-
[Taskmaster](https://github.com/eyaltoledano/claude-task-master) manages PRDs and breaks them into subtasks.
|
|
640
|
-
|
|
641
|
-
```typescript
|
|
642
|
-
interface TaskmasterProvider extends ContentProvider {
|
|
643
|
-
name: 'taskmaster'
|
|
644
|
-
schemes: ['taskmaster', 'tm']
|
|
645
|
-
nodeTypes: ['context']
|
|
646
|
-
|
|
647
|
-
capabilities: {
|
|
648
|
-
read: true,
|
|
649
|
-
write: true,
|
|
650
|
-
delete: true,
|
|
651
|
-
search: true,
|
|
652
|
-
watch: true, // file watcher on tasks/
|
|
653
|
-
ready: false
|
|
654
|
-
}
|
|
655
|
-
}
|
|
656
|
-
```
|
|
657
|
-
|
|
658
|
-
#### URI Format
|
|
659
|
-
|
|
660
|
-
```
|
|
661
|
-
taskmaster://[project]/[id]
|
|
662
|
-
|
|
663
|
-
Examples:
|
|
664
|
-
taskmaster://./prd # Root PRD
|
|
665
|
-
taskmaster://./task-1 # Subtask
|
|
666
|
-
tm://task-1 # Short form
|
|
667
|
-
```
|
|
668
|
-
|
|
669
|
-
#### Field Mapping
|
|
670
|
-
|
|
671
|
-
| Taskmaster Field | OpenTasks Field |
|
|
672
|
-
|------------------|-----------------|
|
|
673
|
-
| `id` | `id` |
|
|
674
|
-
| `title` | `title` |
|
|
675
|
-
| `description` | `content` |
|
|
676
|
-
| `status` | `status` |
|
|
677
|
-
| `priority` | `priority` |
|
|
678
|
-
| `dependencies` | Edges (`depends-on`) |
|
|
679
|
-
| `subtasks` | Child specs via `parent-of` edges |
|
|
680
|
-
|
|
681
|
-
#### Directory Structure
|
|
682
|
-
|
|
683
|
-
```
|
|
684
|
-
tasks/
|
|
685
|
-
├── tasks.json # Task definitions
|
|
686
|
-
├── prd.txt # Product requirements document
|
|
687
|
-
└── complexity-report.json
|
|
688
|
-
```
|
|
689
|
-
|
|
690
|
-
---
|
|
691
|
-
|
|
692
|
-
### Native Context Provider
|
|
693
|
-
|
|
694
|
-
Fallback provider for context when no external context tool is configured. Like native tasks, these are stored directly as `Context` type in `graph.jsonl`.
|
|
695
|
-
|
|
696
|
-
```typescript
|
|
697
|
-
interface NativeContextProvider extends ContentProvider {
|
|
698
|
-
name: 'native'
|
|
699
|
-
schemes: ['native', 'opentasks']
|
|
700
|
-
nodeTypes: ['context']
|
|
701
|
-
|
|
702
|
-
capabilities: {
|
|
703
|
-
read: true,
|
|
704
|
-
write: true,
|
|
705
|
-
delete: true,
|
|
706
|
-
search: true,
|
|
707
|
-
watch: true, // file watcher on graph.jsonl
|
|
708
|
-
ready: false
|
|
709
|
-
}
|
|
710
|
-
}
|
|
711
|
-
```
|
|
712
|
-
|
|
713
|
-
**Storage**: Native context use the `Context` type directly in `graph.jsonl`:
|
|
714
|
-
```json
|
|
715
|
-
{
|
|
716
|
-
"id": "c-a2b3",
|
|
717
|
-
"type": "context",
|
|
718
|
-
"title": "Authentication requirements",
|
|
719
|
-
"content": "## Overview\n...",
|
|
720
|
-
...
|
|
721
|
-
}
|
|
722
|
-
```
|
|
723
|
-
|
|
724
|
-
---
|
|
725
|
-
|
|
726
|
-
## Provider Registry
|
|
727
|
-
|
|
728
|
-
The provider registry manages configured providers and routes operations.
|
|
729
|
-
|
|
730
|
-
```typescript
|
|
731
|
-
interface ProviderRegistry {
|
|
732
|
-
/** Register a provider */
|
|
733
|
-
register(provider: ContentProvider): void
|
|
734
|
-
|
|
735
|
-
/** Get provider for a URI */
|
|
736
|
-
getProvider(uri: string): ContentProvider | null
|
|
737
|
-
|
|
738
|
-
/** Get provider by name */
|
|
739
|
-
getByName(name: string): ContentProvider | null
|
|
740
|
-
|
|
741
|
-
/** Get primary provider for a node type */
|
|
742
|
-
getPrimary(nodeType: 'context' | 'task'): ContentProvider
|
|
743
|
-
|
|
744
|
-
/** Get fallback provider for a node type */
|
|
745
|
-
getFallback(nodeType: 'context' | 'task'): ContentProvider
|
|
746
|
-
|
|
747
|
-
/** Resolve a URI to a node (with caching) */
|
|
748
|
-
resolve(uri: string, options?: ResolveOptions): Promise<ProviderNode | null>
|
|
749
|
-
|
|
750
|
-
/** List all registered providers */
|
|
751
|
-
list(): ContentProvider[]
|
|
752
|
-
}
|
|
753
|
-
|
|
754
|
-
interface ResolveOptions {
|
|
755
|
-
/** Skip cache and fetch fresh */
|
|
756
|
-
fresh?: boolean
|
|
757
|
-
|
|
758
|
-
/** Return cached even if stale */
|
|
759
|
-
allowStale?: boolean
|
|
760
|
-
|
|
761
|
-
/** Timeout for fetch */
|
|
762
|
-
timeout?: number
|
|
763
|
-
}
|
|
764
|
-
```
|
|
765
|
-
|
|
766
|
-
### Resolution Flow
|
|
767
|
-
|
|
768
|
-
```typescript
|
|
769
|
-
async function resolve(uri: string, options?: ResolveOptions): Promise<ProviderNode | null> {
|
|
770
|
-
// 1. Check cache (unless fresh requested)
|
|
771
|
-
if (!options?.fresh) {
|
|
772
|
-
const cached = await cache.get(uri)
|
|
773
|
-
if (cached && (!cached.stale || options?.allowStale)) {
|
|
774
|
-
return cached.node
|
|
775
|
-
}
|
|
776
|
-
}
|
|
777
|
-
|
|
778
|
-
// 2. Find provider for URI scheme
|
|
779
|
-
const provider = registry.getProvider(uri)
|
|
780
|
-
if (!provider) {
|
|
781
|
-
// Return cached if available, even without provider
|
|
782
|
-
return cache.get(uri)?.node || null
|
|
783
|
-
}
|
|
784
|
-
|
|
785
|
-
// 3. Fetch from provider
|
|
786
|
-
const id = parseIdFromUri(uri)
|
|
787
|
-
const node = await provider.get(id)
|
|
788
|
-
|
|
789
|
-
// 4. Update cache
|
|
790
|
-
if (node) {
|
|
791
|
-
await cache.set(uri, node)
|
|
792
|
-
}
|
|
793
|
-
|
|
794
|
-
return node
|
|
795
|
-
}
|
|
796
|
-
```
|
|
797
|
-
|
|
798
|
-
---
|
|
799
|
-
|
|
800
|
-
## Adapter Pattern
|
|
801
|
-
|
|
802
|
-
Adapters extend Providers with bidirectional sync capabilities. Use adapters when:
|
|
803
|
-
- Changes in OpenTasks should propagate to the external system
|
|
804
|
-
- The external system and OpenTasks need to stay in sync
|
|
805
|
-
|
|
806
|
-
### Adapter Interface
|
|
807
|
-
|
|
808
|
-
```typescript
|
|
809
|
-
/**
|
|
810
|
-
* Adapter extends Provider with write-back capabilities
|
|
811
|
-
*/
|
|
812
|
-
interface ContentAdapter extends ContentProvider {
|
|
813
|
-
/** Adapter-specific capabilities */
|
|
814
|
-
readonly adapterCapabilities: AdapterCapabilities
|
|
815
|
-
|
|
816
|
-
// === Sync Operations ===
|
|
817
|
-
|
|
818
|
-
/** Push local changes to external system */
|
|
819
|
-
push(changes: ChangeSet): Promise<PushResult>
|
|
820
|
-
|
|
821
|
-
/** Pull and merge external changes */
|
|
822
|
-
pull(): Promise<PullResult>
|
|
823
|
-
|
|
824
|
-
/** Resolve sync conflicts */
|
|
825
|
-
resolveConflict?(conflict: SyncConflict): Promise<Resolution>
|
|
826
|
-
|
|
827
|
-
/** Get sync status */
|
|
828
|
-
syncStatus(): Promise<SyncStatus>
|
|
829
|
-
}
|
|
830
|
-
|
|
831
|
-
interface AdapterCapabilities {
|
|
832
|
-
/** Can push changes to external system */
|
|
833
|
-
pushEnabled: boolean
|
|
834
|
-
|
|
835
|
-
/** Can handle conflicts */
|
|
836
|
-
conflictResolution: boolean
|
|
837
|
-
|
|
838
|
-
/** Supports incremental sync */
|
|
839
|
-
incrementalSync: boolean
|
|
840
|
-
|
|
841
|
-
/** Supports webhooks for real-time sync */
|
|
842
|
-
webhooks: boolean
|
|
843
|
-
}
|
|
844
|
-
|
|
845
|
-
interface SyncConflict {
|
|
846
|
-
uri: string
|
|
847
|
-
localVersion: ProviderNode
|
|
848
|
-
remoteVersion: ProviderNode
|
|
849
|
-
conflictType: 'update' | 'delete' | 'create'
|
|
850
|
-
}
|
|
851
|
-
|
|
852
|
-
interface Resolution {
|
|
853
|
-
winner: 'local' | 'remote' | 'merged'
|
|
854
|
-
mergedNode?: ProviderNode
|
|
855
|
-
}
|
|
856
|
-
|
|
857
|
-
interface SyncStatus {
|
|
858
|
-
lastSync: string
|
|
859
|
-
pendingPush: number
|
|
860
|
-
pendingPull: number
|
|
861
|
-
conflicts: SyncConflict[]
|
|
862
|
-
}
|
|
863
|
-
```
|
|
864
|
-
|
|
865
|
-
### Conflict Resolution Strategies
|
|
866
|
-
|
|
867
|
-
| Strategy | Description | Use Case |
|
|
868
|
-
|----------|-------------|----------|
|
|
869
|
-
| `local-wins` | Local changes overwrite remote | OpenTasks is authoritative |
|
|
870
|
-
| `remote-wins` | Remote changes overwrite local | External system is authoritative |
|
|
871
|
-
| `last-write-wins` | Most recent `updated_at` wins | Simple merge |
|
|
872
|
-
| `manual` | Queue for user resolution | Critical data |
|
|
873
|
-
| `content-hash` | Skip if content identical | Avoid false conflicts |
|
|
874
|
-
|
|
875
|
-
### Example: Linear Adapter
|
|
876
|
-
|
|
877
|
-
```typescript
|
|
878
|
-
class LinearAdapter extends LinearProvider implements ContentAdapter {
|
|
879
|
-
readonly adapterCapabilities = {
|
|
880
|
-
pushEnabled: true,
|
|
881
|
-
conflictResolution: true,
|
|
882
|
-
incrementalSync: true,
|
|
883
|
-
webhooks: true
|
|
884
|
-
}
|
|
885
|
-
|
|
886
|
-
async push(changes: ChangeSet): Promise<PushResult> {
|
|
887
|
-
const results: PushResult = { success: [], failed: [] }
|
|
888
|
-
|
|
889
|
-
for (const change of changes.updates) {
|
|
890
|
-
try {
|
|
891
|
-
await this.linearClient.updateIssue(change.id, {
|
|
892
|
-
title: change.title,
|
|
893
|
-
description: change.content,
|
|
894
|
-
state: this.mapStatusToLinear(change.status)
|
|
895
|
-
})
|
|
896
|
-
results.success.push(change.uri)
|
|
897
|
-
} catch (err) {
|
|
898
|
-
results.failed.push({ uri: change.uri, error: err })
|
|
899
|
-
}
|
|
900
|
-
}
|
|
901
|
-
|
|
902
|
-
return results
|
|
903
|
-
}
|
|
904
|
-
|
|
905
|
-
async pull(): Promise<PullResult> {
|
|
906
|
-
const since = await this.getLastSyncTimestamp()
|
|
907
|
-
const remoteChanges = await this.linearClient.issues({
|
|
908
|
-
filter: { updatedAt: { gte: since } }
|
|
909
|
-
})
|
|
910
|
-
|
|
911
|
-
return {
|
|
912
|
-
changes: remoteChanges.map(this.toOpenTasks),
|
|
913
|
-
syncTimestamp: new Date().toISOString()
|
|
914
|
-
}
|
|
915
|
-
}
|
|
916
|
-
}
|
|
917
|
-
```
|
|
918
|
-
|
|
919
|
-
---
|
|
920
|
-
|
|
921
|
-
## SyncTarget Pattern
|
|
922
|
-
|
|
923
|
-
SyncTargets are write-only integrations where OpenTasks is the source of truth.
|
|
924
|
-
|
|
925
|
-
```typescript
|
|
926
|
-
interface SyncTarget {
|
|
927
|
-
readonly name: string
|
|
928
|
-
readonly schemes: string[]
|
|
929
|
-
|
|
930
|
-
/** Export nodes to target system */
|
|
931
|
-
export(nodes: Node[]): Promise<ExportResult>
|
|
932
|
-
|
|
933
|
-
/** Map OpenTasks node to target format */
|
|
934
|
-
toTargetFormat(node: Node): unknown
|
|
935
|
-
|
|
936
|
-
/** Get export status */
|
|
937
|
-
exportStatus(): Promise<ExportStatus>
|
|
938
|
-
}
|
|
939
|
-
```
|
|
940
|
-
|
|
941
|
-
Use SyncTargets for:
|
|
942
|
-
- Exporting to read-only systems (static sites, docs)
|
|
943
|
-
- One-way mirroring to backup systems
|
|
944
|
-
- Publishing to external trackers
|
|
945
|
-
|
|
946
|
-
---
|
|
947
|
-
|
|
948
|
-
## Node Registry & ExternalNodes
|
|
949
|
-
|
|
950
|
-
The node registry bridges provider URIs to the OpenTasks graph. When an edge references an external URI, the registry manages the corresponding `ExternalNode`.
|
|
951
|
-
|
|
952
|
-
### Relationship to ExternalNode
|
|
953
|
-
|
|
954
|
-
```
|
|
955
|
-
┌─────────────────────────────────────────────────────────────────┐
|
|
956
|
-
│ Edge │
|
|
957
|
-
│ { from_id: "t-local", to_id: "beads://./bd-123", type: "..." } │
|
|
958
|
-
└─────────────────────────────────────────────────────────────────┘
|
|
959
|
-
│
|
|
960
|
-
▼
|
|
961
|
-
┌─────────────────────────────────────────────────────────────────┐
|
|
962
|
-
│ Node Registry │
|
|
963
|
-
│ - Looks up or creates ExternalNode for "beads://./bd-123" │
|
|
964
|
-
│ - Manages materialization state │
|
|
965
|
-
│ - Coordinates with Provider for fetching │
|
|
966
|
-
└─────────────────────────────────────────────────────────────────┘
|
|
967
|
-
│
|
|
968
|
-
▼
|
|
969
|
-
┌─────────────────────────────────────────────────────────────────┐
|
|
970
|
-
│ ExternalNode (in graph.jsonl) │
|
|
971
|
-
│ { │
|
|
972
|
-
│ "id": "e-p6q7", │
|
|
973
|
-
│ "type": "external", │
|
|
974
|
-
│ "uri": "beads://./bd-123", │
|
|
975
|
-
│ "source": "beads", │
|
|
976
|
-
│ "materialized": true, │
|
|
977
|
-
│ "title": "Fix login bug", // cached from provider │
|
|
978
|
-
│ "external_data": { ... } // provider-specific data │
|
|
979
|
-
│ } │
|
|
980
|
-
└─────────────────────────────────────────────────────────────────┘
|
|
981
|
-
```
|
|
982
|
-
|
|
983
|
-
### Registry Interface
|
|
984
|
-
|
|
985
|
-
```typescript
|
|
986
|
-
interface NodeRegistry {
|
|
987
|
-
/** Get or create ExternalNode for a URI */
|
|
988
|
-
ensureNode(uri: string): Promise<ExternalNode>
|
|
989
|
-
|
|
990
|
-
/** Get ExternalNode by URI (returns null if not registered) */
|
|
991
|
-
get(uri: string): Promise<ExternalNode | null>
|
|
992
|
-
|
|
993
|
-
/** Materialize a phantom node (fetch from provider) */
|
|
994
|
-
materialize(uri: string, options?: MaterializeOptions): Promise<ExternalNode>
|
|
995
|
-
|
|
996
|
-
/** Mark node as stale (needs refresh) */
|
|
997
|
-
markStale(uri: string): Promise<void>
|
|
998
|
-
|
|
999
|
-
/** List all external nodes */
|
|
1000
|
-
list(filter?: RegistryFilter): Promise<ExternalNode[]>
|
|
1001
|
-
|
|
1002
|
-
/** Remove ExternalNode (and its edges) */
|
|
1003
|
-
remove(uri: string): Promise<void>
|
|
1004
|
-
}
|
|
1005
|
-
|
|
1006
|
-
interface MaterializeOptions {
|
|
1007
|
-
/** Force refresh even if cached */
|
|
1008
|
-
force?: boolean
|
|
1009
|
-
|
|
1010
|
-
/** Timeout for provider fetch */
|
|
1011
|
-
timeout?: number
|
|
1012
|
-
|
|
1013
|
-
/** Depth to follow nested references */
|
|
1014
|
-
depth?: number
|
|
1015
|
-
}
|
|
1016
|
-
|
|
1017
|
-
interface RegistryFilter {
|
|
1018
|
-
/** Filter by provider */
|
|
1019
|
-
provider?: string
|
|
1020
|
-
|
|
1021
|
-
/** Filter by materialization state */
|
|
1022
|
-
materialized?: boolean
|
|
1023
|
-
|
|
1024
|
-
/** Filter by stale state */
|
|
1025
|
-
stale?: boolean
|
|
1026
|
-
|
|
1027
|
-
/** Filter by source type */
|
|
1028
|
-
source?: string
|
|
1029
|
-
}
|
|
1030
|
-
```
|
|
1031
|
-
|
|
1032
|
-
### Storage
|
|
1033
|
-
|
|
1034
|
-
ExternalNodes are stored in `graph.jsonl` alongside other node types (see [SCHEMA.md](./SCHEMA.md)):
|
|
1035
|
-
|
|
1036
|
-
```jsonl
|
|
1037
|
-
{"id":"e-x7k9","uuid":"...","type":"external","title":"Implement auth","uri":"beads://./bd-x7k9","source":"beads","materialized":true,"cached_at":"2025-01-26T12:00:00Z","external_data":{"status":"in_progress"},"created_at":"2025-01-26T10:00:00Z","updated_at":"2025-01-26T12:00:00Z"}
|
|
1038
|
-
{"id":"e-prd1","uuid":"...","type":"external","title":"Authentication PRD","uri":"taskmaster://./prd-1","source":"taskmaster","materialized":true,"cached_at":"2025-01-26T12:00:00Z","created_at":"2025-01-26T10:00:00Z","updated_at":"2025-01-26T12:00:00Z"}
|
|
1039
|
-
{"id":"e-jira","uuid":"...","type":"external","title":"","uri":"jira://PROJ-123","source":"jira","materialized":false,"created_at":"2025-01-26T10:00:00Z","updated_at":"2025-01-26T10:00:00Z"}
|
|
1040
|
-
```
|
|
1041
|
-
|
|
1042
|
-
**Key points:**
|
|
1043
|
-
- `materialized: false` indicates a phantom node (just the reference, no data)
|
|
1044
|
-
- `external_data` contains provider-specific fields
|
|
1045
|
-
- `cached_at` tracks freshness
|
|
1046
|
-
- Standard `id`, `uuid`, `created_at`, `updated_at` fields like other nodes
|
|
1047
|
-
|
|
1048
|
-
---
|
|
1049
|
-
|
|
1050
|
-
## Cache Strategy
|
|
1051
|
-
|
|
1052
|
-
### Cache Layers
|
|
1053
|
-
|
|
1054
|
-
```
|
|
1055
|
-
┌─────────────────────────────────────────────────────────────────┐
|
|
1056
|
-
│ Application / Client │
|
|
1057
|
-
└─────────────────────────────────────────────────────────────────┘
|
|
1058
|
-
│
|
|
1059
|
-
▼
|
|
1060
|
-
┌─────────────────────────────────────────────────────────────────┐
|
|
1061
|
-
│ Daemon (coordinator) │
|
|
1062
|
-
│ - Routes requests to appropriate cache/provider │
|
|
1063
|
-
│ - Manages materialization │
|
|
1064
|
-
│ - Handles cross-location resolution │
|
|
1065
|
-
└─────────────────────────────────────────────────────────────────┘
|
|
1066
|
-
│
|
|
1067
|
-
▼
|
|
1068
|
-
┌─────────────────────────────────────────────────────────────────┐
|
|
1069
|
-
│ ExternalNodes (in graph.jsonl) │
|
|
1070
|
-
│ - Persistent cache of external data │
|
|
1071
|
-
│ - Title, external_data for display │
|
|
1072
|
-
│ - Tracked materialization/stale state │
|
|
1073
|
-
└─────────────────────────────────────────────────────────────────┘
|
|
1074
|
-
│
|
|
1075
|
-
▼
|
|
1076
|
-
┌─────────────────────────────────────────────────────────────────┐
|
|
1077
|
-
│ SQLite Index (cache.db) │
|
|
1078
|
-
│ - Fast lookups and queries │
|
|
1079
|
-
│ - Query indexes over graph.jsonl │
|
|
1080
|
-
│ - Gitignored (can be rebuilt) │
|
|
1081
|
-
└─────────────────────────────────────────────────────────────────┘
|
|
1082
|
-
│
|
|
1083
|
-
▼
|
|
1084
|
-
┌─────────────────────────────────────────────────────────────────┐
|
|
1085
|
-
│ Provider (source of truth) │
|
|
1086
|
-
│ - Beads: .beads/issues.jsonl │
|
|
1087
|
-
│ - Taskmaster: tasks/tasks.json │
|
|
1088
|
-
│ - Linear: GraphQL API │
|
|
1089
|
-
└─────────────────────────────────────────────────────────────────┘
|
|
1090
|
-
```
|
|
1091
|
-
|
|
1092
|
-
**Important**: ExternalNodes in `graph.jsonl` are the persistent cache. The SQLite `cache.db` is an index/query accelerator that can be rebuilt from the JSONL files.
|
|
1093
|
-
|
|
1094
|
-
### Cache Invalidation
|
|
1095
|
-
|
|
1096
|
-
```typescript
|
|
1097
|
-
interface CacheConfig {
|
|
1098
|
-
/** Default TTL for cached nodes (ms) */
|
|
1099
|
-
defaultTtl: number // default: 300000 (5 minutes)
|
|
1100
|
-
|
|
1101
|
-
/** TTL overrides per provider */
|
|
1102
|
-
providerTtl?: Record<string, number>
|
|
1103
|
-
|
|
1104
|
-
/** Stale-while-revalidate window (ms) */
|
|
1105
|
-
staleWhileRevalidate: number // default: 60000 (1 minute)
|
|
1106
|
-
|
|
1107
|
-
/** Maximum cache size (entries) */
|
|
1108
|
-
maxSize: number // default: 10000
|
|
1109
|
-
}
|
|
1110
|
-
|
|
1111
|
-
// Invalidation triggers:
|
|
1112
|
-
// 1. TTL expiry
|
|
1113
|
-
// 2. Provider watch event
|
|
1114
|
-
// 3. Manual invalidation (user request)
|
|
1115
|
-
// 4. Write operation to same node
|
|
1116
|
-
```
|
|
1117
|
-
|
|
1118
|
-
### Watch-Based Invalidation
|
|
1119
|
-
|
|
1120
|
-
When a provider supports `watch()`, OpenTasks subscribes to changes:
|
|
1121
|
-
|
|
1122
|
-
```typescript
|
|
1123
|
-
// On startup, subscribe to provider changes
|
|
1124
|
-
for (const provider of registry.list()) {
|
|
1125
|
-
if (provider.capabilities.watch && provider.watch) {
|
|
1126
|
-
provider.watch((event) => {
|
|
1127
|
-
// Invalidate cache for changed node
|
|
1128
|
-
cache.markStale(event.uri)
|
|
1129
|
-
|
|
1130
|
-
// Optionally refresh immediately
|
|
1131
|
-
if (config.eagerRefresh) {
|
|
1132
|
-
registry.resolve(event.uri, { fresh: true })
|
|
1133
|
-
}
|
|
1134
|
-
})
|
|
1135
|
-
}
|
|
1136
|
-
}
|
|
1137
|
-
```
|
|
1138
|
-
|
|
1139
|
-
---
|
|
1140
|
-
|
|
1141
|
-
## Configuration
|
|
1142
|
-
|
|
1143
|
-
### Provider Configuration
|
|
1144
|
-
|
|
1145
|
-
```json
|
|
1146
|
-
// .opentasks/config.json
|
|
1147
|
-
{
|
|
1148
|
-
"version": "1.0",
|
|
1149
|
-
|
|
1150
|
-
"providers": {
|
|
1151
|
-
"issues": {
|
|
1152
|
-
"primary": "beads",
|
|
1153
|
-
"fallback": "native",
|
|
1154
|
-
"beads": {
|
|
1155
|
-
"workspace": ".",
|
|
1156
|
-
"cli": "bd"
|
|
1157
|
-
},
|
|
1158
|
-
"linear": {
|
|
1159
|
-
"api_key": "${LINEAR_API_KEY}",
|
|
1160
|
-
"team": "ENG"
|
|
1161
|
-
}
|
|
1162
|
-
},
|
|
1163
|
-
"context": {
|
|
1164
|
-
"primary": "taskmaster",
|
|
1165
|
-
"fallback": "native",
|
|
1166
|
-
"taskmaster": {
|
|
1167
|
-
"project": "."
|
|
1168
|
-
}
|
|
1169
|
-
}
|
|
1170
|
-
},
|
|
1171
|
-
|
|
1172
|
-
"cache": {
|
|
1173
|
-
"default_ttl": 300000,
|
|
1174
|
-
"stale_while_revalidate": 60000,
|
|
1175
|
-
"max_size": 10000,
|
|
1176
|
-
"provider_ttl": {
|
|
1177
|
-
"linear": 60000,
|
|
1178
|
-
"beads": 0
|
|
1179
|
-
}
|
|
1180
|
-
},
|
|
1181
|
-
|
|
1182
|
-
"sync": {
|
|
1183
|
-
"watch": true,
|
|
1184
|
-
"debounce": 1000
|
|
1185
|
-
}
|
|
1186
|
-
}
|
|
1187
|
-
```
|
|
1188
|
-
|
|
1189
|
-
### Environment Variables
|
|
1190
|
-
|
|
1191
|
-
```bash
|
|
1192
|
-
# Provider API keys
|
|
1193
|
-
export LINEAR_API_KEY=lin_api_xxxxx
|
|
1194
|
-
export JIRA_API_TOKEN=xxxxx
|
|
1195
|
-
|
|
1196
|
-
# Override primary providers
|
|
1197
|
-
export OPENTASKS_ISSUE_PROVIDER=linear
|
|
1198
|
-
export OPENTASKS_SPEC_PROVIDER=native
|
|
1199
|
-
|
|
1200
|
-
# Disable caching (for debugging)
|
|
1201
|
-
export OPENTASKS_NO_CACHE=1
|
|
1202
|
-
```
|
|
1203
|
-
|
|
1204
|
-
---
|
|
1205
|
-
|
|
1206
|
-
## Cross-Provider Edges
|
|
1207
|
-
|
|
1208
|
-
Edges can connect nodes from different providers:
|
|
1209
|
-
|
|
1210
|
-
```typescript
|
|
1211
|
-
// Context from Taskmaster implements Task from Beads
|
|
1212
|
-
{
|
|
1213
|
-
id: "x-abc123",
|
|
1214
|
-
from_id: "beads://./bd-x7k9",
|
|
1215
|
-
to_id: "taskmaster://./prd-1",
|
|
1216
|
-
type: "implements"
|
|
1217
|
-
}
|
|
1218
|
-
|
|
1219
|
-
// Native context blocks Beads issue
|
|
1220
|
-
{
|
|
1221
|
-
id: "x-def456",
|
|
1222
|
-
from_id: "native://c-local",
|
|
1223
|
-
to_id: "beads://./bd-y8z9",
|
|
1224
|
-
type: "blocks"
|
|
1225
|
-
}
|
|
1226
|
-
```
|
|
1227
|
-
|
|
1228
|
-
### Cross-Provider Queries
|
|
1229
|
-
|
|
1230
|
-
```typescript
|
|
1231
|
-
// Get all tasks implementing a context (across providers)
|
|
1232
|
-
async function getImplementingIssues(specUri: string): Promise<ProviderNode[]> {
|
|
1233
|
-
// 1. Get edges from this context
|
|
1234
|
-
const edges = await edgeStore.query({
|
|
1235
|
-
to_id: specUri,
|
|
1236
|
-
type: 'implements'
|
|
1237
|
-
})
|
|
1238
|
-
|
|
1239
|
-
// 2. Resolve each source node (may be from different providers)
|
|
1240
|
-
return Promise.all(
|
|
1241
|
-
edges.map(edge => registry.resolve(edge.from_id))
|
|
1242
|
-
)
|
|
1243
|
-
}
|
|
1244
|
-
|
|
1245
|
-
// Get blockers for a task (may include context and tasks)
|
|
1246
|
-
async function getBlockers(issueUri: string): Promise<ProviderNode[]> {
|
|
1247
|
-
const edges = await edgeStore.query({
|
|
1248
|
-
to_id: issueUri,
|
|
1249
|
-
type: 'blocks'
|
|
1250
|
-
})
|
|
1251
|
-
|
|
1252
|
-
return Promise.all(
|
|
1253
|
-
edges.map(edge => registry.resolve(edge.from_id))
|
|
1254
|
-
)
|
|
1255
|
-
}
|
|
1256
|
-
```
|
|
1257
|
-
|
|
1258
|
-
---
|
|
1259
|
-
|
|
1260
|
-
## Ready Query
|
|
1261
|
-
|
|
1262
|
-
The `ready()` query finds nodes that are ready to work on. This requires checking cross-provider blocking relationships.
|
|
1263
|
-
|
|
1264
|
-
```typescript
|
|
1265
|
-
async function ready(): Promise<ProviderNode[]> {
|
|
1266
|
-
// 1. Get all open tasks from primary provider
|
|
1267
|
-
const provider = registry.getPrimary('task')
|
|
1268
|
-
let candidates: ProviderNode[]
|
|
1269
|
-
|
|
1270
|
-
if (provider.capabilities.ready && provider.ready) {
|
|
1271
|
-
// Provider has native ready support (e.g., Beads `bd ready`)
|
|
1272
|
-
candidates = await provider.ready()
|
|
1273
|
-
} else {
|
|
1274
|
-
// Fall back to listing open tasks
|
|
1275
|
-
candidates = await provider.list({ status: 'open' })
|
|
1276
|
-
}
|
|
1277
|
-
|
|
1278
|
-
// 2. Filter by OpenTasks edges (cross-provider blockers)
|
|
1279
|
-
const ready: ProviderNode[] = []
|
|
1280
|
-
|
|
1281
|
-
for (const candidate of candidates) {
|
|
1282
|
-
const blockers = await edgeStore.query({
|
|
1283
|
-
to_id: candidate.uri,
|
|
1284
|
-
type: 'blocks'
|
|
1285
|
-
})
|
|
1286
|
-
|
|
1287
|
-
// Check if all blockers are resolved
|
|
1288
|
-
const unresolvedBlockers = await Promise.all(
|
|
1289
|
-
blockers.map(async (edge) => {
|
|
1290
|
-
const blocker = await registry.resolve(edge.from_id)
|
|
1291
|
-
return blocker && blocker.status !== 'closed'
|
|
1292
|
-
})
|
|
1293
|
-
)
|
|
1294
|
-
|
|
1295
|
-
if (!unresolvedBlockers.some(Boolean)) {
|
|
1296
|
-
ready.push(candidate)
|
|
1297
|
-
}
|
|
1298
|
-
}
|
|
1299
|
-
|
|
1300
|
-
return ready
|
|
1301
|
-
}
|
|
1302
|
-
```
|
|
1303
|
-
|
|
1304
|
-
---
|
|
1305
|
-
|
|
1306
|
-
## Adding a New Provider
|
|
1307
|
-
|
|
1308
|
-
To add a new provider:
|
|
1309
|
-
|
|
1310
|
-
1. **Implement the interface**
|
|
1311
|
-
|
|
1312
|
-
```typescript
|
|
1313
|
-
class MyProvider implements ContentProvider {
|
|
1314
|
-
name = 'myprovider'
|
|
1315
|
-
schemes = ['myprovider', 'mp']
|
|
1316
|
-
nodeTypes = ['task'] // or ['context'] or both
|
|
1317
|
-
|
|
1318
|
-
capabilities = {
|
|
1319
|
-
read: true,
|
|
1320
|
-
write: true,
|
|
1321
|
-
delete: false,
|
|
1322
|
-
search: true,
|
|
1323
|
-
watch: false,
|
|
1324
|
-
ready: false
|
|
1325
|
-
}
|
|
1326
|
-
|
|
1327
|
-
async get(id: string): Promise<ProviderNode | null> {
|
|
1328
|
-
// Implement fetching
|
|
1329
|
-
}
|
|
1330
|
-
|
|
1331
|
-
async list(filter?: ProviderFilter): Promise<ProviderNode[]> {
|
|
1332
|
-
// Implement listing
|
|
1333
|
-
}
|
|
1334
|
-
|
|
1335
|
-
toOpenTasks(native: MyNativeFormat): ProviderNode {
|
|
1336
|
-
// Implement mapping
|
|
1337
|
-
}
|
|
1338
|
-
|
|
1339
|
-
fromOpenTasks(node: ProviderNode): MyNativeFormat {
|
|
1340
|
-
// Implement reverse mapping
|
|
1341
|
-
}
|
|
1342
|
-
}
|
|
1343
|
-
```
|
|
1344
|
-
|
|
1345
|
-
2. **Register the provider**
|
|
1346
|
-
|
|
1347
|
-
```typescript
|
|
1348
|
-
import { registry } from 'opentasks'
|
|
1349
|
-
|
|
1350
|
-
registry.register(new MyProvider())
|
|
1351
|
-
```
|
|
1352
|
-
|
|
1353
|
-
3. **Configure in config.json**
|
|
1354
|
-
|
|
1355
|
-
```json
|
|
1356
|
-
{
|
|
1357
|
-
"providers": {
|
|
1358
|
-
"issues": {
|
|
1359
|
-
"primary": "myprovider",
|
|
1360
|
-
"myprovider": {
|
|
1361
|
-
"api_key": "${MY_API_KEY}"
|
|
1362
|
-
}
|
|
1363
|
-
}
|
|
1364
|
-
}
|
|
1365
|
-
}
|
|
1366
|
-
```
|
|
1367
|
-
|
|
1368
|
-
---
|
|
1369
|
-
|
|
1370
|
-
## Analogous Systems
|
|
1371
|
-
|
|
1372
|
-
The federated graph model draws inspiration from:
|
|
1373
|
-
|
|
1374
|
-
| System | Pattern | Similarity |
|
|
1375
|
-
|--------|---------|------------|
|
|
1376
|
-
| **RDF/Linked Data** | URIs reference external resources | Node URIs can point anywhere |
|
|
1377
|
-
| **GraphQL Federation** | Gateway stitches across services | OpenTasks stitches across providers |
|
|
1378
|
-
| **Git Object Model** | Trees (structure) separate from blobs (content) | Edges separate from node content |
|
|
1379
|
-
| **Neo4j + MongoDB** | Graph DB for relationships, doc DB for content | OpenTasks for graph, providers for content |
|
|
1380
|
-
| **Kubernetes + External Secrets** | K8s references, external systems own data | OpenTasks references, providers own data |
|
|
1381
|
-
|
|
1382
|
-
---
|
|
1383
|
-
|
|
1384
|
-
## Open Questions
|
|
1385
|
-
|
|
1386
|
-
### Resolved
|
|
1387
|
-
- [x] **Provider discovery**: Providers configured in `.opentasks/config.json`; auto-detection is optional enhancement
|
|
1388
|
-
- [x] **Bidirectional edges**: Providers don't need to know about OpenTasks edges; edges are OpenTasks-owned
|
|
1389
|
-
|
|
1390
|
-
### Open
|
|
1391
|
-
- [ ] **Multi-workspace**: How to handle multiple Beads workspaces in same project? Multiple provider instances?
|
|
1392
|
-
- [ ] **Conflict resolution**: When edge says "blocks" but provider says "closed"? Trust provider status, mark edge stale?
|
|
1393
|
-
- [ ] **Provider versioning**: How to handle provider schema changes? Migration scripts per provider?
|
|
1394
|
-
- [ ] **Adapter sync frequency**: How often should adapters sync? Event-driven vs polling vs manual?
|
|
1395
|
-
- [ ] **Cross-location providers**: Can a provider span multiple locations? Or one provider instance per location?
|
|
1396
|
-
- [ ] **Provider health checks**: Should daemon periodically verify provider availability?
|
|
1397
|
-
- [ ] **Materialization depth**: When materializing, how deep to follow nested external references?
|
|
1398
|
-
|
|
1399
|
-
---
|
|
1400
|
-
|
|
1401
|
-
## References
|
|
1402
|
-
|
|
1403
|
-
### External
|
|
1404
|
-
- [Beads Documentation](https://github.com/steveyegge/beads)
|
|
1405
|
-
- [Taskmaster Documentation](https://github.com/eyaltoledano/claude-task-master)
|
|
1406
|
-
- [Linear API](https://developers.linear.app/docs)
|
|
1407
|
-
|
|
1408
|
-
### Internal
|
|
1409
|
-
- [DESIGN.md](./DESIGN.md) — Design rationale and core concepts
|
|
1410
|
-
- [SCHEMA.md](./SCHEMA.md) — Data model (ExternalNode, edges)
|
|
1411
|
-
- [PERSISTENCE.md](./PERSISTENCE.md) — Storage layer and sync
|
|
1412
|
-
- [ARCHITECTURE.md](./ARCHITECTURE.md) — Daemon, locations, URIs
|