opentasks 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +568 -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 +530 -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 +289 -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,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Query Engine for Graph Operations
|
|
3
|
+
*
|
|
4
|
+
* Provides rich query capabilities for graph traversal and filtering.
|
|
5
|
+
*/
|
|
6
|
+
import type { Storage } from '../storage/interface.js';
|
|
7
|
+
import type { StoredNode } from '../schema/storage.js';
|
|
8
|
+
import type { Node, Task, Context, Feedback, Edge, EdgeType } from '../schema/index.js';
|
|
9
|
+
import type { NodeFilter, EdgeFilter, BlockerOptions, ReadyOptions, FeedbackOptions } from './types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Node resolver function for resolving external URIs
|
|
12
|
+
*
|
|
13
|
+
* When provided to the query engine, enables cross-provider query support.
|
|
14
|
+
* The resolver should handle external URIs (e.g., beads://./bd-123) and
|
|
15
|
+
* return the corresponding StoredNode, or null if not found.
|
|
16
|
+
*/
|
|
17
|
+
export type NodeResolver = (idOrUri: string) => Promise<StoredNode | null>;
|
|
18
|
+
/**
|
|
19
|
+
* Options for creating a query engine
|
|
20
|
+
*/
|
|
21
|
+
export interface QueryEngineOptions {
|
|
22
|
+
/** Storage for native nodes */
|
|
23
|
+
storage: Storage;
|
|
24
|
+
/**
|
|
25
|
+
* Optional resolver for external nodes.
|
|
26
|
+
* If provided, queries like blockers/blocking/ready will resolve external URIs.
|
|
27
|
+
* If not provided, only local node IDs will be resolved.
|
|
28
|
+
*/
|
|
29
|
+
nodeResolver?: NodeResolver;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Query engine for graph traversal and filtering
|
|
33
|
+
*/
|
|
34
|
+
export interface QueryEngine {
|
|
35
|
+
/** Query nodes with filters */
|
|
36
|
+
nodes(filter: NodeFilter): Promise<Node[]>;
|
|
37
|
+
/** Query edges with filters */
|
|
38
|
+
edges(filter: EdgeFilter): Promise<Edge[]>;
|
|
39
|
+
/** Get edges from a node */
|
|
40
|
+
edgesFrom(nodeId: string, type?: EdgeType): Promise<Edge[]>;
|
|
41
|
+
/** Get edges to a node */
|
|
42
|
+
edgesTo(nodeId: string, type?: EdgeType): Promise<Edge[]>;
|
|
43
|
+
/** Get all edges for a node (both directions) */
|
|
44
|
+
edgesFor(nodeId: string, type?: EdgeType): Promise<Edge[]>;
|
|
45
|
+
/** What blocks this node? */
|
|
46
|
+
blockers(nodeId: string, options?: BlockerOptions): Promise<Node[]>;
|
|
47
|
+
/** What does this node block? */
|
|
48
|
+
blocking(nodeId: string, options?: BlockerOptions): Promise<Node[]>;
|
|
49
|
+
/** Is there a path from A blocking B? */
|
|
50
|
+
isBlocking(fromId: string, toId: string): Promise<boolean>;
|
|
51
|
+
/** Tasks that implement a context */
|
|
52
|
+
tasks(contextId: string): Promise<Task[]>;
|
|
53
|
+
/** Context nodes that a task implements */
|
|
54
|
+
context(taskId: string): Promise<Context[]>;
|
|
55
|
+
/** Get children of a node */
|
|
56
|
+
children(nodeId: string): Promise<Node[]>;
|
|
57
|
+
/** Get parent of a node */
|
|
58
|
+
parent(nodeId: string): Promise<Node | null>;
|
|
59
|
+
/** Get all ancestors */
|
|
60
|
+
ancestors(nodeId: string): Promise<Node[]>;
|
|
61
|
+
/** Get all descendants */
|
|
62
|
+
descendants(nodeId: string): Promise<Node[]>;
|
|
63
|
+
/** Get tasks ready to work on (no active blockers) */
|
|
64
|
+
ready(options?: ReadyOptions): Promise<Task[]>;
|
|
65
|
+
/** Get feedback on a node */
|
|
66
|
+
feedback(targetId: string, options?: FeedbackOptions): Promise<Feedback[]>;
|
|
67
|
+
/** Get unresolved feedback */
|
|
68
|
+
unresolvedFeedback(targetId?: string): Promise<Feedback[]>;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Create a query engine backed by a storage implementation
|
|
72
|
+
*
|
|
73
|
+
* @param options - Storage instance or QueryEngineOptions object
|
|
74
|
+
* @returns QueryEngine instance
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* // Basic usage with storage only (native queries)
|
|
78
|
+
* const engine = createQueryEngine(storage)
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* // With node resolver for cross-provider queries
|
|
82
|
+
* const engine = createQueryEngine({
|
|
83
|
+
* storage,
|
|
84
|
+
* nodeResolver: async (idOrUri) => {
|
|
85
|
+
* return providerAwareStore.resolveNode(idOrUri)
|
|
86
|
+
* }
|
|
87
|
+
* })
|
|
88
|
+
*/
|
|
89
|
+
export declare function createQueryEngine(options: QueryEngineOptions | Storage): QueryEngine;
|
|
90
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/graph/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,463 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Query Engine for Graph Operations
|
|
3
|
+
*
|
|
4
|
+
* Provides rich query capabilities for graph traversal and filtering.
|
|
5
|
+
*/
|
|
6
|
+
import { parseNode, isTask, isContext, isFeedback } from '../schema/validation.js';
|
|
7
|
+
// ============================================================================
|
|
8
|
+
// Cross-Provider Resolution Support
|
|
9
|
+
// ============================================================================
|
|
10
|
+
/**
|
|
11
|
+
* Pattern for local node IDs (c-, t-, f-, e-, x-)
|
|
12
|
+
*/
|
|
13
|
+
const LOCAL_ID_PATTERN = /^[ctfex]-[a-z0-9]+$/;
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// Helper Functions
|
|
16
|
+
// ============================================================================
|
|
17
|
+
/**
|
|
18
|
+
* Convert StoredEdge to Edge (they're the same, but for type clarity)
|
|
19
|
+
*/
|
|
20
|
+
function toEdge(stored) {
|
|
21
|
+
return stored;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Safely parse a node, returning null on error
|
|
25
|
+
* (makes query engine resilient to bad data in storage)
|
|
26
|
+
*/
|
|
27
|
+
function safeParseNode(stored) {
|
|
28
|
+
try {
|
|
29
|
+
return parseNode(stored);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Check if a node is active (not closed, not archived)
|
|
37
|
+
*/
|
|
38
|
+
function isActiveNode(node) {
|
|
39
|
+
return !node.archived && node.status !== 'closed';
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Apply priority filter to nodes
|
|
43
|
+
*/
|
|
44
|
+
function matchesPriority(node, filter) {
|
|
45
|
+
if (filter === undefined)
|
|
46
|
+
return true;
|
|
47
|
+
if (node.priority === undefined)
|
|
48
|
+
return true;
|
|
49
|
+
if (typeof filter === 'number') {
|
|
50
|
+
return node.priority === filter;
|
|
51
|
+
}
|
|
52
|
+
const { min, max } = filter;
|
|
53
|
+
if (min !== undefined && node.priority < min)
|
|
54
|
+
return false;
|
|
55
|
+
if (max !== undefined && node.priority > max)
|
|
56
|
+
return false;
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Convert graph NodeFilter to storage NodeFilter
|
|
61
|
+
* Handles type differences (archived: null → undefined)
|
|
62
|
+
*/
|
|
63
|
+
function toStorageFilter(filter) {
|
|
64
|
+
return {
|
|
65
|
+
type: filter.type,
|
|
66
|
+
status: filter.status,
|
|
67
|
+
tags: filter.tags,
|
|
68
|
+
parent_id: filter.parent_id,
|
|
69
|
+
archived: filter.archived ?? undefined,
|
|
70
|
+
search: filter.search,
|
|
71
|
+
limit: filter.limit,
|
|
72
|
+
offset: filter.offset,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
// ============================================================================
|
|
76
|
+
// Query Engine Implementation
|
|
77
|
+
// ============================================================================
|
|
78
|
+
/**
|
|
79
|
+
* Create a query engine backed by a storage implementation
|
|
80
|
+
*
|
|
81
|
+
* @param options - Storage instance or QueryEngineOptions object
|
|
82
|
+
* @returns QueryEngine instance
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* // Basic usage with storage only (native queries)
|
|
86
|
+
* const engine = createQueryEngine(storage)
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* // With node resolver for cross-provider queries
|
|
90
|
+
* const engine = createQueryEngine({
|
|
91
|
+
* storage,
|
|
92
|
+
* nodeResolver: async (idOrUri) => {
|
|
93
|
+
* return providerAwareStore.resolveNode(idOrUri)
|
|
94
|
+
* }
|
|
95
|
+
* })
|
|
96
|
+
*/
|
|
97
|
+
export function createQueryEngine(options) {
|
|
98
|
+
// Support both old signature (Storage) and new signature (QueryEngineOptions)
|
|
99
|
+
const storage = 'storage' in options ? options.storage : options;
|
|
100
|
+
const nodeResolver = 'nodeResolver' in options ? options.nodeResolver : undefined;
|
|
101
|
+
/**
|
|
102
|
+
* Resolve a node by ID or URI
|
|
103
|
+
* Uses the nodeResolver for external URIs if available, otherwise falls back to storage
|
|
104
|
+
*/
|
|
105
|
+
const resolveNode = async (idOrUri) => {
|
|
106
|
+
// For local IDs, always use storage directly
|
|
107
|
+
if (LOCAL_ID_PATTERN.test(idOrUri)) {
|
|
108
|
+
return storage.getNode(idOrUri);
|
|
109
|
+
}
|
|
110
|
+
// For URIs or unknown formats, try resolver first if available
|
|
111
|
+
if (nodeResolver) {
|
|
112
|
+
return nodeResolver(idOrUri);
|
|
113
|
+
}
|
|
114
|
+
// Fallback to storage (might work for materialized external nodes)
|
|
115
|
+
return storage.getNode(idOrUri);
|
|
116
|
+
};
|
|
117
|
+
return {
|
|
118
|
+
// =========================================================================
|
|
119
|
+
// Basic Queries
|
|
120
|
+
// =========================================================================
|
|
121
|
+
async nodes(filter) {
|
|
122
|
+
const stored = await storage.queryNodes(toStorageFilter(filter));
|
|
123
|
+
return stored.map(safeParseNode).filter((n) => n !== null);
|
|
124
|
+
},
|
|
125
|
+
async edges(filter) {
|
|
126
|
+
const results = [];
|
|
127
|
+
if (filter.from_id) {
|
|
128
|
+
const fromEdges = await storage.getEdgesFrom(filter.from_id, filter.type);
|
|
129
|
+
results.push(...fromEdges);
|
|
130
|
+
}
|
|
131
|
+
else if (filter.to_id) {
|
|
132
|
+
const toEdges = await storage.getEdgesTo(filter.to_id, filter.type);
|
|
133
|
+
results.push(...toEdges);
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
// No specific node filter - this would need a full edge query
|
|
137
|
+
// For now, return empty (full edge enumeration not typically needed)
|
|
138
|
+
return [];
|
|
139
|
+
}
|
|
140
|
+
// Apply type filter if we didn't use it in the query
|
|
141
|
+
let filtered = results;
|
|
142
|
+
if (filter.type && !filter.from_id && !filter.to_id) {
|
|
143
|
+
const types = Array.isArray(filter.type) ? filter.type : [filter.type];
|
|
144
|
+
filtered = results.filter((e) => types.includes(e.type));
|
|
145
|
+
}
|
|
146
|
+
// Apply pagination
|
|
147
|
+
const offset = filter.offset ?? 0;
|
|
148
|
+
const limit = filter.limit ?? filtered.length;
|
|
149
|
+
const paginated = filtered.slice(offset, offset + limit);
|
|
150
|
+
return paginated.map(toEdge);
|
|
151
|
+
},
|
|
152
|
+
// =========================================================================
|
|
153
|
+
// Relationship Queries
|
|
154
|
+
// =========================================================================
|
|
155
|
+
async edgesFrom(nodeId, type) {
|
|
156
|
+
const stored = await storage.getEdgesFrom(nodeId, type);
|
|
157
|
+
return stored.map(toEdge);
|
|
158
|
+
},
|
|
159
|
+
async edgesTo(nodeId, type) {
|
|
160
|
+
const stored = await storage.getEdgesTo(nodeId, type);
|
|
161
|
+
return stored.map(toEdge);
|
|
162
|
+
},
|
|
163
|
+
async edgesFor(nodeId, type) {
|
|
164
|
+
const [from, to] = await Promise.all([
|
|
165
|
+
storage.getEdgesFrom(nodeId, type),
|
|
166
|
+
storage.getEdgesTo(nodeId, type),
|
|
167
|
+
]);
|
|
168
|
+
// Combine and deduplicate by ID
|
|
169
|
+
const seen = new Set();
|
|
170
|
+
const all = [];
|
|
171
|
+
for (const edge of [...from, ...to]) {
|
|
172
|
+
if (!seen.has(edge.id)) {
|
|
173
|
+
seen.add(edge.id);
|
|
174
|
+
all.push(toEdge(edge));
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return all;
|
|
178
|
+
},
|
|
179
|
+
// =========================================================================
|
|
180
|
+
// Dependency Queries
|
|
181
|
+
// =========================================================================
|
|
182
|
+
async blockers(nodeId, options) {
|
|
183
|
+
const result = [];
|
|
184
|
+
const visited = new Set();
|
|
185
|
+
const maxDepth = options?.maxDepth ?? 10;
|
|
186
|
+
const activeOnly = options?.activeOnly ?? true;
|
|
187
|
+
async function collect(id, depth) {
|
|
188
|
+
if (depth > maxDepth || visited.has(id))
|
|
189
|
+
return;
|
|
190
|
+
visited.add(id);
|
|
191
|
+
// Get incoming 'blocks' edges (things that block this node)
|
|
192
|
+
const edges = await storage.getEdgesTo(id, 'blocks');
|
|
193
|
+
for (const edge of edges) {
|
|
194
|
+
// Use resolveNode to support cross-provider resolution
|
|
195
|
+
const blocker = await resolveNode(edge.from_id);
|
|
196
|
+
if (!blocker)
|
|
197
|
+
continue;
|
|
198
|
+
// Filter by activeOnly
|
|
199
|
+
if (activeOnly && !isActiveNode(blocker))
|
|
200
|
+
continue;
|
|
201
|
+
const parsed = safeParseNode(blocker);
|
|
202
|
+
if (parsed) {
|
|
203
|
+
result.push(parsed);
|
|
204
|
+
}
|
|
205
|
+
// Recurse for transitive blockers
|
|
206
|
+
if (options?.transitive) {
|
|
207
|
+
await collect(edge.from_id, depth + 1);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
await collect(nodeId, 0);
|
|
212
|
+
return result;
|
|
213
|
+
},
|
|
214
|
+
async blocking(nodeId, options) {
|
|
215
|
+
const result = [];
|
|
216
|
+
const visited = new Set();
|
|
217
|
+
const maxDepth = options?.maxDepth ?? 10;
|
|
218
|
+
const activeOnly = options?.activeOnly ?? true;
|
|
219
|
+
async function collect(id, depth) {
|
|
220
|
+
if (depth > maxDepth || visited.has(id))
|
|
221
|
+
return;
|
|
222
|
+
visited.add(id);
|
|
223
|
+
// Get outgoing 'blocks' edges (things this node blocks)
|
|
224
|
+
const edges = await storage.getEdgesFrom(id, 'blocks');
|
|
225
|
+
for (const edge of edges) {
|
|
226
|
+
// Use resolveNode to support cross-provider resolution
|
|
227
|
+
const blocked = await resolveNode(edge.to_id);
|
|
228
|
+
if (!blocked)
|
|
229
|
+
continue;
|
|
230
|
+
// Filter by activeOnly
|
|
231
|
+
if (activeOnly && !isActiveNode(blocked))
|
|
232
|
+
continue;
|
|
233
|
+
const parsed = safeParseNode(blocked);
|
|
234
|
+
if (parsed) {
|
|
235
|
+
result.push(parsed);
|
|
236
|
+
}
|
|
237
|
+
// Recurse for transitive blocking
|
|
238
|
+
if (options?.transitive) {
|
|
239
|
+
await collect(edge.to_id, depth + 1);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
await collect(nodeId, 0);
|
|
244
|
+
return result;
|
|
245
|
+
},
|
|
246
|
+
async isBlocking(fromId, toId) {
|
|
247
|
+
// Check if fromId blocks toId (directly or transitively)
|
|
248
|
+
const visited = new Set();
|
|
249
|
+
async function search(current) {
|
|
250
|
+
if (current === toId)
|
|
251
|
+
return true;
|
|
252
|
+
if (visited.has(current))
|
|
253
|
+
return false;
|
|
254
|
+
visited.add(current);
|
|
255
|
+
const edges = await storage.getEdgesFrom(current, 'blocks');
|
|
256
|
+
for (const edge of edges) {
|
|
257
|
+
if (await search(edge.to_id)) {
|
|
258
|
+
return true;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
return false;
|
|
262
|
+
}
|
|
263
|
+
return search(fromId);
|
|
264
|
+
},
|
|
265
|
+
// =========================================================================
|
|
266
|
+
// Context/Task Queries
|
|
267
|
+
// =========================================================================
|
|
268
|
+
async tasks(contextId) {
|
|
269
|
+
// Get incoming 'implements' edges to the context
|
|
270
|
+
const edges = await storage.getEdgesTo(contextId, 'implements');
|
|
271
|
+
const tasks = [];
|
|
272
|
+
for (const edge of edges) {
|
|
273
|
+
// Use resolveNode to support cross-provider resolution
|
|
274
|
+
const node = await resolveNode(edge.from_id);
|
|
275
|
+
if (node) {
|
|
276
|
+
const parsed = safeParseNode(node);
|
|
277
|
+
if (parsed && isTask(parsed)) {
|
|
278
|
+
tasks.push(parsed);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
return tasks;
|
|
283
|
+
},
|
|
284
|
+
async context(taskId) {
|
|
285
|
+
// Get outgoing 'implements' edges from the task
|
|
286
|
+
const edges = await storage.getEdgesFrom(taskId, 'implements');
|
|
287
|
+
const contextNodes = [];
|
|
288
|
+
for (const edge of edges) {
|
|
289
|
+
// Use resolveNode to support cross-provider resolution
|
|
290
|
+
const node = await resolveNode(edge.to_id);
|
|
291
|
+
if (node) {
|
|
292
|
+
const parsed = safeParseNode(node);
|
|
293
|
+
if (parsed && isContext(parsed)) {
|
|
294
|
+
contextNodes.push(parsed);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
return contextNodes;
|
|
299
|
+
},
|
|
300
|
+
// =========================================================================
|
|
301
|
+
// Hierarchy Queries
|
|
302
|
+
// =========================================================================
|
|
303
|
+
async children(nodeId) {
|
|
304
|
+
// Query nodes with parent_id = nodeId
|
|
305
|
+
const stored = await storage.queryNodes({ parent_id: nodeId });
|
|
306
|
+
return stored.map(parseNode).filter((n) => n !== null);
|
|
307
|
+
},
|
|
308
|
+
async parent(nodeId) {
|
|
309
|
+
const node = await storage.getNode(nodeId);
|
|
310
|
+
if (!node || !node.parent_id)
|
|
311
|
+
return null;
|
|
312
|
+
const parentNode = await storage.getNode(node.parent_id);
|
|
313
|
+
if (!parentNode)
|
|
314
|
+
return null;
|
|
315
|
+
return safeParseNode(parentNode);
|
|
316
|
+
},
|
|
317
|
+
async ancestors(nodeId) {
|
|
318
|
+
const result = [];
|
|
319
|
+
let currentId = nodeId;
|
|
320
|
+
while (currentId) {
|
|
321
|
+
const node = await storage.getNode(currentId);
|
|
322
|
+
if (!node || !node.parent_id)
|
|
323
|
+
break;
|
|
324
|
+
const parentNode = await storage.getNode(node.parent_id);
|
|
325
|
+
if (!parentNode)
|
|
326
|
+
break;
|
|
327
|
+
const parsed = safeParseNode(parentNode);
|
|
328
|
+
if (parsed) {
|
|
329
|
+
result.push(parsed);
|
|
330
|
+
}
|
|
331
|
+
currentId = parentNode.parent_id;
|
|
332
|
+
}
|
|
333
|
+
return result;
|
|
334
|
+
},
|
|
335
|
+
async descendants(nodeId) {
|
|
336
|
+
const result = [];
|
|
337
|
+
const visited = new Set();
|
|
338
|
+
async function collect(id) {
|
|
339
|
+
if (visited.has(id))
|
|
340
|
+
return;
|
|
341
|
+
visited.add(id);
|
|
342
|
+
const children = await storage.queryNodes({ parent_id: id });
|
|
343
|
+
for (const child of children) {
|
|
344
|
+
const parsed = safeParseNode(child);
|
|
345
|
+
if (parsed) {
|
|
346
|
+
result.push(parsed);
|
|
347
|
+
await collect(child.id);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
await collect(nodeId);
|
|
352
|
+
return result;
|
|
353
|
+
},
|
|
354
|
+
// =========================================================================
|
|
355
|
+
// Ready Query
|
|
356
|
+
// =========================================================================
|
|
357
|
+
async ready(options) {
|
|
358
|
+
// Get all open, non-archived tasks
|
|
359
|
+
const taskNodes = await storage.queryNodes({
|
|
360
|
+
type: 'task',
|
|
361
|
+
status: 'open',
|
|
362
|
+
archived: false,
|
|
363
|
+
});
|
|
364
|
+
const readyTasks = [];
|
|
365
|
+
for (const task of taskNodes) {
|
|
366
|
+
// Apply additional filters
|
|
367
|
+
if (options?.tags) {
|
|
368
|
+
const nodeTags = task.tags || [];
|
|
369
|
+
const hasAllTags = options.tags.every((t) => nodeTags.includes(t));
|
|
370
|
+
if (!hasAllTags)
|
|
371
|
+
continue;
|
|
372
|
+
}
|
|
373
|
+
if (!matchesPriority(task, options?.priority))
|
|
374
|
+
continue;
|
|
375
|
+
if (options?.assignee && task.assignee !== options.assignee)
|
|
376
|
+
continue;
|
|
377
|
+
// Check for active blockers
|
|
378
|
+
const blockerEdges = await storage.getEdgesTo(task.id, 'blocks');
|
|
379
|
+
let hasActiveBlocker = false;
|
|
380
|
+
for (const edge of blockerEdges) {
|
|
381
|
+
// Use resolveNode to support cross-provider resolution
|
|
382
|
+
const blocker = await resolveNode(edge.from_id);
|
|
383
|
+
if (blocker && isActiveNode(blocker)) {
|
|
384
|
+
hasActiveBlocker = true;
|
|
385
|
+
break;
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
if (!hasActiveBlocker) {
|
|
389
|
+
const parsed = safeParseNode(task);
|
|
390
|
+
if (parsed && isTask(parsed)) {
|
|
391
|
+
readyTasks.push(parsed);
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
// Sort by priority (lower priority number = higher priority)
|
|
396
|
+
// Items without priority come after items with priority
|
|
397
|
+
readyTasks.sort((a, b) => {
|
|
398
|
+
const aPriority = a.priority ?? Infinity;
|
|
399
|
+
const bPriority = b.priority ?? Infinity;
|
|
400
|
+
return aPriority - bPriority;
|
|
401
|
+
});
|
|
402
|
+
// Apply limit
|
|
403
|
+
if (options?.limit !== undefined) {
|
|
404
|
+
return readyTasks.slice(0, options.limit);
|
|
405
|
+
}
|
|
406
|
+
return readyTasks;
|
|
407
|
+
},
|
|
408
|
+
// =========================================================================
|
|
409
|
+
// Feedback Queries
|
|
410
|
+
// =========================================================================
|
|
411
|
+
async feedback(targetId, options) {
|
|
412
|
+
// Query feedback nodes that target this node
|
|
413
|
+
const allFeedback = await storage.queryNodes({
|
|
414
|
+
type: 'feedback',
|
|
415
|
+
});
|
|
416
|
+
const result = [];
|
|
417
|
+
for (const node of allFeedback) {
|
|
418
|
+
// Check if this feedback targets the specified node
|
|
419
|
+
if (node.target_id !== targetId)
|
|
420
|
+
continue;
|
|
421
|
+
// Apply type filter
|
|
422
|
+
if (options?.type && node.feedback_type !== options.type)
|
|
423
|
+
continue;
|
|
424
|
+
// Apply resolved filter
|
|
425
|
+
if (options?.resolved !== undefined) {
|
|
426
|
+
if (options.resolved && !node.resolved)
|
|
427
|
+
continue;
|
|
428
|
+
if (!options.resolved && node.resolved)
|
|
429
|
+
continue;
|
|
430
|
+
}
|
|
431
|
+
// Apply dismissed filter
|
|
432
|
+
if (!options?.includeDismissed && node.dismissed)
|
|
433
|
+
continue;
|
|
434
|
+
const parsed = safeParseNode(node);
|
|
435
|
+
if (parsed && isFeedback(parsed)) {
|
|
436
|
+
result.push(parsed);
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
return result;
|
|
440
|
+
},
|
|
441
|
+
async unresolvedFeedback(targetId) {
|
|
442
|
+
// Query all feedback nodes
|
|
443
|
+
const allFeedback = await storage.queryNodes({
|
|
444
|
+
type: 'feedback',
|
|
445
|
+
});
|
|
446
|
+
const result = [];
|
|
447
|
+
for (const node of allFeedback) {
|
|
448
|
+
// Filter by target if specified
|
|
449
|
+
if (targetId && node.target_id !== targetId)
|
|
450
|
+
continue;
|
|
451
|
+
// Only unresolved and not dismissed
|
|
452
|
+
if (node.resolved || node.dismissed)
|
|
453
|
+
continue;
|
|
454
|
+
const parsed = safeParseNode(node);
|
|
455
|
+
if (parsed && isFeedback(parsed)) {
|
|
456
|
+
result.push(parsed);
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
return result;
|
|
460
|
+
},
|
|
461
|
+
};
|
|
462
|
+
}
|
|
463
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/graph/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graph Store
|
|
3
|
+
*
|
|
4
|
+
* Unified API coordinating JSONL and SQLite persisters.
|
|
5
|
+
* Provides CRUD operations with validation and debounced persistence.
|
|
6
|
+
*/
|
|
7
|
+
import type { Storage } from '../storage/interface.js';
|
|
8
|
+
import type { StoredNode, StoredEdge } from '../schema/storage.js';
|
|
9
|
+
import type { Node, Edge } from '../schema/index.js';
|
|
10
|
+
import type { CreateNodeInput, UpdateNodeInput, DeleteOptions, CreateEdgeInput, GraphStoreConfig } from './types.js';
|
|
11
|
+
import type { QueryEngine } from './query.js';
|
|
12
|
+
/**
|
|
13
|
+
* Transaction interface for atomic operations
|
|
14
|
+
*/
|
|
15
|
+
export interface GraphTransaction {
|
|
16
|
+
createNode(input: CreateNodeInput): Promise<Node>;
|
|
17
|
+
updateNode(id: string, updates: UpdateNodeInput): Promise<Node>;
|
|
18
|
+
deleteNode(id: string): Promise<void>;
|
|
19
|
+
createEdge(input: CreateEdgeInput): Promise<Edge>;
|
|
20
|
+
deleteEdge(id: string): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Graph store interface
|
|
24
|
+
*/
|
|
25
|
+
export interface GraphStore {
|
|
26
|
+
/** Initialize the store (load from JSONL, sync to SQLite) */
|
|
27
|
+
initialize(): Promise<void>;
|
|
28
|
+
/** Close the store (flush pending changes) */
|
|
29
|
+
close(): Promise<void>;
|
|
30
|
+
/** Force immediate flush to JSONL */
|
|
31
|
+
flush(): Promise<void>;
|
|
32
|
+
/** Create a new node */
|
|
33
|
+
createNode(input: CreateNodeInput): Promise<Node>;
|
|
34
|
+
/** Get a node by ID */
|
|
35
|
+
getNode(id: string): Promise<Node | null>;
|
|
36
|
+
/** Update an existing node */
|
|
37
|
+
updateNode(id: string, updates: UpdateNodeInput): Promise<Node>;
|
|
38
|
+
/** Delete a node (soft delete by default) */
|
|
39
|
+
deleteNode(id: string, options?: DeleteOptions): Promise<void>;
|
|
40
|
+
/** Restore an archived node */
|
|
41
|
+
restoreNode(id: string): Promise<Node>;
|
|
42
|
+
/** Create a new edge */
|
|
43
|
+
createEdge(input: CreateEdgeInput): Promise<Edge>;
|
|
44
|
+
/** Get an edge by ID */
|
|
45
|
+
getEdge(id: string): Promise<Edge | null>;
|
|
46
|
+
/** Delete an edge */
|
|
47
|
+
deleteEdge(id: string): Promise<void>;
|
|
48
|
+
/** Add tags to a node */
|
|
49
|
+
addTags(nodeId: string, tags: string[]): Promise<void>;
|
|
50
|
+
/** Remove tags from a node */
|
|
51
|
+
removeTags(nodeId: string, tags: string[]): Promise<void>;
|
|
52
|
+
/** Set tags for a node (replaces existing) */
|
|
53
|
+
setTags(nodeId: string, tags: string[]): Promise<void>;
|
|
54
|
+
/** Query engine for graph traversal */
|
|
55
|
+
readonly query: QueryEngine;
|
|
56
|
+
/** Execute operations in a transaction */
|
|
57
|
+
transaction<T>(fn: (tx: GraphTransaction) => Promise<T>): Promise<T>;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Create a graph store
|
|
61
|
+
*
|
|
62
|
+
* @param config - Store configuration
|
|
63
|
+
* @param storage - Storage implementation (SQLite persister)
|
|
64
|
+
* @param jsonlLoad - Function to load from JSONL
|
|
65
|
+
* @param jsonlSave - Function to save to JSONL
|
|
66
|
+
*/
|
|
67
|
+
export declare function createGraphStore(config: GraphStoreConfig, storage: Storage, jsonlLoad: () => Promise<{
|
|
68
|
+
nodes: StoredNode[];
|
|
69
|
+
edges: StoredEdge[];
|
|
70
|
+
}>, jsonlSave: (nodes: StoredNode[], edges: StoredEdge[]) => Promise<void>): GraphStore;
|
|
71
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/graph/store.ts"],"names":[],"mappings":"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"}
|