@phigon/observer 8.0.2 → 8.2.0
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/LICENSE +202 -0
- package/NOTICE +8 -0
- package/README.md +376 -303
- package/THIRD_PARTY_NOTICES.md +610 -0
- package/dist/bin/guardian-runner-darwin-amd64 +0 -0
- package/dist/bin/guardian-runner-darwin-arm64 +0 -0
- package/dist/bin/guardian-runner-linux-amd64 +0 -0
- package/dist/bin/guardian-runner-linux-arm64 +0 -0
- package/dist/bin/guardian-runner-windows-amd64.exe +0 -0
- package/dist/bin/guardian-runner-windows-arm64.exe +0 -0
- package/dist/src/action-policy.d.ts +0 -0
- package/dist/src/action-policy.d.ts.map +1 -1
- package/dist/src/action-policy.js +4 -2
- package/dist/src/action-policy.js.map +1 -1
- package/dist/src/activity/adapters/claude.d.ts +0 -0
- package/dist/src/activity/adapters/claude.d.ts.map +1 -1
- package/dist/src/activity/adapters/claude.js +19 -1
- package/dist/src/activity/adapters/claude.js.map +1 -1
- package/dist/src/activity/adapters/cline-task.d.ts +7 -0
- package/dist/src/activity/adapters/cline-task.d.ts.map +1 -0
- package/dist/src/activity/adapters/cline-task.js +197 -0
- package/dist/src/activity/adapters/cline-task.js.map +1 -0
- package/dist/src/activity/adapters/cline.d.ts +3 -0
- package/dist/src/activity/adapters/cline.d.ts.map +1 -0
- package/dist/src/activity/adapters/cline.js +102 -0
- package/dist/src/activity/adapters/cline.js.map +1 -0
- package/dist/src/activity/adapters/codex.d.ts +0 -0
- package/dist/src/activity/adapters/codex.d.ts.map +1 -1
- package/dist/src/activity/adapters/codex.js +76 -0
- package/dist/src/activity/adapters/codex.js.map +1 -1
- package/dist/src/activity/adapters/copilot-chat.d.ts +3 -0
- package/dist/src/activity/adapters/copilot-chat.d.ts.map +1 -0
- package/dist/src/activity/adapters/copilot-chat.js +176 -0
- package/dist/src/activity/adapters/copilot-chat.js.map +1 -0
- package/dist/src/activity/adapters/copilot.d.ts +2 -1
- package/dist/src/activity/adapters/copilot.d.ts.map +1 -1
- package/dist/src/activity/adapters/copilot.js +173 -2
- package/dist/src/activity/adapters/copilot.js.map +1 -1
- package/dist/src/activity/adapters/cursor.d.ts +3 -0
- package/dist/src/activity/adapters/cursor.d.ts.map +1 -0
- package/dist/src/activity/adapters/cursor.js +86 -0
- package/dist/src/activity/adapters/cursor.js.map +1 -0
- package/dist/src/activity/adapters/factory-droid.d.ts +3 -0
- package/dist/src/activity/adapters/factory-droid.d.ts.map +1 -0
- package/dist/src/activity/adapters/factory-droid.js +126 -0
- package/dist/src/activity/adapters/factory-droid.js.map +1 -0
- package/dist/src/activity/adapters/gemini.d.ts +3 -0
- package/dist/src/activity/adapters/gemini.d.ts.map +1 -0
- package/dist/src/activity/adapters/gemini.js +177 -0
- package/dist/src/activity/adapters/gemini.js.map +1 -0
- package/dist/src/activity/adapters/generic.d.ts +0 -0
- package/dist/src/activity/adapters/generic.d.ts.map +0 -0
- package/dist/src/activity/adapters/generic.js +0 -0
- package/dist/src/activity/adapters/generic.js.map +0 -0
- package/dist/src/activity/adapters/goose.d.ts +3 -0
- package/dist/src/activity/adapters/goose.d.ts.map +1 -0
- package/dist/src/activity/adapters/goose.js +116 -0
- package/dist/src/activity/adapters/goose.js.map +1 -0
- package/dist/src/activity/adapters/hermes.d.ts +0 -0
- package/dist/src/activity/adapters/hermes.d.ts.map +0 -0
- package/dist/src/activity/adapters/hermes.js +0 -0
- package/dist/src/activity/adapters/hermes.js.map +0 -0
- package/dist/src/activity/adapters/kiro.d.ts +3 -0
- package/dist/src/activity/adapters/kiro.d.ts.map +1 -0
- package/dist/src/activity/adapters/kiro.js +47 -0
- package/dist/src/activity/adapters/kiro.js.map +1 -0
- package/dist/src/activity/adapters/openai-compatible.d.ts +0 -0
- package/dist/src/activity/adapters/openai-compatible.d.ts.map +0 -0
- package/dist/src/activity/adapters/openai-compatible.js +0 -0
- package/dist/src/activity/adapters/openai-compatible.js.map +0 -0
- package/dist/src/activity/adapters/openclaw.d.ts +0 -0
- package/dist/src/activity/adapters/openclaw.d.ts.map +0 -0
- package/dist/src/activity/adapters/openclaw.js +0 -0
- package/dist/src/activity/adapters/openclaw.js.map +0 -0
- package/dist/src/activity/adapters/opencode.d.ts +0 -0
- package/dist/src/activity/adapters/opencode.d.ts.map +1 -1
- package/dist/src/activity/adapters/opencode.js +108 -1
- package/dist/src/activity/adapters/opencode.js.map +1 -1
- package/dist/src/activity/adapters/zed.d.ts +3 -0
- package/dist/src/activity/adapters/zed.d.ts.map +1 -0
- package/dist/src/activity/adapters/zed.js +134 -0
- package/dist/src/activity/adapters/zed.js.map +1 -0
- package/dist/src/activity/bridges.d.ts +0 -0
- package/dist/src/activity/bridges.d.ts.map +0 -0
- package/dist/src/activity/bridges.js +0 -0
- package/dist/src/activity/bridges.js.map +0 -0
- package/dist/src/activity/collector.d.ts +12 -0
- package/dist/src/activity/collector.d.ts.map +1 -1
- package/dist/src/activity/collector.js +156 -3
- package/dist/src/activity/collector.js.map +1 -1
- package/dist/src/activity/goose-sqlite-source.d.ts +33 -0
- package/dist/src/activity/goose-sqlite-source.d.ts.map +1 -0
- package/dist/src/activity/goose-sqlite-source.js +274 -0
- package/dist/src/activity/goose-sqlite-source.js.map +1 -0
- package/dist/src/activity/index.d.ts +3 -0
- package/dist/src/activity/index.d.ts.map +1 -1
- package/dist/src/activity/index.js +3 -0
- package/dist/src/activity/index.js.map +1 -1
- package/dist/src/activity/ingest.d.ts +0 -0
- package/dist/src/activity/ingest.d.ts.map +1 -1
- package/dist/src/activity/ingest.js +2 -1
- package/dist/src/activity/ingest.js.map +1 -1
- package/dist/src/activity/json-document-source.d.ts +136 -0
- package/dist/src/activity/json-document-source.d.ts.map +1 -0
- package/dist/src/activity/json-document-source.js +569 -0
- package/dist/src/activity/json-document-source.js.map +1 -0
- package/dist/src/activity/native-capabilities.d.ts +0 -0
- package/dist/src/activity/native-capabilities.d.ts.map +0 -0
- package/dist/src/activity/native-capabilities.js +0 -0
- package/dist/src/activity/native-capabilities.js.map +0 -0
- package/dist/src/activity/normalize.d.ts +0 -0
- package/dist/src/activity/normalize.d.ts.map +1 -1
- package/dist/src/activity/normalize.js +64 -6
- package/dist/src/activity/normalize.js.map +1 -1
- package/dist/src/activity/opencode-message-tables.d.ts +87 -0
- package/dist/src/activity/opencode-message-tables.d.ts.map +1 -0
- package/dist/src/activity/opencode-message-tables.js +546 -0
- package/dist/src/activity/opencode-message-tables.js.map +1 -0
- package/dist/src/activity/opencode-sqlite-source.d.ts +7 -0
- package/dist/src/activity/opencode-sqlite-source.d.ts.map +1 -1
- package/dist/src/activity/opencode-sqlite-source.js +153 -63
- package/dist/src/activity/opencode-sqlite-source.js.map +1 -1
- package/dist/src/activity/policy.d.ts +0 -0
- package/dist/src/activity/policy.d.ts.map +1 -1
- package/dist/src/activity/policy.js +2 -13
- package/dist/src/activity/policy.js.map +1 -1
- package/dist/src/activity/record.d.ts +0 -0
- package/dist/src/activity/record.d.ts.map +0 -0
- package/dist/src/activity/record.js +0 -0
- package/dist/src/activity/record.js.map +0 -0
- package/dist/src/activity/source-reader.d.ts +16 -1
- package/dist/src/activity/source-reader.d.ts.map +1 -1
- package/dist/src/activity/source-reader.js +308 -29
- package/dist/src/activity/source-reader.js.map +1 -1
- package/dist/src/activity/sqlite-connections.d.ts +77 -0
- package/dist/src/activity/sqlite-connections.d.ts.map +1 -0
- package/dist/src/activity/sqlite-connections.js +220 -0
- package/dist/src/activity/sqlite-connections.js.map +1 -0
- package/dist/src/activity/types.d.ts +0 -0
- package/dist/src/activity/types.d.ts.map +0 -0
- package/dist/src/activity/types.js +0 -0
- package/dist/src/activity/types.js.map +0 -0
- package/dist/src/activity/zed-sqlite-source.d.ts +65 -0
- package/dist/src/activity/zed-sqlite-source.d.ts.map +1 -0
- package/dist/src/activity/zed-sqlite-source.js +547 -0
- package/dist/src/activity/zed-sqlite-source.js.map +1 -0
- package/dist/src/agent-action-executor.d.ts +14 -1
- package/dist/src/agent-action-executor.d.ts.map +1 -1
- package/dist/src/agent-action-executor.js +114 -57
- package/dist/src/agent-action-executor.js.map +1 -1
- package/dist/src/agentic-guardian.d.ts +0 -0
- package/dist/src/agentic-guardian.d.ts.map +1 -1
- package/dist/src/agentic-guardian.js +6 -5
- package/dist/src/agentic-guardian.js.map +1 -1
- package/dist/src/atomic-replace.d.ts +0 -0
- package/dist/src/atomic-replace.d.ts.map +0 -0
- package/dist/src/atomic-replace.js +0 -0
- package/dist/src/atomic-replace.js.map +0 -0
- package/dist/src/cli.d.ts +0 -0
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +96 -13
- package/dist/src/cli.js.map +1 -1
- package/dist/src/config.d.ts +15 -0
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +105 -4
- package/dist/src/config.js.map +1 -1
- package/dist/src/connection-config.d.ts +3 -0
- package/dist/src/connection-config.d.ts.map +1 -0
- package/dist/src/connection-config.js +29 -0
- package/dist/src/connection-config.js.map +1 -0
- package/dist/src/content-redaction.d.ts +3 -0
- package/dist/src/content-redaction.d.ts.map +1 -0
- package/dist/src/content-redaction.js +19 -0
- package/dist/src/content-redaction.js.map +1 -0
- package/dist/src/credential-store.d.ts +1 -0
- package/dist/src/credential-store.d.ts.map +1 -1
- package/dist/src/credential-store.js +13 -2
- package/dist/src/credential-store.js.map +1 -1
- package/dist/src/custom-agent-registry.d.ts +0 -0
- package/dist/src/custom-agent-registry.d.ts.map +1 -1
- package/dist/src/custom-agent-registry.js +2 -1
- package/dist/src/custom-agent-registry.js.map +1 -1
- package/dist/src/discovery/adapters/claude.d.ts +0 -0
- package/dist/src/discovery/adapters/claude.d.ts.map +0 -0
- package/dist/src/discovery/adapters/claude.js +0 -0
- package/dist/src/discovery/adapters/claude.js.map +0 -0
- package/dist/src/discovery/adapters/codex.d.ts +0 -0
- package/dist/src/discovery/adapters/codex.d.ts.map +0 -0
- package/dist/src/discovery/adapters/codex.js +0 -0
- package/dist/src/discovery/adapters/codex.js.map +0 -0
- package/dist/src/discovery/adapters/custom.d.ts +0 -0
- package/dist/src/discovery/adapters/custom.d.ts.map +0 -0
- package/dist/src/discovery/adapters/custom.js +0 -0
- package/dist/src/discovery/adapters/custom.js.map +0 -0
- package/dist/src/discovery/adapters/generic.d.ts +0 -0
- package/dist/src/discovery/adapters/generic.d.ts.map +1 -1
- package/dist/src/discovery/adapters/generic.js +160 -2
- package/dist/src/discovery/adapters/generic.js.map +1 -1
- package/dist/src/discovery/adapters/hermes.d.ts +0 -0
- package/dist/src/discovery/adapters/hermes.d.ts.map +0 -0
- package/dist/src/discovery/adapters/hermes.js +0 -0
- package/dist/src/discovery/adapters/hermes.js.map +0 -0
- package/dist/src/discovery/adapters/openclaw.d.ts +0 -0
- package/dist/src/discovery/adapters/openclaw.d.ts.map +0 -0
- package/dist/src/discovery/adapters/openclaw.js +0 -0
- package/dist/src/discovery/adapters/openclaw.js.map +0 -0
- package/dist/src/discovery/engine.d.ts +7 -1
- package/dist/src/discovery/engine.d.ts.map +1 -1
- package/dist/src/discovery/engine.js +20 -5
- package/dist/src/discovery/engine.js.map +1 -1
- package/dist/src/discovery/evidence.d.ts +0 -0
- package/dist/src/discovery/evidence.d.ts.map +0 -0
- package/dist/src/discovery/evidence.js +0 -0
- package/dist/src/discovery/evidence.js.map +0 -0
- package/dist/src/discovery/index.d.ts +0 -0
- package/dist/src/discovery/index.d.ts.map +0 -0
- package/dist/src/discovery/index.js +0 -0
- package/dist/src/discovery/index.js.map +0 -0
- package/dist/src/discovery/known-agent.d.ts +7 -0
- package/dist/src/discovery/known-agent.d.ts.map +1 -1
- package/dist/src/discovery/known-agent.js +9 -4
- package/dist/src/discovery/known-agent.js.map +1 -1
- package/dist/src/discovery/process-identity.d.ts +0 -0
- package/dist/src/discovery/process-identity.d.ts.map +0 -0
- package/dist/src/discovery/process-identity.js +0 -0
- package/dist/src/discovery/process-identity.js.map +0 -0
- package/dist/src/discovery/system-evidence.d.ts +40 -1
- package/dist/src/discovery/system-evidence.d.ts.map +1 -1
- package/dist/src/discovery/system-evidence.js +189 -16
- package/dist/src/discovery/system-evidence.js.map +1 -1
- package/dist/src/discovery/types.d.ts +0 -0
- package/dist/src/discovery/types.d.ts.map +0 -0
- package/dist/src/discovery/types.js +0 -0
- package/dist/src/discovery/types.js.map +0 -0
- package/dist/src/event-queue.d.ts +0 -0
- package/dist/src/event-queue.d.ts.map +1 -1
- package/dist/src/event-queue.js +88 -38
- package/dist/src/event-queue.js.map +1 -1
- package/dist/src/event-spool.d.ts +0 -0
- package/dist/src/event-spool.d.ts.map +1 -1
- package/dist/src/event-spool.js +58 -10
- package/dist/src/event-spool.js.map +1 -1
- package/dist/src/generated/phigon/v1/action_pb.d.ts +0 -0
- package/dist/src/generated/phigon/v1/action_pb.d.ts.map +1 -1
- package/dist/src/generated/phigon/v1/action_pb.js +1 -1
- package/dist/src/generated/phigon/v1/action_pb.js.map +1 -1
- package/dist/src/generated/phigon/v1/common_pb.d.ts +0 -0
- package/dist/src/generated/phigon/v1/common_pb.d.ts.map +1 -1
- package/dist/src/generated/phigon/v1/common_pb.js +1 -1
- package/dist/src/generated/phigon/v1/common_pb.js.map +1 -1
- package/dist/src/generated/phigon/v1/history_sync_pb.d.ts +0 -0
- package/dist/src/generated/phigon/v1/history_sync_pb.d.ts.map +1 -1
- package/dist/src/generated/phigon/v1/history_sync_pb.js +1 -1
- package/dist/src/generated/phigon/v1/history_sync_pb.js.map +1 -1
- package/dist/src/generated/phigon/v1/identity_pb.d.ts +0 -0
- package/dist/src/generated/phigon/v1/identity_pb.d.ts.map +1 -1
- package/dist/src/generated/phigon/v1/identity_pb.js +1 -1
- package/dist/src/generated/phigon/v1/identity_pb.js.map +1 -1
- package/dist/src/generated/phigon/v1/observer_service_pb.d.ts +0 -0
- package/dist/src/generated/phigon/v1/observer_service_pb.d.ts.map +1 -1
- package/dist/src/generated/phigon/v1/observer_service_pb.js +1 -1
- package/dist/src/generated/phigon/v1/observer_service_pb.js.map +1 -1
- package/dist/src/generated/phigon/v1/policy_pb.d.ts +0 -0
- package/dist/src/generated/phigon/v1/policy_pb.d.ts.map +1 -1
- package/dist/src/generated/phigon/v1/policy_pb.js +1 -1
- package/dist/src/generated/phigon/v1/policy_pb.js.map +1 -1
- package/dist/src/generated/phigon/v1/supervision_pb.d.ts +0 -0
- package/dist/src/generated/phigon/v1/supervision_pb.d.ts.map +1 -1
- package/dist/src/generated/phigon/v1/supervision_pb.js +1 -1
- package/dist/src/generated/phigon/v1/supervision_pb.js.map +1 -1
- package/dist/src/generated/phigon/v1/telemetry_pb.d.ts +0 -0
- package/dist/src/generated/phigon/v1/telemetry_pb.d.ts.map +1 -1
- package/dist/src/generated/phigon/v1/telemetry_pb.js +1 -1
- package/dist/src/generated/phigon/v1/telemetry_pb.js.map +1 -1
- package/dist/src/guardian-containment.d.ts +2 -6
- package/dist/src/guardian-containment.d.ts.map +1 -1
- package/dist/src/guardian-containment.js +12 -63
- package/dist/src/guardian-containment.js.map +1 -1
- package/dist/src/guardian-decision-journal.d.ts +0 -0
- package/dist/src/guardian-decision-journal.d.ts.map +1 -1
- package/dist/src/guardian-decision-journal.js +2 -1
- package/dist/src/guardian-decision-journal.js.map +1 -1
- package/dist/src/guardian-execution-manifest.d.ts +0 -0
- package/dist/src/guardian-execution-manifest.d.ts.map +0 -0
- package/dist/src/guardian-execution-manifest.js +0 -0
- package/dist/src/guardian-execution-manifest.js.map +0 -0
- package/dist/src/guardian-hosted-client.d.ts +0 -0
- package/dist/src/guardian-hosted-client.d.ts.map +0 -0
- package/dist/src/guardian-hosted-client.js +0 -0
- package/dist/src/guardian-hosted-client.js.map +0 -0
- package/dist/src/guardian-managed-exec.d.ts +0 -0
- package/dist/src/guardian-managed-exec.d.ts.map +1 -1
- package/dist/src/guardian-managed-exec.js +2 -1
- package/dist/src/guardian-managed-exec.js.map +1 -1
- package/dist/src/guardian-model-bridge.d.ts +0 -0
- package/dist/src/guardian-model-bridge.d.ts.map +1 -1
- package/dist/src/guardian-model-bridge.js +2 -1
- package/dist/src/guardian-model-bridge.js.map +1 -1
- package/dist/src/guardian-native.d.ts +0 -1
- package/dist/src/guardian-native.d.ts.map +1 -1
- package/dist/src/guardian-native.js +0 -6
- package/dist/src/guardian-native.js.map +1 -1
- package/dist/src/guardian-process-monitor.d.ts +6 -1
- package/dist/src/guardian-process-monitor.d.ts.map +1 -1
- package/dist/src/guardian-process-monitor.js +64 -8
- package/dist/src/guardian-process-monitor.js.map +1 -1
- package/dist/src/health.d.ts +0 -0
- package/dist/src/health.d.ts.map +0 -0
- package/dist/src/health.js +0 -0
- package/dist/src/health.js.map +0 -0
- package/dist/src/historical-identity-store.d.ts +0 -0
- package/dist/src/historical-identity-store.d.ts.map +1 -1
- package/dist/src/historical-identity-store.js +2 -1
- package/dist/src/historical-identity-store.js.map +1 -1
- package/dist/src/index.d.ts +0 -0
- package/dist/src/index.d.ts.map +0 -0
- package/dist/src/index.js +0 -0
- package/dist/src/index.js.map +0 -0
- package/dist/src/installation.d.ts +0 -0
- package/dist/src/installation.d.ts.map +1 -1
- package/dist/src/installation.js +3 -2
- package/dist/src/installation.js.map +1 -1
- package/dist/src/machine-command-executor.d.ts +26 -7
- package/dist/src/machine-command-executor.d.ts.map +1 -1
- package/dist/src/machine-command-executor.js +123 -21
- package/dist/src/machine-command-executor.js.map +1 -1
- package/dist/src/pair.d.ts +0 -0
- package/dist/src/pair.d.ts.map +1 -1
- package/dist/src/pair.js +13 -3
- package/dist/src/pair.js.map +1 -1
- package/dist/src/private-directory.d.ts +4 -0
- package/dist/src/private-directory.d.ts.map +1 -0
- package/dist/src/private-directory.js +35 -0
- package/dist/src/private-directory.js.map +1 -0
- package/dist/src/process-tree.d.ts +73 -0
- package/dist/src/process-tree.d.ts.map +1 -0
- package/dist/src/process-tree.js +256 -0
- package/dist/src/process-tree.js.map +1 -0
- package/dist/src/remove-machine.d.ts +0 -0
- package/dist/src/remove-machine.d.ts.map +0 -0
- package/dist/src/remove-machine.js +0 -0
- package/dist/src/remove-machine.js.map +0 -0
- package/dist/src/server-authority.d.ts +26 -0
- package/dist/src/server-authority.d.ts.map +1 -0
- package/dist/src/server-authority.js +102 -0
- package/dist/src/server-authority.js.map +1 -0
- package/dist/src/stream-client.d.ts +6 -2
- package/dist/src/stream-client.d.ts.map +1 -1
- package/dist/src/stream-client.js +95 -16
- package/dist/src/stream-client.js.map +1 -1
- package/dist/src/stream-state.d.ts +0 -0
- package/dist/src/stream-state.d.ts.map +1 -1
- package/dist/src/stream-state.js +2 -1
- package/dist/src/stream-state.js.map +1 -1
- package/dist/src/system-inspection.d.ts +78 -0
- package/dist/src/system-inspection.d.ts.map +1 -0
- package/dist/src/system-inspection.js +281 -0
- package/dist/src/system-inspection.js.map +1 -0
- package/dist/src/update.d.ts +15 -0
- package/dist/src/update.d.ts.map +1 -0
- package/dist/src/update.js +93 -0
- package/dist/src/update.js.map +1 -0
- package/dist/src/user-notices.d.ts +53 -0
- package/dist/src/user-notices.d.ts.map +1 -0
- package/dist/src/user-notices.js +117 -0
- package/dist/src/user-notices.js.map +1 -0
- package/package.json +83 -78
- package/scripts/install.mjs +306 -306
- package/scripts/managed-service.mjs +0 -0
- package/scripts/verify-guardian-release.mjs +0 -0
- package/scripts/windows-app-control.mjs +0 -0
- package/dist/src/windows-process.d.ts +0 -7
- package/dist/src/windows-process.d.ts.map +0 -1
- package/dist/src/windows-process.js +0 -18
- package/dist/src/windows-process.js.map +0 -1
|
@@ -0,0 +1,546 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode 1 keeps each conversation in its `message` and `part` tables and
|
|
3
|
+
* also records an event log in `event`. OpenCode 2 deletes every event row on
|
|
4
|
+
* its first start and records new ones only when configured to, so a session
|
|
5
|
+
* can exist only as table rows. These functions read the rows of sessions
|
|
6
|
+
* that have no event row. A session with event rows is read from its events
|
|
7
|
+
* instead, never from both.
|
|
8
|
+
*
|
|
9
|
+
* OpenCode 2 keeps each message as one `session_message` row (its parts are
|
|
10
|
+
* items inside it) and copies every OpenCode 1 session into that table on
|
|
11
|
+
* its first start, keeping the session id and each message's creation time.
|
|
12
|
+
* A copied row is left to the OpenCode 1 rows it came from: a row counts as
|
|
13
|
+
* copied when its session has an OpenCode 1 message at least as new. Rows
|
|
14
|
+
* added to a copied session later are OpenCode 2's own.
|
|
15
|
+
*
|
|
16
|
+
* OpenCode rewrites a row in place while a reply streams, so a row is
|
|
17
|
+
* delivered once it is final: when its own fields mark it finished, when its
|
|
18
|
+
* message is complete, or when it has not changed for `settleMilliseconds`.
|
|
19
|
+
* Records keep OpenCode's own ids, so a row read again (by the history import
|
|
20
|
+
* and the live reader, say) keeps the same record identities.
|
|
21
|
+
*/
|
|
22
|
+
/** A row unchanged this long is final even without a finish marker. */
|
|
23
|
+
export const settleMilliseconds = 10 * 60_000;
|
|
24
|
+
/** Unfinished rows a live reader waits for, per table. */
|
|
25
|
+
const maxPendingRows = 32;
|
|
26
|
+
/** Rows one scan selects from one table. */
|
|
27
|
+
const maxRowsPerScan = 1_024;
|
|
28
|
+
/** Newest rows a live reader checks for unfinished work when it starts. */
|
|
29
|
+
const startRows = 64;
|
|
30
|
+
/** The largest record; a larger OpenCode 2 item is left out. */
|
|
31
|
+
const maxRecordBytes = 1 << 20;
|
|
32
|
+
/** An OpenCode 2 row holds a whole message, every tool output included. */
|
|
33
|
+
const maxMessageRowBytes = 32 << 20;
|
|
34
|
+
const requiredColumns = {
|
|
35
|
+
message: ["id", "session_id", "data"],
|
|
36
|
+
part: ["id", "message_id", "session_id", "data"],
|
|
37
|
+
session_message: ["id", "session_id", "type", "data"],
|
|
38
|
+
};
|
|
39
|
+
/** The columns of OpenCode's message tables and event log tables. */
|
|
40
|
+
export function tableColumns(database) {
|
|
41
|
+
const found = new Map();
|
|
42
|
+
const rows = database.prepare("SELECT t.name AS table_name, c.name AS column_name FROM sqlite_schema t " +
|
|
43
|
+
"JOIN pragma_table_info(t.name) c WHERE t.type = 'table' " +
|
|
44
|
+
"AND t.name IN ('message', 'part', 'session_message', 'event', 'event_sequence')").all();
|
|
45
|
+
for (const value of rows) {
|
|
46
|
+
const table = value["table_name"];
|
|
47
|
+
const column = value["column_name"];
|
|
48
|
+
if (typeof table !== "string" || typeof column !== "string")
|
|
49
|
+
continue;
|
|
50
|
+
const columns = found.get(table) ?? new Set();
|
|
51
|
+
columns.add(column);
|
|
52
|
+
found.set(table, columns);
|
|
53
|
+
}
|
|
54
|
+
return found;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* The tables to read: OpenCode 1's message and part tables when both exist,
|
|
58
|
+
* and OpenCode 2's session_message table.
|
|
59
|
+
*/
|
|
60
|
+
export function readableTables(columns) {
|
|
61
|
+
const complete = (table) => requiredColumns[table].every((column) => columns.get(table)?.has(column) === true);
|
|
62
|
+
return [
|
|
63
|
+
...complete("message") && complete("part") ? ["message", "part"] : [],
|
|
64
|
+
...complete("session_message") ? ["session_message"] : [],
|
|
65
|
+
];
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* History: rows after each table's cursor, up to about `limit` records. Rows
|
|
69
|
+
* of a session with event rows are left to the event log. So are rows of a
|
|
70
|
+
* session whose events this import already delivered, even after OpenCode
|
|
71
|
+
* deleted those events, and part rows an earlier import read by row id.
|
|
72
|
+
* A row still being written is left to the live reader.
|
|
73
|
+
*/
|
|
74
|
+
export function historyTableRows(context) {
|
|
75
|
+
const items = [];
|
|
76
|
+
let malformed = 0;
|
|
77
|
+
let oversized = 0;
|
|
78
|
+
let complete = true;
|
|
79
|
+
for (const table of readableTables(context.columns)) {
|
|
80
|
+
const limit = Math.min(maxRowsPerScan, context.limit - items.length);
|
|
81
|
+
if (limit <= 0) {
|
|
82
|
+
complete = false;
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
const cursorKey = context.key(`history:${table}`);
|
|
86
|
+
const cursor = context.cursors.get(cursorKey) ?? 0;
|
|
87
|
+
const rows = selectRows(context, table, `t.rowid > ? AND NOT ${elsewhere(context.columns, table)}`, [cursor], "ASC", limit);
|
|
88
|
+
for (const row of rows) {
|
|
89
|
+
if (row.problem === "malformed")
|
|
90
|
+
malformed++;
|
|
91
|
+
else if (row.problem === "oversized")
|
|
92
|
+
oversized++;
|
|
93
|
+
else if (!row.elsewhere &&
|
|
94
|
+
(row.finished || settled(row, context.now)) &&
|
|
95
|
+
!(table === "part" && !row.hasSequence && row.rowID <= context.importedParts) &&
|
|
96
|
+
// Only OpenCode 1 rows can repeat what an event log delivered.
|
|
97
|
+
(table === "session_message" || !context.deliveredByEvents(row.sessionID))) {
|
|
98
|
+
items.push(...row.items);
|
|
99
|
+
oversized += row.oversizedItems;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const last = rows.at(-1);
|
|
103
|
+
if (last !== undefined)
|
|
104
|
+
context.cursors.set(cursorKey, last.rowID);
|
|
105
|
+
if (rows.length >= limit)
|
|
106
|
+
complete = false;
|
|
107
|
+
}
|
|
108
|
+
return { items, malformed, oversized, complete, idle: undefined, recheckAt: undefined };
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Live: rows added since the previous scan and held-back rows that are now
|
|
112
|
+
* final, up to about `limit` records. A database seen for the first time
|
|
113
|
+
* starts at the end of each table; a first start may replay its newest final
|
|
114
|
+
* rows.
|
|
115
|
+
*/
|
|
116
|
+
export function liveTableRows(context) {
|
|
117
|
+
const items = [];
|
|
118
|
+
const read = [];
|
|
119
|
+
let malformed = 0;
|
|
120
|
+
let oversized = 0;
|
|
121
|
+
let idle = true;
|
|
122
|
+
let recheckAt;
|
|
123
|
+
for (const table of readableTables(context.columns)) {
|
|
124
|
+
// A replay shows recent conversation, which parts and messages hold.
|
|
125
|
+
const result = liveTable(context, table, context.limit - items.length, table === "message" ? 0 : Math.max(0, context.replay - items.length), read);
|
|
126
|
+
items.push(...result.items);
|
|
127
|
+
malformed += result.malformed;
|
|
128
|
+
oversized += result.oversized;
|
|
129
|
+
idle = idle && result.idle;
|
|
130
|
+
if (result.recheckAt !== undefined) {
|
|
131
|
+
recheckAt = Math.min(recheckAt ?? result.recheckAt, result.recheckAt);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return {
|
|
135
|
+
items,
|
|
136
|
+
malformed,
|
|
137
|
+
oversized,
|
|
138
|
+
complete: true,
|
|
139
|
+
idle: idle ? read : undefined,
|
|
140
|
+
recheckAt,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
function liveTable(context, table, budget, replay, read) {
|
|
144
|
+
const items = [];
|
|
145
|
+
let malformed = 0;
|
|
146
|
+
let oversized = 0;
|
|
147
|
+
const count = (row) => {
|
|
148
|
+
if (row.problem === "malformed")
|
|
149
|
+
malformed++;
|
|
150
|
+
else if (row.problem === "oversized")
|
|
151
|
+
oversized++;
|
|
152
|
+
};
|
|
153
|
+
const deliver = (row) => {
|
|
154
|
+
items.push(...row.items);
|
|
155
|
+
oversized += row.oversizedItems;
|
|
156
|
+
};
|
|
157
|
+
const readable = (row) => !row.elsewhere && row.problem === undefined;
|
|
158
|
+
const cursorKey = context.key(`rows:${table}`);
|
|
159
|
+
const saved = context.cursors.get(cursorKey);
|
|
160
|
+
read.push([cursorKey, saved]);
|
|
161
|
+
const newest = maxRowID(context.database, table);
|
|
162
|
+
const kept = [];
|
|
163
|
+
if (saved === undefined) {
|
|
164
|
+
// Older rows are the history import's. Rows still being written are
|
|
165
|
+
// waited for, and a first start may replay the newest final rows.
|
|
166
|
+
const finals = [];
|
|
167
|
+
for (const row of selectRows(context, table, "1", [], "DESC", startRows).reverse()) {
|
|
168
|
+
if (!readable(row))
|
|
169
|
+
continue;
|
|
170
|
+
if (row.finished || settled(row, context.now))
|
|
171
|
+
finals.push(row);
|
|
172
|
+
else if (kept.length < maxPendingRows)
|
|
173
|
+
kept.push(row);
|
|
174
|
+
}
|
|
175
|
+
// The newest final rows, until they hold the replay's records.
|
|
176
|
+
const limit = Math.min(replay, budget);
|
|
177
|
+
let start = finals.length;
|
|
178
|
+
for (let total = 0; start > 0 && total < limit; start--) {
|
|
179
|
+
total += finals[start - 1]?.items.length ?? 0;
|
|
180
|
+
}
|
|
181
|
+
for (const row of finals.slice(start))
|
|
182
|
+
deliver(row);
|
|
183
|
+
context.cursors.set(cursorKey, newest);
|
|
184
|
+
writePending(context, table, kept);
|
|
185
|
+
return { items, malformed, oversized, idle: false, recheckAt: recheckTime(kept) };
|
|
186
|
+
}
|
|
187
|
+
// When the newest rows were deleted (a revert), rows written after them
|
|
188
|
+
// reuse their row ids, so reading resumes at the new end.
|
|
189
|
+
let cursor = Math.min(saved, newest);
|
|
190
|
+
const stored = readPending(context, table, read);
|
|
191
|
+
const pending = stored.rowIDs.filter((rowID) => rowID <= cursor);
|
|
192
|
+
let changed = cursor !== saved || pending.length !== (stored.count ?? 0);
|
|
193
|
+
if (pending.length > 0) {
|
|
194
|
+
const rows = new Map(selectRows(context, table, `t.rowid IN (${pending.map(() => "?").join(", ")})`, pending, "ASC", pending.length).map((row) => [row.rowID, row]));
|
|
195
|
+
for (const rowID of pending) {
|
|
196
|
+
const row = rows.get(rowID);
|
|
197
|
+
if (row === undefined || !readable(row)) {
|
|
198
|
+
// Deleted, now read from elsewhere, or no longer valid.
|
|
199
|
+
if (row !== undefined)
|
|
200
|
+
count(row);
|
|
201
|
+
changed = true;
|
|
202
|
+
}
|
|
203
|
+
else if (!(row.finished || settled(row, context.now)) || items.length >= budget) {
|
|
204
|
+
kept.push(row);
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
deliver(row);
|
|
208
|
+
changed = true;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
let looked = false;
|
|
213
|
+
let selected = 0;
|
|
214
|
+
if (items.length < budget) {
|
|
215
|
+
looked = true;
|
|
216
|
+
// Rows past the record budget would only be read again next scan.
|
|
217
|
+
const limit = Math.min(maxRowsPerScan, budget - items.length + maxPendingRows);
|
|
218
|
+
const rows = selectRows(context, table, "t.rowid > ?", [cursor], "ASC", limit);
|
|
219
|
+
selected = rows.length;
|
|
220
|
+
for (const row of rows) {
|
|
221
|
+
if (readable(row)) {
|
|
222
|
+
if (row.finished || settled(row, context.now)) {
|
|
223
|
+
if (items.length >= budget)
|
|
224
|
+
break;
|
|
225
|
+
deliver(row);
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
// Full: stop here and read this row again next scan.
|
|
229
|
+
if (kept.length >= maxPendingRows)
|
|
230
|
+
break;
|
|
231
|
+
kept.push(row);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
count(row);
|
|
236
|
+
}
|
|
237
|
+
cursor = row.rowID;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
if (cursor !== saved)
|
|
241
|
+
context.cursors.set(cursorKey, cursor);
|
|
242
|
+
if (changed || kept.length !== pending.length)
|
|
243
|
+
writePending(context, table, kept);
|
|
244
|
+
return {
|
|
245
|
+
items,
|
|
246
|
+
malformed,
|
|
247
|
+
oversized,
|
|
248
|
+
idle: looked && selected === 0 && !changed && kept.length === pending.length,
|
|
249
|
+
recheckAt: recheckTime(kept),
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
function settled(row, now) {
|
|
253
|
+
return row.updated <= 0 || now - row.updated >= settleMilliseconds;
|
|
254
|
+
}
|
|
255
|
+
function recheckTime(rows) {
|
|
256
|
+
let earliest;
|
|
257
|
+
for (const row of rows) {
|
|
258
|
+
if (row.updated <= 0)
|
|
259
|
+
continue;
|
|
260
|
+
const at = row.updated + settleMilliseconds;
|
|
261
|
+
earliest = Math.min(earliest ?? at, at);
|
|
262
|
+
}
|
|
263
|
+
return earliest;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Held-back row ids and how many were stored, recording each cursor read
|
|
267
|
+
* for the idle check.
|
|
268
|
+
*/
|
|
269
|
+
function readPending(context, table, read) {
|
|
270
|
+
const countKey = context.key(`pending:${table}`);
|
|
271
|
+
const count = context.cursors.get(countKey);
|
|
272
|
+
read.push([countKey, count]);
|
|
273
|
+
const rowIDs = [];
|
|
274
|
+
for (let index = 0; index < Math.min(count ?? 0, maxPendingRows); index++) {
|
|
275
|
+
const key = context.key(`pending:${table}:${index}`);
|
|
276
|
+
const rowID = context.cursors.get(key);
|
|
277
|
+
read.push([key, rowID]);
|
|
278
|
+
if (rowID !== undefined && Number.isSafeInteger(rowID) && rowID > 0)
|
|
279
|
+
rowIDs.push(rowID);
|
|
280
|
+
}
|
|
281
|
+
return { rowIDs, count };
|
|
282
|
+
}
|
|
283
|
+
function writePending(context, table, rows) {
|
|
284
|
+
const countKey = context.key(`pending:${table}`);
|
|
285
|
+
const previous = Math.min(context.cursors.get(countKey) ?? 0, maxPendingRows);
|
|
286
|
+
if (rows.length === 0)
|
|
287
|
+
context.cursors.delete(countKey);
|
|
288
|
+
else
|
|
289
|
+
context.cursors.set(countKey, rows.length);
|
|
290
|
+
for (let index = 0; index < Math.max(previous, rows.length); index++) {
|
|
291
|
+
const key = context.key(`pending:${table}:${index}`);
|
|
292
|
+
const row = rows[index];
|
|
293
|
+
if (row === undefined)
|
|
294
|
+
context.cursors.delete(key);
|
|
295
|
+
else
|
|
296
|
+
context.cursors.set(key, row.rowID);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
function maxRowID(database, table) {
|
|
300
|
+
const value = database.prepare(`SELECT max(rowid) AS row_id FROM ${table}`).get()?.["row_id"];
|
|
301
|
+
return typeof value === "number" && Number.isSafeInteger(value) ? value : 0;
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* SQL, over the table alias `t`, that is true when a row is read from
|
|
305
|
+
* another place: a session with event rows is read from its events, and an
|
|
306
|
+
* OpenCode 2 row copied from OpenCode 1 from the OpenCode 1 rows.
|
|
307
|
+
*/
|
|
308
|
+
function elsewhere(columns, table) {
|
|
309
|
+
if (table !== "session_message") {
|
|
310
|
+
return columns.get("event")?.has("aggregate_id") === true
|
|
311
|
+
? "EXISTS (SELECT 1 FROM event e WHERE e.aggregate_id = t.session_id)"
|
|
312
|
+
: "0";
|
|
313
|
+
}
|
|
314
|
+
const message = columns.get("message");
|
|
315
|
+
if (message?.has("session_id") !== true)
|
|
316
|
+
return "0";
|
|
317
|
+
// A copied row keeps its OpenCode 1 creation time, so an OpenCode 1
|
|
318
|
+
// message at least as new means the row came from OpenCode 1. Without
|
|
319
|
+
// those times, a session with OpenCode 1 messages is left to them.
|
|
320
|
+
return message.has("time_created") && columns.get("session_message")?.has("time_created") === true
|
|
321
|
+
? "EXISTS (SELECT 1 FROM message v WHERE v.session_id = t.session_id AND v.time_created >= t.time_created)"
|
|
322
|
+
: "EXISTS (SELECT 1 FROM message v WHERE v.session_id = t.session_id)";
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Rows of one table. A row read elsewhere is returned without its data, so
|
|
326
|
+
* skipping it never reads a large tool output.
|
|
327
|
+
*/
|
|
328
|
+
function selectRows(context, table, where, parameters, order, limit) {
|
|
329
|
+
const columns = context.columns.get(table) ?? new Set();
|
|
330
|
+
const readElsewhere = elsewhere(context.columns, table);
|
|
331
|
+
const hasSequence = context.columns.get("event_sequence")?.has("aggregate_id") === true
|
|
332
|
+
? "EXISTS (SELECT 1 FROM event_sequence s WHERE s.aggregate_id = t.session_id)"
|
|
333
|
+
: "0";
|
|
334
|
+
const common = "t.rowid AS row_id, t.id AS id, t.session_id AS session_id, " +
|
|
335
|
+
`${columns.has("time_updated") ? "t.time_updated" : "0"} AS updated, ` +
|
|
336
|
+
`${columns.has("time_created") ? "t.time_created" : "NULL"} AS created, ` +
|
|
337
|
+
`${readElsewhere} AS elsewhere, ` +
|
|
338
|
+
`${hasSequence} AS has_sequence, ` +
|
|
339
|
+
`CASE WHEN ${readElsewhere} THEN NULL ELSE t.data END AS data`;
|
|
340
|
+
const sql = table === "message"
|
|
341
|
+
? `SELECT ${common} FROM message t`
|
|
342
|
+
: table === "session_message"
|
|
343
|
+
? `SELECT ${common}, t.type AS row_type FROM session_message t`
|
|
344
|
+
: `SELECT ${common}, t.message_id AS message_id, ` +
|
|
345
|
+
"CASE WHEN json_valid(m.data) THEN json_extract(m.data, '$.role') END AS role, " +
|
|
346
|
+
// Matches the message rule in parseMessage: a completion time or an error.
|
|
347
|
+
"CASE WHEN json_valid(m.data) THEN " +
|
|
348
|
+
"coalesce(json_type(m.data, '$.time.completed') IN ('integer', 'real'), 0) " +
|
|
349
|
+
"OR coalesce(json_type(m.data, '$.error') <> 'null', 0) END AS message_done " +
|
|
350
|
+
"FROM part t LEFT JOIN message m ON m.id = t.message_id AND m.session_id = t.session_id";
|
|
351
|
+
return context.database
|
|
352
|
+
.prepare(`${sql} WHERE ${where} ORDER BY t.rowid ${order} LIMIT ?`)
|
|
353
|
+
.all(...parameters, limit)
|
|
354
|
+
.flatMap((value) => tableRow(table, value));
|
|
355
|
+
}
|
|
356
|
+
function tableRow(table, value) {
|
|
357
|
+
const rowID = value["row_id"];
|
|
358
|
+
if (typeof rowID !== "number" || !Number.isSafeInteger(rowID))
|
|
359
|
+
return [];
|
|
360
|
+
const sessionID = value["session_id"];
|
|
361
|
+
const id = value["id"];
|
|
362
|
+
const updated = value["updated"];
|
|
363
|
+
const base = {
|
|
364
|
+
rowID,
|
|
365
|
+
sessionID: typeof sessionID === "string" ? sessionID : "",
|
|
366
|
+
elsewhere: value["elsewhere"] === 1,
|
|
367
|
+
hasSequence: value["has_sequence"] === 1,
|
|
368
|
+
updated: typeof updated === "number" && Number.isFinite(updated) ? updated : 0,
|
|
369
|
+
};
|
|
370
|
+
const none = { finished: true, items: [], oversizedItems: 0 };
|
|
371
|
+
if (base.elsewhere)
|
|
372
|
+
return [{ ...base, ...none, problem: undefined }];
|
|
373
|
+
const malformed = { ...base, ...none, problem: "malformed" };
|
|
374
|
+
const raw = value["data"];
|
|
375
|
+
if (typeof raw !== "string" || !validID(sessionID) || !validID(id))
|
|
376
|
+
return [malformed];
|
|
377
|
+
const limit = table === "session_message" ? maxMessageRowBytes : maxRecordBytes;
|
|
378
|
+
if (Buffer.byteLength(raw, "utf8") > limit) {
|
|
379
|
+
return [{ ...base, ...none, problem: "oversized" }];
|
|
380
|
+
}
|
|
381
|
+
const data = parseObject(raw);
|
|
382
|
+
if (data === undefined)
|
|
383
|
+
return [malformed];
|
|
384
|
+
const parsed = table === "message"
|
|
385
|
+
? parseMessage(data, id, sessionID)
|
|
386
|
+
: table === "session_message"
|
|
387
|
+
? parseSessionMessage(data, id, sessionID, value["row_type"], value["created"])
|
|
388
|
+
: parsePart(data, id, sessionID, value, base.updated);
|
|
389
|
+
return parsed === undefined
|
|
390
|
+
? [malformed]
|
|
391
|
+
: [{ ...base, oversizedItems: 0, problem: undefined, ...parsed }];
|
|
392
|
+
}
|
|
393
|
+
/** The list inside an OpenCode 2 message whose entries become records. */
|
|
394
|
+
const sessionMessageItems = {
|
|
395
|
+
assistant: { field: "content" },
|
|
396
|
+
user: { field: "files", type: "file" },
|
|
397
|
+
};
|
|
398
|
+
/**
|
|
399
|
+
* An OpenCode 2 message: one record for the message, without its parts,
|
|
400
|
+
* and one per part (an assistant's text, reasoning and tool calls, or a
|
|
401
|
+
* user's files), so a long reply never becomes one oversized record.
|
|
402
|
+
*/
|
|
403
|
+
function parseSessionMessage(data, id, sessionID, rowType, created) {
|
|
404
|
+
if (typeof rowType !== "string" || !/^[a-z][a-z0-9_-]{0,63}$/u.test(rowType))
|
|
405
|
+
return undefined;
|
|
406
|
+
const time = objectField(data, "time");
|
|
407
|
+
// An assistant step is complete once OpenCode records when it ended or
|
|
408
|
+
// failed, after its tool calls settle; a user's shell command once it
|
|
409
|
+
// exits; a compaction once it completes or fails. The rest are written
|
|
410
|
+
// complete.
|
|
411
|
+
const finished = rowType === "assistant" || rowType === "shell"
|
|
412
|
+
? typeof time?.["completed"] === "number"
|
|
413
|
+
: rowType === "compaction"
|
|
414
|
+
? data["status"] === "completed" || data["status"] === "failed"
|
|
415
|
+
: true;
|
|
416
|
+
const listed = sessionMessageItems[rowType];
|
|
417
|
+
const info = { ...data, id, sessionID, type: rowType };
|
|
418
|
+
if (listed !== undefined)
|
|
419
|
+
delete info[listed.field];
|
|
420
|
+
const items = [];
|
|
421
|
+
let oversizedItems = 0;
|
|
422
|
+
const add = (key, type, value) => {
|
|
423
|
+
if (Buffer.byteLength(JSON.stringify(value), "utf8") > maxRecordBytes)
|
|
424
|
+
oversizedItems++;
|
|
425
|
+
else
|
|
426
|
+
items.push({ sessionID, key, type, value, messageInfo: undefined });
|
|
427
|
+
};
|
|
428
|
+
add(`session_message:${id}`, `session_message.${rowType}`, { sessionID, info });
|
|
429
|
+
const list = listed === undefined ? undefined : data[listed.field];
|
|
430
|
+
if (listed !== undefined && Array.isArray(list)) {
|
|
431
|
+
// A part without its own time happened after the part before it.
|
|
432
|
+
let at = firstTime([time?.["created"], created]);
|
|
433
|
+
for (const [index, entry] of list.entries()) {
|
|
434
|
+
if (typeof entry !== "object" || entry === null || Array.isArray(entry))
|
|
435
|
+
continue;
|
|
436
|
+
const part = entry;
|
|
437
|
+
const ownTime = objectField(part, "time");
|
|
438
|
+
at = firstTime([ownTime?.["completed"], ownTime?.["ran"], ownTime?.["created"]]) ?? at;
|
|
439
|
+
const partType = listed.type ??
|
|
440
|
+
(typeof part["type"] === "string" && /^[a-z][a-z0-9_-]{0,31}$/u.test(part["type"])
|
|
441
|
+
? part["type"]
|
|
442
|
+
: "part");
|
|
443
|
+
add(`session_message:${id}:${index}`, `session_message.${rowType}.${partType}`, { sessionID, messageID: id, ...(at === undefined ? {} : { time: at }), part });
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
return { finished, items, oversizedItems };
|
|
447
|
+
}
|
|
448
|
+
function parseMessage(data, id, sessionID) {
|
|
449
|
+
const time = objectField(data, "time");
|
|
450
|
+
// A user message is written complete. An assistant message is complete
|
|
451
|
+
// once OpenCode records when it finished or why it failed.
|
|
452
|
+
const finished = data["role"] !== "assistant" ||
|
|
453
|
+
typeof time?.["completed"] === "number" ||
|
|
454
|
+
(data["error"] !== undefined && data["error"] !== null);
|
|
455
|
+
return {
|
|
456
|
+
finished,
|
|
457
|
+
items: [{
|
|
458
|
+
sessionID,
|
|
459
|
+
key: `message:${id}`,
|
|
460
|
+
type: "message.updated.1",
|
|
461
|
+
value: { sessionID, info: { ...data, id, sessionID } },
|
|
462
|
+
messageInfo: undefined,
|
|
463
|
+
}],
|
|
464
|
+
};
|
|
465
|
+
}
|
|
466
|
+
function parsePart(data, id, sessionID, value, updated) {
|
|
467
|
+
const messageID = value["message_id"];
|
|
468
|
+
if (!validID(messageID))
|
|
469
|
+
return undefined;
|
|
470
|
+
const role = value["role"];
|
|
471
|
+
const time = partTime(data, value["created"], updated);
|
|
472
|
+
return {
|
|
473
|
+
finished: value["message_done"] === 1 || role === "user" || partFinished(data),
|
|
474
|
+
items: [{
|
|
475
|
+
sessionID,
|
|
476
|
+
key: `part:${id}`,
|
|
477
|
+
type: "message.part.updated.1",
|
|
478
|
+
value: {
|
|
479
|
+
sessionID,
|
|
480
|
+
...(time === undefined ? {} : { time }),
|
|
481
|
+
part: { ...data, id, messageID, sessionID },
|
|
482
|
+
},
|
|
483
|
+
messageInfo: role === "user" || role === "assistant"
|
|
484
|
+
? { id: messageID, role, sessionID }
|
|
485
|
+
: undefined,
|
|
486
|
+
}],
|
|
487
|
+
};
|
|
488
|
+
}
|
|
489
|
+
/** Whether a part's own fields mark it finished. */
|
|
490
|
+
function partFinished(part) {
|
|
491
|
+
const type = part["type"];
|
|
492
|
+
if (type === "text" || type === "reasoning") {
|
|
493
|
+
return typeof objectField(part, "time")?.["end"] === "number";
|
|
494
|
+
}
|
|
495
|
+
if (type === "tool") {
|
|
496
|
+
const status = objectField(part, "state")?.["status"];
|
|
497
|
+
return status === "completed" || status === "error";
|
|
498
|
+
}
|
|
499
|
+
// Other parts (step boundaries, patches, files) are written once.
|
|
500
|
+
return true;
|
|
501
|
+
}
|
|
502
|
+
/** When the part happened: its own end or start, else when it was written. */
|
|
503
|
+
function partTime(part, created, updated) {
|
|
504
|
+
const time = objectField(part, "time");
|
|
505
|
+
const stateTime = objectField(objectField(part, "state") ?? {}, "time");
|
|
506
|
+
return firstTime([
|
|
507
|
+
time?.["end"],
|
|
508
|
+
stateTime?.["end"],
|
|
509
|
+
time?.["start"],
|
|
510
|
+
stateTime?.["start"],
|
|
511
|
+
created,
|
|
512
|
+
updated,
|
|
513
|
+
]);
|
|
514
|
+
}
|
|
515
|
+
function firstTime(candidates) {
|
|
516
|
+
for (const candidate of candidates) {
|
|
517
|
+
if (typeof candidate === "number" && Number.isFinite(candidate) && candidate > 0) {
|
|
518
|
+
return candidate;
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
return undefined;
|
|
522
|
+
}
|
|
523
|
+
function validID(value) {
|
|
524
|
+
return typeof value === "string" &&
|
|
525
|
+
value.length > 0 &&
|
|
526
|
+
Buffer.byteLength(value, "utf8") <= 128 &&
|
|
527
|
+
!/[\u0000-\u001f\u007f]/u.test(value);
|
|
528
|
+
}
|
|
529
|
+
function objectField(value, field) {
|
|
530
|
+
const nested = value[field];
|
|
531
|
+
return typeof nested === "object" && nested !== null && !Array.isArray(nested)
|
|
532
|
+
? nested
|
|
533
|
+
: undefined;
|
|
534
|
+
}
|
|
535
|
+
function parseObject(value) {
|
|
536
|
+
try {
|
|
537
|
+
const parsed = JSON.parse(value);
|
|
538
|
+
return typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)
|
|
539
|
+
? parsed
|
|
540
|
+
: undefined;
|
|
541
|
+
}
|
|
542
|
+
catch {
|
|
543
|
+
return undefined;
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
//# sourceMappingURL=opencode-message-tables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode-message-tables.js","sourceRoot":"","sources":["../../../src/activity/opencode-message-tables.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { SourceRecord } from "./source-reader.js";
|
|
2
|
+
import { type CompletedHistory, type SQLiteConnections } from "./sqlite-connections.js";
|
|
2
3
|
type ScanOptions = Readonly<{
|
|
3
4
|
adapterId: string;
|
|
4
5
|
roots: readonly string[];
|
|
@@ -7,6 +8,12 @@ type ScanOptions = Readonly<{
|
|
|
7
8
|
replayOnFirstStart: boolean;
|
|
8
9
|
maxReplayRecords: number;
|
|
9
10
|
historical?: boolean;
|
|
11
|
+
/** Connections a live reader keeps open between scans. */
|
|
12
|
+
connections?: SQLiteConnections;
|
|
13
|
+
/** History only: databases already read to the end. */
|
|
14
|
+
completedHistory?: CompletedHistory;
|
|
15
|
+
/** The time in milliseconds, for deciding when a row has settled. */
|
|
16
|
+
clock?: () => number;
|
|
10
17
|
}>;
|
|
11
18
|
export declare function scanOpenCodeSQLiteSources(options: ScanOptions): Promise<Readonly<{
|
|
12
19
|
records: readonly SourceRecord[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-sqlite-source.d.ts","sourceRoot":"","sources":["../../../src/activity/opencode-sqlite-source.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"opencode-sqlite-source.d.ts","sourceRoot":"","sources":["../../../src/activity/opencode-sqlite-source.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,KAAK,gBAAgB,EAAuC,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAS7H,KAAK,WAAW,GAAG,QAAQ,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,uDAAuD;IACvD,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,MAAM,CAAC;CACtB,CAAC,CAAC;AAaH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,QAAQ,CAAC;IAClB,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC,CAAC,CAoBF"}
|