opentasks 0.0.5 → 0.0.7
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 +108 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +217 -8
- package/dist/cli.js.map +1 -1
- package/dist/client/client.d.ts +47 -1
- package/dist/client/client.d.ts.map +1 -1
- package/dist/client/client.js +71 -0
- package/dist/client/client.js.map +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/config/schema.d.ts +232 -4
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +161 -7
- package/dist/config/schema.js.map +1 -1
- package/dist/context-files/context-files.d.ts +72 -0
- package/dist/context-files/context-files.d.ts.map +1 -0
- package/dist/context-files/context-files.js +145 -0
- package/dist/context-files/context-files.js.map +1 -0
- package/dist/context-files/index.d.ts +16 -0
- package/dist/context-files/index.d.ts.map +1 -0
- package/dist/context-files/index.js +14 -0
- package/dist/context-files/index.js.map +1 -0
- package/dist/context-files/resolver.d.ts +43 -0
- package/dist/context-files/resolver.d.ts.map +1 -0
- package/dist/context-files/resolver.js +127 -0
- package/dist/context-files/resolver.js.map +1 -0
- package/dist/context-files/types.d.ts +94 -0
- package/dist/context-files/types.d.ts.map +1 -0
- package/dist/context-files/types.js +10 -0
- package/dist/context-files/types.js.map +1 -0
- package/dist/context-files/watcher-integration.d.ts +47 -0
- package/dist/context-files/watcher-integration.d.ts.map +1 -0
- package/dist/context-files/watcher-integration.js +47 -0
- package/dist/context-files/watcher-integration.js.map +1 -0
- package/dist/core/merge-driver.d.ts +11 -2
- package/dist/core/merge-driver.d.ts.map +1 -1
- package/dist/core/merge-driver.js +46 -7
- package/dist/core/merge-driver.js.map +1 -1
- package/dist/core/worktree.js +1 -1
- package/dist/core/worktree.js.map +1 -1
- package/dist/daemon/index.d.ts +6 -4
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +3 -2
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/ipc.d.ts.map +1 -1
- package/dist/daemon/ipc.js +12 -2
- package/dist/daemon/ipc.js.map +1 -1
- package/dist/daemon/lifecycle.d.ts.map +1 -1
- package/dist/daemon/lifecycle.js +143 -25
- package/dist/daemon/lifecycle.js.map +1 -1
- package/dist/daemon/location-state.d.ts +12 -6
- package/dist/daemon/location-state.d.ts.map +1 -1
- package/dist/daemon/location-state.js +50 -20
- package/dist/daemon/location-state.js.map +1 -1
- package/dist/daemon/methods/context-files.d.ts +14 -0
- package/dist/daemon/methods/context-files.d.ts.map +1 -0
- package/dist/daemon/methods/context-files.js +95 -0
- package/dist/daemon/methods/context-files.js.map +1 -0
- package/dist/daemon/methods/provider.d.ts.map +1 -1
- package/dist/daemon/methods/provider.js +15 -0
- package/dist/daemon/methods/provider.js.map +1 -1
- package/dist/daemon/methods/tools.d.ts +1 -1
- package/dist/daemon/methods/tools.d.ts.map +1 -1
- package/dist/daemon/methods/tools.js +3 -2
- package/dist/daemon/methods/tools.js.map +1 -1
- package/dist/daemon/sessionlog-linker.d.ts +71 -0
- package/dist/daemon/sessionlog-linker.d.ts.map +1 -0
- package/dist/daemon/sessionlog-linker.js +472 -0
- package/dist/daemon/sessionlog-linker.js.map +1 -0
- package/dist/daemon/sessionlog-watcher.d.ts +79 -0
- package/dist/daemon/sessionlog-watcher.d.ts.map +1 -0
- package/dist/daemon/sessionlog-watcher.js +289 -0
- package/dist/daemon/sessionlog-watcher.js.map +1 -0
- package/dist/graph/git-graph-syncer.js +1 -1
- package/dist/graph/git-graph-syncer.js.map +1 -1
- package/dist/graph/index.d.ts +1 -1
- package/dist/graph/index.d.ts.map +1 -1
- package/dist/graph/index.js.map +1 -1
- package/dist/graph/provider-store.d.ts +78 -4
- package/dist/graph/provider-store.d.ts.map +1 -1
- package/dist/graph/provider-store.js +579 -55
- package/dist/graph/provider-store.js.map +1 -1
- package/dist/graph/store.d.ts.map +1 -1
- package/dist/graph/store.js +3 -0
- package/dist/graph/store.js.map +1 -1
- package/dist/graph/types.d.ts +16 -0
- package/dist/graph/types.d.ts.map +1 -1
- package/dist/graph/types.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -3
- package/dist/index.js.map +1 -1
- package/dist/materialization/git-archive-store.js +2 -2
- package/dist/materialization/git-archive-store.js.map +1 -1
- package/dist/materialization/git-remote-store.js +2 -2
- package/dist/materialization/git-remote-store.js.map +1 -1
- package/dist/materialization/snapshot.js +4 -4
- package/dist/materialization/snapshot.js.map +1 -1
- package/dist/mcp/index.d.ts +8 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +8 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +39 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +677 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/stdio.d.ts +14 -0
- package/dist/mcp/stdio.d.ts.map +1 -0
- package/dist/mcp/stdio.js +19 -0
- package/dist/mcp/stdio.js.map +1 -0
- package/dist/providers/beads.d.ts.map +1 -1
- package/dist/providers/beads.js +17 -1
- package/dist/providers/beads.js.map +1 -1
- package/dist/providers/claude-tasks-fs.d.ts +22 -0
- package/dist/providers/claude-tasks-fs.d.ts.map +1 -0
- package/dist/providers/claude-tasks-fs.js +158 -0
- package/dist/providers/claude-tasks-fs.js.map +1 -0
- package/dist/providers/claude-tasks.d.ts +13 -4
- package/dist/providers/claude-tasks.d.ts.map +1 -1
- package/dist/providers/claude-tasks.js +318 -5
- package/dist/providers/claude-tasks.js.map +1 -1
- package/dist/providers/from-config.d.ts +3 -0
- package/dist/providers/from-config.d.ts.map +1 -1
- package/dist/providers/from-config.js +64 -17
- package/dist/providers/from-config.js.map +1 -1
- package/dist/providers/global.d.ts.map +1 -1
- package/dist/providers/global.js +5 -0
- package/dist/providers/global.js.map +1 -1
- package/dist/providers/index.d.ts +9 -4
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +10 -3
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/map-client-factory.d.ts +55 -0
- package/dist/providers/map-client-factory.d.ts.map +1 -0
- package/dist/providers/map-client-factory.js +123 -0
- package/dist/providers/map-client-factory.js.map +1 -0
- package/dist/providers/map-event-bridge.d.ts +146 -0
- package/dist/providers/map-event-bridge.d.ts.map +1 -0
- package/dist/providers/map-event-bridge.js +208 -0
- package/dist/providers/map-event-bridge.js.map +1 -0
- package/dist/providers/map.d.ts +115 -0
- package/dist/providers/map.d.ts.map +1 -0
- package/dist/providers/map.js +381 -0
- package/dist/providers/map.js.map +1 -0
- package/dist/providers/materialization.d.ts +23 -5
- package/dist/providers/materialization.d.ts.map +1 -1
- package/dist/providers/materialization.js +95 -4
- package/dist/providers/materialization.js.map +1 -1
- package/dist/providers/native.d.ts.map +1 -1
- package/dist/providers/native.js +5 -0
- package/dist/providers/native.js.map +1 -1
- package/dist/providers/sessionlog.d.ts +81 -0
- package/dist/providers/sessionlog.d.ts.map +1 -0
- package/dist/providers/sessionlog.js +478 -0
- package/dist/providers/sessionlog.js.map +1 -0
- package/dist/providers/sudocode.d.ts.map +1 -1
- package/dist/providers/sudocode.js +17 -1
- package/dist/providers/sudocode.js.map +1 -1
- package/dist/providers/traits/Reconcilable.d.ts +57 -0
- package/dist/providers/traits/Reconcilable.d.ts.map +1 -0
- package/dist/providers/traits/Reconcilable.js +18 -0
- package/dist/providers/traits/Reconcilable.js.map +1 -0
- package/dist/providers/traits/index.d.ts +2 -0
- package/dist/providers/traits/index.d.ts.map +1 -1
- package/dist/providers/traits/index.js +1 -0
- package/dist/providers/traits/index.js.map +1 -1
- package/dist/providers/types.d.ts +63 -0
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js +22 -0
- package/dist/providers/types.js.map +1 -1
- package/dist/schema/edges.d.ts +3 -3
- package/dist/schema/edges.d.ts.map +1 -1
- package/dist/sessionlog/agent/agents/claude-code.d.ts +76 -0
- package/dist/sessionlog/agent/agents/claude-code.d.ts.map +1 -0
- package/dist/sessionlog/agent/agents/claude-code.js +759 -0
- package/dist/sessionlog/agent/agents/claude-code.js.map +1 -0
- package/dist/sessionlog/agent/agents/cursor.d.ts +35 -0
- package/dist/sessionlog/agent/agents/cursor.d.ts.map +1 -0
- package/dist/sessionlog/agent/agents/cursor.js +294 -0
- package/dist/sessionlog/agent/agents/cursor.js.map +1 -0
- package/dist/sessionlog/agent/agents/gemini-cli.d.ts +62 -0
- package/dist/sessionlog/agent/agents/gemini-cli.d.ts.map +1 -0
- package/dist/sessionlog/agent/agents/gemini-cli.js +462 -0
- package/dist/sessionlog/agent/agents/gemini-cli.js.map +1 -0
- package/dist/sessionlog/agent/agents/opencode.d.ts +100 -0
- package/dist/sessionlog/agent/agents/opencode.d.ts.map +1 -0
- package/dist/sessionlog/agent/agents/opencode.js +423 -0
- package/dist/sessionlog/agent/agents/opencode.js.map +1 -0
- package/dist/sessionlog/agent/registry.d.ts +54 -0
- package/dist/sessionlog/agent/registry.d.ts.map +1 -0
- package/dist/sessionlog/agent/registry.js +123 -0
- package/dist/sessionlog/agent/registry.js.map +1 -0
- package/dist/sessionlog/agent/session-types.d.ts +45 -0
- package/dist/sessionlog/agent/session-types.d.ts.map +1 -0
- package/dist/sessionlog/agent/session-types.js +50 -0
- package/dist/sessionlog/agent/session-types.js.map +1 -0
- package/dist/sessionlog/agent/types.d.ts +126 -0
- package/dist/sessionlog/agent/types.d.ts.map +1 -0
- package/dist/sessionlog/agent/types.js +39 -0
- package/dist/sessionlog/agent/types.js.map +1 -0
- package/dist/sessionlog/commands/clean.d.ts +40 -0
- package/dist/sessionlog/commands/clean.d.ts.map +1 -0
- package/dist/sessionlog/commands/clean.js +105 -0
- package/dist/sessionlog/commands/clean.js.map +1 -0
- package/dist/sessionlog/commands/disable.d.ts +23 -0
- package/dist/sessionlog/commands/disable.d.ts.map +1 -0
- package/dist/sessionlog/commands/disable.js +57 -0
- package/dist/sessionlog/commands/disable.js.map +1 -0
- package/dist/sessionlog/commands/doctor.d.ts +43 -0
- package/dist/sessionlog/commands/doctor.d.ts.map +1 -0
- package/dist/sessionlog/commands/doctor.js +97 -0
- package/dist/sessionlog/commands/doctor.js.map +1 -0
- package/dist/sessionlog/commands/enable.d.ts +31 -0
- package/dist/sessionlog/commands/enable.d.ts.map +1 -0
- package/dist/sessionlog/commands/enable.js +102 -0
- package/dist/sessionlog/commands/enable.js.map +1 -0
- package/dist/sessionlog/commands/explain.d.ts +69 -0
- package/dist/sessionlog/commands/explain.d.ts.map +1 -0
- package/dist/sessionlog/commands/explain.js +185 -0
- package/dist/sessionlog/commands/explain.js.map +1 -0
- package/dist/sessionlog/commands/reset.d.ts +23 -0
- package/dist/sessionlog/commands/reset.d.ts.map +1 -0
- package/dist/sessionlog/commands/reset.js +68 -0
- package/dist/sessionlog/commands/reset.js.map +1 -0
- package/dist/sessionlog/commands/resume.d.ts +42 -0
- package/dist/sessionlog/commands/resume.d.ts.map +1 -0
- package/dist/sessionlog/commands/resume.js +134 -0
- package/dist/sessionlog/commands/resume.js.map +1 -0
- package/dist/sessionlog/commands/rewind.d.ts +40 -0
- package/dist/sessionlog/commands/rewind.d.ts.map +1 -0
- package/dist/sessionlog/commands/rewind.js +155 -0
- package/dist/sessionlog/commands/rewind.js.map +1 -0
- package/dist/sessionlog/commands/status.d.ts +54 -0
- package/dist/sessionlog/commands/status.d.ts.map +1 -0
- package/dist/sessionlog/commands/status.js +95 -0
- package/dist/sessionlog/commands/status.js.map +1 -0
- package/dist/sessionlog/config.d.ts +40 -0
- package/dist/sessionlog/config.d.ts.map +1 -0
- package/dist/sessionlog/config.js +126 -0
- package/dist/sessionlog/config.js.map +1 -0
- package/dist/sessionlog/git-operations.d.ts +173 -0
- package/dist/sessionlog/git-operations.d.ts.map +1 -0
- package/dist/sessionlog/git-operations.js +399 -0
- package/dist/sessionlog/git-operations.js.map +1 -0
- package/dist/sessionlog/hooks/git-hooks.d.ts +22 -0
- package/dist/sessionlog/hooks/git-hooks.d.ts.map +1 -0
- package/dist/sessionlog/hooks/git-hooks.js +145 -0
- package/dist/sessionlog/hooks/git-hooks.js.map +1 -0
- package/dist/sessionlog/hooks/lifecycle.d.ts +21 -0
- package/dist/sessionlog/hooks/lifecycle.d.ts.map +1 -0
- package/dist/sessionlog/hooks/lifecycle.js +179 -0
- package/dist/sessionlog/hooks/lifecycle.js.map +1 -0
- package/dist/sessionlog/index.d.ts +69 -0
- package/dist/sessionlog/index.d.ts.map +1 -0
- package/dist/sessionlog/index.js +154 -0
- package/dist/sessionlog/index.js.map +1 -0
- package/dist/sessionlog/security/redaction.d.ts +35 -0
- package/dist/sessionlog/security/redaction.d.ts.map +1 -0
- package/dist/sessionlog/security/redaction.js +221 -0
- package/dist/sessionlog/security/redaction.js.map +1 -0
- package/dist/sessionlog/session/state-machine.d.ts +90 -0
- package/dist/sessionlog/session/state-machine.d.ts.map +1 -0
- package/dist/sessionlog/session/state-machine.js +347 -0
- package/dist/sessionlog/session/state-machine.js.map +1 -0
- package/dist/sessionlog/store/checkpoint-store.d.ts +47 -0
- package/dist/sessionlog/store/checkpoint-store.d.ts.map +1 -0
- package/dist/sessionlog/store/checkpoint-store.js +309 -0
- package/dist/sessionlog/store/checkpoint-store.js.map +1 -0
- package/dist/sessionlog/store/native-store.d.ts +21 -0
- package/dist/sessionlog/store/native-store.d.ts.map +1 -0
- package/dist/sessionlog/store/native-store.js +162 -0
- package/dist/sessionlog/store/native-store.js.map +1 -0
- package/dist/sessionlog/store/provider-types.d.ts +78 -0
- package/dist/sessionlog/store/provider-types.d.ts.map +1 -0
- package/dist/sessionlog/store/provider-types.js +12 -0
- package/dist/sessionlog/store/provider-types.js.map +1 -0
- package/dist/sessionlog/store/session-store.d.ts +28 -0
- package/dist/sessionlog/store/session-store.d.ts.map +1 -0
- package/dist/sessionlog/store/session-store.js +187 -0
- package/dist/sessionlog/store/session-store.js.map +1 -0
- package/dist/sessionlog/strategy/attribution.d.ts +39 -0
- package/dist/sessionlog/strategy/attribution.d.ts.map +1 -0
- package/dist/sessionlog/strategy/attribution.js +227 -0
- package/dist/sessionlog/strategy/attribution.js.map +1 -0
- package/dist/sessionlog/strategy/common.d.ts +60 -0
- package/dist/sessionlog/strategy/common.d.ts.map +1 -0
- package/dist/sessionlog/strategy/common.js +162 -0
- package/dist/sessionlog/strategy/common.js.map +1 -0
- package/dist/sessionlog/strategy/content-overlap.d.ts +33 -0
- package/dist/sessionlog/strategy/content-overlap.d.ts.map +1 -0
- package/dist/sessionlog/strategy/content-overlap.js +168 -0
- package/dist/sessionlog/strategy/content-overlap.js.map +1 -0
- package/dist/sessionlog/strategy/manual-commit.d.ts +35 -0
- package/dist/sessionlog/strategy/manual-commit.d.ts.map +1 -0
- package/dist/sessionlog/strategy/manual-commit.js +732 -0
- package/dist/sessionlog/strategy/manual-commit.js.map +1 -0
- package/dist/sessionlog/strategy/types.d.ts +163 -0
- package/dist/sessionlog/strategy/types.d.ts.map +1 -0
- package/dist/sessionlog/strategy/types.js +49 -0
- package/dist/sessionlog/strategy/types.js.map +1 -0
- package/dist/sessionlog/summarize/claude-generator.d.ts +25 -0
- package/dist/sessionlog/summarize/claude-generator.d.ts.map +1 -0
- package/dist/sessionlog/summarize/claude-generator.js +87 -0
- package/dist/sessionlog/summarize/claude-generator.js.map +1 -0
- package/dist/sessionlog/summarize/summarize.d.ts +52 -0
- package/dist/sessionlog/summarize/summarize.d.ts.map +1 -0
- package/dist/sessionlog/summarize/summarize.js +335 -0
- package/dist/sessionlog/summarize/summarize.js.map +1 -0
- package/dist/sessionlog/types.d.ts +298 -0
- package/dist/sessionlog/types.d.ts.map +1 -0
- package/dist/sessionlog/types.js +104 -0
- package/dist/sessionlog/types.js.map +1 -0
- package/dist/sessionlog/utils/chunk-files.d.ts +25 -0
- package/dist/sessionlog/utils/chunk-files.d.ts.map +1 -0
- package/dist/sessionlog/utils/chunk-files.js +47 -0
- package/dist/sessionlog/utils/chunk-files.js.map +1 -0
- package/dist/sessionlog/utils/commit-message.d.ts +11 -0
- package/dist/sessionlog/utils/commit-message.d.ts.map +1 -0
- package/dist/sessionlog/utils/commit-message.js +54 -0
- package/dist/sessionlog/utils/commit-message.js.map +1 -0
- package/dist/sessionlog/utils/detect-agent.d.ts +19 -0
- package/dist/sessionlog/utils/detect-agent.d.ts.map +1 -0
- package/dist/sessionlog/utils/detect-agent.js +34 -0
- package/dist/sessionlog/utils/detect-agent.js.map +1 -0
- package/dist/sessionlog/utils/hook-managers.d.ts +24 -0
- package/dist/sessionlog/utils/hook-managers.d.ts.map +1 -0
- package/dist/sessionlog/utils/hook-managers.js +87 -0
- package/dist/sessionlog/utils/hook-managers.js.map +1 -0
- package/dist/sessionlog/utils/ide-tags.d.ts +12 -0
- package/dist/sessionlog/utils/ide-tags.d.ts.map +1 -0
- package/dist/sessionlog/utils/ide-tags.js +30 -0
- package/dist/sessionlog/utils/ide-tags.js.map +1 -0
- package/dist/sessionlog/utils/paths.d.ts +32 -0
- package/dist/sessionlog/utils/paths.d.ts.map +1 -0
- package/dist/sessionlog/utils/paths.js +55 -0
- package/dist/sessionlog/utils/paths.js.map +1 -0
- package/dist/sessionlog/utils/preview-rewind.d.ts +23 -0
- package/dist/sessionlog/utils/preview-rewind.d.ts.map +1 -0
- package/dist/sessionlog/utils/preview-rewind.js +63 -0
- package/dist/sessionlog/utils/preview-rewind.js.map +1 -0
- package/dist/sessionlog/utils/rewind-conflict.d.ts +52 -0
- package/dist/sessionlog/utils/rewind-conflict.d.ts.map +1 -0
- package/dist/sessionlog/utils/rewind-conflict.js +79 -0
- package/dist/sessionlog/utils/rewind-conflict.js.map +1 -0
- package/dist/sessionlog/utils/shadow-branch.d.ts +53 -0
- package/dist/sessionlog/utils/shadow-branch.d.ts.map +1 -0
- package/dist/sessionlog/utils/shadow-branch.js +97 -0
- package/dist/sessionlog/utils/shadow-branch.js.map +1 -0
- package/dist/sessionlog/utils/string-utils.d.ts +24 -0
- package/dist/sessionlog/utils/string-utils.d.ts.map +1 -0
- package/dist/sessionlog/utils/string-utils.js +47 -0
- package/dist/sessionlog/utils/string-utils.js.map +1 -0
- package/dist/sessionlog/utils/todo-extract.d.ts +52 -0
- package/dist/sessionlog/utils/todo-extract.d.ts.map +1 -0
- package/dist/sessionlog/utils/todo-extract.js +167 -0
- package/dist/sessionlog/utils/todo-extract.js.map +1 -0
- package/dist/sessionlog/utils/trailers.d.ts +36 -0
- package/dist/sessionlog/utils/trailers.d.ts.map +1 -0
- package/dist/sessionlog/utils/trailers.js +149 -0
- package/dist/sessionlog/utils/trailers.js.map +1 -0
- package/dist/sessionlog/utils/transcript-parse.d.ts +57 -0
- package/dist/sessionlog/utils/transcript-parse.d.ts.map +1 -0
- package/dist/sessionlog/utils/transcript-parse.js +126 -0
- package/dist/sessionlog/utils/transcript-parse.js.map +1 -0
- package/dist/sessionlog/utils/transcript-timestamp.d.ts +22 -0
- package/dist/sessionlog/utils/transcript-timestamp.d.ts.map +1 -0
- package/dist/sessionlog/utils/transcript-timestamp.js +56 -0
- package/dist/sessionlog/utils/transcript-timestamp.js.map +1 -0
- package/dist/sessionlog/utils/tree-ops.d.ts +47 -0
- package/dist/sessionlog/utils/tree-ops.d.ts.map +1 -0
- package/dist/sessionlog/utils/tree-ops.js +145 -0
- package/dist/sessionlog/utils/tree-ops.js.map +1 -0
- package/dist/sessionlog/utils/tty.d.ts +25 -0
- package/dist/sessionlog/utils/tty.d.ts.map +1 -0
- package/dist/sessionlog/utils/tty.js +70 -0
- package/dist/sessionlog/utils/tty.js.map +1 -0
- package/dist/sessionlog/utils/validation.d.ts +31 -0
- package/dist/sessionlog/utils/validation.d.ts.map +1 -0
- package/dist/sessionlog/utils/validation.js +59 -0
- package/dist/sessionlog/utils/validation.js.map +1 -0
- package/dist/sessionlog/utils/worktree.d.ts +16 -0
- package/dist/sessionlog/utils/worktree.d.ts.map +1 -0
- package/dist/sessionlog/utils/worktree.js +50 -0
- package/dist/sessionlog/utils/worktree.js.map +1 -0
- package/dist/storage/sqlite-schema.d.ts.map +1 -1
- package/dist/storage/sqlite-schema.js +2 -0
- package/dist/storage/sqlite-schema.js.map +1 -1
- package/dist/storage/sqlite.d.ts.map +1 -1
- package/dist/storage/sqlite.js +18 -4
- package/dist/storage/sqlite.js.map +1 -1
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/query.d.ts +2 -1
- package/dist/tools/query.d.ts.map +1 -1
- package/dist/tools/query.js +217 -7
- package/dist/tools/query.js.map +1 -1
- package/dist/tools/types.d.ts +57 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js.map +1 -1
- package/dist/tracking/transcript-extractor.d.ts +3 -3
- package/dist/tracking/transcript-extractor.d.ts.map +1 -1
- package/dist/tracking/transcript-extractor.js +1 -1
- package/dist/tracking/transcript-extractor.js.map +1 -1
- package/package.json +3 -1
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sessionlog Auto-Linker
|
|
3
|
+
*
|
|
4
|
+
* Correlation engine that automatically creates edges between OpenTasks
|
|
5
|
+
* tasks and sessionlog sessions/checkpoints. Matches sessions to tasks via
|
|
6
|
+
* claims, in-progress status, and branch association.
|
|
7
|
+
*/
|
|
8
|
+
import type { GraphStore } from '../graph/store.js';
|
|
9
|
+
import type { DaemonFlushManager } from './flush.js';
|
|
10
|
+
import type { SessionlogSessionEvent, SessionlogSessionState } from './sessionlog-watcher.js';
|
|
11
|
+
import type { MaterializationArchiver } from '../materialization/types.js';
|
|
12
|
+
import type { SkillTrackerRegistry } from '../tracking/skill-tracker.js';
|
|
13
|
+
/**
|
|
14
|
+
* Correlation confidence level
|
|
15
|
+
*/
|
|
16
|
+
export type CorrelationConfidence = 'high' | 'medium' | 'low';
|
|
17
|
+
/**
|
|
18
|
+
* How a task was matched to a session
|
|
19
|
+
*/
|
|
20
|
+
export type CorrelationStrategy = 'claimed-task' | 'in-progress-branch' | 'in-progress-any';
|
|
21
|
+
/**
|
|
22
|
+
* A task matched to a sessionlog session
|
|
23
|
+
*/
|
|
24
|
+
export interface MatchedTask {
|
|
25
|
+
nodeId: string;
|
|
26
|
+
uri?: string;
|
|
27
|
+
matchReason: CorrelationStrategy;
|
|
28
|
+
confidence: CorrelationConfidence;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Result of correlating a session with tasks
|
|
32
|
+
*/
|
|
33
|
+
export interface CorrelationResult {
|
|
34
|
+
sessionId: string;
|
|
35
|
+
matchedTasks: MatchedTask[];
|
|
36
|
+
edgesCreated: string[];
|
|
37
|
+
nodesCreated: string[];
|
|
38
|
+
strategy: CorrelationStrategy | 'none';
|
|
39
|
+
timestamp: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Configuration for the auto-linker
|
|
43
|
+
*/
|
|
44
|
+
export interface SessionlogAutoLinkerConfig {
|
|
45
|
+
/** Graph store for creating nodes and edges */
|
|
46
|
+
store: GraphStore;
|
|
47
|
+
/** Flush manager for scheduling persistence */
|
|
48
|
+
flushManager: DaemonFlushManager;
|
|
49
|
+
/** Minimum confidence for auto-linking (default: 'medium') */
|
|
50
|
+
minConfidence?: CorrelationConfidence;
|
|
51
|
+
/** Optional archiver for durable session snapshots */
|
|
52
|
+
archiver?: MaterializationArchiver;
|
|
53
|
+
/** Skill tracker registry for embedding skill usage in session nodes */
|
|
54
|
+
skillTrackerRegistry?: SkillTrackerRegistry;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Auto-linker interface
|
|
58
|
+
*/
|
|
59
|
+
export interface SessionlogAutoLinker {
|
|
60
|
+
/** Handle a session event from the watcher */
|
|
61
|
+
handleSessionEvent(event: SessionlogSessionEvent): Promise<void>;
|
|
62
|
+
/** Manually trigger correlation for a session */
|
|
63
|
+
correlate(sessionId: string, session: SessionlogSessionState): Promise<CorrelationResult>;
|
|
64
|
+
/** Get correlation history */
|
|
65
|
+
getCorrelations(): Map<string, CorrelationResult>;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Create a sessionlog auto-linker
|
|
69
|
+
*/
|
|
70
|
+
export declare function createSessionlogAutoLinker(config: SessionlogAutoLinkerConfig): SessionlogAutoLinker;
|
|
71
|
+
//# sourceMappingURL=sessionlog-linker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionlog-linker.d.ts","sourceRoot":"","sources":["../../src/daemon/sessionlog-linker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAC9F,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAMzE;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG,oBAAoB,GAAG,iBAAiB,CAAC;AAE5F;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,mBAAmB,CAAC;IACjC,UAAU,EAAE,qBAAqB,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,mBAAmB,GAAG,MAAM,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,+CAA+C;IAC/C,KAAK,EAAE,UAAU,CAAC;IAElB,+CAA+C;IAC/C,YAAY,EAAE,kBAAkB,CAAC;IAEjC,8DAA8D;IAC9D,aAAa,CAAC,EAAE,qBAAqB,CAAC;IAEtC,sDAAsD;IACtD,QAAQ,CAAC,EAAE,uBAAuB,CAAC;IAEnC,wEAAwE;IACxE,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,kBAAkB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjE,iDAAiD;IACjD,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAE1F,8BAA8B;IAC9B,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CACnD;AAuBD;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,0BAA0B,GAAG,oBAAoB,CA0fnG"}
|
|
@@ -0,0 +1,472 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sessionlog Auto-Linker
|
|
3
|
+
*
|
|
4
|
+
* Correlation engine that automatically creates edges between OpenTasks
|
|
5
|
+
* tasks and sessionlog sessions/checkpoints. Matches sessions to tasks via
|
|
6
|
+
* claims, in-progress status, and branch association.
|
|
7
|
+
*/
|
|
8
|
+
// ============================================================================
|
|
9
|
+
// Confidence Ordering
|
|
10
|
+
// ============================================================================
|
|
11
|
+
const CONFIDENCE_ORDER = {
|
|
12
|
+
high: 3,
|
|
13
|
+
medium: 2,
|
|
14
|
+
low: 1,
|
|
15
|
+
};
|
|
16
|
+
function meetsConfidenceThreshold(confidence, minimum) {
|
|
17
|
+
return CONFIDENCE_ORDER[confidence] >= CONFIDENCE_ORDER[minimum];
|
|
18
|
+
}
|
|
19
|
+
// ============================================================================
|
|
20
|
+
// Implementation
|
|
21
|
+
// ============================================================================
|
|
22
|
+
/**
|
|
23
|
+
* Create a sessionlog auto-linker
|
|
24
|
+
*/
|
|
25
|
+
export function createSessionlogAutoLinker(config) {
|
|
26
|
+
const { store, flushManager, archiver, skillTrackerRegistry } = config;
|
|
27
|
+
const minConfidence = config.minConfidence ?? 'medium';
|
|
28
|
+
// Track which sessions have been linked to avoid duplicates
|
|
29
|
+
const correlations = new Map();
|
|
30
|
+
// Track created external nodes: URI → node ID mapping
|
|
31
|
+
const createdNodes = new Map();
|
|
32
|
+
/**
|
|
33
|
+
* Find tasks correlated with a session
|
|
34
|
+
*/
|
|
35
|
+
async function findCorrelatedTasks(session) {
|
|
36
|
+
const matched = [];
|
|
37
|
+
// Strategy 1: Claimed tasks (high confidence)
|
|
38
|
+
try {
|
|
39
|
+
const allIssues = await store.query.nodes({
|
|
40
|
+
type: 'task',
|
|
41
|
+
status: 'in_progress',
|
|
42
|
+
archived: false,
|
|
43
|
+
});
|
|
44
|
+
for (const issue of allIssues) {
|
|
45
|
+
const raw = issue;
|
|
46
|
+
const claimedBy = raw.claimed_by;
|
|
47
|
+
const lockUntil = raw.lock_until;
|
|
48
|
+
if (claimedBy && (!lockUntil || new Date(lockUntil) > new Date())) {
|
|
49
|
+
matched.push({
|
|
50
|
+
nodeId: issue.id,
|
|
51
|
+
uri: raw.uri,
|
|
52
|
+
matchReason: 'claimed-task',
|
|
53
|
+
confidence: 'high',
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// Continue to next strategy
|
|
60
|
+
}
|
|
61
|
+
if (matched.length > 0)
|
|
62
|
+
return matched;
|
|
63
|
+
// Strategy 2: In-progress tasks on same branch (medium confidence)
|
|
64
|
+
if (session.branch) {
|
|
65
|
+
try {
|
|
66
|
+
const allIssues = await store.query.nodes({
|
|
67
|
+
type: 'task',
|
|
68
|
+
status: 'in_progress',
|
|
69
|
+
archived: false,
|
|
70
|
+
});
|
|
71
|
+
for (const issue of allIssues) {
|
|
72
|
+
const raw = issue;
|
|
73
|
+
if (raw.branch === session.branch) {
|
|
74
|
+
matched.push({
|
|
75
|
+
nodeId: issue.id,
|
|
76
|
+
uri: raw.uri,
|
|
77
|
+
matchReason: 'in-progress-branch',
|
|
78
|
+
confidence: 'medium',
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// Continue to next strategy
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (matched.length > 0)
|
|
88
|
+
return matched;
|
|
89
|
+
// Strategy 3: Any in-progress task (low confidence)
|
|
90
|
+
// Only if exactly one in-progress task exists (ambiguity guard)
|
|
91
|
+
try {
|
|
92
|
+
const allInProgress = await store.query.nodes({
|
|
93
|
+
type: 'task',
|
|
94
|
+
status: 'in_progress',
|
|
95
|
+
archived: false,
|
|
96
|
+
});
|
|
97
|
+
if (allInProgress.length === 1) {
|
|
98
|
+
const raw = allInProgress[0];
|
|
99
|
+
matched.push({
|
|
100
|
+
nodeId: allInProgress[0].id,
|
|
101
|
+
uri: raw.uri,
|
|
102
|
+
matchReason: 'in-progress-any',
|
|
103
|
+
confidence: 'low',
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
// No matches
|
|
109
|
+
}
|
|
110
|
+
return matched;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Ensure an external node exists for a sessionlog session.
|
|
114
|
+
* Returns the node's actual graph ID (not the URI).
|
|
115
|
+
*/
|
|
116
|
+
async function ensureSessionNode(session) {
|
|
117
|
+
const uri = `sessionlog://session/${session.id}`;
|
|
118
|
+
const cachedId = createdNodes.get(uri);
|
|
119
|
+
if (cachedId)
|
|
120
|
+
return cachedId;
|
|
121
|
+
// Check if node already exists
|
|
122
|
+
const existing = await store.query.nodes({
|
|
123
|
+
type: 'external',
|
|
124
|
+
search: uri,
|
|
125
|
+
limit: 1,
|
|
126
|
+
});
|
|
127
|
+
if (existing.length > 0) {
|
|
128
|
+
const nodeId = existing[0].id;
|
|
129
|
+
createdNodes.set(uri, nodeId);
|
|
130
|
+
return nodeId;
|
|
131
|
+
}
|
|
132
|
+
try {
|
|
133
|
+
const node = await store.createNode({
|
|
134
|
+
type: 'external',
|
|
135
|
+
title: `Session: ${session.id}`,
|
|
136
|
+
uri,
|
|
137
|
+
source: 'sessionlog',
|
|
138
|
+
metadata: {
|
|
139
|
+
entityType: 'session',
|
|
140
|
+
agent: session.agent,
|
|
141
|
+
phase: session.phase,
|
|
142
|
+
baseCommit: session.baseCommit,
|
|
143
|
+
branch: session.branch,
|
|
144
|
+
startedAt: session.startedAt,
|
|
145
|
+
tasks: session.tasks,
|
|
146
|
+
inPlanMode: session.inPlanMode,
|
|
147
|
+
planModeEntries: session.planModeEntries,
|
|
148
|
+
planEntries: session.planEntries,
|
|
149
|
+
},
|
|
150
|
+
});
|
|
151
|
+
const nodeId = node.id;
|
|
152
|
+
createdNodes.set(uri, nodeId);
|
|
153
|
+
flushManager.markDirty(nodeId);
|
|
154
|
+
flushManager.schedule();
|
|
155
|
+
return nodeId;
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
// Node may already exist from a concurrent operation — re-query
|
|
159
|
+
const retryExisting = await store.query.nodes({
|
|
160
|
+
type: 'external',
|
|
161
|
+
search: uri,
|
|
162
|
+
limit: 1,
|
|
163
|
+
});
|
|
164
|
+
if (retryExisting.length > 0) {
|
|
165
|
+
const nodeId = retryExisting[0].id;
|
|
166
|
+
createdNodes.set(uri, nodeId);
|
|
167
|
+
return nodeId;
|
|
168
|
+
}
|
|
169
|
+
// Fallback: use URI as ID (should not happen in practice)
|
|
170
|
+
createdNodes.set(uri, uri);
|
|
171
|
+
return uri;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Ensure an external node exists for a sessionlog checkpoint.
|
|
176
|
+
* Returns the node's actual graph ID (not the URI).
|
|
177
|
+
*/
|
|
178
|
+
async function ensureCheckpointNode(checkpointId, session) {
|
|
179
|
+
const uri = `sessionlog://checkpoint/${checkpointId}`;
|
|
180
|
+
const cachedId = createdNodes.get(uri);
|
|
181
|
+
if (cachedId)
|
|
182
|
+
return cachedId;
|
|
183
|
+
// Check if node already exists
|
|
184
|
+
const existing = await store.query.nodes({
|
|
185
|
+
type: 'external',
|
|
186
|
+
search: uri,
|
|
187
|
+
limit: 1,
|
|
188
|
+
});
|
|
189
|
+
if (existing.length > 0) {
|
|
190
|
+
const nodeId = existing[0].id;
|
|
191
|
+
createdNodes.set(uri, nodeId);
|
|
192
|
+
return nodeId;
|
|
193
|
+
}
|
|
194
|
+
try {
|
|
195
|
+
const node = await store.createNode({
|
|
196
|
+
type: 'external',
|
|
197
|
+
title: `Checkpoint: ${checkpointId}`,
|
|
198
|
+
uri,
|
|
199
|
+
source: 'sessionlog',
|
|
200
|
+
metadata: {
|
|
201
|
+
entityType: 'checkpoint',
|
|
202
|
+
sessionId: session.id,
|
|
203
|
+
},
|
|
204
|
+
});
|
|
205
|
+
const nodeId = node.id;
|
|
206
|
+
createdNodes.set(uri, nodeId);
|
|
207
|
+
flushManager.markDirty(nodeId);
|
|
208
|
+
flushManager.schedule();
|
|
209
|
+
return nodeId;
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
// Re-query in case of concurrent creation
|
|
213
|
+
const retryExisting = await store.query.nodes({
|
|
214
|
+
type: 'external',
|
|
215
|
+
search: uri,
|
|
216
|
+
limit: 1,
|
|
217
|
+
});
|
|
218
|
+
if (retryExisting.length > 0) {
|
|
219
|
+
const nodeId = retryExisting[0].id;
|
|
220
|
+
createdNodes.set(uri, nodeId);
|
|
221
|
+
return nodeId;
|
|
222
|
+
}
|
|
223
|
+
createdNodes.set(uri, uri);
|
|
224
|
+
return uri;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Create an edge if it doesn't already exist
|
|
229
|
+
*/
|
|
230
|
+
async function createEdgeIfNotExists(fromId, toId, type, metadata) {
|
|
231
|
+
// Check for existing edge
|
|
232
|
+
try {
|
|
233
|
+
const existingEdges = await store.query.edges({
|
|
234
|
+
from_id: fromId,
|
|
235
|
+
to_id: toId,
|
|
236
|
+
type,
|
|
237
|
+
});
|
|
238
|
+
if (existingEdges.length > 0) {
|
|
239
|
+
return existingEdges[0].id;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
catch {
|
|
243
|
+
// Continue to create
|
|
244
|
+
}
|
|
245
|
+
try {
|
|
246
|
+
const edge = await store.createEdge({
|
|
247
|
+
from_id: fromId,
|
|
248
|
+
to_id: toId,
|
|
249
|
+
type,
|
|
250
|
+
metadata: {
|
|
251
|
+
...metadata,
|
|
252
|
+
_context: {
|
|
253
|
+
source: 'sessionlog-auto-linker',
|
|
254
|
+
timestamp: new Date().toISOString(),
|
|
255
|
+
...metadata?._context,
|
|
256
|
+
},
|
|
257
|
+
},
|
|
258
|
+
});
|
|
259
|
+
flushManager.markDirty(fromId);
|
|
260
|
+
flushManager.markDirty(toId);
|
|
261
|
+
flushManager.schedule();
|
|
262
|
+
return edge.id;
|
|
263
|
+
}
|
|
264
|
+
catch {
|
|
265
|
+
return null;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return {
|
|
269
|
+
async handleSessionEvent(event) {
|
|
270
|
+
const { type, sessionId, session } = event;
|
|
271
|
+
switch (type) {
|
|
272
|
+
case 'started': {
|
|
273
|
+
// Create session node — returns the node's graph ID
|
|
274
|
+
const sessionNodeId = await ensureSessionNode(session);
|
|
275
|
+
// Correlate with tasks
|
|
276
|
+
const tasks = await findCorrelatedTasks(session);
|
|
277
|
+
const edgesCreated = [];
|
|
278
|
+
const matchedForResult = [];
|
|
279
|
+
for (const task of tasks) {
|
|
280
|
+
if (!meetsConfidenceThreshold(task.confidence, minConfidence))
|
|
281
|
+
continue;
|
|
282
|
+
matchedForResult.push(task);
|
|
283
|
+
const edgeId = await createEdgeIfNotExists(task.nodeId, sessionNodeId, 'worked-on', {
|
|
284
|
+
_context: {
|
|
285
|
+
correlation: task.matchReason,
|
|
286
|
+
confidence: task.confidence,
|
|
287
|
+
sessionAgent: session.agent,
|
|
288
|
+
},
|
|
289
|
+
});
|
|
290
|
+
if (edgeId)
|
|
291
|
+
edgesCreated.push(edgeId);
|
|
292
|
+
}
|
|
293
|
+
correlations.set(sessionId, {
|
|
294
|
+
sessionId,
|
|
295
|
+
matchedTasks: matchedForResult,
|
|
296
|
+
edgesCreated,
|
|
297
|
+
nodesCreated: [sessionNodeId],
|
|
298
|
+
strategy: matchedForResult[0]?.matchReason ?? 'none',
|
|
299
|
+
timestamp: new Date().toISOString(),
|
|
300
|
+
});
|
|
301
|
+
// Archive if configured
|
|
302
|
+
if (archiver) {
|
|
303
|
+
const sessionUri = `sessionlog://session/${session.id}`;
|
|
304
|
+
void archiver.onSessionEvent('started', sessionUri, store).catch(() => { });
|
|
305
|
+
}
|
|
306
|
+
break;
|
|
307
|
+
}
|
|
308
|
+
case 'checkpoint': {
|
|
309
|
+
if (!event.checkpointId)
|
|
310
|
+
break;
|
|
311
|
+
// Ensure session and checkpoint nodes exist — returns graph IDs
|
|
312
|
+
const sessionNodeId = await ensureSessionNode(session);
|
|
313
|
+
const checkpointNodeId = await ensureCheckpointNode(event.checkpointId, session);
|
|
314
|
+
const edgesCreated = [];
|
|
315
|
+
// Create contains edge (session → checkpoint)
|
|
316
|
+
const containsId = await createEdgeIfNotExists(sessionNodeId, checkpointNodeId, 'contains');
|
|
317
|
+
if (containsId)
|
|
318
|
+
edgesCreated.push(containsId);
|
|
319
|
+
// Create implemented-by edges (tasks → checkpoint)
|
|
320
|
+
const tasks = await findCorrelatedTasks(session);
|
|
321
|
+
const matchedForResult = [];
|
|
322
|
+
for (const task of tasks) {
|
|
323
|
+
if (!meetsConfidenceThreshold(task.confidence, minConfidence))
|
|
324
|
+
continue;
|
|
325
|
+
matchedForResult.push(task);
|
|
326
|
+
const edgeId = await createEdgeIfNotExists(task.nodeId, checkpointNodeId, 'implemented-by', {
|
|
327
|
+
_context: {
|
|
328
|
+
correlation: task.matchReason,
|
|
329
|
+
confidence: task.confidence,
|
|
330
|
+
checkpointId: event.checkpointId,
|
|
331
|
+
},
|
|
332
|
+
});
|
|
333
|
+
if (edgeId)
|
|
334
|
+
edgesCreated.push(edgeId);
|
|
335
|
+
}
|
|
336
|
+
// Update existing correlation record
|
|
337
|
+
const existing = correlations.get(sessionId);
|
|
338
|
+
if (existing) {
|
|
339
|
+
existing.edgesCreated.push(...edgesCreated);
|
|
340
|
+
existing.nodesCreated.push(checkpointNodeId);
|
|
341
|
+
}
|
|
342
|
+
// Archive checkpoint if configured
|
|
343
|
+
if (archiver) {
|
|
344
|
+
const sessionUri = `sessionlog://session/${session.id}`;
|
|
345
|
+
void archiver.onSessionEvent('checkpoint', sessionUri, store).catch(() => { });
|
|
346
|
+
}
|
|
347
|
+
break;
|
|
348
|
+
}
|
|
349
|
+
case 'ended': {
|
|
350
|
+
// Ensure node exists (may be first event if daemon started after session)
|
|
351
|
+
// then update it with final status
|
|
352
|
+
try {
|
|
353
|
+
const sessionNodeId = await ensureSessionNode(session);
|
|
354
|
+
// Pull skill usage from the tracker registry (if available)
|
|
355
|
+
const updateMetadata = {
|
|
356
|
+
phase: 'ENDED',
|
|
357
|
+
endedAt: session.endedAt,
|
|
358
|
+
tasks: session.tasks,
|
|
359
|
+
planModeEntries: session.planModeEntries,
|
|
360
|
+
planEntries: session.planEntries,
|
|
361
|
+
};
|
|
362
|
+
if (skillTrackerRegistry) {
|
|
363
|
+
// Finalize the tracker: remove it and get the final summary
|
|
364
|
+
const skillSummary = skillTrackerRegistry.remove(sessionId);
|
|
365
|
+
if (skillSummary && skillSummary.totalInvocations > 0) {
|
|
366
|
+
// Build the compact skillsUsed structure for the session node
|
|
367
|
+
const counts = {};
|
|
368
|
+
const outcomes = {};
|
|
369
|
+
for (const stat of skillSummary.stats) {
|
|
370
|
+
counts[stat.skill] = stat.count;
|
|
371
|
+
outcomes[stat.skill] = {
|
|
372
|
+
success: stat.successCount,
|
|
373
|
+
failure: stat.failureCount,
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
updateMetadata.skillsUsed = {
|
|
377
|
+
skills: skillSummary.skillsUsed,
|
|
378
|
+
totalInvocations: skillSummary.totalInvocations,
|
|
379
|
+
counts,
|
|
380
|
+
outcomes,
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
await store.updateNode(sessionNodeId, {
|
|
385
|
+
status: 'closed',
|
|
386
|
+
metadata: updateMetadata,
|
|
387
|
+
});
|
|
388
|
+
flushManager.markDirty(sessionNodeId);
|
|
389
|
+
flushManager.schedule();
|
|
390
|
+
// Archive final session state if configured
|
|
391
|
+
if (archiver) {
|
|
392
|
+
const sessionUri = `sessionlog://session/${sessionId}`;
|
|
393
|
+
void archiver.onSessionEvent('ended', sessionUri, store).catch(() => { });
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
catch {
|
|
397
|
+
// Best-effort update
|
|
398
|
+
}
|
|
399
|
+
break;
|
|
400
|
+
}
|
|
401
|
+
case 'updated': {
|
|
402
|
+
// Update session node metadata if it exists
|
|
403
|
+
try {
|
|
404
|
+
const nodes = await store.query.nodes({
|
|
405
|
+
type: 'external',
|
|
406
|
+
search: `sessionlog://session/${sessionId}`,
|
|
407
|
+
limit: 1,
|
|
408
|
+
});
|
|
409
|
+
if (nodes.length > 0) {
|
|
410
|
+
await store.updateNode(nodes[0].id, {
|
|
411
|
+
metadata: {
|
|
412
|
+
phase: session.phase,
|
|
413
|
+
lastPromptAt: session.lastPromptAt,
|
|
414
|
+
tasks: session.tasks,
|
|
415
|
+
inPlanMode: session.inPlanMode,
|
|
416
|
+
planModeEntries: session.planModeEntries,
|
|
417
|
+
planEntries: session.planEntries,
|
|
418
|
+
},
|
|
419
|
+
});
|
|
420
|
+
flushManager.markDirty(nodes[0].id);
|
|
421
|
+
flushManager.schedule();
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
catch {
|
|
425
|
+
// Best-effort update
|
|
426
|
+
}
|
|
427
|
+
break;
|
|
428
|
+
}
|
|
429
|
+
case 'deleted': {
|
|
430
|
+
// Preserve history — don't delete nodes or edges
|
|
431
|
+
break;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
},
|
|
435
|
+
async correlate(sessionId, session) {
|
|
436
|
+
// Create session node
|
|
437
|
+
const sessionNodeId = await ensureSessionNode(session);
|
|
438
|
+
// Correlate with tasks
|
|
439
|
+
const tasks = await findCorrelatedTasks(session);
|
|
440
|
+
const edgesCreated = [];
|
|
441
|
+
const matchedForResult = [];
|
|
442
|
+
for (const task of tasks) {
|
|
443
|
+
if (!meetsConfidenceThreshold(task.confidence, minConfidence))
|
|
444
|
+
continue;
|
|
445
|
+
matchedForResult.push(task);
|
|
446
|
+
const edgeId = await createEdgeIfNotExists(task.nodeId, sessionNodeId, 'worked-on', {
|
|
447
|
+
_context: {
|
|
448
|
+
correlation: task.matchReason,
|
|
449
|
+
confidence: task.confidence,
|
|
450
|
+
sessionAgent: session.agent,
|
|
451
|
+
},
|
|
452
|
+
});
|
|
453
|
+
if (edgeId)
|
|
454
|
+
edgesCreated.push(edgeId);
|
|
455
|
+
}
|
|
456
|
+
const result = {
|
|
457
|
+
sessionId,
|
|
458
|
+
matchedTasks: matchedForResult,
|
|
459
|
+
edgesCreated,
|
|
460
|
+
nodesCreated: [sessionNodeId],
|
|
461
|
+
strategy: matchedForResult[0]?.matchReason ?? 'none',
|
|
462
|
+
timestamp: new Date().toISOString(),
|
|
463
|
+
};
|
|
464
|
+
correlations.set(sessionId, result);
|
|
465
|
+
return result;
|
|
466
|
+
},
|
|
467
|
+
getCorrelations() {
|
|
468
|
+
return new Map(correlations);
|
|
469
|
+
},
|
|
470
|
+
};
|
|
471
|
+
}
|
|
472
|
+
//# sourceMappingURL=sessionlog-linker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionlog-linker.js","sourceRoot":"","sources":["../../src/daemon/sessionlog-linker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sessionlog Session Watcher
|
|
3
|
+
*
|
|
4
|
+
* Watches .git/sessionlog-sessions/ for session state changes and emits
|
|
5
|
+
* structured events. Used by the auto-linker to correlate sessions
|
|
6
|
+
* with OpenTasks tasks.
|
|
7
|
+
*/
|
|
8
|
+
import type { TrackedTask, PlanEntry, TrackedSkill } from 'sessionlog';
|
|
9
|
+
/**
|
|
10
|
+
* Sessionlog session state from a session file
|
|
11
|
+
*/
|
|
12
|
+
export interface SessionlogSessionState {
|
|
13
|
+
id: string;
|
|
14
|
+
agent: string;
|
|
15
|
+
phase: 'ACTIVE' | 'IDLE' | 'ENDED';
|
|
16
|
+
baseCommit?: string;
|
|
17
|
+
branch?: string;
|
|
18
|
+
startedAt?: string;
|
|
19
|
+
endedAt?: string;
|
|
20
|
+
checkpoints: string[];
|
|
21
|
+
lastPromptAt?: string;
|
|
22
|
+
/** Tracked tasks during the session (from sessionlog real-time hooks) */
|
|
23
|
+
tasks?: Record<string, TrackedTask>;
|
|
24
|
+
/** Whether the session is currently in plan mode */
|
|
25
|
+
inPlanMode?: boolean;
|
|
26
|
+
/** Number of times plan mode was entered */
|
|
27
|
+
planModeEntries?: number;
|
|
28
|
+
/** All plan mode enter/exit cycles */
|
|
29
|
+
planEntries?: PlanEntry[];
|
|
30
|
+
/** Skills used during the session */
|
|
31
|
+
skillsUsed?: TrackedSkill[];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Event emitted when a session changes
|
|
35
|
+
*/
|
|
36
|
+
export interface SessionlogSessionEvent {
|
|
37
|
+
type: 'started' | 'updated' | 'checkpoint' | 'ended' | 'deleted';
|
|
38
|
+
sessionId: string;
|
|
39
|
+
session: SessionlogSessionState;
|
|
40
|
+
previousPhase?: string;
|
|
41
|
+
checkpointId?: string;
|
|
42
|
+
timestamp: string;
|
|
43
|
+
}
|
|
44
|
+
export type SessionEventHandler = (event: SessionlogSessionEvent) => void;
|
|
45
|
+
/**
|
|
46
|
+
* Configuration for the sessionlog watcher
|
|
47
|
+
*/
|
|
48
|
+
export interface SessionlogWatcherConfig {
|
|
49
|
+
/** Path to .opentasks/ directory (used to resolve .git) */
|
|
50
|
+
locationPath: string;
|
|
51
|
+
/** Override the git directory path (for testing) */
|
|
52
|
+
gitDir?: string;
|
|
53
|
+
/** Debounce delay in milliseconds (default: 200) */
|
|
54
|
+
debounceMs?: number;
|
|
55
|
+
/** Use polling instead of native fs events (useful for containers/tests) */
|
|
56
|
+
usePolling?: boolean;
|
|
57
|
+
/** Session directory name under .git/ (default: 'sessionlog-sessions') */
|
|
58
|
+
sessionDirName?: string;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Sessionlog session watcher interface
|
|
62
|
+
*/
|
|
63
|
+
export interface SessionlogWatcher {
|
|
64
|
+
/** Start watching for session changes */
|
|
65
|
+
start(): Promise<void>;
|
|
66
|
+
/** Stop watching */
|
|
67
|
+
stop(): Promise<void>;
|
|
68
|
+
/** Register event handler */
|
|
69
|
+
onSessionEvent(handler: SessionEventHandler): void;
|
|
70
|
+
/** Check if watching */
|
|
71
|
+
readonly isWatching: boolean;
|
|
72
|
+
/** Get the resolved sessions directory path */
|
|
73
|
+
readonly sessionsDir: string;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Create an Sessionlog session watcher
|
|
77
|
+
*/
|
|
78
|
+
export declare function createSessionlogWatcher(config: SessionlogWatcherConfig): SessionlogWatcher;
|
|
79
|
+
//# sourceMappingURL=sessionlog-watcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionlog-watcher.d.ts","sourceRoot":"","sources":["../../src/daemon/sessionlog-watcher.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAMvE;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACpC,oDAAoD;IACpD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4CAA4C;IAC5C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sCAAsC;IACtC,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC;IAC1B,qCAAqC;IACrC,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,CAAC;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,sBAAsB,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,2DAA2D;IAC3D,YAAY,EAAE,MAAM,CAAC;IAErB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,4EAA4E;IAC5E,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,0EAA0E;IAC1E,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB,oBAAoB;IACpB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB,6BAA6B;IAC7B,cAAc,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAEnD,wBAAwB;IACxB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAE7B,+CAA+C;IAC/C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAyFD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,uBAAuB,GAAG,iBAAiB,CAuO1F"}
|