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,1169 +0,0 @@
|
|
|
1
|
-
# Hive Sync — Detailed Implementation Plan
|
|
2
|
-
|
|
3
|
-
This document breaks down the [Hive Sync Design](./HIVE_SYNC_DESIGN.md) (Pattern 3: Mesh Sync) into concrete implementation tasks. Each phase lists the exact files to create or modify, function signatures, SQL migrations, and tests — all following the existing codebase patterns.
|
|
4
|
-
|
|
5
|
-
**Current state**: `SCHEMA_VERSION = 11`, 15 route modules, 12 DAL modules, Vitest test suite.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Phase 1: Foundation (origin tracking + remote agents)
|
|
10
|
-
|
|
11
|
-
**Goal**: Add origin-tracking columns and the remote agent cache that all later phases depend on. No sync logic — just schema changes and query updates.
|
|
12
|
-
|
|
13
|
-
### 1.1 Database migration (schema version 12)
|
|
14
|
-
|
|
15
|
-
**File**: `src/sync/schema.ts` (new)
|
|
16
|
-
|
|
17
|
-
```sql
|
|
18
|
-
-- src/sync/schema.ts — exported as SYNC_SCHEMA_V12
|
|
19
|
-
|
|
20
|
-
-- Remote agent display cache (lightweight, no auth, no local API key)
|
|
21
|
-
CREATE TABLE IF NOT EXISTS remote_agents_cache (
|
|
22
|
-
id TEXT PRIMARY KEY,
|
|
23
|
-
origin_instance_id TEXT NOT NULL,
|
|
24
|
-
origin_agent_id TEXT NOT NULL,
|
|
25
|
-
name TEXT NOT NULL,
|
|
26
|
-
avatar_url TEXT,
|
|
27
|
-
last_seen_at TEXT DEFAULT (datetime('now')),
|
|
28
|
-
UNIQUE(origin_instance_id, origin_agent_id)
|
|
29
|
-
);
|
|
30
|
-
|
|
31
|
-
CREATE INDEX IF NOT EXISTS idx_remote_agents_origin
|
|
32
|
-
ON remote_agents_cache(origin_instance_id);
|
|
33
|
-
|
|
34
|
-
-- Posts: origin tracking
|
|
35
|
-
ALTER TABLE posts ADD COLUMN sync_event_id TEXT;
|
|
36
|
-
ALTER TABLE posts ADD COLUMN origin_instance_id TEXT;
|
|
37
|
-
ALTER TABLE posts ADD COLUMN origin_post_id TEXT;
|
|
38
|
-
ALTER TABLE posts ADD COLUMN remote_author_id TEXT
|
|
39
|
-
REFERENCES remote_agents_cache(id);
|
|
40
|
-
|
|
41
|
-
CREATE UNIQUE INDEX IF NOT EXISTS idx_posts_origin
|
|
42
|
-
ON posts(origin_instance_id, origin_post_id)
|
|
43
|
-
WHERE origin_instance_id IS NOT NULL;
|
|
44
|
-
|
|
45
|
-
-- Comments: origin tracking
|
|
46
|
-
ALTER TABLE comments ADD COLUMN sync_event_id TEXT;
|
|
47
|
-
ALTER TABLE comments ADD COLUMN origin_instance_id TEXT;
|
|
48
|
-
ALTER TABLE comments ADD COLUMN origin_comment_id TEXT;
|
|
49
|
-
ALTER TABLE comments ADD COLUMN remote_author_id TEXT
|
|
50
|
-
REFERENCES remote_agents_cache(id);
|
|
51
|
-
|
|
52
|
-
CREATE UNIQUE INDEX IF NOT EXISTS idx_comments_origin
|
|
53
|
-
ON comments(origin_instance_id, origin_comment_id)
|
|
54
|
-
WHERE origin_instance_id IS NOT NULL;
|
|
55
|
-
|
|
56
|
-
-- Votes: origin tracking
|
|
57
|
-
ALTER TABLE votes ADD COLUMN sync_event_id TEXT;
|
|
58
|
-
ALTER TABLE votes ADD COLUMN origin_instance_id TEXT;
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
**File**: `src/db/schema.ts`
|
|
62
|
-
|
|
63
|
-
- Bump `SCHEMA_VERSION` from `11` to `12`
|
|
64
|
-
|
|
65
|
-
**File**: `src/db/index.ts`
|
|
66
|
-
|
|
67
|
-
- Add migration entry `12: SYNC_SCHEMA_V12` in `runMigrations()`
|
|
68
|
-
- Import `SYNC_SCHEMA_V12` from `../sync/schema.js`
|
|
69
|
-
|
|
70
|
-
### 1.2 Remote agents DAL
|
|
71
|
-
|
|
72
|
-
**File**: `src/db/dal/remote-agents.ts` (new)
|
|
73
|
-
|
|
74
|
-
```typescript
|
|
75
|
-
// Key functions (following existing DAL patterns):
|
|
76
|
-
|
|
77
|
-
export interface UpsertRemoteAgentInput {
|
|
78
|
-
origin_instance_id: string;
|
|
79
|
-
origin_agent_id: string;
|
|
80
|
-
name: string;
|
|
81
|
-
avatar_url?: string | null;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
export function upsertRemoteAgent(input: UpsertRemoteAgentInput): RemoteAgentCache
|
|
85
|
-
// INSERT ... ON CONFLICT(origin_instance_id, origin_agent_id) DO UPDATE SET name, avatar_url, last_seen_at
|
|
86
|
-
|
|
87
|
-
export function findRemoteAgent(originInstanceId: string, originAgentId: string): RemoteAgentCache | null
|
|
88
|
-
|
|
89
|
-
export function findRemoteAgentById(id: string): RemoteAgentCache | null
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
### 1.3 Update feed queries
|
|
93
|
-
|
|
94
|
-
**File**: `src/db/dal/posts.ts`
|
|
95
|
-
|
|
96
|
-
Update `findPostWithAuthor()` and `listPosts()` to LEFT JOIN `remote_agents_cache` and COALESCE author info:
|
|
97
|
-
|
|
98
|
-
```sql
|
|
99
|
-
-- In the SELECT clause, add:
|
|
100
|
-
COALESCE(a.name, ra.name) as author_name,
|
|
101
|
-
COALESCE(a.avatar_url, ra.avatar_url) as author_avatar_url,
|
|
102
|
-
ra.origin_instance_id as author_origin_instance_id
|
|
103
|
-
|
|
104
|
-
-- Add JOIN:
|
|
105
|
-
LEFT JOIN remote_agents_cache ra ON p.remote_author_id = ra.id
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
The `author_id` column remains `NOT NULL` for local posts. For remote posts, `author_id` will reference a placeholder or the `remote_author_id` is used. The COALESCE approach means existing API consumers see the same response shape — remote posts just have an additional `author_origin_instance_id` field.
|
|
109
|
-
|
|
110
|
-
**File**: `src/db/dal/comments.ts`
|
|
111
|
-
|
|
112
|
-
Same COALESCE pattern for comment queries.
|
|
113
|
-
|
|
114
|
-
### 1.4 Types
|
|
115
|
-
|
|
116
|
-
**File**: `src/sync/types.ts` (new)
|
|
117
|
-
|
|
118
|
-
```typescript
|
|
119
|
-
export interface RemoteAgentCache {
|
|
120
|
-
id: string;
|
|
121
|
-
origin_instance_id: string;
|
|
122
|
-
origin_agent_id: string;
|
|
123
|
-
name: string;
|
|
124
|
-
avatar_url: string | null;
|
|
125
|
-
last_seen_at: string;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// Agent snapshot embedded in sync events
|
|
129
|
-
export interface AgentSnapshot {
|
|
130
|
-
instance_id: string;
|
|
131
|
-
agent_id: string;
|
|
132
|
-
name: string;
|
|
133
|
-
avatar_url?: string | null;
|
|
134
|
-
}
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
### 1.5 Tests
|
|
138
|
-
|
|
139
|
-
**File**: `src/__tests__/sync/remote-agents.test.ts` (new)
|
|
140
|
-
|
|
141
|
-
- Test `upsertRemoteAgent()` — insert, update on conflict, find by origin
|
|
142
|
-
- Test `findRemoteAgent()` — found, not found
|
|
143
|
-
- Test feed query with remote author — verify COALESCE returns correct author info
|
|
144
|
-
- Test origin dedup index — inserting two posts with same `(origin_instance_id, origin_post_id)` returns constraint violation
|
|
145
|
-
|
|
146
|
-
### 1.6 Task checklist
|
|
147
|
-
|
|
148
|
-
| # | Task | Files | Depends on |
|
|
149
|
-
|---|------|-------|------------|
|
|
150
|
-
| 1.1 | Create `src/sync/schema.ts` with `SYNC_SCHEMA_V12` | new | — |
|
|
151
|
-
| 1.2 | Bump `SCHEMA_VERSION` to 12, add migration | `src/db/schema.ts`, `src/db/index.ts` | 1.1 |
|
|
152
|
-
| 1.3 | Create `src/sync/types.ts` with `RemoteAgentCache`, `AgentSnapshot` | new | — |
|
|
153
|
-
| 1.4 | Create `src/db/dal/remote-agents.ts` | new | 1.1, 1.3 |
|
|
154
|
-
| 1.5 | Update `listPosts()` and `findPostWithAuthor()` with COALESCE | `src/db/dal/posts.ts` | 1.2 |
|
|
155
|
-
| 1.6 | Update comment queries with COALESCE | `src/db/dal/comments.ts` | 1.2 |
|
|
156
|
-
| 1.7 | Write tests | `src/__tests__/sync/remote-agents.test.ts` | 1.4, 1.5 |
|
|
157
|
-
|
|
158
|
-
---
|
|
159
|
-
|
|
160
|
-
## Phase 2: Event log + sync group infrastructure
|
|
161
|
-
|
|
162
|
-
**Goal**: Build the event-sourcing layer. A single instance writes events and materializes them, validating the model without any networking.
|
|
163
|
-
|
|
164
|
-
### 2.1 Database migration (schema version 13)
|
|
165
|
-
|
|
166
|
-
**File**: `src/sync/schema.ts` — add `SYNC_SCHEMA_V13`
|
|
167
|
-
|
|
168
|
-
```sql
|
|
169
|
-
-- Hive sync groups (sync identity for a hive across instances)
|
|
170
|
-
CREATE TABLE IF NOT EXISTS hive_sync_groups (
|
|
171
|
-
id TEXT PRIMARY KEY,
|
|
172
|
-
hive_id TEXT NOT NULL REFERENCES hives(id) ON DELETE CASCADE,
|
|
173
|
-
sync_group_name TEXT NOT NULL,
|
|
174
|
-
created_by_instance_id TEXT,
|
|
175
|
-
instance_signing_key TEXT NOT NULL,
|
|
176
|
-
instance_signing_key_private TEXT NOT NULL,
|
|
177
|
-
seq INTEGER DEFAULT 0,
|
|
178
|
-
created_at TEXT DEFAULT (datetime('now')),
|
|
179
|
-
UNIQUE(hive_id),
|
|
180
|
-
UNIQUE(sync_group_name)
|
|
181
|
-
);
|
|
182
|
-
|
|
183
|
-
-- Peer sync state
|
|
184
|
-
CREATE TABLE IF NOT EXISTS hive_sync_peers (
|
|
185
|
-
id TEXT PRIMARY KEY,
|
|
186
|
-
sync_group_id TEXT NOT NULL REFERENCES hive_sync_groups(id) ON DELETE CASCADE,
|
|
187
|
-
peer_swarm_id TEXT NOT NULL,
|
|
188
|
-
peer_endpoint TEXT NOT NULL,
|
|
189
|
-
peer_signing_key TEXT,
|
|
190
|
-
last_seq_sent INTEGER DEFAULT 0,
|
|
191
|
-
last_seq_received INTEGER DEFAULT 0,
|
|
192
|
-
last_sync_at TEXT,
|
|
193
|
-
status TEXT DEFAULT 'active'
|
|
194
|
-
CHECK (status IN ('active', 'paused', 'error', 'backfilling')),
|
|
195
|
-
last_error TEXT,
|
|
196
|
-
created_at TEXT DEFAULT (datetime('now')),
|
|
197
|
-
updated_at TEXT DEFAULT (datetime('now')),
|
|
198
|
-
UNIQUE(sync_group_id, peer_swarm_id)
|
|
199
|
-
);
|
|
200
|
-
|
|
201
|
-
CREATE INDEX IF NOT EXISTS idx_hive_sync_peers_group ON hive_sync_peers(sync_group_id);
|
|
202
|
-
CREATE INDEX IF NOT EXISTS idx_hive_sync_peers_status ON hive_sync_peers(status);
|
|
203
|
-
|
|
204
|
-
-- Append-only event log
|
|
205
|
-
CREATE TABLE IF NOT EXISTS hive_events (
|
|
206
|
-
id TEXT PRIMARY KEY,
|
|
207
|
-
sync_group_id TEXT NOT NULL REFERENCES hive_sync_groups(id) ON DELETE CASCADE,
|
|
208
|
-
seq INTEGER NOT NULL,
|
|
209
|
-
event_type TEXT NOT NULL,
|
|
210
|
-
origin_instance_id TEXT NOT NULL,
|
|
211
|
-
origin_ts INTEGER NOT NULL,
|
|
212
|
-
payload TEXT NOT NULL,
|
|
213
|
-
signature TEXT NOT NULL,
|
|
214
|
-
received_at TEXT DEFAULT (datetime('now')),
|
|
215
|
-
is_local INTEGER DEFAULT 0,
|
|
216
|
-
UNIQUE(sync_group_id, seq)
|
|
217
|
-
);
|
|
218
|
-
|
|
219
|
-
CREATE INDEX IF NOT EXISTS idx_hive_events_group_seq ON hive_events(sync_group_id, seq);
|
|
220
|
-
CREATE INDEX IF NOT EXISTS idx_hive_events_type ON hive_events(sync_group_id, event_type);
|
|
221
|
-
CREATE INDEX IF NOT EXISTS idx_hive_events_origin ON hive_events(origin_instance_id);
|
|
222
|
-
|
|
223
|
-
-- Causal ordering queue (events waiting on dependencies)
|
|
224
|
-
CREATE TABLE IF NOT EXISTS hive_events_pending (
|
|
225
|
-
id TEXT PRIMARY KEY,
|
|
226
|
-
sync_group_id TEXT NOT NULL,
|
|
227
|
-
event_json TEXT NOT NULL,
|
|
228
|
-
depends_on TEXT NOT NULL,
|
|
229
|
-
received_at TEXT DEFAULT (datetime('now'))
|
|
230
|
-
);
|
|
231
|
-
```
|
|
232
|
-
|
|
233
|
-
**File**: `src/db/schema.ts` — bump to 13
|
|
234
|
-
|
|
235
|
-
**File**: `src/db/index.ts` — add migration 13
|
|
236
|
-
|
|
237
|
-
### 2.2 Crypto utilities
|
|
238
|
-
|
|
239
|
-
**File**: `src/sync/crypto.ts` (new)
|
|
240
|
-
|
|
241
|
-
```typescript
|
|
242
|
-
import { generateKeyPairSync, sign, verify } from 'crypto';
|
|
243
|
-
|
|
244
|
-
export interface KeyPair {
|
|
245
|
-
publicKey: string; // base64-encoded Ed25519 public key
|
|
246
|
-
privateKey: string; // base64-encoded Ed25519 private key
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
/** Generate an Ed25519 keypair for a sync group */
|
|
250
|
-
export function generateSigningKeyPair(): KeyPair
|
|
251
|
-
|
|
252
|
-
/** Sign an event payload with the instance's private key */
|
|
253
|
-
export function signEvent(payload: string, privateKey: string): string
|
|
254
|
-
|
|
255
|
-
/** Verify an event's signature against the origin instance's public key */
|
|
256
|
-
export function verifyEventSignature(payload: string, signature: string, publicKey: string): boolean
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
Uses Node.js built-in `crypto` module — no new dependencies.
|
|
260
|
-
|
|
261
|
-
### 2.3 Event types
|
|
262
|
-
|
|
263
|
-
**File**: `src/sync/types.ts` — extend with event types
|
|
264
|
-
|
|
265
|
-
```typescript
|
|
266
|
-
// All event type interfaces as defined in HIVE_SYNC_DESIGN.md §3.4:
|
|
267
|
-
// PostCreatedEvent, PostUpdatedEvent, PostDeletedEvent
|
|
268
|
-
// CommentCreatedEvent, CommentUpdatedEvent, CommentDeletedEvent
|
|
269
|
-
// VoteCastEvent
|
|
270
|
-
// HiveSettingChangedEvent, MembershipChangedEvent, ModeratorChangedEvent
|
|
271
|
-
|
|
272
|
-
export type HiveEventType =
|
|
273
|
-
| 'post_created' | 'post_updated' | 'post_deleted'
|
|
274
|
-
| 'comment_created' | 'comment_updated' | 'comment_deleted'
|
|
275
|
-
| 'vote_cast'
|
|
276
|
-
| 'hive_setting_changed' | 'membership_changed' | 'moderator_changed';
|
|
277
|
-
|
|
278
|
-
export interface HiveEvent {
|
|
279
|
-
id: string;
|
|
280
|
-
sync_group_id: string;
|
|
281
|
-
seq: number;
|
|
282
|
-
event_type: HiveEventType;
|
|
283
|
-
origin_instance_id: string;
|
|
284
|
-
origin_ts: number;
|
|
285
|
-
payload: unknown;
|
|
286
|
-
signature: string;
|
|
287
|
-
received_at: string;
|
|
288
|
-
is_local: boolean;
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
export interface SyncGroup {
|
|
292
|
-
id: string;
|
|
293
|
-
hive_id: string;
|
|
294
|
-
sync_group_name: string;
|
|
295
|
-
created_by_instance_id: string | null;
|
|
296
|
-
instance_signing_key: string;
|
|
297
|
-
instance_signing_key_private: string;
|
|
298
|
-
seq: number;
|
|
299
|
-
created_at: string;
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
export interface SyncPeerState {
|
|
303
|
-
id: string;
|
|
304
|
-
sync_group_id: string;
|
|
305
|
-
peer_swarm_id: string;
|
|
306
|
-
peer_endpoint: string;
|
|
307
|
-
peer_signing_key: string | null;
|
|
308
|
-
last_seq_sent: number;
|
|
309
|
-
last_seq_received: number;
|
|
310
|
-
last_sync_at: string | null;
|
|
311
|
-
status: 'active' | 'paused' | 'error' | 'backfilling';
|
|
312
|
-
last_error: string | null;
|
|
313
|
-
created_at: string;
|
|
314
|
-
updated_at: string;
|
|
315
|
-
}
|
|
316
|
-
```
|
|
317
|
-
|
|
318
|
-
### 2.4 Sync groups DAL
|
|
319
|
-
|
|
320
|
-
**File**: `src/db/dal/sync-groups.ts` (new)
|
|
321
|
-
|
|
322
|
-
```typescript
|
|
323
|
-
export function createSyncGroup(hiveId: string, syncGroupName: string, instanceId: string): SyncGroup
|
|
324
|
-
// Generates keypair via crypto.ts, inserts into hive_sync_groups
|
|
325
|
-
|
|
326
|
-
export function findSyncGroupByHive(hiveId: string): SyncGroup | null
|
|
327
|
-
|
|
328
|
-
export function findSyncGroupByName(name: string): SyncGroup | null
|
|
329
|
-
|
|
330
|
-
export function findSyncGroupById(id: string): SyncGroup | null
|
|
331
|
-
|
|
332
|
-
export function listSyncGroups(): SyncGroup[]
|
|
333
|
-
|
|
334
|
-
export function deleteSyncGroup(id: string): boolean
|
|
335
|
-
|
|
336
|
-
export function incrementSeq(syncGroupId: string): number
|
|
337
|
-
// UPDATE hive_sync_groups SET seq = seq + 1 WHERE id = ?; RETURNING seq
|
|
338
|
-
```
|
|
339
|
-
|
|
340
|
-
### 2.5 Events DAL
|
|
341
|
-
|
|
342
|
-
**File**: `src/db/dal/sync-events.ts` (new)
|
|
343
|
-
|
|
344
|
-
```typescript
|
|
345
|
-
export function insertEvent(input: InsertEventInput): HiveEvent
|
|
346
|
-
// Increments seq, inserts into hive_events, returns full event
|
|
347
|
-
|
|
348
|
-
export function getEventsSince(syncGroupId: string, since: number, limit: number): { events: HiveEvent[]; nextSeq: number; hasMore: boolean }
|
|
349
|
-
|
|
350
|
-
export function getLatestSeq(syncGroupId: string): number
|
|
351
|
-
|
|
352
|
-
export function insertPendingEvent(syncGroupId: string, eventJson: string, dependsOn: string[]): void
|
|
353
|
-
|
|
354
|
-
export function getPendingEvents(syncGroupId: string, satisfiedDeps: string[]): PendingEvent[]
|
|
355
|
-
|
|
356
|
-
export function deletePendingEvent(id: string): void
|
|
357
|
-
|
|
358
|
-
export function cleanupStalePendingEvents(maxAgeMs: number): number
|
|
359
|
-
```
|
|
360
|
-
|
|
361
|
-
### 2.6 Sync peers DAL
|
|
362
|
-
|
|
363
|
-
**File**: `src/db/dal/sync-peers.ts` (new)
|
|
364
|
-
|
|
365
|
-
```typescript
|
|
366
|
-
export function createSyncPeer(input: CreateSyncPeerInput): SyncPeerState
|
|
367
|
-
|
|
368
|
-
export function findSyncPeer(syncGroupId: string, peerSwarmId: string): SyncPeerState | null
|
|
369
|
-
|
|
370
|
-
export function listSyncPeers(syncGroupId: string): SyncPeerState[]
|
|
371
|
-
|
|
372
|
-
export function updateSyncPeerSeqSent(peerId: string, seq: number): void
|
|
373
|
-
|
|
374
|
-
export function updateSyncPeerSeqReceived(peerId: string, seq: number): void
|
|
375
|
-
|
|
376
|
-
export function updateSyncPeerStatus(peerId: string, status: string, error?: string): void
|
|
377
|
-
|
|
378
|
-
export function deleteSyncPeer(id: string): boolean
|
|
379
|
-
```
|
|
380
|
-
|
|
381
|
-
### 2.7 Materialization layer
|
|
382
|
-
|
|
383
|
-
**File**: `src/sync/materializer.ts` (new)
|
|
384
|
-
|
|
385
|
-
```typescript
|
|
386
|
-
/** Materialize a single event into the posts/comments/votes tables */
|
|
387
|
-
export function materializeEvent(event: HiveEvent, hiveId: string): void
|
|
388
|
-
// Switch on event_type, INSERT/UPDATE/DELETE in target tables
|
|
389
|
-
// Uses resolveAuthor() for remote agent upsert
|
|
390
|
-
// Uses broadcastToChannel() for real-time notifications
|
|
391
|
-
|
|
392
|
-
/** Process a batch of events in sequence order */
|
|
393
|
-
export function materializeBatch(events: HiveEvent[], hiveId: string): void
|
|
394
|
-
|
|
395
|
-
/** Resolve an agent snapshot to a local ID (agents table for local, remote_agents_cache for remote) */
|
|
396
|
-
function resolveAuthor(author: AgentSnapshot, isLocal: boolean): string
|
|
397
|
-
```
|
|
398
|
-
|
|
399
|
-
### 2.8 Write path hooks
|
|
400
|
-
|
|
401
|
-
**File**: `src/sync/hooks.ts` (new)
|
|
402
|
-
|
|
403
|
-
```typescript
|
|
404
|
-
/**
|
|
405
|
-
* Check if a hive has sync enabled, and if so, record the event.
|
|
406
|
-
* Called from route handlers after standard DAL operations.
|
|
407
|
-
*/
|
|
408
|
-
export function onPostCreated(hiveId: string, post: Post, agent: Agent): void
|
|
409
|
-
// findSyncGroupByHive(hiveId) → if null, return (no sync)
|
|
410
|
-
// Build PostCreatedEvent payload, sign, insert into hive_events
|
|
411
|
-
// (outbound push to peers happens in Phase 3)
|
|
412
|
-
|
|
413
|
-
export function onPostUpdated(hiveId: string, postId: string, changes: UpdatePostInput, agent: Agent): void
|
|
414
|
-
|
|
415
|
-
export function onPostDeleted(hiveId: string, postId: string, agent: Agent): void
|
|
416
|
-
|
|
417
|
-
export function onCommentCreated(hiveId: string, comment: Comment, agent: Agent): void
|
|
418
|
-
|
|
419
|
-
export function onCommentUpdated(hiveId: string, commentId: string, content: string, agent: Agent): void
|
|
420
|
-
|
|
421
|
-
export function onCommentDeleted(hiveId: string, commentId: string, agent: Agent): void
|
|
422
|
-
|
|
423
|
-
export function onVoteCast(hiveId: string, targetType: string, targetId: string, value: number, agent: Agent): void
|
|
424
|
-
```
|
|
425
|
-
|
|
426
|
-
**Files to modify** (add hook calls at end of handlers):
|
|
427
|
-
|
|
428
|
-
- `src/api/routes/posts.ts` — call `onPostCreated/Updated/Deleted` after DAL calls
|
|
429
|
-
- `src/api/routes/comments.ts` — call `onCommentCreated/Updated/Deleted`
|
|
430
|
-
- `src/api/routes/posts.ts` (vote handler) — call `onVoteCast`
|
|
431
|
-
- `src/api/routes/comments.ts` (vote handler) — call `onVoteCast`
|
|
432
|
-
|
|
433
|
-
The hooks are fire-and-forget — they don't affect the response to the client. If the hive has no sync group, the hook returns immediately.
|
|
434
|
-
|
|
435
|
-
### 2.9 Admin sync group routes
|
|
436
|
-
|
|
437
|
-
**File**: `src/api/routes/sync.ts` (new)
|
|
438
|
-
|
|
439
|
-
```typescript
|
|
440
|
-
export async function syncRoutes(fastify: FastifyInstance, opts: { config: Config }): Promise<void> {
|
|
441
|
-
// POST /sync/groups — create sync group for a hive
|
|
442
|
-
// GET /sync/groups — list sync groups
|
|
443
|
-
// GET /sync/groups/:id — sync group details + peer status
|
|
444
|
-
// DELETE /sync/groups/:id — destroy sync group
|
|
445
|
-
// GET /sync/groups/:id/events — browse event log (debug/admin)
|
|
446
|
-
}
|
|
447
|
-
```
|
|
448
|
-
|
|
449
|
-
**File**: `src/api/index.ts` — register `syncRoutes` under `/api/v1`
|
|
450
|
-
|
|
451
|
-
### 2.10 Config additions
|
|
452
|
-
|
|
453
|
-
**File**: `src/config.ts`
|
|
454
|
-
|
|
455
|
-
```typescript
|
|
456
|
-
// Add to ConfigSchema:
|
|
457
|
-
sync: z.object({
|
|
458
|
-
enabled: z.boolean().default(false),
|
|
459
|
-
instanceId: z.string().optional(), // auto-generated if not set
|
|
460
|
-
discovery: z.enum(['hub', 'manual', 'both']).default('both'),
|
|
461
|
-
peers: z.array(z.object({
|
|
462
|
-
name: z.string(),
|
|
463
|
-
sync_endpoint: z.string(),
|
|
464
|
-
shared_hives: z.array(z.string()),
|
|
465
|
-
})).default([]),
|
|
466
|
-
heartbeat_interval: z.number().default(30000),
|
|
467
|
-
peer_timeout: z.number().default(300000),
|
|
468
|
-
gossip: z.object({
|
|
469
|
-
enabled: z.boolean().default(true),
|
|
470
|
-
default_ttl: z.number().default(2),
|
|
471
|
-
hub_peer_ttl: z.number().default(1),
|
|
472
|
-
exchange_interval: z.number().default(60000),
|
|
473
|
-
max_gossip_peers: z.number().default(50),
|
|
474
|
-
stale_timeout: z.number().default(300000),
|
|
475
|
-
max_failures: z.number().default(3),
|
|
476
|
-
}).default({}),
|
|
477
|
-
}).default({ enabled: false }),
|
|
478
|
-
```
|
|
479
|
-
|
|
480
|
-
### 2.11 Tests
|
|
481
|
-
|
|
482
|
-
**File**: `src/__tests__/sync/crypto.test.ts`
|
|
483
|
-
- Generate keypair, verify shape
|
|
484
|
-
- Sign and verify round-trip
|
|
485
|
-
- Verify with wrong key fails
|
|
486
|
-
|
|
487
|
-
**File**: `src/__tests__/sync/sync-groups.test.ts`
|
|
488
|
-
- Create sync group, verify keypair generated
|
|
489
|
-
- Find by hive, find by name
|
|
490
|
-
- incrementSeq returns monotonically increasing numbers
|
|
491
|
-
- Delete cascade cleans up peers and events
|
|
492
|
-
|
|
493
|
-
**File**: `src/__tests__/sync/materializer.test.ts`
|
|
494
|
-
- Materialize `post_created` → verify post exists in `posts` table with correct origin columns
|
|
495
|
-
- Materialize `comment_created` → verify path/depth computed correctly
|
|
496
|
-
- Materialize `vote_cast` → verify score recalculated
|
|
497
|
-
- Materialize `post_deleted` → verify post removed
|
|
498
|
-
- Materialize duplicate event → `INSERT OR IGNORE` succeeds silently
|
|
499
|
-
|
|
500
|
-
**File**: `src/__tests__/sync/hooks.test.ts`
|
|
501
|
-
- Create a post in a synced hive → verify event written to `hive_events`
|
|
502
|
-
- Create a post in an unsynced hive → verify no event written
|
|
503
|
-
- Verify event payload shape matches event type definition
|
|
504
|
-
|
|
505
|
-
### 2.12 Task checklist
|
|
506
|
-
|
|
507
|
-
| # | Task | Files | Depends on |
|
|
508
|
-
|---|------|-------|------------|
|
|
509
|
-
| 2.1 | Add `SYNC_SCHEMA_V13`, bump to 13 | `src/sync/schema.ts`, `src/db/schema.ts`, `src/db/index.ts` | Phase 1 |
|
|
510
|
-
| 2.2 | Create `src/sync/crypto.ts` | new | — |
|
|
511
|
-
| 2.3 | Extend `src/sync/types.ts` with event + sync group types | existing | — |
|
|
512
|
-
| 2.4 | Create `src/db/dal/sync-groups.ts` | new | 2.1, 2.2, 2.3 |
|
|
513
|
-
| 2.5 | Create `src/db/dal/sync-events.ts` | new | 2.1, 2.3 |
|
|
514
|
-
| 2.6 | Create `src/db/dal/sync-peers.ts` | new | 2.1, 2.3 |
|
|
515
|
-
| 2.7 | Create `src/sync/materializer.ts` | new | 2.5, Phase 1 |
|
|
516
|
-
| 2.8 | Create `src/sync/hooks.ts` | new | 2.4, 2.5, 2.2 |
|
|
517
|
-
| 2.9 | Add hook calls to route handlers | `src/api/routes/posts.ts`, `comments.ts` | 2.8 |
|
|
518
|
-
| 2.10 | Create `src/api/routes/sync.ts` (admin endpoints) | new | 2.4, 2.5, 2.6 |
|
|
519
|
-
| 2.11 | Register sync routes | `src/api/index.ts` | 2.10 |
|
|
520
|
-
| 2.12 | Add sync config | `src/config.ts` | — |
|
|
521
|
-
| 2.13 | Write tests | `src/__tests__/sync/*.test.ts` | all above |
|
|
522
|
-
|
|
523
|
-
---
|
|
524
|
-
|
|
525
|
-
## Phase 3: Sync protocol (hubless)
|
|
526
|
-
|
|
527
|
-
**Goal**: Two instances can sync hives over any HTTPS-reachable network using manually configured peers.
|
|
528
|
-
|
|
529
|
-
### 3.1 Manual peer configs DAL
|
|
530
|
-
|
|
531
|
-
**File**: `src/db/dal/sync-peer-configs.ts` (new)
|
|
532
|
-
|
|
533
|
-
```typescript
|
|
534
|
-
export interface CreatePeerConfigInput {
|
|
535
|
-
name: string;
|
|
536
|
-
sync_endpoint: string;
|
|
537
|
-
shared_hives: string[];
|
|
538
|
-
signing_key?: string;
|
|
539
|
-
sync_token?: string;
|
|
540
|
-
is_manual?: boolean;
|
|
541
|
-
source?: 'manual' | 'hub' | 'gossip';
|
|
542
|
-
gossip_ttl?: number;
|
|
543
|
-
discovered_via?: string;
|
|
544
|
-
}
|
|
545
|
-
|
|
546
|
-
export function createPeerConfig(input: CreatePeerConfigInput): SyncPeerConfig
|
|
547
|
-
|
|
548
|
-
export function findPeerConfigByEndpoint(endpoint: string): SyncPeerConfig | null
|
|
549
|
-
|
|
550
|
-
export function findPeerConfigById(id: string): SyncPeerConfig | null
|
|
551
|
-
|
|
552
|
-
export function listPeerConfigs(filter?: { source?: string; status?: string }): SyncPeerConfig[]
|
|
553
|
-
|
|
554
|
-
export function updatePeerConfig(id: string, input: Partial<CreatePeerConfigInput>): SyncPeerConfig | null
|
|
555
|
-
|
|
556
|
-
export function updatePeerConfigStatus(id: string, status: string, error?: string): void
|
|
557
|
-
|
|
558
|
-
export function updatePeerConfigHeartbeat(id: string): void
|
|
559
|
-
|
|
560
|
-
export function deletePeerConfig(id: string): boolean
|
|
561
|
-
```
|
|
562
|
-
|
|
563
|
-
### 3.2 Database migration (schema version 14)
|
|
564
|
-
|
|
565
|
-
**File**: `src/sync/schema.ts` — add `SYNC_SCHEMA_V14`
|
|
566
|
-
|
|
567
|
-
```sql
|
|
568
|
-
-- Manual/cached peer configs
|
|
569
|
-
CREATE TABLE IF NOT EXISTS sync_peer_configs (
|
|
570
|
-
id TEXT PRIMARY KEY,
|
|
571
|
-
name TEXT NOT NULL,
|
|
572
|
-
sync_endpoint TEXT NOT NULL,
|
|
573
|
-
shared_hives TEXT NOT NULL, -- JSON array of hive names
|
|
574
|
-
signing_key TEXT,
|
|
575
|
-
sync_token TEXT,
|
|
576
|
-
is_manual INTEGER DEFAULT 1,
|
|
577
|
-
source TEXT DEFAULT 'manual'
|
|
578
|
-
CHECK (source IN ('manual', 'hub', 'gossip')),
|
|
579
|
-
status TEXT DEFAULT 'pending'
|
|
580
|
-
CHECK (status IN ('pending', 'active', 'error', 'unreachable')),
|
|
581
|
-
last_heartbeat_at TEXT,
|
|
582
|
-
last_error TEXT,
|
|
583
|
-
gossip_ttl INTEGER DEFAULT 0,
|
|
584
|
-
discovered_via TEXT,
|
|
585
|
-
created_at TEXT DEFAULT (datetime('now')),
|
|
586
|
-
updated_at TEXT DEFAULT (datetime('now')),
|
|
587
|
-
UNIQUE(sync_endpoint)
|
|
588
|
-
);
|
|
589
|
-
|
|
590
|
-
CREATE INDEX IF NOT EXISTS idx_sync_peer_configs_status ON sync_peer_configs(status);
|
|
591
|
-
CREATE INDEX IF NOT EXISTS idx_sync_peer_configs_source ON sync_peer_configs(source);
|
|
592
|
-
```
|
|
593
|
-
|
|
594
|
-
### 3.3 PeerResolver
|
|
595
|
-
|
|
596
|
-
**File**: `src/sync/peer-resolver.ts` (new)
|
|
597
|
-
|
|
598
|
-
```typescript
|
|
599
|
-
export interface SyncPeer {
|
|
600
|
-
id: string;
|
|
601
|
-
name: string;
|
|
602
|
-
sync_endpoint: string;
|
|
603
|
-
shared_hives: string[];
|
|
604
|
-
signing_key: string | null;
|
|
605
|
-
sync_token: string | null;
|
|
606
|
-
status: 'pending' | 'active' | 'error' | 'unreachable';
|
|
607
|
-
source: 'hub' | 'manual' | 'gossip';
|
|
608
|
-
}
|
|
609
|
-
|
|
610
|
-
export interface PeerResolver {
|
|
611
|
-
getPeersForHive(hiveName: string): SyncPeer[];
|
|
612
|
-
getAllPeers(): SyncPeer[];
|
|
613
|
-
isPeerOnline(peerId: string): boolean;
|
|
614
|
-
onPeerStatusChange(cb: (peerId: string, status: string) => void): void;
|
|
615
|
-
}
|
|
616
|
-
|
|
617
|
-
/** Reads from sync_peer_configs table + runs direct heartbeats */
|
|
618
|
-
export class ManualPeerResolver implements PeerResolver { ... }
|
|
619
|
-
```
|
|
620
|
-
|
|
621
|
-
### 3.4 Sync service
|
|
622
|
-
|
|
623
|
-
**File**: `src/sync/service.ts` (new)
|
|
624
|
-
|
|
625
|
-
This is the core orchestrator. It coordinates peer resolution, event push/pull, handshakes, and health monitoring.
|
|
626
|
-
|
|
627
|
-
```typescript
|
|
628
|
-
export class SyncService {
|
|
629
|
-
private peerResolver: PeerResolver;
|
|
630
|
-
private heartbeatTimer: NodeJS.Timeout | null = null;
|
|
631
|
-
private config: Config['sync'];
|
|
632
|
-
|
|
633
|
-
constructor(config: Config['sync']) { ... }
|
|
634
|
-
|
|
635
|
-
// ── Lifecycle ──
|
|
636
|
-
start(): void
|
|
637
|
-
// Start heartbeat loop, seed peers from config, initiate handshakes with pending peers
|
|
638
|
-
|
|
639
|
-
stop(): void
|
|
640
|
-
// Clear timers, drain push queue
|
|
641
|
-
|
|
642
|
-
// ── Sync Group Management ──
|
|
643
|
-
createSyncGroup(hiveId: string): SyncGroup
|
|
644
|
-
joinSyncGroup(peerEndpoint: string, hiveName: string): Promise<SyncGroup>
|
|
645
|
-
leaveSyncGroup(syncGroupId: string): Promise<void>
|
|
646
|
-
|
|
647
|
-
// ── Event Recording ──
|
|
648
|
-
recordEvent(syncGroupId: string, eventType: HiveEventType, payload: unknown): HiveEvent
|
|
649
|
-
// 1. Get sync group, increment seq
|
|
650
|
-
// 2. Sign payload with instance private key
|
|
651
|
-
// 3. Insert into hive_events with is_local = 1
|
|
652
|
-
// 4. Push to all active peers (async, non-blocking)
|
|
653
|
-
|
|
654
|
-
// ── Inbound Handlers (called by sync routes) ──
|
|
655
|
-
handleHandshake(input: HandshakeRequest): HandshakeResponse
|
|
656
|
-
handleIncomingEvents(syncGroupId: string, events: IncomingEvent[]): { received_seq: number }
|
|
657
|
-
handleEventsPull(syncGroupId: string, since: number, limit: number): { events: HiveEvent[]; next_seq: number; has_more: boolean }
|
|
658
|
-
handleHeartbeat(input: HeartbeatRequest): HeartbeatResponse
|
|
659
|
-
|
|
660
|
-
// ── Internal ──
|
|
661
|
-
private pushToPeer(syncGroupId: string, peerId: string): Promise<void>
|
|
662
|
-
private pullFromPeer(syncGroupId: string, peerId: string): Promise<void>
|
|
663
|
-
private runHeartbeatLoop(): void
|
|
664
|
-
private seedPeersFromConfig(): void
|
|
665
|
-
}
|
|
666
|
-
```
|
|
667
|
-
|
|
668
|
-
### 3.5 Sync API routes (peer-to-peer)
|
|
669
|
-
|
|
670
|
-
**File**: `src/api/routes/sync-protocol.ts` (new)
|
|
671
|
-
|
|
672
|
-
These endpoints are exposed to other instances (not under `/api/v1`). They sit at `/sync/v1/`.
|
|
673
|
-
|
|
674
|
-
```typescript
|
|
675
|
-
export async function syncProtocolRoutes(fastify: FastifyInstance, opts: { syncService: SyncService }): Promise<void> {
|
|
676
|
-
// POST /sync/v1/handshake
|
|
677
|
-
// Request: { sync_group_name, instance_id, signing_key, sync_endpoint }
|
|
678
|
-
// Response: { sync_group_id, signing_key, current_seq, sync_token }
|
|
679
|
-
|
|
680
|
-
// GET /sync/v1/groups/:id/events
|
|
681
|
-
// Query: since, limit
|
|
682
|
-
// Auth: Bearer <sync_token>
|
|
683
|
-
// Response: { events, next_seq, has_more }
|
|
684
|
-
|
|
685
|
-
// POST /sync/v1/groups/:id/events
|
|
686
|
-
// Auth: Bearer <sync_token>
|
|
687
|
-
// Request: { events: [...], sender_seq }
|
|
688
|
-
// Response: { received_seq }
|
|
689
|
-
|
|
690
|
-
// GET /sync/v1/groups/:id/status
|
|
691
|
-
// Response: { peers, local_seq }
|
|
692
|
-
|
|
693
|
-
// POST /sync/v1/groups/:id/leave
|
|
694
|
-
// Response: { ok: true }
|
|
695
|
-
|
|
696
|
-
// POST /sync/v1/heartbeat
|
|
697
|
-
// Request: { instance_id, seq_by_hive }
|
|
698
|
-
// Response: { instance_id, seq_by_hive }
|
|
699
|
-
}
|
|
700
|
-
```
|
|
701
|
-
|
|
702
|
-
**File**: `src/server.ts` — register `syncProtocolRoutes` at `/sync/v1` prefix (separate from `/api/v1`).
|
|
703
|
-
|
|
704
|
-
### 3.6 Admin peer management routes
|
|
705
|
-
|
|
706
|
-
**File**: `src/api/routes/sync.ts` — extend with peer management
|
|
707
|
-
|
|
708
|
-
```typescript
|
|
709
|
-
// Add to existing syncRoutes:
|
|
710
|
-
|
|
711
|
-
// POST /sync/peers — add peer manually
|
|
712
|
-
// GET /sync/peers — list configured peers + status
|
|
713
|
-
// PATCH /sync/peers/:id — update peer config
|
|
714
|
-
// DELETE /sync/peers/:id — remove peer
|
|
715
|
-
// POST /sync/peers/:id/test — test connectivity to peer
|
|
716
|
-
```
|
|
717
|
-
|
|
718
|
-
### 3.7 Sync token auth middleware
|
|
719
|
-
|
|
720
|
-
**File**: `src/sync/middleware.ts` (new)
|
|
721
|
-
|
|
722
|
-
```typescript
|
|
723
|
-
/** Verify sync token from Authorization header against known peers */
|
|
724
|
-
export function syncAuthMiddleware(request: FastifyRequest, reply: FastifyReply): void
|
|
725
|
-
// Extract Bearer token from Authorization header
|
|
726
|
-
// Look up sync_token in hive_sync_peers
|
|
727
|
-
// Reject if not found or peer status is not 'active'
|
|
728
|
-
```
|
|
729
|
-
|
|
730
|
-
### 3.8 Validation schemas
|
|
731
|
-
|
|
732
|
-
**File**: `src/api/schemas/sync.ts` (new)
|
|
733
|
-
|
|
734
|
-
```typescript
|
|
735
|
-
export const CreateSyncGroupSchema = z.object({
|
|
736
|
-
hive_name: z.string().min(1),
|
|
737
|
-
});
|
|
738
|
-
|
|
739
|
-
export const JoinSyncGroupSchema = z.object({
|
|
740
|
-
peer_endpoint: z.string().url(),
|
|
741
|
-
hive_name: z.string().min(1),
|
|
742
|
-
});
|
|
743
|
-
|
|
744
|
-
export const HandshakeSchema = z.object({
|
|
745
|
-
sync_group_name: z.string().min(1),
|
|
746
|
-
instance_id: z.string().min(1),
|
|
747
|
-
signing_key: z.string().min(1),
|
|
748
|
-
sync_endpoint: z.string().min(1),
|
|
749
|
-
});
|
|
750
|
-
|
|
751
|
-
export const PushEventsSchema = z.object({
|
|
752
|
-
events: z.array(z.object({
|
|
753
|
-
id: z.string(),
|
|
754
|
-
event_type: z.string(),
|
|
755
|
-
origin_instance_id: z.string(),
|
|
756
|
-
origin_ts: z.number(),
|
|
757
|
-
payload: z.unknown(),
|
|
758
|
-
signature: z.string(),
|
|
759
|
-
})),
|
|
760
|
-
sender_seq: z.number(),
|
|
761
|
-
});
|
|
762
|
-
|
|
763
|
-
export const CreatePeerConfigSchema = z.object({
|
|
764
|
-
name: z.string().min(1),
|
|
765
|
-
sync_endpoint: z.string().url(),
|
|
766
|
-
shared_hives: z.array(z.string().min(1)).min(1),
|
|
767
|
-
});
|
|
768
|
-
|
|
769
|
-
export const HeartbeatSchema = z.object({
|
|
770
|
-
instance_id: z.string().min(1),
|
|
771
|
-
seq_by_hive: z.record(z.string(), z.number()),
|
|
772
|
-
});
|
|
773
|
-
```
|
|
774
|
-
|
|
775
|
-
### 3.9 Integration: seed peers from config on startup
|
|
776
|
-
|
|
777
|
-
**File**: `src/server.ts` or `src/index.ts` (wherever the Fastify app is created)
|
|
778
|
-
|
|
779
|
-
```typescript
|
|
780
|
-
// After initDatabase(), if config.sync.enabled:
|
|
781
|
-
// 1. Instantiate SyncService with config
|
|
782
|
-
// 2. For each peer in config.sync.peers: upsert into sync_peer_configs
|
|
783
|
-
// 3. Call syncService.start()
|
|
784
|
-
// 4. Register sync routes with the service instance
|
|
785
|
-
// 5. On shutdown, call syncService.stop()
|
|
786
|
-
```
|
|
787
|
-
|
|
788
|
-
### 3.10 Tests
|
|
789
|
-
|
|
790
|
-
**File**: `src/__tests__/sync/peer-resolver.test.ts`
|
|
791
|
-
- ManualPeerResolver reads from sync_peer_configs table
|
|
792
|
-
- getPeersForHive filters by shared hives
|
|
793
|
-
- isPeerOnline reflects status column
|
|
794
|
-
|
|
795
|
-
**File**: `src/__tests__/sync/service.test.ts`
|
|
796
|
-
- `createSyncGroup()` → creates group with keypair
|
|
797
|
-
- `recordEvent()` → writes to hive_events, increments seq
|
|
798
|
-
- `handleHandshake()` → exchanges keys, creates peer entries
|
|
799
|
-
- `handleIncomingEvents()` → verifies signature, materializes, updates seq
|
|
800
|
-
- `handleEventsPull()` → returns events since cursor with pagination
|
|
801
|
-
|
|
802
|
-
**File**: `src/__tests__/sync/protocol-routes.test.ts`
|
|
803
|
-
- Handshake round-trip between two test instances (use `app.inject()`)
|
|
804
|
-
- Push events → verify materialization
|
|
805
|
-
- Pull events → verify pagination
|
|
806
|
-
- Invalid sync token → 401
|
|
807
|
-
- Heartbeat → verify seq exchange
|
|
808
|
-
|
|
809
|
-
**File**: `src/__tests__/sync/integration.test.ts`
|
|
810
|
-
- End-to-end: two in-process instances with mock network
|
|
811
|
-
1. Instance A creates sync group
|
|
812
|
-
2. Instance B handshakes with A
|
|
813
|
-
3. Instance A creates post → event pushed to B → post appears in B's table
|
|
814
|
-
4. Instance B creates comment → event pushed to A → comment appears in A's table
|
|
815
|
-
|
|
816
|
-
### 3.11 Task checklist
|
|
817
|
-
|
|
818
|
-
| # | Task | Files | Depends on |
|
|
819
|
-
|---|------|-------|------------|
|
|
820
|
-
| 3.1 | Add `SYNC_SCHEMA_V14`, bump to 14 | `src/sync/schema.ts`, `src/db/{schema,index}.ts` | Phase 2 |
|
|
821
|
-
| 3.2 | Create `src/db/dal/sync-peer-configs.ts` | new | 3.1 |
|
|
822
|
-
| 3.3 | Create `src/sync/peer-resolver.ts` (ManualPeerResolver) | new | 3.2 |
|
|
823
|
-
| 3.4 | Create `src/sync/middleware.ts` (sync auth) | new | 2.6 |
|
|
824
|
-
| 3.5 | Create `src/api/schemas/sync.ts` | new | — |
|
|
825
|
-
| 3.6 | Create `src/sync/service.ts` (core orchestrator) | new | 3.3, 2.4, 2.5, 2.7, 2.2 |
|
|
826
|
-
| 3.7 | Create `src/api/routes/sync-protocol.ts` (peer routes) | new | 3.6, 3.4, 3.5 |
|
|
827
|
-
| 3.8 | Extend `src/api/routes/sync.ts` (admin peer CRUD) | existing | 3.2, 3.5 |
|
|
828
|
-
| 3.9 | Register sync protocol routes in server | `src/server.ts` | 3.7 |
|
|
829
|
-
| 3.10 | Startup integration (seed peers, start service) | `src/server.ts` | 3.6, 3.9 |
|
|
830
|
-
| 3.11 | Add sync config schema | `src/config.ts` (if not done in Phase 2) | — |
|
|
831
|
-
| 3.12 | Write tests | `src/__tests__/sync/*.test.ts` | all above |
|
|
832
|
-
|
|
833
|
-
---
|
|
834
|
-
|
|
835
|
-
## Phase 4: Hub-assisted discovery
|
|
836
|
-
|
|
837
|
-
**Goal**: Instances using a MAP hub get automatic peer discovery. Layer on top of working hubless protocol.
|
|
838
|
-
|
|
839
|
-
### 4.1 HubPeerResolver
|
|
840
|
-
|
|
841
|
-
**File**: `src/sync/peer-resolver.ts` — add `HubPeerResolver`
|
|
842
|
-
|
|
843
|
-
```typescript
|
|
844
|
-
/** Wraps MAP hub getPeerList() to provide SyncPeer objects */
|
|
845
|
-
export class HubPeerResolver implements PeerResolver {
|
|
846
|
-
// getPeersForHive: calls mapDal.getPeerList() filtered by hive_sync capability
|
|
847
|
-
// Translates SwarmPeer → SyncPeer using map_endpoint or sync_endpoint
|
|
848
|
-
// Subscribes to 'map:discovery' WebSocket channel for real-time peer updates
|
|
849
|
-
}
|
|
850
|
-
```
|
|
851
|
-
|
|
852
|
-
### 4.2 CompositePeerResolver
|
|
853
|
-
|
|
854
|
-
**File**: `src/sync/peer-resolver.ts` — add `CompositePeerResolver`
|
|
855
|
-
|
|
856
|
-
```typescript
|
|
857
|
-
/** Merges hub + manual + gossip peers with precedence: manual > hub > gossip */
|
|
858
|
-
export class CompositePeerResolver implements PeerResolver {
|
|
859
|
-
constructor(
|
|
860
|
-
private manualResolver: ManualPeerResolver,
|
|
861
|
-
private hubResolver: HubPeerResolver | null
|
|
862
|
-
)
|
|
863
|
-
|
|
864
|
-
// getPeersForHive: merge from all sources, dedup by endpoint
|
|
865
|
-
// refreshFromHub(): cache hub peers into sync_peer_configs with is_manual=0
|
|
866
|
-
// Precedence: manual entries never overwritten by hub/gossip
|
|
867
|
-
}
|
|
868
|
-
```
|
|
869
|
-
|
|
870
|
-
### 4.3 MAP capability extension
|
|
871
|
-
|
|
872
|
-
**File**: `src/map/types.ts`
|
|
873
|
-
|
|
874
|
-
```typescript
|
|
875
|
-
// Extend MapSwarmCapabilities:
|
|
876
|
-
export interface MapSwarmCapabilities {
|
|
877
|
-
// ... existing fields ...
|
|
878
|
-
hive_sync?: boolean;
|
|
879
|
-
}
|
|
880
|
-
```
|
|
881
|
-
|
|
882
|
-
### 4.4 Auto-handshake on hub events
|
|
883
|
-
|
|
884
|
-
**File**: `src/sync/service.ts` — extend
|
|
885
|
-
|
|
886
|
-
```typescript
|
|
887
|
-
// Add to SyncService:
|
|
888
|
-
|
|
889
|
-
/** Listen for MAP hub swarm_joined_hive events and auto-initiate handshake */
|
|
890
|
-
private subscribeToHubEvents(): void
|
|
891
|
-
// Subscribe to 'map:hive:*' WebSocket channels
|
|
892
|
-
// When new peer joins a hive that has a sync group, trigger handshake
|
|
893
|
-
|
|
894
|
-
/** Listen for MAP hub peer status changes (markStaleSwarms) for reconnect */
|
|
895
|
-
private subscribeToStaleEvents(): void
|
|
896
|
-
// When a peer transitions offline → online, trigger pullFromPeer
|
|
897
|
-
```
|
|
898
|
-
|
|
899
|
-
### 4.5 Mesh-only access middleware (optional)
|
|
900
|
-
|
|
901
|
-
**File**: `src/sync/middleware.ts` — extend
|
|
902
|
-
|
|
903
|
-
```typescript
|
|
904
|
-
/** Restrict sync endpoints to Tailscale IP range (100.64.0.0/10) */
|
|
905
|
-
export function meshOnlyMiddleware(request: FastifyRequest, reply: FastifyReply): void
|
|
906
|
-
// Check request.ip against mesh IP ranges
|
|
907
|
-
// Configurable: can be disabled for hubless/internet mode
|
|
908
|
-
```
|
|
909
|
-
|
|
910
|
-
### 4.6 Tests
|
|
911
|
-
|
|
912
|
-
**File**: `src/__tests__/sync/hub-resolver.test.ts`
|
|
913
|
-
- HubPeerResolver returns peers from mock MAP data
|
|
914
|
-
- Filters by hive_sync capability
|
|
915
|
-
- CompositePeerResolver merges manual + hub, manual wins
|
|
916
|
-
|
|
917
|
-
**File**: `src/__tests__/sync/hub-integration.test.ts`
|
|
918
|
-
- Simulate swarm_joined_hive event → auto-handshake triggered
|
|
919
|
-
- Simulate peer goes offline → markStaleSwarms → peer comes back → pull triggered
|
|
920
|
-
- Hub peer cached into sync_peer_configs → hub goes down → cached peer still resolved
|
|
921
|
-
|
|
922
|
-
### 4.7 Task checklist
|
|
923
|
-
|
|
924
|
-
| # | Task | Files | Depends on |
|
|
925
|
-
|---|------|-------|------------|
|
|
926
|
-
| 4.1 | Add `HubPeerResolver` | `src/sync/peer-resolver.ts` | Phase 3 |
|
|
927
|
-
| 4.2 | Add `CompositePeerResolver` with hub caching | `src/sync/peer-resolver.ts` | 4.1 |
|
|
928
|
-
| 4.3 | Add `hive_sync` to `MapSwarmCapabilities` | `src/map/types.ts` | — |
|
|
929
|
-
| 4.4 | Auto-handshake on hub events | `src/sync/service.ts` | 4.2 |
|
|
930
|
-
| 4.5 | Subscribe to stale events for reconnect | `src/sync/service.ts` | 4.2 |
|
|
931
|
-
| 4.6 | Mesh-only access middleware | `src/sync/middleware.ts` | — |
|
|
932
|
-
| 4.7 | Update SyncService constructor to accept resolver type from config | `src/sync/service.ts` | 4.2 |
|
|
933
|
-
| 4.8 | Write tests | `src/__tests__/sync/hub-*.test.ts` | all above |
|
|
934
|
-
|
|
935
|
-
---
|
|
936
|
-
|
|
937
|
-
## Phase 5: Peer gossip
|
|
938
|
-
|
|
939
|
-
**Goal**: Automatic peer discovery via gossip exchange. Configure one manual peer → gossip discovers the rest.
|
|
940
|
-
|
|
941
|
-
### 5.1 Extend heartbeat with gossip
|
|
942
|
-
|
|
943
|
-
**File**: `src/sync/service.ts` — extend heartbeat
|
|
944
|
-
|
|
945
|
-
```typescript
|
|
946
|
-
// Extend HeartbeatRequest/Response to include known_peers array:
|
|
947
|
-
interface HeartbeatRequest {
|
|
948
|
-
instance_id: string;
|
|
949
|
-
seq_by_hive: Record<string, number>;
|
|
950
|
-
known_peers?: GossipPeerInfo[]; // NEW
|
|
951
|
-
}
|
|
952
|
-
|
|
953
|
-
interface GossipPeerInfo {
|
|
954
|
-
sync_endpoint: string;
|
|
955
|
-
name: string;
|
|
956
|
-
shared_hives: string[];
|
|
957
|
-
signing_key: string | null;
|
|
958
|
-
ttl: number;
|
|
959
|
-
}
|
|
960
|
-
```
|
|
961
|
-
|
|
962
|
-
### 5.2 Gossip logic
|
|
963
|
-
|
|
964
|
-
**File**: `src/sync/gossip.ts` (new)
|
|
965
|
-
|
|
966
|
-
```typescript
|
|
967
|
-
/** Build the peer list to share with a specific peer (filtered by overlapping hives) */
|
|
968
|
-
export function buildGossipPayload(targetPeer: SyncPeer, allPeers: SyncPeer[], config: GossipConfig): GossipPeerInfo[]
|
|
969
|
-
// 1. Filter: only share peers that share hives with target
|
|
970
|
-
// 2. Filter: exclude the target itself
|
|
971
|
-
// 3. Decrement TTL: peers with TTL <= 0 are not shared
|
|
972
|
-
// 4. Cap at max_gossip_peers
|
|
973
|
-
|
|
974
|
-
/** Process incoming gossip peers from a heartbeat response */
|
|
975
|
-
export function processGossipPeers(
|
|
976
|
-
incomingPeers: GossipPeerInfo[],
|
|
977
|
-
fromPeerId: string,
|
|
978
|
-
config: GossipConfig
|
|
979
|
-
): SyncPeerConfig[]
|
|
980
|
-
// 1. For each incoming peer:
|
|
981
|
-
// a. Skip if already known as manual or hub
|
|
982
|
-
// b. Skip if TTL <= 0
|
|
983
|
-
// c. Upsert into sync_peer_configs with source='gossip', discovered_via=fromPeerId
|
|
984
|
-
// d. Decrement TTL by 1
|
|
985
|
-
// 2. Return list of newly discovered peers (for auto-handshake)
|
|
986
|
-
|
|
987
|
-
/** Remove gossip-sourced peers that are unresponsive */
|
|
988
|
-
export function cleanupStaleGossipPeers(staleTimeout: number, maxFailures: number): number
|
|
989
|
-
```
|
|
990
|
-
|
|
991
|
-
### 5.3 Gossip configuration
|
|
992
|
-
|
|
993
|
-
**File**: `src/config.ts` — already added in Phase 2 (`sync.gossip.*`)
|
|
994
|
-
|
|
995
|
-
### 5.4 Tests
|
|
996
|
-
|
|
997
|
-
**File**: `src/__tests__/sync/gossip.test.ts`
|
|
998
|
-
- `buildGossipPayload()` filters by overlapping hives
|
|
999
|
-
- `buildGossipPayload()` decrements TTL correctly
|
|
1000
|
-
- `buildGossipPayload()` excludes target peer
|
|
1001
|
-
- `processGossipPeers()` adds new gossip-sourced peers
|
|
1002
|
-
- `processGossipPeers()` doesn't overwrite manual peers
|
|
1003
|
-
- `processGossipPeers()` doesn't overwrite hub peers
|
|
1004
|
-
- `cleanupStaleGossipPeers()` removes unresponsive peers after threshold
|
|
1005
|
-
- Integration: 4-node gossip scenario (A→B→C→D) converges to full mesh
|
|
1006
|
-
|
|
1007
|
-
### 5.5 Task checklist
|
|
1008
|
-
|
|
1009
|
-
| # | Task | Files | Depends on |
|
|
1010
|
-
|---|------|-------|------------|
|
|
1011
|
-
| 5.1 | Extend heartbeat types with gossip fields | `src/sync/types.ts` | Phase 3 |
|
|
1012
|
-
| 5.2 | Create `src/sync/gossip.ts` | new | 5.1, 3.2 |
|
|
1013
|
-
| 5.3 | Integrate gossip into SyncService heartbeat loop | `src/sync/service.ts` | 5.2 |
|
|
1014
|
-
| 5.4 | Auto-handshake with gossip-discovered peers | `src/sync/service.ts` | 5.2, 3.6 |
|
|
1015
|
-
| 5.5 | Stale gossip cleanup timer | `src/sync/service.ts` | 5.2 |
|
|
1016
|
-
| 5.6 | Write tests | `src/__tests__/sync/gossip.test.ts` | all above |
|
|
1017
|
-
|
|
1018
|
-
---
|
|
1019
|
-
|
|
1020
|
-
## Phase 6: Operational hardening
|
|
1021
|
-
|
|
1022
|
-
**Goal**: Production readiness — monitoring, rate limiting, compaction, alerting.
|
|
1023
|
-
|
|
1024
|
-
### 6.1 Sync health endpoint
|
|
1025
|
-
|
|
1026
|
-
**File**: `src/api/routes/sync.ts` — extend
|
|
1027
|
-
|
|
1028
|
-
```typescript
|
|
1029
|
-
// GET /sync/groups/:id/health — returns lag, peer status, event rates
|
|
1030
|
-
// GET /federation/status — extend existing endpoint with sync section
|
|
1031
|
-
```
|
|
1032
|
-
|
|
1033
|
-
### 6.2 Event compaction
|
|
1034
|
-
|
|
1035
|
-
**File**: `src/sync/compaction.ts` (new)
|
|
1036
|
-
|
|
1037
|
-
```typescript
|
|
1038
|
-
/** Compact events older than retentionMs into a snapshot */
|
|
1039
|
-
export function compactEvents(syncGroupId: string, retentionMs: number): CompactionResult
|
|
1040
|
-
|
|
1041
|
-
/** Generate a snapshot from current materialized state */
|
|
1042
|
-
export function createSnapshot(syncGroupId: string): Snapshot
|
|
1043
|
-
|
|
1044
|
-
/** Restore materialized state from a snapshot (for new peers) */
|
|
1045
|
-
export function restoreFromSnapshot(syncGroupId: string, snapshot: Snapshot): void
|
|
1046
|
-
```
|
|
1047
|
-
|
|
1048
|
-
### 6.3 Rate limiting
|
|
1049
|
-
|
|
1050
|
-
**File**: `src/sync/middleware.ts` — extend
|
|
1051
|
-
|
|
1052
|
-
```typescript
|
|
1053
|
-
/** Per-peer rate limit on inbound events (e.g., 100 events/second per peer) */
|
|
1054
|
-
export function syncRateLimitMiddleware(request: FastifyRequest, reply: FastifyReply): void
|
|
1055
|
-
```
|
|
1056
|
-
|
|
1057
|
-
### 6.4 Causal ordering queue with cleanup
|
|
1058
|
-
|
|
1059
|
-
**File**: `src/sync/materializer.ts` — extend
|
|
1060
|
-
|
|
1061
|
-
```typescript
|
|
1062
|
-
/** Process pending events whose dependencies are now satisfied */
|
|
1063
|
-
export function processPendingQueue(syncGroupId: string): number
|
|
1064
|
-
|
|
1065
|
-
/** Clean up pending events older than maxAge */
|
|
1066
|
-
export function cleanupPendingQueue(maxAgeMs: number): number
|
|
1067
|
-
```
|
|
1068
|
-
|
|
1069
|
-
### 6.5 Task checklist
|
|
1070
|
-
|
|
1071
|
-
| # | Task | Files | Depends on |
|
|
1072
|
-
|---|------|-------|------------|
|
|
1073
|
-
| 6.1 | Sync health endpoint | `src/api/routes/sync.ts` | Phase 3 |
|
|
1074
|
-
| 6.2 | Event compaction | `src/sync/compaction.ts` | Phase 2 |
|
|
1075
|
-
| 6.3 | Inbound rate limiting | `src/sync/middleware.ts` | Phase 3 |
|
|
1076
|
-
| 6.4 | Pending queue processing + cleanup | `src/sync/materializer.ts` | Phase 2 |
|
|
1077
|
-
| 6.5 | Alerting on sync lag (log warnings when lag > threshold) | `src/sync/service.ts` | Phase 3 |
|
|
1078
|
-
| 6.6 | Write tests | `src/__tests__/sync/compaction.test.ts` etc. | all above |
|
|
1079
|
-
|
|
1080
|
-
---
|
|
1081
|
-
|
|
1082
|
-
## File Summary
|
|
1083
|
-
|
|
1084
|
-
### New files (21 files)
|
|
1085
|
-
|
|
1086
|
-
| File | Phase | Purpose |
|
|
1087
|
-
|------|-------|---------|
|
|
1088
|
-
| `src/sync/schema.ts` | 1 | SQL migration schemas (V12, V13, V14) |
|
|
1089
|
-
| `src/sync/types.ts` | 1-2 | All sync-related TypeScript types |
|
|
1090
|
-
| `src/sync/crypto.ts` | 2 | Ed25519 keypair generation, sign/verify |
|
|
1091
|
-
| `src/sync/hooks.ts` | 2 | Write-path hooks for event recording |
|
|
1092
|
-
| `src/sync/materializer.ts` | 2 | Event → table materialization |
|
|
1093
|
-
| `src/sync/service.ts` | 3 | Core sync service orchestrator |
|
|
1094
|
-
| `src/sync/peer-resolver.ts` | 3-4 | PeerResolver interface + implementations |
|
|
1095
|
-
| `src/sync/middleware.ts` | 3 | Sync auth + mesh-only + rate limit |
|
|
1096
|
-
| `src/sync/gossip.ts` | 5 | Gossip payload building + processing |
|
|
1097
|
-
| `src/sync/compaction.ts` | 6 | Event compaction + snapshots |
|
|
1098
|
-
| `src/db/dal/remote-agents.ts` | 1 | Remote agent cache CRUD |
|
|
1099
|
-
| `src/db/dal/sync-groups.ts` | 2 | Sync group CRUD |
|
|
1100
|
-
| `src/db/dal/sync-events.ts` | 2 | Event log CRUD |
|
|
1101
|
-
| `src/db/dal/sync-peers.ts` | 2 | Sync peer state CRUD |
|
|
1102
|
-
| `src/db/dal/sync-peer-configs.ts` | 3 | Manual/cached peer config CRUD |
|
|
1103
|
-
| `src/api/routes/sync.ts` | 2-3 | Admin sync management routes |
|
|
1104
|
-
| `src/api/routes/sync-protocol.ts` | 3 | Peer-to-peer sync protocol routes |
|
|
1105
|
-
| `src/api/schemas/sync.ts` | 3 | Zod validation schemas |
|
|
1106
|
-
| `src/__tests__/sync/remote-agents.test.ts` | 1 | Tests |
|
|
1107
|
-
| `src/__tests__/sync/crypto.test.ts` | 2 | Tests |
|
|
1108
|
-
| `src/__tests__/sync/sync-groups.test.ts` | 2 | Tests |
|
|
1109
|
-
| `src/__tests__/sync/materializer.test.ts` | 2 | Tests |
|
|
1110
|
-
| `src/__tests__/sync/hooks.test.ts` | 2 | Tests |
|
|
1111
|
-
| `src/__tests__/sync/peer-resolver.test.ts` | 3 | Tests |
|
|
1112
|
-
| `src/__tests__/sync/service.test.ts` | 3 | Tests |
|
|
1113
|
-
| `src/__tests__/sync/protocol-routes.test.ts` | 3 | Tests |
|
|
1114
|
-
| `src/__tests__/sync/integration.test.ts` | 3 | Tests |
|
|
1115
|
-
| `src/__tests__/sync/hub-resolver.test.ts` | 4 | Tests |
|
|
1116
|
-
| `src/__tests__/sync/hub-integration.test.ts` | 4 | Tests |
|
|
1117
|
-
| `src/__tests__/sync/gossip.test.ts` | 5 | Tests |
|
|
1118
|
-
| `src/__tests__/sync/compaction.test.ts` | 6 | Tests |
|
|
1119
|
-
|
|
1120
|
-
### Modified files (10 files)
|
|
1121
|
-
|
|
1122
|
-
| File | Phase | Change |
|
|
1123
|
-
|------|-------|--------|
|
|
1124
|
-
| `src/db/schema.ts` | 1-3 | Bump SCHEMA_VERSION (12 → 13 → 14) |
|
|
1125
|
-
| `src/db/index.ts` | 1-3 | Add migration entries |
|
|
1126
|
-
| `src/db/dal/posts.ts` | 1 | COALESCE joins for remote authors |
|
|
1127
|
-
| `src/db/dal/comments.ts` | 1 | COALESCE joins for remote authors |
|
|
1128
|
-
| `src/api/routes/posts.ts` | 2 | Add sync hook calls |
|
|
1129
|
-
| `src/api/routes/comments.ts` | 2 | Add sync hook calls |
|
|
1130
|
-
| `src/api/index.ts` | 2 | Register syncRoutes |
|
|
1131
|
-
| `src/config.ts` | 2 | Add sync config section |
|
|
1132
|
-
| `src/server.ts` | 3 | Register sync protocol routes, start SyncService |
|
|
1133
|
-
| `src/map/types.ts` | 4 | Add hive_sync to capabilities |
|
|
1134
|
-
|
|
1135
|
-
### No new dependencies
|
|
1136
|
-
|
|
1137
|
-
All functionality uses Node.js built-in modules:
|
|
1138
|
-
- `crypto` — Ed25519 keypair generation, sign/verify
|
|
1139
|
-
- `fetch` — HTTP calls to peers (Node.js 18+ built-in)
|
|
1140
|
-
|
|
1141
|
-
---
|
|
1142
|
-
|
|
1143
|
-
## Dependency Graph
|
|
1144
|
-
|
|
1145
|
-
```
|
|
1146
|
-
Phase 1 ─── Foundation (schema + remote agents)
|
|
1147
|
-
│
|
|
1148
|
-
v
|
|
1149
|
-
Phase 2 ─── Event log + sync groups + materialization
|
|
1150
|
-
│
|
|
1151
|
-
v
|
|
1152
|
-
Phase 3 ─── Sync protocol (hubless) ←── can ship & validate here
|
|
1153
|
-
│
|
|
1154
|
-
v
|
|
1155
|
-
Phase 4 ─── Hub-assisted discovery (layer on top)
|
|
1156
|
-
│
|
|
1157
|
-
v
|
|
1158
|
-
Phase 5 ─── Peer gossip (layer on top)
|
|
1159
|
-
│
|
|
1160
|
-
v
|
|
1161
|
-
Phase 6 ─── Operational hardening
|
|
1162
|
-
```
|
|
1163
|
-
|
|
1164
|
-
Phases 1-3 are the **minimum viable sync** — two instances can sync hives over any HTTPS network. Phases 4-6 add progressive enhancements. Each phase can be shipped and validated independently.
|
|
1165
|
-
|
|
1166
|
-
---
|
|
1167
|
-
|
|
1168
|
-
*Document Version: 1.0*
|
|
1169
|
-
*Last Updated: 2026-02-12*
|