opentasks 0.0.1 → 0.0.3
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/README.md +344 -1
- package/dist/__tests__/cli-tools.test.d.ts +8 -0
- package/dist/__tests__/cli-tools.test.d.ts.map +1 -0
- package/dist/__tests__/cli-tools.test.js +546 -0
- package/dist/__tests__/cli-tools.test.js.map +1 -0
- package/dist/__tests__/cli.test.d.ts +5 -0
- package/dist/__tests__/cli.test.d.ts.map +1 -0
- package/dist/__tests__/cli.test.js +77 -0
- package/dist/__tests__/cli.test.js.map +1 -0
- package/dist/__tests__/p1-p3-gaps.test.d.ts +2 -0
- package/dist/__tests__/p1-p3-gaps.test.d.ts.map +1 -0
- package/dist/__tests__/p1-p3-gaps.test.js +463 -0
- package/dist/__tests__/p1-p3-gaps.test.js.map +1 -0
- package/dist/cli.d.ts +19 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +702 -23
- package/dist/cli.js.map +1 -1
- package/dist/client/__tests__/client-crud.test.d.ts +7 -0
- package/dist/client/__tests__/client-crud.test.d.ts.map +1 -0
- package/dist/client/__tests__/client-crud.test.js +404 -0
- package/dist/client/__tests__/client-crud.test.js.map +1 -0
- package/dist/client/__tests__/client.test.d.ts +5 -0
- package/dist/client/__tests__/client.test.d.ts.map +1 -0
- package/dist/client/__tests__/client.test.js +518 -0
- package/dist/client/__tests__/client.test.js.map +1 -0
- package/dist/client/client.d.ts +228 -0
- package/dist/client/client.d.ts.map +1 -0
- package/dist/client/client.js +393 -0
- package/dist/client/client.js.map +1 -0
- package/dist/client/index.d.ts +11 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +9 -0
- package/dist/client/index.js.map +1 -0
- package/dist/config/__tests__/defaults.test.d.ts +2 -0
- package/dist/config/__tests__/defaults.test.d.ts.map +1 -0
- package/dist/config/__tests__/defaults.test.js +57 -0
- package/dist/config/__tests__/defaults.test.js.map +1 -0
- package/dist/config/__tests__/env.test.d.ts +2 -0
- package/dist/config/__tests__/env.test.d.ts.map +1 -0
- package/dist/config/__tests__/env.test.js +136 -0
- package/dist/config/__tests__/env.test.js.map +1 -0
- package/dist/config/__tests__/index.test.d.ts +2 -0
- package/dist/config/__tests__/index.test.d.ts.map +1 -0
- package/dist/config/__tests__/index.test.js +113 -0
- package/dist/config/__tests__/index.test.js.map +1 -0
- package/dist/config/__tests__/loader.test.d.ts +2 -0
- package/dist/config/__tests__/loader.test.d.ts.map +1 -0
- package/dist/config/__tests__/loader.test.js +128 -0
- package/dist/config/__tests__/loader.test.js.map +1 -0
- package/dist/config/__tests__/merge.test.d.ts +2 -0
- package/dist/config/__tests__/merge.test.d.ts.map +1 -0
- package/dist/config/__tests__/merge.test.js +79 -0
- package/dist/config/__tests__/merge.test.js.map +1 -0
- package/dist/config/__tests__/schema.test.d.ts +2 -0
- package/dist/config/__tests__/schema.test.d.ts.map +1 -0
- package/dist/config/__tests__/schema.test.js +300 -0
- package/dist/config/__tests__/schema.test.js.map +1 -0
- package/dist/config/defaults.d.ts +13 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +15 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/env.d.ts +14 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/env.js +130 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/errors.d.ts +21 -0
- package/dist/config/errors.d.ts.map +1 -0
- package/dist/config/errors.js +30 -0
- package/dist/config/errors.js.map +1 -0
- package/dist/config/index.d.ts +21 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +41 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +8 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +87 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/merge.d.ts +12 -0
- package/dist/config/merge.d.ts.map +1 -0
- package/dist/config/merge.js +54 -0
- package/dist/config/merge.js.map +1 -0
- package/dist/config/schema.d.ts +644 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +491 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/core/__tests__/conditional-redirects.test.d.ts +2 -0
- package/dist/core/__tests__/conditional-redirects.test.d.ts.map +1 -0
- package/dist/core/__tests__/conditional-redirects.test.js +83 -0
- package/dist/core/__tests__/conditional-redirects.test.js.map +1 -0
- package/dist/core/__tests__/connections.test.d.ts +2 -0
- package/dist/core/__tests__/connections.test.d.ts.map +1 -0
- package/dist/core/__tests__/connections.test.js +158 -0
- package/dist/core/__tests__/connections.test.js.map +1 -0
- package/dist/core/__tests__/hash.test.d.ts +2 -0
- package/dist/core/__tests__/hash.test.d.ts.map +1 -0
- package/dist/core/__tests__/hash.test.js +139 -0
- package/dist/core/__tests__/hash.test.js.map +1 -0
- package/dist/core/__tests__/id.test.d.ts +2 -0
- package/dist/core/__tests__/id.test.d.ts.map +1 -0
- package/dist/core/__tests__/id.test.js +142 -0
- package/dist/core/__tests__/id.test.js.map +1 -0
- package/dist/core/__tests__/location.test.d.ts +2 -0
- package/dist/core/__tests__/location.test.d.ts.map +1 -0
- package/dist/core/__tests__/location.test.js +77 -0
- package/dist/core/__tests__/location.test.js.map +1 -0
- package/dist/core/__tests__/merge-driver.test.d.ts +2 -0
- package/dist/core/__tests__/merge-driver.test.d.ts.map +1 -0
- package/dist/core/__tests__/merge-driver.test.js +218 -0
- package/dist/core/__tests__/merge-driver.test.js.map +1 -0
- package/dist/core/__tests__/redirects.test.d.ts +2 -0
- package/dist/core/__tests__/redirects.test.d.ts.map +1 -0
- package/dist/core/__tests__/redirects.test.js +123 -0
- package/dist/core/__tests__/redirects.test.js.map +1 -0
- package/dist/core/__tests__/resolve-location-target.test.d.ts +8 -0
- package/dist/core/__tests__/resolve-location-target.test.d.ts.map +1 -0
- package/dist/core/__tests__/resolve-location-target.test.js +303 -0
- package/dist/core/__tests__/resolve-location-target.test.js.map +1 -0
- package/dist/core/__tests__/uri.test.d.ts +2 -0
- package/dist/core/__tests__/uri.test.d.ts.map +1 -0
- package/dist/core/__tests__/uri.test.js +159 -0
- package/dist/core/__tests__/uri.test.js.map +1 -0
- package/dist/core/__tests__/worktree.test.d.ts +2 -0
- package/dist/core/__tests__/worktree.test.d.ts.map +1 -0
- package/dist/core/__tests__/worktree.test.js +120 -0
- package/dist/core/__tests__/worktree.test.js.map +1 -0
- package/dist/core/conditional-redirects.d.ts +42 -0
- package/dist/core/conditional-redirects.d.ts.map +1 -0
- package/dist/core/conditional-redirects.js +59 -0
- package/dist/core/conditional-redirects.js.map +1 -0
- package/dist/core/connections.d.ts +87 -0
- package/dist/core/connections.d.ts.map +1 -0
- package/dist/core/connections.js +160 -0
- package/dist/core/connections.js.map +1 -0
- package/dist/core/discover.d.ts +39 -0
- package/dist/core/discover.d.ts.map +1 -0
- package/dist/core/discover.js +136 -0
- package/dist/core/discover.js.map +1 -0
- package/dist/core/hash.d.ts +25 -0
- package/dist/core/hash.d.ts.map +1 -0
- package/dist/core/hash.js +62 -0
- package/dist/core/hash.js.map +1 -0
- package/dist/core/id.d.ts +79 -0
- package/dist/core/id.d.ts.map +1 -0
- package/dist/core/id.js +141 -0
- package/dist/core/id.js.map +1 -0
- package/dist/core/index.d.ts +15 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +24 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/location.d.ts +70 -0
- package/dist/core/location.d.ts.map +1 -0
- package/dist/core/location.js +121 -0
- package/dist/core/location.js.map +1 -0
- package/dist/core/merge-driver.d.ts +50 -0
- package/dist/core/merge-driver.d.ts.map +1 -0
- package/dist/core/merge-driver.js +258 -0
- package/dist/core/merge-driver.js.map +1 -0
- package/dist/core/redirects.d.ts +91 -0
- package/dist/core/redirects.d.ts.map +1 -0
- package/dist/core/redirects.js +113 -0
- package/dist/core/redirects.js.map +1 -0
- package/dist/core/uri.d.ts +105 -0
- package/dist/core/uri.d.ts.map +1 -0
- package/dist/core/uri.js +190 -0
- package/dist/core/uri.js.map +1 -0
- package/dist/core/worktree.d.ts +106 -0
- package/dist/core/worktree.d.ts.map +1 -0
- package/dist/core/worktree.js +394 -0
- package/dist/core/worktree.js.map +1 -0
- package/dist/daemon/__tests__/flush.test.d.ts +5 -0
- package/dist/daemon/__tests__/flush.test.d.ts.map +1 -0
- package/dist/daemon/__tests__/flush.test.js +213 -0
- package/dist/daemon/__tests__/flush.test.js.map +1 -0
- package/dist/daemon/__tests__/integration.test.d.ts +7 -0
- package/dist/daemon/__tests__/integration.test.d.ts.map +1 -0
- package/dist/daemon/__tests__/integration.test.js +276 -0
- package/dist/daemon/__tests__/integration.test.js.map +1 -0
- package/dist/daemon/__tests__/ipc.test.d.ts +5 -0
- package/dist/daemon/__tests__/ipc.test.d.ts.map +1 -0
- package/dist/daemon/__tests__/ipc.test.js +314 -0
- package/dist/daemon/__tests__/ipc.test.js.map +1 -0
- package/dist/daemon/__tests__/lifecycle.test.d.ts +5 -0
- package/dist/daemon/__tests__/lifecycle.test.d.ts.map +1 -0
- package/dist/daemon/__tests__/lifecycle.test.js +301 -0
- package/dist/daemon/__tests__/lifecycle.test.js.map +1 -0
- package/dist/daemon/__tests__/lock.test.d.ts +5 -0
- package/dist/daemon/__tests__/lock.test.d.ts.map +1 -0
- package/dist/daemon/__tests__/lock.test.js +192 -0
- package/dist/daemon/__tests__/lock.test.js.map +1 -0
- package/dist/daemon/__tests__/methods/graph.test.d.ts +5 -0
- package/dist/daemon/__tests__/methods/graph.test.d.ts.map +1 -0
- package/dist/daemon/__tests__/methods/graph.test.js +309 -0
- package/dist/daemon/__tests__/methods/graph.test.js.map +1 -0
- package/dist/daemon/__tests__/methods/provider.test.d.ts +7 -0
- package/dist/daemon/__tests__/methods/provider.test.d.ts.map +1 -0
- package/dist/daemon/__tests__/methods/provider.test.js +181 -0
- package/dist/daemon/__tests__/methods/provider.test.js.map +1 -0
- package/dist/daemon/__tests__/methods/tools.test.d.ts +5 -0
- package/dist/daemon/__tests__/methods/tools.test.d.ts.map +1 -0
- package/dist/daemon/__tests__/methods/tools.test.js +587 -0
- package/dist/daemon/__tests__/methods/tools.test.js.map +1 -0
- package/dist/daemon/__tests__/multi-location.test.d.ts +8 -0
- package/dist/daemon/__tests__/multi-location.test.d.ts.map +1 -0
- package/dist/daemon/__tests__/multi-location.test.js +669 -0
- package/dist/daemon/__tests__/multi-location.test.js.map +1 -0
- package/dist/daemon/__tests__/registry.test.d.ts +5 -0
- package/dist/daemon/__tests__/registry.test.d.ts.map +1 -0
- package/dist/daemon/__tests__/registry.test.js +208 -0
- package/dist/daemon/__tests__/registry.test.js.map +1 -0
- package/dist/daemon/__tests__/watcher.test.d.ts +5 -0
- package/dist/daemon/__tests__/watcher.test.d.ts.map +1 -0
- package/dist/daemon/__tests__/watcher.test.js +234 -0
- package/dist/daemon/__tests__/watcher.test.js.map +1 -0
- package/dist/daemon/entire-linker.d.ts +68 -0
- package/dist/daemon/entire-linker.d.ts.map +1 -0
- package/dist/daemon/entire-linker.js +439 -0
- package/dist/daemon/entire-linker.js.map +1 -0
- package/dist/daemon/entire-watcher.d.ts +66 -0
- package/dist/daemon/entire-watcher.d.ts.map +1 -0
- package/dist/daemon/entire-watcher.js +258 -0
- package/dist/daemon/entire-watcher.js.map +1 -0
- package/dist/daemon/factory.d.ts +59 -0
- package/dist/daemon/factory.d.ts.map +1 -0
- package/dist/daemon/factory.js +72 -0
- package/dist/daemon/factory.js.map +1 -0
- package/dist/daemon/flush.d.ts +51 -0
- package/dist/daemon/flush.d.ts.map +1 -0
- package/dist/daemon/flush.js +89 -0
- package/dist/daemon/flush.js.map +1 -0
- package/dist/daemon/index.d.ts +39 -0
- package/dist/daemon/index.d.ts.map +1 -0
- package/dist/daemon/index.js +24 -0
- package/dist/daemon/index.js.map +1 -0
- package/dist/daemon/ipc.d.ts +97 -0
- package/dist/daemon/ipc.d.ts.map +1 -0
- package/dist/daemon/ipc.js +304 -0
- package/dist/daemon/ipc.js.map +1 -0
- package/dist/daemon/lifecycle.d.ts +85 -0
- package/dist/daemon/lifecycle.d.ts.map +1 -0
- package/dist/daemon/lifecycle.js +754 -0
- package/dist/daemon/lifecycle.js.map +1 -0
- package/dist/daemon/location-state.d.ts +85 -0
- package/dist/daemon/location-state.d.ts.map +1 -0
- package/dist/daemon/location-state.js +291 -0
- package/dist/daemon/location-state.js.map +1 -0
- package/dist/daemon/lock.d.ts +29 -0
- package/dist/daemon/lock.d.ts.map +1 -0
- package/dist/daemon/lock.js +131 -0
- package/dist/daemon/lock.js.map +1 -0
- package/dist/daemon/methods/__tests__/graph.test.d.ts +5 -0
- package/dist/daemon/methods/__tests__/graph.test.d.ts.map +1 -0
- package/dist/daemon/methods/__tests__/graph.test.js +274 -0
- package/dist/daemon/methods/__tests__/graph.test.js.map +1 -0
- package/dist/daemon/methods/__tests__/provider.test.d.ts +5 -0
- package/dist/daemon/methods/__tests__/provider.test.d.ts.map +1 -0
- package/dist/daemon/methods/__tests__/provider.test.js +184 -0
- package/dist/daemon/methods/__tests__/provider.test.js.map +1 -0
- package/dist/daemon/methods/__tests__/tools.test.d.ts +5 -0
- package/dist/daemon/methods/__tests__/tools.test.d.ts.map +1 -0
- package/dist/daemon/methods/__tests__/tools.test.js +295 -0
- package/dist/daemon/methods/__tests__/tools.test.js.map +1 -0
- package/dist/daemon/methods/archive.d.ts +22 -0
- package/dist/daemon/methods/archive.d.ts.map +1 -0
- package/dist/daemon/methods/archive.js +107 -0
- package/dist/daemon/methods/archive.js.map +1 -0
- package/dist/daemon/methods/graph.d.ts +26 -0
- package/dist/daemon/methods/graph.d.ts.map +1 -0
- package/dist/daemon/methods/graph.js +157 -0
- package/dist/daemon/methods/graph.js.map +1 -0
- package/dist/daemon/methods/lifecycle.d.ts +54 -0
- package/dist/daemon/methods/lifecycle.d.ts.map +1 -0
- package/dist/daemon/methods/lifecycle.js +46 -0
- package/dist/daemon/methods/lifecycle.js.map +1 -0
- package/dist/daemon/methods/location.d.ts +24 -0
- package/dist/daemon/methods/location.d.ts.map +1 -0
- package/dist/daemon/methods/location.js +72 -0
- package/dist/daemon/methods/location.js.map +1 -0
- package/dist/daemon/methods/provider.d.ts +22 -0
- package/dist/daemon/methods/provider.d.ts.map +1 -0
- package/dist/daemon/methods/provider.js +72 -0
- package/dist/daemon/methods/provider.js.map +1 -0
- package/dist/daemon/methods/tools.d.ts +23 -0
- package/dist/daemon/methods/tools.d.ts.map +1 -0
- package/dist/daemon/methods/tools.js +111 -0
- package/dist/daemon/methods/tools.js.map +1 -0
- package/dist/daemon/registry.d.ts +35 -0
- package/dist/daemon/registry.d.ts.map +1 -0
- package/dist/daemon/registry.js +189 -0
- package/dist/daemon/registry.js.map +1 -0
- package/dist/daemon/types.d.ts +101 -0
- package/dist/daemon/types.d.ts.map +1 -0
- package/dist/daemon/types.js +19 -0
- package/dist/daemon/types.js.map +1 -0
- package/dist/daemon/watcher.d.ts +62 -0
- package/dist/daemon/watcher.d.ts.map +1 -0
- package/dist/daemon/watcher.js +142 -0
- package/dist/daemon/watcher.js.map +1 -0
- package/dist/graph/EdgeTypeRegistry.d.ts +134 -0
- package/dist/graph/EdgeTypeRegistry.d.ts.map +1 -0
- package/dist/graph/EdgeTypeRegistry.js +255 -0
- package/dist/graph/EdgeTypeRegistry.js.map +1 -0
- package/dist/graph/FederatedGraph.d.ts +296 -0
- package/dist/graph/FederatedGraph.d.ts.map +1 -0
- package/dist/graph/FederatedGraph.js +406 -0
- package/dist/graph/FederatedGraph.js.map +1 -0
- package/dist/graph/GraphologyAdapter.d.ts +151 -0
- package/dist/graph/GraphologyAdapter.d.ts.map +1 -0
- package/dist/graph/GraphologyAdapter.js +209 -0
- package/dist/graph/GraphologyAdapter.js.map +1 -0
- package/dist/graph/HydratingFederatedGraph.d.ts +151 -0
- package/dist/graph/HydratingFederatedGraph.d.ts.map +1 -0
- package/dist/graph/HydratingFederatedGraph.js +327 -0
- package/dist/graph/HydratingFederatedGraph.js.map +1 -0
- package/dist/graph/__tests__/EdgeTypeRegistry.test.d.ts +2 -0
- package/dist/graph/__tests__/EdgeTypeRegistry.test.d.ts.map +1 -0
- package/dist/graph/__tests__/EdgeTypeRegistry.test.js +212 -0
- package/dist/graph/__tests__/EdgeTypeRegistry.test.js.map +1 -0
- package/dist/graph/__tests__/FederatedGraph.test.d.ts +2 -0
- package/dist/graph/__tests__/FederatedGraph.test.d.ts.map +1 -0
- package/dist/graph/__tests__/FederatedGraph.test.js +661 -0
- package/dist/graph/__tests__/FederatedGraph.test.js.map +1 -0
- package/dist/graph/__tests__/GraphologyAdapter.test.d.ts +2 -0
- package/dist/graph/__tests__/GraphologyAdapter.test.d.ts.map +1 -0
- package/dist/graph/__tests__/GraphologyAdapter.test.js +326 -0
- package/dist/graph/__tests__/GraphologyAdapter.test.js.map +1 -0
- package/dist/graph/__tests__/HydratingFederatedGraph.test.d.ts +2 -0
- package/dist/graph/__tests__/HydratingFederatedGraph.test.d.ts.map +1 -0
- package/dist/graph/__tests__/HydratingFederatedGraph.test.js +587 -0
- package/dist/graph/__tests__/HydratingFederatedGraph.test.js.map +1 -0
- package/dist/graph/__tests__/debounce.test.d.ts +5 -0
- package/dist/graph/__tests__/debounce.test.d.ts.map +1 -0
- package/dist/graph/__tests__/debounce.test.js +195 -0
- package/dist/graph/__tests__/debounce.test.js.map +1 -0
- package/dist/graph/__tests__/edge-cases.test.d.ts +8 -0
- package/dist/graph/__tests__/edge-cases.test.d.ts.map +1 -0
- package/dist/graph/__tests__/edge-cases.test.js +472 -0
- package/dist/graph/__tests__/edge-cases.test.js.map +1 -0
- package/dist/graph/__tests__/expansion.test.d.ts +2 -0
- package/dist/graph/__tests__/expansion.test.d.ts.map +1 -0
- package/dist/graph/__tests__/expansion.test.js +105 -0
- package/dist/graph/__tests__/expansion.test.js.map +1 -0
- package/dist/graph/__tests__/provider-store.test.d.ts +5 -0
- package/dist/graph/__tests__/provider-store.test.d.ts.map +1 -0
- package/dist/graph/__tests__/provider-store.test.js +791 -0
- package/dist/graph/__tests__/provider-store.test.js.map +1 -0
- package/dist/graph/__tests__/query.test.d.ts +5 -0
- package/dist/graph/__tests__/query.test.d.ts.map +1 -0
- package/dist/graph/__tests__/query.test.js +774 -0
- package/dist/graph/__tests__/query.test.js.map +1 -0
- package/dist/graph/__tests__/store.test.d.ts +5 -0
- package/dist/graph/__tests__/store.test.d.ts.map +1 -0
- package/dist/graph/__tests__/store.test.js +489 -0
- package/dist/graph/__tests__/store.test.js.map +1 -0
- package/dist/graph/__tests__/sync.test.d.ts +5 -0
- package/dist/graph/__tests__/sync.test.d.ts.map +1 -0
- package/dist/graph/__tests__/sync.test.js +129 -0
- package/dist/graph/__tests__/sync.test.js.map +1 -0
- package/dist/graph/__tests__/validation.test.d.ts +2 -0
- package/dist/graph/__tests__/validation.test.d.ts.map +1 -0
- package/dist/graph/__tests__/validation.test.js +521 -0
- package/dist/graph/__tests__/validation.test.js.map +1 -0
- package/dist/graph/coordination.d.ts +190 -0
- package/dist/graph/coordination.d.ts.map +1 -0
- package/dist/graph/coordination.js +180 -0
- package/dist/graph/coordination.js.map +1 -0
- package/dist/graph/debounce.d.ts +47 -0
- package/dist/graph/debounce.d.ts.map +1 -0
- package/dist/graph/debounce.js +95 -0
- package/dist/graph/debounce.js.map +1 -0
- package/dist/graph/expansion.d.ts +64 -0
- package/dist/graph/expansion.d.ts.map +1 -0
- package/dist/graph/expansion.js +205 -0
- package/dist/graph/expansion.js.map +1 -0
- package/dist/graph/history.d.ts +186 -0
- package/dist/graph/history.d.ts.map +1 -0
- package/dist/graph/history.js +155 -0
- package/dist/graph/history.js.map +1 -0
- package/dist/graph/index.d.ts +35 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +22 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graph/provider-store.d.ts +211 -0
- package/dist/graph/provider-store.d.ts.map +1 -0
- package/dist/graph/provider-store.js +594 -0
- package/dist/graph/provider-store.js.map +1 -0
- package/dist/graph/query.d.ts +90 -0
- package/dist/graph/query.d.ts.map +1 -0
- package/dist/graph/query.js +463 -0
- package/dist/graph/query.js.map +1 -0
- package/dist/graph/store.d.ts +71 -0
- package/dist/graph/store.d.ts.map +1 -0
- package/dist/graph/store.js +531 -0
- package/dist/graph/store.js.map +1 -0
- package/dist/graph/sync.d.ts +48 -0
- package/dist/graph/sync.d.ts.map +1 -0
- package/dist/graph/sync.js +60 -0
- package/dist/graph/sync.js.map +1 -0
- package/dist/graph/types.d.ts +291 -0
- package/dist/graph/types.d.ts.map +1 -0
- package/dist/graph/types.js +19 -0
- package/dist/graph/types.js.map +1 -0
- package/dist/graph/validation.d.ts +26 -0
- package/dist/graph/validation.d.ts.map +1 -0
- package/dist/graph/validation.js +338 -0
- package/dist/graph/validation.js.map +1 -0
- package/dist/index.d.ts +25 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -25
- package/dist/index.js.map +1 -1
- package/dist/materialization/archiver.d.ts +12 -0
- package/dist/materialization/archiver.d.ts.map +1 -0
- package/dist/materialization/archiver.js +273 -0
- package/dist/materialization/archiver.js.map +1 -0
- package/dist/materialization/git-archive-store.d.ts +17 -0
- package/dist/materialization/git-archive-store.d.ts.map +1 -0
- package/dist/materialization/git-archive-store.js +509 -0
- package/dist/materialization/git-archive-store.js.map +1 -0
- package/dist/materialization/git-remote-store.d.ts +22 -0
- package/dist/materialization/git-remote-store.d.ts.map +1 -0
- package/dist/materialization/git-remote-store.js +448 -0
- package/dist/materialization/git-remote-store.js.map +1 -0
- package/dist/materialization/graph-id.d.ts +53 -0
- package/dist/materialization/graph-id.d.ts.map +1 -0
- package/dist/materialization/graph-id.js +163 -0
- package/dist/materialization/graph-id.js.map +1 -0
- package/dist/materialization/http-remote-store.d.ts +12 -0
- package/dist/materialization/http-remote-store.d.ts.map +1 -0
- package/dist/materialization/http-remote-store.js +143 -0
- package/dist/materialization/http-remote-store.js.map +1 -0
- package/dist/materialization/index.d.ts +15 -0
- package/dist/materialization/index.d.ts.map +1 -0
- package/dist/materialization/index.js +17 -0
- package/dist/materialization/index.js.map +1 -0
- package/dist/materialization/remote-store-factory.d.ts +17 -0
- package/dist/materialization/remote-store-factory.d.ts.map +1 -0
- package/dist/materialization/remote-store-factory.js +46 -0
- package/dist/materialization/remote-store-factory.js.map +1 -0
- package/dist/materialization/snapshot.d.ts +34 -0
- package/dist/materialization/snapshot.d.ts.map +1 -0
- package/dist/materialization/snapshot.js +177 -0
- package/dist/materialization/snapshot.js.map +1 -0
- package/dist/materialization/types.d.ts +300 -0
- package/dist/materialization/types.d.ts.map +1 -0
- package/dist/materialization/types.js +17 -0
- package/dist/materialization/types.js.map +1 -0
- package/dist/providers/__tests__/beads.test.d.ts +5 -0
- package/dist/providers/__tests__/beads.test.d.ts.map +1 -0
- package/dist/providers/__tests__/beads.test.js +591 -0
- package/dist/providers/__tests__/beads.test.js.map +1 -0
- package/dist/providers/__tests__/claude-tasks.test.d.ts +5 -0
- package/dist/providers/__tests__/claude-tasks.test.d.ts.map +1 -0
- package/dist/providers/__tests__/claude-tasks.test.js +392 -0
- package/dist/providers/__tests__/claude-tasks.test.js.map +1 -0
- package/dist/providers/__tests__/from-config.test.d.ts +5 -0
- package/dist/providers/__tests__/from-config.test.d.ts.map +1 -0
- package/dist/providers/__tests__/from-config.test.js +152 -0
- package/dist/providers/__tests__/from-config.test.js.map +1 -0
- package/dist/providers/__tests__/materialization.test.d.ts +5 -0
- package/dist/providers/__tests__/materialization.test.d.ts.map +1 -0
- package/dist/providers/__tests__/materialization.test.js +407 -0
- package/dist/providers/__tests__/materialization.test.js.map +1 -0
- package/dist/providers/__tests__/native.test.d.ts +5 -0
- package/dist/providers/__tests__/native.test.d.ts.map +1 -0
- package/dist/providers/__tests__/native.test.js +566 -0
- package/dist/providers/__tests__/native.test.js.map +1 -0
- package/dist/providers/__tests__/registry.test.d.ts +5 -0
- package/dist/providers/__tests__/registry.test.d.ts.map +1 -0
- package/dist/providers/__tests__/registry.test.js +183 -0
- package/dist/providers/__tests__/registry.test.js.map +1 -0
- package/dist/providers/beads.d.ts +46 -0
- package/dist/providers/beads.d.ts.map +1 -0
- package/dist/providers/beads.js +865 -0
- package/dist/providers/beads.js.map +1 -0
- package/dist/providers/claude-tasks.d.ts +56 -0
- package/dist/providers/claude-tasks.d.ts.map +1 -0
- package/dist/providers/claude-tasks.js +282 -0
- package/dist/providers/claude-tasks.js.map +1 -0
- package/dist/providers/entire.d.ts +88 -0
- package/dist/providers/entire.d.ts.map +1 -0
- package/dist/providers/entire.js +409 -0
- package/dist/providers/entire.js.map +1 -0
- package/dist/providers/from-config.d.ts +47 -0
- package/dist/providers/from-config.d.ts.map +1 -0
- package/dist/providers/from-config.js +150 -0
- package/dist/providers/from-config.js.map +1 -0
- package/dist/providers/index.d.ts +26 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +29 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/location.d.ts +44 -0
- package/dist/providers/location.d.ts.map +1 -0
- package/dist/providers/location.js +157 -0
- package/dist/providers/location.js.map +1 -0
- package/dist/providers/materialization.d.ts +46 -0
- package/dist/providers/materialization.d.ts.map +1 -0
- package/dist/providers/materialization.js +237 -0
- package/dist/providers/materialization.js.map +1 -0
- package/dist/providers/native.d.ts +32 -0
- package/dist/providers/native.d.ts.map +1 -0
- package/dist/providers/native.js +552 -0
- package/dist/providers/native.js.map +1 -0
- package/dist/providers/registry.d.ts +11 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +97 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/sudocode.d.ts +49 -0
- package/dist/providers/sudocode.d.ts.map +1 -0
- package/dist/providers/sudocode.js +945 -0
- package/dist/providers/sudocode.js.map +1 -0
- package/dist/providers/sync.d.ts +299 -0
- package/dist/providers/sync.d.ts.map +1 -0
- package/dist/providers/sync.js +93 -0
- package/dist/providers/sync.js.map +1 -0
- package/dist/providers/traits/RelationshipQueryable.d.ts +129 -0
- package/dist/providers/traits/RelationshipQueryable.d.ts.map +1 -0
- package/dist/providers/traits/RelationshipQueryable.js +68 -0
- package/dist/providers/traits/RelationshipQueryable.js.map +1 -0
- package/dist/providers/traits/TaskManageable.d.ts +157 -0
- package/dist/providers/traits/TaskManageable.d.ts.map +1 -0
- package/dist/providers/traits/TaskManageable.js +37 -0
- package/dist/providers/traits/TaskManageable.js.map +1 -0
- package/dist/providers/traits/Watchable.d.ts +216 -0
- package/dist/providers/traits/Watchable.d.ts.map +1 -0
- package/dist/providers/traits/Watchable.js +37 -0
- package/dist/providers/traits/Watchable.js.map +1 -0
- package/dist/providers/traits/__tests__/RelationshipQueryable.test.d.ts +2 -0
- package/dist/providers/traits/__tests__/RelationshipQueryable.test.d.ts.map +1 -0
- package/dist/providers/traits/__tests__/RelationshipQueryable.test.js +169 -0
- package/dist/providers/traits/__tests__/RelationshipQueryable.test.js.map +1 -0
- package/dist/providers/traits/__tests__/TaskManageable.test.d.ts +2 -0
- package/dist/providers/traits/__tests__/TaskManageable.test.d.ts.map +1 -0
- package/dist/providers/traits/__tests__/TaskManageable.test.js +172 -0
- package/dist/providers/traits/__tests__/TaskManageable.test.js.map +1 -0
- package/dist/providers/traits/index.d.ts +13 -0
- package/dist/providers/traits/index.d.ts.map +1 -0
- package/dist/providers/traits/index.js +10 -0
- package/dist/providers/traits/index.js.map +1 -0
- package/dist/providers/types.d.ts +284 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +30 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/schema/__tests__/validation.test.d.ts +2 -0
- package/dist/schema/__tests__/validation.test.d.ts.map +1 -0
- package/dist/schema/__tests__/validation.test.js +241 -0
- package/dist/schema/__tests__/validation.test.js.map +1 -0
- package/dist/schema/base.d.ts +68 -0
- package/dist/schema/base.d.ts.map +1 -0
- package/dist/schema/base.js +5 -0
- package/dist/schema/base.js.map +1 -0
- package/dist/schema/edges.d.ts +49 -0
- package/dist/schema/edges.d.ts.map +1 -0
- package/dist/schema/edges.js +9 -0
- package/dist/schema/edges.js.map +1 -0
- package/dist/schema/index.d.ts +11 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +8 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/nodes.d.ts +97 -0
- package/dist/schema/nodes.d.ts.map +1 -0
- package/dist/schema/nodes.js +5 -0
- package/dist/schema/nodes.js.map +1 -0
- package/dist/schema/storage.d.ts +107 -0
- package/dist/schema/storage.d.ts.map +1 -0
- package/dist/schema/storage.js +10 -0
- package/dist/schema/storage.js.map +1 -0
- package/dist/schema/validation.d.ts +61 -0
- package/dist/schema/validation.d.ts.map +1 -0
- package/dist/schema/validation.js +170 -0
- package/dist/schema/validation.js.map +1 -0
- package/dist/storage/__tests__/atomic-write.test.d.ts +5 -0
- package/dist/storage/__tests__/atomic-write.test.d.ts.map +1 -0
- package/dist/storage/__tests__/atomic-write.test.js +170 -0
- package/dist/storage/__tests__/atomic-write.test.js.map +1 -0
- package/dist/storage/__tests__/file-lock.test.d.ts +2 -0
- package/dist/storage/__tests__/file-lock.test.d.ts.map +1 -0
- package/dist/storage/__tests__/file-lock.test.js +89 -0
- package/dist/storage/__tests__/file-lock.test.js.map +1 -0
- package/dist/storage/__tests__/jsonl.test.d.ts +2 -0
- package/dist/storage/__tests__/jsonl.test.d.ts.map +1 -0
- package/dist/storage/__tests__/jsonl.test.js +228 -0
- package/dist/storage/__tests__/jsonl.test.js.map +1 -0
- package/dist/storage/__tests__/locked-writer.test.d.ts +2 -0
- package/dist/storage/__tests__/locked-writer.test.d.ts.map +1 -0
- package/dist/storage/__tests__/locked-writer.test.js +109 -0
- package/dist/storage/__tests__/locked-writer.test.js.map +1 -0
- package/dist/storage/__tests__/sqlite.test.d.ts +2 -0
- package/dist/storage/__tests__/sqlite.test.d.ts.map +1 -0
- package/dist/storage/__tests__/sqlite.test.js +470 -0
- package/dist/storage/__tests__/sqlite.test.js.map +1 -0
- package/dist/storage/atomic-write.d.ts +38 -0
- package/dist/storage/atomic-write.d.ts.map +1 -0
- package/dist/storage/atomic-write.js +83 -0
- package/dist/storage/atomic-write.js.map +1 -0
- package/dist/storage/file-lock.d.ts +66 -0
- package/dist/storage/file-lock.d.ts.map +1 -0
- package/dist/storage/file-lock.js +176 -0
- package/dist/storage/file-lock.js.map +1 -0
- package/dist/storage/index.d.ts +11 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +13 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/interface.d.ts +219 -0
- package/dist/storage/interface.d.ts.map +1 -0
- package/dist/storage/interface.js +22 -0
- package/dist/storage/interface.js.map +1 -0
- package/dist/storage/jsonl.d.ts +106 -0
- package/dist/storage/jsonl.d.ts.map +1 -0
- package/dist/storage/jsonl.js +218 -0
- package/dist/storage/jsonl.js.map +1 -0
- package/dist/storage/locked-writer.d.ts +67 -0
- package/dist/storage/locked-writer.d.ts.map +1 -0
- package/dist/storage/locked-writer.js +105 -0
- package/dist/storage/locked-writer.js.map +1 -0
- package/dist/storage/sqlite-schema.d.ts +48 -0
- package/dist/storage/sqlite-schema.d.ts.map +1 -0
- package/dist/storage/sqlite-schema.js +169 -0
- package/dist/storage/sqlite-schema.js.map +1 -0
- package/dist/storage/sqlite.d.ts +73 -0
- package/dist/storage/sqlite.d.ts.map +1 -0
- package/dist/storage/sqlite.js +698 -0
- package/dist/storage/sqlite.js.map +1 -0
- package/dist/tools/__tests__/annotate.test.d.ts +5 -0
- package/dist/tools/__tests__/annotate.test.d.ts.map +1 -0
- package/dist/tools/__tests__/annotate.test.js +314 -0
- package/dist/tools/__tests__/annotate.test.js.map +1 -0
- package/dist/tools/__tests__/link.test.d.ts +5 -0
- package/dist/tools/__tests__/link.test.d.ts.map +1 -0
- package/dist/tools/__tests__/link.test.js +245 -0
- package/dist/tools/__tests__/link.test.js.map +1 -0
- package/dist/tools/__tests__/query.test.d.ts +5 -0
- package/dist/tools/__tests__/query.test.d.ts.map +1 -0
- package/dist/tools/__tests__/query.test.js +288 -0
- package/dist/tools/__tests__/query.test.js.map +1 -0
- package/dist/tools/__tests__/task.test.d.ts +5 -0
- package/dist/tools/__tests__/task.test.d.ts.map +1 -0
- package/dist/tools/__tests__/task.test.js +178 -0
- package/dist/tools/__tests__/task.test.js.map +1 -0
- package/dist/tools/annotate.d.ts +17 -0
- package/dist/tools/annotate.d.ts.map +1 -0
- package/dist/tools/annotate.js +218 -0
- package/dist/tools/annotate.js.map +1 -0
- package/dist/tools/index.d.ts +14 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +14 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/link.d.ts +17 -0
- package/dist/tools/link.d.ts.map +1 -0
- package/dist/tools/link.js +127 -0
- package/dist/tools/link.js.map +1 -0
- package/dist/tools/query.d.ts +17 -0
- package/dist/tools/query.d.ts.map +1 -0
- package/dist/tools/query.js +342 -0
- package/dist/tools/query.js.map +1 -0
- package/dist/tools/task.d.ts +20 -0
- package/dist/tools/task.d.ts.map +1 -0
- package/dist/tools/task.js +161 -0
- package/dist/tools/task.js.map +1 -0
- package/dist/tools/types.d.ts +334 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +19 -0
- package/dist/tools/types.js.map +1 -0
- package/package.json +40 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RelationshipQueryable.js","sourceRoot":"","sources":["../../../src/providers/traits/RelationshipQueryable.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgGH;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAkB;IAElB,MAAM,CAAC,GAAG,QAA4C,CAAC;IACvD,OAAO,OAAO,CAAC,CAAC,UAAU,KAAK,UAAU,IAAI,OAAO,CAAC,CAAC,kBAAkB,KAAK,UAAU,CAAC;AAC1F,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAqB,EAAE,QAAgB;IACvE,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CACpC,KAAqB,EACrB,MAAc,EACd,SAAwB;IAExB,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,IAAI;YACP,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;QAC9C,KAAK,KAAK;YACR,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAChD,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAkB,EAAE,MAAc;IACpE,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC,EAAE,CAAC;IACzC,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IACzC,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TaskManageable Trait
|
|
3
|
+
*
|
|
4
|
+
* Optional trait for providers that support task lifecycle operations.
|
|
5
|
+
* Providers implement this trait to expose semantic task actions
|
|
6
|
+
* (start, complete, block, etc.) beyond raw CRUD.
|
|
7
|
+
*
|
|
8
|
+
* Not all providers manage tasks — a spec-only provider or a feed
|
|
9
|
+
* provider would skip this trait entirely and still work as a
|
|
10
|
+
* standard Provider for CRUD operations.
|
|
11
|
+
*/
|
|
12
|
+
import type { Provider, ProviderNode, ProviderOperationContext } from '../types.js';
|
|
13
|
+
/**
|
|
14
|
+
* Semantic task actions.
|
|
15
|
+
*
|
|
16
|
+
* Providers map these to their own native status model.
|
|
17
|
+
* For example, a provider with statuses ['pending', 'active', 'done']
|
|
18
|
+
* might map 'start' → 'active' and 'complete' → 'done'.
|
|
19
|
+
*/
|
|
20
|
+
export type TaskAction = 'start' | 'complete' | 'block' | 'reopen' | 'close';
|
|
21
|
+
/**
|
|
22
|
+
* Declares what task operations a provider supports.
|
|
23
|
+
*
|
|
24
|
+
* Consumers inspect this to know what actions are valid before
|
|
25
|
+
* attempting them. The `actions` array is the minimum contract —
|
|
26
|
+
* optional capabilities like assignment are declared separately.
|
|
27
|
+
*/
|
|
28
|
+
export interface TaskCapabilities {
|
|
29
|
+
/** Which semantic actions this provider supports */
|
|
30
|
+
actions: TaskAction[];
|
|
31
|
+
/** Whether the provider supports assigning tasks to owners */
|
|
32
|
+
supportsAssignment: boolean;
|
|
33
|
+
/** Whether the provider can compute ready tasks natively */
|
|
34
|
+
supportsReadyQuery: boolean;
|
|
35
|
+
/** The provider's native status values (informational) */
|
|
36
|
+
statusModel: string[];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Options for querying ready tasks from a provider
|
|
40
|
+
*/
|
|
41
|
+
export interface ReadyTaskOptions {
|
|
42
|
+
/** Maximum number of tasks to return */
|
|
43
|
+
limit?: number;
|
|
44
|
+
/** Filter by tags */
|
|
45
|
+
tags?: string[];
|
|
46
|
+
/** Filter by minimum priority */
|
|
47
|
+
priority?: number;
|
|
48
|
+
/** Filter by assignee */
|
|
49
|
+
assignee?: string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* TaskManageable Trait
|
|
53
|
+
*
|
|
54
|
+
* Providers implement this trait to expose task lifecycle operations
|
|
55
|
+
* that go beyond raw CRUD. The trait uses semantic actions rather than
|
|
56
|
+
* direct status strings — each provider maps actions to its own
|
|
57
|
+
* status model internally.
|
|
58
|
+
*
|
|
59
|
+
* Required methods:
|
|
60
|
+
* - `transitionTask` — apply a semantic action to a task
|
|
61
|
+
* - `readyTasks` — list tasks with no active blockers
|
|
62
|
+
*
|
|
63
|
+
* Optional methods:
|
|
64
|
+
* - `assignTask` — assign a task to an owner
|
|
65
|
+
* - `validActions` — introspect valid next actions for a task
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```typescript
|
|
69
|
+
* class BeadsProvider implements Provider, TaskManageable {
|
|
70
|
+
* readonly taskCapabilities: TaskCapabilities = {
|
|
71
|
+
* actions: ['start', 'complete', 'block', 'reopen'],
|
|
72
|
+
* supportsAssignment: true,
|
|
73
|
+
* supportsReadyQuery: true,
|
|
74
|
+
* statusModel: ['open', 'in_progress', 'blocked', 'done'],
|
|
75
|
+
* }
|
|
76
|
+
*
|
|
77
|
+
* async transitionTask(id: string, action: TaskAction) {
|
|
78
|
+
* // Map semantic action to bd CLI command
|
|
79
|
+
* switch (action) {
|
|
80
|
+
* case 'start': return this.exec(['task', 'start', id])
|
|
81
|
+
* case 'complete': return this.exec(['task', 'complete', id])
|
|
82
|
+
* // ...
|
|
83
|
+
* }
|
|
84
|
+
* }
|
|
85
|
+
*
|
|
86
|
+
* async readyTasks(options?: ReadyTaskOptions) {
|
|
87
|
+
* return this.exec(['task', 'list', '--ready'])
|
|
88
|
+
* }
|
|
89
|
+
* }
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
export interface TaskManageable {
|
|
93
|
+
/** Declares what task operations this provider supports */
|
|
94
|
+
readonly taskCapabilities: TaskCapabilities;
|
|
95
|
+
/**
|
|
96
|
+
* Transition a task's status using a semantic action.
|
|
97
|
+
*
|
|
98
|
+
* The provider maps the action to its native status model.
|
|
99
|
+
* Throws if the action is not valid for the task's current state.
|
|
100
|
+
*
|
|
101
|
+
* @param id - Task ID (in provider's local format)
|
|
102
|
+
* @param action - The semantic action to apply
|
|
103
|
+
* @param context - Optional operational context
|
|
104
|
+
* @returns The updated task node
|
|
105
|
+
*/
|
|
106
|
+
transitionTask(id: string, action: TaskAction, context?: ProviderOperationContext): Promise<ProviderNode>;
|
|
107
|
+
/**
|
|
108
|
+
* Get tasks that are ready to work on (no active blockers).
|
|
109
|
+
*
|
|
110
|
+
* Each provider determines "ready" based on its own semantics.
|
|
111
|
+
* The store layer can aggregate across providers.
|
|
112
|
+
*
|
|
113
|
+
* @param options - Filtering options
|
|
114
|
+
* @param context - Optional operational context
|
|
115
|
+
* @returns Array of ready task nodes
|
|
116
|
+
*/
|
|
117
|
+
readyTasks(options?: ReadyTaskOptions, context?: ProviderOperationContext): Promise<ProviderNode[]>;
|
|
118
|
+
/**
|
|
119
|
+
* Assign a task to an owner.
|
|
120
|
+
*
|
|
121
|
+
* Optional — only available when `taskCapabilities.supportsAssignment` is true.
|
|
122
|
+
*
|
|
123
|
+
* @param id - Task ID (in provider's local format)
|
|
124
|
+
* @param assignee - The assignee identifier
|
|
125
|
+
* @param context - Optional operational context
|
|
126
|
+
* @returns The updated task node
|
|
127
|
+
*/
|
|
128
|
+
assignTask?(id: string, assignee: string, context?: ProviderOperationContext): Promise<ProviderNode>;
|
|
129
|
+
/**
|
|
130
|
+
* Get the valid next actions for a task in its current state.
|
|
131
|
+
*
|
|
132
|
+
* Optional — useful for UI to show available actions.
|
|
133
|
+
* If not implemented, consumers can fall back to `taskCapabilities.actions`.
|
|
134
|
+
*
|
|
135
|
+
* @param id - Task ID (in provider's local format)
|
|
136
|
+
* @param context - Optional operational context
|
|
137
|
+
* @returns Array of valid actions for this task's current state
|
|
138
|
+
*/
|
|
139
|
+
validActions?(id: string, context?: ProviderOperationContext): Promise<TaskAction[]>;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Check if a provider implements the TaskManageable trait
|
|
143
|
+
*
|
|
144
|
+
* @param provider - The provider to check
|
|
145
|
+
* @returns True if the provider supports task lifecycle operations
|
|
146
|
+
*
|
|
147
|
+
* @example
|
|
148
|
+
* ```typescript
|
|
149
|
+
* const provider = registry.resolveProvider(uri)
|
|
150
|
+
* if (provider && isTaskManageable(provider)) {
|
|
151
|
+
* await provider.transitionTask(taskId, 'start')
|
|
152
|
+
* const ready = await provider.readyTasks({ limit: 10 })
|
|
153
|
+
* }
|
|
154
|
+
* ```
|
|
155
|
+
*/
|
|
156
|
+
export declare function isTaskManageable(provider: Provider): provider is Provider & TaskManageable;
|
|
157
|
+
//# sourceMappingURL=TaskManageable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskManageable.d.ts","sourceRoot":"","sources":["../../../src/providers/traits/TaskManageable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAMpF;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAM7E;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oDAAoD;IACpD,OAAO,EAAE,UAAU,EAAE,CAAC;IAEtB,8DAA8D;IAC9D,kBAAkB,EAAE,OAAO,CAAC;IAE5B,4DAA4D;IAC5D,kBAAkB,EAAE,OAAO,CAAC;IAE5B,0DAA0D;IAC1D,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAMD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,qBAAqB;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,MAAM,WAAW,cAAc;IAC7B,2DAA2D;IAC3D,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAE5C;;;;;;;;;;OAUG;IACH,cAAc,CACZ,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,UAAU,EAClB,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,YAAY,CAAC,CAAC;IAEzB;;;;;;;;;OASG;IACH,UAAU,CACR,OAAO,CAAC,EAAE,gBAAgB,EAC1B,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAE3B;;;;;;;;;OASG;IACH,UAAU,CAAC,CACT,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,YAAY,CAAC,CAAC;IAEzB;;;;;;;;;OASG;IACH,YAAY,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,wBAAwB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;CACtF;AAMD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,IAAI,QAAQ,GAAG,cAAc,CAQ1F"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TaskManageable Trait
|
|
3
|
+
*
|
|
4
|
+
* Optional trait for providers that support task lifecycle operations.
|
|
5
|
+
* Providers implement this trait to expose semantic task actions
|
|
6
|
+
* (start, complete, block, etc.) beyond raw CRUD.
|
|
7
|
+
*
|
|
8
|
+
* Not all providers manage tasks — a spec-only provider or a feed
|
|
9
|
+
* provider would skip this trait entirely and still work as a
|
|
10
|
+
* standard Provider for CRUD operations.
|
|
11
|
+
*/
|
|
12
|
+
// ============================================================================
|
|
13
|
+
// Type Guard
|
|
14
|
+
// ============================================================================
|
|
15
|
+
/**
|
|
16
|
+
* Check if a provider implements the TaskManageable trait
|
|
17
|
+
*
|
|
18
|
+
* @param provider - The provider to check
|
|
19
|
+
* @returns True if the provider supports task lifecycle operations
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* const provider = registry.resolveProvider(uri)
|
|
24
|
+
* if (provider && isTaskManageable(provider)) {
|
|
25
|
+
* await provider.transitionTask(taskId, 'start')
|
|
26
|
+
* const ready = await provider.readyTasks({ limit: 10 })
|
|
27
|
+
* }
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export function isTaskManageable(provider) {
|
|
31
|
+
const p = provider;
|
|
32
|
+
return (typeof p.transitionTask === 'function' &&
|
|
33
|
+
typeof p.readyTasks === 'function' &&
|
|
34
|
+
p.taskCapabilities !== undefined &&
|
|
35
|
+
typeof p.taskCapabilities === 'object');
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=TaskManageable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskManageable.js","sourceRoot":"","sources":["../../../src/providers/traits/TaskManageable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA6KH,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAkB;IACjD,MAAM,CAAC,GAAG,QAAqC,CAAC;IAChD,OAAO,CACL,OAAO,CAAC,CAAC,cAAc,KAAK,UAAU;QACtC,OAAO,CAAC,CAAC,UAAU,KAAK,UAAU;QAClC,CAAC,CAAC,gBAAgB,KAAK,SAAS;QAChC,OAAO,CAAC,CAAC,gBAAgB,KAAK,QAAQ,CACvC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Watchable Trait
|
|
3
|
+
*
|
|
4
|
+
* Optional trait for providers that can detect and emit change events
|
|
5
|
+
* from their underlying data source. Each provider is responsible for
|
|
6
|
+
* its own watching mechanism (file watching, polling, webhooks, etc.).
|
|
7
|
+
*
|
|
8
|
+
* The granularity of change events is provider-dependent. Providers
|
|
9
|
+
* declare their capabilities via `watchGranularity`, and consumers
|
|
10
|
+
* can adapt their behavior accordingly.
|
|
11
|
+
*/
|
|
12
|
+
import type { Provider, ProviderNode } from '../types.js';
|
|
13
|
+
import type { ProviderEdge } from './RelationshipQueryable.js';
|
|
14
|
+
/**
|
|
15
|
+
* Detection mechanism used by the provider
|
|
16
|
+
*
|
|
17
|
+
* Informational — helps consumers understand latency characteristics.
|
|
18
|
+
*/
|
|
19
|
+
export type WatchMechanism = 'file-watch' | 'polling' | 'webhook' | 'stream';
|
|
20
|
+
/**
|
|
21
|
+
* Declares what level of detail a provider's change events carry.
|
|
22
|
+
*
|
|
23
|
+
* Providers set these flags so consumers know what to expect
|
|
24
|
+
* without inspecting every event at runtime.
|
|
25
|
+
*/
|
|
26
|
+
export interface WatchGranularity {
|
|
27
|
+
/**
|
|
28
|
+
* Provider can report which fields changed on a node update.
|
|
29
|
+
* When true, `ProviderNodeChangeEvent.changedFields` may be populated.
|
|
30
|
+
*/
|
|
31
|
+
reportsChangedFields: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Provider can report the previous values of changed fields.
|
|
34
|
+
* When true, `ProviderNodeChangeEvent.previousValues` may be populated.
|
|
35
|
+
* Implies `reportsChangedFields`.
|
|
36
|
+
*/
|
|
37
|
+
reportsPreviousValues: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Provider can emit edge change events separately from node events.
|
|
40
|
+
* When true, `ProviderEdgeChangeEvent` events may be emitted.
|
|
41
|
+
*/
|
|
42
|
+
reportsEdgeChanges: boolean;
|
|
43
|
+
/** How the provider detects changes (informational) */
|
|
44
|
+
mechanism: WatchMechanism;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Event emitted when a node changes in the provider's data source.
|
|
48
|
+
*
|
|
49
|
+
* All fields beyond `type`, `nodeId`, `uri`, and `timestamp` are
|
|
50
|
+
* optional and depend on the provider's declared granularity.
|
|
51
|
+
*/
|
|
52
|
+
export interface ProviderNodeChangeEvent {
|
|
53
|
+
/** What happened */
|
|
54
|
+
type: 'created' | 'updated' | 'deleted';
|
|
55
|
+
/** Node ID in the provider's local format */
|
|
56
|
+
nodeId: string;
|
|
57
|
+
/** Canonical URI for the node */
|
|
58
|
+
uri: string;
|
|
59
|
+
/** Full node data (absent for deletes, may be absent if provider can't supply cheaply) */
|
|
60
|
+
node?: ProviderNode;
|
|
61
|
+
/**
|
|
62
|
+
* Which fields changed (only for 'updated' events).
|
|
63
|
+
* Present when `watchGranularity.reportsChangedFields` is true.
|
|
64
|
+
* Uses ProviderNode field names: 'title', 'content', 'status', 'priority', etc.
|
|
65
|
+
*/
|
|
66
|
+
changedFields?: string[];
|
|
67
|
+
/**
|
|
68
|
+
* Previous values of changed fields (only for 'updated' events).
|
|
69
|
+
* Present when `watchGranularity.reportsPreviousValues` is true.
|
|
70
|
+
* Keys match `changedFields`.
|
|
71
|
+
*/
|
|
72
|
+
previousValues?: Record<string, unknown>;
|
|
73
|
+
/** Provider-side timestamp of when the change occurred (ISO 8601) */
|
|
74
|
+
timestamp: string;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Event emitted when an edge changes in the provider's data source.
|
|
78
|
+
*
|
|
79
|
+
* Only emitted when `watchGranularity.reportsEdgeChanges` is true.
|
|
80
|
+
* For providers where edges are embedded in nodes (e.g., Beads
|
|
81
|
+
* blocks/blockedBy arrays), edge changes arrive as part of
|
|
82
|
+
* node update events instead.
|
|
83
|
+
*/
|
|
84
|
+
export interface ProviderEdgeChangeEvent {
|
|
85
|
+
/** What happened */
|
|
86
|
+
type: 'created' | 'deleted';
|
|
87
|
+
/** The edge that changed */
|
|
88
|
+
edge: ProviderEdge;
|
|
89
|
+
/** URI of the source node */
|
|
90
|
+
sourceUri: string;
|
|
91
|
+
/** URI of the target node */
|
|
92
|
+
targetUri: string;
|
|
93
|
+
/** Provider-side timestamp (ISO 8601) */
|
|
94
|
+
timestamp: string;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Discriminated union of all provider change events.
|
|
98
|
+
*
|
|
99
|
+
* Consumers switch on `kind` to handle node vs. edge events:
|
|
100
|
+
*
|
|
101
|
+
* ```typescript
|
|
102
|
+
* provider.startWatching((event) => {
|
|
103
|
+
* switch (event.kind) {
|
|
104
|
+
* case 'node':
|
|
105
|
+
* handleNodeChange(event.event)
|
|
106
|
+
* break
|
|
107
|
+
* case 'edge':
|
|
108
|
+
* handleEdgeChange(event.event)
|
|
109
|
+
* break
|
|
110
|
+
* }
|
|
111
|
+
* })
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
export type ProviderChangeEvent = {
|
|
115
|
+
kind: 'node';
|
|
116
|
+
event: ProviderNodeChangeEvent;
|
|
117
|
+
} | {
|
|
118
|
+
kind: 'edge';
|
|
119
|
+
event: ProviderEdgeChangeEvent;
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* Callback for receiving provider change events
|
|
123
|
+
*/
|
|
124
|
+
export type WatchChangeCallback = (event: ProviderChangeEvent) => void;
|
|
125
|
+
/**
|
|
126
|
+
* Watchable Trait
|
|
127
|
+
*
|
|
128
|
+
* Providers implement this trait to emit change events from their
|
|
129
|
+
* underlying data source. The detection mechanism is entirely
|
|
130
|
+
* provider-specific:
|
|
131
|
+
*
|
|
132
|
+
* - **Beads**: file-watch on Beads JSONL files, diff against cached hashes
|
|
133
|
+
* - **Native**: delegates to the daemon FileWatcher on graph.jsonl
|
|
134
|
+
* - **Jira/Linear**: webhook receiver or long-poll
|
|
135
|
+
* - **Claude Tasks**: not applicable (ephemeral, caller is only writer)
|
|
136
|
+
*
|
|
137
|
+
* Lifecycle:
|
|
138
|
+
* 1. Check `isWatchable(provider)` before calling watch methods
|
|
139
|
+
* 2. Call `startWatching(callback)` to begin receiving events
|
|
140
|
+
* 3. Call `stopWatching()` to clean up resources
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* ```typescript
|
|
144
|
+
* const provider = registry.resolveProvider(uri)
|
|
145
|
+
* if (provider && isWatchable(provider)) {
|
|
146
|
+
* console.log('Mechanism:', provider.watchGranularity.mechanism)
|
|
147
|
+
* console.log('Reports fields:', provider.watchGranularity.reportsChangedFields)
|
|
148
|
+
*
|
|
149
|
+
* provider.startWatching((event) => {
|
|
150
|
+
* if (event.kind === 'node' && event.event.type === 'updated') {
|
|
151
|
+
* console.log(`Node ${event.event.nodeId} changed`)
|
|
152
|
+
* if (event.event.changedFields) {
|
|
153
|
+
* console.log('Changed fields:', event.event.changedFields)
|
|
154
|
+
* }
|
|
155
|
+
* }
|
|
156
|
+
* })
|
|
157
|
+
*
|
|
158
|
+
* // Later...
|
|
159
|
+
* provider.stopWatching()
|
|
160
|
+
* }
|
|
161
|
+
* ```
|
|
162
|
+
*/
|
|
163
|
+
export interface Watchable {
|
|
164
|
+
/**
|
|
165
|
+
* Declares the granularity of change events this provider emits.
|
|
166
|
+
*
|
|
167
|
+
* Consumers use this to adapt behavior — e.g., skip full re-fetch
|
|
168
|
+
* when changedFields is available, or listen for edge events only
|
|
169
|
+
* when the provider reports them.
|
|
170
|
+
*/
|
|
171
|
+
readonly watchGranularity: WatchGranularity;
|
|
172
|
+
/**
|
|
173
|
+
* Start watching for changes and emitting events via the callback.
|
|
174
|
+
*
|
|
175
|
+
* Providers should:
|
|
176
|
+
* - Set up their detection mechanism (file watcher, interval, etc.)
|
|
177
|
+
* - Emit events through the callback as changes are detected
|
|
178
|
+
* - Handle their own debouncing and deduplication
|
|
179
|
+
* - Be resilient to transient errors (log and continue)
|
|
180
|
+
*
|
|
181
|
+
* Calling `startWatching` when already watching replaces the callback.
|
|
182
|
+
*
|
|
183
|
+
* @param callback - Function called for each change event
|
|
184
|
+
*/
|
|
185
|
+
startWatching(callback: WatchChangeCallback): void;
|
|
186
|
+
/**
|
|
187
|
+
* Stop watching and release all associated resources.
|
|
188
|
+
*
|
|
189
|
+
* After calling `stopWatching`:
|
|
190
|
+
* - No more events will be emitted
|
|
191
|
+
* - File watchers / intervals / connections are cleaned up
|
|
192
|
+
* - `isWatching` returns false
|
|
193
|
+
*
|
|
194
|
+
* Safe to call multiple times or when not watching.
|
|
195
|
+
*/
|
|
196
|
+
stopWatching(): void;
|
|
197
|
+
/** Whether the provider is currently watching for changes */
|
|
198
|
+
readonly isWatching: boolean;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Check if a provider implements the Watchable trait
|
|
202
|
+
*
|
|
203
|
+
* @param provider - The provider to check
|
|
204
|
+
* @returns True if the provider can watch for changes
|
|
205
|
+
*
|
|
206
|
+
* @example
|
|
207
|
+
* ```typescript
|
|
208
|
+
* for (const provider of registry.list()) {
|
|
209
|
+
* if (isWatchable(provider)) {
|
|
210
|
+
* provider.startWatching(handleChange)
|
|
211
|
+
* }
|
|
212
|
+
* }
|
|
213
|
+
* ```
|
|
214
|
+
*/
|
|
215
|
+
export declare function isWatchable(provider: Provider): provider is Provider & Watchable;
|
|
216
|
+
//# sourceMappingURL=Watchable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Watchable.d.ts","sourceRoot":"","sources":["../../../src/providers/traits/Watchable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAM/D;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE7E;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,oBAAoB,EAAE,OAAO,CAAC;IAE9B;;;;OAIG;IACH,qBAAqB,EAAE,OAAO,CAAC;IAE/B;;;OAGG;IACH,kBAAkB,EAAE,OAAO,CAAC;IAE5B,uDAAuD;IACvD,SAAS,EAAE,cAAc,CAAC;CAC3B;AAMD;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,oBAAoB;IACpB,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAExC,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAC;IAEf,iCAAiC;IACjC,GAAG,EAAE,MAAM,CAAC;IAEZ,0FAA0F;IAC1F,IAAI,CAAC,EAAE,YAAY,CAAC;IAEpB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAEzB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEzC,qEAAqE;IACrE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,uBAAuB;IACtC,oBAAoB;IACpB,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;IAE5B,4BAA4B;IAC5B,IAAI,EAAE,YAAY,CAAC;IAEnB,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAElB,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAElB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,uBAAuB,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,uBAAuB,CAAA;CAAE,CAAC;AAErD;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;AAMvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,WAAW,SAAS;IACxB;;;;;;OAMG;IACH,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAE5C;;;;;;;;;;;;OAYG;IACH,aAAa,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAEnD;;;;;;;;;OASG;IACH,YAAY,IAAI,IAAI,CAAC;IAErB,6DAA6D;IAC7D,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAMD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,IAAI,QAAQ,GAAG,SAAS,CAQhF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Watchable Trait
|
|
3
|
+
*
|
|
4
|
+
* Optional trait for providers that can detect and emit change events
|
|
5
|
+
* from their underlying data source. Each provider is responsible for
|
|
6
|
+
* its own watching mechanism (file watching, polling, webhooks, etc.).
|
|
7
|
+
*
|
|
8
|
+
* The granularity of change events is provider-dependent. Providers
|
|
9
|
+
* declare their capabilities via `watchGranularity`, and consumers
|
|
10
|
+
* can adapt their behavior accordingly.
|
|
11
|
+
*/
|
|
12
|
+
// ============================================================================
|
|
13
|
+
// Type Guard
|
|
14
|
+
// ============================================================================
|
|
15
|
+
/**
|
|
16
|
+
* Check if a provider implements the Watchable trait
|
|
17
|
+
*
|
|
18
|
+
* @param provider - The provider to check
|
|
19
|
+
* @returns True if the provider can watch for changes
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* for (const provider of registry.list()) {
|
|
24
|
+
* if (isWatchable(provider)) {
|
|
25
|
+
* provider.startWatching(handleChange)
|
|
26
|
+
* }
|
|
27
|
+
* }
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export function isWatchable(provider) {
|
|
31
|
+
const p = provider;
|
|
32
|
+
return (typeof p.startWatching === 'function' &&
|
|
33
|
+
typeof p.stopWatching === 'function' &&
|
|
34
|
+
p.watchGranularity !== undefined &&
|
|
35
|
+
typeof p.watchGranularity === 'object');
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=Watchable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Watchable.js","sourceRoot":"","sources":["../../../src/providers/traits/Watchable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA8NH,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,WAAW,CAAC,QAAkB;IAC5C,MAAM,CAAC,GAAG,QAAgC,CAAC;IAC3C,OAAO,CACL,OAAO,CAAC,CAAC,aAAa,KAAK,UAAU;QACrC,OAAO,CAAC,CAAC,YAAY,KAAK,UAAU;QACpC,CAAC,CAAC,gBAAgB,KAAK,SAAS;QAChC,OAAO,CAAC,CAAC,gBAAgB,KAAK,QAAQ,CACvC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RelationshipQueryable.test.d.ts","sourceRoot":"","sources":["../../../../src/providers/traits/__tests__/RelationshipQueryable.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { isRelationshipQueryable, filterEdgesByType, filterEdgesByDirection, getNeighborFromEdge, } from '../RelationshipQueryable.js';
|
|
3
|
+
// Mock provider that doesn't implement RelationshipQueryable
|
|
4
|
+
const mockBasicProvider = {
|
|
5
|
+
name: 'basic',
|
|
6
|
+
schemes: ['basic'],
|
|
7
|
+
capabilities: { read: true, write: false, search: false, watch: false, mount: false, feedback: false },
|
|
8
|
+
parseUri: () => null,
|
|
9
|
+
buildUri: (id) => `basic://${id}`,
|
|
10
|
+
isValidUri: () => false,
|
|
11
|
+
get: async () => null,
|
|
12
|
+
list: async () => [],
|
|
13
|
+
create: async () => ({}),
|
|
14
|
+
update: async () => ({}),
|
|
15
|
+
delete: async () => { },
|
|
16
|
+
};
|
|
17
|
+
// Mock provider that implements RelationshipQueryable
|
|
18
|
+
const mockRelationshipProvider = {
|
|
19
|
+
name: 'relationship',
|
|
20
|
+
schemes: ['rel'],
|
|
21
|
+
capabilities: { read: true, write: true, search: false, watch: false, mount: true, feedback: false },
|
|
22
|
+
parseUri: (uri) => {
|
|
23
|
+
if (uri.startsWith('rel://')) {
|
|
24
|
+
return { scheme: 'rel', id: uri.slice(6), isRelative: false };
|
|
25
|
+
}
|
|
26
|
+
return null;
|
|
27
|
+
},
|
|
28
|
+
buildUri: (id) => `rel://${id}`,
|
|
29
|
+
isValidUri: (uri) => uri.startsWith('rel://'),
|
|
30
|
+
get: async () => null,
|
|
31
|
+
list: async () => [],
|
|
32
|
+
create: async () => ({}),
|
|
33
|
+
update: async () => ({}),
|
|
34
|
+
delete: async () => { },
|
|
35
|
+
queryEdges: async (nodeId, options) => {
|
|
36
|
+
const allEdges = [
|
|
37
|
+
{ from: 'node-1', to: 'node-2', type: 'blocks' },
|
|
38
|
+
{ from: 'node-3', to: 'node-1', type: 'blocks' },
|
|
39
|
+
{ from: 'node-1', to: 'node-4', type: 'related' },
|
|
40
|
+
];
|
|
41
|
+
let edges = allEdges.filter((e) => e.from === nodeId || e.to === nodeId);
|
|
42
|
+
if (options?.edgeType) {
|
|
43
|
+
edges = edges.filter((e) => e.type === options.edgeType);
|
|
44
|
+
}
|
|
45
|
+
if (options?.direction === 'in') {
|
|
46
|
+
edges = edges.filter((e) => e.to === nodeId);
|
|
47
|
+
}
|
|
48
|
+
else if (options?.direction === 'out') {
|
|
49
|
+
edges = edges.filter((e) => e.from === nodeId);
|
|
50
|
+
}
|
|
51
|
+
return edges;
|
|
52
|
+
},
|
|
53
|
+
supportedEdgeTypes: () => [
|
|
54
|
+
{ type: 'blocks', canQuery: true, canCreate: true, canDelete: true },
|
|
55
|
+
{ type: 'related', canQuery: true, canCreate: false, canDelete: false },
|
|
56
|
+
],
|
|
57
|
+
};
|
|
58
|
+
describe('isRelationshipQueryable', () => {
|
|
59
|
+
it('returns false for providers without queryEdges', () => {
|
|
60
|
+
expect(isRelationshipQueryable(mockBasicProvider)).toBe(false);
|
|
61
|
+
});
|
|
62
|
+
it('returns true for providers with queryEdges and supportedEdgeTypes', () => {
|
|
63
|
+
expect(isRelationshipQueryable(mockRelationshipProvider)).toBe(true);
|
|
64
|
+
});
|
|
65
|
+
it('returns false for providers with only queryEdges', () => {
|
|
66
|
+
const partialProvider = {
|
|
67
|
+
...mockBasicProvider,
|
|
68
|
+
queryEdges: async () => [],
|
|
69
|
+
};
|
|
70
|
+
expect(isRelationshipQueryable(partialProvider)).toBe(false);
|
|
71
|
+
});
|
|
72
|
+
it('returns false for providers with only supportedEdgeTypes', () => {
|
|
73
|
+
const partialProvider = {
|
|
74
|
+
...mockBasicProvider,
|
|
75
|
+
supportedEdgeTypes: () => [],
|
|
76
|
+
};
|
|
77
|
+
expect(isRelationshipQueryable(partialProvider)).toBe(false);
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
describe('RelationshipQueryable implementation', () => {
|
|
81
|
+
it('queries all edges for a node', async () => {
|
|
82
|
+
const edges = await mockRelationshipProvider.queryEdges('node-1');
|
|
83
|
+
expect(edges).toHaveLength(3);
|
|
84
|
+
});
|
|
85
|
+
it('filters by edge type', async () => {
|
|
86
|
+
const edges = await mockRelationshipProvider.queryEdges('node-1', {
|
|
87
|
+
edgeType: 'blocks',
|
|
88
|
+
});
|
|
89
|
+
expect(edges).toHaveLength(2);
|
|
90
|
+
expect(edges.every((e) => e.type === 'blocks')).toBe(true);
|
|
91
|
+
});
|
|
92
|
+
it('filters by direction in', async () => {
|
|
93
|
+
const edges = await mockRelationshipProvider.queryEdges('node-1', {
|
|
94
|
+
direction: 'in',
|
|
95
|
+
});
|
|
96
|
+
expect(edges).toHaveLength(1);
|
|
97
|
+
expect(edges[0].to).toBe('node-1');
|
|
98
|
+
});
|
|
99
|
+
it('filters by direction out', async () => {
|
|
100
|
+
const edges = await mockRelationshipProvider.queryEdges('node-1', {
|
|
101
|
+
direction: 'out',
|
|
102
|
+
});
|
|
103
|
+
expect(edges).toHaveLength(2);
|
|
104
|
+
expect(edges.every((e) => e.from === 'node-1')).toBe(true);
|
|
105
|
+
});
|
|
106
|
+
it('returns supported edge types', () => {
|
|
107
|
+
const types = mockRelationshipProvider.supportedEdgeTypes();
|
|
108
|
+
expect(types).toHaveLength(2);
|
|
109
|
+
expect(types[0].type).toBe('blocks');
|
|
110
|
+
expect(types[0].canCreate).toBe(true);
|
|
111
|
+
expect(types[1].type).toBe('related');
|
|
112
|
+
expect(types[1].canCreate).toBe(false);
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
describe('filterEdgesByType', () => {
|
|
116
|
+
const edges = [
|
|
117
|
+
{ from: 'a', to: 'b', type: 'blocks' },
|
|
118
|
+
{ from: 'b', to: 'c', type: 'blocks' },
|
|
119
|
+
{ from: 'a', to: 'c', type: 'related' },
|
|
120
|
+
];
|
|
121
|
+
it('filters edges by type', () => {
|
|
122
|
+
const result = filterEdgesByType(edges, 'blocks');
|
|
123
|
+
expect(result).toHaveLength(2);
|
|
124
|
+
expect(result.every((e) => e.type === 'blocks')).toBe(true);
|
|
125
|
+
});
|
|
126
|
+
it('returns empty for non-matching type', () => {
|
|
127
|
+
const result = filterEdgesByType(edges, 'implements');
|
|
128
|
+
expect(result).toHaveLength(0);
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
describe('filterEdgesByDirection', () => {
|
|
132
|
+
const edges = [
|
|
133
|
+
{ from: 'a', to: 'b', type: 'blocks' },
|
|
134
|
+
{ from: 'b', to: 'a', type: 'blocks' },
|
|
135
|
+
{ from: 'a', to: 'c', type: 'related' },
|
|
136
|
+
];
|
|
137
|
+
it('filters incoming edges', () => {
|
|
138
|
+
const result = filterEdgesByDirection(edges, 'a', 'in');
|
|
139
|
+
expect(result).toHaveLength(1);
|
|
140
|
+
expect(result[0].from).toBe('b');
|
|
141
|
+
expect(result[0].to).toBe('a');
|
|
142
|
+
});
|
|
143
|
+
it('filters outgoing edges', () => {
|
|
144
|
+
const result = filterEdgesByDirection(edges, 'a', 'out');
|
|
145
|
+
expect(result).toHaveLength(2);
|
|
146
|
+
expect(result.every((e) => e.from === 'a')).toBe(true);
|
|
147
|
+
});
|
|
148
|
+
it('returns both directions', () => {
|
|
149
|
+
const result = filterEdgesByDirection(edges, 'a', 'both');
|
|
150
|
+
expect(result).toHaveLength(3);
|
|
151
|
+
});
|
|
152
|
+
it('returns empty for unconnected node', () => {
|
|
153
|
+
const result = filterEdgesByDirection(edges, 'z', 'both');
|
|
154
|
+
expect(result).toHaveLength(0);
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
describe('getNeighborFromEdge', () => {
|
|
158
|
+
const edge = { from: 'a', to: 'b', type: 'blocks' };
|
|
159
|
+
it('returns target when nodeId is source', () => {
|
|
160
|
+
expect(getNeighborFromEdge(edge, 'a')).toBe('b');
|
|
161
|
+
});
|
|
162
|
+
it('returns source when nodeId is target', () => {
|
|
163
|
+
expect(getNeighborFromEdge(edge, 'b')).toBe('a');
|
|
164
|
+
});
|
|
165
|
+
it('returns null when nodeId not in edge', () => {
|
|
166
|
+
expect(getNeighborFromEdge(edge, 'c')).toBeNull();
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
//# sourceMappingURL=RelationshipQueryable.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RelationshipQueryable.test.js","sourceRoot":"","sources":["../../../../src/providers/traits/__tests__/RelationshipQueryable.test.ts"],"names":[],"mappings":"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"}
|