@greppleai/grip 0.0.0-stage → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +115 -0
- package/README.md +731 -2
- package/dist/bun/cli.d.ts +3 -0
- package/dist/bun/cli.d.ts.map +1 -0
- package/dist/bun/cli.js +13 -0
- package/dist/bun/cli.js.map +1 -0
- package/dist/bun/embedded-assets.d.ts +3 -0
- package/dist/bun/embedded-assets.d.ts.map +1 -0
- package/dist/bun/embedded-assets.js +52 -0
- package/dist/bun/embedded-assets.js.map +1 -0
- package/dist/bun/register-bedrock.d.ts +2 -0
- package/dist/bun/register-bedrock.d.ts.map +1 -0
- package/dist/bun/register-bedrock.js +4 -0
- package/dist/bun/register-bedrock.js.map +1 -0
- package/dist/bun/restore-sandbox-env.d.ts +13 -0
- package/dist/bun/restore-sandbox-env.d.ts.map +1 -0
- package/dist/bun/restore-sandbox-env.js +32 -0
- package/dist/bun/restore-sandbox-env.js.map +1 -0
- package/dist/cli/args.d.ts +70 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +442 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/config-selector.d.ts +14 -0
- package/dist/cli/config-selector.d.ts.map +1 -0
- package/dist/cli/config-selector.js +31 -0
- package/dist/cli/config-selector.js.map +1 -0
- package/dist/cli/file-processor.d.ts +15 -0
- package/dist/cli/file-processor.d.ts.map +1 -0
- package/dist/cli/file-processor.js +60 -0
- package/dist/cli/file-processor.js.map +1 -0
- package/dist/cli/initial-message.d.ts +18 -0
- package/dist/cli/initial-message.d.ts.map +1 -0
- package/dist/cli/initial-message.js +22 -0
- package/dist/cli/initial-message.js.map +1 -0
- package/dist/cli/list-models.d.ts +9 -0
- package/dist/cli/list-models.d.ts.map +1 -0
- package/dist/cli/list-models.js +98 -0
- package/dist/cli/list-models.js.map +1 -0
- package/dist/cli/session-picker.d.ts +9 -0
- package/dist/cli/session-picker.d.ts.map +1 -0
- package/dist/cli/session-picker.js +35 -0
- package/dist/cli/session-picker.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +14 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +82 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +406 -0
- package/dist/config.js.map +1 -0
- package/dist/core/agent-session.d.ts +970 -0
- package/dist/core/agent-session.d.ts.map +1 -0
- package/dist/core/agent-session.js +5191 -0
- package/dist/core/agent-session.js.map +1 -0
- package/dist/core/auth-guidance.d.ts +5 -0
- package/dist/core/auth-guidance.d.ts.map +1 -0
- package/dist/core/auth-guidance.js +21 -0
- package/dist/core/auth-guidance.js.map +1 -0
- package/dist/core/auth-storage.d.ts +150 -0
- package/dist/core/auth-storage.d.ts.map +1 -0
- package/dist/core/auth-storage.js +557 -0
- package/dist/core/auth-storage.js.map +1 -0
- package/dist/core/bash-executor.d.ts +26 -0
- package/dist/core/bash-executor.d.ts.map +1 -0
- package/dist/core/bash-executor.js +99 -0
- package/dist/core/bash-executor.js.map +1 -0
- package/dist/core/compaction/branch-summarization.d.ts +83 -0
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
- package/dist/core/compaction/branch-summarization.js +220 -0
- package/dist/core/compaction/branch-summarization.js.map +1 -0
- package/dist/core/compaction/compaction.d.ts +65 -0
- package/dist/core/compaction/compaction.d.ts.map +1 -0
- package/dist/core/compaction/compaction.js +550 -0
- package/dist/core/compaction/compaction.js.map +1 -0
- package/dist/core/compaction/compression-detection-ledger.d.ts +34 -0
- package/dist/core/compaction/compression-detection-ledger.d.ts.map +1 -0
- package/dist/core/compaction/compression-detection-ledger.js +52 -0
- package/dist/core/compaction/compression-detection-ledger.js.map +1 -0
- package/dist/core/compaction/compression-detector.d.ts +71 -0
- package/dist/core/compaction/compression-detector.d.ts.map +1 -0
- package/dist/core/compaction/compression-detector.js +407 -0
- package/dist/core/compaction/compression-detector.js.map +1 -0
- package/dist/core/compaction/compression-economics.d.ts +55 -0
- package/dist/core/compaction/compression-economics.d.ts.map +1 -0
- package/dist/core/compaction/compression-economics.js +151 -0
- package/dist/core/compaction/compression-economics.js.map +1 -0
- package/dist/core/compaction/utils.d.ts +28 -0
- package/dist/core/compaction/utils.d.ts.map +1 -0
- package/dist/core/compaction/utils.js +165 -0
- package/dist/core/compaction/utils.js.map +1 -0
- package/dist/core/defaults.d.ts +3 -0
- package/dist/core/defaults.d.ts.map +1 -0
- package/dist/core/defaults.js +2 -0
- package/dist/core/defaults.js.map +1 -0
- package/dist/core/diagnostics.d.ts +18 -0
- package/dist/core/diagnostics.d.ts.map +1 -0
- package/dist/core/diagnostics.js +2 -0
- package/dist/core/diagnostics.js.map +1 -0
- package/dist/core/event-bus.d.ts +9 -0
- package/dist/core/event-bus.d.ts.map +1 -0
- package/dist/core/event-bus.js +25 -0
- package/dist/core/event-bus.js.map +1 -0
- package/dist/core/exec.d.ts +29 -0
- package/dist/core/exec.d.ts.map +1 -0
- package/dist/core/exec.js +75 -0
- package/dist/core/exec.js.map +1 -0
- package/dist/core/export-html/ansi-to-html.d.ts +22 -0
- package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
- package/dist/core/export-html/ansi-to-html.js +245 -0
- package/dist/core/export-html/ansi-to-html.js.map +1 -0
- package/dist/core/export-html/index.d.ts +21 -0
- package/dist/core/export-html/index.d.ts.map +1 -0
- package/dist/core/export-html/index.js +230 -0
- package/dist/core/export-html/index.js.map +1 -0
- package/dist/core/export-html/template.css +1066 -0
- package/dist/core/export-html/template.html +55 -0
- package/dist/core/export-html/template.js +1864 -0
- package/dist/core/export-html/tool-renderer.d.ts +32 -0
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
- package/dist/core/export-html/tool-renderer.js +108 -0
- package/dist/core/export-html/tool-renderer.js.map +1 -0
- package/dist/core/export-html/vendor/highlight.min.js +1213 -0
- package/dist/core/export-html/vendor/marked.min.js +78 -0
- package/dist/core/extensions/loader.d.ts +24 -0
- package/dist/core/extensions/loader.d.ts.map +1 -0
- package/dist/core/extensions/loader.js +613 -0
- package/dist/core/extensions/loader.js.map +1 -0
- package/dist/core/extensions/runner.d.ts +160 -0
- package/dist/core/extensions/runner.d.ts.map +1 -0
- package/dist/core/extensions/runner.js +962 -0
- package/dist/core/extensions/runner.js.map +1 -0
- package/dist/core/extensions/types.d.ts +1311 -0
- package/dist/core/extensions/types.d.ts.map +1 -0
- package/dist/core/extensions/types.js +51 -0
- package/dist/core/extensions/types.js.map +1 -0
- package/dist/core/extensions/wrapper.d.ts +20 -0
- package/dist/core/extensions/wrapper.d.ts.map +1 -0
- package/dist/core/extensions/wrapper.js +22 -0
- package/dist/core/extensions/wrapper.js.map +1 -0
- package/dist/core/footer-data-provider.d.ts +52 -0
- package/dist/core/footer-data-provider.d.ts.map +1 -0
- package/dist/core/footer-data-provider.js +318 -0
- package/dist/core/footer-data-provider.js.map +1 -0
- package/dist/core/grip-agent.d.ts +240 -0
- package/dist/core/grip-agent.d.ts.map +1 -0
- package/dist/core/grip-agent.js +1243 -0
- package/dist/core/grip-agent.js.map +1 -0
- package/dist/core/grip-manifest.d.ts +9 -0
- package/dist/core/grip-manifest.d.ts.map +1 -0
- package/dist/core/grip-manifest.js +25 -0
- package/dist/core/grip-manifest.js.map +1 -0
- package/dist/core/hooks/aggregate.d.ts +5 -0
- package/dist/core/hooks/aggregate.d.ts.map +1 -0
- package/dist/core/hooks/aggregate.js +226 -0
- package/dist/core/hooks/aggregate.js.map +1 -0
- package/dist/core/hooks/config.d.ts +14 -0
- package/dist/core/hooks/config.d.ts.map +1 -0
- package/dist/core/hooks/config.js +372 -0
- package/dist/core/hooks/config.js.map +1 -0
- package/dist/core/hooks/executor.d.ts +12 -0
- package/dist/core/hooks/executor.d.ts.map +1 -0
- package/dist/core/hooks/executor.js +708 -0
- package/dist/core/hooks/executor.js.map +1 -0
- package/dist/core/hooks/index.d.ts +9 -0
- package/dist/core/hooks/index.d.ts.map +1 -0
- package/dist/core/hooks/index.js +14 -0
- package/dist/core/hooks/index.js.map +1 -0
- package/dist/core/hooks/matcher.d.ts +10 -0
- package/dist/core/hooks/matcher.d.ts.map +1 -0
- package/dist/core/hooks/matcher.js +70 -0
- package/dist/core/hooks/matcher.js.map +1 -0
- package/dist/core/hooks/trust-store.d.ts +38 -0
- package/dist/core/hooks/trust-store.d.ts.map +1 -0
- package/dist/core/hooks/trust-store.js +167 -0
- package/dist/core/hooks/trust-store.js.map +1 -0
- package/dist/core/hooks/types.d.ts +234 -0
- package/dist/core/hooks/types.d.ts.map +1 -0
- package/dist/core/hooks/types.js +52 -0
- package/dist/core/hooks/types.js.map +1 -0
- package/dist/core/http-dispatcher.d.ts +21 -0
- package/dist/core/http-dispatcher.d.ts.map +1 -0
- package/dist/core/http-dispatcher.js +82 -0
- package/dist/core/http-dispatcher.js.map +1 -0
- package/dist/core/instruction-resource-loader.d.ts +81 -0
- package/dist/core/instruction-resource-loader.d.ts.map +1 -0
- package/dist/core/instruction-resource-loader.js +574 -0
- package/dist/core/instruction-resource-loader.js.map +1 -0
- package/dist/core/keybindings.d.ts +399 -0
- package/dist/core/keybindings.d.ts.map +1 -0
- package/dist/core/keybindings.js +299 -0
- package/dist/core/keybindings.js.map +1 -0
- package/dist/core/lsp/abort.d.ts +3 -0
- package/dist/core/lsp/abort.d.ts.map +1 -0
- package/dist/core/lsp/abort.js +28 -0
- package/dist/core/lsp/abort.js.map +1 -0
- package/dist/core/lsp/client.d.ts +108 -0
- package/dist/core/lsp/client.d.ts.map +1 -0
- package/dist/core/lsp/client.js +586 -0
- package/dist/core/lsp/client.js.map +1 -0
- package/dist/core/lsp/config-loader.d.ts +44 -0
- package/dist/core/lsp/config-loader.d.ts.map +1 -0
- package/dist/core/lsp/config-loader.js +223 -0
- package/dist/core/lsp/config-loader.js.map +1 -0
- package/dist/core/lsp/config.d.ts +134 -0
- package/dist/core/lsp/config.d.ts.map +1 -0
- package/dist/core/lsp/config.js +682 -0
- package/dist/core/lsp/config.js.map +1 -0
- package/dist/core/lsp/diagnostics.d.ts +18 -0
- package/dist/core/lsp/diagnostics.d.ts.map +1 -0
- package/dist/core/lsp/diagnostics.js +311 -0
- package/dist/core/lsp/diagnostics.js.map +1 -0
- package/dist/core/lsp/file-sync.d.ts +58 -0
- package/dist/core/lsp/file-sync.d.ts.map +1 -0
- package/dist/core/lsp/file-sync.js +432 -0
- package/dist/core/lsp/file-sync.js.map +1 -0
- package/dist/core/lsp/integration.d.ts +62 -0
- package/dist/core/lsp/integration.d.ts.map +1 -0
- package/dist/core/lsp/integration.js +145 -0
- package/dist/core/lsp/integration.js.map +1 -0
- package/dist/core/lsp/language-map.d.ts +54 -0
- package/dist/core/lsp/language-map.d.ts.map +1 -0
- package/dist/core/lsp/language-map.js +300 -0
- package/dist/core/lsp/language-map.js.map +1 -0
- package/dist/core/lsp/manager.d.ts +120 -0
- package/dist/core/lsp/manager.d.ts.map +1 -0
- package/dist/core/lsp/manager.js +636 -0
- package/dist/core/lsp/manager.js.map +1 -0
- package/dist/core/lsp/navigation.d.ts +32 -0
- package/dist/core/lsp/navigation.d.ts.map +1 -0
- package/dist/core/lsp/navigation.js +327 -0
- package/dist/core/lsp/navigation.js.map +1 -0
- package/dist/core/lsp/portable-path.d.ts +18 -0
- package/dist/core/lsp/portable-path.d.ts.map +1 -0
- package/dist/core/lsp/portable-path.js +83 -0
- package/dist/core/lsp/portable-path.js.map +1 -0
- package/dist/core/lsp/refactor.d.ts +32 -0
- package/dist/core/lsp/refactor.d.ts.map +1 -0
- package/dist/core/lsp/refactor.js +519 -0
- package/dist/core/lsp/refactor.js.map +1 -0
- package/dist/core/lsp/transport.d.ts +39 -0
- package/dist/core/lsp/transport.d.ts.map +1 -0
- package/dist/core/lsp/transport.js +261 -0
- package/dist/core/lsp/transport.js.map +1 -0
- package/dist/core/messages.d.ts +34 -0
- package/dist/core/messages.d.ts.map +1 -0
- package/dist/core/messages.js +140 -0
- package/dist/core/messages.js.map +1 -0
- package/dist/core/model-registry.d.ts +148 -0
- package/dist/core/model-registry.d.ts.map +1 -0
- package/dist/core/model-registry.js +812 -0
- package/dist/core/model-registry.js.map +1 -0
- package/dist/core/model-resolver.d.ts +115 -0
- package/dist/core/model-resolver.d.ts.map +1 -0
- package/dist/core/model-resolver.js +498 -0
- package/dist/core/model-resolver.js.map +1 -0
- package/dist/core/output-guard.d.ts +7 -0
- package/dist/core/output-guard.d.ts.map +1 -0
- package/dist/core/output-guard.js +89 -0
- package/dist/core/output-guard.js.map +1 -0
- package/dist/core/package-manager.d.ts +209 -0
- package/dist/core/package-manager.d.ts.map +1 -0
- package/dist/core/package-manager.js +2341 -0
- package/dist/core/package-manager.js.map +1 -0
- package/dist/core/prompt-templates.d.ts +57 -0
- package/dist/core/prompt-templates.d.ts.map +1 -0
- package/dist/core/prompt-templates.js +353 -0
- package/dist/core/prompt-templates.js.map +1 -0
- package/dist/core/provider-display-names.d.ts +2 -0
- package/dist/core/provider-display-names.d.ts.map +1 -0
- package/dist/core/provider-display-names.js +33 -0
- package/dist/core/provider-display-names.js.map +1 -0
- package/dist/core/remote-workspace-protocol/contract.d.ts +465 -0
- package/dist/core/remote-workspace-protocol/contract.d.ts.map +1 -0
- package/dist/core/remote-workspace-protocol/contract.js +825 -0
- package/dist/core/remote-workspace-protocol/contract.js.map +1 -0
- package/dist/core/remote-workspace-protocol/guest-shared-client.d.ts +16 -0
- package/dist/core/remote-workspace-protocol/guest-shared-client.d.ts.map +1 -0
- package/dist/core/remote-workspace-protocol/guest-shared-client.js +54 -0
- package/dist/core/remote-workspace-protocol/guest-shared-client.js.map +1 -0
- package/dist/core/remote-workspace-protocol/guest-shared-outbound-scheduler.d.ts +23 -0
- package/dist/core/remote-workspace-protocol/guest-shared-outbound-scheduler.d.ts.map +1 -0
- package/dist/core/remote-workspace-protocol/guest-shared-outbound-scheduler.js +112 -0
- package/dist/core/remote-workspace-protocol/guest-shared-outbound-scheduler.js.map +1 -0
- package/dist/core/remote-workspace-protocol/guest-shared-uplink.d.ts +30 -0
- package/dist/core/remote-workspace-protocol/guest-shared-uplink.d.ts.map +1 -0
- package/dist/core/remote-workspace-protocol/guest-shared-uplink.js +243 -0
- package/dist/core/remote-workspace-protocol/guest-shared-uplink.js.map +1 -0
- package/dist/core/remote-workspace-protocol/lima-owner-directory.d.ts +3 -0
- package/dist/core/remote-workspace-protocol/lima-owner-directory.d.ts.map +1 -0
- package/dist/core/remote-workspace-protocol/lima-owner-directory.js +31 -0
- package/dist/core/remote-workspace-protocol/lima-owner-directory.js.map +1 -0
- package/dist/core/remote-workspace-protocol/lima-owner-lock.d.ts +9 -0
- package/dist/core/remote-workspace-protocol/lima-owner-lock.d.ts.map +1 -0
- package/dist/core/remote-workspace-protocol/lima-owner-lock.js +89 -0
- package/dist/core/remote-workspace-protocol/lima-owner-lock.js.map +1 -0
- package/dist/core/remote-workspace-protocol/session.d.ts +249 -0
- package/dist/core/remote-workspace-protocol/session.d.ts.map +1 -0
- package/dist/core/remote-workspace-protocol/session.js +1842 -0
- package/dist/core/remote-workspace-protocol/session.js.map +1 -0
- package/dist/core/remote-workspace-protocol/shared-transport.d.ts +71 -0
- package/dist/core/remote-workspace-protocol/shared-transport.d.ts.map +1 -0
- package/dist/core/remote-workspace-protocol/shared-transport.js +68 -0
- package/dist/core/remote-workspace-protocol/shared-transport.js.map +1 -0
- package/dist/core/resolve-config-value.d.ts +32 -0
- package/dist/core/resolve-config-value.d.ts.map +1 -0
- package/dist/core/resolve-config-value.js +257 -0
- package/dist/core/resolve-config-value.js.map +1 -0
- package/dist/core/resource-loader.d.ts +200 -0
- package/dist/core/resource-loader.d.ts.map +1 -0
- package/dist/core/resource-loader.js +1209 -0
- package/dist/core/resource-loader.js.map +1 -0
- package/dist/core/rules.d.ts +40 -0
- package/dist/core/rules.d.ts.map +1 -0
- package/dist/core/rules.js +57 -0
- package/dist/core/rules.js.map +1 -0
- package/dist/core/sandbox/command.d.ts +25 -0
- package/dist/core/sandbox/command.d.ts.map +1 -0
- package/dist/core/sandbox/command.js +102 -0
- package/dist/core/sandbox/command.js.map +1 -0
- package/dist/core/sandbox/config.d.ts +91 -0
- package/dist/core/sandbox/config.d.ts.map +1 -0
- package/dist/core/sandbox/config.js +88 -0
- package/dist/core/sandbox/config.js.map +1 -0
- package/dist/core/sandbox/lima-guest-binary.d.ts +11 -0
- package/dist/core/sandbox/lima-guest-binary.d.ts.map +1 -0
- package/dist/core/sandbox/lima-guest-binary.js +140 -0
- package/dist/core/sandbox/lima-guest-binary.js.map +1 -0
- package/dist/core/sandbox/lima.d.ts +57 -0
- package/dist/core/sandbox/lima.d.ts.map +1 -0
- package/dist/core/sandbox/lima.js +716 -0
- package/dist/core/sandbox/lima.js.map +1 -0
- package/dist/core/sandbox/shared-lima-roots.d.ts +11 -0
- package/dist/core/sandbox/shared-lima-roots.d.ts.map +1 -0
- package/dist/core/sandbox/shared-lima-roots.js +25 -0
- package/dist/core/sandbox/shared-lima-roots.js.map +1 -0
- package/dist/core/sandbox/update-shared-guest-binary.d.ts +8 -0
- package/dist/core/sandbox/update-shared-guest-binary.d.ts.map +1 -0
- package/dist/core/sandbox/update-shared-guest-binary.js +100 -0
- package/dist/core/sandbox/update-shared-guest-binary.js.map +1 -0
- package/dist/core/session/constants.d.ts +2 -0
- package/dist/core/session/constants.d.ts.map +1 -0
- package/dist/core/session/constants.js +2 -0
- package/dist/core/session/constants.js.map +1 -0
- package/dist/core/session/context-metadata.d.ts +5 -0
- package/dist/core/session/context-metadata.d.ts.map +1 -0
- package/dist/core/session/context-metadata.js +55 -0
- package/dist/core/session/context-metadata.js.map +1 -0
- package/dist/core/session/context.d.ts +14 -0
- package/dist/core/session/context.d.ts.map +1 -0
- package/dist/core/session/context.js +117 -0
- package/dist/core/session/context.js.map +1 -0
- package/dist/core/session/ids.d.ts +9 -0
- package/dist/core/session/ids.d.ts.map +1 -0
- package/dist/core/session/ids.js +21 -0
- package/dist/core/session/ids.js.map +1 -0
- package/dist/core/session/in-memory-session-manager.d.ts +17 -0
- package/dist/core/session/in-memory-session-manager.d.ts.map +1 -0
- package/dist/core/session/in-memory-session-manager.js +40 -0
- package/dist/core/session/in-memory-session-manager.js.map +1 -0
- package/dist/core/session/in-memory-session.d.ts +7 -0
- package/dist/core/session/in-memory-session.d.ts.map +1 -0
- package/dist/core/session/in-memory-session.js +11 -0
- package/dist/core/session/in-memory-session.js.map +1 -0
- package/dist/core/session/jsonl-errors.d.ts +36 -0
- package/dist/core/session/jsonl-errors.d.ts.map +1 -0
- package/dist/core/session/jsonl-errors.js +49 -0
- package/dist/core/session/jsonl-errors.js.map +1 -0
- package/dist/core/session/jsonl-helpers.d.ts +20 -0
- package/dist/core/session/jsonl-helpers.d.ts.map +1 -0
- package/dist/core/session/jsonl-helpers.js +21 -0
- package/dist/core/session/jsonl-helpers.js.map +1 -0
- package/dist/core/session/local-session-manager.d.ts +30 -0
- package/dist/core/session/local-session-manager.d.ts.map +1 -0
- package/dist/core/session/local-session-manager.js +205 -0
- package/dist/core/session/local-session-manager.js.map +1 -0
- package/dist/core/session/local-session.d.ts +9 -0
- package/dist/core/session/local-session.d.ts.map +1 -0
- package/dist/core/session/local-session.js +15 -0
- package/dist/core/session/local-session.js.map +1 -0
- package/dist/core/session/migrations.d.ts +11 -0
- package/dist/core/session/migrations.d.ts.map +1 -0
- package/dist/core/session/migrations.js +78 -0
- package/dist/core/session/migrations.js.map +1 -0
- package/dist/core/session/remote-session-client.d.ts +83 -0
- package/dist/core/session/remote-session-client.d.ts.map +1 -0
- package/dist/core/session/remote-session-client.js +224 -0
- package/dist/core/session/remote-session-client.js.map +1 -0
- package/dist/core/session/remote-session-manager.d.ts +32 -0
- package/dist/core/session/remote-session-manager.d.ts.map +1 -0
- package/dist/core/session/remote-session-manager.js +124 -0
- package/dist/core/session/remote-session-manager.js.map +1 -0
- package/dist/core/session/remote-session.d.ts +20 -0
- package/dist/core/session/remote-session.d.ts.map +1 -0
- package/dist/core/session/remote-session.js +33 -0
- package/dist/core/session/remote-session.js.map +1 -0
- package/dist/core/session/session-manager.d.ts +18 -0
- package/dist/core/session/session-manager.d.ts.map +1 -0
- package/dist/core/session/session-manager.js +2 -0
- package/dist/core/session/session-manager.js.map +1 -0
- package/dist/core/session/session.d.ts +140 -0
- package/dist/core/session/session.d.ts.map +1 -0
- package/dist/core/session/session.js +461 -0
- package/dist/core/session/session.js.map +1 -0
- package/dist/core/session/stores/in-memory-session-store.d.ts +39 -0
- package/dist/core/session/stores/in-memory-session-store.d.ts.map +1 -0
- package/dist/core/session/stores/in-memory-session-store.js +168 -0
- package/dist/core/session/stores/in-memory-session-store.js.map +1 -0
- package/dist/core/session/stores/jsonl-session-store.d.ts +97 -0
- package/dist/core/session/stores/jsonl-session-store.d.ts.map +1 -0
- package/dist/core/session/stores/jsonl-session-store.js +1140 -0
- package/dist/core/session/stores/jsonl-session-store.js.map +1 -0
- package/dist/core/session/stores/remote-session-store.d.ts +44 -0
- package/dist/core/session/stores/remote-session-store.d.ts.map +1 -0
- package/dist/core/session/stores/remote-session-store.js +159 -0
- package/dist/core/session/stores/remote-session-store.js.map +1 -0
- package/dist/core/session/stores/session-store.d.ts +42 -0
- package/dist/core/session/stores/session-store.d.ts.map +1 -0
- package/dist/core/session/stores/session-store.js +2 -0
- package/dist/core/session/stores/session-store.js.map +1 -0
- package/dist/core/session/types.d.ts +141 -0
- package/dist/core/session/types.d.ts.map +1 -0
- package/dist/core/session/types.js +2 -0
- package/dist/core/session/types.js.map +1 -0
- package/dist/core/session/usage-ledger.d.ts +18 -0
- package/dist/core/session/usage-ledger.d.ts.map +1 -0
- package/dist/core/session/usage-ledger.js +68 -0
- package/dist/core/session/usage-ledger.js.map +1 -0
- package/dist/core/session-cwd.d.ts +19 -0
- package/dist/core/session-cwd.d.ts.map +1 -0
- package/dist/core/session-cwd.js +38 -0
- package/dist/core/session-cwd.js.map +1 -0
- package/dist/core/settings-manager.d.ts +314 -0
- package/dist/core/settings-manager.d.ts.map +1 -0
- package/dist/core/settings-manager.js +991 -0
- package/dist/core/settings-manager.js.map +1 -0
- package/dist/core/skills.d.ts +40 -0
- package/dist/core/skills.d.ts.map +1 -0
- package/dist/core/skills.js +57 -0
- package/dist/core/skills.js.map +1 -0
- package/dist/core/slash-commands.d.ts +15 -0
- package/dist/core/slash-commands.d.ts.map +1 -0
- package/dist/core/slash-commands.js +36 -0
- package/dist/core/slash-commands.js.map +1 -0
- package/dist/core/source-info.d.ts +26 -0
- package/dist/core/source-info.d.ts.map +1 -0
- package/dist/core/source-info.js +27 -0
- package/dist/core/source-info.js.map +1 -0
- package/dist/core/system-prompt.d.ts +32 -0
- package/dist/core/system-prompt.d.ts.map +1 -0
- package/dist/core/system-prompt.js +131 -0
- package/dist/core/system-prompt.js.map +1 -0
- package/dist/core/telemetry.d.ts +3 -0
- package/dist/core/telemetry.d.ts.map +1 -0
- package/dist/core/telemetry.js +9 -0
- package/dist/core/telemetry.js.map +1 -0
- package/dist/core/timings.d.ts +10 -0
- package/dist/core/timings.d.ts.map +1 -0
- package/dist/core/timings.js +41 -0
- package/dist/core/timings.js.map +1 -0
- package/dist/core/tools/bash.d.ts +51 -0
- package/dist/core/tools/bash.d.ts.map +1 -0
- package/dist/core/tools/bash.js +321 -0
- package/dist/core/tools/bash.js.map +1 -0
- package/dist/core/tools/compress-context.d.ts +27 -0
- package/dist/core/tools/compress-context.d.ts.map +1 -0
- package/dist/core/tools/compress-context.js +142 -0
- package/dist/core/tools/compress-context.js.map +1 -0
- package/dist/core/tools/edit-diff.d.ts +82 -0
- package/dist/core/tools/edit-diff.d.ts.map +1 -0
- package/dist/core/tools/edit-diff.js +327 -0
- package/dist/core/tools/edit-diff.js.map +1 -0
- package/dist/core/tools/edit.d.ts +50 -0
- package/dist/core/tools/edit.d.ts.map +1 -0
- package/dist/core/tools/edit.js +324 -0
- package/dist/core/tools/edit.js.map +1 -0
- package/dist/core/tools/file-mutation-queue.d.ts +8 -0
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
- package/dist/core/tools/file-mutation-queue.js +69 -0
- package/dist/core/tools/file-mutation-queue.js.map +1 -0
- package/dist/core/tools/find.d.ts +22 -0
- package/dist/core/tools/find.d.ts.map +1 -0
- package/dist/core/tools/find.js +268 -0
- package/dist/core/tools/find.js.map +1 -0
- package/dist/core/tools/grep.d.ts +27 -0
- package/dist/core/tools/grep.d.ts.map +1 -0
- package/dist/core/tools/grep.js +332 -0
- package/dist/core/tools/grep.js.map +1 -0
- package/dist/core/tools/hash-store.d.ts +12 -0
- package/dist/core/tools/hash-store.d.ts.map +1 -0
- package/dist/core/tools/hash-store.js +48 -0
- package/dist/core/tools/hash-store.js.map +1 -0
- package/dist/core/tools/hashline/apply.d.ts +40 -0
- package/dist/core/tools/hashline/apply.d.ts.map +1 -0
- package/dist/core/tools/hashline/apply.js +261 -0
- package/dist/core/tools/hashline/apply.js.map +1 -0
- package/dist/core/tools/hashline/hash.d.ts +56 -0
- package/dist/core/tools/hashline/hash.d.ts.map +1 -0
- package/dist/core/tools/hashline/hash.js +196 -0
- package/dist/core/tools/hashline/hash.js.map +1 -0
- package/dist/core/tools/hashline/parse.d.ts +8 -0
- package/dist/core/tools/hashline/parse.d.ts.map +1 -0
- package/dist/core/tools/hashline/parse.js +41 -0
- package/dist/core/tools/hashline/parse.js.map +1 -0
- package/dist/core/tools/hashline/resolve.d.ts +51 -0
- package/dist/core/tools/hashline/resolve.d.ts.map +1 -0
- package/dist/core/tools/hashline/resolve.js +187 -0
- package/dist/core/tools/hashline/resolve.js.map +1 -0
- package/dist/core/tools/hashline-utils.d.ts +6 -0
- package/dist/core/tools/hashline-utils.d.ts.map +1 -0
- package/dist/core/tools/hashline-utils.js +23 -0
- package/dist/core/tools/hashline-utils.js.map +1 -0
- package/dist/core/tools/index.d.ts +36 -0
- package/dist/core/tools/index.d.ts.map +1 -0
- package/dist/core/tools/index.js +141 -0
- package/dist/core/tools/index.js.map +1 -0
- package/dist/core/tools/ls.d.ts +21 -0
- package/dist/core/tools/ls.d.ts.map +1 -0
- package/dist/core/tools/ls.js +156 -0
- package/dist/core/tools/ls.js.map +1 -0
- package/dist/core/tools/operations.d.ts +212 -0
- package/dist/core/tools/operations.d.ts.map +1 -0
- package/dist/core/tools/operations.js +793 -0
- package/dist/core/tools/operations.js.map +1 -0
- package/dist/core/tools/output-accumulator.d.ts +54 -0
- package/dist/core/tools/output-accumulator.d.ts.map +1 -0
- package/dist/core/tools/output-accumulator.js +184 -0
- package/dist/core/tools/output-accumulator.js.map +1 -0
- package/dist/core/tools/path-utils.d.ts +9 -0
- package/dist/core/tools/path-utils.d.ts.map +1 -0
- package/dist/core/tools/path-utils.js +99 -0
- package/dist/core/tools/path-utils.js.map +1 -0
- package/dist/core/tools/read.d.ts +32 -0
- package/dist/core/tools/read.d.ts.map +1 -0
- package/dist/core/tools/read.js +318 -0
- package/dist/core/tools/read.js.map +1 -0
- package/dist/core/tools/render-utils.d.ts +33 -0
- package/dist/core/tools/render-utils.d.ts.map +1 -0
- package/dist/core/tools/render-utils.js +61 -0
- package/dist/core/tools/render-utils.js.map +1 -0
- package/dist/core/tools/replace-diff.d.ts +16 -0
- package/dist/core/tools/replace-diff.d.ts.map +1 -0
- package/dist/core/tools/replace-diff.js +117 -0
- package/dist/core/tools/replace-diff.js.map +1 -0
- package/dist/core/tools/replace-normalize.d.ts +2 -0
- package/dist/core/tools/replace-normalize.d.ts.map +1 -0
- package/dist/core/tools/replace-normalize.js +73 -0
- package/dist/core/tools/replace-normalize.js.map +1 -0
- package/dist/core/tools/replace-render.d.ts +51 -0
- package/dist/core/tools/replace-render.d.ts.map +1 -0
- package/dist/core/tools/replace-render.js +162 -0
- package/dist/core/tools/replace-render.js.map +1 -0
- package/dist/core/tools/runtime.d.ts +2 -0
- package/dist/core/tools/runtime.d.ts.map +1 -0
- package/dist/core/tools/runtime.js +6 -0
- package/dist/core/tools/runtime.js.map +1 -0
- package/dist/core/tools/session-history.d.ts +55 -0
- package/dist/core/tools/session-history.d.ts.map +1 -0
- package/dist/core/tools/session-history.js +649 -0
- package/dist/core/tools/session-history.js.map +1 -0
- package/dist/core/tools/subagent-agents.d.ts +29 -0
- package/dist/core/tools/subagent-agents.d.ts.map +1 -0
- package/dist/core/tools/subagent-agents.js +223 -0
- package/dist/core/tools/subagent-agents.js.map +1 -0
- package/dist/core/tools/subagent.d.ts +185 -0
- package/dist/core/tools/subagent.d.ts.map +1 -0
- package/dist/core/tools/subagent.js +1309 -0
- package/dist/core/tools/subagent.js.map +1 -0
- package/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
- package/dist/core/tools/tool-definition-wrapper.js +34 -0
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
- package/dist/core/tools/truncate.d.ts +39 -0
- package/dist/core/tools/truncate.d.ts.map +1 -0
- package/dist/core/tools/truncate.js +215 -0
- package/dist/core/tools/truncate.js.map +1 -0
- package/dist/core/tools/websearch.d.ts +33 -0
- package/dist/core/tools/websearch.d.ts.map +1 -0
- package/dist/core/tools/websearch.js +341 -0
- package/dist/core/tools/websearch.js.map +1 -0
- package/dist/core/tools/workspace-tool-host.d.ts +102 -0
- package/dist/core/tools/workspace-tool-host.d.ts.map +1 -0
- package/dist/core/tools/workspace-tool-host.js +348 -0
- package/dist/core/tools/workspace-tool-host.js.map +1 -0
- package/dist/core/tools/write.d.ts +16 -0
- package/dist/core/tools/write.d.ts.map +1 -0
- package/dist/core/tools/write.js +204 -0
- package/dist/core/tools/write.js.map +1 -0
- package/dist/core/workspace-identity.d.ts +7 -0
- package/dist/core/workspace-identity.d.ts.map +1 -0
- package/dist/core/workspace-identity.js +2 -0
- package/dist/core/workspace-identity.js.map +1 -0
- package/dist/daemon/activity-budget.d.ts +10 -0
- package/dist/daemon/activity-budget.d.ts.map +1 -0
- package/dist/daemon/activity-budget.js +34 -0
- package/dist/daemon/activity-budget.js.map +1 -0
- package/dist/daemon/command.d.ts +6 -0
- package/dist/daemon/command.d.ts.map +1 -0
- package/dist/daemon/command.js +58 -0
- package/dist/daemon/command.js.map +1 -0
- package/dist/daemon/config.d.ts +45 -0
- package/dist/daemon/config.d.ts.map +1 -0
- package/dist/daemon/config.js +319 -0
- package/dist/daemon/config.js.map +1 -0
- package/dist/daemon/help.d.ts +2 -0
- package/dist/daemon/help.d.ts.map +1 -0
- package/dist/daemon/help.js +42 -0
- package/dist/daemon/help.js.map +1 -0
- package/dist/daemon/lsp-config.d.ts +4 -0
- package/dist/daemon/lsp-config.d.ts.map +1 -0
- package/dist/daemon/lsp-config.js +155 -0
- package/dist/daemon/lsp-config.js.map +1 -0
- package/dist/daemon/outbound-budget.d.ts +10 -0
- package/dist/daemon/outbound-budget.d.ts.map +1 -0
- package/dist/daemon/outbound-budget.js +30 -0
- package/dist/daemon/outbound-budget.js.map +1 -0
- package/dist/daemon/security.d.ts +19 -0
- package/dist/daemon/security.d.ts.map +1 -0
- package/dist/daemon/security.js +177 -0
- package/dist/daemon/security.js.map +1 -0
- package/dist/daemon/server.d.ts +20 -0
- package/dist/daemon/server.d.ts.map +1 -0
- package/dist/daemon/server.js +480 -0
- package/dist/daemon/server.js.map +1 -0
- package/dist/daemon/shared-connection.d.ts +33 -0
- package/dist/daemon/shared-connection.d.ts.map +1 -0
- package/dist/daemon/shared-connection.js +271 -0
- package/dist/daemon/shared-connection.js.map +1 -0
- package/dist/daemon/shared-revision.d.ts +5 -0
- package/dist/daemon/shared-revision.d.ts.map +1 -0
- package/dist/daemon/shared-revision.js +61 -0
- package/dist/daemon/shared-revision.js.map +1 -0
- package/dist/daemon/shared-roots.d.ts +9 -0
- package/dist/daemon/shared-roots.d.ts.map +1 -0
- package/dist/daemon/shared-roots.js +33 -0
- package/dist/daemon/shared-roots.js.map +1 -0
- package/dist/daemon/workspace-runtime.d.ts +46 -0
- package/dist/daemon/workspace-runtime.d.ts.map +1 -0
- package/dist/daemon/workspace-runtime.js +705 -0
- package/dist/daemon/workspace-runtime.js.map +1 -0
- package/dist/index.d.ts +109 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +107 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +39 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +765 -0
- package/dist/main.js.map +1 -0
- package/dist/migrations.d.ts +35 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +412 -0
- package/dist/migrations.js.map +1 -0
- package/dist/modes/interactive/components/assistant-message.d.ts +30 -0
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/assistant-message.js +159 -0
- package/dist/modes/interactive/components/assistant-message.js.map +1 -0
- package/dist/modes/interactive/components/bash-execution.d.ts +36 -0
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/bash-execution.js +173 -0
- package/dist/modes/interactive/components/bash-execution.js.map +1 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts +18 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
- package/dist/modes/interactive/components/bordered-loader.js +54 -0
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
- package/dist/modes/interactive/components/branch-summary-message.d.ts +17 -0
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/branch-summary-message.js +45 -0
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +17 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.js +46 -0
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
- package/dist/modes/interactive/components/config-selector.d.ts +74 -0
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/config-selector.js +514 -0
- package/dist/modes/interactive/components/config-selector.js.map +1 -0
- package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
- package/dist/modes/interactive/components/countdown-timer.js +33 -0
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
- package/dist/modes/interactive/components/custom-editor.d.ts +25 -0
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-editor.js +85 -0
- package/dist/modes/interactive/components/custom-editor.js.map +1 -0
- package/dist/modes/interactive/components/custom-message.d.ts +20 -0
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-message.js +81 -0
- package/dist/modes/interactive/components/custom-message.js.map +1 -0
- package/dist/modes/interactive/components/diff.d.ts +12 -0
- package/dist/modes/interactive/components/diff.d.ts.map +1 -0
- package/dist/modes/interactive/components/diff.js +118 -0
- package/dist/modes/interactive/components/diff.js.map +1 -0
- package/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
- package/dist/modes/interactive/components/dynamic-border.js +21 -0
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
- package/dist/modes/interactive/components/extension-editor.d.ts +22 -0
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-editor.js +128 -0
- package/dist/modes/interactive/components/extension-editor.js.map +1 -0
- package/dist/modes/interactive/components/extension-input.d.ts +23 -0
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-input.js +61 -0
- package/dist/modes/interactive/components/extension-input.js.map +1 -0
- package/dist/modes/interactive/components/extension-selector.d.ts +26 -0
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-selector.js +83 -0
- package/dist/modes/interactive/components/extension-selector.js.map +1 -0
- package/dist/modes/interactive/components/footer.d.ts +36 -0
- package/dist/modes/interactive/components/footer.d.ts.map +1 -0
- package/dist/modes/interactive/components/footer.js +227 -0
- package/dist/modes/interactive/components/footer.js.map +1 -0
- package/dist/modes/interactive/components/hook-execution.d.ts +19 -0
- package/dist/modes/interactive/components/hook-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/hook-execution.js +185 -0
- package/dist/modes/interactive/components/hook-execution.js.map +1 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
- package/dist/modes/interactive/components/keybinding-hints.js +36 -0
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
- package/dist/modes/interactive/components/login-dialog.d.ts +55 -0
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
- package/dist/modes/interactive/components/login-dialog.js +176 -0
- package/dist/modes/interactive/components/login-dialog.js.map +1 -0
- package/dist/modes/interactive/components/markdown-transform.d.ts +4 -0
- package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -0
- package/dist/modes/interactive/components/markdown-transform.js +19 -0
- package/dist/modes/interactive/components/markdown-transform.js.map +1 -0
- package/dist/modes/interactive/components/mermaid.d.ts +14 -0
- package/dist/modes/interactive/components/mermaid.d.ts.map +1 -0
- package/dist/modes/interactive/components/mermaid.js +228 -0
- package/dist/modes/interactive/components/mermaid.js.map +1 -0
- package/dist/modes/interactive/components/message-card.d.ts +9 -0
- package/dist/modes/interactive/components/message-card.d.ts.map +1 -0
- package/dist/modes/interactive/components/message-card.js +24 -0
- package/dist/modes/interactive/components/message-card.js.map +1 -0
- package/dist/modes/interactive/components/model-selector.d.ts +52 -0
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/model-selector.js +296 -0
- package/dist/modes/interactive/components/model-selector.js.map +1 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts +33 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/oauth-selector.js +165 -0
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +50 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.js +300 -0
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts +22 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.js +144 -0
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
- package/dist/modes/interactive/components/session-selector.d.ts +108 -0
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector.js +835 -0
- package/dist/modes/interactive/components/session-selector.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +81 -0
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/settings-selector.js +455 -0
- package/dist/modes/interactive/components/settings-selector.js.map +1 -0
- package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/show-images-selector.js +39 -0
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +18 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.js +48 -0
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
- package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/theme-selector.js +50 -0
- package/dist/modes/interactive/components/theme-selector.js.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.js +51 -0
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
- package/dist/modes/interactive/components/tool-execution.d.ts +67 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/tool-execution.js +312 -0
- package/dist/modes/interactive/components/tool-execution.js.map +1 -0
- package/dist/modes/interactive/components/tree-selector.d.ts +127 -0
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/tree-selector.js +1098 -0
- package/dist/modes/interactive/components/tree-selector.js.map +1 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/user-message-selector.js +114 -0
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
- package/dist/modes/interactive/components/user-message.d.ts +16 -0
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/user-message.js +50 -0
- package/dist/modes/interactive/components/user-message.js.map +1 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
- package/dist/modes/interactive/components/visual-truncate.js +33 -0
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +554 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-mode.js +5870 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -0
- package/dist/modes/interactive/theme/dark.json +86 -0
- package/dist/modes/interactive/theme/light.json +85 -0
- package/dist/modes/interactive/theme/theme-schema.json +335 -0
- package/dist/modes/interactive/theme/theme.d.ts +109 -0
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
- package/dist/modes/interactive/theme/theme.js +1040 -0
- package/dist/modes/interactive/theme/theme.js.map +1 -0
- package/dist/modes/json-event.d.ts +28 -0
- package/dist/modes/json-event.d.ts.map +1 -0
- package/dist/modes/json-event.js +12 -0
- package/dist/modes/json-event.js.map +1 -0
- package/dist/modes/print-mode.d.ts +29 -0
- package/dist/modes/print-mode.d.ts.map +1 -0
- package/dist/modes/print-mode.js +142 -0
- package/dist/modes/print-mode.js.map +1 -0
- package/dist/modes/rpc/jsonl.d.ts +17 -0
- package/dist/modes/rpc/jsonl.d.ts.map +1 -0
- package/dist/modes/rpc/jsonl.js +49 -0
- package/dist/modes/rpc/jsonl.js.map +1 -0
- package/dist/modes/rpc/rpc-client.d.ts +321 -0
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-client.js +755 -0
- package/dist/modes/rpc/rpc-client.js.map +1 -0
- package/dist/modes/rpc/rpc-mode.d.ts +20 -0
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-mode.js +963 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -0
- package/dist/modes/rpc/rpc-types.d.ts +652 -0
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-types.js +8 -0
- package/dist/modes/rpc/rpc-types.js.map +1 -0
- package/dist/package-manager-cli.d.ts +4 -0
- package/dist/package-manager-cli.d.ts.map +1 -0
- package/dist/package-manager-cli.js +488 -0
- package/dist/package-manager-cli.js.map +1 -0
- package/dist/utils/ansi.d.ts +2 -0
- package/dist/utils/ansi.d.ts.map +1 -0
- package/dist/utils/ansi.js +25 -0
- package/dist/utils/ansi.js.map +1 -0
- package/dist/utils/changelog.d.ts +23 -0
- package/dist/utils/changelog.d.ts.map +1 -0
- package/dist/utils/changelog.js +74 -0
- package/dist/utils/changelog.js.map +1 -0
- package/dist/utils/child-process.d.ts +15 -0
- package/dist/utils/child-process.d.ts.map +1 -0
- package/dist/utils/child-process.js +88 -0
- package/dist/utils/child-process.js.map +1 -0
- package/dist/utils/clipboard-image.d.ts +13 -0
- package/dist/utils/clipboard-image.d.ts.map +1 -0
- package/dist/utils/clipboard-image.js +248 -0
- package/dist/utils/clipboard-image.js.map +1 -0
- package/dist/utils/clipboard-native.d.ts +11 -0
- package/dist/utils/clipboard-native.d.ts.map +1 -0
- package/dist/utils/clipboard-native.js +20 -0
- package/dist/utils/clipboard-native.js.map +1 -0
- package/dist/utils/clipboard.d.ts +4 -0
- package/dist/utils/clipboard.d.ts.map +1 -0
- package/dist/utils/clipboard.js +171 -0
- package/dist/utils/clipboard.js.map +1 -0
- package/dist/utils/deprecation.d.ts +4 -0
- package/dist/utils/deprecation.d.ts.map +1 -0
- package/dist/utils/deprecation.js +13 -0
- package/dist/utils/deprecation.js.map +1 -0
- package/dist/utils/directory-completions.d.ts +5 -0
- package/dist/utils/directory-completions.d.ts.map +1 -0
- package/dist/utils/directory-completions.js +64 -0
- package/dist/utils/directory-completions.js.map +1 -0
- package/dist/utils/exif-orientation.d.ts +6 -0
- package/dist/utils/exif-orientation.d.ts.map +1 -0
- package/dist/utils/exif-orientation.js +166 -0
- package/dist/utils/exif-orientation.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +8 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +26 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/fs-watch.d.ts +5 -0
- package/dist/utils/fs-watch.d.ts.map +1 -0
- package/dist/utils/fs-watch.js +25 -0
- package/dist/utils/fs-watch.js.map +1 -0
- package/dist/utils/git.d.ts +27 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +237 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/grip-user-agent.d.ts +2 -0
- package/dist/utils/grip-user-agent.d.ts.map +1 -0
- package/dist/utils/grip-user-agent.js +5 -0
- package/dist/utils/grip-user-agent.js.map +1 -0
- package/dist/utils/html.d.ts +7 -0
- package/dist/utils/html.d.ts.map +1 -0
- package/dist/utils/html.js +40 -0
- package/dist/utils/html.js.map +1 -0
- package/dist/utils/image-convert.d.ts +12 -0
- package/dist/utils/image-convert.d.ts.map +1 -0
- package/dist/utils/image-convert.js +43 -0
- package/dist/utils/image-convert.js.map +1 -0
- package/dist/utils/image-process.d.ts +18 -0
- package/dist/utils/image-process.d.ts.map +1 -0
- package/dist/utils/image-process.js +83 -0
- package/dist/utils/image-process.js.map +1 -0
- package/dist/utils/image-resize-core.d.ts +30 -0
- package/dist/utils/image-resize-core.d.ts.map +1 -0
- package/dist/utils/image-resize-core.js +133 -0
- package/dist/utils/image-resize-core.js.map +1 -0
- package/dist/utils/image-resize-worker.d.ts +2 -0
- package/dist/utils/image-resize-worker.d.ts.map +1 -0
- package/dist/utils/image-resize-worker.js +31 -0
- package/dist/utils/image-resize-worker.js.map +1 -0
- package/dist/utils/image-resize.d.ts +19 -0
- package/dist/utils/image-resize.d.ts.map +1 -0
- package/dist/utils/image-resize.js +86 -0
- package/dist/utils/image-resize.js.map +1 -0
- package/dist/utils/json.d.ts +3 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +7 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/mime.d.ts +3 -0
- package/dist/utils/mime.d.ts.map +1 -0
- package/dist/utils/mime.js +110 -0
- package/dist/utils/mime.js.map +1 -0
- package/dist/utils/open-browser.d.ts +9 -0
- package/dist/utils/open-browser.d.ts.map +1 -0
- package/dist/utils/open-browser.js +22 -0
- package/dist/utils/open-browser.js.map +1 -0
- package/dist/utils/paths.d.ts +31 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +87 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/photon.d.ts +22 -0
- package/dist/utils/photon.d.ts.map +1 -0
- package/dist/utils/photon.js +126 -0
- package/dist/utils/photon.js.map +1 -0
- package/dist/utils/shell.d.ts +28 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +188 -0
- package/dist/utils/shell.js.map +1 -0
- package/dist/utils/sleep.d.ts +5 -0
- package/dist/utils/sleep.d.ts.map +1 -0
- package/dist/utils/sleep.js +17 -0
- package/dist/utils/sleep.js.map +1 -0
- package/dist/utils/syntax-highlight.d.ts +12 -0
- package/dist/utils/syntax-highlight.d.ts.map +1 -0
- package/dist/utils/syntax-highlight.js +125 -0
- package/dist/utils/syntax-highlight.js.map +1 -0
- package/dist/utils/tools-manager.d.ts +5 -0
- package/dist/utils/tools-manager.d.ts.map +1 -0
- package/dist/utils/tools-manager.js +329 -0
- package/dist/utils/tools-manager.js.map +1 -0
- package/dist/utils/version-check.d.ts +14 -0
- package/dist/utils/version-check.d.ts.map +1 -0
- package/dist/utils/version-check.js +91 -0
- package/dist/utils/version-check.js.map +1 -0
- package/dist/utils/windows-self-update.d.ts +3 -0
- package/dist/utils/windows-self-update.d.ts.map +1 -0
- package/dist/utils/windows-self-update.js +77 -0
- package/dist/utils/windows-self-update.js.map +1 -0
- package/docs/compaction.md +408 -0
- package/docs/custom-provider.md +714 -0
- package/docs/daemon-architecture.md +399 -0
- package/docs/daemon.md +112 -0
- package/docs/development.md +72 -0
- package/docs/docs.json +164 -0
- package/docs/extensions.md +2745 -0
- package/docs/hooks.md +85 -0
- package/docs/images/doom-extension.png +0 -0
- package/docs/images/exy.png +0 -0
- package/docs/images/interactive-mode.png +0 -0
- package/docs/images/tree-view.png +0 -0
- package/docs/index.md +77 -0
- package/docs/json.md +89 -0
- package/docs/keybindings.md +230 -0
- package/docs/lsp.md +499 -0
- package/docs/migrating-to-grip.md +18 -0
- package/docs/models.md +496 -0
- package/docs/packages.md +228 -0
- package/docs/prompt-templates.md +88 -0
- package/docs/providers.md +251 -0
- package/docs/quickstart.md +159 -0
- package/docs/rpc.md +1492 -0
- package/docs/rules.md +117 -0
- package/docs/sandbox.md +104 -0
- package/docs/sdk.md +360 -0
- package/docs/session-format.md +414 -0
- package/docs/sessions.md +137 -0
- package/docs/settings.md +372 -0
- package/docs/shell-aliases.md +13 -0
- package/docs/skills.md +246 -0
- package/docs/terminal-setup.md +112 -0
- package/docs/termux.md +112 -0
- package/docs/themes.md +295 -0
- package/docs/tmux.md +61 -0
- package/docs/tui.md +918 -0
- package/docs/usage.md +304 -0
- package/docs/windows.md +17 -0
- package/examples/README.md +29 -0
- package/examples/daemon-docker/Dockerfile +43 -0
- package/examples/daemon-docker/README.md +45 -0
- package/examples/extensions/README.md +208 -0
- package/examples/extensions/auto-commit-on-exit.ts +46 -0
- package/examples/extensions/bash-spawn-hook.ts +30 -0
- package/examples/extensions/bookmark.ts +50 -0
- package/examples/extensions/border-status-editor.ts +145 -0
- package/examples/extensions/built-in-tool-renderer.ts +259 -0
- package/examples/extensions/claude-rules.ts +86 -0
- package/examples/extensions/commands.ts +82 -0
- package/examples/extensions/confirm-destructive.ts +59 -0
- package/examples/extensions/custom-compaction.ts +131 -0
- package/examples/extensions/custom-footer.ts +79 -0
- package/examples/extensions/custom-header.ts +73 -0
- package/examples/extensions/custom-provider-anthropic/index.ts +707 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
- package/examples/extensions/custom-provider-anthropic/package.json +19 -0
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +402 -0
- package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +104 -0
- package/examples/extensions/dirty-repo-guard.ts +59 -0
- package/examples/extensions/doom-overlay/README.md +46 -0
- package/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
- package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
- package/examples/extensions/doom-overlay/doom/build.sh +152 -0
- package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
- package/examples/extensions/doom-overlay/doom-component.ts +133 -0
- package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
- package/examples/extensions/doom-overlay/doom-keys.ts +104 -0
- package/examples/extensions/doom-overlay/index.ts +74 -0
- package/examples/extensions/doom-overlay/wad-finder.ts +51 -0
- package/examples/extensions/dynamic-resources/RULES.md +8 -0
- package/examples/extensions/dynamic-resources/SKILL.md +8 -0
- package/examples/extensions/dynamic-resources/dynamic.json +79 -0
- package/examples/extensions/dynamic-resources/dynamic.md +5 -0
- package/examples/extensions/dynamic-resources/index.ts +16 -0
- package/examples/extensions/dynamic-tools.ts +74 -0
- package/examples/extensions/event-bus.ts +43 -0
- package/examples/extensions/file-trigger.ts +41 -0
- package/examples/extensions/git-checkpoint.ts +53 -0
- package/examples/extensions/git-merge-and-resolve.ts +125 -0
- package/examples/extensions/github-issue-autocomplete.ts +191 -0
- package/examples/extensions/handoff.ts +191 -0
- package/examples/extensions/hello.ts +26 -0
- package/examples/extensions/hidden-thinking-label.ts +53 -0
- package/examples/extensions/inline-bash.ts +104 -0
- package/examples/extensions/input-transform.ts +43 -0
- package/examples/extensions/interactive-shell.ts +194 -0
- package/examples/extensions/mac-system-theme.ts +47 -0
- package/examples/extensions/message-renderer.ts +59 -0
- package/examples/extensions/minimal-mode.ts +428 -0
- package/examples/extensions/modal-editor.ts +86 -0
- package/examples/extensions/model-status.ts +31 -0
- package/examples/extensions/notify.ts +55 -0
- package/examples/extensions/overlay-qa-tests.ts +1374 -0
- package/examples/extensions/overlay-test.ts +171 -0
- package/examples/extensions/permission-gate.ts +34 -0
- package/examples/extensions/pirate.ts +47 -0
- package/examples/extensions/plan-mode/README.md +65 -0
- package/examples/extensions/plan-mode/index.ts +346 -0
- package/examples/extensions/plan-mode/utils.ts +172 -0
- package/examples/extensions/preset.ts +426 -0
- package/examples/extensions/prompt-customizer.ts +97 -0
- package/examples/extensions/protected-paths.ts +29 -0
- package/examples/extensions/provider-payload.ts +18 -0
- package/examples/extensions/qna.ts +125 -0
- package/examples/extensions/question.ts +294 -0
- package/examples/extensions/questionnaire.ts +459 -0
- package/examples/extensions/rainbow-editor.ts +88 -0
- package/examples/extensions/reload-runtime.ts +37 -0
- package/examples/extensions/rpc-demo.ts +118 -0
- package/examples/extensions/sandbox/index.ts +320 -0
- package/examples/extensions/sandbox/package-lock.json +92 -0
- package/examples/extensions/sandbox/package.json +19 -0
- package/examples/extensions/send-user-message.ts +97 -0
- package/examples/extensions/session-name.ts +27 -0
- package/examples/extensions/shutdown-command.ts +63 -0
- package/examples/extensions/snake.ts +381 -0
- package/examples/extensions/space-invaders.ts +597 -0
- package/examples/extensions/status-line.ts +32 -0
- package/examples/extensions/structured-output.ts +65 -0
- package/examples/extensions/subagent/README.md +175 -0
- package/examples/extensions/subagent/agents/planner.md +37 -0
- package/examples/extensions/subagent/agents/reviewer.md +35 -0
- package/examples/extensions/subagent/agents/scout.md +50 -0
- package/examples/extensions/subagent/agents/worker.md +24 -0
- package/examples/extensions/subagent/agents.ts +126 -0
- package/examples/extensions/subagent/index.ts +1083 -0
- package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
- package/examples/extensions/subagent/prompts/implement.md +10 -0
- package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
- package/examples/extensions/summarize.ts +186 -0
- package/examples/extensions/system-prompt-header.ts +17 -0
- package/examples/extensions/tic-tac-toe.ts +1091 -0
- package/examples/extensions/timed-confirm.ts +70 -0
- package/examples/extensions/titlebar-spinner.ts +58 -0
- package/examples/extensions/todo.ts +306 -0
- package/examples/extensions/tool-override.ts +144 -0
- package/examples/extensions/tools.ts +141 -0
- package/examples/extensions/trigger-compact.ts +50 -0
- package/examples/extensions/truncated-tool.ts +200 -0
- package/examples/extensions/widget-placement.ts +9 -0
- package/examples/extensions/with-deps/index.ts +32 -0
- package/examples/extensions/with-deps/package-lock.json +31 -0
- package/examples/extensions/with-deps/package.json +22 -0
- package/examples/extensions/working-indicator.ts +123 -0
- package/examples/extensions/working-message-test.ts +25 -0
- package/examples/remote-session-server/README.md +71 -0
- package/examples/remote-session-server/server.ts +353 -0
- package/examples/rpc-extension-ui.ts +642 -0
- package/examples/sdk/01-minimal.ts +27 -0
- package/examples/sdk/02-custom-model.ts +54 -0
- package/examples/sdk/03-custom-prompt.ts +76 -0
- package/examples/sdk/04-skills.ts +60 -0
- package/examples/sdk/05-tools.ts +55 -0
- package/examples/sdk/06-extensions.ts +94 -0
- package/examples/sdk/07-context-files.ts +47 -0
- package/examples/sdk/08-prompt-templates.ts +56 -0
- package/examples/sdk/09-api-keys-and-oauth.ts +50 -0
- package/examples/sdk/10-settings.ts +58 -0
- package/examples/sdk/11-sessions.ts +54 -0
- package/examples/sdk/12-full-control.ts +79 -0
- package/examples/sdk/13-session-runtime.ts +49 -0
- package/examples/sdk/README.md +94 -0
- package/npm-shrinkwrap.json +1878 -0
- package/package.json +101 -5
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { createBranchSummaryMessage, createCompactionSummaryMessage, createCustomMessage, normalizeMessageContent, } from "../messages.js";
|
|
2
|
+
export function getLatestCompactionEntry(entries) {
|
|
3
|
+
for (let i = entries.length - 1; i >= 0; i--) {
|
|
4
|
+
if (entries[i].type === "compaction") {
|
|
5
|
+
return entries[i];
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
/** Project one persisted session entry into runtime context messages. */
|
|
11
|
+
export function sessionEntryToContextMessages(entry) {
|
|
12
|
+
if (entry.type === "message") {
|
|
13
|
+
return [normalizeMessageContent(entry.message)];
|
|
14
|
+
}
|
|
15
|
+
if (entry.type === "custom_message") {
|
|
16
|
+
return [createCustomMessage(entry.customType, entry.content, entry.display, entry.details, entry.timestamp)];
|
|
17
|
+
}
|
|
18
|
+
if (entry.type === "branch_summary" && entry.summary) {
|
|
19
|
+
return [createBranchSummaryMessage(entry.summary, entry.fromId, entry.timestamp)];
|
|
20
|
+
}
|
|
21
|
+
if (entry.type === "compaction" && entry.summary) {
|
|
22
|
+
return [createCompactionSummaryMessage(entry.summary, entry.tokensBefore, entry.timestamp)];
|
|
23
|
+
}
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
function traceSessionPath(leaf, byId) {
|
|
27
|
+
const path = [];
|
|
28
|
+
let current = leaf;
|
|
29
|
+
while (current) {
|
|
30
|
+
path.unshift(current);
|
|
31
|
+
current = current.parentId ? byId.get(current.parentId) : undefined;
|
|
32
|
+
}
|
|
33
|
+
return path;
|
|
34
|
+
}
|
|
35
|
+
function inspectSessionPath(path) {
|
|
36
|
+
let thinkingLevel = "off";
|
|
37
|
+
let model = null;
|
|
38
|
+
for (const entry of path) {
|
|
39
|
+
switch (entry.type) {
|
|
40
|
+
case "thinking_level_change":
|
|
41
|
+
thinkingLevel = entry.thinkingLevel;
|
|
42
|
+
break;
|
|
43
|
+
case "model_change":
|
|
44
|
+
model = { provider: entry.provider, modelId: entry.modelId };
|
|
45
|
+
break;
|
|
46
|
+
case "message":
|
|
47
|
+
if (entry.message.role === "assistant") {
|
|
48
|
+
model = { provider: entry.message.provider, modelId: entry.message.model };
|
|
49
|
+
}
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return { thinkingLevel, model };
|
|
54
|
+
}
|
|
55
|
+
function applyCompressionReplacement(visible, entry) {
|
|
56
|
+
if (entry.type !== "custom_message" || entry.customType !== "compress_context")
|
|
57
|
+
return false;
|
|
58
|
+
const details = entry.details;
|
|
59
|
+
if (!details ||
|
|
60
|
+
typeof details !== "object" ||
|
|
61
|
+
!("replacementVersion" in details) ||
|
|
62
|
+
details.replacementVersion !== 1)
|
|
63
|
+
return false;
|
|
64
|
+
const startEntryId = "startEntryId" in details ? details.startEntryId : undefined;
|
|
65
|
+
const endEntryId = "endEntryId" in details ? details.endEntryId : undefined;
|
|
66
|
+
if (typeof startEntryId !== "string" || typeof endEntryId !== "string")
|
|
67
|
+
return false;
|
|
68
|
+
const startIndex = visible.findIndex((candidate) => candidate.id === startEntryId);
|
|
69
|
+
const endIndex = visible.findIndex((candidate) => candidate.id === endEntryId);
|
|
70
|
+
if (startIndex < 0 || endIndex < startIndex)
|
|
71
|
+
return false;
|
|
72
|
+
visible.splice(startIndex, endIndex - startIndex + 1, entry);
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
/** Return entries in model-visible order, applying append-only range replacements at their declared positions. */
|
|
76
|
+
export function projectSessionContextEntries(path) {
|
|
77
|
+
const compaction = getLatestCompactionEntry(path);
|
|
78
|
+
const compactionIndex = compaction ? path.findIndex((entry) => entry.id === compaction.id) : -1;
|
|
79
|
+
const firstKeptIndex = compaction
|
|
80
|
+
? path.findIndex((entry, index) => index < compactionIndex && entry.id === compaction.firstKeptEntryId)
|
|
81
|
+
: -1;
|
|
82
|
+
const ordered = compaction
|
|
83
|
+
? [
|
|
84
|
+
compaction,
|
|
85
|
+
...(firstKeptIndex < 0 ? [] : path.slice(firstKeptIndex, compactionIndex)),
|
|
86
|
+
...path.slice(compactionIndex + 1),
|
|
87
|
+
]
|
|
88
|
+
: path;
|
|
89
|
+
const visible = [];
|
|
90
|
+
for (const entry of ordered) {
|
|
91
|
+
if (entry.type === "compaction" && entry.id !== compaction?.id)
|
|
92
|
+
continue;
|
|
93
|
+
if (applyCompressionReplacement(visible, entry))
|
|
94
|
+
continue;
|
|
95
|
+
visible.push(entry);
|
|
96
|
+
}
|
|
97
|
+
return visible;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Build the session context from entries using tree traversal.
|
|
101
|
+
* If leafId is provided, walks from that entry to root.
|
|
102
|
+
* Handles compaction and branch summaries along the path.
|
|
103
|
+
*/
|
|
104
|
+
export function buildSessionContext(entries, leafId, byId) {
|
|
105
|
+
if (leafId === null)
|
|
106
|
+
return { messages: [], thinkingLevel: "off", model: null };
|
|
107
|
+
const entriesById = byId ?? new Map(entries.map((entry) => [entry.id, entry]));
|
|
108
|
+
const requestedLeaf = leafId ? entriesById.get(leafId) : undefined;
|
|
109
|
+
const leaf = requestedLeaf ?? entries[entries.length - 1];
|
|
110
|
+
if (!leaf)
|
|
111
|
+
return { messages: [], thinkingLevel: "off", model: null };
|
|
112
|
+
const path = traceSessionPath(leaf, entriesById);
|
|
113
|
+
const { thinkingLevel, model } = inspectSessionPath(path);
|
|
114
|
+
const messages = projectSessionContextEntries(path).flatMap(sessionEntryToContextMessages);
|
|
115
|
+
return { messages, thinkingLevel, model };
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/core/session/context.ts"],"names":[],"mappings":"AACA,OAAO,EACN,0BAA0B,EAC1B,8BAA8B,EAC9B,mBAAmB,EACnB,uBAAuB,GACvB,MAAM,gBAAgB,CAAC;AAGxB,MAAM,UAAU,wBAAwB,CAAC,OAAuB,EAA0B;IACzF,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACtC,OAAO,OAAO,CAAC,CAAC,CAAoB,CAAC;QACtC,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AAAA,CACZ;AAED,yEAAyE;AACzE,MAAM,UAAU,6BAA6B,CAAC,KAAmB,EAAkB;IAClF,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,CAAC,uBAAuB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACrC,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9G,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACtD,OAAO,CAAC,0BAA0B,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IACnF,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClD,OAAO,CAAC,8BAA8B,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,EAAE,CAAC;AAAA,CACV;AAQD,SAAS,gBAAgB,CAAC,IAAkB,EAAE,IAA+B,EAAkB;IAC9F,MAAM,IAAI,GAAmB,EAAE,CAAC;IAChC,IAAI,OAAO,GAA6B,IAAI,CAAC;IAC7C,OAAO,OAAO,EAAE,CAAC;QAChB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACtB,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,CAAC;IACD,OAAO,IAAI,CAAC;AAAA,CACZ;AAED,SAAS,kBAAkB,CAAC,IAAoB,EAAoB;IACnE,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,KAAK,GAA4B,IAAI,CAAC;IAC1C,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;QAC1B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,uBAAuB;gBAC3B,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;gBACpC,MAAM;YACP,KAAK,cAAc;gBAClB,KAAK,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC7D,MAAM;YACP,KAAK,SAAS;gBACb,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBACxC,KAAK,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC5E,CAAC;gBACD,MAAM;QACR,CAAC;IACF,CAAC;IACD,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AAAA,CAChC;AACD,SAAS,2BAA2B,CAAC,OAAuB,EAAE,KAAmB,EAAW;IAC3F,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,IAAI,KAAK,CAAC,UAAU,KAAK,kBAAkB;QAAE,OAAO,KAAK,CAAC;IAC7F,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,IACC,CAAC,OAAO;QACR,OAAO,OAAO,KAAK,QAAQ;QAC3B,CAAC,CAAC,oBAAoB,IAAI,OAAO,CAAC;QAClC,OAAO,CAAC,kBAAkB,KAAK,CAAC;QAEhC,OAAO,KAAK,CAAC;IACd,MAAM,YAAY,GAAG,cAAc,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;IAClF,MAAM,UAAU,GAAG,YAAY,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5E,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,OAAO,UAAU,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACrF,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC;IACnF,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;IAC/E,IAAI,UAAU,GAAG,CAAC,IAAI,QAAQ,GAAG,UAAU;QAAE,OAAO,KAAK,CAAC;IAC1D,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,GAAG,UAAU,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7D,OAAO,IAAI,CAAC;AAAA,CACZ;AAED,kHAAkH;AAClH,MAAM,UAAU,4BAA4B,CAAC,IAAoB,EAAkB;IAClF,MAAM,UAAU,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,eAAe,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChG,MAAM,cAAc,GAAG,UAAU;QAChC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,eAAe,IAAI,KAAK,CAAC,EAAE,KAAK,UAAU,CAAC,gBAAgB,CAAC;QACvG,CAAC,CAAC,CAAC,CAAC,CAAC;IACN,MAAM,OAAO,GAAG,UAAU;QACzB,CAAC,CAAC;YACA,UAAU;YACV,GAAG,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;YAC1E,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,CAAC,CAAC;SAClC;QACF,CAAC,CAAC,IAAI,CAAC;IACR,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,EAAE,KAAK,UAAU,EAAE,EAAE;YAAE,SAAS;QACzE,IAAI,2BAA2B,CAAC,OAAO,EAAE,KAAK,CAAC;YAAE,SAAS;QAC1D,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,OAAO,CAAC;AAAA,CACf;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAClC,OAAuB,EACvB,MAAsB,EACtB,IAAgC,EACf;IACjB,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAEhF,MAAM,WAAW,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/E,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,MAAM,IAAI,GAAG,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC1D,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAEtE,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACjD,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;IAC3F,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AAAA,CAC1C","sourcesContent":["import type { AgentMessage } from \"@greppleai/grip-agent-core\";\nimport {\n\tcreateBranchSummaryMessage,\n\tcreateCompactionSummaryMessage,\n\tcreateCustomMessage,\n\tnormalizeMessageContent,\n} from \"../messages.ts\";\nimport type { CompactionEntry, SessionContext, SessionEntry } from \"./types.ts\";\n\nexport function getLatestCompactionEntry(entries: SessionEntry[]): CompactionEntry | null {\n\tfor (let i = entries.length - 1; i >= 0; i--) {\n\t\tif (entries[i].type === \"compaction\") {\n\t\t\treturn entries[i] as CompactionEntry;\n\t\t}\n\t}\n\treturn null;\n}\n\n/** Project one persisted session entry into runtime context messages. */\nexport function sessionEntryToContextMessages(entry: SessionEntry): AgentMessage[] {\n\tif (entry.type === \"message\") {\n\t\treturn [normalizeMessageContent(entry.message)];\n\t}\n\tif (entry.type === \"custom_message\") {\n\t\treturn [createCustomMessage(entry.customType, entry.content, entry.display, entry.details, entry.timestamp)];\n\t}\n\tif (entry.type === \"branch_summary\" && entry.summary) {\n\t\treturn [createBranchSummaryMessage(entry.summary, entry.fromId, entry.timestamp)];\n\t}\n\tif (entry.type === \"compaction\" && entry.summary) {\n\t\treturn [createCompactionSummaryMessage(entry.summary, entry.tokensBefore, entry.timestamp)];\n\t}\n\treturn [];\n}\n\n// grip-ignore noNearIdenticalDataStructures: Coding-agent persisted entries and agent harness storage entries use package-owned context pipelines that evolve independently.\ninterface SessionPathState {\n\tthinkingLevel: string;\n\tmodel: SessionContext[\"model\"];\n}\n\nfunction traceSessionPath(leaf: SessionEntry, byId: Map<string, SessionEntry>): SessionEntry[] {\n\tconst path: SessionEntry[] = [];\n\tlet current: SessionEntry | undefined = leaf;\n\twhile (current) {\n\t\tpath.unshift(current);\n\t\tcurrent = current.parentId ? byId.get(current.parentId) : undefined;\n\t}\n\treturn path;\n}\n\nfunction inspectSessionPath(path: SessionEntry[]): SessionPathState {\n\tlet thinkingLevel = \"off\";\n\tlet model: SessionContext[\"model\"] = null;\n\tfor (const entry of path) {\n\t\tswitch (entry.type) {\n\t\t\tcase \"thinking_level_change\":\n\t\t\t\tthinkingLevel = entry.thinkingLevel;\n\t\t\t\tbreak;\n\t\t\tcase \"model_change\":\n\t\t\t\tmodel = { provider: entry.provider, modelId: entry.modelId };\n\t\t\t\tbreak;\n\t\t\tcase \"message\":\n\t\t\t\tif (entry.message.role === \"assistant\") {\n\t\t\t\t\tmodel = { provider: entry.message.provider, modelId: entry.message.model };\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\treturn { thinkingLevel, model };\n}\nfunction applyCompressionReplacement(visible: SessionEntry[], entry: SessionEntry): boolean {\n\tif (entry.type !== \"custom_message\" || entry.customType !== \"compress_context\") return false;\n\tconst details = entry.details;\n\tif (\n\t\t!details ||\n\t\ttypeof details !== \"object\" ||\n\t\t!(\"replacementVersion\" in details) ||\n\t\tdetails.replacementVersion !== 1\n\t)\n\t\treturn false;\n\tconst startEntryId = \"startEntryId\" in details ? details.startEntryId : undefined;\n\tconst endEntryId = \"endEntryId\" in details ? details.endEntryId : undefined;\n\tif (typeof startEntryId !== \"string\" || typeof endEntryId !== \"string\") return false;\n\tconst startIndex = visible.findIndex((candidate) => candidate.id === startEntryId);\n\tconst endIndex = visible.findIndex((candidate) => candidate.id === endEntryId);\n\tif (startIndex < 0 || endIndex < startIndex) return false;\n\tvisible.splice(startIndex, endIndex - startIndex + 1, entry);\n\treturn true;\n}\n\n/** Return entries in model-visible order, applying append-only range replacements at their declared positions. */\nexport function projectSessionContextEntries(path: SessionEntry[]): SessionEntry[] {\n\tconst compaction = getLatestCompactionEntry(path);\n\tconst compactionIndex = compaction ? path.findIndex((entry) => entry.id === compaction.id) : -1;\n\tconst firstKeptIndex = compaction\n\t\t? path.findIndex((entry, index) => index < compactionIndex && entry.id === compaction.firstKeptEntryId)\n\t\t: -1;\n\tconst ordered = compaction\n\t\t? [\n\t\t\t\tcompaction,\n\t\t\t\t...(firstKeptIndex < 0 ? [] : path.slice(firstKeptIndex, compactionIndex)),\n\t\t\t\t...path.slice(compactionIndex + 1),\n\t\t\t]\n\t\t: path;\n\tconst visible: SessionEntry[] = [];\n\tfor (const entry of ordered) {\n\t\tif (entry.type === \"compaction\" && entry.id !== compaction?.id) continue;\n\t\tif (applyCompressionReplacement(visible, entry)) continue;\n\t\tvisible.push(entry);\n\t}\n\treturn visible;\n}\n\n/**\n * Build the session context from entries using tree traversal.\n * If leafId is provided, walks from that entry to root.\n * Handles compaction and branch summaries along the path.\n */\nexport function buildSessionContext(\n\tentries: SessionEntry[],\n\tleafId?: string | null,\n\tbyId?: Map<string, SessionEntry>,\n): SessionContext {\n\tif (leafId === null) return { messages: [], thinkingLevel: \"off\", model: null };\n\n\tconst entriesById = byId ?? new Map(entries.map((entry) => [entry.id, entry]));\n\tconst requestedLeaf = leafId ? entriesById.get(leafId) : undefined;\n\tconst leaf = requestedLeaf ?? entries[entries.length - 1];\n\tif (!leaf) return { messages: [], thinkingLevel: \"off\", model: null };\n\n\tconst path = traceSessionPath(leaf, entriesById);\n\tconst { thinkingLevel, model } = inspectSessionPath(path);\n\tconst messages = projectSessionContextEntries(path).flatMap(sessionEntryToContextMessages);\n\treturn { messages, thinkingLevel, model };\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
interface SessionEntryIdLookup {
|
|
2
|
+
has(id: string): boolean;
|
|
3
|
+
}
|
|
4
|
+
export declare function validateSessionId(id: string): void;
|
|
5
|
+
export declare function createSessionId(): string;
|
|
6
|
+
/** Generate a unique short ID (8 hex chars, collision-checked). */
|
|
7
|
+
export declare function generateId(byId: SessionEntryIdLookup): string;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=ids.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../../src/core/session/ids.ts"],"names":[],"mappings":"AAKA,UAAU,oBAAoB;IAC7B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAMlD;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,mEAAmE;AACnE,wBAAgB,UAAU,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,CAM7D","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { uuidv7 } from \"@greppleai/grip-agent-core\";\n\nconst SESSION_ID_PATTERN = /^[A-Za-z0-9](?:[A-Za-z0-9._-]*[A-Za-z0-9])?$/;\n\ninterface SessionEntryIdLookup {\n\thas(id: string): boolean;\n}\n\nexport function validateSessionId(id: string): void {\n\tif (!SESSION_ID_PATTERN.test(id)) {\n\t\tthrow new Error(\n\t\t\t\"Session id must be non-empty, contain only alphanumeric characters, '-', '_', and '.', and start and end with an alphanumeric character\",\n\t\t);\n\t}\n}\n\nexport function createSessionId(): string {\n\treturn uuidv7();\n}\n\n/** Generate a unique short ID (8 hex chars, collision-checked). */\nexport function generateId(byId: SessionEntryIdLookup): string {\n\tfor (let i = 0; i < 100; i++) {\n\t\tconst id = randomUUID().slice(0, 8);\n\t\tif (!byId.has(id)) return id;\n\t}\n\treturn randomUUID();\n}\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { uuidv7 } from "@greppleai/grip-agent-core";
|
|
3
|
+
const SESSION_ID_PATTERN = /^[A-Za-z0-9](?:[A-Za-z0-9._-]*[A-Za-z0-9])?$/;
|
|
4
|
+
export function validateSessionId(id) {
|
|
5
|
+
if (!SESSION_ID_PATTERN.test(id)) {
|
|
6
|
+
throw new Error("Session id must be non-empty, contain only alphanumeric characters, '-', '_', and '.', and start and end with an alphanumeric character");
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export function createSessionId() {
|
|
10
|
+
return uuidv7();
|
|
11
|
+
}
|
|
12
|
+
/** Generate a unique short ID (8 hex chars, collision-checked). */
|
|
13
|
+
export function generateId(byId) {
|
|
14
|
+
for (let i = 0; i < 100; i++) {
|
|
15
|
+
const id = randomUUID().slice(0, 8);
|
|
16
|
+
if (!byId.has(id))
|
|
17
|
+
return id;
|
|
18
|
+
}
|
|
19
|
+
return randomUUID();
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=ids.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ids.js","sourceRoot":"","sources":["../../../src/core/session/ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEpD,MAAM,kBAAkB,GAAG,8CAA8C,CAAC;AAM1E,MAAM,UAAU,iBAAiB,CAAC,EAAU,EAAQ;IACnD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACd,yIAAyI,CACzI,CAAC;IACH,CAAC;AAAA,CACD;AAED,MAAM,UAAU,eAAe,GAAW;IACzC,OAAO,MAAM,EAAE,CAAC;AAAA,CAChB;AAED,mEAAmE;AACnE,MAAM,UAAU,UAAU,CAAC,IAA0B,EAAU;IAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO,UAAU,EAAE,CAAC;AAAA,CACpB","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { uuidv7 } from \"@greppleai/grip-agent-core\";\n\nconst SESSION_ID_PATTERN = /^[A-Za-z0-9](?:[A-Za-z0-9._-]*[A-Za-z0-9])?$/;\n\ninterface SessionEntryIdLookup {\n\thas(id: string): boolean;\n}\n\nexport function validateSessionId(id: string): void {\n\tif (!SESSION_ID_PATTERN.test(id)) {\n\t\tthrow new Error(\n\t\t\t\"Session id must be non-empty, contain only alphanumeric characters, '-', '_', and '.', and start and end with an alphanumeric character\",\n\t\t);\n\t}\n}\n\nexport function createSessionId(): string {\n\treturn uuidv7();\n}\n\n/** Generate a unique short ID (8 hex chars, collision-checked). */\nexport function generateId(byId: SessionEntryIdLookup): string {\n\tfor (let i = 0; i < 100; i++) {\n\t\tconst id = randomUUID().slice(0, 8);\n\t\tif (!byId.has(id)) return id;\n\t}\n\treturn randomUUID();\n}\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { InMemorySession } from "./in-memory-session.ts";
|
|
2
|
+
import type { Session } from "./session.ts";
|
|
3
|
+
import type { OpenSessionOptions, SessionManager } from "./session-manager.ts";
|
|
4
|
+
import type { NewSessionOptions, SessionInfo, SessionListProgress } from "./types.ts";
|
|
5
|
+
export declare class InMemorySessionManager implements SessionManager {
|
|
6
|
+
private readonly cwd;
|
|
7
|
+
constructor(cwd?: string);
|
|
8
|
+
create(options?: NewSessionOptions): InMemorySession;
|
|
9
|
+
openReference(_reference: string, _options?: OpenSessionOptions): InMemorySession;
|
|
10
|
+
continueRecent(): InMemorySession;
|
|
11
|
+
forkFrom(_reference: string): InMemorySession;
|
|
12
|
+
forkSession(source: Session, targetLeafId: string | null): Session;
|
|
13
|
+
importJsonl(_inputPath: string, _options?: OpenSessionOptions): InMemorySession;
|
|
14
|
+
list(_onProgress?: SessionListProgress): Promise<SessionInfo[]>;
|
|
15
|
+
listAll(_onProgress?: SessionListProgress): Promise<SessionInfo[]>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=in-memory-session-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-session-manager.d.ts","sourceRoot":"","sources":["../../../src/core/session/in-memory-session-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtF,qBAAa,sBAAuB,YAAW,cAAc;IAC5D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAE7B,YAAY,GAAG,GAAE,MAAsB,EAEtC;IAED,MAAM,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,eAAe,CAMnD;IAED,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,kBAAkB,GAAG,eAAe,CAEhF;IAED,cAAc,IAAI,eAAe,CAEhC;IAED,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,CAE5C;IAED,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAMjE;IAED,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,kBAAkB,GAAG,eAAe,CAE9E;IAEK,IAAI,CAAC,WAAW,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAEpE;IAEK,OAAO,CAAC,WAAW,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAEvE;CACD","sourcesContent":["import { InMemorySession } from \"./in-memory-session.ts\";\nimport type { Session } from \"./session.ts\";\nimport type { OpenSessionOptions, SessionManager } from \"./session-manager.ts\";\nimport type { NewSessionOptions, SessionInfo, SessionListProgress } from \"./types.ts\";\n\nexport class InMemorySessionManager implements SessionManager {\n\tprivate readonly cwd: string;\n\n\tconstructor(cwd: string = process.cwd()) {\n\t\tthis.cwd = cwd;\n\t}\n\n\tcreate(options?: NewSessionOptions): InMemorySession {\n\t\tconst session = new InMemorySession(this.cwd, this);\n\t\tif (options?.id || options?.parentSession) {\n\t\t\tsession.newSession(options);\n\t\t}\n\t\treturn session;\n\t}\n\n\topenReference(_reference: string, _options?: OpenSessionOptions): InMemorySession {\n\t\treturn this.create();\n\t}\n\n\tcontinueRecent(): InMemorySession {\n\t\treturn this.create();\n\t}\n\n\tforkFrom(_reference: string): InMemorySession {\n\t\treturn this.create();\n\t}\n\n\tforkSession(source: Session, targetLeafId: string | null): Session {\n\t\tconst session = this.create({ parentSession: source.getSessionReference() });\n\t\tif (targetLeafId) {\n\t\t\tsession.copyBranchFrom(source, targetLeafId, source.getSessionReference());\n\t\t}\n\t\treturn session;\n\t}\n\n\timportJsonl(_inputPath: string, _options?: OpenSessionOptions): InMemorySession {\n\t\tthrow new Error(\"Importing JSONL sessions is not supported by in-memory sessions\");\n\t}\n\n\tasync list(_onProgress?: SessionListProgress): Promise<SessionInfo[]> {\n\t\treturn [];\n\t}\n\n\tasync listAll(_onProgress?: SessionListProgress): Promise<SessionInfo[]> {\n\t\treturn [];\n\t}\n}\n"]}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { InMemorySession } from "./in-memory-session.js";
|
|
2
|
+
export class InMemorySessionManager {
|
|
3
|
+
cwd;
|
|
4
|
+
constructor(cwd = process.cwd()) {
|
|
5
|
+
this.cwd = cwd;
|
|
6
|
+
}
|
|
7
|
+
create(options) {
|
|
8
|
+
const session = new InMemorySession(this.cwd, this);
|
|
9
|
+
if (options?.id || options?.parentSession) {
|
|
10
|
+
session.newSession(options);
|
|
11
|
+
}
|
|
12
|
+
return session;
|
|
13
|
+
}
|
|
14
|
+
openReference(_reference, _options) {
|
|
15
|
+
return this.create();
|
|
16
|
+
}
|
|
17
|
+
continueRecent() {
|
|
18
|
+
return this.create();
|
|
19
|
+
}
|
|
20
|
+
forkFrom(_reference) {
|
|
21
|
+
return this.create();
|
|
22
|
+
}
|
|
23
|
+
forkSession(source, targetLeafId) {
|
|
24
|
+
const session = this.create({ parentSession: source.getSessionReference() });
|
|
25
|
+
if (targetLeafId) {
|
|
26
|
+
session.copyBranchFrom(source, targetLeafId, source.getSessionReference());
|
|
27
|
+
}
|
|
28
|
+
return session;
|
|
29
|
+
}
|
|
30
|
+
importJsonl(_inputPath, _options) {
|
|
31
|
+
throw new Error("Importing JSONL sessions is not supported by in-memory sessions");
|
|
32
|
+
}
|
|
33
|
+
async list(_onProgress) {
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
36
|
+
async listAll(_onProgress) {
|
|
37
|
+
return [];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=in-memory-session-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-session-manager.js","sourceRoot":"","sources":["../../../src/core/session/in-memory-session-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAKzD,MAAM,OAAO,sBAAsB;IACjB,GAAG,CAAS;IAE7B,YAAY,GAAG,GAAW,OAAO,CAAC,GAAG,EAAE,EAAE;QACxC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IAAA,CACf;IAED,MAAM,CAAC,OAA2B,EAAmB;QACpD,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,OAAO,EAAE,EAAE,IAAI,OAAO,EAAE,aAAa,EAAE,CAAC;YAC3C,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,OAAO,CAAC;IAAA,CACf;IAED,aAAa,CAAC,UAAkB,EAAE,QAA6B,EAAmB;QACjF,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IAAA,CACrB;IAED,cAAc,GAAoB;QACjC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IAAA,CACrB;IAED,QAAQ,CAAC,UAAkB,EAAmB;QAC7C,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IAAA,CACrB;IAED,WAAW,CAAC,MAAe,EAAE,YAA2B,EAAW;QAClE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAC7E,IAAI,YAAY,EAAE,CAAC;YAClB,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,mBAAmB,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,OAAO,CAAC;IAAA,CACf;IAED,WAAW,CAAC,UAAkB,EAAE,QAA6B,EAAmB;QAC/E,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IAAA,CACnF;IAED,KAAK,CAAC,IAAI,CAAC,WAAiC,EAA0B;QACrE,OAAO,EAAE,CAAC;IAAA,CACV;IAED,KAAK,CAAC,OAAO,CAAC,WAAiC,EAA0B;QACxE,OAAO,EAAE,CAAC;IAAA,CACV;CACD","sourcesContent":["import { InMemorySession } from \"./in-memory-session.ts\";\nimport type { Session } from \"./session.ts\";\nimport type { OpenSessionOptions, SessionManager } from \"./session-manager.ts\";\nimport type { NewSessionOptions, SessionInfo, SessionListProgress } from \"./types.ts\";\n\nexport class InMemorySessionManager implements SessionManager {\n\tprivate readonly cwd: string;\n\n\tconstructor(cwd: string = process.cwd()) {\n\t\tthis.cwd = cwd;\n\t}\n\n\tcreate(options?: NewSessionOptions): InMemorySession {\n\t\tconst session = new InMemorySession(this.cwd, this);\n\t\tif (options?.id || options?.parentSession) {\n\t\t\tsession.newSession(options);\n\t\t}\n\t\treturn session;\n\t}\n\n\topenReference(_reference: string, _options?: OpenSessionOptions): InMemorySession {\n\t\treturn this.create();\n\t}\n\n\tcontinueRecent(): InMemorySession {\n\t\treturn this.create();\n\t}\n\n\tforkFrom(_reference: string): InMemorySession {\n\t\treturn this.create();\n\t}\n\n\tforkSession(source: Session, targetLeafId: string | null): Session {\n\t\tconst session = this.create({ parentSession: source.getSessionReference() });\n\t\tif (targetLeafId) {\n\t\t\tsession.copyBranchFrom(source, targetLeafId, source.getSessionReference());\n\t\t}\n\t\treturn session;\n\t}\n\n\timportJsonl(_inputPath: string, _options?: OpenSessionOptions): InMemorySession {\n\t\tthrow new Error(\"Importing JSONL sessions is not supported by in-memory sessions\");\n\t}\n\n\tasync list(_onProgress?: SessionListProgress): Promise<SessionInfo[]> {\n\t\treturn [];\n\t}\n\n\tasync listAll(_onProgress?: SessionListProgress): Promise<SessionInfo[]> {\n\t\treturn [];\n\t}\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Session } from "./session.ts";
|
|
2
|
+
import type { SessionManager } from "./session-manager.ts";
|
|
3
|
+
export declare class InMemorySession extends Session {
|
|
4
|
+
constructor(cwd?: string, sessionManager?: SessionManager);
|
|
5
|
+
protected prepareNewSessionReference(_sessionDir: string, sessionId: string, _timestamp: string): string | undefined;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=in-memory-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-session.d.ts","sourceRoot":"","sources":["../../../src/core/session/in-memory-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D,qBAAa,eAAgB,SAAQ,OAAO;IAC3C,YAAY,GAAG,GAAE,MAAsB,EAAE,cAAc,CAAC,EAAE,cAAc,EAEvE;IAED,SAAS,CAAC,0BAA0B,CACnC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GAChB,MAAM,GAAG,SAAS,CAEpB;CACD","sourcesContent":["import { Session } from \"./session.ts\";\nimport type { SessionManager } from \"./session-manager.ts\";\nimport { InMemorySessionStore } from \"./stores/in-memory-session-store.ts\";\n\nexport class InMemorySession extends Session {\n\tconstructor(cwd: string = process.cwd(), sessionManager?: SessionManager) {\n\t\tsuper(cwd, \"\", undefined, new InMemorySessionStore(), sessionManager);\n\t}\n\n\tprotected prepareNewSessionReference(\n\t\t_sessionDir: string,\n\t\tsessionId: string,\n\t\t_timestamp: string,\n\t): string | undefined {\n\t\treturn `memory:${sessionId}`;\n\t}\n}\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Session } from "./session.js";
|
|
2
|
+
import { InMemorySessionStore } from "./stores/in-memory-session-store.js";
|
|
3
|
+
export class InMemorySession extends Session {
|
|
4
|
+
constructor(cwd = process.cwd(), sessionManager) {
|
|
5
|
+
super(cwd, "", undefined, new InMemorySessionStore(), sessionManager);
|
|
6
|
+
}
|
|
7
|
+
prepareNewSessionReference(_sessionDir, sessionId, _timestamp) {
|
|
8
|
+
return `memory:${sessionId}`;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=in-memory-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-session.js","sourceRoot":"","sources":["../../../src/core/session/in-memory-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAE3E,MAAM,OAAO,eAAgB,SAAQ,OAAO;IAC3C,YAAY,GAAG,GAAW,OAAO,CAAC,GAAG,EAAE,EAAE,cAA+B,EAAE;QACzE,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,oBAAoB,EAAE,EAAE,cAAc,CAAC,CAAC;IAAA,CACtE;IAES,0BAA0B,CACnC,WAAmB,EACnB,SAAiB,EACjB,UAAkB,EACG;QACrB,OAAO,UAAU,SAAS,EAAE,CAAC;IAAA,CAC7B;CACD","sourcesContent":["import { Session } from \"./session.ts\";\nimport type { SessionManager } from \"./session-manager.ts\";\nimport { InMemorySessionStore } from \"./stores/in-memory-session-store.ts\";\n\nexport class InMemorySession extends Session {\n\tconstructor(cwd: string = process.cwd(), sessionManager?: SessionManager) {\n\t\tsuper(cwd, \"\", undefined, new InMemorySessionStore(), sessionManager);\n\t}\n\n\tprotected prepareNewSessionReference(\n\t\t_sessionDir: string,\n\t\tsessionId: string,\n\t\t_timestamp: string,\n\t): string | undefined {\n\t\treturn `memory:${sessionId}`;\n\t}\n}\n"]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export type JsonlDecodeKind = "utf8" | "syntax" | "schema" | "state";
|
|
2
|
+
export type JsonlErrorPhase = "create" | "append" | "fork" | "open" | "repair" | "migrate" | "list" | "import" | "replace" | "sync";
|
|
3
|
+
export type JsonlWriteOutcome = "not_written" | "unknown" | "published";
|
|
4
|
+
/** Path-independent JSONL decoding failure. Storage boundaries attach location and operation context. */
|
|
5
|
+
export declare class JsonlDecodeError extends Error {
|
|
6
|
+
readonly decodeKind: JsonlDecodeKind;
|
|
7
|
+
/** Compatibility alias for path-independent codec consumers. */
|
|
8
|
+
readonly kind: JsonlDecodeKind;
|
|
9
|
+
constructor(decodeKind: JsonlDecodeKind, message: string, cause?: Error);
|
|
10
|
+
}
|
|
11
|
+
export type JsonlSessionErrorCode = "invalid_jsonl" | "storage" | "fenced";
|
|
12
|
+
export interface JsonlSessionErrorOptions {
|
|
13
|
+
code: JsonlSessionErrorCode;
|
|
14
|
+
reference: string;
|
|
15
|
+
phase: JsonlErrorPhase;
|
|
16
|
+
message: string;
|
|
17
|
+
line?: number;
|
|
18
|
+
byteOffset?: number;
|
|
19
|
+
decodeKind?: JsonlDecodeKind;
|
|
20
|
+
outcome?: JsonlWriteOutcome;
|
|
21
|
+
cause?: Error;
|
|
22
|
+
}
|
|
23
|
+
/** Actionable local JSONL error with location, phase, decoding, and write-outcome context. */
|
|
24
|
+
export declare class JsonlSessionError extends Error {
|
|
25
|
+
readonly code: JsonlSessionErrorCode;
|
|
26
|
+
readonly reference: string;
|
|
27
|
+
readonly path: string;
|
|
28
|
+
readonly phase: JsonlErrorPhase;
|
|
29
|
+
readonly line?: number;
|
|
30
|
+
readonly byteOffset?: number;
|
|
31
|
+
readonly decodeKind?: JsonlDecodeKind;
|
|
32
|
+
readonly outcome?: JsonlWriteOutcome;
|
|
33
|
+
constructor(options: JsonlSessionErrorOptions);
|
|
34
|
+
}
|
|
35
|
+
export declare function createJsonlSessionDecodeError(reference: string, phase: JsonlErrorPhase, decodeKind: JsonlDecodeKind, message: string, line?: number, byteOffset?: number): JsonlSessionError;
|
|
36
|
+
//# sourceMappingURL=jsonl-errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonl-errors.d.ts","sourceRoot":"","sources":["../../../src/core/session/jsonl-errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAErE,MAAM,MAAM,eAAe,GACxB,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,MAAM,GACN,QAAQ,GACR,SAAS,GACT,MAAM,GACN,QAAQ,GACR,SAAS,GACT,MAAM,CAAC;AAEV,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG,SAAS,GAAG,WAAW,CAAC;AAExE,yGAAyG;AACzG,qBAAa,gBAAiB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,gEAAgE;IAChE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAE/B,YAAY,UAAU,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAKtE;CACD;AAED,MAAM,MAAM,qBAAqB,GAAG,eAAe,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE3E,MAAM,WAAW,wBAAwB;IACxC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,eAAe,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,KAAK,CAAC,EAAE,KAAK,CAAC;CACd;AAED,8FAA8F;AAC9F,qBAAa,iBAAkB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAErC,YAAY,OAAO,EAAE,wBAAwB,EAW5C;CACD;AAED,wBAAgB,6BAA6B,CAC5C,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,eAAe,EACtB,UAAU,EAAE,eAAe,EAC3B,OAAO,EAAE,MAAM,EACf,IAAI,SAAI,EACR,UAAU,SAAI,GACZ,iBAAiB,CAYnB","sourcesContent":["export type JsonlDecodeKind = \"utf8\" | \"syntax\" | \"schema\" | \"state\";\n\nexport type JsonlErrorPhase =\n\t| \"create\"\n\t| \"append\"\n\t| \"fork\"\n\t| \"open\"\n\t| \"repair\"\n\t| \"migrate\"\n\t| \"list\"\n\t| \"import\"\n\t| \"replace\"\n\t| \"sync\";\n\nexport type JsonlWriteOutcome = \"not_written\" | \"unknown\" | \"published\";\n\n/** Path-independent JSONL decoding failure. Storage boundaries attach location and operation context. */\nexport class JsonlDecodeError extends Error {\n\treadonly decodeKind: JsonlDecodeKind;\n\t/** Compatibility alias for path-independent codec consumers. */\n\treadonly kind: JsonlDecodeKind;\n\n\tconstructor(decodeKind: JsonlDecodeKind, message: string, cause?: Error) {\n\t\tsuper(message, cause === undefined ? undefined : { cause });\n\t\tthis.name = \"JsonlDecodeError\";\n\t\tthis.decodeKind = decodeKind;\n\t\tthis.kind = decodeKind;\n\t}\n}\n\nexport type JsonlSessionErrorCode = \"invalid_jsonl\" | \"storage\" | \"fenced\";\n\nexport interface JsonlSessionErrorOptions {\n\tcode: JsonlSessionErrorCode;\n\treference: string;\n\tphase: JsonlErrorPhase;\n\tmessage: string;\n\tline?: number;\n\tbyteOffset?: number;\n\tdecodeKind?: JsonlDecodeKind;\n\toutcome?: JsonlWriteOutcome;\n\tcause?: Error;\n}\n\n/** Actionable local JSONL error with location, phase, decoding, and write-outcome context. */\nexport class JsonlSessionError extends Error {\n\treadonly code: JsonlSessionErrorCode;\n\treadonly reference: string;\n\treadonly path: string;\n\treadonly phase: JsonlErrorPhase;\n\treadonly line?: number;\n\treadonly byteOffset?: number;\n\treadonly decodeKind?: JsonlDecodeKind;\n\treadonly outcome?: JsonlWriteOutcome;\n\n\tconstructor(options: JsonlSessionErrorOptions) {\n\t\tsuper(options.message, options.cause === undefined ? undefined : { cause: options.cause });\n\t\tthis.name = \"JsonlSessionError\";\n\t\tthis.code = options.code;\n\t\tthis.reference = options.reference;\n\t\tthis.path = options.reference;\n\t\tthis.phase = options.phase;\n\t\tthis.line = options.line;\n\t\tthis.byteOffset = options.byteOffset;\n\t\tthis.decodeKind = options.decodeKind;\n\t\tthis.outcome = options.outcome;\n\t}\n}\n\nexport function createJsonlSessionDecodeError(\n\treference: string,\n\tphase: JsonlErrorPhase,\n\tdecodeKind: JsonlDecodeKind,\n\tmessage: string,\n\tline = 1,\n\tbyteOffset = 0,\n): JsonlSessionError {\n\tconst cause = new JsonlDecodeError(decodeKind, message);\n\treturn new JsonlSessionError({\n\t\tcode: \"invalid_jsonl\",\n\t\treference,\n\t\tphase,\n\t\tline,\n\t\tbyteOffset,\n\t\tdecodeKind,\n\t\tmessage,\n\t\tcause,\n\t});\n}\n"]}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/** Path-independent JSONL decoding failure. Storage boundaries attach location and operation context. */
|
|
2
|
+
export class JsonlDecodeError extends Error {
|
|
3
|
+
decodeKind;
|
|
4
|
+
/** Compatibility alias for path-independent codec consumers. */
|
|
5
|
+
kind;
|
|
6
|
+
constructor(decodeKind, message, cause) {
|
|
7
|
+
super(message, cause === undefined ? undefined : { cause });
|
|
8
|
+
this.name = "JsonlDecodeError";
|
|
9
|
+
this.decodeKind = decodeKind;
|
|
10
|
+
this.kind = decodeKind;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
/** Actionable local JSONL error with location, phase, decoding, and write-outcome context. */
|
|
14
|
+
export class JsonlSessionError extends Error {
|
|
15
|
+
code;
|
|
16
|
+
reference;
|
|
17
|
+
path;
|
|
18
|
+
phase;
|
|
19
|
+
line;
|
|
20
|
+
byteOffset;
|
|
21
|
+
decodeKind;
|
|
22
|
+
outcome;
|
|
23
|
+
constructor(options) {
|
|
24
|
+
super(options.message, options.cause === undefined ? undefined : { cause: options.cause });
|
|
25
|
+
this.name = "JsonlSessionError";
|
|
26
|
+
this.code = options.code;
|
|
27
|
+
this.reference = options.reference;
|
|
28
|
+
this.path = options.reference;
|
|
29
|
+
this.phase = options.phase;
|
|
30
|
+
this.line = options.line;
|
|
31
|
+
this.byteOffset = options.byteOffset;
|
|
32
|
+
this.decodeKind = options.decodeKind;
|
|
33
|
+
this.outcome = options.outcome;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export function createJsonlSessionDecodeError(reference, phase, decodeKind, message, line = 1, byteOffset = 0) {
|
|
37
|
+
const cause = new JsonlDecodeError(decodeKind, message);
|
|
38
|
+
return new JsonlSessionError({
|
|
39
|
+
code: "invalid_jsonl",
|
|
40
|
+
reference,
|
|
41
|
+
phase,
|
|
42
|
+
line,
|
|
43
|
+
byteOffset,
|
|
44
|
+
decodeKind,
|
|
45
|
+
message,
|
|
46
|
+
cause,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=jsonl-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonl-errors.js","sourceRoot":"","sources":["../../../src/core/session/jsonl-errors.ts"],"names":[],"mappings":"AAgBA,yGAAyG;AACzG,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACjC,UAAU,CAAkB;IACrC,gEAAgE;IACvD,IAAI,CAAkB;IAE/B,YAAY,UAA2B,EAAE,OAAe,EAAE,KAAa,EAAE;QACxE,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IAAA,CACvB;CACD;AAgBD,8FAA8F;AAC9F,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAClC,IAAI,CAAwB;IAC5B,SAAS,CAAS;IAClB,IAAI,CAAS;IACb,KAAK,CAAkB;IACvB,IAAI,CAAU;IACd,UAAU,CAAU;IACpB,UAAU,CAAmB;IAC7B,OAAO,CAAqB;IAErC,YAAY,OAAiC,EAAE;QAC9C,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3F,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAAA,CAC/B;CACD;AAED,MAAM,UAAU,6BAA6B,CAC5C,SAAiB,EACjB,KAAsB,EACtB,UAA2B,EAC3B,OAAe,EACf,IAAI,GAAG,CAAC,EACR,UAAU,GAAG,CAAC,EACM;IACpB,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACxD,OAAO,IAAI,iBAAiB,CAAC;QAC5B,IAAI,EAAE,eAAe;QACrB,SAAS;QACT,KAAK;QACL,IAAI;QACJ,UAAU;QACV,UAAU;QACV,OAAO;QACP,KAAK;KACL,CAAC,CAAC;AAAA,CACH","sourcesContent":["export type JsonlDecodeKind = \"utf8\" | \"syntax\" | \"schema\" | \"state\";\n\nexport type JsonlErrorPhase =\n\t| \"create\"\n\t| \"append\"\n\t| \"fork\"\n\t| \"open\"\n\t| \"repair\"\n\t| \"migrate\"\n\t| \"list\"\n\t| \"import\"\n\t| \"replace\"\n\t| \"sync\";\n\nexport type JsonlWriteOutcome = \"not_written\" | \"unknown\" | \"published\";\n\n/** Path-independent JSONL decoding failure. Storage boundaries attach location and operation context. */\nexport class JsonlDecodeError extends Error {\n\treadonly decodeKind: JsonlDecodeKind;\n\t/** Compatibility alias for path-independent codec consumers. */\n\treadonly kind: JsonlDecodeKind;\n\n\tconstructor(decodeKind: JsonlDecodeKind, message: string, cause?: Error) {\n\t\tsuper(message, cause === undefined ? undefined : { cause });\n\t\tthis.name = \"JsonlDecodeError\";\n\t\tthis.decodeKind = decodeKind;\n\t\tthis.kind = decodeKind;\n\t}\n}\n\nexport type JsonlSessionErrorCode = \"invalid_jsonl\" | \"storage\" | \"fenced\";\n\nexport interface JsonlSessionErrorOptions {\n\tcode: JsonlSessionErrorCode;\n\treference: string;\n\tphase: JsonlErrorPhase;\n\tmessage: string;\n\tline?: number;\n\tbyteOffset?: number;\n\tdecodeKind?: JsonlDecodeKind;\n\toutcome?: JsonlWriteOutcome;\n\tcause?: Error;\n}\n\n/** Actionable local JSONL error with location, phase, decoding, and write-outcome context. */\nexport class JsonlSessionError extends Error {\n\treadonly code: JsonlSessionErrorCode;\n\treadonly reference: string;\n\treadonly path: string;\n\treadonly phase: JsonlErrorPhase;\n\treadonly line?: number;\n\treadonly byteOffset?: number;\n\treadonly decodeKind?: JsonlDecodeKind;\n\treadonly outcome?: JsonlWriteOutcome;\n\n\tconstructor(options: JsonlSessionErrorOptions) {\n\t\tsuper(options.message, options.cause === undefined ? undefined : { cause: options.cause });\n\t\tthis.name = \"JsonlSessionError\";\n\t\tthis.code = options.code;\n\t\tthis.reference = options.reference;\n\t\tthis.path = options.reference;\n\t\tthis.phase = options.phase;\n\t\tthis.line = options.line;\n\t\tthis.byteOffset = options.byteOffset;\n\t\tthis.decodeKind = options.decodeKind;\n\t\tthis.outcome = options.outcome;\n\t}\n}\n\nexport function createJsonlSessionDecodeError(\n\treference: string,\n\tphase: JsonlErrorPhase,\n\tdecodeKind: JsonlDecodeKind,\n\tmessage: string,\n\tline = 1,\n\tbyteOffset = 0,\n): JsonlSessionError {\n\tconst cause = new JsonlDecodeError(decodeKind, message);\n\treturn new JsonlSessionError({\n\t\tcode: \"invalid_jsonl\",\n\t\treference,\n\t\tphase,\n\t\tline,\n\t\tbyteOffset,\n\t\tdecodeKind,\n\t\tmessage,\n\t\tcause,\n\t});\n}\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { JsonlSessionStore } from "./stores/jsonl-session-store.ts";
|
|
2
|
+
import type { FileEntry } from "./types.ts";
|
|
3
|
+
export declare const jsonlSessionStore: JsonlSessionStore;
|
|
4
|
+
/**
|
|
5
|
+
* Compute the default session directory for a cwd.
|
|
6
|
+
* Encodes cwd into a safe directory name under ~/.grip/agent/sessions/.
|
|
7
|
+
*/
|
|
8
|
+
export declare function getDefaultSessionDir(cwd: string, agentDir?: string): string;
|
|
9
|
+
type JsonlSessionEntryLoadPhase = "fork" | "open" | "import" | "migrate";
|
|
10
|
+
interface LoadSessionEntriesOptions {
|
|
11
|
+
repair?: boolean;
|
|
12
|
+
phase?: JsonlSessionEntryLoadPhase;
|
|
13
|
+
}
|
|
14
|
+
/** Exported for testing. */
|
|
15
|
+
export declare function loadEntriesFromFile(filePath: string, options?: LoadSessionEntriesOptions): FileEntry[];
|
|
16
|
+
export declare function getDefaultSessionDirPath(cwd: string, agentDir?: string): string;
|
|
17
|
+
/** Exported for testing. */
|
|
18
|
+
export declare function findMostRecentSession(sessionDir: string, cwd?: string): string | null;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=jsonl-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonl-helpers.d.ts","sourceRoot":"","sources":["../../../src/core/session/jsonl-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAIN,iBAAiB,EAEjB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,eAAO,MAAM,iBAAiB,mBAA0B,CAAC;AAEzD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED,KAAK,0BAA0B,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEzE,UAAU,yBAAyB;IAClC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,0BAA0B,CAAC;CACnC;AAED,4BAA4B;AAC5B,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,yBAA8B,GAAG,SAAS,EAAE,CAE1G;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAE/E;AAED,4BAA4B;AAC5B,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAErF","sourcesContent":["import {\n\tfindMostRecent,\n\tgetDefaultSessionDir as getDefaultJsonlSessionDir,\n\tgetDefaultSessionDirPath as getDefaultJsonlSessionDirPath,\n\tJsonlSessionStore,\n\tload,\n} from \"./stores/jsonl-session-store.ts\";\nimport type { FileEntry } from \"./types.ts\";\n\nexport const jsonlSessionStore = new JsonlSessionStore();\n\n/**\n * Compute the default session directory for a cwd.\n * Encodes cwd into a safe directory name under ~/.grip/agent/sessions/.\n */\nexport function getDefaultSessionDir(cwd: string, agentDir?: string): string {\n\treturn getDefaultJsonlSessionDir(cwd, agentDir);\n}\n\ntype JsonlSessionEntryLoadPhase = \"fork\" | \"open\" | \"import\" | \"migrate\";\n\ninterface LoadSessionEntriesOptions {\n\trepair?: boolean;\n\tphase?: JsonlSessionEntryLoadPhase;\n}\n\n/** Exported for testing. */\nexport function loadEntriesFromFile(filePath: string, options: LoadSessionEntriesOptions = {}): FileEntry[] {\n\treturn load(filePath, {}, options.repair ?? true, options.phase ?? \"open\");\n}\n\nexport function getDefaultSessionDirPath(cwd: string, agentDir?: string): string {\n\treturn getDefaultJsonlSessionDirPath(cwd, agentDir);\n}\n\n/** Exported for testing. */\nexport function findMostRecentSession(sessionDir: string, cwd?: string): string | null {\n\treturn findMostRecent(sessionDir, cwd);\n}\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { findMostRecent, getDefaultSessionDir as getDefaultJsonlSessionDir, getDefaultSessionDirPath as getDefaultJsonlSessionDirPath, JsonlSessionStore, load, } from "./stores/jsonl-session-store.js";
|
|
2
|
+
export const jsonlSessionStore = new JsonlSessionStore();
|
|
3
|
+
/**
|
|
4
|
+
* Compute the default session directory for a cwd.
|
|
5
|
+
* Encodes cwd into a safe directory name under ~/.grip/agent/sessions/.
|
|
6
|
+
*/
|
|
7
|
+
export function getDefaultSessionDir(cwd, agentDir) {
|
|
8
|
+
return getDefaultJsonlSessionDir(cwd, agentDir);
|
|
9
|
+
}
|
|
10
|
+
/** Exported for testing. */
|
|
11
|
+
export function loadEntriesFromFile(filePath, options = {}) {
|
|
12
|
+
return load(filePath, {}, options.repair ?? true, options.phase ?? "open");
|
|
13
|
+
}
|
|
14
|
+
export function getDefaultSessionDirPath(cwd, agentDir) {
|
|
15
|
+
return getDefaultJsonlSessionDirPath(cwd, agentDir);
|
|
16
|
+
}
|
|
17
|
+
/** Exported for testing. */
|
|
18
|
+
export function findMostRecentSession(sessionDir, cwd) {
|
|
19
|
+
return findMostRecent(sessionDir, cwd);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=jsonl-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonl-helpers.js","sourceRoot":"","sources":["../../../src/core/session/jsonl-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,cAAc,EACd,oBAAoB,IAAI,yBAAyB,EACjD,wBAAwB,IAAI,6BAA6B,EACzD,iBAAiB,EACjB,IAAI,GACJ,MAAM,iCAAiC,CAAC;AAGzC,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC;AAEzD;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW,EAAE,QAAiB,EAAU;IAC5E,OAAO,yBAAyB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAAA,CAChD;AASD,4BAA4B;AAC5B,MAAM,UAAU,mBAAmB,CAAC,QAAgB,EAAE,OAAO,GAA8B,EAAE,EAAe;IAC3G,OAAO,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC;AAAA,CAC3E;AAED,MAAM,UAAU,wBAAwB,CAAC,GAAW,EAAE,QAAiB,EAAU;IAChF,OAAO,6BAA6B,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAAA,CACpD;AAED,4BAA4B;AAC5B,MAAM,UAAU,qBAAqB,CAAC,UAAkB,EAAE,GAAY,EAAiB;IACtF,OAAO,cAAc,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AAAA,CACvC","sourcesContent":["import {\n\tfindMostRecent,\n\tgetDefaultSessionDir as getDefaultJsonlSessionDir,\n\tgetDefaultSessionDirPath as getDefaultJsonlSessionDirPath,\n\tJsonlSessionStore,\n\tload,\n} from \"./stores/jsonl-session-store.ts\";\nimport type { FileEntry } from \"./types.ts\";\n\nexport const jsonlSessionStore = new JsonlSessionStore();\n\n/**\n * Compute the default session directory for a cwd.\n * Encodes cwd into a safe directory name under ~/.grip/agent/sessions/.\n */\nexport function getDefaultSessionDir(cwd: string, agentDir?: string): string {\n\treturn getDefaultJsonlSessionDir(cwd, agentDir);\n}\n\ntype JsonlSessionEntryLoadPhase = \"fork\" | \"open\" | \"import\" | \"migrate\";\n\ninterface LoadSessionEntriesOptions {\n\trepair?: boolean;\n\tphase?: JsonlSessionEntryLoadPhase;\n}\n\n/** Exported for testing. */\nexport function loadEntriesFromFile(filePath: string, options: LoadSessionEntriesOptions = {}): FileEntry[] {\n\treturn load(filePath, {}, options.repair ?? true, options.phase ?? \"open\");\n}\n\nexport function getDefaultSessionDirPath(cwd: string, agentDir?: string): string {\n\treturn getDefaultJsonlSessionDirPath(cwd, agentDir);\n}\n\n/** Exported for testing. */\nexport function findMostRecentSession(sessionDir: string, cwd?: string): string | null {\n\treturn findMostRecent(sessionDir, cwd);\n}\n"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { LocalSession } from "./local-session.ts";
|
|
2
|
+
import type { Session } from "./session.ts";
|
|
3
|
+
import type { OpenSessionOptions, SessionManager } from "./session-manager.ts";
|
|
4
|
+
import type { NewSessionOptions, SessionInfo, SessionListProgress } from "./types.ts";
|
|
5
|
+
export interface LocalSessionManagerOptions {
|
|
6
|
+
cwd: string;
|
|
7
|
+
sessionDir?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare class LocalSessionManager implements SessionManager {
|
|
10
|
+
private readonly cwd;
|
|
11
|
+
private readonly sessionDir?;
|
|
12
|
+
private readonly activePublicationDestinations;
|
|
13
|
+
private readonly firstPublicationCoordinator;
|
|
14
|
+
constructor(options: LocalSessionManagerOptions);
|
|
15
|
+
create(options?: NewSessionOptions): LocalSession;
|
|
16
|
+
openReference(reference: string, options?: OpenSessionOptions): LocalSession;
|
|
17
|
+
continueRecent(): LocalSession;
|
|
18
|
+
usesDefaultSessionDir(): boolean;
|
|
19
|
+
forkFrom(reference: string): LocalSession;
|
|
20
|
+
private publishFirstSnapshot;
|
|
21
|
+
private claimFirstPublication;
|
|
22
|
+
private rejectConflictingPublicationCandidate;
|
|
23
|
+
private rejectExistingSession;
|
|
24
|
+
private canonicalCwd;
|
|
25
|
+
forkSession(source: Session, targetLeafId: string | null): LocalSession;
|
|
26
|
+
importJsonl(inputPath: string, options?: OpenSessionOptions): LocalSession;
|
|
27
|
+
list(onProgress?: SessionListProgress): Promise<SessionInfo[]>;
|
|
28
|
+
listAll(onProgress?: SessionListProgress): Promise<SessionInfo[]>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=local-session-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-session-manager.d.ts","sourceRoot":"","sources":["../../../src/core/session/local-session-manager.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAiB/E,OAAO,KAAK,EAAa,iBAAiB,EAAiB,WAAW,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEhH,MAAM,WAAW,0BAA0B;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AASD,qBAAa,mBAAoB,YAAW,cAAc;IACzD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAqB;IACnE,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAG1C;IAEF,YAAY,OAAO,EAAE,0BAA0B,EAG9C;IAED,MAAM,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,YAAY,CAOhD;IAED,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,YAAY,CAmB3E;IAED,cAAc,IAAI,YAAY,CAQ7B;IAED,qBAAqB,IAAI,OAAO,CAE/B;IAED,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,CAqCxC;IAED,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,qBAAqB;IAwB7B,OAAO,CAAC,qCAAqC;IA0B7C,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,YAAY;IAOpB,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,YAAY,CAYtE;IAED,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,YAAY,CAiCzE;IAEK,IAAI,CAAC,UAAU,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CASnE;IAEK,OAAO,CAAC,UAAU,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAMtE;CACD","sourcesContent":["import { existsSync, lstatSync, readdirSync } from \"node:fs\";\nimport { basename, dirname, join, resolve } from \"node:path\";\nimport { CURRENT_SESSION_VERSION } from \"./constants.ts\";\nimport { createSessionId } from \"./ids.ts\";\nimport { createJsonlSessionDecodeError } from \"./jsonl-errors.ts\";\nimport {\n\tfindMostRecentSession,\n\tgetDefaultSessionDir,\n\tgetDefaultSessionDirPath,\n\tloadEntriesFromFile,\n} from \"./jsonl-helpers.ts\";\nimport { LocalSession } from \"./local-session.ts\";\nimport { migrateToCurrentVersion } from \"./migrations.ts\";\nimport type { Session } from \"./session.ts\";\nimport type { OpenSessionOptions, SessionManager } from \"./session-manager.ts\";\nimport {\n\tensureDir,\n\tforkSession as forkJsonlSession,\n\tgetJsonlEntryLocations,\n\tgetSessionDirForReference,\n\tgetSessionsRoot,\n\ttype JsonlFirstPublicationCoordinator,\n\tlistAll as listAllJsonlSessions,\n\tlist as listJsonlSessions,\n\tprepareSessionReference,\n\tpublishJsonlAtomically,\n\treadSessionHeader,\n\tSessionAlreadyExistsError,\n\tSessionHeaderScanLimitError,\n\tvalidateCurrentSessionEntries,\n} from \"./stores/jsonl-session-store.ts\";\nimport type { FileEntry, NewSessionOptions, SessionHeader, SessionInfo, SessionListProgress } from \"./types.ts\";\n\nexport interface LocalSessionManagerOptions {\n\tcwd: string;\n\tsessionDir?: string;\n}\n\ntype SessionPublicationPhase = \"create\" | \"fork\" | \"import\";\n\ninterface SessionPublicationClaimOptions {\n\tallowExistingEmptyFile: boolean;\n\tphase: SessionPublicationPhase;\n}\n\nexport class LocalSessionManager implements SessionManager {\n\tprivate readonly cwd: string;\n\tprivate readonly sessionDir?: string;\n\tprivate readonly activePublicationDestinations = new Set<string>();\n\tprivate readonly firstPublicationCoordinator: JsonlFirstPublicationCoordinator = {\n\t\tpublish: (filePath, entries, operation, options) =>\n\t\t\tthis.publishFirstSnapshot(filePath, entries, operation, options),\n\t};\n\n\tconstructor(options: LocalSessionManagerOptions) {\n\t\tthis.cwd = options.cwd;\n\t\tthis.sessionDir = options.sessionDir;\n\t}\n\n\tcreate(options?: NewSessionOptions): LocalSession {\n\t\tconst dir = this.sessionDir ?? getDefaultSessionDir(this.cwd);\n\t\tconst session = new LocalSession(this.cwd, dir, undefined, this, undefined, this.firstPublicationCoordinator);\n\t\tif (options?.id || options?.parentSession) {\n\t\t\tsession.newSession(options);\n\t\t}\n\t\treturn session;\n\t}\n\n\topenReference(reference: string, options?: OpenSessionOptions): LocalSession {\n\t\tlet header: SessionHeader | null = null;\n\t\tlet preloadedFileEntries: FileEntry[] | undefined;\n\t\tif (options?.cwdOverride === undefined && existsSync(reference)) {\n\t\t\ttry {\n\t\t\t\theader = readSessionHeader(reference);\n\t\t\t} catch (error) {\n\t\t\t\tif (!(error instanceof SessionHeaderScanLimitError)) throw error;\n\t\t\t\t// The bounded scan is only a discovery optimization. A full load remains\n\t\t\t\t// authoritative for legacy files with very large headers or prefixes.\n\t\t\t\tpreloadedFileEntries = loadEntriesFromFile(reference);\n\t\t\t\tconst firstEntry = preloadedFileEntries[0];\n\t\t\t\theader = firstEntry?.type === \"session\" ? firstEntry : null;\n\t\t\t}\n\t\t}\n\t\tconst storedCwd = typeof header?.cwd === \"string\" ? header.cwd : undefined;\n\t\tconst cwd = options?.cwdOverride ?? storedCwd ?? this.cwd;\n\t\tconst dir = this.sessionDir ?? getSessionDirForReference(reference);\n\t\treturn new LocalSession(cwd, dir, reference, this, preloadedFileEntries, this.firstPublicationCoordinator);\n\t}\n\n\tcontinueRecent(): LocalSession {\n\t\tconst dir = this.sessionDir ?? getDefaultSessionDir(this.cwd);\n\t\tconst filterCwd = this.sessionDir !== undefined && dir !== getDefaultSessionDirPath(this.cwd);\n\t\tconst mostRecent = findMostRecentSession(dir, filterCwd ? this.cwd : undefined);\n\t\tif (mostRecent) {\n\t\t\treturn new LocalSession(this.cwd, dir, mostRecent, this, undefined, this.firstPublicationCoordinator);\n\t\t}\n\t\treturn new LocalSession(this.cwd, dir, undefined, this, undefined, this.firstPublicationCoordinator);\n\t}\n\n\tusesDefaultSessionDir(): boolean {\n\t\treturn (this.sessionDir ?? getDefaultSessionDir(this.cwd)) === getDefaultSessionDirPath(this.cwd);\n\t}\n\n\tforkFrom(reference: string): LocalSession {\n\t\tconst sourceEntries = loadEntriesFromFile(reference, { repair: false, phase: \"fork\" });\n\t\tif (sourceEntries.length === 0) {\n\t\t\tthrow createJsonlSessionDecodeError(reference, \"fork\", \"schema\", `Cannot fork empty session: ${reference}`);\n\t\t}\n\t\tmigrateToCurrentVersion(sourceEntries);\n\t\tvalidateCurrentSessionEntries(sourceEntries, reference, {\n\t\t\tphase: \"fork\",\n\t\t\tlocations: getJsonlEntryLocations(sourceEntries),\n\t\t});\n\t\tconst sourceHeader = sourceEntries[0];\n\t\tif (sourceHeader?.type !== \"session\") {\n\t\t\tthrow new Error(`Cannot fork: source session has no header: ${reference}`);\n\t\t}\n\n\t\tconst dir = this.sessionDir ?? getDefaultSessionDir(this.cwd);\n\t\tensureDir(dir);\n\n\t\tconst newSessionId = createSessionId();\n\t\tconst timestamp = new Date().toISOString();\n\t\tconst newHeader: SessionHeader = {\n\t\t\ttype: \"session\",\n\t\t\tversion: CURRENT_SESSION_VERSION,\n\t\t\tid: newSessionId,\n\t\t\ttimestamp,\n\t\t\tcwd: this.cwd,\n\t\t\tparentSession: reference,\n\t\t};\n\t\tconst expectedReference = prepareSessionReference(dir, newHeader.id, newHeader.timestamp);\n\t\tconst newSessionReference = this.claimFirstPublication(\n\t\t\texpectedReference,\n\t\t\t[newHeader, ...sourceEntries],\n\t\t\t() => forkJsonlSession(dir, newHeader, sourceEntries),\n\t\t\t{ allowExistingEmptyFile: false, phase: \"fork\" },\n\t\t);\n\n\t\treturn new LocalSession(this.cwd, dir, newSessionReference, this, undefined, this.firstPublicationCoordinator);\n\t}\n\n\tprivate publishFirstSnapshot(\n\t\tfilePath: string,\n\t\tentries: FileEntry[],\n\t\toperation: () => void,\n\t\toptions: SessionPublicationClaimOptions,\n\t): void {\n\t\tthis.claimFirstPublication(filePath, entries, operation, options);\n\t}\n\n\tprivate claimFirstPublication<T>(\n\t\tfilePath: string,\n\t\tentries: FileEntry[],\n\t\toperation: () => T,\n\t\toptions: SessionPublicationClaimOptions = {\n\t\t\tallowExistingEmptyFile: false,\n\t\t\tphase: \"create\",\n\t\t},\n\t): T {\n\t\tconst header = entries.find((entry): entry is SessionHeader => entry.type === \"session\");\n\t\tif (!header) throw new Error(`Cannot publish session without a header: ${filePath}`);\n\t\tconst key = `${this.canonicalCwd(header.cwd)}\\0${header.id}`;\n\t\tif (this.activePublicationDestinations.has(key)) {\n\t\t\tthrow new SessionAlreadyExistsError(filePath, header.id, options.phase);\n\t\t}\n\t\tthis.activePublicationDestinations.add(key);\n\t\ttry {\n\t\t\tthis.rejectExistingSession(filePath, header, options);\n\t\t\treturn operation();\n\t\t} finally {\n\t\t\tthis.activePublicationDestinations.delete(key);\n\t\t}\n\t}\n\n\tprivate rejectConflictingPublicationCandidate(\n\t\tcandidate: string,\n\t\tresolvedTarget: string,\n\t\theader: SessionHeader,\n\t\toptions: SessionPublicationClaimOptions,\n\t): void {\n\t\tif (candidate === resolvedTarget) {\n\t\t\tif (options.allowExistingEmptyFile && lstatSync(candidate).isFile() && lstatSync(candidate).size === 0) return;\n\t\t\tthrow new SessionAlreadyExistsError(candidate, header.id, options.phase);\n\t\t}\n\t\ttry {\n\t\t\tconst existing = readSessionHeader(candidate);\n\t\t\tif (\n\t\t\t\texisting?.id === header.id &&\n\t\t\t\ttypeof existing.cwd === \"string\" &&\n\t\t\t\tthis.canonicalCwd(existing.cwd) === this.canonicalCwd(header.cwd)\n\t\t\t) {\n\t\t\t\tthrow new SessionAlreadyExistsError(candidate, header.id, options.phase);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof SessionAlreadyExistsError) throw error;\n\t\t\tif (error instanceof SessionHeaderScanLimitError) return;\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate rejectExistingSession(\n\t\tfilePath: string,\n\t\theader: SessionHeader,\n\t\toptions: SessionPublicationClaimOptions,\n\t): void {\n\t\tconst resolvedTarget = resolve(filePath);\n\t\tfor (const name of readdirSync(dirname(resolvedTarget))) {\n\t\t\tif (!name.endsWith(\".jsonl\")) continue;\n\t\t\tconst candidate = resolve(dirname(resolvedTarget), name);\n\t\t\tthis.rejectConflictingPublicationCandidate(candidate, resolvedTarget, header, options);\n\t\t}\n\t}\n\n\tprivate canonicalCwd(cwd: string): string {\n\t\tconst canonical = resolve(cwd);\n\t\treturn process.platform === \"win32\"\n\t\t\t? canonical.replace(/^([A-Z]):/, (_, drive: string) => `${drive.toLowerCase()}:`)\n\t\t\t: canonical;\n\t}\n\n\tforkSession(source: Session, targetLeafId: string | null): LocalSession {\n\t\tconst parentSession = source.getSessionReference();\n\t\tif (!targetLeafId) {\n\t\t\tconst session = this.create();\n\t\t\tsession.newSession({ parentSession });\n\t\t\treturn session;\n\t\t}\n\n\t\tconst branchSource = parentSession && existsSync(parentSession) ? this.openReference(parentSession) : source;\n\t\tconst target = this.create({ parentSession });\n\t\ttarget.copyBranchFrom(branchSource, targetLeafId, parentSession);\n\t\treturn target;\n\t}\n\n\timportJsonl(inputPath: string, options?: OpenSessionOptions): LocalSession {\n\t\tconst resolvedPath = resolve(inputPath);\n\t\tif (!existsSync(resolvedPath)) throw new Error(`File not found: ${resolvedPath}`);\n\n\t\tconst entries = loadEntriesFromFile(resolvedPath, { repair: false, phase: \"import\" });\n\t\tif (entries.length === 0) {\n\t\t\tthrow createJsonlSessionDecodeError(\n\t\t\t\tresolvedPath,\n\t\t\t\t\"import\",\n\t\t\t\t\"schema\",\n\t\t\t\t`Cannot import empty session JSONL: ${resolvedPath}`,\n\t\t\t);\n\t\t}\n\t\tmigrateToCurrentVersion(entries);\n\t\tvalidateCurrentSessionEntries(entries, resolvedPath, {\n\t\t\tphase: \"import\",\n\t\t\tlocations: getJsonlEntryLocations(entries),\n\t\t});\n\n\t\tconst dir = this.sessionDir ?? getDefaultSessionDir(this.cwd);\n\t\tensureDir(dir);\n\t\tconst destinationPath = join(dir, basename(resolvedPath));\n\t\tif (resolve(destinationPath) === resolvedPath) return this.openReference(resolvedPath, options);\n\n\t\tconst header = entries[0];\n\t\tif (header?.type !== \"session\") throw new Error(`Cannot import session without a header: ${resolvedPath}`);\n\t\tthis.claimFirstPublication(\n\t\t\tdestinationPath,\n\t\t\tentries,\n\t\t\t() => publishJsonlAtomically(destinationPath, entries, { phase: \"import\" }),\n\t\t\t{ allowExistingEmptyFile: false, phase: \"import\" },\n\t\t);\n\t\treturn this.openReference(destinationPath, options);\n\t}\n\n\tasync list(onProgress?: SessionListProgress): Promise<SessionInfo[]> {\n\t\tconst dir = this.sessionDir ?? getDefaultSessionDir(this.cwd);\n\t\tconst filterCwd = this.sessionDir !== undefined && dir !== getDefaultSessionDirPath(this.cwd);\n\t\tconst resolvedCwd = resolve(this.cwd);\n\t\tconst sessions = (await listJsonlSessions(dir, onProgress)).filter(\n\t\t\t(session) => !filterCwd || (session.cwd !== undefined && resolve(session.cwd) === resolvedCwd),\n\t\t);\n\t\tsessions.sort((a, b) => b.modified.getTime() - a.modified.getTime());\n\t\treturn sessions;\n\t}\n\n\tasync listAll(onProgress?: SessionListProgress): Promise<SessionInfo[]> {\n\t\tconst sessions = this.sessionDir\n\t\t\t? await listJsonlSessions(this.sessionDir, onProgress)\n\t\t\t: await listAllJsonlSessions(getSessionsRoot(), onProgress);\n\t\tsessions.sort((a, b) => b.modified.getTime() - a.modified.getTime());\n\t\treturn sessions;\n\t}\n}\n"]}
|