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,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global Daemon Registry
|
|
3
|
+
*
|
|
4
|
+
* Manages the global registry of all running OpenTasks daemons.
|
|
5
|
+
* Located at ~/.opentasks/registry.json
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from 'node:fs/promises';
|
|
8
|
+
import * as path from 'node:path';
|
|
9
|
+
import * as os from 'node:os';
|
|
10
|
+
import lockfile from 'proper-lockfile';
|
|
11
|
+
import { DaemonError } from './types.js';
|
|
12
|
+
// ============================================================================
|
|
13
|
+
// Constants
|
|
14
|
+
// ============================================================================
|
|
15
|
+
const REGISTRY_VERSION = '1.0.0';
|
|
16
|
+
/**
|
|
17
|
+
* Get the default global registry path
|
|
18
|
+
*/
|
|
19
|
+
export function getGlobalRegistryPath() {
|
|
20
|
+
return path.join(os.homedir(), '.opentasks', 'registry.json');
|
|
21
|
+
}
|
|
22
|
+
// ============================================================================
|
|
23
|
+
// Helpers
|
|
24
|
+
// ============================================================================
|
|
25
|
+
/**
|
|
26
|
+
* Check if a process is alive
|
|
27
|
+
*/
|
|
28
|
+
function isProcessAlive(pid) {
|
|
29
|
+
try {
|
|
30
|
+
process.kill(pid, 0);
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Create empty registry
|
|
39
|
+
*/
|
|
40
|
+
function createEmptyRegistry() {
|
|
41
|
+
return {
|
|
42
|
+
version: REGISTRY_VERSION,
|
|
43
|
+
daemons: [],
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
// ============================================================================
|
|
47
|
+
// Implementation
|
|
48
|
+
// ============================================================================
|
|
49
|
+
/**
|
|
50
|
+
* Create a registry manager
|
|
51
|
+
*
|
|
52
|
+
* @param registryPath - Path to registry.json file (defaults to ~/.opentasks/registry.json)
|
|
53
|
+
*/
|
|
54
|
+
export function createRegistryManager(registryPath = getGlobalRegistryPath()) {
|
|
55
|
+
const registryDir = path.dirname(registryPath);
|
|
56
|
+
/**
|
|
57
|
+
* Ensure registry directory and file exist
|
|
58
|
+
*/
|
|
59
|
+
async function ensureRegistry() {
|
|
60
|
+
// Create directory if missing
|
|
61
|
+
await fs.mkdir(registryDir, { recursive: true });
|
|
62
|
+
// Create registry file if missing
|
|
63
|
+
try {
|
|
64
|
+
await fs.access(registryPath);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
await writeRegistry(createEmptyRegistry());
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Read the registry file
|
|
72
|
+
*/
|
|
73
|
+
async function readRegistry() {
|
|
74
|
+
try {
|
|
75
|
+
const contents = await fs.readFile(registryPath, 'utf8');
|
|
76
|
+
return JSON.parse(contents);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
if (error.code === 'ENOENT') {
|
|
80
|
+
return createEmptyRegistry();
|
|
81
|
+
}
|
|
82
|
+
throw new DaemonError('REGISTRY_ERROR', 'Failed to read registry', error);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Write the registry file atomically
|
|
87
|
+
*/
|
|
88
|
+
async function writeRegistry(registry) {
|
|
89
|
+
const tempPath = `${registryPath}.tmp.${process.pid}`;
|
|
90
|
+
try {
|
|
91
|
+
await fs.writeFile(tempPath, JSON.stringify(registry, null, 2), 'utf8');
|
|
92
|
+
await fs.rename(tempPath, registryPath);
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
// Clean up temp file on error
|
|
96
|
+
try {
|
|
97
|
+
await fs.unlink(tempPath);
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
// Ignore cleanup errors
|
|
101
|
+
}
|
|
102
|
+
throw new DaemonError('REGISTRY_ERROR', 'Failed to write registry', error);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Execute an operation with file locking
|
|
107
|
+
*/
|
|
108
|
+
async function withLock(operation) {
|
|
109
|
+
await ensureRegistry();
|
|
110
|
+
let release = null;
|
|
111
|
+
try {
|
|
112
|
+
release = await lockfile.lock(registryPath, {
|
|
113
|
+
stale: 10000,
|
|
114
|
+
retries: {
|
|
115
|
+
retries: 5,
|
|
116
|
+
minTimeout: 100,
|
|
117
|
+
maxTimeout: 1000,
|
|
118
|
+
},
|
|
119
|
+
});
|
|
120
|
+
return await operation();
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
if (error.message?.includes('ELOCKED')) {
|
|
124
|
+
throw new DaemonError('REGISTRY_ERROR', 'Registry is locked by another process', error);
|
|
125
|
+
}
|
|
126
|
+
throw error;
|
|
127
|
+
}
|
|
128
|
+
finally {
|
|
129
|
+
if (release) {
|
|
130
|
+
try {
|
|
131
|
+
await release();
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
// Ignore release errors
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
registryPath,
|
|
141
|
+
async register(entry) {
|
|
142
|
+
await withLock(async () => {
|
|
143
|
+
const registry = await readRegistry();
|
|
144
|
+
// Remove any existing entry for this location
|
|
145
|
+
registry.daemons = registry.daemons.filter((d) => d.locationPath !== entry.locationPath);
|
|
146
|
+
// Add new entry
|
|
147
|
+
registry.daemons.push(entry);
|
|
148
|
+
await writeRegistry(registry);
|
|
149
|
+
});
|
|
150
|
+
},
|
|
151
|
+
async unregister(locationPath) {
|
|
152
|
+
await withLock(async () => {
|
|
153
|
+
const registry = await readRegistry();
|
|
154
|
+
registry.daemons = registry.daemons.filter((d) => d.locationPath !== locationPath);
|
|
155
|
+
await writeRegistry(registry);
|
|
156
|
+
});
|
|
157
|
+
},
|
|
158
|
+
async find(locationPath) {
|
|
159
|
+
const registry = await readRegistry();
|
|
160
|
+
const entry = registry.daemons.find((d) => d.locationPath === locationPath);
|
|
161
|
+
if (!entry) {
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
// Verify daemon is still alive
|
|
165
|
+
if (!isProcessAlive(entry.pid)) {
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
return entry;
|
|
169
|
+
},
|
|
170
|
+
async list() {
|
|
171
|
+
const registry = await readRegistry();
|
|
172
|
+
return registry.daemons;
|
|
173
|
+
},
|
|
174
|
+
async cleanup() {
|
|
175
|
+
return await withLock(async () => {
|
|
176
|
+
const registry = await readRegistry();
|
|
177
|
+
const originalCount = registry.daemons.length;
|
|
178
|
+
// Filter out dead processes
|
|
179
|
+
registry.daemons = registry.daemons.filter((d) => isProcessAlive(d.pid));
|
|
180
|
+
const removedCount = originalCount - registry.daemons.length;
|
|
181
|
+
if (removedCount > 0) {
|
|
182
|
+
await writeRegistry(registry);
|
|
183
|
+
}
|
|
184
|
+
return removedCount;
|
|
185
|
+
});
|
|
186
|
+
},
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/daemon/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daemon Module Types
|
|
3
|
+
*
|
|
4
|
+
* Shared types for daemon lifecycle, IPC, and coordination.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Contents of .opentasks/daemon.lock
|
|
8
|
+
*/
|
|
9
|
+
export interface DaemonLock {
|
|
10
|
+
/** Process ID of daemon */
|
|
11
|
+
pid: number;
|
|
12
|
+
/** Parent process ID (for orphan detection) */
|
|
13
|
+
parentPid: number;
|
|
14
|
+
/** OpenTasks version */
|
|
15
|
+
version: string;
|
|
16
|
+
/** ISO timestamp when daemon started */
|
|
17
|
+
startedAt: string;
|
|
18
|
+
/** Path to Unix socket for IPC */
|
|
19
|
+
socketPath: string;
|
|
20
|
+
/** Path to SQLite database */
|
|
21
|
+
databasePath: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Metadata provided when acquiring lock (PID and timestamp added automatically)
|
|
25
|
+
*/
|
|
26
|
+
export type LockMetadata = Omit<DaemonLock, 'pid' | 'parentPid' | 'startedAt'>;
|
|
27
|
+
/**
|
|
28
|
+
* Global registry file format (~/.opentasks/registry.json)
|
|
29
|
+
*/
|
|
30
|
+
export interface DaemonRegistry {
|
|
31
|
+
/** Registry format version */
|
|
32
|
+
version: string;
|
|
33
|
+
/** All registered daemons */
|
|
34
|
+
daemons: DaemonEntry[];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Entry for a registered daemon
|
|
38
|
+
*/
|
|
39
|
+
export interface DaemonEntry {
|
|
40
|
+
/** Absolute path to .opentasks/ directory */
|
|
41
|
+
locationPath: string;
|
|
42
|
+
/** Socket path for IPC */
|
|
43
|
+
socketPath: string;
|
|
44
|
+
/** Process ID */
|
|
45
|
+
pid: number;
|
|
46
|
+
/** OpenTasks version */
|
|
47
|
+
version: string;
|
|
48
|
+
/** When daemon started (ISO timestamp) */
|
|
49
|
+
startedAt: string;
|
|
50
|
+
/** Last activity timestamp (ISO) */
|
|
51
|
+
lastActivity: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Daemon runtime state
|
|
55
|
+
*/
|
|
56
|
+
export type DaemonState = 'starting' | 'running' | 'stopping' | 'stopped';
|
|
57
|
+
/**
|
|
58
|
+
* Daemon status information
|
|
59
|
+
*/
|
|
60
|
+
export interface DaemonStatus {
|
|
61
|
+
/** Current state */
|
|
62
|
+
state: DaemonState;
|
|
63
|
+
/** When daemon started (ISO timestamp), null if not started */
|
|
64
|
+
startedAt: string | null;
|
|
65
|
+
/** Process ID */
|
|
66
|
+
pid: number;
|
|
67
|
+
/** Socket path for IPC */
|
|
68
|
+
socketPath: string;
|
|
69
|
+
/** Whether there are pending changes to flush */
|
|
70
|
+
pendingFlush: boolean;
|
|
71
|
+
/** Number of active IPC connections */
|
|
72
|
+
connectionCount: number;
|
|
73
|
+
/** Number of managed locations (multi-location mode) */
|
|
74
|
+
locationCount?: number;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Information about a managed location
|
|
78
|
+
*/
|
|
79
|
+
export interface LocationInfo {
|
|
80
|
+
/** Location hash */
|
|
81
|
+
hash: string;
|
|
82
|
+
/** Absolute path to .opentasks/ directory */
|
|
83
|
+
opentasksPath: string;
|
|
84
|
+
/** Whether this is the primary (default) location */
|
|
85
|
+
primary: boolean;
|
|
86
|
+
/** Whether the location is healthy */
|
|
87
|
+
healthy: boolean;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Error codes for daemon operations
|
|
91
|
+
*/
|
|
92
|
+
export type DaemonErrorCode = 'LOCK_HELD' | 'LOCK_NOT_HELD' | 'DAEMON_NOT_RUNNING' | 'DAEMON_ALREADY_RUNNING' | 'REGISTRY_ERROR' | 'IPC_ERROR' | 'SHUTDOWN_TIMEOUT' | 'LOCATION_NOT_FOUND' | 'LOCATION_INIT_FAILED';
|
|
93
|
+
/**
|
|
94
|
+
* Daemon-specific error
|
|
95
|
+
*/
|
|
96
|
+
export declare class DaemonError extends Error {
|
|
97
|
+
readonly code: DaemonErrorCode;
|
|
98
|
+
readonly cause?: unknown | undefined;
|
|
99
|
+
constructor(code: DaemonErrorCode, message: string, cause?: unknown | undefined);
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/daemon/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,2BAA2B;IAC3B,GAAG,EAAE,MAAM,CAAC;IAEZ,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAElB,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAC;IAEhB,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAElB,kCAAkC;IAClC,UAAU,EAAE,MAAM,CAAC;IAEnB,8BAA8B;IAC9B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC;AAM/E;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAEhB,6BAA6B;IAC7B,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,6CAA6C;IAC7C,YAAY,EAAE,MAAM,CAAC;IAErB,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAC;IAEnB,iBAAiB;IACjB,GAAG,EAAE,MAAM,CAAC;IAEZ,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAC;IAEhB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAElB,oCAAoC;IACpC,YAAY,EAAE,MAAM,CAAC;CACtB;AAMD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,oBAAoB;IACpB,KAAK,EAAE,WAAW,CAAC;IAEnB,+DAA+D;IAC/D,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzB,iBAAiB;IACjB,GAAG,EAAE,MAAM,CAAC;IAEZ,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAC;IAEnB,iDAAiD;IACjD,YAAY,EAAE,OAAO,CAAC;IAEtB,uCAAuC;IACvC,eAAe,EAAE,MAAM,CAAC;IAExB,wDAAwD;IACxD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IAEb,6CAA6C;IAC7C,aAAa,EAAE,MAAM,CAAC;IAEtB,qDAAqD;IACrD,OAAO,EAAE,OAAO,CAAC;IAEjB,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAC;CAClB;AAMD;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB,WAAW,GACX,eAAe,GACf,oBAAoB,GACpB,wBAAwB,GACxB,gBAAgB,GAChB,WAAW,GACX,kBAAkB,GAClB,oBAAoB,GACpB,sBAAsB,CAAC;AAE3B;;GAEG;AACH,qBAAa,WAAY,SAAQ,KAAK;aAElB,IAAI,EAAE,eAAe;aAErB,KAAK,CAAC,EAAE,OAAO;gBAFf,IAAI,EAAE,eAAe,EACrC,OAAO,EAAE,MAAM,EACC,KAAK,CAAC,EAAE,OAAO,YAAA;CAKlC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daemon Module Types
|
|
3
|
+
*
|
|
4
|
+
* Shared types for daemon lifecycle, IPC, and coordination.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Daemon-specific error
|
|
8
|
+
*/
|
|
9
|
+
export class DaemonError extends Error {
|
|
10
|
+
code;
|
|
11
|
+
cause;
|
|
12
|
+
constructor(code, message, cause) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.code = code;
|
|
15
|
+
this.cause = cause;
|
|
16
|
+
this.name = 'DaemonError';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/daemon/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkJH;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;IAElB;IAEA;IAHlB,YACkB,IAAqB,EACrC,OAAe,EACC,KAAe;QAE/B,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,SAAI,GAAJ,IAAI,CAAiB;QAErB,UAAK,GAAL,KAAK,CAAU;QAG/B,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File Watcher
|
|
3
|
+
*
|
|
4
|
+
* Watches for external changes to OpenTasks files.
|
|
5
|
+
* Notifies handlers when files are modified externally.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Type of file change detected
|
|
9
|
+
*/
|
|
10
|
+
export type ChangeType = 'add' | 'change' | 'unlink';
|
|
11
|
+
/**
|
|
12
|
+
* File category for change handling
|
|
13
|
+
*/
|
|
14
|
+
export type FileCategory = 'graph' | 'context' | 'task' | 'config' | 'unknown';
|
|
15
|
+
/**
|
|
16
|
+
* Change event emitted by watcher
|
|
17
|
+
*/
|
|
18
|
+
export interface FileChangeEvent {
|
|
19
|
+
/** Type of change */
|
|
20
|
+
type: ChangeType;
|
|
21
|
+
/** Absolute path to file */
|
|
22
|
+
path: string;
|
|
23
|
+
/** Category of file */
|
|
24
|
+
category: FileCategory;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Handler called when file changes are detected
|
|
28
|
+
*/
|
|
29
|
+
export type ChangeHandler = (event: FileChangeEvent) => void;
|
|
30
|
+
/**
|
|
31
|
+
* File watcher configuration
|
|
32
|
+
*/
|
|
33
|
+
export interface WatcherConfig {
|
|
34
|
+
/** Path to .opentasks/ directory */
|
|
35
|
+
locationPath: string;
|
|
36
|
+
/** Debounce delay in milliseconds (default: 100) */
|
|
37
|
+
debounceMs?: number;
|
|
38
|
+
/** Whether to watch markdown files (default: true) */
|
|
39
|
+
watchMarkdown?: boolean;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* File watcher interface
|
|
43
|
+
*/
|
|
44
|
+
export interface FileWatcher {
|
|
45
|
+
/** Start watching for changes */
|
|
46
|
+
start(): Promise<void>;
|
|
47
|
+
/** Stop watching */
|
|
48
|
+
stop(): Promise<void>;
|
|
49
|
+
/** Pause change detection (during internal writes) */
|
|
50
|
+
pause(): void;
|
|
51
|
+
/** Resume change detection */
|
|
52
|
+
resume(): void;
|
|
53
|
+
/** Register change handler */
|
|
54
|
+
onchange(handler: ChangeHandler): void;
|
|
55
|
+
/** Check if currently paused */
|
|
56
|
+
readonly paused: boolean;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Create a file watcher for a .opentasks/ location
|
|
60
|
+
*/
|
|
61
|
+
export declare function createFileWatcher(config: WatcherConfig): FileWatcher;
|
|
62
|
+
//# sourceMappingURL=watcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/daemon/watcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErD;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE/E;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,qBAAqB;IACrB,IAAI,EAAE,UAAU,CAAC;IAEjB,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IAEb,uBAAuB;IACvB,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,oCAAoC;IACpC,YAAY,EAAE,MAAM,CAAC;IAErB,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,sDAAsD;IACtD,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,iCAAiC;IACjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB,oBAAoB;IACpB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB,sDAAsD;IACtD,KAAK,IAAI,IAAI,CAAC;IAEd,8BAA8B;IAC9B,MAAM,IAAI,IAAI,CAAC;IAEf,8BAA8B;IAC9B,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAEvC,gCAAgC;IAChC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAqCD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,WAAW,CAiIpE"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File Watcher
|
|
3
|
+
*
|
|
4
|
+
* Watches for external changes to OpenTasks files.
|
|
5
|
+
* Notifies handlers when files are modified externally.
|
|
6
|
+
*/
|
|
7
|
+
import * as path from 'node:path';
|
|
8
|
+
import chokidar from 'chokidar';
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// Constants
|
|
11
|
+
// ============================================================================
|
|
12
|
+
const DEFAULT_DEBOUNCE_MS = 100;
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Implementation
|
|
15
|
+
// ============================================================================
|
|
16
|
+
/**
|
|
17
|
+
* Determine file category from path
|
|
18
|
+
*/
|
|
19
|
+
function categorizeFile(filePath, locationPath) {
|
|
20
|
+
const relative = path.relative(locationPath, filePath);
|
|
21
|
+
if (relative === 'graph.jsonl') {
|
|
22
|
+
return 'graph';
|
|
23
|
+
}
|
|
24
|
+
if (relative === 'config.json') {
|
|
25
|
+
return 'config';
|
|
26
|
+
}
|
|
27
|
+
if (relative.startsWith('context/') && relative.endsWith('.md')) {
|
|
28
|
+
return 'context';
|
|
29
|
+
}
|
|
30
|
+
if (relative.startsWith('tasks/') && relative.endsWith('.md')) {
|
|
31
|
+
return 'task';
|
|
32
|
+
}
|
|
33
|
+
return 'unknown';
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Create a file watcher for a .opentasks/ location
|
|
37
|
+
*/
|
|
38
|
+
export function createFileWatcher(config) {
|
|
39
|
+
const { locationPath, debounceMs = DEFAULT_DEBOUNCE_MS, watchMarkdown = true } = config;
|
|
40
|
+
let watcher = null;
|
|
41
|
+
let isPaused = false;
|
|
42
|
+
const handlers = [];
|
|
43
|
+
// Debounce map: path -> timeout
|
|
44
|
+
const pendingChanges = new Map();
|
|
45
|
+
/**
|
|
46
|
+
* Emit a change event to all handlers
|
|
47
|
+
*/
|
|
48
|
+
function emitChange(event) {
|
|
49
|
+
if (isPaused)
|
|
50
|
+
return;
|
|
51
|
+
for (const handler of handlers) {
|
|
52
|
+
try {
|
|
53
|
+
handler(event);
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
// Ignore handler errors
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Handle a file change (with debouncing)
|
|
62
|
+
*/
|
|
63
|
+
function handleChange(type, filePath) {
|
|
64
|
+
const category = categorizeFile(filePath, locationPath);
|
|
65
|
+
// Ignore unknown files
|
|
66
|
+
if (category === 'unknown')
|
|
67
|
+
return;
|
|
68
|
+
// Skip markdown if not watching
|
|
69
|
+
if (!watchMarkdown && (category === 'context' || category === 'task')) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
// Cancel existing pending change for this path
|
|
73
|
+
const existing = pendingChanges.get(filePath);
|
|
74
|
+
if (existing) {
|
|
75
|
+
clearTimeout(existing.timeout);
|
|
76
|
+
}
|
|
77
|
+
// Schedule debounced emit
|
|
78
|
+
const timeout = setTimeout(() => {
|
|
79
|
+
pendingChanges.delete(filePath);
|
|
80
|
+
emitChange({ type, path: filePath, category });
|
|
81
|
+
}, debounceMs);
|
|
82
|
+
pendingChanges.set(filePath, { timeout, type });
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
get paused() {
|
|
86
|
+
return isPaused;
|
|
87
|
+
},
|
|
88
|
+
async start() {
|
|
89
|
+
if (watcher) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
// Build watch paths
|
|
93
|
+
const watchPaths = [
|
|
94
|
+
path.join(locationPath, 'graph.jsonl'),
|
|
95
|
+
path.join(locationPath, 'config.json'),
|
|
96
|
+
];
|
|
97
|
+
if (watchMarkdown) {
|
|
98
|
+
watchPaths.push(path.join(locationPath, 'context'), path.join(locationPath, 'tasks'));
|
|
99
|
+
}
|
|
100
|
+
return new Promise((resolve, reject) => {
|
|
101
|
+
watcher = chokidar.watch(watchPaths, {
|
|
102
|
+
ignoreInitial: true,
|
|
103
|
+
persistent: true,
|
|
104
|
+
awaitWriteFinish: {
|
|
105
|
+
stabilityThreshold: 50,
|
|
106
|
+
pollInterval: 10,
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
watcher.on('add', (filePath) => handleChange('add', filePath));
|
|
110
|
+
watcher.on('change', (filePath) => handleChange('change', filePath));
|
|
111
|
+
watcher.on('unlink', (filePath) => handleChange('unlink', filePath));
|
|
112
|
+
watcher.on('ready', () => {
|
|
113
|
+
resolve();
|
|
114
|
+
});
|
|
115
|
+
watcher.on('error', (error) => {
|
|
116
|
+
reject(error);
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
},
|
|
120
|
+
async stop() {
|
|
121
|
+
// Clear all pending changes
|
|
122
|
+
for (const { timeout } of pendingChanges.values()) {
|
|
123
|
+
clearTimeout(timeout);
|
|
124
|
+
}
|
|
125
|
+
pendingChanges.clear();
|
|
126
|
+
if (watcher) {
|
|
127
|
+
await watcher.close();
|
|
128
|
+
watcher = null;
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
pause() {
|
|
132
|
+
isPaused = true;
|
|
133
|
+
},
|
|
134
|
+
resume() {
|
|
135
|
+
isPaused = false;
|
|
136
|
+
},
|
|
137
|
+
onchange(handler) {
|
|
138
|
+
handlers.push(handler);
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=watcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/daemon/watcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Edge Type Registry for OpenTasks
|
|
3
|
+
*
|
|
4
|
+
* Makes relationship types extensible without code changes.
|
|
5
|
+
* Providers can contribute new edge types at runtime.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Definition for an edge type
|
|
9
|
+
*/
|
|
10
|
+
export interface EdgeTypeDefinition {
|
|
11
|
+
/** Edge type name (e.g., 'blocks', 'implements') */
|
|
12
|
+
name: string;
|
|
13
|
+
/** Human-readable description */
|
|
14
|
+
description: string;
|
|
15
|
+
/** Inverse relationship name (e.g., 'blocks' ↔ 'blocked-by') */
|
|
16
|
+
inverseOf?: string;
|
|
17
|
+
/** Does this edge type affect ready status? */
|
|
18
|
+
affectsReady: boolean;
|
|
19
|
+
/** Edge direction semantics */
|
|
20
|
+
direction: 'directed' | 'undirected';
|
|
21
|
+
/** Which providers support this edge type */
|
|
22
|
+
providers: string[];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Provider's support level for an edge type
|
|
26
|
+
*/
|
|
27
|
+
export interface EdgeTypeSupport {
|
|
28
|
+
/** Edge type name */
|
|
29
|
+
type: string;
|
|
30
|
+
/** Can query existing edges of this type */
|
|
31
|
+
canQuery: boolean;
|
|
32
|
+
/** Can create new edges of this type */
|
|
33
|
+
canCreate: boolean;
|
|
34
|
+
/** Can delete edges of this type */
|
|
35
|
+
canDelete: boolean;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Built-in edge types
|
|
39
|
+
*/
|
|
40
|
+
export declare const BUILTIN_EDGE_TYPES: EdgeTypeDefinition[];
|
|
41
|
+
/**
|
|
42
|
+
* Result of looking up an edge type
|
|
43
|
+
*/
|
|
44
|
+
export interface EdgeTypeLookupResult {
|
|
45
|
+
/** The edge type definition */
|
|
46
|
+
definition: EdgeTypeDefinition;
|
|
47
|
+
/** Whether this is the canonical form (not inverse) */
|
|
48
|
+
isCanonical: boolean;
|
|
49
|
+
/** The canonical edge type name */
|
|
50
|
+
canonicalType: string;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Edge Type Registry
|
|
54
|
+
*
|
|
55
|
+
* Manages registered edge types and provides lookup functionality.
|
|
56
|
+
* Supports inverse relationships (e.g., blocks ↔ blocked-by).
|
|
57
|
+
*/
|
|
58
|
+
export declare class EdgeTypeRegistry {
|
|
59
|
+
private types;
|
|
60
|
+
private inverses;
|
|
61
|
+
private registrationOrder;
|
|
62
|
+
constructor();
|
|
63
|
+
/**
|
|
64
|
+
* Register a new edge type
|
|
65
|
+
*
|
|
66
|
+
* @param definition - The edge type definition
|
|
67
|
+
* @throws Error if type already registered with different definition
|
|
68
|
+
*/
|
|
69
|
+
register(definition: EdgeTypeDefinition): void;
|
|
70
|
+
/**
|
|
71
|
+
* Look up an edge type by name
|
|
72
|
+
*
|
|
73
|
+
* @param name - The edge type name
|
|
74
|
+
* @returns The lookup result or null if not found
|
|
75
|
+
*/
|
|
76
|
+
lookup(name: string): EdgeTypeLookupResult | null;
|
|
77
|
+
/**
|
|
78
|
+
* Get the inverse of an edge type
|
|
79
|
+
*
|
|
80
|
+
* @param name - The edge type name
|
|
81
|
+
* @returns The inverse type name or null if none
|
|
82
|
+
*/
|
|
83
|
+
getInverse(name: string): string | null;
|
|
84
|
+
/**
|
|
85
|
+
* Check if an edge type affects ready status
|
|
86
|
+
*
|
|
87
|
+
* @param name - The edge type name
|
|
88
|
+
* @returns True if this edge type affects ready status
|
|
89
|
+
*/
|
|
90
|
+
affectsReady(name: string): boolean;
|
|
91
|
+
/**
|
|
92
|
+
* Get all registered edge types
|
|
93
|
+
*
|
|
94
|
+
* @returns Array of all edge type definitions
|
|
95
|
+
*/
|
|
96
|
+
getAll(): EdgeTypeDefinition[];
|
|
97
|
+
/**
|
|
98
|
+
* Get edge types that affect ready status
|
|
99
|
+
*
|
|
100
|
+
* @returns Array of edge type names that affect ready
|
|
101
|
+
*/
|
|
102
|
+
getReadyAffectingTypes(): string[];
|
|
103
|
+
/**
|
|
104
|
+
* Get edge types supported by a provider
|
|
105
|
+
*
|
|
106
|
+
* @param provider - The provider name
|
|
107
|
+
* @returns Array of edge type definitions
|
|
108
|
+
*/
|
|
109
|
+
getTypesForProvider(provider: string): EdgeTypeDefinition[];
|
|
110
|
+
/**
|
|
111
|
+
* Check if a type is registered
|
|
112
|
+
*
|
|
113
|
+
* @param name - The edge type name
|
|
114
|
+
* @returns True if the type is registered
|
|
115
|
+
*/
|
|
116
|
+
has(name: string): boolean;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Get the global edge type registry instance
|
|
120
|
+
*
|
|
121
|
+
* @returns The singleton EdgeTypeRegistry
|
|
122
|
+
*/
|
|
123
|
+
export declare function getEdgeTypeRegistry(): EdgeTypeRegistry;
|
|
124
|
+
/**
|
|
125
|
+
* Create a new edge type registry (for testing)
|
|
126
|
+
*
|
|
127
|
+
* @returns A fresh EdgeTypeRegistry instance
|
|
128
|
+
*/
|
|
129
|
+
export declare function createEdgeTypeRegistry(): EdgeTypeRegistry;
|
|
130
|
+
/**
|
|
131
|
+
* Reset the global registry (for testing)
|
|
132
|
+
*/
|
|
133
|
+
export declare function resetEdgeTypeRegistry(): void;
|
|
134
|
+
//# sourceMappingURL=EdgeTypeRegistry.d.ts.map
|