hippo-memory 1.68.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 +6 -3
- 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.d.ts +3 -1
- package/dist/agent-memories/copilot.js +5 -4
- 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 +14 -4
- package/dist/api/context-select.js +50 -60
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +113 -85
- 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 +4 -13
- package/dist/api/forget.js +13 -35
- 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 +9 -46
- package/dist/api/outcome.js +15 -57
- 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 +7 -18
- package/dist/api/promote.js +30 -152
- 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 +12 -13
- package/dist/api/remember.js +38 -27
- 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 +59 -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.d.ts +3 -0
- package/dist/capture/copilot-transcript.js +9 -2
- 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.d.ts +13 -0
- package/dist/capture/session-worker.js +196 -0
- 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 +265 -191
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +111 -45
- 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 +8 -3
- 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 -82
- 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 -48
- 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 -90
- 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} +16 -3
- package/dist/core/capture-contract.js +149 -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} +19 -5
- package/dist/{memory.js → core/memory.js} +117 -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.d.ts → core/prompt-recall.d.ts} +5 -0
- package/dist/{prompt-recall.js → core/prompt-recall.js} +14 -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 +48 -13
- package/dist/hooks/copilot.js +124 -39
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +3 -1
- package/dist/hooks/json-hooks.js +40 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +7 -5
- package/dist/hooks/shared.js +19 -8
- 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.d.ts +2 -2
- package/dist/mcp/memory-tools.js +12 -31
- 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 +65 -63
- 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 +21 -20
- 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} +3 -2
- 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 +41 -50
- package/dist/server.js +26 -560
- 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 +12 -6
- package/dist/store/audit-event.js +6 -5
- 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 +6 -3
- package/dist/store/handoffs.js +70 -31
- 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 +8 -4
- package/dist/store/open.js +34 -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} +5 -3
- package/dist/{raw-archive.js → store/raw-archive.js} +11 -5
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +4 -7
- package/dist/{recall-scope.js → store/recall-scope.js} +8 -9
- 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 +43 -36
- package/dist/store/sessions.d.ts +18 -2
- package/dist/store/sessions.js +83 -46
- 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/sqlite/entry-writes-group.js +170 -0
- 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} +17 -2
- package/dist/{env.js → util/env.js} +22 -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/capture-contract.js +0 -49
- 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-port.d.ts +0 -191
- package/dist/store-port.js +0 -166
- /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/{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
package/dist/cli/shared.js
CHANGED
|
@@ -1,62 +1,20 @@
|
|
|
1
|
-
//
|
|
1
|
+
// Store and server helpers the CLI verbs share: audit events, init checks, server routing, git learning and the auth root.
|
|
2
2
|
// This module must never import cli.ts.
|
|
3
|
-
import { envApiKey,
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import { importAtSessionEnd, currentMachine } from '../agent-memories/sync.js';
|
|
18
|
-
import { summaryLine } from '../agent-memories/report.js';
|
|
19
|
-
import { detectChurnStale } from '../invalidation.js';
|
|
20
|
-
import { resolveProjectIdentity } from '../project-identity.js';
|
|
21
|
-
import { getGlobalRoot, initGlobal } from '../shared.js';
|
|
22
|
-
import { DAILY_TASK_NAME, buildDailyRunnerCommand, buildSchtasksCreateArgs, buildWindowsTaskRun } from '../scheduler.js';
|
|
23
|
-
import { sanitizeLogMessage } from '../capture/compact.js';
|
|
24
|
-
import { appendAuditEvent, reportAuditWriteFailure } from '../audit.js';
|
|
25
|
-
import * as client from '../client.js';
|
|
26
|
-
import { detectServer, removePidfileIfOwned } from '../server-detect.js';
|
|
27
|
-
import { resolveTenantId } from '../tenant.js';
|
|
28
|
-
import { adminActor, learn, CLI_LEARN } from '../api.js';
|
|
29
|
-
import { snapshotText, sessionTrailText, handoffText } from '../context-render.js';
|
|
30
|
-
import { errorMessage, log } from '../log.js';
|
|
3
|
+
import { envApiKey, envRequireServer } from '../util/env.js';
|
|
4
|
+
import { execFileSync } from 'child_process';
|
|
5
|
+
import { isSharedStore } from '../core/config.js';
|
|
6
|
+
import { isInitialized } from '../store/open.js';
|
|
7
|
+
import { detectChurnStale } from '../learn/invalidation.js';
|
|
8
|
+
import { resolveProjectIdentity } from '../core/project-identity.js';
|
|
9
|
+
import { getGlobalRoot, initGlobal } from '../sharing/shared.js';
|
|
10
|
+
import { reportAuditWriteFailure } from '../store/audit.js';
|
|
11
|
+
import { sqliteSyncStore } from '../store/sqlite/store.js';
|
|
12
|
+
import * as client from './client.js';
|
|
13
|
+
import { detectServer, removePidfileIfOwned } from '../server/server-detect.js';
|
|
14
|
+
import { resolveTenantId } from '../store/tenant.js';
|
|
15
|
+
import { adminActor, learn, CLI_LEARN } from '../api/index.js';
|
|
16
|
+
import { errorMessage, log } from '../util/log.js';
|
|
31
17
|
import { printError } from './output.js';
|
|
32
|
-
export function parseLimitFlag(value) {
|
|
33
|
-
if (!value)
|
|
34
|
-
return Infinity;
|
|
35
|
-
const parsed = parseInt(String(value), 10);
|
|
36
|
-
return Number.isFinite(parsed) && parsed >= 1 ? parsed : Infinity;
|
|
37
|
-
}
|
|
38
|
-
export function parseCountFlag(value) {
|
|
39
|
-
if (!value || value === true || Array.isArray(value))
|
|
40
|
-
return 0;
|
|
41
|
-
const parsed = parseInt(String(value), 10);
|
|
42
|
-
return Number.isFinite(parsed) && parsed >= 1 ? parsed : 0;
|
|
43
|
-
}
|
|
44
|
-
export function parseBudgetFlag(value, fallback) {
|
|
45
|
-
if (value === undefined)
|
|
46
|
-
return fallback;
|
|
47
|
-
// A value-less flag and a junk value are different typos; the --hops guard already splits them.
|
|
48
|
-
if (typeof value !== 'string') {
|
|
49
|
-
printError('--budget requires an integer value (e.g. --budget 1500).');
|
|
50
|
-
process.exit(1);
|
|
51
|
-
}
|
|
52
|
-
// Number(), like the --hops guard: parseInt('12abc') is 12, silently accepting what this message rejects.
|
|
53
|
-
const parsed = Number(value);
|
|
54
|
-
if (!Number.isInteger(parsed) || parsed < 0) {
|
|
55
|
-
printError(`Invalid --budget: "${value}". Must be a non-negative integer.`);
|
|
56
|
-
process.exit(1);
|
|
57
|
-
}
|
|
58
|
-
return parsed;
|
|
59
|
-
}
|
|
60
18
|
/**
|
|
61
19
|
* Emit an audit event against `hippoRoot`'s db. Opens its own short-lived
|
|
62
20
|
* connection so callers don't have to thread a db handle. Swallows all errors
|
|
@@ -64,19 +22,13 @@ export function parseBudgetFlag(value, fallback) {
|
|
|
64
22
|
*/
|
|
65
23
|
export function emitCliAudit(hippoRoot, op, targetId, metadata) {
|
|
66
24
|
try {
|
|
67
|
-
|
|
68
|
-
try {
|
|
69
|
-
appendAuditEvent(db, {
|
|
25
|
+
sqliteSyncStore(hippoRoot).appendAuditEvents([{
|
|
70
26
|
tenantId: resolveTenantId({}),
|
|
71
27
|
actor: 'cli',
|
|
72
28
|
op,
|
|
73
29
|
targetId,
|
|
74
30
|
metadata,
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
finally {
|
|
78
|
-
closeHippoDb(db);
|
|
79
|
-
}
|
|
31
|
+
}]);
|
|
80
32
|
}
|
|
81
33
|
catch (error) {
|
|
82
34
|
// Best effort: the command already did its work.
|
|
@@ -102,7 +54,7 @@ export function runChurnStaleForRepo(hippoRoot, dryRun) {
|
|
|
102
54
|
return { root, result: detectChurnStale(root, repoRoot, { tenantId, projectName, legacyName, dryRun }) };
|
|
103
55
|
}
|
|
104
56
|
catch (err) {
|
|
105
|
-
const message =
|
|
57
|
+
const message = errorMessage(err);
|
|
106
58
|
return { root, result: { checked: 0, marked: 0, alreadyMarked: 0, skippedPinned: [], dryRun, preview: [], error: message } };
|
|
107
59
|
}
|
|
108
60
|
});
|
|
@@ -166,59 +118,6 @@ export async function runViaServerIfAvailable(hippoRoot, httpFn) {
|
|
|
166
118
|
throw err;
|
|
167
119
|
}
|
|
168
120
|
}
|
|
169
|
-
export function fmt(n, digits = 2) {
|
|
170
|
-
return n.toFixed(digits);
|
|
171
|
-
}
|
|
172
|
-
// What `hippo recall` prints for one result; the budget prices this same text.
|
|
173
|
-
export function recallEntryText(r, query, showWhy, isGlobal) {
|
|
174
|
-
const e = r.entry;
|
|
175
|
-
const label = confidenceLabel(e);
|
|
176
|
-
const confLabel = label.warn ? `[${label.text}] ⚠️` : `[${label.text}]`;
|
|
177
|
-
const bars = Math.round(e.strength * 10);
|
|
178
|
-
const graphMark = r.graphVia ? ` [graph: ${r.graphVia.hops}hop ${r.graphVia.relType}]` : '';
|
|
179
|
-
const lines = [
|
|
180
|
-
`--- ${e.id} [${e.layer}] ${confLabel}${isGlobal ? ' [global]' : ''}${e.superseded_by ? ' [superseded]' : ''}${graphMark} score=${fmt(r.score, 3)} strength=${fmt(e.strength)}`,
|
|
181
|
-
` [${'█'.repeat(bars)}${'░'.repeat(10 - bars)}] tags: ${e.tags.join(', ') || 'none'} | retrieved: ${e.retrieval_count}x`,
|
|
182
|
-
];
|
|
183
|
-
if (showWhy) {
|
|
184
|
-
const explanation = explainMatch(query, r);
|
|
185
|
-
lines.push(` source:${isGlobal ? ' [global]' : ' [local]'} | layer: [${e.layer}] | confidence: [${label.text}]`, ` reason: ${explanation.reason}`);
|
|
186
|
-
const env = explanation.envelope;
|
|
187
|
-
if (env) {
|
|
188
|
-
lines.push(` kind: ${env.kind}`);
|
|
189
|
-
if (env.scope)
|
|
190
|
-
lines.push(` scope: ${env.scope}`);
|
|
191
|
-
if (env.owner)
|
|
192
|
-
lines.push(` owner: ${env.owner}`);
|
|
193
|
-
if (env.artifact_ref)
|
|
194
|
-
lines.push(` artifact_ref: ${env.artifact_ref}`);
|
|
195
|
-
if (env.session_id)
|
|
196
|
-
lines.push(` session_id: ${env.session_id}`);
|
|
197
|
-
lines.push(` confidence: ${env.confidence}`);
|
|
198
|
-
}
|
|
199
|
-
// The recall trace, e.g. "ranking: base 0.420 -> interference x0.30 -> 0.126 -> goal-boost x1.50 -> 0.189".
|
|
200
|
-
if (r.rerankTrace && r.rerankTrace.length > 0) {
|
|
201
|
-
const parts = [`base ${fmt(r.rerankTrace[0].scoreBefore, 3)}`];
|
|
202
|
-
for (const step of r.rerankTrace) {
|
|
203
|
-
parts.push(`${step.stage}${step.multiplier !== undefined ? ` x${fmt(step.multiplier, 2)}` : ''}`, fmt(step.scoreAfter, 3));
|
|
204
|
-
}
|
|
205
|
-
lines.push(` ranking: ${parts.join(' -> ')}`);
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
lines.push('', e.content, '');
|
|
209
|
-
return lines.join('\n');
|
|
210
|
-
}
|
|
211
|
-
export function recallHeading(entries, tokens, query) {
|
|
212
|
-
return `Found ${entries} memories (${tokens} tokens) for: "${query}"\n`;
|
|
213
|
-
}
|
|
214
|
-
/** One line when an agent memory import moved anything; its warnings go to stderr. */
|
|
215
|
-
export function printAgentImport(report, indent = ' ') {
|
|
216
|
-
const line = summaryLine(report);
|
|
217
|
-
if (line !== null)
|
|
218
|
-
console.log(`${indent}${line}`);
|
|
219
|
-
for (const warning of report.warnings)
|
|
220
|
-
printError(`hippo: agent memories: ${warning}`);
|
|
221
|
-
}
|
|
222
121
|
/** True, after one line, on a shared store: this account's commits and agent notes are not its members' memories. */
|
|
223
122
|
export function skipLearnOnSharedStore(hippoRoot) {
|
|
224
123
|
if (!isSharedStore(hippoRoot))
|
|
@@ -226,240 +125,6 @@ export function skipLearnOnSharedStore(hippoRoot) {
|
|
|
226
125
|
console.log("Shared store: skipped learning from this account's git commits and coding agents' own memories.");
|
|
227
126
|
return true;
|
|
228
127
|
}
|
|
229
|
-
/** Adds hippo's two Codex hooks and says what changed; each install ends on the trust reminder, since Codex skips an untrusted hook. */
|
|
230
|
-
export function installCodexMemoryHooks(indent) {
|
|
231
|
-
const result = installJsonHooks('codex');
|
|
232
|
-
if (result.invalidJson) {
|
|
233
|
-
console.log(`${indent}WARNING: ${result.settingsPath} is not a hooks file hippo can merge into; fix it, then run \`hippo hook install codex\`.`);
|
|
234
|
-
return;
|
|
235
|
-
}
|
|
236
|
-
const added = [
|
|
237
|
-
result.installedUserPromptSubmit ? 'UserPromptSubmit' : '',
|
|
238
|
-
result.installedCompactResume ? 'SessionStart(compact)' : '',
|
|
239
|
-
].filter(Boolean);
|
|
240
|
-
console.log(added.length > 0
|
|
241
|
-
? `${indent}Installed hippo's Codex memory hooks (${added.join(', ')}) in ${result.settingsPath}`
|
|
242
|
-
: `${indent}hippo's Codex memory hooks already in ${result.settingsPath}`);
|
|
243
|
-
console.log(`${indent}${CODEX_TRUST_LINE}`);
|
|
244
|
-
}
|
|
245
|
-
/** The one line init, hook install, hook uninstall and setup print when Claude Code's settings.json is not JSON hippo can edit and so was left unchanged; true when it printed. */
|
|
246
|
-
export function warnClaudeSettingsUnusable(result, indent, action = 'install') {
|
|
247
|
-
if (!result.invalidJson)
|
|
248
|
-
return false;
|
|
249
|
-
console.log(`${indent}WARNING: ${result.settingsPath} is not a JSON object hippo can merge into, so it was left unchanged; fix it, then run \`hippo hook ${action} claude-code\`.`);
|
|
250
|
-
return true;
|
|
251
|
-
}
|
|
252
|
-
/**
|
|
253
|
-
* Set up a machine-level daily runner that sweeps all registered Hippo
|
|
254
|
-
* workspaces.
|
|
255
|
-
* Linux/macOS: writes to user crontab.
|
|
256
|
-
* Windows: creates a scheduled task.
|
|
257
|
-
* Skips if already installed.
|
|
258
|
-
*/
|
|
259
|
-
export function setupDailySchedule(globalRoot) {
|
|
260
|
-
const runnerDir = path.resolve(globalRoot);
|
|
261
|
-
// Reject paths with characters that could break shell/crontab quoting
|
|
262
|
-
// (backslash is normal on Windows, only dangerous in Unix shell/crontab)
|
|
263
|
-
const unsafeChars = process.platform === 'win32' ? /["`$%\n\r]/ : /["`$\n\r\\]/;
|
|
264
|
-
if (unsafeChars.test(runnerDir)) {
|
|
265
|
-
console.log(` Skipping schedule: runner path contains unsafe characters.`);
|
|
266
|
-
return;
|
|
267
|
-
}
|
|
268
|
-
const isWindows = process.platform === 'win32';
|
|
269
|
-
const taskName = DAILY_TASK_NAME;
|
|
270
|
-
const cmd = buildDailyRunnerCommand(runnerDir);
|
|
271
|
-
if (isWindows) {
|
|
272
|
-
// Check if task already exists
|
|
273
|
-
try {
|
|
274
|
-
const existing = execSync(`schtasks /query /tn "${taskName}" 2>nul`, { encoding: 'utf-8', windowsHide: true });
|
|
275
|
-
if (existing.includes(taskName)) {
|
|
276
|
-
return; // already scheduled
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
catch {
|
|
280
|
-
// Task doesn't exist, create it
|
|
281
|
-
}
|
|
282
|
-
try {
|
|
283
|
-
execFileSync('schtasks', buildSchtasksCreateArgs(taskName, cmd), { stdio: 'pipe', windowsHide: true });
|
|
284
|
-
console.log(` Scheduled machine-level daily runner (6:15am) via Task Scheduler: ${taskName}`);
|
|
285
|
-
}
|
|
286
|
-
catch {
|
|
287
|
-
// No admin rights or schtasks unavailable, fall back to printing instructions
|
|
288
|
-
console.log(` To schedule the machine-level daily runner, run:`);
|
|
289
|
-
console.log(` schtasks /create /tn "${taskName}" /tr "${buildWindowsTaskRun(cmd).replace(/"/g, '\\"')}" /sc daily /st 06:15`);
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
else {
|
|
293
|
-
// Unix: check crontab for existing entry
|
|
294
|
-
const marker = `# hippo:${taskName}`;
|
|
295
|
-
try {
|
|
296
|
-
const existing = execSync('crontab -l 2>/dev/null', { encoding: 'utf-8', windowsHide: true });
|
|
297
|
-
if (existing.includes(marker)) {
|
|
298
|
-
return; // already scheduled
|
|
299
|
-
}
|
|
300
|
-
const cronLine = `15 6 * * * ${cmd} ${marker}`;
|
|
301
|
-
const newCrontab = existing.trimEnd() + '\n' + cronLine + '\n';
|
|
302
|
-
execSync('crontab -', { input: newCrontab, stdio: ['pipe', 'pipe', 'pipe'], windowsHide: true });
|
|
303
|
-
console.log(` Scheduled machine-level daily runner (6:15am) via crontab`);
|
|
304
|
-
}
|
|
305
|
-
catch {
|
|
306
|
-
// No crontab or no permission: print the line for the user to add by hand.
|
|
307
|
-
const cronLine = `15 6 * * * ${cmd}`;
|
|
308
|
-
console.log(` To schedule the machine-level daily runner, add to crontab (crontab -e):`);
|
|
309
|
-
console.log(` ${cronLine}`);
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
export function parseAsOfFlag(flags) {
|
|
314
|
-
const asOf = typeof flags['as-of'] === 'string' ? flags['as-of'] : undefined;
|
|
315
|
-
if (asOf !== undefined && Number.isNaN(new Date(asOf).getTime())) {
|
|
316
|
-
printError(`Error: --as-of value "${asOf}" is not a valid ISO date (e.g. 2026-04-22 or 2026-04-22T12:00:00Z).`);
|
|
317
|
-
process.exit(1);
|
|
318
|
-
}
|
|
319
|
-
return asOf;
|
|
320
|
-
}
|
|
321
|
-
/** --physics forces physics, --classic forces BM25+cosine, else physics unless the config turns it off. */
|
|
322
|
-
export function engineFlags(flags, config) {
|
|
323
|
-
return {
|
|
324
|
-
usePhysics: Boolean(flags['physics']) || (!flags['classic'] && config.physics.enabled !== false),
|
|
325
|
-
physicsConfig: config.physics,
|
|
326
|
-
mmr: !flags['no-mmr'] && config.mmr.enabled,
|
|
327
|
-
mmrLambda: flags['mmr-lambda'] !== undefined ? parseFloat(String(flags['mmr-lambda'])) : config.mmr.lambda,
|
|
328
|
-
localBump: flags['equal-sources']
|
|
329
|
-
? 1.0
|
|
330
|
-
: flags['local-bump'] !== undefined ? parseFloat(String(flags['local-bump'])) : config.search.localBump,
|
|
331
|
-
};
|
|
332
|
-
}
|
|
333
|
-
/**
|
|
334
|
-
* Detached worker that counts re-reads, runs sleep, then capture. Invoked via the internal
|
|
335
|
-
* `__session-end-worker` subcommand (not user-facing). Failures in one stage
|
|
336
|
-
* do not block the other.
|
|
337
|
-
*/
|
|
338
|
-
/** A folder without its own store never sleeps at session end, so its project's agent notes go to the global store here. */
|
|
339
|
-
export function logSessionEndImport(logFile, transcriptPath) {
|
|
340
|
-
try {
|
|
341
|
-
const report = importAtSessionEnd(process.cwd(), transcriptPath, { machine: currentMachine() });
|
|
342
|
-
const line = summaryLine(report);
|
|
343
|
-
if (line !== null)
|
|
344
|
-
appendSessionEndCloseLog(logFile, line);
|
|
345
|
-
for (const warning of report.warnings)
|
|
346
|
-
appendSessionEndCloseLog(logFile, `agent memories: ${warning}`);
|
|
347
|
-
}
|
|
348
|
-
catch (err) {
|
|
349
|
-
appendSessionEndCloseLog(logFile, `agent memory import failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
/**
|
|
353
|
-
* Best-effort log line for the snapshot-close step in
|
|
354
|
-
* `cmdSessionEndWorker`. `cmdSleep`/`cmdCapture` each tee console output to
|
|
355
|
-
* `logFile` only for their own duration (the tee is restored before this
|
|
356
|
-
* runs), so a plain `console.log` here would be silently discarded under
|
|
357
|
-
* the detached worker's `stdio: 'ignore'` — write straight to the file
|
|
358
|
-
* instead, matching capture.ts's `appendPreCompactLog` convention.
|
|
359
|
-
*/
|
|
360
|
-
export function appendSessionEndCloseLog(logFile, message, opts = {}) {
|
|
361
|
-
if (!logFile)
|
|
362
|
-
return;
|
|
363
|
-
try {
|
|
364
|
-
fs.mkdirSync(path.dirname(logFile), { recursive: true });
|
|
365
|
-
// sanitizeLogMessage: `message` interpolates the payload-controlled
|
|
366
|
-
// session_id — same log-forgery guard appendPreCompactLog applies.
|
|
367
|
-
const write = opts.startFresh ? fs.writeFileSync : fs.appendFileSync;
|
|
368
|
-
write(logFile, `[hippo] ${new Date().toISOString()} ${sanitizeLogMessage(message)}\n`, 'utf8');
|
|
369
|
-
}
|
|
370
|
-
catch {
|
|
371
|
-
// Best-effort only — never let a log-write failure surface as an error.
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
export function printActiveTaskSnapshot(snapshot) {
|
|
375
|
-
console.log(snapshotText(snapshot));
|
|
376
|
-
}
|
|
377
|
-
export function printSessionEvents(events) {
|
|
378
|
-
console.log(events.length === 0 ? 'No session events found.' : sessionTrailText(events));
|
|
379
|
-
}
|
|
380
|
-
export function printHandoff(handoff) {
|
|
381
|
-
console.log(handoffText(handoff));
|
|
382
|
-
}
|
|
383
|
-
// parseArgs turns a value-less flag into `true`; refuse rather than silently
|
|
384
|
-
// stringifying it (String(true) === 'true'), mirroring cmdHandoff's guard.
|
|
385
|
-
export function cardStringFlag(flags, key) {
|
|
386
|
-
const v = flags[key];
|
|
387
|
-
if (v === undefined)
|
|
388
|
-
return undefined;
|
|
389
|
-
if (v === true || v === false || Array.isArray(v)) {
|
|
390
|
-
printError(`--${key} requires a value`);
|
|
391
|
-
process.exit(1);
|
|
392
|
-
}
|
|
393
|
-
return v.trim();
|
|
394
|
-
}
|
|
395
|
-
// Claude Code exports its own session var, not ours; without the fallback agent-run recalls trace with no session.
|
|
396
|
-
export function hostSessionId() {
|
|
397
|
-
return envHippoSessionId() ?? envClaudeCodeSessionId();
|
|
398
|
-
}
|
|
399
|
-
/**
|
|
400
|
-
* Compaction drops the pinned blocks the per-prompt hook injected
|
|
401
|
-
* earlier, so record a `reset` for the payload's session and the next prompt
|
|
402
|
-
* injects again even if nothing changed. `requiredSource` limits it to hook
|
|
403
|
-
* payloads with that `source` (SessionStart fires for other reasons too).
|
|
404
|
-
* Best-effort and silent: a malformed payload records nothing.
|
|
405
|
-
*/
|
|
406
|
-
export function resetHookInjection(hippoRoot, stdinText, requiredSource) {
|
|
407
|
-
const sessionId = hookPayloadSessionId(stdinText, requiredSource);
|
|
408
|
-
// A sub-agent's compaction leaves its parent's context, and the blocks in it, as they were.
|
|
409
|
-
if (sessionId === null || isSubagentPayload(stdinText))
|
|
410
|
-
return;
|
|
411
|
-
withLedgerDb(hippoRoot, (db) => recordTokenUse(db, {
|
|
412
|
-
tenantId: resolveTenantId({}), sessionId, surface: 'hook', event: 'reset', items: 0, tokens: 0,
|
|
413
|
-
}));
|
|
414
|
-
}
|
|
415
|
-
/**
|
|
416
|
-
* Run `fn` with console.log captured; returns the captured lines joined by
|
|
417
|
-
* newlines (what the same calls would have printed, minus the final newline).
|
|
418
|
-
*/
|
|
419
|
-
export function captureConsole(fn) {
|
|
420
|
-
const lines = [];
|
|
421
|
-
const realLog = console.log;
|
|
422
|
-
console.log = (...parts) => { lines.push(parts.map(String).join(' ')); };
|
|
423
|
-
try {
|
|
424
|
-
fn();
|
|
425
|
-
}
|
|
426
|
-
finally {
|
|
427
|
-
console.log = realLog;
|
|
428
|
-
}
|
|
429
|
-
return lines.join('\n');
|
|
430
|
-
}
|
|
431
|
-
/**
|
|
432
|
-
* The store a Claude Code hook writes to: the project store when there is
|
|
433
|
-
* one, else an existing global store, else the project path (which the hook
|
|
434
|
-
* then skips, since hooks fire in every directory and must not create one).
|
|
435
|
-
* Pre-compact and compact-resume must agree, or a snapshot saved to one store
|
|
436
|
-
* is looked for in the other.
|
|
437
|
-
*/
|
|
438
|
-
export function hookStoreRoot(hippoRoot) {
|
|
439
|
-
if (isInitialized(hippoRoot))
|
|
440
|
-
return hippoRoot;
|
|
441
|
-
const globalRoot = getGlobalRoot();
|
|
442
|
-
return isInitialized(globalRoot) ? globalRoot : hippoRoot;
|
|
443
|
-
}
|
|
444
|
-
/** `--runtime copilot`, or `--format copilot` on `hippo context`, marks a Copilot hook: the flag decides, never the payload. */
|
|
445
|
-
export function hookRuntime(flags) {
|
|
446
|
-
return flags['runtime'] === 'copilot' || flags['format'] === 'copilot' ? 'copilot' : 'claude-code';
|
|
447
|
-
}
|
|
448
|
-
/** A Copilot hook's project root, from the payload's `cwd`, since VS Code runs user-level hooks in the home folder; other runtimes keep `hippoRoot`. */
|
|
449
|
-
export function payloadCwdRoot(hippoRoot, stdinText, runtime) {
|
|
450
|
-
const cwd = runtime === 'copilot' ? hookPayloadString(stdinText, 'cwd') : null;
|
|
451
|
-
if (cwd === null || cwd.trim() === '')
|
|
452
|
-
return hippoRoot;
|
|
453
|
-
try {
|
|
454
|
-
// Moving, not just re-rooting, keeps project identity, scope, handoff evidence and the session-end worker on that folder too.
|
|
455
|
-
process.chdir(cwd);
|
|
456
|
-
}
|
|
457
|
-
catch (err) {
|
|
458
|
-
log.warn(`hippo: payload cwd ${cwd} is not usable, so the hook stays in ${process.cwd()}: ${errorMessage(err)}`);
|
|
459
|
-
return hippoRoot;
|
|
460
|
-
}
|
|
461
|
-
return getHippoRoot(process.cwd());
|
|
462
|
-
}
|
|
463
128
|
export function learnFromRepo(hippoRoot, repoPath, days, label) {
|
|
464
129
|
const prefix = label ? `[${label}] ` : '';
|
|
465
130
|
const ctx = { hippoRoot, tenantId: resolveTenantId({}), actor: adminActor('cli') };
|
|
@@ -490,20 +155,4 @@ export function resolveAuthRoot(hippoRoot, flags) {
|
|
|
490
155
|
requireInit(hippoRoot);
|
|
491
156
|
return hippoRoot;
|
|
492
157
|
}
|
|
493
|
-
/** Hook commands share one handle per store and wait at most HOOK_DB_WAIT_MS for a lock; a store still busy after that skips the hook's work with one warning, exit 0. */
|
|
494
|
-
export async function runHookWithStores(fn) {
|
|
495
|
-
try {
|
|
496
|
-
return await runWithRequestStores(fn, { busyWaitMs: HOOK_DB_WAIT_MS, failFastWhenBusy: true });
|
|
497
|
-
}
|
|
498
|
-
catch (error) {
|
|
499
|
-
if (!isSqliteBusy(error))
|
|
500
|
-
throw error;
|
|
501
|
-
noteStoreBusy('hook skipped');
|
|
502
|
-
return undefined;
|
|
503
|
-
}
|
|
504
|
-
}
|
|
505
|
-
/** Whether this session sits in the pilot's holdout arm; off at rate 0 and with no session id. */
|
|
506
|
-
export function inPilotHoldout(hippoRoot, tenantId, sessionId, write) {
|
|
507
|
-
return sessionPilotArm(hippoRoot, tenantId, sessionId, write) === 'holdout';
|
|
508
|
-
}
|
|
509
158
|
//# sourceMappingURL=shared.js.map
|
package/dist/cli/slack.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
1
|
+
import { type CliFlags } from './flag-values.js';
|
|
2
|
+
export declare function cmdSlack(hippoRoot: string, args: string[], flags: CliFlags): Promise<void>;
|
|
2
3
|
//# sourceMappingURL=slack.d.ts.map
|
package/dist/cli/slack.js
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
// `hippo slack`: backfill, dead-letter queue and workspace registry for the Slack connector.
|
|
2
|
-
import { envSlackBotToken, envSlackSigningSecret, envSlackTeamId } from '../env.js';
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
2
|
+
import { envSlackBotToken, envSlackSigningSecret, envSlackTeamId } from '../util/env.js';
|
|
3
|
+
import * as api from '../api/index.js';
|
|
4
|
+
import { resolveTenantId } from '../store/tenant.js';
|
|
5
|
+
import { listDlq } from '../connectors/dlq.js';
|
|
6
|
+
import { replayDlqEntry, slackDlq } from '../connectors/slack/dlq.js';
|
|
7
7
|
import { backfillChannel } from '../connectors/slack/backfill.js';
|
|
8
8
|
import { slackHistoryFetcher } from '../connectors/slack/web-client.js';
|
|
9
9
|
import { addWorkspace as addSlackWorkspace, listWorkspaces as listSlackWorkspaces, removeWorkspace as removeSlackWorkspace, } from '../connectors/slack/workspaces.js';
|
|
10
10
|
import { printError } from './output.js';
|
|
11
11
|
import { printSlackBackfillUsage, printSlackWorkspacesUsage } from './usage.js';
|
|
12
|
+
import { stringFlag } from './flag-values.js';
|
|
12
13
|
// ---------------------------------------------------------------------------
|
|
13
14
|
// Slack subcommands (`hippo slack backfill` / `hippo slack dlq list`)
|
|
14
15
|
// ---------------------------------------------------------------------------
|
|
15
16
|
function cmdSlackBackfill(hippoRoot, flags) {
|
|
16
|
-
const channel =
|
|
17
|
+
const channel = stringFlag(flags, 'channel');
|
|
17
18
|
if (!channel) {
|
|
18
19
|
printSlackBackfillUsage();
|
|
19
20
|
process.exit(1);
|
|
@@ -27,7 +28,7 @@ function cmdSlackBackfill(hippoRoot, flags) {
|
|
|
27
28
|
// --since is advisory in V1: the slack_cursors row drives resume, so the
|
|
28
29
|
// backfill loop always picks up where it last left off. Honoured-by-cursor
|
|
29
30
|
// semantics keep idempotency clean.
|
|
30
|
-
const sinceIso = flags
|
|
31
|
+
const sinceIso = stringFlag(flags, 'since');
|
|
31
32
|
void sinceIso;
|
|
32
33
|
const fetcher = slackHistoryFetcher(token);
|
|
33
34
|
const ctx = {
|
|
@@ -49,19 +50,12 @@ function cmdSlackBackfill(hippoRoot, flags) {
|
|
|
49
50
|
});
|
|
50
51
|
}
|
|
51
52
|
function cmdSlackDlqList(hippoRoot, _flags) {
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
const items = listDlq(db, { tenantId });
|
|
56
|
-
for (const it of items) {
|
|
57
|
-
console.log(`${it.id}\t${it.receivedAt}\t${it.error}`);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
finally {
|
|
61
|
-
closeHippoDb(db);
|
|
53
|
+
const items = listDlq(slackDlq, hippoRoot, { tenantId: resolveTenantId({}) });
|
|
54
|
+
for (const it of items) {
|
|
55
|
+
console.log(`${it.id}\t${it.receivedAt}\t${it.error}`);
|
|
62
56
|
}
|
|
63
57
|
}
|
|
64
|
-
function cmdSlackDlqReplay(hippoRoot, args, flags) {
|
|
58
|
+
async function cmdSlackDlqReplay(hippoRoot, args, flags) {
|
|
65
59
|
const idArg = args[2];
|
|
66
60
|
if (!idArg) {
|
|
67
61
|
printError('Usage: hippo slack dlq replay <id> [--force]');
|
|
@@ -73,7 +67,7 @@ function cmdSlackDlqReplay(hippoRoot, args, flags) {
|
|
|
73
67
|
process.exit(1);
|
|
74
68
|
}
|
|
75
69
|
const force = flags.force === true;
|
|
76
|
-
const result = replayDlqEntry({ hippoRoot }, id, {
|
|
70
|
+
const result = await replayDlqEntry({ hippoRoot }, id, {
|
|
77
71
|
force,
|
|
78
72
|
signingSecret: envSlackSigningSecret(),
|
|
79
73
|
});
|
|
@@ -84,57 +78,39 @@ function cmdSlackDlqReplay(hippoRoot, args, flags) {
|
|
|
84
78
|
console.log(`replay ok: status=${result.status} memory_id=${result.memoryId ?? '(none)'} retry_count=${result.retryCount}`);
|
|
85
79
|
}
|
|
86
80
|
function cmdSlackWorkspacesAdd(hippoRoot, flags) {
|
|
87
|
-
const teamId =
|
|
88
|
-
const tenantId =
|
|
81
|
+
const teamId = (stringFlag(flags, 'team') ?? '').trim();
|
|
82
|
+
const tenantId = (stringFlag(flags, 'tenant') ?? '').trim();
|
|
89
83
|
if (!teamId || !tenantId) {
|
|
90
84
|
printError('Usage: hippo slack workspaces add --team <T> --tenant <t>');
|
|
91
85
|
process.exit(1);
|
|
92
86
|
}
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
const ws = addSlackWorkspace(db, { teamId, tenantId });
|
|
96
|
-
console.log(`added: ${ws.teamId} -> ${ws.tenantId} (${ws.addedAt})`);
|
|
97
|
-
}
|
|
98
|
-
finally {
|
|
99
|
-
closeHippoDb(db);
|
|
100
|
-
}
|
|
87
|
+
const ws = addSlackWorkspace(hippoRoot, { teamId, tenantId });
|
|
88
|
+
console.log(`added: ${ws.teamId} -> ${ws.tenantId} (${ws.addedAt})`);
|
|
101
89
|
}
|
|
102
90
|
function cmdSlackWorkspacesList(hippoRoot) {
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
console.log('(no registered workspaces; routing via HIPPO_TENANT fallback)');
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
for (const ws of items) {
|
|
111
|
-
console.log(`${ws.teamId}\t${ws.tenantId}\t${ws.addedAt}`);
|
|
112
|
-
}
|
|
91
|
+
const items = listSlackWorkspaces(hippoRoot);
|
|
92
|
+
if (items.length === 0) {
|
|
93
|
+
console.log('(no registered workspaces; routing via HIPPO_TENANT fallback)');
|
|
94
|
+
return;
|
|
113
95
|
}
|
|
114
|
-
|
|
115
|
-
|
|
96
|
+
for (const ws of items) {
|
|
97
|
+
console.log(`${ws.teamId}\t${ws.tenantId}\t${ws.addedAt}`);
|
|
116
98
|
}
|
|
117
99
|
}
|
|
118
100
|
function cmdSlackWorkspacesRemove(hippoRoot, flags) {
|
|
119
|
-
const teamId =
|
|
101
|
+
const teamId = (stringFlag(flags, 'team') ?? '').trim();
|
|
120
102
|
if (!teamId) {
|
|
121
103
|
printError('Usage: hippo slack workspaces remove --team <T>');
|
|
122
104
|
process.exit(1);
|
|
123
105
|
}
|
|
124
|
-
const
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
printError(`no workspace registered for team ${teamId}`);
|
|
129
|
-
process.exit(1);
|
|
130
|
-
}
|
|
131
|
-
console.log(`removed: ${teamId}`);
|
|
132
|
-
}
|
|
133
|
-
finally {
|
|
134
|
-
closeHippoDb(db);
|
|
106
|
+
const removed = removeSlackWorkspace(hippoRoot, teamId);
|
|
107
|
+
if (!removed) {
|
|
108
|
+
printError(`no workspace registered for team ${teamId}`);
|
|
109
|
+
process.exit(1);
|
|
135
110
|
}
|
|
111
|
+
console.log(`removed: ${teamId}`);
|
|
136
112
|
}
|
|
137
|
-
export function cmdSlack(hippoRoot, args, flags) {
|
|
113
|
+
export async function cmdSlack(hippoRoot, args, flags) {
|
|
138
114
|
const sub = args[0];
|
|
139
115
|
if (sub === 'backfill') {
|
|
140
116
|
cmdSlackBackfill(hippoRoot, flags);
|
|
@@ -145,7 +121,7 @@ export function cmdSlack(hippoRoot, args, flags) {
|
|
|
145
121
|
return;
|
|
146
122
|
}
|
|
147
123
|
if (sub === 'dlq' && args[1] === 'replay') {
|
|
148
|
-
cmdSlackDlqReplay(hippoRoot, args, flags);
|
|
124
|
+
await cmdSlackDlqReplay(hippoRoot, args, flags);
|
|
149
125
|
return;
|
|
150
126
|
}
|
|
151
127
|
if (sub === 'workspaces') {
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type * as api from '../api/index.js';
|
|
2
|
+
/** The lines `hippo sleep` prints for an api.sleep result; pure, so the snapshot tests read them without a console spy. */
|
|
3
|
+
export declare function sleepResultLines(result: api.SleepResult): string[];
|
|
4
|
+
//# sourceMappingURL=sleep-render.d.ts.map
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// The text `hippo sleep` prints for an api.sleep result, kept pure so tests read the lines directly.
|
|
2
|
+
import { renderAmbientSummary } from '../core/ambient.js';
|
|
3
|
+
/** The lines `hippo sleep` prints for an api.sleep result; pure, so the snapshot tests read them without a console spy. */
|
|
4
|
+
export function sleepResultLines(result) {
|
|
5
|
+
return [...sleepCountLines(result), ...(result.dryRun ? ['\n(dry run - nothing written)'] : []), ...sleepDedupeAndAuditLines(result), ...sleepShareAndGraphLines(result)];
|
|
6
|
+
}
|
|
7
|
+
function sleepCountLines(result) {
|
|
8
|
+
const lines = [`Running consolidation${result.dryRun ? ' (dry run)' : ''}...`, `\nResults:`, ` Active memories: ${result.active}`, ` Removed (decayed): ${result.removed}`];
|
|
9
|
+
// Only when dormant.enabled moved something, so every other render stays byte-identical.
|
|
10
|
+
if (result.dormant !== undefined && result.dormant > 0) {
|
|
11
|
+
lines.push(` Kept dormant: ${result.dormant} (hippo dormant to list)`);
|
|
12
|
+
}
|
|
13
|
+
if (result.dormantExpired !== undefined && result.dormantExpired > 0) {
|
|
14
|
+
lines.push(` Expired dormant: ${result.dormantExpired} (past dormant.retentionDays)`);
|
|
15
|
+
}
|
|
16
|
+
lines.push(` Merged episodic: ${result.mergedEpisodic}`, ` New semantic: ${result.newSemantic}`);
|
|
17
|
+
if (result.details && result.details.length > 0)
|
|
18
|
+
lines.push('\nDetails:', ...result.details);
|
|
19
|
+
return lines;
|
|
20
|
+
}
|
|
21
|
+
function sleepDedupeAndAuditLines(result) {
|
|
22
|
+
const lines = [];
|
|
23
|
+
if (result.deduped && result.deduped.removed > 0) {
|
|
24
|
+
const { removed, semDups, epiDups, crossDups } = result.deduped;
|
|
25
|
+
const parts = [];
|
|
26
|
+
if (semDups > 0)
|
|
27
|
+
parts.push(`${semDups} redundant semantic patterns`);
|
|
28
|
+
if (epiDups > 0)
|
|
29
|
+
parts.push(`${epiDups} duplicate episodic lessons`);
|
|
30
|
+
if (crossDups > 0)
|
|
31
|
+
parts.push(`${crossDups} cross-layer duplicates`);
|
|
32
|
+
lines.push(`\n${result.dryRun ? 'Would dedupe' : 'Deduped'} ${removed} duplicates (${parts.join(', ')}). ${result.dryRun ? 'Would keep' : 'Kept'} stronger copies.`);
|
|
33
|
+
}
|
|
34
|
+
if (result.audit) {
|
|
35
|
+
if (result.audit.errorsRemoved > 0) {
|
|
36
|
+
lines.push(`\nAudit: ${result.dryRun ? 'would remove' : 'removed'} ${result.audit.errorsRemoved} junk memories (too short/empty).`);
|
|
37
|
+
}
|
|
38
|
+
if (result.audit.warningCount > 0) {
|
|
39
|
+
lines.push(`Audit: ${result.audit.warningCount} low-quality memories detected (run \`hippo audit\` for details).`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return lines;
|
|
43
|
+
}
|
|
44
|
+
function sleepShareAndGraphLines(result) {
|
|
45
|
+
const lines = [];
|
|
46
|
+
if (result.shared !== undefined && result.shared > 0) {
|
|
47
|
+
lines.push(`\nAuto-shared ${result.shared} high-value memories to global store.`);
|
|
48
|
+
}
|
|
49
|
+
if (result.secretSkipped !== undefined && result.secretSkipped > 0) {
|
|
50
|
+
// The secret veto is never silent.
|
|
51
|
+
lines.push(`\nAuto-share: withheld ${result.secretSkipped} secret-flagged ${result.secretSkipped === 1 ? 'memory' : 'memories'} (secret veto).`);
|
|
52
|
+
}
|
|
53
|
+
if (result.ambient)
|
|
54
|
+
lines.push(`\n${renderAmbientSummary(result.ambient)}`);
|
|
55
|
+
if (result.graph && result.graph.tenants > 0) {
|
|
56
|
+
const { tenants, entities, relations } = result.graph;
|
|
57
|
+
lines.push(`\nGraph: rebuilt ${tenants} tenant${tenants === 1 ? '' : 's'} (${entities} entities, ${relations} relations).`);
|
|
58
|
+
}
|
|
59
|
+
return lines;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=sleep-render.js.map
|