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
package/dist/cli/init.js
CHANGED
|
@@ -1,21 +1,25 @@
|
|
|
1
1
|
// `hippo init`: create a store and wire the detected agents' instruction files, hooks and daily runner.
|
|
2
|
-
import { envSkipAutoIntegrations } from '../env.js';
|
|
2
|
+
import { envSkipAutoIntegrations } from '../util/env.js';
|
|
3
3
|
import * as path from 'path';
|
|
4
4
|
import * as fs from 'fs';
|
|
5
5
|
import * as os from 'os';
|
|
6
6
|
import { installJsonHooks } from '../hooks/json-hooks.js';
|
|
7
|
+
import { writeFileAtomic } from '../util/atomic-write.js';
|
|
7
8
|
import { isCodexPresent } from '../hooks/shared.js';
|
|
8
9
|
import { isCodexWrapperInstalled } from '../hooks/codex-wrapper.js';
|
|
9
10
|
import { installOpencodePlugin } from '../hooks/opencode.js';
|
|
10
11
|
import { isInitialized, initStore } from '../store/open.js';
|
|
11
12
|
import { loadAllEntries } from '../store/entry-reads.js';
|
|
12
|
-
import { isGitRepo } from '../autolearn.js';
|
|
13
|
+
import { isGitRepo } from '../learn/autolearn.js';
|
|
13
14
|
import { currentMachine, importForStore, importProjectMemories, importUserMemories } from '../agent-memories/sync.js';
|
|
14
15
|
import { emptyReport, mergeReports } from '../agent-memories/report.js';
|
|
15
|
-
import { getGlobalRoot, initGlobal } from '../shared.js';
|
|
16
|
-
import { registerWorkspace } from '
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
16
|
+
import { getGlobalRoot, initGlobal } from '../sharing/shared.js';
|
|
17
|
+
import { registerWorkspace } from './scheduler.js';
|
|
18
|
+
import { stringFlag } from './flag-values.js';
|
|
19
|
+
import { printAgentImport } from './print.js';
|
|
20
|
+
import { installCodexMemoryHooks, setupDailySchedule, warnClaudeSettingsUnusable } from './install-steps.js';
|
|
21
|
+
import { learnFromRepo, skipLearnOnSharedStore } from './shared.js';
|
|
22
|
+
import { HOOK_MARKERS, HOOKS, hippoBlock } from '../hooks/hook-blocks.js';
|
|
19
23
|
function scanForGitRepos(rootDir, maxDepth = 2) {
|
|
20
24
|
const repos = [];
|
|
21
25
|
function walk(dir, depth) {
|
|
@@ -44,6 +48,51 @@ function scanForGitRepos(rootDir, maxDepth = 2) {
|
|
|
44
48
|
walk(rootDir, 0);
|
|
45
49
|
return repos;
|
|
46
50
|
}
|
|
51
|
+
/** Creates the repo's store when absent and registers it; returns whether it already existed. */
|
|
52
|
+
function initScannedRepo(repo, globalRoot) {
|
|
53
|
+
const repoHippo = path.join(repo, '.hippo');
|
|
54
|
+
const alreadyExists = isInitialized(repoHippo);
|
|
55
|
+
if (!alreadyExists) {
|
|
56
|
+
initStore(repoHippo);
|
|
57
|
+
}
|
|
58
|
+
registerWorkspace(globalRoot, repo);
|
|
59
|
+
return alreadyExists;
|
|
60
|
+
}
|
|
61
|
+
/** Seeds one scanned repo from git history and its agents' notes, unless --no-learn. */
|
|
62
|
+
function learnScannedRepo(repo, seedDays, learn, machine, agentImport) {
|
|
63
|
+
const repoHippo = path.join(repo, '.hippo');
|
|
64
|
+
let added = 0;
|
|
65
|
+
let lowInfo = 0;
|
|
66
|
+
if (learn && isGitRepo(repo)) {
|
|
67
|
+
const result = learnFromRepo(repoHippo, repo, seedDays, path.basename(repo));
|
|
68
|
+
added = result.added;
|
|
69
|
+
lowInfo = result.lowInfo;
|
|
70
|
+
}
|
|
71
|
+
if (learn)
|
|
72
|
+
mergeReports(agentImport, importProjectMemories(repoHippo, { machine }));
|
|
73
|
+
return { added, lowInfo };
|
|
74
|
+
}
|
|
75
|
+
function installScanHooks(repos) {
|
|
76
|
+
// User-level hooks only: a hippo block in each repo's CLAUDE.md or AGENTS.md would leave a diff in every repo.
|
|
77
|
+
const agents = detectAgentHooks(repos);
|
|
78
|
+
if (agents.length === 0) {
|
|
79
|
+
console.log(' No agent config found in these repositories. Run `hippo setup` to add hooks for the agents on this machine.');
|
|
80
|
+
}
|
|
81
|
+
installUserLevelHooks(agents, true);
|
|
82
|
+
}
|
|
83
|
+
function initGlobalFirst() {
|
|
84
|
+
const globalRoot = getGlobalRoot();
|
|
85
|
+
if (!isInitialized(globalRoot)) {
|
|
86
|
+
initGlobal();
|
|
87
|
+
console.log(`Initialized global store at ${globalRoot}\n`);
|
|
88
|
+
}
|
|
89
|
+
return globalRoot;
|
|
90
|
+
}
|
|
91
|
+
function printScanSummary(repoCount, totalLessons, totalLowInfo) {
|
|
92
|
+
console.log(`\n${repoCount} repositories, ${totalLessons} new lessons learned` +
|
|
93
|
+
(totalLowInfo > 0 ? `, ${totalLowInfo} low-information subject(s) dropped` : '') +
|
|
94
|
+
'.');
|
|
95
|
+
}
|
|
47
96
|
function cmdInitScan(scanDir, flags) {
|
|
48
97
|
const resolved = path.resolve(scanDir);
|
|
49
98
|
console.log(`Scanning ${resolved} for git repositories...\n`);
|
|
@@ -53,12 +102,7 @@ function cmdInitScan(scanDir, flags) {
|
|
|
53
102
|
return;
|
|
54
103
|
}
|
|
55
104
|
console.log(`Found ${repos.length} repositories:\n`);
|
|
56
|
-
|
|
57
|
-
const globalRoot = getGlobalRoot();
|
|
58
|
-
if (!isInitialized(globalRoot)) {
|
|
59
|
-
initGlobal();
|
|
60
|
-
console.log(`Initialized global store at ${globalRoot}\n`);
|
|
61
|
-
}
|
|
105
|
+
const globalRoot = initGlobalFirst();
|
|
62
106
|
let totalLessons = 0;
|
|
63
107
|
// Rolled up so the cross-repo summary reports the gate too. Each repo
|
|
64
108
|
// already prints its own count inside learnFromRepo, but the aggregate
|
|
@@ -68,67 +112,63 @@ function cmdInitScan(scanDir, flags) {
|
|
|
68
112
|
const seedDays = parseInt(String(flags['days'] ?? '365'), 10);
|
|
69
113
|
const machine = currentMachine();
|
|
70
114
|
const agentImport = emptyReport();
|
|
115
|
+
const learn = !flags['no-learn'];
|
|
71
116
|
for (const repo of repos) {
|
|
72
|
-
const
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
initStore(repoHippo);
|
|
77
|
-
}
|
|
78
|
-
registerWorkspace(globalRoot, repo);
|
|
79
|
-
// Learn from git history
|
|
80
|
-
let added = 0;
|
|
81
|
-
if (!flags['no-learn'] && isGitRepo(repo)) {
|
|
82
|
-
const result = learnFromRepo(repoHippo, repo, seedDays, name);
|
|
83
|
-
added = result.added;
|
|
84
|
-
totalLessons += added;
|
|
85
|
-
totalLowInfo += result.lowInfo;
|
|
86
|
-
}
|
|
87
|
-
if (!flags['no-learn'])
|
|
88
|
-
mergeReports(agentImport, importProjectMemories(repoHippo, { machine }));
|
|
117
|
+
const alreadyExists = initScannedRepo(repo, globalRoot);
|
|
118
|
+
const { added, lowInfo } = learnScannedRepo(repo, seedDays, learn, machine, agentImport);
|
|
119
|
+
totalLessons += added;
|
|
120
|
+
totalLowInfo += lowInfo;
|
|
89
121
|
const status = alreadyExists ? 'existing' : 'new';
|
|
90
|
-
const entries = loadAllEntries(
|
|
91
|
-
console.log(` ${
|
|
122
|
+
const entries = loadAllEntries(path.join(repo, '.hippo'));
|
|
123
|
+
console.log(` ${path.basename(repo).padEnd(25)} ${status.padEnd(10)} ${entries.length} memories${added > 0 ? ` (+${added} from git)` : ''}`);
|
|
92
124
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
'.');
|
|
96
|
-
if (!flags['no-learn']) {
|
|
125
|
+
printScanSummary(repos.length, totalLessons, totalLowInfo);
|
|
126
|
+
if (learn) {
|
|
97
127
|
mergeReports(agentImport, importUserMemories(globalRoot, { machine }));
|
|
98
128
|
printAgentImport(agentImport, '');
|
|
99
129
|
}
|
|
100
130
|
console.log(`Global store: ${globalRoot}`);
|
|
101
|
-
if (initInstallsIntegrations(flags))
|
|
102
|
-
|
|
103
|
-
const agents = detectAgentHooks(repos);
|
|
104
|
-
if (agents.length === 0) {
|
|
105
|
-
console.log(' No agent config found in these repositories. Run `hippo setup` to add hooks for the agents on this machine.');
|
|
106
|
-
}
|
|
107
|
-
installUserLevelHooks(agents, true);
|
|
108
|
-
}
|
|
131
|
+
if (initInstallsIntegrations(flags))
|
|
132
|
+
installScanHooks(repos);
|
|
109
133
|
if (!flags['no-schedule']) {
|
|
110
134
|
setupDailySchedule(globalRoot);
|
|
111
135
|
}
|
|
112
136
|
console.log(`\nRun \`hippo sleep\` in any project to consolidate and auto-share to global.`);
|
|
113
137
|
}
|
|
138
|
+
function initGlobalOnly(flags) {
|
|
139
|
+
const globalRoot = getGlobalRoot();
|
|
140
|
+
if (isInitialized(globalRoot)) {
|
|
141
|
+
console.log('Already initialized global store at', globalRoot);
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
initGlobal();
|
|
145
|
+
console.log('Initialized global Hippo store at', globalRoot);
|
|
146
|
+
}
|
|
147
|
+
if (!flags['no-learn'])
|
|
148
|
+
printAgentImport(importUserMemories(globalRoot, { machine: currentMachine() }));
|
|
149
|
+
}
|
|
150
|
+
function seedFromGitHistory(hippoRoot) {
|
|
151
|
+
if (!isGitRepo(process.cwd()))
|
|
152
|
+
return;
|
|
153
|
+
const seedDays = 30;
|
|
154
|
+
console.log(`\n Seeding memories from last ${seedDays} days of git history...`);
|
|
155
|
+
const { added, skipped } = learnFromRepo(hippoRoot, process.cwd(), seedDays);
|
|
156
|
+
if (added > 0) {
|
|
157
|
+
console.log(` Learned ${added} lessons from git (${skipped} duplicates skipped).`);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
console.log(` No matching commits found in git history.`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
114
163
|
export function cmdInit(hippoRoot, flags) {
|
|
115
164
|
// Handle --scan mode
|
|
116
165
|
if (flags['scan']) {
|
|
117
|
-
const scanDir =
|
|
166
|
+
const scanDir = stringFlag(flags, 'scan') ?? os.homedir();
|
|
118
167
|
cmdInitScan(scanDir, flags);
|
|
119
168
|
return;
|
|
120
169
|
}
|
|
121
170
|
if (flags['global']) {
|
|
122
|
-
|
|
123
|
-
if (isInitialized(globalRoot)) {
|
|
124
|
-
console.log('Already initialized global store at', globalRoot);
|
|
125
|
-
}
|
|
126
|
-
else {
|
|
127
|
-
initGlobal();
|
|
128
|
-
console.log('Initialized global Hippo store at', globalRoot);
|
|
129
|
-
}
|
|
130
|
-
if (!flags['no-learn'])
|
|
131
|
-
printAgentImport(importUserMemories(globalRoot, { machine: currentMachine() }));
|
|
171
|
+
initGlobalOnly(flags);
|
|
132
172
|
return;
|
|
133
173
|
}
|
|
134
174
|
const alreadyExists = isInitialized(hippoRoot);
|
|
@@ -152,19 +192,8 @@ export function cmdInit(hippoRoot, flags) {
|
|
|
152
192
|
}
|
|
153
193
|
const learn = !flags['no-learn'] && !skipLearnOnSharedStore(hippoRoot);
|
|
154
194
|
// Seed with git history on first init (unless --no-learn)
|
|
155
|
-
if (!alreadyExists && learn && !flags['global'])
|
|
156
|
-
|
|
157
|
-
const seedDays = 30;
|
|
158
|
-
console.log(`\n Seeding memories from last ${seedDays} days of git history...`);
|
|
159
|
-
const { added, skipped } = learnFromRepo(hippoRoot, process.cwd(), seedDays);
|
|
160
|
-
if (added > 0) {
|
|
161
|
-
console.log(` Learned ${added} lessons from git (${skipped} duplicates skipped).`);
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
console.log(` No matching commits found in git history.`);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
}
|
|
195
|
+
if (!alreadyExists && learn && !flags['global'])
|
|
196
|
+
seedFromGitHistory(hippoRoot);
|
|
168
197
|
// Every run, not only the first: an agent's notes change between inits.
|
|
169
198
|
if (learn)
|
|
170
199
|
printAgentImport(importForStore(hippoRoot, { machine: currentMachine() }));
|
|
@@ -222,7 +251,7 @@ function patchInstructionFiles(dir, agents) {
|
|
|
222
251
|
}
|
|
223
252
|
const block = `${HOOK_MARKERS.start}\n${hookDef.content}\n${HOOK_MARKERS.end}`;
|
|
224
253
|
const sep = existing.endsWith('\n') ? '\n' : '\n\n';
|
|
225
|
-
|
|
254
|
+
writeFileAtomic(targetPath, existing + sep + block + '\n');
|
|
226
255
|
console.log(` Auto-installed ${hook} hook in ${hookDef.file}`);
|
|
227
256
|
}
|
|
228
257
|
}
|
|
@@ -237,9 +266,58 @@ function refreshShippedBlock(filePath, text, hook) {
|
|
|
237
266
|
console.log(` Left the edited hippo block in ${name} as is; \`hippo hook install ${hook}\` replaces it.`);
|
|
238
267
|
return;
|
|
239
268
|
}
|
|
240
|
-
|
|
269
|
+
writeFileAtomic(filePath, `${text.slice(0, start)}${eol}${HOOKS[owner].content.replace(/\n/g, eol)}${eol}${text.slice(end)}`);
|
|
241
270
|
console.log(` Refreshed the ${owner} hippo block in ${name}`);
|
|
242
271
|
}
|
|
272
|
+
function installClaudeCodeSettingsHooks(hook) {
|
|
273
|
+
const result = installJsonHooks(hook);
|
|
274
|
+
warnClaudeSettingsUnusable(result, ' ');
|
|
275
|
+
if (result.installedSessionEnd) {
|
|
276
|
+
console.log(` Auto-installed hippo session-end SessionEnd hook in ${hook} settings`);
|
|
277
|
+
}
|
|
278
|
+
if (result.installedSessionStart) {
|
|
279
|
+
console.log(` Auto-installed hippo last-sleep SessionStart hook in ${hook} settings`);
|
|
280
|
+
}
|
|
281
|
+
if (result.installedUserPromptSubmit) {
|
|
282
|
+
console.log(` Auto-installed hippo pinned-inject UserPromptSubmit hook in ${hook} settings`);
|
|
283
|
+
}
|
|
284
|
+
if (result.installedPreCompact) {
|
|
285
|
+
console.log(` Auto-installed hippo pre-compact PreCompact hook in ${hook} settings`);
|
|
286
|
+
}
|
|
287
|
+
if (result.installedCompactResume) {
|
|
288
|
+
console.log(` Auto-installed hippo compact-resume SessionStart(compact) hook in ${hook} settings`);
|
|
289
|
+
}
|
|
290
|
+
if (result.installedPostCompact) {
|
|
291
|
+
console.log(` Auto-installed hippo post-compact PostCompact hook in ${hook} settings`);
|
|
292
|
+
}
|
|
293
|
+
if (result.installedCaptureError) {
|
|
294
|
+
console.log(` Auto-installed hippo capture-error PostToolUseFailure hook in ${hook} settings`);
|
|
295
|
+
}
|
|
296
|
+
if (result.migratedFromStop) {
|
|
297
|
+
console.log(` Migrated legacy Stop hook → SessionEnd (no longer runs every turn)`);
|
|
298
|
+
}
|
|
299
|
+
if (result.migratedSplitSessionEnd) {
|
|
300
|
+
console.log(` Migrated split sleep+capture SessionEnd entries → single detached hippo session-end`);
|
|
301
|
+
}
|
|
302
|
+
else if (result.migratedLegacySessionEnd) {
|
|
303
|
+
console.log(` Migrated legacy SessionEnd entry to the new detached form`);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
function installOpencodeUserPlugin() {
|
|
307
|
+
// opencode uses a TS plugin, not Claude Code's JSON-hook schema.
|
|
308
|
+
// See OPENCODE_PLUGIN_SOURCE in src/hooks.ts for the plugin file
|
|
309
|
+
// content + design rationale.
|
|
310
|
+
const result = installOpencodePlugin();
|
|
311
|
+
if (result.installed) {
|
|
312
|
+
console.log(` Auto-installed hippo opencode plugin -> ${result.pluginPath}`);
|
|
313
|
+
}
|
|
314
|
+
if (result.migratedLegacyHooks) {
|
|
315
|
+
console.log(` Removed legacy Claude Code-style hooks block from opencode.json — opencode can now launch`);
|
|
316
|
+
}
|
|
317
|
+
if (result.jsonRepairFailed) {
|
|
318
|
+
console.log(` WARNING: opencode.json is unparseable; legacy hooks block could not be auto-removed. Fix the file manually.`);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
243
321
|
/** Claude Code settings hooks, Codex's hooks.json and the OpenCode plugin, under the home directory; idempotent, so re-running init adds newer hooks. */
|
|
244
322
|
function installUserLevelHooks(agents, codexHint) {
|
|
245
323
|
for (const hook of agents) {
|
|
@@ -253,55 +331,10 @@ function installUserLevelHooks(agents, codexHint) {
|
|
|
253
331
|
// For Claude Code, also install SessionEnd+SessionStart entries in its
|
|
254
332
|
// settings.json. Keeps `hippo init` in lockstep with `hippo hook install
|
|
255
333
|
// claude-code` and `hippo setup`.
|
|
256
|
-
if (hook === 'claude-code')
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
console.log(` Auto-installed hippo session-end SessionEnd hook in ${hook} settings`);
|
|
261
|
-
}
|
|
262
|
-
if (result.installedSessionStart) {
|
|
263
|
-
console.log(` Auto-installed hippo last-sleep SessionStart hook in ${hook} settings`);
|
|
264
|
-
}
|
|
265
|
-
if (result.installedUserPromptSubmit) {
|
|
266
|
-
console.log(` Auto-installed hippo pinned-inject UserPromptSubmit hook in ${hook} settings`);
|
|
267
|
-
}
|
|
268
|
-
if (result.installedPreCompact) {
|
|
269
|
-
console.log(` Auto-installed hippo pre-compact PreCompact hook in ${hook} settings`);
|
|
270
|
-
}
|
|
271
|
-
if (result.installedCompactResume) {
|
|
272
|
-
console.log(` Auto-installed hippo compact-resume SessionStart(compact) hook in ${hook} settings`);
|
|
273
|
-
}
|
|
274
|
-
if (result.installedPostCompact) {
|
|
275
|
-
console.log(` Auto-installed hippo post-compact PostCompact hook in ${hook} settings`);
|
|
276
|
-
}
|
|
277
|
-
if (result.installedCaptureError) {
|
|
278
|
-
console.log(` Auto-installed hippo capture-error PostToolUseFailure hook in ${hook} settings`);
|
|
279
|
-
}
|
|
280
|
-
if (result.migratedFromStop) {
|
|
281
|
-
console.log(` Migrated legacy Stop hook → SessionEnd (no longer runs every turn)`);
|
|
282
|
-
}
|
|
283
|
-
if (result.migratedSplitSessionEnd) {
|
|
284
|
-
console.log(` Migrated split sleep+capture SessionEnd entries → single detached hippo session-end`);
|
|
285
|
-
}
|
|
286
|
-
else if (result.migratedLegacySessionEnd) {
|
|
287
|
-
console.log(` Migrated legacy SessionEnd entry to the new detached form`);
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
else if (hook === 'opencode') {
|
|
291
|
-
// opencode uses a TS plugin, not Claude Code's JSON-hook schema.
|
|
292
|
-
// See OPENCODE_PLUGIN_SOURCE in src/hooks.ts for the plugin file
|
|
293
|
-
// content + design rationale.
|
|
294
|
-
const result = installOpencodePlugin();
|
|
295
|
-
if (result.installed) {
|
|
296
|
-
console.log(` Auto-installed hippo opencode plugin -> ${result.pluginPath}`);
|
|
297
|
-
}
|
|
298
|
-
if (result.migratedLegacyHooks) {
|
|
299
|
-
console.log(` Removed legacy Claude Code-style hooks block from opencode.json — opencode can now launch`);
|
|
300
|
-
}
|
|
301
|
-
if (result.jsonRepairFailed) {
|
|
302
|
-
console.log(` WARNING: opencode.json is unparseable; legacy hooks block could not be auto-removed. Fix the file manually.`);
|
|
303
|
-
}
|
|
304
|
-
}
|
|
334
|
+
if (hook === 'claude-code')
|
|
335
|
+
installClaudeCodeSettingsHooks(hook);
|
|
336
|
+
else if (hook === 'opencode')
|
|
337
|
+
installOpencodeUserPlugin();
|
|
305
338
|
}
|
|
306
339
|
}
|
|
307
340
|
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type InstallResult } from '../hooks/json-hooks.js';
|
|
2
|
+
/** Adds hippo's two Codex hooks and says what changed; each install ends on the trust reminder, since Codex skips an untrusted hook. */
|
|
3
|
+
export declare function installCodexMemoryHooks(indent: string): void;
|
|
4
|
+
/** 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. */
|
|
5
|
+
export declare function warnClaudeSettingsUnusable(result: Pick<InstallResult, 'settingsPath' | 'invalidJson'>, indent: string, action?: 'install' | 'uninstall'): boolean;
|
|
6
|
+
export declare function setupDailySchedule(globalRoot: string): void;
|
|
7
|
+
//# sourceMappingURL=install-steps.d.ts.map
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
// The init and setup steps that touch the machine: Codex hooks, the settings.json warning and the daily schedule.
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { execFileSync, execSync } from 'child_process';
|
|
4
|
+
import { installJsonHooks } from '../hooks/json-hooks.js';
|
|
5
|
+
import { CODEX_TRUST_LINE } from '../hooks/shared.js';
|
|
6
|
+
import { DAILY_TASK_NAME, buildDailyRunnerCommand, buildSchtasksCreateArgs, buildWindowsTaskRun, quoteInsideWindowsArg } from './scheduler.js';
|
|
7
|
+
/** Adds hippo's two Codex hooks and says what changed; each install ends on the trust reminder, since Codex skips an untrusted hook. */
|
|
8
|
+
export function installCodexMemoryHooks(indent) {
|
|
9
|
+
const result = installJsonHooks('codex');
|
|
10
|
+
if (result.invalidJson) {
|
|
11
|
+
console.log(`${indent}WARNING: ${result.settingsPath} is not a hooks file hippo can merge into; fix it, then run \`hippo hook install codex\`.`);
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const added = [
|
|
15
|
+
result.installedUserPromptSubmit ? 'UserPromptSubmit' : '',
|
|
16
|
+
result.installedCompactResume ? 'SessionStart(compact)' : '',
|
|
17
|
+
].filter(Boolean);
|
|
18
|
+
console.log(added.length > 0
|
|
19
|
+
? `${indent}Installed hippo's Codex memory hooks (${added.join(', ')}) in ${result.settingsPath}`
|
|
20
|
+
: `${indent}hippo's Codex memory hooks already in ${result.settingsPath}`);
|
|
21
|
+
console.log(`${indent}${CODEX_TRUST_LINE}`);
|
|
22
|
+
}
|
|
23
|
+
/** 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. */
|
|
24
|
+
export function warnClaudeSettingsUnusable(result, indent, action = 'install') {
|
|
25
|
+
if (!result.invalidJson)
|
|
26
|
+
return false;
|
|
27
|
+
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\`.`);
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Set up a machine-level daily runner that sweeps all registered Hippo
|
|
32
|
+
* workspaces.
|
|
33
|
+
* Linux/macOS: writes to user crontab.
|
|
34
|
+
* Windows: creates a scheduled task.
|
|
35
|
+
* Skips if already installed.
|
|
36
|
+
*/
|
|
37
|
+
/** Bound on each schtasks and crontab call, so a scheduler that never answers cannot hang `hippo init` or `hippo setup`. */
|
|
38
|
+
const SCHEDULER_CALL_TIMEOUT_MS = 30_000;
|
|
39
|
+
/** Node kills a child at its timeout and reports ETIMEDOUT; every other failure here means the scheduler refused or is missing. */
|
|
40
|
+
function schedulerTimedOut(err) {
|
|
41
|
+
return err instanceof Error && 'code' in err && err.code === 'ETIMEDOUT';
|
|
42
|
+
}
|
|
43
|
+
function warnSchedulerTimedOut(command) {
|
|
44
|
+
console.log(` ${command} did not answer within ${SCHEDULER_CALL_TIMEOUT_MS / 1000} s and was stopped, so the daily runner is not scheduled.`);
|
|
45
|
+
}
|
|
46
|
+
export function setupDailySchedule(globalRoot) {
|
|
47
|
+
const runnerDir = path.resolve(globalRoot);
|
|
48
|
+
// Reject paths with characters that could break shell/crontab quoting
|
|
49
|
+
// (backslash is normal on Windows, only dangerous in Unix shell/crontab)
|
|
50
|
+
const unsafeChars = process.platform === 'win32' ? /["`$%\n\r]/ : /["`$\n\r\\]/;
|
|
51
|
+
if (unsafeChars.test(runnerDir)) {
|
|
52
|
+
console.log(` Skipping schedule: runner path contains unsafe characters.`);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const isWindows = process.platform === 'win32';
|
|
56
|
+
const taskName = DAILY_TASK_NAME;
|
|
57
|
+
const cmd = buildDailyRunnerCommand(runnerDir);
|
|
58
|
+
if (isWindows)
|
|
59
|
+
scheduleOnWindows(taskName, cmd);
|
|
60
|
+
else
|
|
61
|
+
scheduleOnCrontab(taskName, cmd);
|
|
62
|
+
}
|
|
63
|
+
function scheduleOnWindows(taskName, cmd) {
|
|
64
|
+
// Check if task already exists
|
|
65
|
+
try {
|
|
66
|
+
const existing = execSync(`schtasks /query /tn "${taskName}" 2>nul`, { encoding: 'utf-8', windowsHide: true, timeout: SCHEDULER_CALL_TIMEOUT_MS });
|
|
67
|
+
if (existing.includes(taskName)) {
|
|
68
|
+
return; // already scheduled
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
// A non-zero exit means the task does not exist yet, so it is created below.
|
|
73
|
+
if (schedulerTimedOut(err))
|
|
74
|
+
warnSchedulerTimedOut('schtasks /query');
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
execFileSync('schtasks', buildSchtasksCreateArgs(taskName, cmd), { stdio: 'pipe', windowsHide: true, timeout: SCHEDULER_CALL_TIMEOUT_MS });
|
|
78
|
+
console.log(` Scheduled machine-level daily runner (6:15am) via Task Scheduler: ${taskName}`);
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
if (schedulerTimedOut(err))
|
|
82
|
+
warnSchedulerTimedOut('schtasks /create');
|
|
83
|
+
// No admin rights or schtasks unavailable, fall back to printing instructions
|
|
84
|
+
console.log(` To schedule the machine-level daily runner, run:`);
|
|
85
|
+
console.log(` schtasks /create /tn "${taskName}" /tr "${quoteInsideWindowsArg(buildWindowsTaskRun(cmd))}" /sc daily /st 06:15`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function scheduleOnCrontab(taskName, cmd) {
|
|
89
|
+
// Unix: check crontab for existing entry
|
|
90
|
+
const marker = `# hippo:${taskName}`;
|
|
91
|
+
try {
|
|
92
|
+
const existing = execSync('crontab -l 2>/dev/null', { encoding: 'utf-8', windowsHide: true, timeout: SCHEDULER_CALL_TIMEOUT_MS });
|
|
93
|
+
if (existing.includes(marker)) {
|
|
94
|
+
return; // already scheduled
|
|
95
|
+
}
|
|
96
|
+
const cronLine = `15 6 * * * ${cmd} ${marker}`;
|
|
97
|
+
const newCrontab = existing.trimEnd() + '\n' + cronLine + '\n';
|
|
98
|
+
execSync('crontab -', { input: newCrontab, stdio: ['pipe', 'pipe', 'pipe'], windowsHide: true, timeout: SCHEDULER_CALL_TIMEOUT_MS });
|
|
99
|
+
console.log(` Scheduled machine-level daily runner (6:15am) via crontab`);
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
if (schedulerTimedOut(err))
|
|
103
|
+
warnSchedulerTimedOut('crontab');
|
|
104
|
+
// No crontab or no permission: print the line for the user to add by hand.
|
|
105
|
+
const cronLine = `15 6 * * * ${cmd}`;
|
|
106
|
+
console.log(` To schedule the machine-level daily runner, add to crontab (crontab -e):`);
|
|
107
|
+
console.log(` ${cronLine}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=install-steps.js.map
|
package/dist/cli/last-sleep.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { type CliFlags } from './flag-values.js';
|
|
1
2
|
/** The line the user sees when the last sleep failed, a spool step hit an unexpected error, or the spool holds `.bad` files; null when none did. */
|
|
2
3
|
export declare function sleepProblems(logText: string, bad: number): string | null;
|
|
3
4
|
/** Prints the SessionEnd sleep log on stderr, then clears it. In a hook, stdout carries only `systemMessage`,
|
|
4
5
|
* because Claude Code shows that to the user and adds any other SessionStart stdout to the model's context. */
|
|
5
|
-
export declare function cmdLastSleep(hippoRoot: string, flags:
|
|
6
|
+
export declare function cmdLastSleep(hippoRoot: string, flags: CliFlags, out?: 'hook' | 'terminal'): void;
|
|
6
7
|
//# sourceMappingURL=last-sleep.d.ts.map
|
package/dist/cli/last-sleep.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
// `hippo last-sleep`: the previous session's sleep log for the debug log, and one problems line for the user.
|
|
2
2
|
import * as fs from 'fs';
|
|
3
|
-
import { isStringValue } from '../capture-contract.js';
|
|
4
|
-
import { REPLAY_AFTER_MS } from '../compaction-record.js';
|
|
5
|
-
import { SPOOL_PROBLEM, spoolCounts } from '../compaction-spool.js';
|
|
3
|
+
import { isStringValue } from '../core/capture-contract.js';
|
|
4
|
+
import { REPLAY_AFTER_MS } from '../capture/compaction-record.js';
|
|
5
|
+
import { SPOOL_PROBLEM, spoolCounts } from '../capture/compaction-spool.js';
|
|
6
6
|
import { defaultSleepLogPath } from '../hooks/shared.js';
|
|
7
|
-
import { errorMessage } from '../log.js';
|
|
8
|
-
import { truncateCodePointSafe } from '../transcript-tail.js';
|
|
7
|
+
import { errorMessage, log } from '../util/log.js';
|
|
8
|
+
import { truncateCodePointSafe } from '../util/transcript-tail.js';
|
|
9
9
|
import { printError } from './output.js';
|
|
10
|
-
import { hookStoreRoot } from './
|
|
10
|
+
import { hookStoreRoot } from './hook-runtime.js';
|
|
11
11
|
const SLEEP_FAILED = '[hippo] sleep failed: ';
|
|
12
12
|
const FAILURE_CHARS = 120;
|
|
13
13
|
/** The line the user sees when the last sleep failed, a spool step hit an unexpected error, or the spool holds `.bad` files; null when none did. */
|
|
@@ -62,7 +62,9 @@ export function cmdLastSleep(hippoRoot, flags, out = process.stdout.isTTY ? 'ter
|
|
|
62
62
|
try {
|
|
63
63
|
fs.unlinkSync(logPath);
|
|
64
64
|
}
|
|
65
|
-
catch {
|
|
65
|
+
catch (err) {
|
|
66
|
+
log.debug(`last-sleep log not removed, it shows again next session: ${errorMessage(err)}`);
|
|
67
|
+
}
|
|
66
68
|
}
|
|
67
69
|
}
|
|
68
70
|
//# sourceMappingURL=last-sleep.js.map
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { type EmbeddingProvider } from '../
|
|
2
|
-
|
|
3
|
-
export declare function
|
|
4
|
-
export declare function
|
|
1
|
+
import { type EmbeddingProvider } from '../store/embeddings/provider.js';
|
|
2
|
+
import { type CliFlags } from './flag-values.js';
|
|
3
|
+
export declare function cmdRefine(hippoRoot: string, flags: CliFlags): Promise<void>;
|
|
4
|
+
export declare function cmdDedup(hippoRoot: string, flags: CliFlags): void;
|
|
5
|
+
export declare function cmdEmbed(hippoRoot: string, flags: CliFlags, given?: EmbeddingProvider): Promise<void>;
|
|
5
6
|
//# sourceMappingURL=maintenance.d.ts.map
|
package/dist/cli/maintenance.js
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
// Store upkeep verbs: `hippo refine`, `hippo dedup` and `hippo embed`.
|
|
2
|
-
import { envAnthropicApiKey } from '../env.js';
|
|
2
|
+
import { envAnthropicApiKey } from '../util/env.js';
|
|
3
3
|
import { loadAllEntries } from '../store/entry-reads.js';
|
|
4
|
-
import { deduplicateStore } from '../dedupe.js';
|
|
5
|
-
import { embedAll, loadEmbeddingIndex } from '../embeddings.js';
|
|
6
|
-
import { resolveEmbeddingProvider } from '../
|
|
7
|
-
import {
|
|
8
|
-
import { loadConfig } from '../config.js';
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import { refineStore } from '../refine-llm.js';
|
|
4
|
+
import { deduplicateStore } from '../consolidate/dedupe.js';
|
|
5
|
+
import { embedAll, loadEmbeddingIndex } from '../store/embeddings/index.js';
|
|
6
|
+
import { resolveEmbeddingProvider } from '../store/embeddings/provider.js';
|
|
7
|
+
import { resetStoredParticles } from '../store/vector-writes.js';
|
|
8
|
+
import { loadConfig } from '../core/config.js';
|
|
9
|
+
import { resolveTenantId } from '../store/tenant.js';
|
|
10
|
+
import { refineStore } from './refine-llm.js';
|
|
12
11
|
import { printError } from './output.js';
|
|
12
|
+
import { boolFlag } from './flag-values.js';
|
|
13
13
|
import { requireInit, resolveAuthRoot } from './shared.js';
|
|
14
|
+
import { errorMessage } from '../util/log.js';
|
|
15
|
+
const MAX_FAILED_SHOWN = 5;
|
|
16
|
+
const MAX_PAIRS_SHOWN = 15;
|
|
17
|
+
const PAIR_PREVIEW_CHARS = 90;
|
|
14
18
|
export async function cmdRefine(hippoRoot, flags) {
|
|
15
19
|
requireInit(hippoRoot);
|
|
16
20
|
const apiKey = envAnthropicApiKey();
|
|
@@ -18,11 +22,11 @@ export async function cmdRefine(hippoRoot, flags) {
|
|
|
18
22
|
printError('hippo refine needs ANTHROPIC_API_KEY in the environment.');
|
|
19
23
|
process.exit(1);
|
|
20
24
|
}
|
|
21
|
-
const dryRun =
|
|
22
|
-
const all =
|
|
25
|
+
const dryRun = boolFlag(flags, 'dry-run');
|
|
26
|
+
const all = boolFlag(flags, 'all');
|
|
23
27
|
const limit = flags['limit'] !== undefined ? parseInt(String(flags['limit']), 10) : undefined;
|
|
24
28
|
const model = flags['model'] ? String(flags['model']) : undefined;
|
|
25
|
-
const asJson =
|
|
29
|
+
const asJson = boolFlag(flags, 'json');
|
|
26
30
|
const result = await refineStore(hippoRoot, {
|
|
27
31
|
apiKey,
|
|
28
32
|
model,
|
|
@@ -41,14 +45,14 @@ export async function cmdRefine(hippoRoot, flags) {
|
|
|
41
45
|
console.log(`Failed: ${result.failed}`);
|
|
42
46
|
if (result.failed > 0) {
|
|
43
47
|
console.log('\nFailures:');
|
|
44
|
-
for (const d of result.details.filter((x) => x.status === 'failed').slice(0,
|
|
48
|
+
for (const d of result.details.filter((x) => x.status === 'failed').slice(0, MAX_FAILED_SHOWN)) {
|
|
45
49
|
console.log(` ${d.id}: ${d.reason}`);
|
|
46
50
|
}
|
|
47
51
|
}
|
|
48
52
|
}
|
|
49
53
|
export function cmdDedup(hippoRoot, flags) {
|
|
50
54
|
requireInit(hippoRoot);
|
|
51
|
-
const dryRun =
|
|
55
|
+
const dryRun = boolFlag(flags, 'dry-run');
|
|
52
56
|
if (flags['threshold'] !== undefined) {
|
|
53
57
|
printError('hippo dedup: --threshold is ignored; a duplicate is the same text apart from spacing.');
|
|
54
58
|
}
|
|
@@ -59,6 +63,10 @@ export function cmdDedup(hippoRoot, flags) {
|
|
|
59
63
|
console.log('No duplicates found.');
|
|
60
64
|
return;
|
|
61
65
|
}
|
|
66
|
+
printDedupGroups(result, dryRun);
|
|
67
|
+
printDedupPairs(result, dryRun);
|
|
68
|
+
}
|
|
69
|
+
function printDedupGroups(result, dryRun) {
|
|
62
70
|
// Group by reason
|
|
63
71
|
const sameLayerSem = result.pairs.filter(p => p.keptLayer === 'semantic' && p.removedLayer === 'semantic');
|
|
64
72
|
const sameLayerEpi = result.pairs.filter(p => p.keptLayer === 'episodic' && p.removedLayer === 'episodic');
|
|
@@ -73,16 +81,18 @@ export function cmdDedup(hippoRoot, flags) {
|
|
|
73
81
|
if (crossLayer.length > 0) {
|
|
74
82
|
console.log(` ${crossLayer.length} cross-layer duplicates (episodic content already consolidated into semantic)`);
|
|
75
83
|
}
|
|
84
|
+
}
|
|
85
|
+
function printDedupPairs(result, dryRun) {
|
|
76
86
|
// Show detailed pairs
|
|
77
87
|
console.log('');
|
|
78
|
-
const shown = result.pairs.slice(0,
|
|
88
|
+
const shown = result.pairs.slice(0, MAX_PAIRS_SHOWN);
|
|
79
89
|
for (const pair of shown) {
|
|
80
90
|
const simPct = (pair.similarity * 100).toFixed(0);
|
|
81
91
|
const action = dryRun ? 'Would remove' : 'Removed';
|
|
82
92
|
console.log(` ${simPct}% similar | kept [${pair.keptLayer}] strength=${pair.keptStrength.toFixed(2)}`);
|
|
83
|
-
console.log(` ${pair.keptContent.slice(0,
|
|
93
|
+
console.log(` ${pair.keptContent.slice(0, PAIR_PREVIEW_CHARS)}`);
|
|
84
94
|
console.log(` ${action} [${pair.removedLayer}] strength=${pair.removedStrength.toFixed(2)}`);
|
|
85
|
-
console.log(` ${pair.removedContent.slice(0,
|
|
95
|
+
console.log(` ${pair.removedContent.slice(0, PAIR_PREVIEW_CHARS)}`);
|
|
86
96
|
console.log('');
|
|
87
97
|
}
|
|
88
98
|
if (result.pairs.length > 15) {
|
|
@@ -117,7 +127,7 @@ export async function cmdEmbed(hippoRoot, flags, given) {
|
|
|
117
127
|
count = await embedAll(root, undefined, provider);
|
|
118
128
|
}
|
|
119
129
|
catch (err) {
|
|
120
|
-
printError(`Embedding failed: ${
|
|
130
|
+
printError(`Embedding failed: ${errorMessage(err)}`);
|
|
121
131
|
const partial = loadEmbeddingIndex(root);
|
|
122
132
|
printError(`Partial progress saved: ${Object.keys(partial).length} embeddings on disk. Re-run \`hippo embed\` to resume.`);
|
|
123
133
|
process.exitCode = 1;
|
|
@@ -135,14 +145,8 @@ export async function cmdEmbed(hippoRoot, flags, given) {
|
|
|
135
145
|
function resetPhysics(root) {
|
|
136
146
|
const entries = loadAllEntries(root);
|
|
137
147
|
const embIndex = loadEmbeddingIndex(root);
|
|
138
|
-
const
|
|
139
|
-
|
|
140
|
-
const count = resetAllPhysicsState(db, entries, embIndex);
|
|
141
|
-
console.log(`Reset physics state: ${count} particles re-initialized from embeddings.`);
|
|
142
|
-
}
|
|
143
|
-
finally {
|
|
144
|
-
closeHippoDb(db);
|
|
145
|
-
}
|
|
148
|
+
const count = resetStoredParticles(root, entries, embIndex);
|
|
149
|
+
console.log(`Reset physics state: ${count} particles re-initialized from embeddings.`);
|
|
146
150
|
}
|
|
147
151
|
function printEmbedStatus(root) {
|
|
148
152
|
const entries = loadAllEntries(root);
|
|
@@ -167,7 +171,7 @@ function readyEmbedProvider(root, given) {
|
|
|
167
171
|
return resolveEmbeddingProvider(root);
|
|
168
172
|
}
|
|
169
173
|
catch (err) {
|
|
170
|
-
printError(
|
|
174
|
+
printError(errorMessage(err));
|
|
171
175
|
return null;
|
|
172
176
|
}
|
|
173
177
|
})();
|