opentasks 0.0.6 → 0.0.8
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 +68 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +64 -0
- 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 +178 -4
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +109 -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 +5 -0
- package/dist/core/merge-driver.d.ts.map +1 -1
- package/dist/core/merge-driver.js +35 -0
- package/dist/core/merge-driver.js.map +1 -1
- package/dist/daemon/entire-linker.d.ts.map +1 -1
- package/dist/daemon/entire-linker.js +42 -48
- package/dist/daemon/entire-linker.js.map +1 -1
- package/dist/daemon/entire-watcher.d.ts +0 -11
- package/dist/daemon/entire-watcher.d.ts.map +1 -1
- package/dist/daemon/entire-watcher.js +1 -32
- package/dist/daemon/entire-watcher.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 +8 -1
- package/dist/daemon/ipc.js.map +1 -1
- package/dist/daemon/lifecycle.d.ts.map +1 -1
- package/dist/daemon/lifecycle.js +138 -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/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 +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -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/entire.d.ts +0 -10
- package/dist/providers/entire.d.ts.map +1 -1
- package/dist/providers/entire.js +0 -13
- package/dist/providers/entire.js.map +1 -1
- package/dist/providers/from-config.d.ts.map +1 -1
- package/dist/providers/from-config.js +35 -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 +7 -4
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +6 -3
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/map-connector.d.ts +87 -0
- package/dist/providers/map-connector.d.ts.map +1 -0
- package/dist/providers/map-connector.js +159 -0
- package/dist/providers/map-connector.js.map +1 -0
- package/dist/providers/map.d.ts.map +1 -1
- package/dist/providers/map.js +5 -0
- package/dist/providers/map.js.map +1 -1
- 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.map +1 -0
- package/dist/sessionlog/agent/agents/claude-code.js.map +1 -0
- package/dist/sessionlog/agent/agents/cursor.d.ts.map +1 -0
- package/dist/sessionlog/agent/agents/cursor.js.map +1 -0
- package/dist/sessionlog/agent/agents/gemini-cli.d.ts.map +1 -0
- package/dist/sessionlog/agent/agents/gemini-cli.js.map +1 -0
- package/dist/sessionlog/agent/agents/opencode.d.ts.map +1 -0
- package/dist/sessionlog/agent/agents/opencode.js.map +1 -0
- package/dist/sessionlog/agent/registry.d.ts.map +1 -0
- package/dist/sessionlog/agent/registry.js.map +1 -0
- package/dist/sessionlog/agent/session-types.d.ts.map +1 -0
- package/dist/sessionlog/agent/session-types.js.map +1 -0
- package/dist/sessionlog/agent/types.d.ts.map +1 -0
- package/dist/sessionlog/agent/types.js.map +1 -0
- package/dist/{entire → sessionlog}/commands/clean.d.ts +11 -1
- package/dist/sessionlog/commands/clean.d.ts.map +1 -0
- package/dist/{entire → sessionlog}/commands/clean.js +12 -6
- package/dist/sessionlog/commands/clean.js.map +1 -0
- package/dist/sessionlog/commands/disable.d.ts.map +1 -0
- package/dist/sessionlog/commands/disable.js.map +1 -0
- package/dist/sessionlog/commands/doctor.d.ts.map +1 -0
- package/dist/sessionlog/commands/doctor.js.map +1 -0
- package/dist/{entire → sessionlog}/commands/enable.d.ts +2 -0
- package/dist/sessionlog/commands/enable.d.ts.map +1 -0
- package/dist/{entire → sessionlog}/commands/enable.js +4 -4
- package/dist/sessionlog/commands/enable.js.map +1 -0
- package/dist/{entire → sessionlog}/commands/explain.d.ts +1 -0
- package/dist/sessionlog/commands/explain.d.ts.map +1 -0
- package/dist/{entire → sessionlog}/commands/explain.js +6 -3
- package/dist/sessionlog/commands/explain.js.map +1 -0
- package/dist/sessionlog/commands/reset.d.ts.map +1 -0
- package/dist/sessionlog/commands/reset.js.map +1 -0
- package/dist/sessionlog/commands/resume.d.ts.map +1 -0
- package/dist/sessionlog/commands/resume.js.map +1 -0
- package/dist/{entire → sessionlog}/commands/rewind.d.ts +6 -0
- package/dist/sessionlog/commands/rewind.d.ts.map +1 -0
- package/dist/{entire → sessionlog}/commands/rewind.js +1 -1
- package/dist/sessionlog/commands/rewind.js.map +1 -0
- package/dist/{entire → sessionlog}/commands/status.d.ts +6 -3
- package/dist/sessionlog/commands/status.d.ts.map +1 -0
- package/dist/{entire → sessionlog}/commands/status.js +4 -3
- package/dist/sessionlog/commands/status.js.map +1 -0
- package/dist/{entire → sessionlog}/config.d.ts +6 -6
- package/dist/sessionlog/config.d.ts.map +1 -0
- package/dist/{entire → sessionlog}/config.js +4 -4
- package/dist/sessionlog/config.js.map +1 -0
- package/dist/{entire → sessionlog}/git-operations.d.ts +5 -2
- package/dist/sessionlog/git-operations.d.ts.map +1 -0
- package/dist/{entire → sessionlog}/git-operations.js +9 -5
- package/dist/sessionlog/git-operations.js.map +1 -0
- package/dist/sessionlog/hooks/git-hooks.d.ts.map +1 -0
- package/dist/sessionlog/hooks/git-hooks.js.map +1 -0
- package/dist/sessionlog/hooks/lifecycle.d.ts.map +1 -0
- package/dist/sessionlog/hooks/lifecycle.js.map +1 -0
- package/dist/{entire → sessionlog}/index.d.ts +5 -5
- package/dist/sessionlog/index.d.ts.map +1 -0
- package/dist/{entire → sessionlog}/index.js +4 -2
- package/dist/sessionlog/index.js.map +1 -0
- package/dist/sessionlog/security/redaction.d.ts.map +1 -0
- package/dist/sessionlog/security/redaction.js.map +1 -0
- package/dist/sessionlog/session/state-machine.d.ts.map +1 -0
- package/dist/sessionlog/session/state-machine.js.map +1 -0
- package/dist/{entire → sessionlog}/store/checkpoint-store.d.ts +1 -1
- package/dist/sessionlog/store/checkpoint-store.d.ts.map +1 -0
- package/dist/{entire → sessionlog}/store/checkpoint-store.js +27 -25
- 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/{entire → sessionlog}/store/native-store.js +10 -7
- package/dist/sessionlog/store/native-store.js.map +1 -0
- package/dist/{entire → sessionlog}/store/provider-types.d.ts +10 -10
- package/dist/sessionlog/store/provider-types.d.ts.map +1 -0
- package/dist/sessionlog/store/provider-types.js.map +1 -0
- package/dist/{entire → sessionlog}/store/session-store.d.ts +1 -1
- package/dist/sessionlog/store/session-store.d.ts.map +1 -0
- package/dist/{entire → sessionlog}/store/session-store.js +2 -2
- package/dist/sessionlog/store/session-store.js.map +1 -0
- package/dist/sessionlog/strategy/attribution.d.ts.map +1 -0
- package/dist/sessionlog/strategy/attribution.js.map +1 -0
- package/dist/{entire → sessionlog}/strategy/common.d.ts +8 -5
- package/dist/sessionlog/strategy/common.d.ts.map +1 -0
- package/dist/{entire → sessionlog}/strategy/common.js +16 -10
- package/dist/sessionlog/strategy/common.js.map +1 -0
- package/dist/sessionlog/strategy/content-overlap.d.ts.map +1 -0
- package/dist/sessionlog/strategy/content-overlap.js.map +1 -0
- package/dist/{entire → sessionlog}/strategy/manual-commit.d.ts +6 -2
- package/dist/sessionlog/strategy/manual-commit.d.ts.map +1 -0
- package/dist/{entire → sessionlog}/strategy/manual-commit.js +9 -7
- package/dist/sessionlog/strategy/manual-commit.js.map +1 -0
- package/dist/sessionlog/strategy/types.d.ts.map +1 -0
- package/dist/sessionlog/strategy/types.js.map +1 -0
- package/dist/sessionlog/summarize/claude-generator.d.ts.map +1 -0
- package/dist/sessionlog/summarize/claude-generator.js.map +1 -0
- package/dist/sessionlog/summarize/summarize.d.ts.map +1 -0
- package/dist/sessionlog/summarize/summarize.js.map +1 -0
- package/dist/{entire → sessionlog}/types.d.ts +20 -10
- package/dist/sessionlog/types.d.ts.map +1 -0
- package/dist/{entire → sessionlog}/types.js +18 -8
- package/dist/sessionlog/types.js.map +1 -0
- package/dist/sessionlog/utils/chunk-files.d.ts.map +1 -0
- package/dist/sessionlog/utils/chunk-files.js.map +1 -0
- package/dist/sessionlog/utils/commit-message.d.ts.map +1 -0
- package/dist/sessionlog/utils/commit-message.js.map +1 -0
- package/dist/sessionlog/utils/detect-agent.d.ts.map +1 -0
- package/dist/sessionlog/utils/detect-agent.js.map +1 -0
- package/dist/sessionlog/utils/hook-managers.d.ts.map +1 -0
- package/dist/sessionlog/utils/hook-managers.js.map +1 -0
- package/dist/sessionlog/utils/ide-tags.d.ts.map +1 -0
- package/dist/sessionlog/utils/ide-tags.js.map +1 -0
- package/dist/{entire → sessionlog}/utils/paths.d.ts +3 -3
- package/dist/sessionlog/utils/paths.d.ts.map +1 -0
- package/dist/{entire → sessionlog}/utils/paths.js +5 -5
- package/dist/sessionlog/utils/paths.js.map +1 -0
- package/dist/sessionlog/utils/preview-rewind.d.ts.map +1 -0
- package/dist/sessionlog/utils/preview-rewind.js.map +1 -0
- package/dist/sessionlog/utils/rewind-conflict.d.ts.map +1 -0
- package/dist/sessionlog/utils/rewind-conflict.js.map +1 -0
- package/dist/{entire → sessionlog}/utils/shadow-branch.d.ts +15 -6
- package/dist/sessionlog/utils/shadow-branch.d.ts.map +1 -0
- package/dist/{entire → sessionlog}/utils/shadow-branch.js +20 -16
- package/dist/sessionlog/utils/shadow-branch.js.map +1 -0
- package/dist/sessionlog/utils/string-utils.d.ts.map +1 -0
- package/dist/sessionlog/utils/string-utils.js.map +1 -0
- package/dist/sessionlog/utils/todo-extract.d.ts.map +1 -0
- package/dist/sessionlog/utils/todo-extract.js.map +1 -0
- package/dist/{entire → sessionlog}/utils/trailers.d.ts +9 -9
- package/dist/sessionlog/utils/trailers.d.ts.map +1 -0
- package/dist/{entire → sessionlog}/utils/trailers.js +9 -9
- package/dist/sessionlog/utils/trailers.js.map +1 -0
- package/dist/sessionlog/utils/transcript-parse.d.ts.map +1 -0
- package/dist/sessionlog/utils/transcript-parse.js.map +1 -0
- package/dist/sessionlog/utils/transcript-timestamp.d.ts.map +1 -0
- package/dist/sessionlog/utils/transcript-timestamp.js.map +1 -0
- package/dist/sessionlog/utils/tree-ops.d.ts.map +1 -0
- package/dist/sessionlog/utils/tree-ops.js.map +1 -0
- package/dist/{entire → sessionlog}/utils/tty.d.ts +1 -1
- package/dist/sessionlog/utils/tty.d.ts.map +1 -0
- package/dist/{entire → sessionlog}/utils/tty.js +2 -2
- package/dist/sessionlog/utils/tty.js.map +1 -0
- package/dist/sessionlog/utils/validation.d.ts.map +1 -0
- package/dist/sessionlog/utils/validation.js.map +1 -0
- package/dist/sessionlog/utils/worktree.d.ts.map +1 -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/claude-task-reconstructor.d.ts +41 -0
- package/dist/tracking/claude-task-reconstructor.d.ts.map +1 -0
- package/dist/tracking/claude-task-reconstructor.js +91 -0
- package/dist/tracking/claude-task-reconstructor.js.map +1 -0
- package/dist/tracking/plan-mode-tracker.d.ts +20 -0
- package/dist/tracking/plan-mode-tracker.d.ts.map +1 -0
- package/dist/tracking/plan-mode-tracker.js +35 -0
- package/dist/tracking/plan-mode-tracker.js.map +1 -0
- 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
- package/dist/entire/agent/agents/claude-code.d.ts.map +0 -1
- package/dist/entire/agent/agents/claude-code.js.map +0 -1
- package/dist/entire/agent/agents/cursor.d.ts.map +0 -1
- package/dist/entire/agent/agents/cursor.js.map +0 -1
- package/dist/entire/agent/agents/gemini-cli.d.ts.map +0 -1
- package/dist/entire/agent/agents/gemini-cli.js.map +0 -1
- package/dist/entire/agent/agents/opencode.d.ts.map +0 -1
- package/dist/entire/agent/agents/opencode.js.map +0 -1
- package/dist/entire/agent/registry.d.ts.map +0 -1
- package/dist/entire/agent/registry.js.map +0 -1
- package/dist/entire/agent/session-types.d.ts.map +0 -1
- package/dist/entire/agent/session-types.js.map +0 -1
- package/dist/entire/agent/types.d.ts.map +0 -1
- package/dist/entire/agent/types.js.map +0 -1
- package/dist/entire/commands/clean.d.ts.map +0 -1
- package/dist/entire/commands/clean.js.map +0 -1
- package/dist/entire/commands/disable.d.ts.map +0 -1
- package/dist/entire/commands/disable.js.map +0 -1
- package/dist/entire/commands/doctor.d.ts.map +0 -1
- package/dist/entire/commands/doctor.js.map +0 -1
- package/dist/entire/commands/enable.d.ts.map +0 -1
- package/dist/entire/commands/enable.js.map +0 -1
- package/dist/entire/commands/explain.d.ts.map +0 -1
- package/dist/entire/commands/explain.js.map +0 -1
- package/dist/entire/commands/reset.d.ts.map +0 -1
- package/dist/entire/commands/reset.js.map +0 -1
- package/dist/entire/commands/resume.d.ts.map +0 -1
- package/dist/entire/commands/resume.js.map +0 -1
- package/dist/entire/commands/rewind.d.ts.map +0 -1
- package/dist/entire/commands/rewind.js.map +0 -1
- package/dist/entire/commands/status.d.ts.map +0 -1
- package/dist/entire/commands/status.js.map +0 -1
- package/dist/entire/config.d.ts.map +0 -1
- package/dist/entire/config.js.map +0 -1
- package/dist/entire/git-operations.d.ts.map +0 -1
- package/dist/entire/git-operations.js.map +0 -1
- package/dist/entire/hooks/git-hooks.d.ts.map +0 -1
- package/dist/entire/hooks/git-hooks.js.map +0 -1
- package/dist/entire/hooks/lifecycle.d.ts.map +0 -1
- package/dist/entire/hooks/lifecycle.js.map +0 -1
- package/dist/entire/index.d.ts.map +0 -1
- package/dist/entire/index.js.map +0 -1
- package/dist/entire/security/redaction.d.ts.map +0 -1
- package/dist/entire/security/redaction.js.map +0 -1
- package/dist/entire/session/state-machine.d.ts.map +0 -1
- package/dist/entire/session/state-machine.js.map +0 -1
- package/dist/entire/store/checkpoint-store.d.ts.map +0 -1
- package/dist/entire/store/checkpoint-store.js.map +0 -1
- package/dist/entire/store/native-store.d.ts +0 -14
- package/dist/entire/store/native-store.d.ts.map +0 -1
- package/dist/entire/store/native-store.js.map +0 -1
- package/dist/entire/store/provider-types.d.ts.map +0 -1
- package/dist/entire/store/provider-types.js.map +0 -1
- package/dist/entire/store/session-store.d.ts.map +0 -1
- package/dist/entire/store/session-store.js.map +0 -1
- package/dist/entire/strategy/attribution.d.ts.map +0 -1
- package/dist/entire/strategy/attribution.js.map +0 -1
- package/dist/entire/strategy/common.d.ts.map +0 -1
- package/dist/entire/strategy/common.js.map +0 -1
- package/dist/entire/strategy/content-overlap.d.ts.map +0 -1
- package/dist/entire/strategy/content-overlap.js.map +0 -1
- package/dist/entire/strategy/manual-commit.d.ts.map +0 -1
- package/dist/entire/strategy/manual-commit.js.map +0 -1
- package/dist/entire/strategy/types.d.ts.map +0 -1
- package/dist/entire/strategy/types.js.map +0 -1
- package/dist/entire/summarize/claude-generator.d.ts.map +0 -1
- package/dist/entire/summarize/claude-generator.js.map +0 -1
- package/dist/entire/summarize/summarize.d.ts.map +0 -1
- package/dist/entire/summarize/summarize.js.map +0 -1
- package/dist/entire/types.d.ts.map +0 -1
- package/dist/entire/types.js.map +0 -1
- package/dist/entire/utils/chunk-files.d.ts.map +0 -1
- package/dist/entire/utils/chunk-files.js.map +0 -1
- package/dist/entire/utils/commit-message.d.ts.map +0 -1
- package/dist/entire/utils/commit-message.js.map +0 -1
- package/dist/entire/utils/detect-agent.d.ts.map +0 -1
- package/dist/entire/utils/detect-agent.js.map +0 -1
- package/dist/entire/utils/hook-managers.d.ts.map +0 -1
- package/dist/entire/utils/hook-managers.js.map +0 -1
- package/dist/entire/utils/ide-tags.d.ts.map +0 -1
- package/dist/entire/utils/ide-tags.js.map +0 -1
- package/dist/entire/utils/paths.d.ts.map +0 -1
- package/dist/entire/utils/paths.js.map +0 -1
- package/dist/entire/utils/preview-rewind.d.ts.map +0 -1
- package/dist/entire/utils/preview-rewind.js.map +0 -1
- package/dist/entire/utils/rewind-conflict.d.ts.map +0 -1
- package/dist/entire/utils/rewind-conflict.js.map +0 -1
- package/dist/entire/utils/shadow-branch.d.ts.map +0 -1
- package/dist/entire/utils/shadow-branch.js.map +0 -1
- package/dist/entire/utils/string-utils.d.ts.map +0 -1
- package/dist/entire/utils/string-utils.js.map +0 -1
- package/dist/entire/utils/todo-extract.d.ts.map +0 -1
- package/dist/entire/utils/todo-extract.js.map +0 -1
- package/dist/entire/utils/trailers.d.ts.map +0 -1
- package/dist/entire/utils/trailers.js.map +0 -1
- package/dist/entire/utils/transcript-parse.d.ts.map +0 -1
- package/dist/entire/utils/transcript-parse.js.map +0 -1
- package/dist/entire/utils/transcript-timestamp.d.ts.map +0 -1
- package/dist/entire/utils/transcript-timestamp.js.map +0 -1
- package/dist/entire/utils/tree-ops.d.ts.map +0 -1
- package/dist/entire/utils/tree-ops.js.map +0 -1
- package/dist/entire/utils/tty.d.ts.map +0 -1
- package/dist/entire/utils/tty.js.map +0 -1
- package/dist/entire/utils/validation.d.ts.map +0 -1
- package/dist/entire/utils/validation.js.map +0 -1
- package/dist/entire/utils/worktree.d.ts.map +0 -1
- package/dist/entire/utils/worktree.js.map +0 -1
- /package/dist/{entire → sessionlog}/agent/agents/claude-code.d.ts +0 -0
- /package/dist/{entire → sessionlog}/agent/agents/claude-code.js +0 -0
- /package/dist/{entire → sessionlog}/agent/agents/cursor.d.ts +0 -0
- /package/dist/{entire → sessionlog}/agent/agents/cursor.js +0 -0
- /package/dist/{entire → sessionlog}/agent/agents/gemini-cli.d.ts +0 -0
- /package/dist/{entire → sessionlog}/agent/agents/gemini-cli.js +0 -0
- /package/dist/{entire → sessionlog}/agent/agents/opencode.d.ts +0 -0
- /package/dist/{entire → sessionlog}/agent/agents/opencode.js +0 -0
- /package/dist/{entire → sessionlog}/agent/registry.d.ts +0 -0
- /package/dist/{entire → sessionlog}/agent/registry.js +0 -0
- /package/dist/{entire → sessionlog}/agent/session-types.d.ts +0 -0
- /package/dist/{entire → sessionlog}/agent/session-types.js +0 -0
- /package/dist/{entire → sessionlog}/agent/types.d.ts +0 -0
- /package/dist/{entire → sessionlog}/agent/types.js +0 -0
- /package/dist/{entire → sessionlog}/commands/disable.d.ts +0 -0
- /package/dist/{entire → sessionlog}/commands/disable.js +0 -0
- /package/dist/{entire → sessionlog}/commands/doctor.d.ts +0 -0
- /package/dist/{entire → sessionlog}/commands/doctor.js +0 -0
- /package/dist/{entire → sessionlog}/commands/reset.d.ts +0 -0
- /package/dist/{entire → sessionlog}/commands/reset.js +0 -0
- /package/dist/{entire → sessionlog}/commands/resume.d.ts +0 -0
- /package/dist/{entire → sessionlog}/commands/resume.js +0 -0
- /package/dist/{entire → sessionlog}/hooks/git-hooks.d.ts +0 -0
- /package/dist/{entire → sessionlog}/hooks/git-hooks.js +0 -0
- /package/dist/{entire → sessionlog}/hooks/lifecycle.d.ts +0 -0
- /package/dist/{entire → sessionlog}/hooks/lifecycle.js +0 -0
- /package/dist/{entire → sessionlog}/security/redaction.d.ts +0 -0
- /package/dist/{entire → sessionlog}/security/redaction.js +0 -0
- /package/dist/{entire → sessionlog}/session/state-machine.d.ts +0 -0
- /package/dist/{entire → sessionlog}/session/state-machine.js +0 -0
- /package/dist/{entire → sessionlog}/store/provider-types.js +0 -0
- /package/dist/{entire → sessionlog}/strategy/attribution.d.ts +0 -0
- /package/dist/{entire → sessionlog}/strategy/attribution.js +0 -0
- /package/dist/{entire → sessionlog}/strategy/content-overlap.d.ts +0 -0
- /package/dist/{entire → sessionlog}/strategy/content-overlap.js +0 -0
- /package/dist/{entire → sessionlog}/strategy/types.d.ts +0 -0
- /package/dist/{entire → sessionlog}/strategy/types.js +0 -0
- /package/dist/{entire → sessionlog}/summarize/claude-generator.d.ts +0 -0
- /package/dist/{entire → sessionlog}/summarize/claude-generator.js +0 -0
- /package/dist/{entire → sessionlog}/summarize/summarize.d.ts +0 -0
- /package/dist/{entire → sessionlog}/summarize/summarize.js +0 -0
- /package/dist/{entire → sessionlog}/utils/chunk-files.d.ts +0 -0
- /package/dist/{entire → sessionlog}/utils/chunk-files.js +0 -0
- /package/dist/{entire → sessionlog}/utils/commit-message.d.ts +0 -0
- /package/dist/{entire → sessionlog}/utils/commit-message.js +0 -0
- /package/dist/{entire → sessionlog}/utils/detect-agent.d.ts +0 -0
- /package/dist/{entire → sessionlog}/utils/detect-agent.js +0 -0
- /package/dist/{entire → sessionlog}/utils/hook-managers.d.ts +0 -0
- /package/dist/{entire → sessionlog}/utils/hook-managers.js +0 -0
- /package/dist/{entire → sessionlog}/utils/ide-tags.d.ts +0 -0
- /package/dist/{entire → sessionlog}/utils/ide-tags.js +0 -0
- /package/dist/{entire → sessionlog}/utils/preview-rewind.d.ts +0 -0
- /package/dist/{entire → sessionlog}/utils/preview-rewind.js +0 -0
- /package/dist/{entire → sessionlog}/utils/rewind-conflict.d.ts +0 -0
- /package/dist/{entire → sessionlog}/utils/rewind-conflict.js +0 -0
- /package/dist/{entire → sessionlog}/utils/string-utils.d.ts +0 -0
- /package/dist/{entire → sessionlog}/utils/string-utils.js +0 -0
- /package/dist/{entire → sessionlog}/utils/todo-extract.d.ts +0 -0
- /package/dist/{entire → sessionlog}/utils/todo-extract.js +0 -0
- /package/dist/{entire → sessionlog}/utils/transcript-parse.d.ts +0 -0
- /package/dist/{entire → sessionlog}/utils/transcript-parse.js +0 -0
- /package/dist/{entire → sessionlog}/utils/transcript-timestamp.d.ts +0 -0
- /package/dist/{entire → sessionlog}/utils/transcript-timestamp.js +0 -0
- /package/dist/{entire → sessionlog}/utils/tree-ops.d.ts +0 -0
- /package/dist/{entire → sessionlog}/utils/tree-ops.js +0 -0
- /package/dist/{entire → sessionlog}/utils/validation.d.ts +0 -0
- /package/dist/{entire → sessionlog}/utils/validation.js +0 -0
- /package/dist/{entire → sessionlog}/utils/worktree.d.ts +0 -0
- /package/dist/{entire → sessionlog}/utils/worktree.js +0 -0
|
@@ -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"}
|