hippo-memory 1.69.0 → 1.70.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/README.md +5 -2
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +1 -3
- package/dist/agent-memories/claude-code.js +11 -7
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +3 -2
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +1 -1
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +1 -1
- package/dist/agent-memories/sync.js +24 -33
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +2 -2
- package/dist/api/assemble.js +42 -32
- package/dist/api/audit.d.ts +4 -7
- package/dist/api/audit.js +6 -20
- package/dist/api/auth.d.ts +5 -18
- package/dist/api/auth.js +44 -194
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
- package/dist/{availability.js → api/availability.js} +12 -29
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +5 -5
- package/dist/api/context-select.js +37 -45
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +48 -61
- package/dist/api/dormant.d.ts +3 -3
- package/dist/api/dormant.js +38 -107
- package/dist/api/drill-down.d.ts +2 -2
- package/dist/api/drill-down.js +37 -65
- package/dist/api/forget.d.ts +2 -11
- package/dist/api/forget.js +13 -46
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/index.d.ts +26 -0
- package/dist/api/index.js +29 -0
- package/dist/api/instruction-detect.js +74 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +20 -0
- package/dist/api/ledger-db.js +79 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +36 -0
- package/dist/api/outcome.d.ts +5 -42
- package/dist/api/outcome.js +15 -80
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/promote.d.ts +4 -15
- package/dist/api/promote.js +29 -106
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
- package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +112 -0
- package/dist/{recall-history.js → api/recall-history.js} +30 -25
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +41 -16
- package/dist/api/recall.d.ts +1 -1
- package/dist/api/recall.js +39 -37
- package/dist/api/remember.d.ts +10 -12
- package/dist/api/remember.js +29 -45
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -7
- package/dist/api/sleep-run.js +63 -75
- package/dist/api/sleep.d.ts +1 -1
- package/dist/api/tokens.d.ts +2 -2
- package/dist/api/tokens.js +9 -21
- package/dist/api/types.d.ts +2 -2
- package/dist/api/types.js +1 -1
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +1 -1
- package/dist/capture/command.js +54 -41
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +4 -1
- package/dist/capture/compact.js +40 -22
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
- package/dist/capture/copilot-transcript.js +1 -1
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
- package/dist/{session-digest.js → capture/session-digest.js} +17 -23
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.js +6 -4
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.js +68 -74
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
- package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +77 -72
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +18 -20
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +59 -181
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +25 -23
- package/dist/{client.d.ts → cli/client.d.ts} +1 -1
- package/dist/{client.js → cli/client.js} +1 -1
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +39 -0
- package/dist/cli/context.d.ts +2 -13
- package/dist/cli/context.js +41 -71
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +109 -99
- package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
- package/dist/cli/curate.d.ts +9 -9
- package/dist/cli/curate.js +177 -149
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +46 -34
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +108 -218
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +43 -31
- package/dist/cli/explain.d.ts +1 -1
- package/dist/cli/explain.js +35 -19
- package/dist/cli/flag-values.d.ts +25 -0
- package/dist/cli/flag-values.js +103 -0
- package/dist/cli/flags.d.ts +303 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +39 -34
- package/dist/cli/hook-runtime.d.ts +49 -0
- package/dist/cli/hook-runtime.js +155 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +151 -118
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +110 -0
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +9 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +31 -27
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +65 -0
- package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
- package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +77 -280
- package/dist/cli/print.d.ts +18 -0
- package/dist/cli/print.js +85 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -49
- package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +101 -150
- package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
- package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
- package/dist/cli/remember.d.ts +1 -3
- package/dist/cli/remember.js +124 -103
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
- package/dist/{scheduler.js → cli/scheduler.js} +13 -7
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +34 -4
- package/dist/cli/session-hooks.d.ts +4 -4
- package/dist/cli/session-hooks.js +190 -184
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +41 -21
- package/dist/cli/shared.d.ts +5 -95
- package/dist/cli/shared.js +18 -369
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +31 -55
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +2 -8
- package/dist/cli/sleep.js +20 -76
- package/dist/cli/status.d.ts +3 -3
- package/dist/cli/status.js +39 -41
- package/dist/{stdin.js → cli/stdin.js} +6 -6
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +68 -42
- package/dist/cli/usage.js +4 -2
- package/dist/cli.d.ts +289 -5
- package/dist/cli.js +184 -117
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +1 -1
- package/dist/connectors/github/backfill.js +29 -66
- package/dist/connectors/github/cli-impl.js +59 -74
- package/dist/connectors/github/deletion.d.ts +5 -6
- package/dist/connectors/github/deletion.js +18 -52
- package/dist/connectors/github/dlq.d.ts +7 -61
- package/dist/connectors/github/dlq.js +19 -119
- package/dist/connectors/github/ingest.d.ts +2 -31
- package/dist/connectors/github/ingest.js +20 -83
- package/dist/connectors/github/octokit-client.d.ts +1 -1
- package/dist/connectors/github/octokit-client.js +2 -1
- package/dist/connectors/github/tenant-routing.d.ts +2 -2
- package/dist/connectors/github/tenant-routing.js +10 -36
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/types.d.ts +1 -1
- package/dist/connectors/github/types.js +15 -18
- package/dist/connectors/github/webhook.d.ts +3 -2
- package/dist/connectors/github/webhook.js +84 -87
- package/dist/connectors/slack/backfill.d.ts +1 -1
- package/dist/connectors/slack/backfill.js +5 -29
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +7 -49
- package/dist/connectors/slack/dlq.js +25 -118
- package/dist/connectors/slack/ingest.d.ts +5 -18
- package/dist/connectors/slack/ingest.js +27 -91
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.js +13 -14
- package/dist/connectors/slack/transform.d.ts +1 -1
- package/dist/connectors/slack/types.d.ts +1 -1
- package/dist/connectors/slack/types.js +3 -12
- package/dist/connectors/slack/web-client.js +2 -2
- package/dist/connectors/slack/webhook.d.ts +3 -2
- package/dist/connectors/slack/webhook.js +75 -82
- package/dist/connectors/slack/workspaces.d.ts +4 -17
- package/dist/connectors/slack/workspaces.js +4 -34
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +4 -4
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
- package/dist/{dag.js → consolidate/dag.js} +60 -81
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +28 -22
- package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
- package/dist/consolidate/flush-units.d.ts +2 -2
- package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
- package/dist/consolidate/half-life-migration.js +106 -0
- package/dist/consolidate/llm-passes.js +8 -8
- package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
- package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
- package/dist/consolidate/merge.js +57 -54
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
- package/dist/consolidate/physics-pass.js +46 -46
- package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
- package/dist/{replay.js → consolidate/replay.js} +2 -2
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +1 -1
- package/dist/consolidate/sleep.js +64 -134
- package/dist/{trace.js → consolidate/trace.js} +4 -6
- package/dist/consolidate/traces.js +34 -29
- package/dist/{ablation.js → core/ablation.js} +1 -1
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.js → core/ambient.js} +12 -10
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +13 -2
- package/dist/{capture-contract.js → core/capture-contract.js} +64 -0
- package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
- package/dist/{compare.js → core/compare.js} +10 -3
- package/dist/{config.d.ts → core/config.d.ts} +6 -6
- package/dist/{config.js → core/config.js} +99 -72
- package/dist/core/handoff.js +87 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
- package/dist/{memory.d.ts → core/memory.d.ts} +17 -5
- package/dist/{memory.js → core/memory.js} +110 -82
- package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
- package/dist/{physics.js → core/physics.js} +2 -1
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
- package/dist/{project-identity.js → core/project-identity.js} +5 -17
- package/dist/{project-remote.js → core/project-remote.js} +4 -4
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/{salience.js → core/salience.js} +35 -20
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
- package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +18 -1
- package/dist/db/busy.js +74 -9
- package/dist/db/connect.d.ts +10 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +25 -30
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -35
- package/dist/db/migrations/v16.js +29 -26
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v20.js +4 -2
- package/dist/db/migrations/v22.js +39 -36
- package/dist/db/migrations/v24.js +27 -22
- package/dist/db/migrations/v29.js +37 -32
- package/dist/db/migrations/v31.js +36 -31
- package/dist/db/migrations/v35.js +1 -1
- package/dist/db/migrations/v39.js +1 -1
- package/dist/db/migrations/v40.js +15 -14
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +1 -1
- package/dist/db/migrations/v45.js +1 -1
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +1 -1
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +9 -1
- package/dist/db/open.js +21 -4
- package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
- package/dist/{physics-state.js → db/physics-state.js} +9 -16
- package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
- package/dist/{vector-store.js → db/vector-store.js} +76 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +105 -136
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +3 -3
- package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
- package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
- package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
- package/dist/{eval.js → eval/eval.js} +29 -22
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
- package/dist/{judgment.js → eval/judgment.js} +4 -9
- package/dist/extensions/openclaw-plugin/index.js +1 -2
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
- package/dist/{graph-extract.js → graph/extract.js} +37 -52
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
- package/dist/{graph-recall.js → graph/recall.js} +55 -36
- package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
- package/dist/{graph-stream.js → graph/stream.js} +9 -7
- package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
- package/dist/{graph-view.js → graph/view.js} +127 -167
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +14 -15
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +14 -15
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +1 -1
- package/dist/hooks/json-hooks.js +31 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +0 -4
- package/dist/hooks/shared.js +1 -5
- package/dist/importers/core.d.ts +2 -6
- package/dist/importers/core.js +41 -39
- package/dist/importers/markdown-parse.d.ts +1 -10
- package/dist/importers/markdown-parse.js +2 -19
- package/dist/importers/markdown.js +2 -1
- package/dist/importers/sources.js +50 -46
- package/dist/importers/vault.js +71 -92
- package/dist/index.d.ts +22 -22
- package/dist/index.js +21 -21
- package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
- package/dist/{autolearn.js → learn/autolearn.js} +13 -11
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +125 -0
- package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
- package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
- package/dist/{invalidation.js → learn/invalidation.js} +83 -99
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +37 -60
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.js +7 -27
- package/dist/mcp/protocol.d.ts +6 -10
- package/dist/mcp/protocol.js +8 -14
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +68 -50
- package/dist/mcp/request.js +62 -60
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/session-state.d.ts +1 -2
- package/dist/mcp/session-state.js +2 -2
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.js +69 -31
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +2 -2
- package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
- package/dist/objects/customer-notes.js +112 -0
- package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
- package/dist/objects/decisions.js +101 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
- package/dist/objects/incidents.js +130 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
- package/dist/objects/policies.js +189 -0
- package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
- package/dist/objects/processes.js +146 -0
- package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
- package/dist/objects/project-briefs.js +255 -0
- package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
- package/dist/objects/skills.js +156 -0
- package/dist/postinstall.js +4 -2
- package/dist/predictions/planning-fallacy.d.ts +4 -76
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +27 -47
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +15 -23
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +30 -49
- package/dist/rerankers/llm.d.ts +2 -4
- package/dist/rerankers/llm.js +33 -50
- package/dist/rerankers/outage-warning.d.ts +7 -0
- package/dist/rerankers/outage-warning.js +31 -0
- package/dist/rerankers/remote.d.ts +3 -0
- package/dist/rerankers/remote.js +23 -0
- package/dist/rerankers/types.d.ts +1 -1
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -1
- package/dist/search/boosts.js +34 -13
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +4 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +7 -5
- package/dist/{path-context.js → search/path-context.js} +3 -1
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +15 -15
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +3 -3
- package/dist/search/vector.js +17 -11
- package/dist/server/auth.d.ts +1 -1
- package/dist/server/auth.js +26 -18
- package/dist/server/boot.d.ts +24 -0
- package/dist/server/boot.js +465 -0
- package/dist/server/client-ip.d.ts +5 -1
- package/dist/server/client-ip.js +18 -6
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/key-check-bounds.d.ts +8 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.js +1 -1
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +34 -24
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +10 -4
- package/dist/server/request.js +63 -12
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +209 -0
- package/dist/server/routes/admin.js +13 -8
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +32 -97
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +42 -105
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +42 -95
- package/dist/server/routes/memories.js +12 -14
- package/dist/server/routes/object-routes.d.ts +40 -0
- package/dist/server/routes/object-routes.js +80 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +40 -124
- package/dist/server/routes/predictions.js +29 -45
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +38 -118
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +38 -110
- package/dist/server/routes/recall.js +14 -12
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +37 -125
- package/dist/{server-detect.js → server/server-detect.js} +1 -1
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +70 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +27 -8
- package/dist/server/validation.d.ts +3 -4
- package/dist/server/validation.js +6 -11
- package/dist/server.d.ts +39 -61
- package/dist/server.js +24 -568
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
- package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
- package/dist/{scope.js → sharing/scope.js} +1 -1
- package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
- package/dist/{shared.js → sharing/shared.js} +100 -77
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +10 -10
- package/dist/store/audit-event.d.ts +11 -5
- package/dist/store/audit-event.js +5 -4
- package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
- package/dist/{audit.js → store/audit.js} +91 -6
- package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
- package/dist/{auth.js → store/auth.js} +100 -92
- package/dist/store/candidates.d.ts +23 -12
- package/dist/store/candidates.js +87 -35
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
- package/dist/{card-detail.js → store/card-detail.js} +1 -1
- package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
- package/dist/{store-cards.js → store/cards.js} +85 -146
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +22 -5
- package/dist/store/conflicts.js +160 -109
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +92 -0
- package/dist/store/delete-and-batch.d.ts +20 -24
- package/dist/store/delete-and-batch.js +64 -40
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +51 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
- package/dist/{dormant.js → store/dormant.js} +151 -6
- package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
- package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
- package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
- package/dist/store/entry-reads.d.ts +46 -7
- package/dist/store/entry-reads.js +120 -21
- package/dist/store/entry-row.d.ts +8 -2
- package/dist/store/entry-row.js +28 -8
- package/dist/store/entry-writes.d.ts +33 -4
- package/dist/store/entry-writes.js +108 -26
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
- package/dist/{goals.js → store/goals.js} +45 -94
- package/dist/store/graph-queue.d.ts +29 -0
- package/dist/store/graph-queue.js +101 -0
- package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
- package/dist/{graph/read.js → store/graph-reads.js} +63 -115
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
- package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
- package/dist/store/graph-view-rows.d.ts +12 -0
- package/dist/store/graph-view-rows.js +67 -0
- package/dist/store/graph-writes.d.ts +58 -0
- package/dist/store/graph-writes.js +256 -0
- package/dist/store/half-life.d.ts +34 -0
- package/dist/store/half-life.js +77 -0
- package/dist/store/handoffs.d.ts +1 -1
- package/dist/store/handoffs.js +39 -30
- package/dist/store/index-and-stats.d.ts +8 -1
- package/dist/store/index-and-stats.js +51 -48
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +1 -1
- package/dist/store/markdown.js +4 -3
- package/dist/store/mirrors.d.ts +5 -7
- package/dist/store/mirrors.js +39 -25
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +6 -4
- package/dist/store/open.js +24 -23
- package/dist/store/planning-fallacy-evidence.d.ts +42 -0
- package/dist/store/planning-fallacy-evidence.js +81 -0
- package/dist/store/port.d.ts +646 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
- package/dist/{predictions/store.js → store/predictions.js} +52 -67
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +3 -1
- package/dist/{raw-archive.js → store/raw-archive.js} +6 -2
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +2 -2
- package/dist/{recall-scope.js → store/recall-scope.js} +3 -3
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
- package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +162 -0
- package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
- package/dist/{rejection.js → store/rejection.js} +3 -2
- package/dist/store/rows.d.ts +2 -3
- package/dist/store/rows.js +18 -11
- package/dist/store/search-rows.d.ts +15 -4
- package/dist/store/search-rows.js +41 -28
- package/dist/store/sessions.d.ts +13 -2
- package/dist/store/sessions.js +79 -45
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +59 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +28 -0
- package/dist/store/sqlite/executor.js +286 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +38 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +218 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +314 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +26 -0
- package/dist/store/sqlite/store.js +295 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +124 -0
- package/dist/store/sqlite/worker-ops.js +82 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +76 -0
- package/dist/store/summaries.d.ts +2 -11
- package/dist/store/summaries.js +17 -44
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/store/tenant-lookup.d.ts +1 -1
- package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
- package/dist/{tenant.js → store/tenant.js} +1 -1
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
- package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +26 -0
- package/dist/store/vector-writes.d.ts +10 -3
- package/dist/store/vector-writes.js +35 -5
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
- package/dist/{working-memory.js → store/working-memory.js} +39 -41
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +13 -33
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +67 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +46 -0
- package/dist/util/atomic-write.d.ts +3 -0
- package/dist/util/atomic-write.js +107 -0
- package/dist/util/crash-handlers.d.ts +5 -0
- package/dist/util/crash-handlers.js +30 -0
- package/dist/{env.d.ts → util/env.d.ts} +15 -2
- package/dist/{env.js → util/env.js} +20 -2
- package/dist/util/home-path.js +67 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
- package/dist/{http-retry.js → util/http-retry.js} +38 -7
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +5 -2
- package/dist/{log.js → util/log.js} +12 -3
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +27 -0
- package/dist/util/request-scope.js +47 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +18 -0
- package/dist/util/token-text.js +23 -0
- package/dist/{version.d.ts → util/version.d.ts} +1 -1
- package/dist/{version.js → util/version.js} +1 -1
- package/extensions/openclaw-plugin/index.ts +1 -5
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.js +0 -326
- package/dist/extract.js +0 -133
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/policies.js +0 -434
- package/dist/processes.js +0 -371
- package/dist/project-briefs.js +0 -523
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
- /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
- /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
- /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
- /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
- /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
- /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
- /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
- /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{card.d.ts → core/card.d.ts} +0 -0
- /package/dist/{card.js → core/card.js} +0 -0
- /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
- /package/dist/{physics-config.js → core/physics-config.js} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
- /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
- /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
- /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
- /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
- /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
- /package/dist/{rrf.js → search/rrf.js} +0 -0
- /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
- /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
- /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
- /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
- /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
- /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
- /package/dist/{yaml.js → store/yaml.js} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
- /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
|
@@ -8,34 +8,37 @@ import { resolveJsonHookPaths } from '../hooks/json-hooks.js';
|
|
|
8
8
|
import { isInitialized } from '../store/open.js';
|
|
9
9
|
import { loadActiveTaskSnapshot, loadFreshActiveTaskSnapshot, closeTaskSnapshotsForSession, listSessionEvents, } from '../store/sessions.js';
|
|
10
10
|
import { writeSessionEndHandoff } from '../store/handoffs.js';
|
|
11
|
-
import { readSessionScan, recordSessionDigest } from '../session-digest.js';
|
|
12
|
-
import { openHippoDb, closeHippoDb } from '../db.js';
|
|
13
|
-
import { captureToolFailure } from '../capture-error.js';
|
|
14
|
-
import {
|
|
11
|
+
import { readSessionScan, recordSessionDigest } from '../capture/session-digest.js';
|
|
12
|
+
import { openHippoDb, closeHippoDb } from '../db/index.js';
|
|
13
|
+
import { captureToolFailure } from '../capture/capture-error.js';
|
|
14
|
+
import { readApiCalls, recordRereads, } from '../store/token-ledger.js';
|
|
15
|
+
import { estimateTokens } from '../util/token-text.js';
|
|
15
16
|
import { currentMachine, importSessionFolder } from '../agent-memories/sync.js';
|
|
16
17
|
import { summaryLine } from '../agent-memories/report.js';
|
|
17
|
-
import { resolveProjectIdentity } from '../project-identity.js';
|
|
18
|
-
import { getGlobalRoot } from '../shared.js';
|
|
18
|
+
import { resolveProjectIdentity } from '../core/project-identity.js';
|
|
19
|
+
import { getGlobalRoot } from '../sharing/shared.js';
|
|
19
20
|
import { cmdCapture } from '../capture/command.js';
|
|
20
21
|
import { cmdPreCompact, cmdPostCompact } from '../capture/compact.js';
|
|
21
22
|
import { transcriptWorkingState } from '../capture/working-state.js';
|
|
22
|
-
import { collectHandoffEvidence } from '../handoff-evidence.js';
|
|
23
|
-
import { resolveLastSessionTranscript } from '../capture/transcript.js';
|
|
23
|
+
import { collectHandoffEvidence } from '../capture/handoff-evidence.js';
|
|
24
24
|
import { copilotTranscriptFor, SESSION_ID_RE } from '../capture/copilot-transcript.js';
|
|
25
25
|
import { loadTurnPosition, runSessionWorker, saveTurnPosition, turnsAfter } from '../capture/session-worker.js';
|
|
26
|
-
import { isStringValue, readVscodeStop } from '../capture-contract.js';
|
|
27
|
-
import { loadConfig } from '../config.js';
|
|
28
|
-
import {
|
|
29
|
-
import { truncateCodePointSafe } from '../transcript-tail.js';
|
|
30
|
-
import { COMPACTION_DB_WAIT_MS } from '../compaction-record.js';
|
|
31
|
-
import { COMPACT_RESUME_EVENT_CONTENT_CAP, COMPACT_RESUME_MAX_AGE_MS, compactResumeText } from '../context-render.js';
|
|
32
|
-
import { normaliseHookPayload, readHookStdin, readStdinBounded } from '
|
|
33
|
-
import { resolveTenantId } from '../tenant.js';
|
|
34
|
-
import { errorMessage, log } from '../log.js';
|
|
35
|
-
import {
|
|
26
|
+
import { isStringValue, readSessionEnd, readVscodeStop } from '../core/capture-contract.js';
|
|
27
|
+
import { loadConfig } from '../core/config.js';
|
|
28
|
+
import { autoSleepDue } from '../api/auto-sleep.js';
|
|
29
|
+
import { truncateCodePointSafe } from '../util/transcript-tail.js';
|
|
30
|
+
import { COMPACTION_DB_WAIT_MS } from '../capture/compaction-record.js';
|
|
31
|
+
import { COMPACT_RESUME_EVENT_CONTENT_CAP, COMPACT_RESUME_MAX_AGE_MS, compactResumeText } from '../api/context-render.js';
|
|
32
|
+
import { normaliseHookPayload, readHookStdin, readStdinBounded } from './stdin.js';
|
|
33
|
+
import { resolveTenantId } from '../store/tenant.js';
|
|
34
|
+
import { errorMessage, log } from '../util/log.js';
|
|
35
|
+
import { bookLedgerTurn } from '../api/ledger-db.js';
|
|
36
|
+
import { flushDeliveryRecorder } from '../api/prompt-hook.js';
|
|
36
37
|
import { printError } from './output.js';
|
|
37
38
|
import { cmdLastSleep } from './last-sleep.js';
|
|
38
|
-
import {
|
|
39
|
+
import { readCompactResumePayload } from './compact-resume-payload.js';
|
|
40
|
+
import { boolFlag, flagIsTrue, stringFlag } from './flag-values.js';
|
|
41
|
+
import { logSessionEndImport, appendSessionEndCloseLog, resetHookInjection, hookStoreRoot, hookRuntime, payloadCwdRoot, runHookWithStores, inPilotHoldout, startDeliveryRecorder } from './hook-runtime.js';
|
|
39
42
|
/**
|
|
40
43
|
* SessionStart(compact) injector. Prints the active task snapshot + recent
|
|
41
44
|
* session trail so working state that would otherwise be lost to
|
|
@@ -49,61 +52,35 @@ import { logSessionEndImport, appendSessionEndCloseLog, resetHookInjection, hook
|
|
|
49
52
|
* hook must not pollute session startup.
|
|
50
53
|
*/
|
|
51
54
|
function cmdCompactResume(hippoRoot, stdinText, stdinTimedOut) {
|
|
55
|
+
let rec = null;
|
|
52
56
|
try {
|
|
53
57
|
// Gate on the non-exiting isInitialized check first: the store reads below call initStore, which would
|
|
54
58
|
// silently create a store in a project that never ran `hippo init`, and this hook fires globally.
|
|
55
59
|
if (!isInitialized(hippoRoot)) {
|
|
56
60
|
process.exit(0);
|
|
57
61
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
const nonEmptyStdin = !!stdinText && stdinText.trim() !== '';
|
|
64
|
-
// Without a payload session_id the cross-restore guard below can
|
|
65
|
-
// never fire, so a timed-out empty read must not reach the print path.
|
|
66
|
-
let suppressOutput = stdinTimedOut && !nonEmptyStdin;
|
|
67
|
-
let payloadSessionId = null;
|
|
68
|
-
if (nonEmptyStdin) {
|
|
69
|
-
let payload = null;
|
|
70
|
-
try {
|
|
71
|
-
payload = JSON.parse(stdinText.trim());
|
|
72
|
-
}
|
|
73
|
-
catch {
|
|
74
|
-
// Malformed JSON is handled as a null payload by the fail-closed check below.
|
|
75
|
-
payload = null;
|
|
76
|
-
}
|
|
77
|
-
if (!payload || typeof payload !== 'object') {
|
|
78
|
-
// Fail closed on malformed non-empty stdin; only a TTY/no-stdin manual run, which never reaches here, prints.
|
|
79
|
-
suppressOutput = true;
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
// Fail closed on structurally incomplete payloads too ({}, [], source missing/non-string): real
|
|
83
|
-
// SessionStart payloads always carry source, so a parsed one must say 'compact' to print.
|
|
84
|
-
// A sub-agent's payload carries its parent's session id, so the mismatch guard would pass and restore the parent's snapshot into it.
|
|
85
|
-
if (payload.source !== 'compact' || isSubagentPayload(stdinText)) {
|
|
86
|
-
suppressOutput = true;
|
|
87
|
-
}
|
|
88
|
-
if (typeof payload.session_id === 'string') {
|
|
89
|
-
payloadSessionId = payload.session_id;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
62
|
+
const payloadState = readCompactResumePayload(stdinText, stdinTimedOut);
|
|
63
|
+
let suppressOutput = payloadState.suppressOutput;
|
|
64
|
+
const payloadSessionId = payloadState.payloadSessionId;
|
|
65
|
+
if (payloadState.boundary)
|
|
66
|
+
rec = startDeliveryRecorder(hippoRoot, stdinText, 'claude-code', 'compact-resume');
|
|
93
67
|
// A compaction follows a prompt or SessionStart that booked the arm, so this only reads it.
|
|
94
68
|
if (!suppressOutput && payloadSessionId !== null && inPilotHoldout(hippoRoot, resolveTenantId({}), payloadSessionId, false)) {
|
|
95
69
|
suppressOutput = true;
|
|
70
|
+
rec?.disabled();
|
|
96
71
|
}
|
|
97
72
|
if (!suppressOutput)
|
|
98
|
-
restoreCompactSnapshot(hippoRoot, payloadSessionId);
|
|
73
|
+
restoreCompactSnapshot(hippoRoot, payloadSessionId, rec);
|
|
99
74
|
}
|
|
100
75
|
catch (err) {
|
|
101
76
|
// Empty stdout on any store error, never a crashed SessionStart; the reason goes to stderr, which the model never sees.
|
|
102
|
-
log.warn(`hippo compact-resume: skipped: ${
|
|
77
|
+
log.warn(`hippo compact-resume: skipped: ${errorMessage(err)}`);
|
|
103
78
|
}
|
|
79
|
+
// A no-op when the token ledger's handle already wrote the row; exit would drop it otherwise.
|
|
80
|
+
flushDeliveryRecorder(rec);
|
|
104
81
|
process.exit(0);
|
|
105
82
|
}
|
|
106
|
-
function restoreCompactSnapshot(hippoRoot, payloadSessionId) {
|
|
83
|
+
function restoreCompactSnapshot(hippoRoot, payloadSessionId, rec) {
|
|
107
84
|
const tenantId = resolveTenantId({});
|
|
108
85
|
const snapshot = loadFreshActiveTaskSnapshot(hippoRoot, tenantId, { maxAgeMs: COMPACT_RESUME_MAX_AGE_MS });
|
|
109
86
|
// Concurrent sessions must not cross-restore. Only suppress when BOTH ids are present and differ;
|
|
@@ -125,14 +102,18 @@ function restoreCompactSnapshot(hippoRoot, payloadSessionId) {
|
|
|
125
102
|
}
|
|
126
103
|
}
|
|
127
104
|
catch (err) {
|
|
128
|
-
log.warn(`hippo compact-resume: trail skipped: ${
|
|
105
|
+
log.warn(`hippo compact-resume: trail skipped: ${errorMessage(err)}`);
|
|
129
106
|
}
|
|
130
107
|
// Printed in one write so the ledger books exactly the text the model is handed.
|
|
131
108
|
const text = compactResumeText(snapshot, events);
|
|
132
109
|
console.log(text);
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
110
|
+
rec?.delivered({ state: 'sent', emittedText: `${text}\n` });
|
|
111
|
+
bookLedgerTurn(hippoRoot, {
|
|
112
|
+
uses: [{
|
|
113
|
+
tenantId, sessionId: payloadSessionId, surface: 'compact_resume', event: 'inject', items: 1, tokens: estimateTokens(text),
|
|
114
|
+
}],
|
|
115
|
+
delivery: (write) => flushDeliveryRecorder(rec, write),
|
|
116
|
+
});
|
|
136
117
|
}
|
|
137
118
|
/**
|
|
138
119
|
* SessionEnd entry point. Claude Code / OpenCode fire this on /exit while
|
|
@@ -147,54 +128,31 @@ function restoreCompactSnapshot(hippoRoot, payloadSessionId) {
|
|
|
147
128
|
*/
|
|
148
129
|
export async function cmdSessionEnd(hippoRoot, flags) {
|
|
149
130
|
const runtime = hookRuntime(flags);
|
|
150
|
-
const turn = flags
|
|
131
|
+
const turn = flagIsTrue(flags, 'turn');
|
|
151
132
|
// Copilot's hook command carries no path, since one quoted into it would need escaping for each shell; the log goes where the hook table used to point.
|
|
152
|
-
const logFile =
|
|
133
|
+
const logFile = stringFlag(flags, 'log-file') ?? (runtime === 'copilot' ? resolveJsonHookPaths('copilot').logFile : null);
|
|
153
134
|
// Bounded read: extracts transcript_path + session_id for the detached worker's argv.
|
|
154
|
-
let sessionId = null;
|
|
155
135
|
const raw = await readStdinBounded();
|
|
156
136
|
// Read before normalising: the Copilot CLI's agentStop shares this hook line, and camelCase keys would pass as VS Code's.
|
|
157
|
-
|
|
137
|
+
const stop = turn ? vscodeStopInput(raw) : null;
|
|
138
|
+
if (turn && !stop)
|
|
158
139
|
return;
|
|
159
140
|
const stdinText = normaliseHookPayload(raw.text);
|
|
160
141
|
// Before the spawn, since the worker finds its store from the folder it inherits.
|
|
161
142
|
const root = payloadCwdRoot(hippoRoot, stdinText, runtime);
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
const payload = JSON.parse(stdinText);
|
|
165
|
-
if (typeof payload.session_id === 'string') {
|
|
166
|
-
sessionId = payload.session_id;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
catch {
|
|
171
|
-
// No stdin, not JSON, or read failure: the snapshot close below will no-op.
|
|
172
|
-
}
|
|
143
|
+
const input = stop ?? sessionEndInput(stdinText, raw.timedOut, runtime);
|
|
144
|
+
const sessionId = input?.sessionId ?? null;
|
|
173
145
|
// Resolved here because only this process saw the payload; the worker captures just the path it is handed.
|
|
174
146
|
// Always a hook, so never scan: an empty stdin here is not a manual run. The Copilot CLI's sessionEnd names no transcript, so its log is found by id.
|
|
175
|
-
const
|
|
147
|
+
const named = input?.transcriptPath ?? null;
|
|
148
|
+
const transcriptPath = (named !== null && fs.existsSync(named) ? named : null)
|
|
176
149
|
?? (runtime === 'copilot' && sessionId ? copilotTranscriptFor(sessionId) : null);
|
|
177
|
-
const workerArgs = [process.argv[1], '__session-end-worker'];
|
|
178
|
-
if (logFile)
|
|
179
|
-
workerArgs.push('--log-file', logFile);
|
|
180
|
-
if (transcriptPath)
|
|
181
|
-
workerArgs.push('--transcript', transcriptPath);
|
|
182
|
-
if (sessionId)
|
|
183
|
-
workerArgs.push('--session-id', sessionId);
|
|
184
|
-
if (turn)
|
|
185
|
-
workerArgs.push('--turn');
|
|
186
150
|
try {
|
|
187
|
-
|
|
188
|
-
detached: true,
|
|
189
|
-
stdio: 'ignore',
|
|
190
|
-
windowsHide: true,
|
|
191
|
-
});
|
|
192
|
-
// An async spawn failure arrives as an 'error' event, which with no listener is an uncaught exception.
|
|
193
|
-
child.on('error', (err) => log.warn(`hippo session-end: the worker did not start: ${errorMessage(err)}`));
|
|
194
|
-
child.unref();
|
|
151
|
+
spawnSessionEndWorker(sessionEndWorkerArgs(logFile, transcriptPath, sessionId, turn));
|
|
195
152
|
}
|
|
196
|
-
catch {
|
|
197
|
-
|
|
153
|
+
catch (err) {
|
|
154
|
+
log.debug(`session-end: the worker did not spawn, running inline: ${errorMessage(err)}`);
|
|
155
|
+
// Inline is the last resort, handed what the child's argv would have carried.
|
|
198
156
|
if (logFile)
|
|
199
157
|
flags['log-file'] = logFile;
|
|
200
158
|
if (transcriptPath)
|
|
@@ -205,21 +163,51 @@ export async function cmdSessionEnd(hippoRoot, flags) {
|
|
|
205
163
|
return;
|
|
206
164
|
}
|
|
207
165
|
}
|
|
208
|
-
/**
|
|
209
|
-
function
|
|
166
|
+
/** What the session-end payload named; null for one hippo refuses or one that never arrived, and the worker then runs with neither value. */
|
|
167
|
+
function sessionEndInput(stdinText, timedOut, runtime) {
|
|
168
|
+
const receipt = readSessionEnd(stdinText, timedOut, runtime);
|
|
169
|
+
if (receipt.status === 'received')
|
|
170
|
+
return receipt.input;
|
|
171
|
+
log.debug(`session-end: ${receipt.reason}`);
|
|
172
|
+
return null;
|
|
173
|
+
}
|
|
174
|
+
function sessionEndWorkerArgs(logFile, transcriptPath, sessionId, turn) {
|
|
175
|
+
const workerArgs = [process.argv[1], '__session-end-worker'];
|
|
176
|
+
if (logFile)
|
|
177
|
+
workerArgs.push('--log-file', logFile);
|
|
178
|
+
if (transcriptPath)
|
|
179
|
+
workerArgs.push('--transcript', transcriptPath);
|
|
180
|
+
if (sessionId)
|
|
181
|
+
workerArgs.push('--session-id', sessionId);
|
|
182
|
+
if (turn)
|
|
183
|
+
workerArgs.push('--turn');
|
|
184
|
+
return workerArgs;
|
|
185
|
+
}
|
|
186
|
+
function spawnSessionEndWorker(workerArgs) {
|
|
187
|
+
const child = spawn(process.execPath, workerArgs, {
|
|
188
|
+
detached: true,
|
|
189
|
+
stdio: 'ignore',
|
|
190
|
+
windowsHide: true,
|
|
191
|
+
});
|
|
192
|
+
// An async spawn failure arrives as an 'error' event, which with no listener is an uncaught exception.
|
|
193
|
+
child.on('error', (err) => log.warn(`hippo session-end: the worker did not start: ${errorMessage(err)}`));
|
|
194
|
+
child.unref();
|
|
195
|
+
}
|
|
196
|
+
/** The input of a VS Code Stop payload with a session id that can name the lock file; null makes turn mode a silent no-op. */
|
|
197
|
+
function vscodeStopInput(raw) {
|
|
210
198
|
const receipt = readVscodeStop(raw.text, raw.timedOut);
|
|
211
|
-
return receipt.status === 'received' && receipt.input.sessionId !== null && SESSION_ID_RE.test(receipt.input.sessionId);
|
|
199
|
+
return receipt.status === 'received' && receipt.input.sessionId !== null && SESSION_ID_RE.test(receipt.input.sessionId) ? receipt.input : null;
|
|
212
200
|
}
|
|
213
201
|
export async function cmdSessionEndWorker(hippoRoot, flags) {
|
|
214
202
|
const sessionId = flags['session-id'];
|
|
215
|
-
await runSessionWorker(isStringValue(sessionId) ? sessionId : null, flags
|
|
203
|
+
await runSessionWorker(isStringValue(sessionId) ? sessionId : null, flagIsTrue(flags, 'turn') ? 'turn' : 'full', (mode) => sessionEndWork(hippoRoot, flags, mode));
|
|
216
204
|
}
|
|
217
205
|
async function sessionEndWork(hippoRoot, flags, mode) {
|
|
218
|
-
const transcriptPath =
|
|
219
|
-
const closeLogFile =
|
|
220
|
-
const closeSessionId =
|
|
206
|
+
const transcriptPath = stringFlag(flags, 'transcript');
|
|
207
|
+
const closeLogFile = stringFlag(flags, 'log-file') ?? null;
|
|
208
|
+
const closeSessionId = stringFlag(flags, 'session-id') ?? null;
|
|
221
209
|
const rereadLog = await bookSessionRereads(hippoRoot, transcriptPath, closeSessionId)
|
|
222
|
-
.catch((err) => [`re-read count failed: ${
|
|
210
|
+
.catch((err) => [`re-read count failed: ${errorMessage(err)}`]);
|
|
223
211
|
// Sleep starts the log file afresh, so the lines go in after it; on exit too, in case sleep exits the process.
|
|
224
212
|
const flushRereadLog = () => { for (const line of rereadLog.splice(0))
|
|
225
213
|
appendSessionEndCloseLog(closeLogFile, line); };
|
|
@@ -258,6 +246,9 @@ async function sessionEndWork(hippoRoot, flags, mode) {
|
|
|
258
246
|
appendSessionEndCloseLog(closeLogFile, 'skip snapshot close: turn mode');
|
|
259
247
|
return;
|
|
260
248
|
}
|
|
249
|
+
closeEndedSessionSnapshot(store, closeSessionId, closeLogFile);
|
|
250
|
+
}
|
|
251
|
+
function closeEndedSessionSnapshot(store, closeSessionId, closeLogFile) {
|
|
261
252
|
try {
|
|
262
253
|
if (closeSessionId) {
|
|
263
254
|
const closed = closeTaskSnapshotsForSession(store, resolveTenantId({}), closeSessionId);
|
|
@@ -268,7 +259,7 @@ async function sessionEndWork(hippoRoot, flags, mode) {
|
|
|
268
259
|
}
|
|
269
260
|
}
|
|
270
261
|
catch (err) {
|
|
271
|
-
appendSessionEndCloseLog(closeLogFile, `snapshot close failed: ${err
|
|
262
|
+
appendSessionEndCloseLog(closeLogFile, `snapshot close failed: ${errorMessage(err)}`);
|
|
272
263
|
}
|
|
273
264
|
}
|
|
274
265
|
async function sleepProjectStore(hippoRoot, flags, closeLogFile, transcriptPath) {
|
|
@@ -277,9 +268,9 @@ async function sleepProjectStore(hippoRoot, flags, closeLogFile, transcriptPath)
|
|
|
277
268
|
try {
|
|
278
269
|
await (await import('./sleep.js')).cmdSleep(hippoRoot, flags);
|
|
279
270
|
}
|
|
280
|
-
catch {
|
|
281
|
-
//
|
|
282
|
-
|
|
271
|
+
catch (err) {
|
|
272
|
+
// cmdSleep writes its failure line only when it has a log file, and capture runs regardless.
|
|
273
|
+
log.debug(`session-end: sleep failed: ${errorMessage(err)}`);
|
|
283
274
|
}
|
|
284
275
|
}
|
|
285
276
|
else {
|
|
@@ -293,9 +284,8 @@ async function sleepIfDue(hippoRoot, flags, closeLogFile, transcriptPath, sessio
|
|
|
293
284
|
return sleepProjectStore(hippoRoot, flags, closeLogFile, transcriptPath);
|
|
294
285
|
const prefix = `turn close, session ${sessionId}`;
|
|
295
286
|
try {
|
|
296
|
-
const { enabled, threshold } = loadConfig(hippoRoot).autoSleep;
|
|
297
|
-
|
|
298
|
-
if (!enabled || count < threshold) {
|
|
287
|
+
const { enabled, count, threshold, due } = autoSleepDue(hippoRoot, resolveTenantId({}), loadConfig(hippoRoot).autoSleep);
|
|
288
|
+
if (!due) {
|
|
299
289
|
const why = enabled ? `${count} new memories, threshold ${threshold}` : 'auto-sleep is off';
|
|
300
290
|
appendSessionEndCloseLog(closeLogFile, `${prefix}: skip sleep, ${why}`, { startFresh: true });
|
|
301
291
|
return;
|
|
@@ -324,7 +314,7 @@ function captureNewTurns(transcriptPath, sessionId, scan, capture, log) {
|
|
|
324
314
|
/** True when capture ran to the end, so a turn close may move its cursor past these turns. */
|
|
325
315
|
function captureEndedSession(hippoRoot, store, flags, transcriptPath, turns) {
|
|
326
316
|
try {
|
|
327
|
-
const logFile =
|
|
317
|
+
const logFile = stringFlag(flags, 'log-file');
|
|
328
318
|
// With no stdin of its own, capture would read this as a manual run and scan every project.
|
|
329
319
|
if (!transcriptPath) {
|
|
330
320
|
appendSessionEndCloseLog(logFile ?? null, 'skip capture: no transcript for this session');
|
|
@@ -343,8 +333,8 @@ function captureEndedSession(hippoRoot, store, flags, transcriptPath, turns) {
|
|
|
343
333
|
});
|
|
344
334
|
return true;
|
|
345
335
|
}
|
|
346
|
-
catch {
|
|
347
|
-
|
|
336
|
+
catch (err) {
|
|
337
|
+
log.debug(`session-end: capture failed: ${errorMessage(err)}`);
|
|
348
338
|
return false;
|
|
349
339
|
}
|
|
350
340
|
}
|
|
@@ -367,7 +357,7 @@ function writeEndHandoff(store, closeSessionId, transcriptPath, closeLogFile, in
|
|
|
367
357
|
}
|
|
368
358
|
catch (err) {
|
|
369
359
|
// SAFETY: catch clauses bind unknown, but Node/V8 always throws an Error here.
|
|
370
|
-
appendSessionEndCloseLog(closeLogFile, `handoff write failed: ${err
|
|
360
|
+
appendSessionEndCloseLog(closeLogFile, `handoff write failed: ${errorMessage(err)}`);
|
|
371
361
|
}
|
|
372
362
|
}
|
|
373
363
|
/** Books the ending session's re-reads in each store its ledger rows can land in (project and global); returns the log lines. */
|
|
@@ -379,7 +369,7 @@ async function bookSessionRereads(hippoRoot, transcriptPath, sessionId) {
|
|
|
379
369
|
read = await readApiCalls(transcriptPath);
|
|
380
370
|
}
|
|
381
371
|
catch (err) {
|
|
382
|
-
return [`skip re-read count: cannot read the transcript: ${
|
|
372
|
+
return [`skip re-read count: cannot read the transcript: ${errorMessage(err)}`];
|
|
383
373
|
}
|
|
384
374
|
const roots = new Set([hippoRoot, getGlobalRoot()].filter((root) => isInitialized(root)).map((root) => path.resolve(root)));
|
|
385
375
|
const lines = [];
|
|
@@ -395,7 +385,7 @@ async function bookSessionRereads(hippoRoot, transcriptPath, sessionId) {
|
|
|
395
385
|
}
|
|
396
386
|
}
|
|
397
387
|
catch (err) {
|
|
398
|
-
lines.push(`re-read count failed: ${
|
|
388
|
+
lines.push(`re-read count failed: ${errorMessage(err)}`);
|
|
399
389
|
}
|
|
400
390
|
}
|
|
401
391
|
const skipped = read.malformed > 0 ? `, ${read.malformed} unparsable transcript lines skipped` : '';
|
|
@@ -442,8 +432,8 @@ export function cmdCodexRun(hippoRoot, args) {
|
|
|
442
432
|
try {
|
|
443
433
|
cmdLastSleep(hippoRoot, { path: metadata.logFile }, 'terminal');
|
|
444
434
|
}
|
|
445
|
-
catch {
|
|
446
|
-
|
|
435
|
+
catch (err) {
|
|
436
|
+
log.debug(`codex run: the last sleep summary was not shown: ${errorMessage(err)}`);
|
|
447
437
|
}
|
|
448
438
|
const child = spawnRealCodex(metadata.realCodexPath, args, process.cwd());
|
|
449
439
|
child.on('error', (err) => {
|
|
@@ -451,85 +441,93 @@ export function cmdCodexRun(hippoRoot, args) {
|
|
|
451
441
|
process.exit(1);
|
|
452
442
|
});
|
|
453
443
|
child.on('exit', async (code, signal) => {
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
444
|
+
await launchCodexSessionEndWorker(hippoRoot, historyPath, startOffsetBytes, startedAtMs, metadata.logFile);
|
|
445
|
+
exitLikeChild(code, signal);
|
|
446
|
+
});
|
|
447
|
+
}
|
|
448
|
+
async function launchCodexSessionEndWorker(hippoRoot, historyPath, startOffsetBytes, startedAtMs, logFile) {
|
|
449
|
+
const workerArgs = [
|
|
450
|
+
process.argv[1],
|
|
451
|
+
'__codex-session-end-worker',
|
|
452
|
+
'--codex-home',
|
|
453
|
+
path.dirname(historyPath),
|
|
454
|
+
'--history-path',
|
|
455
|
+
historyPath,
|
|
456
|
+
'--start-offset',
|
|
457
|
+
String(startOffsetBytes),
|
|
458
|
+
'--started-at',
|
|
459
|
+
String(startedAtMs),
|
|
460
|
+
'--log-file',
|
|
461
|
+
logFile,
|
|
462
|
+
];
|
|
463
|
+
try {
|
|
464
|
+
const worker = spawn(process.execPath, workerArgs, {
|
|
465
|
+
detached: true,
|
|
466
|
+
stdio: 'ignore',
|
|
467
|
+
windowsHide: true,
|
|
468
|
+
});
|
|
469
|
+
worker.unref();
|
|
470
|
+
}
|
|
471
|
+
catch (err) {
|
|
472
|
+
log.debug(`codex run: the session-end worker did not spawn, running inline: ${errorMessage(err)}`);
|
|
473
|
+
// Awaited so the sleep write can't be killed by the exit calls below.
|
|
468
474
|
try {
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
475
|
+
await cmdCodexSessionEndWorker(hippoRoot, {
|
|
476
|
+
'codex-home': path.dirname(historyPath),
|
|
477
|
+
'history-path': historyPath,
|
|
478
|
+
'start-offset': String(startOffsetBytes),
|
|
479
|
+
'started-at': String(startedAtMs),
|
|
480
|
+
'log-file': logFile,
|
|
473
481
|
});
|
|
474
|
-
worker.unref();
|
|
475
482
|
}
|
|
476
|
-
catch {
|
|
477
|
-
|
|
478
|
-
// Awaited so the sleep write can't be killed by the exit calls below.
|
|
479
|
-
try {
|
|
480
|
-
await cmdCodexSessionEndWorker(hippoRoot, {
|
|
481
|
-
'codex-home': path.dirname(historyPath),
|
|
482
|
-
'history-path': historyPath,
|
|
483
|
-
'start-offset': String(startOffsetBytes),
|
|
484
|
-
'started-at': String(startedAtMs),
|
|
485
|
-
'log-file': metadata.logFile,
|
|
486
|
-
});
|
|
487
|
-
}
|
|
488
|
-
catch {
|
|
489
|
-
// cmdCodexSessionEndWorker already fail-softs internally; this is belt-and-braces.
|
|
490
|
-
}
|
|
483
|
+
catch (inlineErr) {
|
|
484
|
+
log.debug(`codex run: the inline session-end failed: ${errorMessage(inlineErr)}`);
|
|
491
485
|
}
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
process.exit(1);
|
|
499
|
-
}
|
|
500
|
-
return;
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
function exitLikeChild(code, signal) {
|
|
489
|
+
if (signal) {
|
|
490
|
+
try {
|
|
491
|
+
process.kill(process.pid, signal);
|
|
501
492
|
}
|
|
502
|
-
|
|
503
|
-
|
|
493
|
+
catch {
|
|
494
|
+
// Cannot re-raise the child's signal on this platform; a non-zero exit still reports the failure.
|
|
495
|
+
process.exit(1);
|
|
496
|
+
}
|
|
497
|
+
return;
|
|
498
|
+
}
|
|
499
|
+
process.exit(code ?? 0);
|
|
504
500
|
}
|
|
505
501
|
export async function cmdCodexSessionEndWorker(hippoRoot, flags) {
|
|
506
|
-
const logFile =
|
|
502
|
+
const logFile = stringFlag(flags, 'log-file');
|
|
507
503
|
// Like the other hooks: project store, else global; a folder with neither must not get one made.
|
|
508
504
|
const store = hookStoreRoot(hippoRoot);
|
|
509
505
|
if (!isInitialized(store)) {
|
|
510
506
|
appendSessionEndCloseLog(logFile ?? null, 'skip: no hippo store for this folder or globally', { startFresh: true });
|
|
511
507
|
return;
|
|
512
508
|
}
|
|
509
|
+
await sleepCodexProjectStore(hippoRoot, logFile);
|
|
510
|
+
captureCodexTranscript(hippoRoot, store, flags, logFile);
|
|
511
|
+
}
|
|
512
|
+
async function sleepCodexProjectStore(hippoRoot, logFile) {
|
|
513
513
|
// Sleeping the global store from here would learn this folder's git commits into it; it has its own daily sleep.
|
|
514
514
|
if (isInitialized(hippoRoot)) {
|
|
515
515
|
try {
|
|
516
516
|
await (await import('./sleep.js')).cmdSleep(hippoRoot, logFile ? { 'log-file': logFile } : {});
|
|
517
517
|
}
|
|
518
|
-
catch {
|
|
519
|
-
|
|
518
|
+
catch (err) {
|
|
519
|
+
log.debug(`codex session-end: sleep failed: ${errorMessage(err)}`);
|
|
520
520
|
}
|
|
521
521
|
}
|
|
522
522
|
else {
|
|
523
523
|
appendSessionEndCloseLog(logFile ?? null, 'skip sleep: this folder has no store of its own', { startFresh: true });
|
|
524
524
|
logSessionEndImport(logFile ?? null, undefined);
|
|
525
525
|
}
|
|
526
|
+
}
|
|
527
|
+
function captureCodexTranscript(hippoRoot, store, flags, logFile) {
|
|
526
528
|
try {
|
|
527
|
-
const codexHome =
|
|
528
|
-
|
|
529
|
-
: resolveCodexWrapperPaths().codexHome;
|
|
530
|
-
const historyPath = typeof flags['history-path'] === 'string'
|
|
531
|
-
? flags['history-path']
|
|
532
|
-
: path.join(codexHome, 'history.jsonl');
|
|
529
|
+
const codexHome = stringFlag(flags, 'codex-home') ?? resolveCodexWrapperPaths().codexHome;
|
|
530
|
+
const historyPath = stringFlag(flags, 'history-path') ?? path.join(codexHome, 'history.jsonl');
|
|
533
531
|
const startOffsetBytes = parseInt(String(flags['start-offset'] ?? '0'), 10) || 0;
|
|
534
532
|
const startedAtMs = parseInt(String(flags['started-at'] ?? Date.now()), 10) || Date.now();
|
|
535
533
|
const transcriptPath = resolveCodexSessionTranscript({
|
|
@@ -558,14 +556,14 @@ export async function cmdCodexSessionEndWorker(hippoRoot, flags) {
|
|
|
558
556
|
try {
|
|
559
557
|
cmdCapture(store, captureOpts);
|
|
560
558
|
}
|
|
561
|
-
catch {
|
|
562
|
-
|
|
559
|
+
catch (err) {
|
|
560
|
+
log.debug(`codex session-end: capture failed: ${errorMessage(err)}`);
|
|
563
561
|
}
|
|
564
562
|
// The Codex wrapper passes no session id, so the rollout file names the session.
|
|
565
563
|
recordSessionDigest(hippoRoot, scan, { key: path.basename(transcriptPath, '.jsonl'), tenantId: resolveTenantId({}), log: digestLog });
|
|
566
564
|
}
|
|
567
|
-
catch {
|
|
568
|
-
|
|
565
|
+
catch (err) {
|
|
566
|
+
log.debug(`codex session-end: transcript scan or digest failed: ${errorMessage(err)}`);
|
|
569
567
|
}
|
|
570
568
|
}
|
|
571
569
|
export async function handlePreCompact({ hippoRoot, flags }) {
|
|
@@ -574,22 +572,29 @@ export async function handlePreCompact({ hippoRoot, flags }) {
|
|
|
574
572
|
const runtime = hookRuntime(flags);
|
|
575
573
|
const root = payloadCwdRoot(hippoRoot, stdinText, runtime);
|
|
576
574
|
await runHookWithStores(async () => {
|
|
575
|
+
// Started before any store wait, so two fires of one hook carry timestamps close enough to match as duplicates.
|
|
576
|
+
const rec = startDeliveryRecorder(hookStoreRoot(root), stdinText, runtime, 'pre-compact');
|
|
577
577
|
resetHookInjection(root, stdinText, null);
|
|
578
578
|
await cmdPreCompact(hookStoreRoot(root), {
|
|
579
579
|
stdinText,
|
|
580
580
|
stdinTimedOut,
|
|
581
|
-
logFile:
|
|
581
|
+
logFile: stringFlag(flags, 'log-file'),
|
|
582
582
|
runtime,
|
|
583
|
+
onBoundary: (printed) => {
|
|
584
|
+
rec?.delivered(printed === null ? { state: 'empty' } : { state: 'sent', emittedText: printed });
|
|
585
|
+
flushDeliveryRecorder(rec);
|
|
586
|
+
},
|
|
583
587
|
});
|
|
584
588
|
});
|
|
585
589
|
}
|
|
586
590
|
export async function handlePostCompact({ hippoRoot, flags }) {
|
|
587
591
|
// PostCompact hook: saves the compaction summary and its memories, then prints one plain line, because Claude Code shows this hook's stdout as-is. Always exits 0.
|
|
588
|
-
const { text } = await readHookStdin();
|
|
592
|
+
const { text, timedOut } = await readHookStdin();
|
|
589
593
|
const logFlag = flags['log-file'];
|
|
590
594
|
const store = hookStoreRoot(hippoRoot);
|
|
591
595
|
const line = await runHookWithStores(() => cmdPostCompact(store, {
|
|
592
596
|
stdinText: text,
|
|
597
|
+
stdinTimedOut: timedOut,
|
|
593
598
|
logFile: logFlag === true || logFlag === false || Array.isArray(logFlag) ? undefined : logFlag,
|
|
594
599
|
// Passed in, since capture.ts importing the sync would close an import cycle.
|
|
595
600
|
afterSave: (transcriptPath, cwd, log) => {
|
|
@@ -617,8 +622,9 @@ export async function handleCaptureError({ hippoRoot, flags }) {
|
|
|
617
622
|
await runHookWithStores(() => captureToolFailure(root, resolveTenantId({}), failure));
|
|
618
623
|
}
|
|
619
624
|
}
|
|
620
|
-
catch {
|
|
621
|
-
// A malformed payload or store error must never fail the agent's tool call.
|
|
625
|
+
catch (err) {
|
|
626
|
+
// A malformed payload or store error must never fail the agent's tool call, so it is reported and dropped.
|
|
627
|
+
log.warn(`failure capture skipped: ${errorMessage(err)}`);
|
|
622
628
|
}
|
|
623
629
|
}
|
|
624
630
|
export async function handleCompactResume({ hippoRoot }) {
|
|
@@ -662,9 +668,9 @@ export async function handleCapture({ hippoRoot, flags }) {
|
|
|
662
668
|
transcriptPath,
|
|
663
669
|
stdinText: bounded.text,
|
|
664
670
|
stdinTimedOut: bounded.timedOut,
|
|
665
|
-
logFile:
|
|
666
|
-
dryRun:
|
|
667
|
-
global:
|
|
671
|
+
logFile: stringFlag(flags, 'log-file'),
|
|
672
|
+
dryRun: boolFlag(flags, 'dry-run'),
|
|
673
|
+
global: boolFlag(flags, 'global'),
|
|
668
674
|
tenantId: resolveTenantId({}),
|
|
669
675
|
});
|
|
670
676
|
}
|
package/dist/cli/setup.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
+
import { type CliFlags } from './flag-values.js';
|
|
1
2
|
export declare function cmdHook(args: string[]): void;
|
|
2
|
-
export declare function cmdSetup(flags:
|
|
3
|
+
export declare function cmdSetup(flags: CliFlags): void;
|
|
3
4
|
export declare function cmdDailyRunner(): void;
|
|
4
5
|
//# sourceMappingURL=setup.d.ts.map
|