hippo-memory 1.70.0 → 1.72.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 +2 -2
- package/dist/agent-memories/apply.d.ts +0 -11
- package/dist/agent-memories/apply.js +6 -21
- package/dist/agent-memories/claude-code.d.ts +4 -2
- package/dist/agent-memories/claude-code.js +15 -6
- package/dist/agent-memories/codex.js +1 -1
- package/dist/agent-memories/copilot.d.ts +1 -3
- package/dist/agent-memories/copilot.js +1 -17
- package/dist/agent-memories/files.js +23 -12
- package/dist/agent-memories/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/project-folds.d.ts +10 -0
- package/dist/agent-memories/project-folds.js +34 -0
- package/dist/agent-memories/report.js +2 -1
- package/dist/agent-memories/sync.d.ts +4 -2
- package/dist/agent-memories/sync.js +18 -11
- package/dist/api/assemble.d.ts +7 -44
- package/dist/api/assemble.js +3 -23
- package/dist/api/audit.d.ts +33 -1
- package/dist/api/audit.js +48 -1
- package/dist/api/auth.d.ts +20 -26
- package/dist/api/auth.js +43 -29
- package/dist/api/auto-sleep.d.ts +5 -2
- package/dist/api/auto-sleep.js +9 -5
- package/dist/api/availability.d.ts +2 -15
- package/dist/api/availability.js +4 -18
- package/dist/api/cards.d.ts +42 -0
- package/dist/api/cards.js +52 -0
- package/dist/api/conflicts.d.ts +28 -0
- package/dist/api/conflicts.js +61 -0
- package/dist/api/context-render.js +4 -3
- package/dist/api/context-select.js +12 -15
- package/dist/api/context-types.d.ts +10 -35
- package/dist/api/context.d.ts +5 -22
- package/dist/api/context.js +38 -46
- package/dist/api/continuity.d.ts +47 -0
- package/dist/api/continuity.js +66 -0
- package/dist/{cli → api}/correction-latency.d.ts +2 -14
- package/dist/{cli → api}/correction-latency.js +2 -14
- package/dist/api/dormant.d.ts +5 -21
- package/dist/api/dormant.js +11 -28
- package/dist/api/drill-down.d.ts +7 -46
- package/dist/api/drill-down.js +6 -27
- package/dist/api/embeddings.d.ts +17 -0
- package/dist/api/embeddings.js +28 -0
- package/dist/api/error-reply.d.ts +8 -0
- package/dist/api/error-reply.js +21 -0
- package/dist/api/forget.d.ts +11 -26
- package/dist/api/forget.js +23 -35
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +5 -9
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +6 -2
- package/dist/api/index.js +6 -2
- package/dist/api/instruction-detect.js +21 -6
- package/dist/api/learn.d.ts +4 -0
- package/dist/api/learn.js +53 -27
- package/dist/api/ledger-db.d.ts +2 -5
- package/dist/api/ledger-db.js +5 -35
- package/dist/api/memories.d.ts +23 -0
- package/dist/api/memories.js +46 -0
- package/dist/api/objects.d.ts +9 -0
- package/dist/api/objects.js +11 -0
- package/dist/api/on-store.js +5 -3
- package/dist/api/outcome.js +1 -1
- package/dist/api/pilot-arm.d.ts +1 -11
- package/dist/api/pilot-arm.js +5 -45
- package/dist/api/predictions.d.ts +11 -0
- package/dist/api/predictions.js +24 -0
- package/dist/api/projects.d.ts +21 -0
- package/dist/api/projects.js +24 -0
- package/dist/api/promote.d.ts +13 -17
- package/dist/api/promote.js +12 -20
- package/dist/api/prompt-hook.d.ts +19 -6
- package/dist/api/prompt-hook.js +54 -13
- package/dist/api/provenance-coverage.d.ts +14 -0
- package/dist/{cli → api}/provenance-coverage.js +2 -6
- package/dist/api/recall-cli.d.ts +58 -0
- package/dist/api/recall-cli.js +103 -0
- package/dist/api/recall-core.js +17 -9
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +17 -84
- package/dist/api/recall-history.js +15 -88
- package/dist/api/recall-pipeline.d.ts +2 -3
- package/dist/api/recall-pipeline.js +21 -15
- package/dist/api/recall-request.js +1 -1
- package/dist/api/recall-types.d.ts +64 -304
- package/dist/api/recall.d.ts +3 -34
- package/dist/api/recall.js +63 -89
- package/dist/api/refine.d.ts +7 -0
- package/dist/api/refine.js +10 -0
- package/dist/api/remember-local.d.ts +57 -0
- package/dist/api/remember-local.js +90 -0
- package/dist/api/remember.d.ts +20 -2
- package/dist/api/remember.js +16 -3
- package/dist/api/session-end.d.ts +22 -0
- package/dist/api/session-end.js +101 -0
- package/dist/api/sleep-run.d.ts +2 -4
- package/dist/api/sleep-run.js +28 -28
- package/dist/api/sleep.d.ts +9 -28
- package/dist/api/status.d.ts +24 -0
- package/dist/api/status.js +40 -0
- package/dist/api/store-init.d.ts +4 -0
- package/dist/api/store-init.js +9 -0
- package/dist/api/tokens.d.ts +3 -10
- package/dist/api/tokens.js +4 -11
- package/dist/api/types.d.ts +8 -29
- package/dist/api/types.js +10 -23
- package/dist/capture/caller-session.d.ts +0 -3
- package/dist/capture/caller-session.js +1 -12
- package/dist/capture/capture-error.d.ts +2 -2
- package/dist/capture/capture-error.js +23 -18
- package/dist/capture/codex-patch.js +3 -1
- package/dist/capture/command.d.ts +4 -12
- package/dist/capture/command.js +39 -114
- package/dist/capture/compact.d.ts +4 -15
- package/dist/capture/compact.js +26 -30
- package/dist/capture/compaction-items-caller.js +11 -20
- package/dist/capture/compaction-record.d.ts +7 -93
- package/dist/capture/compaction-record.js +34 -399
- package/dist/capture/compaction-spool.d.ts +5 -3
- package/dist/capture/compaction-spool.js +21 -7
- package/dist/capture/copilot-transcript.d.ts +2 -1
- package/dist/capture/copilot-transcript.js +2 -1
- package/dist/capture/extract.d.ts +5 -2
- package/dist/capture/extract.js +4 -3
- package/dist/capture/failure-caller.d.ts +1 -1
- package/dist/capture/failure-caller.js +21 -16
- package/dist/capture/failure-reading.d.ts +2 -1
- package/dist/capture/failure-reading.js +7 -9
- package/dist/capture/pre-compact-caller.js +5 -4
- package/dist/capture/session-digest.d.ts +1 -1
- package/dist/capture/session-digest.js +17 -10
- package/dist/capture/session-end-caller.js +2 -1
- package/dist/capture/session-worker.js +3 -4
- package/dist/capture/transcript.d.ts +4 -11
- package/dist/capture/transcript.js +10 -21
- package/dist/capture/working-state.d.ts +4 -2
- package/dist/capture/working-state.js +4 -2
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +1 -59
- package/dist/cli/audit-prune.js +2 -61
- package/dist/cli/audit.d.ts +1 -1
- package/dist/cli/audit.js +42 -43
- package/dist/cli/auth.d.ts +2 -2
- package/dist/cli/auth.js +61 -44
- package/dist/cli/briefs.d.ts +1 -4
- package/dist/cli/briefs.js +42 -301
- package/dist/cli/card.d.ts +2 -2
- package/dist/cli/card.js +63 -56
- package/dist/cli/client.d.ts +12 -27
- package/dist/cli/client.js +41 -44
- package/dist/cli/compact-resume-payload.js +4 -3
- package/dist/cli/context.d.ts +2 -3
- package/dist/cli/context.js +22 -18
- package/dist/cli/continuity.d.ts +6 -6
- package/dist/cli/continuity.js +81 -86
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +88 -116
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +55 -34
- package/dist/cli/decisions.d.ts +2 -4
- package/dist/cli/decisions.js +18 -309
- package/dist/cli/eval.d.ts +1 -1
- package/dist/cli/eval.js +27 -26
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +2 -3
- package/dist/cli/explain.js +25 -27
- package/dist/cli/flag-values.d.ts +6 -1
- package/dist/cli/flag-values.js +42 -15
- package/dist/cli/flags.d.ts +0 -288
- package/dist/cli/flags.js +3 -138
- package/dist/cli/github.d.ts +14 -0
- package/dist/{connectors/github/cli-impl.js → cli/github.js} +43 -71
- package/dist/cli/goals.d.ts +2 -2
- package/dist/cli/goals.js +46 -50
- package/dist/cli/graph.d.ts +3 -0
- package/dist/cli/graph.js +83 -0
- package/dist/cli/hook-runtime.d.ts +12 -32
- package/dist/cli/hook-runtime.js +21 -64
- package/dist/cli/incidents.d.ts +3 -0
- package/dist/cli/incidents.js +112 -0
- package/dist/cli/init.d.ts +2 -2
- package/dist/cli/init.js +33 -30
- package/dist/cli/install-steps.d.ts +2 -1
- package/dist/cli/install-steps.js +13 -14
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +4 -1
- package/dist/cli/lenient-id.d.ts +2 -0
- package/dist/cli/lenient-id.js +13 -0
- package/dist/cli/maintenance.d.ts +5 -5
- package/dist/cli/maintenance.js +37 -43
- package/dist/cli/notes.d.ts +2 -0
- package/dist/cli/notes.js +41 -0
- package/dist/cli/object-verbs.js +4 -3
- package/dist/cli/open-browser.d.ts +14 -0
- package/dist/cli/open-browser.js +26 -0
- package/dist/cli/owner-validation.d.ts +5 -28
- package/dist/cli/owner-validation.js +5 -28
- package/dist/cli/playbooks.d.ts +3 -4
- package/dist/cli/playbooks.js +131 -300
- package/dist/cli/predictions.d.ts +3 -0
- package/dist/cli/predictions.js +175 -0
- package/dist/cli/print.d.ts +2 -5
- package/dist/cli/print.js +3 -5
- package/dist/cli/projects.d.ts +2 -2
- package/dist/cli/projects.js +31 -25
- package/dist/cli/quality-repair-once.d.ts +1 -1
- package/dist/cli/quality-repair-once.js +7 -6
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +67 -137
- package/dist/cli/refine-llm.d.ts +5 -31
- package/dist/cli/refine-llm.js +23 -50
- package/dist/cli/remember.d.ts +3 -3
- package/dist/cli/remember.js +134 -192
- package/dist/cli/scheduler.d.ts +2 -17
- package/dist/cli/scheduler.js +14 -19
- package/dist/cli/serve.js +23 -14
- package/dist/cli/session-hooks.d.ts +11 -19
- package/dist/cli/session-hooks.js +143 -214
- package/dist/cli/setup.d.ts +4 -4
- package/dist/cli/setup.js +35 -30
- package/dist/cli/shared.d.ts +7 -25
- package/dist/cli/shared.js +17 -60
- package/dist/cli/slack.d.ts +2 -2
- package/dist/cli/slack.js +19 -23
- package/dist/cli/sleep-render.js +6 -3
- package/dist/cli/sleep.d.ts +3 -2
- package/dist/cli/sleep.js +17 -49
- package/dist/cli/status.d.ts +11 -14
- package/dist/cli/status.js +74 -120
- package/dist/cli/stdin.d.ts +4 -6
- package/dist/cli/stdin.js +2 -3
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +87 -108
- package/dist/cli/usage.d.ts +0 -79
- package/dist/cli/usage.js +1 -689
- package/dist/cli/verb-row.d.ts +32 -0
- package/dist/cli/verb-row.js +6 -0
- package/dist/cli/verbs/health.d.ts +27 -0
- package/dist/cli/verbs/health.js +232 -0
- package/dist/cli/verbs/memory.d.ts +16 -0
- package/dist/cli/verbs/memory.js +244 -0
- package/dist/cli/verbs/objects.d.ts +20 -0
- package/dist/cli/verbs/objects.js +254 -0
- package/dist/cli/verbs/sessions.d.ts +31 -0
- package/dist/cli/verbs/sessions.js +312 -0
- package/dist/cli/verbs.d.ts +81 -0
- package/dist/cli/verbs.js +7 -0
- package/dist/cli/versioned-verbs.d.ts +51 -0
- package/dist/cli/versioned-verbs.js +79 -0
- package/dist/cli.d.ts +1 -654
- package/dist/cli.js +44 -510
- package/dist/connectors/dlq.d.ts +39 -3
- package/dist/connectors/dlq.js +37 -3
- package/dist/connectors/github/backfill.d.ts +5 -25
- package/dist/connectors/github/backfill.js +26 -52
- package/dist/connectors/github/deletion.d.ts +4 -18
- package/dist/connectors/github/deletion.js +2 -15
- package/dist/connectors/github/dlq.d.ts +8 -33
- package/dist/connectors/github/dlq.js +34 -93
- package/dist/connectors/github/ingest.d.ts +4 -12
- package/dist/connectors/github/ingest.js +5 -36
- package/dist/connectors/github/octokit-client.d.ts +4 -16
- package/dist/connectors/github/octokit-client.js +27 -24
- package/dist/connectors/github/ratelimit.d.ts +3 -14
- package/dist/connectors/github/ratelimit.js +3 -14
- package/dist/connectors/github/scope.d.ts +3 -5
- package/dist/connectors/github/scope.js +3 -5
- package/dist/connectors/github/signature.d.ts +4 -26
- package/dist/connectors/github/signature.js +4 -26
- package/dist/connectors/github/tenant-routing.d.ts +2 -24
- package/dist/connectors/github/tenant-routing.js +4 -26
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +3 -15
- package/dist/connectors/github/types.js +2 -9
- package/dist/connectors/github/webhook.d.ts +3 -16
- package/dist/connectors/github/webhook.js +38 -23
- package/dist/connectors/ingest.d.ts +10 -0
- package/dist/connectors/ingest.js +28 -0
- package/dist/connectors/slack/backfill.d.ts +4 -17
- package/dist/connectors/slack/backfill.js +4 -13
- package/dist/connectors/slack/dlq.d.ts +2 -19
- package/dist/connectors/slack/dlq.js +51 -90
- package/dist/connectors/slack/ingest.d.ts +4 -9
- package/dist/connectors/slack/ingest.js +4 -30
- package/dist/connectors/slack/scope.d.ts +2 -8
- package/dist/connectors/slack/scope.js +2 -8
- package/dist/connectors/slack/signature.d.ts +1 -6
- package/dist/connectors/slack/tenant-routing.d.ts +2 -19
- package/dist/connectors/slack/tenant-routing.js +2 -21
- package/dist/connectors/slack/transform.d.ts +2 -18
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +3 -9
- package/dist/connectors/slack/types.js +2 -4
- package/dist/connectors/slack/web-client.js +33 -27
- package/dist/connectors/slack/webhook.d.ts +3 -19
- package/dist/connectors/slack/webhook.js +6 -26
- package/dist/connectors/slack/workspaces.d.ts +4 -24
- package/dist/connectors/slack/workspaces.js +4 -24
- package/dist/consolidate/conflicts.js +7 -15
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/consolidate/dag.d.ts +5 -28
- package/dist/consolidate/dag.js +29 -84
- package/dist/consolidate/decay.js +7 -19
- package/dist/consolidate/dedupe.d.ts +13 -52
- package/dist/consolidate/dedupe.js +18 -74
- package/dist/consolidate/flush-units.d.ts +3 -4
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +3 -26
- package/dist/consolidate/half-life-migration.js +11 -28
- package/dist/consolidate/llm-passes.js +49 -40
- package/dist/consolidate/memory-value-weights.d.ts +2 -13
- package/dist/consolidate/memory-value-weights.js +2 -13
- package/dist/consolidate/memory-value.d.ts +11 -84
- package/dist/consolidate/memory-value.js +18 -105
- package/dist/consolidate/merge.js +12 -33
- package/dist/consolidate/physics-pass.d.ts +6 -1
- package/dist/consolidate/physics-pass.js +27 -9
- package/dist/consolidate/replay.d.ts +6 -38
- package/dist/consolidate/replay.js +25 -56
- package/dist/consolidate/run.js +1 -1
- package/dist/consolidate/sleep.d.ts +1 -8
- package/dist/consolidate/sleep.js +13 -22
- package/dist/consolidate/trace.d.ts +3 -18
- package/dist/consolidate/trace.js +3 -18
- package/dist/consolidate/traces.js +9 -25
- package/dist/core/ablation.d.ts +14 -91
- package/dist/core/ablation.js +16 -91
- package/dist/core/active-scope.d.ts +7 -0
- package/dist/{sharing/scope.js → core/active-scope.js} +5 -12
- package/dist/core/ambient.d.ts +5 -8
- package/dist/core/ambient.js +40 -26
- package/dist/core/api-errors.d.ts +16 -0
- package/dist/core/api-errors.js +20 -0
- package/dist/core/capture-contract.d.ts +4 -2
- package/dist/core/capture-contract.js +4 -2
- package/dist/core/card.d.ts +4 -1
- package/dist/core/card.js +11 -1
- package/dist/core/compaction-timing.d.ts +7 -0
- package/dist/core/compaction-timing.js +9 -0
- package/dist/core/compare.d.ts +11 -67
- package/dist/core/compare.js +9 -63
- package/dist/core/config.d.ts +10 -24
- package/dist/core/config.js +20 -16
- package/dist/core/cosine.d.ts +3 -0
- package/dist/core/cosine.js +19 -0
- package/dist/core/handoff.d.ts +1 -7
- package/dist/core/handoff.js +1 -7
- package/dist/core/markdown.d.ts +6 -0
- package/dist/{store → core}/markdown.js +23 -22
- package/dist/core/memory-audit.d.ts +17 -0
- package/dist/core/memory-audit.js +54 -0
- package/dist/core/memory-quality.js +1 -1
- package/dist/core/memory.d.ts +51 -168
- package/dist/core/memory.js +76 -239
- package/dist/{consolidate → core}/merged-row.d.ts +1 -1
- package/dist/{consolidate → core}/merged-row.js +3 -2
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/core/physics-config.d.ts +1 -4
- package/dist/core/physics-config.js +3 -8
- package/dist/core/physics.d.ts +15 -61
- package/dist/core/physics.js +65 -138
- package/dist/core/prediction.d.ts +3 -0
- package/dist/core/prediction.js +6 -0
- package/dist/core/project-identity.d.ts +20 -58
- package/dist/core/project-identity.js +27 -39
- package/dist/core/project-remote.js +13 -2
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/core/recall-scope.d.ts +69 -0
- package/dist/core/recall-scope.js +138 -0
- package/dist/core/salience.d.ts +1 -7
- package/dist/core/salience.js +1 -7
- package/dist/dashboard/dashboard-actions.js +2 -2
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -1
- package/dist/dashboard/dashboard-snapshot.js +11 -2
- package/dist/dashboard/dashboard-types.d.ts +2 -1
- package/dist/dashboard/dashboard.d.ts +1 -0
- package/dist/dashboard/dashboard.js +50 -4
- package/dist/db/busy.d.ts +3 -8
- package/dist/db/busy.js +37 -33
- package/dist/db/connect.js +7 -8
- package/dist/db/index.d.ts +3 -3
- package/dist/db/index.js +3 -3
- package/dist/db/migrate.js +3 -3
- package/dist/db/migrations/index.d.ts +1 -1
- package/dist/db/migrations/index.js +3 -1
- package/dist/db/migrations/types.d.ts +2 -5
- package/dist/db/migrations/v14.js +2 -3
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +2 -3
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +2 -7
- package/dist/db/migrations/v22.js +4 -17
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +2 -4
- package/dist/db/migrations/v25.js +3 -8
- package/dist/db/migrations/v26.js +2 -13
- package/dist/db/migrations/v27.js +3 -11
- package/dist/db/migrations/v28.js +2 -14
- package/dist/db/migrations/v29.js +4 -18
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +2 -15
- package/dist/db/migrations/v32.js +4 -22
- package/dist/db/migrations/v33.js +2 -15
- package/dist/db/migrations/v34.js +2 -11
- package/dist/db/migrations/v35.js +2 -11
- package/dist/db/migrations/v36.js +2 -11
- package/dist/db/migrations/v37.js +8 -33
- package/dist/db/migrations/v38.js +5 -38
- package/dist/db/migrations/v39.js +9 -20
- package/dist/db/migrations/v40.js +2 -9
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +1 -1
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v47.js +2 -3
- package/dist/db/migrations/v51.js +1 -1
- package/dist/db/migrations/v55.d.ts +3 -0
- package/dist/db/migrations/v55.js +17 -0
- package/dist/db/open.d.ts +2 -2
- package/dist/db/open.js +21 -9
- package/dist/db/physics-state.d.ts +6 -22
- package/dist/db/physics-state.js +28 -39
- package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
- package/dist/db/raw-archive-mirror-cleanup.js +2 -17
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -2
- package/dist/db/vector-store.d.ts +2 -0
- package/dist/db/vector-store.js +25 -5
- package/dist/db/wal-checkpointer.js +2 -1
- package/dist/doctor.js +85 -27
- package/dist/embeddings/local.d.ts +62 -0
- package/dist/embeddings/local.js +146 -0
- package/dist/embeddings/provider.d.ts +43 -0
- package/dist/{store/embeddings → embeddings}/provider.js +58 -83
- package/dist/embeddings/transformers.d.ts +26 -0
- package/dist/embeddings/transformers.js +89 -0
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +3 -2
- package/dist/eval/eval-stats.d.ts +15 -53
- package/dist/eval/eval-stats.js +12 -42
- package/dist/eval/eval-suite.d.ts +2 -13
- package/dist/eval/eval-suite.js +91 -45
- package/dist/eval/eval.d.ts +6 -24
- package/dist/eval/eval.js +8 -35
- package/dist/eval/judgment.d.ts +0 -3
- package/dist/eval/judgment.js +30 -15
- package/dist/extensions/openclaw-plugin/index.js +1 -1
- package/dist/graph/extract.d.ts +5 -27
- package/dist/graph/extract.js +10 -36
- package/dist/graph/recall.d.ts +7 -20
- package/dist/graph/recall.js +15 -77
- package/dist/graph/stream.d.ts +7 -39
- package/dist/graph/stream.js +11 -34
- package/dist/graph/view.d.ts +9 -35
- package/dist/graph/view.js +24 -44
- package/dist/graph/write.d.ts +1 -1
- package/dist/graph/write.js +9 -9
- package/dist/hooks/codex-session.js +3 -2
- package/dist/hooks/codex-wrapper.js +4 -3
- package/dist/hooks/copilot.js +2 -1
- package/dist/hooks/hook-blocks.d.ts +6 -2
- package/dist/hooks/hook-blocks.js +37 -124
- package/dist/hooks/json-hooks.d.ts +4 -36
- package/dist/hooks/json-hooks.js +22 -59
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +17 -81
- package/dist/hooks/shared.d.ts +6 -21
- package/dist/hooks/shared.js +31 -33
- package/dist/importers/core.d.ts +12 -37
- package/dist/importers/core.js +10 -28
- package/dist/importers/markdown-parse.d.ts +8 -22
- package/dist/importers/markdown-parse.js +8 -25
- package/dist/importers/markdown.js +3 -12
- package/dist/importers/sources.js +12 -39
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +31 -85
- package/dist/index.d.ts +8 -3
- package/dist/index.js +8 -3
- package/dist/learn/autolearn.d.ts +23 -42
- package/dist/learn/autolearn.js +45 -52
- package/dist/learn/churn-git.js +13 -4
- package/dist/learn/extract.d.ts +3 -2
- package/dist/learn/extract.js +8 -8
- package/dist/learn/forward-claim-detector.d.ts +6 -30
- package/dist/learn/forward-claim-detector.js +18 -68
- package/dist/learn/invalidation.d.ts +6 -18
- package/dist/learn/invalidation.js +18 -31
- package/dist/mcp/admin-tools.d.ts +2 -2
- package/dist/mcp/admin-tools.js +30 -53
- package/dist/mcp/format.js +3 -2
- package/dist/mcp/framing.d.ts +1 -0
- package/dist/mcp/framing.js +1 -1
- package/dist/mcp/memory-tools.js +7 -10
- package/dist/mcp/protocol.d.ts +15 -29
- package/dist/mcp/protocol.js +26 -16
- package/dist/mcp/recall-tools.js +14 -11
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +12 -27
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +5 -16
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +5 -11
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +68 -16
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +47 -22
- package/dist/objects/customer-notes.d.ts +9 -44
- package/dist/objects/customer-notes.js +7 -48
- package/dist/objects/decisions.d.ts +14 -52
- package/dist/objects/decisions.js +15 -53
- package/dist/objects/descriptor.d.ts +1 -1
- package/dist/objects/incidents.d.ts +9 -40
- package/dist/objects/incidents.js +7 -41
- package/dist/objects/lifecycle.d.ts +1 -1
- package/dist/objects/lifecycle.js +2 -1
- package/dist/objects/policies.d.ts +13 -91
- package/dist/objects/policies.js +13 -99
- package/dist/objects/processes.d.ts +9 -54
- package/dist/objects/processes.js +7 -61
- package/dist/objects/project-briefs.d.ts +13 -57
- package/dist/objects/project-briefs.js +16 -78
- package/dist/objects/skills.d.ts +9 -44
- package/dist/objects/skills.js +8 -54
- package/dist/postinstall.js +7 -20
- package/dist/predictions/planning-fallacy.d.ts +11 -34
- package/dist/rerankers/clef.js +6 -37
- package/dist/rerankers/cross-encoder.d.ts +31 -2
- package/dist/rerankers/cross-encoder.js +65 -101
- package/dist/rerankers/index.js +5 -4
- package/dist/rerankers/jev.js +11 -10
- package/dist/rerankers/llm.d.ts +2 -11
- package/dist/rerankers/llm.js +14 -14
- package/dist/rerankers/outage-warning.d.ts +5 -2
- package/dist/rerankers/outage-warning.js +7 -4
- package/dist/rerankers/remote.d.ts +1 -0
- package/dist/rerankers/remote.js +2 -0
- package/dist/rerankers/types.d.ts +2 -14
- package/dist/search/bm25-search.js +1 -1
- package/dist/search/boosts.d.ts +0 -2
- package/dist/search/boosts.js +3 -3
- package/dist/search/embed-memories.d.ts +9 -0
- package/dist/search/embed-memories.js +377 -0
- package/dist/search/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +93 -0
- package/dist/search/hybrid.d.ts +11 -2
- package/dist/search/hybrid.js +9 -4
- package/dist/search/multihop.js +2 -3
- package/dist/search/path-context.d.ts +5 -18
- package/dist/search/path-context.js +5 -18
- package/dist/search/physics-search.d.ts +6 -3
- package/dist/search/physics-search.js +29 -19
- package/dist/search/rerank.js +1 -1
- package/dist/search/rrf.d.ts +7 -35
- package/dist/search/rrf.js +5 -30
- package/dist/search/vector.d.ts +13 -4
- package/dist/search/vector.js +40 -13
- package/dist/server/auth.d.ts +11 -28
- package/dist/server/auth.js +49 -32
- package/dist/server/boot.d.ts +2 -21
- package/dist/server/boot.js +69 -161
- package/dist/server/client-ip.d.ts +3 -21
- package/dist/server/client-ip.js +8 -30
- package/dist/server/deadline.d.ts +0 -2
- package/dist/server/deadline.js +1 -7
- package/dist/server/defaults.d.ts +4 -0
- package/dist/server/defaults.js +5 -0
- package/dist/server/key-check-bounds.d.ts +2 -1
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +19 -4
- package/dist/server/mcp-http.js +24 -53
- package/dist/server/rate-limit.d.ts +5 -18
- package/dist/server/rate-limit.js +4 -13
- package/dist/server/request.d.ts +4 -8
- package/dist/server/request.js +16 -19
- package/dist/server/route-checks.d.ts +7 -0
- package/dist/server/route-checks.js +42 -0
- package/dist/server/route-table.d.ts +9 -8
- package/dist/server/route-table.js +127 -139
- package/dist/server/routes/admin.d.ts +8 -8
- package/dist/server/routes/admin.js +35 -49
- package/dist/server/routes/customer-notes.d.ts +6 -6
- package/dist/server/routes/customer-notes.js +8 -14
- package/dist/server/routes/decisions.d.ts +6 -6
- package/dist/server/routes/decisions.js +12 -21
- package/dist/server/routes/incidents.d.ts +6 -6
- package/dist/server/routes/incidents.js +14 -25
- package/dist/server/routes/memories.d.ts +9 -9
- package/dist/server/routes/memories.js +20 -63
- package/dist/server/routes/object-routes.d.ts +6 -11
- package/dist/server/routes/object-routes.js +11 -22
- package/dist/server/routes/policies.d.ts +7 -7
- package/dist/server/routes/policies.js +12 -22
- package/dist/server/routes/predictions.d.ts +6 -6
- package/dist/server/routes/predictions.js +22 -38
- package/dist/server/routes/processes.d.ts +6 -6
- package/dist/server/routes/processes.js +17 -28
- package/dist/server/routes/project-briefs.d.ts +7 -7
- package/dist/server/routes/project-briefs.js +11 -20
- package/dist/server/routes/recall.d.ts +5 -5
- package/dist/server/routes/recall.js +16 -45
- package/dist/server/routes/skills.d.ts +7 -7
- package/dist/server/routes/skills.js +10 -22
- package/dist/server/server-detect.d.ts +15 -53
- package/dist/server/server-detect.js +55 -96
- package/dist/server/sleep-child.js +26 -7
- package/dist/server/sleep-offload.d.ts +11 -5
- package/dist/server/sleep-offload.js +21 -12
- package/dist/server/types.d.ts +32 -18
- package/dist/server/validation.d.ts +3 -2
- package/dist/server/validation.js +15 -33
- package/dist/server.d.ts +7 -6
- package/dist/server.js +8 -6
- package/dist/sharing/global-store.d.ts +19 -0
- package/dist/sharing/global-store.js +75 -0
- package/dist/sharing/global-sync.d.ts +6 -0
- package/dist/sharing/global-sync.js +73 -0
- package/dist/sharing/project-merge.d.ts +11 -19
- package/dist/sharing/project-merge.js +63 -125
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +40 -0
- package/dist/sharing/share.js +229 -0
- package/dist/store/ambient.js +9 -15
- package/dist/store/audit-event.d.ts +5 -13
- package/dist/store/audit-event.js +4 -12
- package/dist/store/audit.d.ts +2 -21
- package/dist/store/audit.js +8 -67
- package/dist/store/auth.d.ts +10 -8
- package/dist/store/auth.js +17 -12
- package/dist/store/candidates.d.ts +23 -5
- package/dist/store/candidates.js +119 -71
- package/dist/store/capture-write.d.ts +17 -0
- package/dist/store/capture-write.js +35 -0
- package/dist/store/card-detail.d.ts +2 -1
- package/dist/store/card-detail.js +2 -1
- package/dist/store/cards.d.ts +14 -9
- package/dist/store/cards.js +72 -126
- package/dist/store/compaction-caller.d.ts +18 -0
- package/dist/store/compaction-caller.js +29 -0
- package/dist/store/compactions-record.d.ts +115 -0
- package/dist/store/compactions-record.js +417 -0
- package/dist/store/compactions.js +6 -4
- package/dist/store/conflicts.d.ts +4 -21
- package/dist/store/conflicts.js +76 -152
- package/dist/store/connectors/dlq.d.ts +10 -0
- package/dist/store/connectors/dlq.js +32 -0
- package/dist/store/connectors/github.d.ts +14 -16
- package/dist/store/connectors/github.js +34 -57
- package/dist/store/connectors/slack.d.ts +2 -11
- package/dist/store/connectors/slack.js +18 -47
- package/dist/store/dashboard-reads.js +11 -14
- package/dist/store/delete-and-batch.d.ts +17 -31
- package/dist/store/delete-and-batch.js +84 -67
- package/dist/store/delivery-recorder.d.ts +15 -4
- package/dist/store/delivery-recorder.js +34 -17
- package/dist/store/descendant-page.js +6 -3
- package/dist/store/diagnostics.js +6 -13
- package/dist/store/dormant.d.ts +8 -30
- package/dist/store/dormant.js +18 -57
- package/dist/store/embeddings/index.d.ts +11 -90
- package/dist/store/embeddings/index.js +18 -523
- package/dist/store/entry-reads.d.ts +34 -61
- package/dist/store/entry-reads.js +111 -136
- package/dist/store/entry-row.d.ts +6 -35
- package/dist/store/entry-row.js +9 -37
- package/dist/store/entry-writes.d.ts +12 -18
- package/dist/store/entry-writes.js +46 -44
- package/dist/store/failure-log-at.d.ts +8 -0
- package/dist/store/failure-log-at.js +16 -0
- package/dist/store/failure-log.d.ts +2 -2
- package/dist/store/failure-log.js +5 -3
- package/dist/{trust → store}/gated-write.d.ts +3 -1
- package/dist/{trust → store}/gated-write.js +7 -5
- package/dist/store/goals.d.ts +3 -40
- package/dist/store/goals.js +41 -178
- package/dist/store/graph-queue.d.ts +6 -22
- package/dist/store/graph-queue.js +14 -45
- package/dist/store/graph-reads.d.ts +11 -35
- package/dist/store/graph-reads.js +24 -60
- package/dist/store/graph-rows.d.ts +3 -6
- package/dist/store/graph-rows.js +6 -9
- package/dist/store/graph-view-rows.d.ts +2 -1
- package/dist/store/graph-view-rows.js +2 -1
- package/dist/store/graph-writes.d.ts +10 -35
- package/dist/store/graph-writes.js +59 -106
- package/dist/store/half-life.d.ts +2 -1
- package/dist/store/half-life.js +14 -16
- package/dist/store/handoffs.d.ts +6 -12
- package/dist/store/handoffs.js +22 -40
- package/dist/store/index-and-stats.d.ts +6 -19
- package/dist/store/index-and-stats.js +36 -84
- package/dist/store/key-writes.js +1 -1
- package/dist/store/ledger-turn.d.ts +9 -0
- package/dist/store/ledger-turn.js +38 -0
- package/dist/store/mirrors.d.ts +2 -6
- package/dist/store/mirrors.js +24 -29
- package/dist/store/open.d.ts +0 -4
- package/dist/store/open.js +42 -62
- package/dist/store/pilot-arm.d.ts +12 -0
- package/dist/store/pilot-arm.js +42 -0
- package/dist/store/planning-fallacy-evidence.d.ts +2 -30
- package/dist/store/planning-fallacy-evidence.js +8 -37
- package/dist/store/port.d.ts +91 -82
- package/dist/store/port.js +8 -0
- package/dist/store/predictions.d.ts +12 -53
- package/dist/store/predictions.js +41 -125
- package/dist/store/project-tags.d.ts +62 -0
- package/dist/store/project-tags.js +67 -0
- package/dist/{cli → store}/quality-repair.js +15 -31
- package/dist/store/quarantine.js +2 -1
- package/dist/store/raw-archive.d.ts +4 -16
- package/dist/store/raw-archive.js +14 -29
- package/dist/store/recall-trace.d.ts +12 -77
- package/dist/store/recall-trace.js +37 -97
- package/dist/store/rejected-values.js +9 -20
- package/dist/store/rejection-probe.d.ts +4 -0
- package/dist/store/rejection-probe.js +19 -0
- package/dist/store/rejection.d.ts +10 -73
- package/dist/store/rejection.js +12 -84
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +9 -19
- package/dist/store/rows.js +36 -34
- package/dist/store/rule-sql.d.ts +14 -0
- package/dist/store/rule-sql.js +56 -0
- package/dist/store/search-rows.d.ts +7 -38
- package/dist/store/search-rows.js +23 -54
- package/dist/store/sessions.d.ts +10 -47
- package/dist/store/sessions.js +21 -75
- package/dist/store/set-aside.d.ts +14 -0
- package/dist/store/set-aside.js +23 -0
- package/dist/store/sqlite/busy.d.ts +3 -0
- package/dist/store/sqlite/busy.js +8 -0
- package/dist/store/sqlite/connector-events-group.js +5 -8
- package/dist/store/sqlite/connector-writes-group.js +3 -3
- package/dist/store/sqlite/entry-writes-group.js +4 -4
- package/dist/store/sqlite/error-codec.js +8 -5
- package/dist/store/sqlite/executor.d.ts +2 -1
- package/dist/store/sqlite/executor.js +12 -5
- package/dist/store/sqlite/graph-reads-group.js +1 -1
- package/dist/store/sqlite/held-connection.d.ts +9 -0
- package/dist/store/sqlite/held-connection.js +41 -0
- package/dist/store/sqlite/local.d.ts +3 -3
- package/dist/store/sqlite/local.js +1 -0
- package/dist/store/sqlite/object-rows.d.ts +1 -1
- package/dist/store/sqlite/object-rows.js +6 -3
- package/dist/store/sqlite/objects-group.d.ts +1 -1
- package/dist/store/sqlite/objects-group.js +5 -3
- package/dist/store/sqlite/quarantine-group.js +2 -2
- package/dist/store/sqlite/store.d.ts +1 -4
- package/dist/store/sqlite/store.js +16 -15
- package/dist/store/sqlite/vector-reads-group.js +2 -2
- package/dist/store/sqlite/worker-jobs.js +1 -1
- package/dist/store/sqlite/worker-ops.d.ts +13 -2
- package/dist/store/sqlite/worker-ops.js +13 -2
- package/dist/store/sqlite/worker-store.js +5 -2
- package/dist/store/summaries.d.ts +11 -63
- package/dist/store/summaries.js +37 -148
- package/dist/store/summary-dirty.js +1 -1
- package/dist/store/tenant-lookup.d.ts +6 -1
- package/dist/store/tenant-lookup.js +7 -0
- package/dist/store/tenant.d.ts +2 -16
- package/dist/store/tenant.js +4 -19
- package/dist/store/token-ledger.d.ts +13 -50
- package/dist/store/token-ledger.js +19 -85
- package/dist/store/usage-reports.js +5 -13
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +171 -0
- package/dist/store/working-memory.d.ts +6 -25
- package/dist/store/working-memory.js +18 -52
- package/dist/support-bundle.js +9 -8
- package/dist/trust/reject-flow.js +3 -5
- package/dist/util/agent-homes.d.ts +15 -0
- package/dist/util/agent-homes.js +34 -0
- package/dist/util/anthropic-messages.d.ts +3 -0
- package/dist/util/anthropic-messages.js +35 -6
- package/dist/util/atomic-write.d.ts +2 -1
- package/dist/util/atomic-write.js +35 -4
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/chunked.d.ts +3 -0
- package/dist/util/chunked.js +10 -0
- package/dist/util/crash-handlers.d.ts +8 -1
- package/dist/util/crash-handlers.js +52 -10
- package/dist/util/ellipsize.d.ts +3 -0
- package/dist/util/ellipsize.js +5 -0
- package/dist/util/env.d.ts +14 -6
- package/dist/util/env.js +15 -7
- package/dist/util/format.d.ts +3 -0
- package/dist/util/format.js +6 -0
- package/dist/util/home-path.d.ts +2 -1
- package/dist/util/home-path.js +4 -2
- package/dist/util/hook-payload.d.ts +8 -0
- package/dist/util/hook-payload.js +37 -0
- package/dist/util/http-retry.d.ts +9 -1
- package/dist/util/http-retry.js +67 -8
- package/dist/util/http-util.d.ts +0 -8
- package/dist/util/http-util.js +10 -21
- package/dist/util/limits.d.ts +7 -0
- package/dist/util/limits.js +14 -0
- package/dist/util/log.d.ts +7 -2
- package/dist/util/log.js +34 -9
- package/dist/util/request-scope.d.ts +5 -2
- package/dist/util/request-scope.js +13 -7
- package/dist/util/secret-detect.d.ts +5 -30
- package/dist/util/secret-detect.js +19 -40
- package/dist/util/sqlite-blocked.d.ts +2 -0
- package/dist/util/sqlite-blocked.js +5 -0
- package/dist/util/stored-json.d.ts +1 -1
- package/dist/util/stored-json.js +1 -1
- package/dist/util/stream-tee.d.ts +3 -0
- package/dist/util/stream-tee.js +35 -0
- package/dist/util/time.d.ts +4 -0
- package/dist/util/time.js +4 -0
- package/dist/util/token-text.d.ts +1 -4
- package/dist/util/token-text.js +1 -4
- package/dist/util/transcript-tail.d.ts +2 -0
- package/dist/util/transcript-tail.js +24 -23
- package/dist/util/version.d.ts +5 -20
- package/dist/util/version.js +5 -20
- package/dist/{store → util}/yaml.d.ts +1 -5
- package/dist/{store → util}/yaml.js +2 -6
- package/extensions/openclaw-plugin/index.ts +1 -1
- 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/cli/provenance-coverage.d.ts +0 -18
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/sharing/scope.d.ts +0 -14
- package/dist/sharing/shared.d.ts +0 -187
- package/dist/sharing/shared.js +0 -563
- package/dist/store/embeddings/local.d.ts +0 -15
- package/dist/store/embeddings/local.js +0 -192
- package/dist/store/embeddings/provider.d.ts +0 -77
- package/dist/store/markdown.d.ts +0 -10
- package/dist/store/recall-scope.d.ts +0 -138
- package/dist/store/recall-scope.js +0 -216
- package/dist/store/vector-writes.d.ts +0 -13
- package/dist/store/vector-writes.js +0 -89
- /package/dist/{store → core}/object-types.d.ts +0 -0
- /package/dist/{store → core}/object-types.js +0 -0
- /package/dist/{cli → store}/quality-repair.d.ts +0 -0
- /package/dist/{capture → util}/compaction-items.d.ts +0 -0
- /package/dist/{capture → util}/compaction-items.js +0 -0
package/dist/cli/init.js
CHANGED
|
@@ -8,18 +8,23 @@ import { writeFileAtomic } from '../util/atomic-write.js';
|
|
|
8
8
|
import { isCodexPresent } from '../hooks/shared.js';
|
|
9
9
|
import { isCodexWrapperInstalled } from '../hooks/codex-wrapper.js';
|
|
10
10
|
import { installOpencodePlugin } from '../hooks/opencode.js';
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
11
|
+
import { initMemoryStore } from '../api/store-init.js';
|
|
12
|
+
import { isInitialized } from '../core/project-identity.js';
|
|
13
|
+
import { listMemories } from '../api/memories.js';
|
|
14
|
+
import { cliApiContext } from './api-context.js';
|
|
13
15
|
import { isGitRepo } from '../learn/autolearn.js';
|
|
14
16
|
import { currentMachine, importForStore, importProjectMemories, importUserMemories } from '../agent-memories/sync.js';
|
|
15
17
|
import { emptyReport, mergeReports } from '../agent-memories/report.js';
|
|
16
|
-
import { getGlobalRoot, initGlobal } from '../sharing/
|
|
18
|
+
import { getGlobalRoot, initGlobal } from '../sharing/global-store.js';
|
|
17
19
|
import { registerWorkspace } from './scheduler.js';
|
|
18
|
-
import { stringFlag } from './flag-values.js';
|
|
20
|
+
import { numberFlag, stringFlag } from './flag-values.js';
|
|
19
21
|
import { printAgentImport } from './print.js';
|
|
22
|
+
import { errorCode, errorMessage, log } from '../util/log.js';
|
|
20
23
|
import { installCodexMemoryHooks, setupDailySchedule, warnClaudeSettingsUnusable } from './install-steps.js';
|
|
21
24
|
import { learnFromRepo, skipLearnOnSharedStore } from './shared.js';
|
|
22
25
|
import { HOOK_MARKERS, HOOKS, hippoBlock } from '../hooks/hook-blocks.js';
|
|
26
|
+
// An unreadable or vanished folder is expected while scanning; any other failure is worth a line.
|
|
27
|
+
const QUIET_SCAN_ERRORS = new Set(['EACCES', 'EPERM', 'ENOENT', 'ENOTDIR']);
|
|
23
28
|
function scanForGitRepos(rootDir, maxDepth = 2) {
|
|
24
29
|
const repos = [];
|
|
25
30
|
function walk(dir, depth) {
|
|
@@ -40,7 +45,11 @@ function scanForGitRepos(rootDir, maxDepth = 2) {
|
|
|
40
45
|
walk(full, depth + 1);
|
|
41
46
|
}
|
|
42
47
|
}
|
|
43
|
-
catch {
|
|
48
|
+
catch (err) {
|
|
49
|
+
const code = errorCode(err);
|
|
50
|
+
if (!QUIET_SCAN_ERRORS.has(code))
|
|
51
|
+
log.warn(`repo scan skipped ${dir}`, { code: code || 'unknown', reason: errorMessage(err) });
|
|
52
|
+
}
|
|
44
53
|
}
|
|
45
54
|
// Check if rootDir itself is a git repo
|
|
46
55
|
if (fs.existsSync(path.join(rootDir, '.git')))
|
|
@@ -49,22 +58,22 @@ function scanForGitRepos(rootDir, maxDepth = 2) {
|
|
|
49
58
|
return repos;
|
|
50
59
|
}
|
|
51
60
|
/** Creates the repo's store when absent and registers it; returns whether it already existed. */
|
|
52
|
-
function initScannedRepo(repo, globalRoot) {
|
|
61
|
+
function initScannedRepo(repo, tenantId, globalRoot) {
|
|
53
62
|
const repoHippo = path.join(repo, '.hippo');
|
|
54
63
|
const alreadyExists = isInitialized(repoHippo);
|
|
55
64
|
if (!alreadyExists) {
|
|
56
|
-
|
|
65
|
+
initMemoryStore(cliApiContext(repoHippo, tenantId));
|
|
57
66
|
}
|
|
58
67
|
registerWorkspace(globalRoot, repo);
|
|
59
68
|
return alreadyExists;
|
|
60
69
|
}
|
|
61
70
|
/** Seeds one scanned repo from git history and its agents' notes, unless --no-learn. */
|
|
62
|
-
function learnScannedRepo(repo, seedDays, learn, machine, agentImport) {
|
|
71
|
+
function learnScannedRepo(repo, tenantId, seedDays, learn, machine, agentImport) {
|
|
63
72
|
const repoHippo = path.join(repo, '.hippo');
|
|
64
73
|
let added = 0;
|
|
65
74
|
let lowInfo = 0;
|
|
66
75
|
if (learn && isGitRepo(repo)) {
|
|
67
|
-
const result = learnFromRepo(repoHippo, repo, seedDays, path.basename(repo));
|
|
76
|
+
const result = learnFromRepo(repoHippo, tenantId, repo, seedDays, path.basename(repo));
|
|
68
77
|
added = result.added;
|
|
69
78
|
lowInfo = result.lowInfo;
|
|
70
79
|
}
|
|
@@ -93,7 +102,7 @@ function printScanSummary(repoCount, totalLessons, totalLowInfo) {
|
|
|
93
102
|
(totalLowInfo > 0 ? `, ${totalLowInfo} low-information subject(s) dropped` : '') +
|
|
94
103
|
'.');
|
|
95
104
|
}
|
|
96
|
-
function cmdInitScan(scanDir, flags) {
|
|
105
|
+
function cmdInitScan(scanDir, tenantId, flags) {
|
|
97
106
|
const resolved = path.resolve(scanDir);
|
|
98
107
|
console.log(`Scanning ${resolved} for git repositories...\n`);
|
|
99
108
|
const repos = scanForGitRepos(resolved);
|
|
@@ -104,22 +113,19 @@ function cmdInitScan(scanDir, flags) {
|
|
|
104
113
|
console.log(`Found ${repos.length} repositories:\n`);
|
|
105
114
|
const globalRoot = initGlobalFirst();
|
|
106
115
|
let totalLessons = 0;
|
|
107
|
-
// Rolled up so the cross-repo summary reports the gate too
|
|
108
|
-
// already prints its own count inside learnFromRepo, but the aggregate
|
|
109
|
-
// line showed only what was ADDED - and the point of this change is
|
|
110
|
-
// that a dropped subject is never invisible.
|
|
116
|
+
// Rolled up so the cross-repo summary reports the gate too: a dropped subject is never invisible.
|
|
111
117
|
let totalLowInfo = 0;
|
|
112
|
-
const seedDays =
|
|
118
|
+
const seedDays = numberFlag(flags, 'days') ?? 365;
|
|
113
119
|
const machine = currentMachine();
|
|
114
120
|
const agentImport = emptyReport();
|
|
115
121
|
const learn = !flags['no-learn'];
|
|
116
122
|
for (const repo of repos) {
|
|
117
|
-
const alreadyExists = initScannedRepo(repo, globalRoot);
|
|
118
|
-
const { added, lowInfo } = learnScannedRepo(repo, seedDays, learn, machine, agentImport);
|
|
123
|
+
const alreadyExists = initScannedRepo(repo, tenantId, globalRoot);
|
|
124
|
+
const { added, lowInfo } = learnScannedRepo(repo, tenantId, seedDays, learn, machine, agentImport);
|
|
119
125
|
totalLessons += added;
|
|
120
126
|
totalLowInfo += lowInfo;
|
|
121
127
|
const status = alreadyExists ? 'existing' : 'new';
|
|
122
|
-
const entries =
|
|
128
|
+
const entries = listMemories(cliApiContext(path.join(repo, '.hippo'), tenantId), { everyTenant: true });
|
|
123
129
|
console.log(` ${path.basename(repo).padEnd(25)} ${status.padEnd(10)} ${entries.length} memories${added > 0 ? ` (+${added} from git)` : ''}`);
|
|
124
130
|
}
|
|
125
131
|
printScanSummary(repos.length, totalLessons, totalLowInfo);
|
|
@@ -147,12 +153,12 @@ function initGlobalOnly(flags) {
|
|
|
147
153
|
if (!flags['no-learn'])
|
|
148
154
|
printAgentImport(importUserMemories(globalRoot, { machine: currentMachine() }));
|
|
149
155
|
}
|
|
150
|
-
function seedFromGitHistory(hippoRoot) {
|
|
156
|
+
function seedFromGitHistory(hippoRoot, tenantId) {
|
|
151
157
|
if (!isGitRepo(process.cwd()))
|
|
152
158
|
return;
|
|
153
159
|
const seedDays = 30;
|
|
154
160
|
console.log(`\n Seeding memories from last ${seedDays} days of git history...`);
|
|
155
|
-
const { added, skipped } = learnFromRepo(hippoRoot, process.cwd(), seedDays);
|
|
161
|
+
const { added, skipped } = learnFromRepo(hippoRoot, tenantId, process.cwd(), seedDays);
|
|
156
162
|
if (added > 0) {
|
|
157
163
|
console.log(` Learned ${added} lessons from git (${skipped} duplicates skipped).`);
|
|
158
164
|
}
|
|
@@ -160,11 +166,11 @@ function seedFromGitHistory(hippoRoot) {
|
|
|
160
166
|
console.log(` No matching commits found in git history.`);
|
|
161
167
|
}
|
|
162
168
|
}
|
|
163
|
-
export function
|
|
169
|
+
export function handleInit({ hippoRoot, tenantId, flags }) {
|
|
164
170
|
// Handle --scan mode
|
|
165
171
|
if (flags['scan']) {
|
|
166
172
|
const scanDir = stringFlag(flags, 'scan') ?? os.homedir();
|
|
167
|
-
cmdInitScan(scanDir, flags);
|
|
173
|
+
cmdInitScan(scanDir, tenantId, flags);
|
|
168
174
|
return;
|
|
169
175
|
}
|
|
170
176
|
if (flags['global']) {
|
|
@@ -176,7 +182,7 @@ export function cmdInit(hippoRoot, flags) {
|
|
|
176
182
|
console.log('Already initialized at', hippoRoot);
|
|
177
183
|
}
|
|
178
184
|
else {
|
|
179
|
-
|
|
185
|
+
initMemoryStore(cliApiContext(hippoRoot, tenantId));
|
|
180
186
|
console.log('Initialized Hippo at', hippoRoot);
|
|
181
187
|
console.log(' Directories: buffer/ episodic/ semantic/ conflicts/');
|
|
182
188
|
console.log(' Files: hippo.db stats.json');
|
|
@@ -193,7 +199,7 @@ export function cmdInit(hippoRoot, flags) {
|
|
|
193
199
|
const learn = !flags['no-learn'] && !skipLearnOnSharedStore(hippoRoot);
|
|
194
200
|
// Seed with git history on first init (unless --no-learn)
|
|
195
201
|
if (!alreadyExists && learn && !flags['global'])
|
|
196
|
-
seedFromGitHistory(hippoRoot);
|
|
202
|
+
seedFromGitHistory(hippoRoot, tenantId);
|
|
197
203
|
// Every run, not only the first: an agent's notes change between inits.
|
|
198
204
|
if (learn)
|
|
199
205
|
printAgentImport(importForStore(hippoRoot, { machine: currentMachine() }));
|
|
@@ -304,9 +310,7 @@ function installClaudeCodeSettingsHooks(hook) {
|
|
|
304
310
|
}
|
|
305
311
|
}
|
|
306
312
|
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.
|
|
313
|
+
// opencode uses a TS plugin, not Claude Code's JSON-hook schema (see OPENCODE_PLUGIN_SOURCE in src/hooks/opencode.ts).
|
|
310
314
|
const result = installOpencodePlugin();
|
|
311
315
|
if (result.installed) {
|
|
312
316
|
console.log(` Auto-installed hippo opencode plugin -> ${result.pluginPath}`);
|
|
@@ -328,9 +332,8 @@ function installUserLevelHooks(agents, codexHint) {
|
|
|
328
332
|
// Checked first so init never creates ~/.codex on a machine without Codex.
|
|
329
333
|
if (hook === 'codex' && isCodexPresent())
|
|
330
334
|
installCodexMemoryHooks(' ');
|
|
331
|
-
// For Claude Code, also install SessionEnd+SessionStart entries in
|
|
332
|
-
//
|
|
333
|
-
// claude-code` and `hippo setup`.
|
|
335
|
+
// For Claude Code, also install SessionEnd+SessionStart entries in settings.json, keeping `hippo init` in lockstep with
|
|
336
|
+
// `hippo hook install claude-code` and `hippo setup`.
|
|
334
337
|
if (hook === 'claude-code')
|
|
335
338
|
installClaudeCodeSettingsHooks(hook);
|
|
336
339
|
else if (hook === 'opencode')
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { type InstallResult } from '../hooks/json-hooks.js';
|
|
2
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
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
|
|
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
|
|
5
|
+
* left unchanged; true when it printed. */
|
|
5
6
|
export declare function warnClaudeSettingsUnusable(result: Pick<InstallResult, 'settingsPath' | 'invalidJson'>, indent: string, action?: 'install' | 'uninstall'): boolean;
|
|
6
7
|
export declare function setupDailySchedule(globalRoot: string): void;
|
|
7
8
|
//# sourceMappingURL=install-steps.d.ts.map
|
|
@@ -3,7 +3,8 @@ import * as path from 'path';
|
|
|
3
3
|
import { execFileSync, execSync } from 'child_process';
|
|
4
4
|
import { installJsonHooks } from '../hooks/json-hooks.js';
|
|
5
5
|
import { CODEX_TRUST_LINE } from '../hooks/shared.js';
|
|
6
|
-
import {
|
|
6
|
+
import { envSkipSchedule } from '../util/env.js';
|
|
7
|
+
import { DAILY_TASK_NAME, buildDailyRunnerCommand, hasUnsafeRunnerPathChars, buildSchtasksCreateArgs, buildWindowsTaskRun, quoteInsideWindowsArg, } from './scheduler.js';
|
|
7
8
|
/** Adds hippo's two Codex hooks and says what changed; each install ends on the trust reminder, since Codex skips an untrusted hook. */
|
|
8
9
|
export function installCodexMemoryHooks(indent) {
|
|
9
10
|
const result = installJsonHooks('codex');
|
|
@@ -20,20 +21,16 @@ export function installCodexMemoryHooks(indent) {
|
|
|
20
21
|
: `${indent}hippo's Codex memory hooks already in ${result.settingsPath}`);
|
|
21
22
|
console.log(`${indent}${CODEX_TRUST_LINE}`);
|
|
22
23
|
}
|
|
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
|
|
24
|
+
/** 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
|
|
25
|
+
* left unchanged; true when it printed. */
|
|
24
26
|
export function warnClaudeSettingsUnusable(result, indent, action = 'install') {
|
|
25
27
|
if (!result.invalidJson)
|
|
26
28
|
return false;
|
|
27
|
-
console.log(`${indent}WARNING: ${result.settingsPath} is not a JSON object hippo can merge into, so it was left unchanged;
|
|
29
|
+
console.log(`${indent}WARNING: ${result.settingsPath} is not a JSON object hippo can merge into, so it was left unchanged; ` +
|
|
30
|
+
`fix it, then run \`hippo hook ${action} claude-code\`.`);
|
|
28
31
|
return true;
|
|
29
32
|
}
|
|
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
|
-
*/
|
|
33
|
+
/** Machine-level daily runner sweeping all registered workspaces: user crontab on Linux/macOS, a scheduled task on Windows; skips if installed. */
|
|
37
34
|
/** Bound on each schtasks and crontab call, so a scheduler that never answers cannot hang `hippo init` or `hippo setup`. */
|
|
38
35
|
const SCHEDULER_CALL_TIMEOUT_MS = 30_000;
|
|
39
36
|
/** Node kills a child at its timeout and reports ETIMEDOUT; every other failure here means the scheduler refused or is missing. */
|
|
@@ -44,11 +41,13 @@ function warnSchedulerTimedOut(command) {
|
|
|
44
41
|
console.log(` ${command} did not answer within ${SCHEDULER_CALL_TIMEOUT_MS / 1000} s and was stopped, so the daily runner is not scheduled.`);
|
|
45
42
|
}
|
|
46
43
|
export function setupDailySchedule(globalRoot) {
|
|
44
|
+
// Checked here, not per caller, so init, init --scan and setup all honour it.
|
|
45
|
+
if (envSkipSchedule()) {
|
|
46
|
+
console.log(' HIPPO_SKIP_SCHEDULE=1, so the machine-level daily runner was not scheduled.');
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
47
49
|
const runnerDir = path.resolve(globalRoot);
|
|
48
|
-
|
|
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)) {
|
|
50
|
+
if (hasUnsafeRunnerPathChars(runnerDir, process.platform)) {
|
|
52
51
|
console.log(` Skipping schedule: runner path contains unsafe characters.`);
|
|
53
52
|
return;
|
|
54
53
|
}
|
package/dist/cli/last-sleep.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { type CliFlags } from './flag-values.js';
|
|
1
|
+
import { type CliFlags, type CommandContext } from './flag-values.js';
|
|
2
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. */
|
|
3
3
|
export declare function sleepProblems(logText: string, bad: number): string | null;
|
|
4
4
|
/** Prints the SessionEnd sleep log on stderr, then clears it. In a hook, stdout carries only `systemMessage`,
|
|
5
5
|
* because Claude Code shows that to the user and adds any other SessionStart stdout to the model's context. */
|
|
6
6
|
export declare function cmdLastSleep(hippoRoot: string, flags: CliFlags, out?: 'hook' | 'terminal'): void;
|
|
7
|
+
export declare function handleLastSleep({ hippoRoot, flags }: CommandContext): void;
|
|
7
8
|
//# sourceMappingURL=last-sleep.d.ts.map
|
package/dist/cli/last-sleep.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
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
3
|
import { isStringValue } from '../core/capture-contract.js';
|
|
4
|
-
import { REPLAY_AFTER_MS } from '../
|
|
4
|
+
import { REPLAY_AFTER_MS } from '../core/compaction-timing.js';
|
|
5
5
|
import { SPOOL_PROBLEM, spoolCounts } from '../capture/compaction-spool.js';
|
|
6
6
|
import { defaultSleepLogPath } from '../hooks/shared.js';
|
|
7
7
|
import { errorMessage, log } from '../util/log.js';
|
|
@@ -67,4 +67,7 @@ export function cmdLastSleep(hippoRoot, flags, out = process.stdout.isTTY ? 'ter
|
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
|
+
export function handleLastSleep({ hippoRoot, flags }) {
|
|
71
|
+
return cmdLastSleep(hippoRoot, flags);
|
|
72
|
+
}
|
|
70
73
|
//# sourceMappingURL=last-sleep.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// The id parser the predict and decide verbs share.
|
|
2
|
+
import { printError } from './output.js';
|
|
3
|
+
import { CliExit } from './exit.js';
|
|
4
|
+
// Lenient on purpose (parseInt reads "1abc" as 1) until the next major version; the other object verbs use the strict parser.
|
|
5
|
+
export function parseObjectId(idRaw, noun) {
|
|
6
|
+
const id = parseInt(String(idRaw), 10);
|
|
7
|
+
if (!Number.isFinite(id) || id <= 0) {
|
|
8
|
+
printError(`Invalid ${noun} id: "${idRaw}"`);
|
|
9
|
+
throw new CliExit(1);
|
|
10
|
+
}
|
|
11
|
+
return id;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=lenient-id.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { type EmbeddingProvider } from '../
|
|
2
|
-
import { type
|
|
3
|
-
export declare function
|
|
4
|
-
export declare function
|
|
5
|
-
export declare function
|
|
1
|
+
import { type EmbeddingProvider } from '../embeddings/provider.js';
|
|
2
|
+
import { type CommandContext } from './flag-values.js';
|
|
3
|
+
export declare function handleRefine({ hippoRoot, tenantId, flags }: CommandContext): Promise<void>;
|
|
4
|
+
export declare function handleDedup({ hippoRoot, tenantId, flags }: CommandContext): void;
|
|
5
|
+
export declare function handleEmbed({ hippoRoot, tenantId, flags }: CommandContext, given?: EmbeddingProvider): Promise<void>;
|
|
6
6
|
//# sourceMappingURL=maintenance.d.ts.map
|
package/dist/cli/maintenance.js
CHANGED
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
// Store upkeep verbs: `hippo refine`, `hippo dedup` and `hippo embed`.
|
|
2
2
|
import { envAnthropicApiKey } from '../util/env.js';
|
|
3
|
-
import { loadAllEntries } from '../store/entry-reads.js';
|
|
4
3
|
import { deduplicateStore } from '../consolidate/dedupe.js';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
4
|
+
import { resolveEmbeddingProvider } from '../embeddings/provider.js';
|
|
5
|
+
import { embedCoverage, embedMissingMemories, resetPhysicsFromVectors, storedVectorCount } from '../api/embeddings.js';
|
|
6
|
+
import { countAllMemories } from '../api/memories.js';
|
|
7
|
+
import { cliApiContext } from './api-context.js';
|
|
8
8
|
import { loadConfig } from '../core/config.js';
|
|
9
|
-
import { resolveTenantId } from '../store/tenant.js';
|
|
10
9
|
import { refineStore } from './refine-llm.js';
|
|
11
10
|
import { printError } from './output.js';
|
|
12
|
-
import { boolFlag } from './flag-values.js';
|
|
11
|
+
import { boolFlag, numberFlag } from './flag-values.js';
|
|
13
12
|
import { requireInit, resolveAuthRoot } from './shared.js';
|
|
14
13
|
import { errorMessage } from '../util/log.js';
|
|
14
|
+
import { CliExit } from './exit.js';
|
|
15
15
|
const MAX_FAILED_SHOWN = 5;
|
|
16
16
|
const MAX_PAIRS_SHOWN = 15;
|
|
17
17
|
const PAIR_PREVIEW_CHARS = 90;
|
|
18
|
-
export async function
|
|
18
|
+
export async function handleRefine({ hippoRoot, tenantId, flags }) {
|
|
19
19
|
requireInit(hippoRoot);
|
|
20
20
|
const apiKey = envAnthropicApiKey();
|
|
21
21
|
if (!apiKey) {
|
|
22
22
|
printError('hippo refine needs ANTHROPIC_API_KEY in the environment.');
|
|
23
|
-
|
|
23
|
+
throw new CliExit(1);
|
|
24
24
|
}
|
|
25
25
|
const dryRun = boolFlag(flags, 'dry-run');
|
|
26
26
|
const all = boolFlag(flags, 'all');
|
|
27
|
-
const limit = flags
|
|
27
|
+
const limit = numberFlag(flags, 'limit');
|
|
28
28
|
const model = flags['model'] ? String(flags['model']) : undefined;
|
|
29
29
|
const asJson = boolFlag(flags, 'json');
|
|
30
30
|
const result = await refineStore(hippoRoot, {
|
|
@@ -33,7 +33,7 @@ export async function cmdRefine(hippoRoot, flags) {
|
|
|
33
33
|
limit,
|
|
34
34
|
dryRun,
|
|
35
35
|
all,
|
|
36
|
-
tenantId
|
|
36
|
+
tenantId,
|
|
37
37
|
});
|
|
38
38
|
if (asJson) {
|
|
39
39
|
console.log(JSON.stringify(result, null, 2));
|
|
@@ -50,14 +50,14 @@ export async function cmdRefine(hippoRoot, flags) {
|
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
|
-
export function
|
|
53
|
+
export function handleDedup({ hippoRoot, tenantId, flags }) {
|
|
54
54
|
requireInit(hippoRoot);
|
|
55
55
|
const dryRun = boolFlag(flags, 'dry-run');
|
|
56
56
|
if (flags['threshold'] !== undefined) {
|
|
57
57
|
printError('hippo dedup: --threshold is ignored; a duplicate is the same text apart from spacing.');
|
|
58
58
|
}
|
|
59
|
-
const
|
|
60
|
-
console.log(`Scanning ${
|
|
59
|
+
const total = countAllMemories(cliApiContext(hippoRoot, tenantId));
|
|
60
|
+
console.log(`Scanning ${total} memories for duplicates (same text apart from spacing)${dryRun ? ' (dry run)' : ''}...\n`);
|
|
61
61
|
const result = deduplicateStore(hippoRoot, { dryRun });
|
|
62
62
|
if (result.removed === 0) {
|
|
63
63
|
console.log('No duplicates found.');
|
|
@@ -99,23 +99,20 @@ function printDedupPairs(result, dryRun) {
|
|
|
99
99
|
console.log(` ... and ${result.pairs.length - 15} more (run with --dry-run to see all)`);
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
|
-
// ---------------------------------------------------------------------------
|
|
103
102
|
// Embed command
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
//
|
|
107
|
-
// root, skipping the local requireInit entirely, so this is the healing
|
|
108
|
-
// path for pre-1.27.0 global stores from a directory with no local .hippo.
|
|
103
|
+
export async function handleEmbed({ hippoRoot, tenantId, flags }, given) {
|
|
104
|
+
// --global mirrors resolveAuthRoot: initGlobal() + the global root, skipping the local requireInit,
|
|
105
|
+
// so it heals pre-1.27.0 global stores from a directory with no local .hippo.
|
|
109
106
|
const root = resolveAuthRoot(hippoRoot, flags);
|
|
110
|
-
|
|
111
|
-
//
|
|
112
|
-
//
|
|
107
|
+
const ctx = cliApiContext(root, tenantId);
|
|
108
|
+
// --status and --reset-physics only read cached state, so they must work with no provider key (e.g. removed after an earlier embed);
|
|
109
|
+
// the provider-availability gate is deferred to the embed path.
|
|
113
110
|
if (flags['reset-physics']) {
|
|
114
|
-
resetPhysics(
|
|
111
|
+
resetPhysics(ctx);
|
|
115
112
|
return;
|
|
116
113
|
}
|
|
117
114
|
if (flags['status']) {
|
|
118
|
-
printEmbedStatus(
|
|
115
|
+
printEmbedStatus(ctx);
|
|
119
116
|
return;
|
|
120
117
|
}
|
|
121
118
|
const provider = readyEmbedProvider(root, given);
|
|
@@ -124,41 +121,38 @@ export async function cmdEmbed(hippoRoot, flags, given) {
|
|
|
124
121
|
console.log('Embedding all memories (this may take a moment on first run to download model)...');
|
|
125
122
|
let count;
|
|
126
123
|
try {
|
|
127
|
-
count = await
|
|
124
|
+
count = await embedMissingMemories(ctx, provider);
|
|
128
125
|
}
|
|
129
126
|
catch (err) {
|
|
130
127
|
printError(`Embedding failed: ${errorMessage(err)}`);
|
|
131
|
-
|
|
132
|
-
printError(`Partial progress saved: ${Object.keys(partial).length} embeddings on disk. Re-run \`hippo embed\` to resume.`);
|
|
128
|
+
printError(`Partial progress saved: ${storedVectorCount(ctx)} embeddings on disk. Re-run \`hippo embed\` to resume.`);
|
|
133
129
|
process.exitCode = 1;
|
|
134
130
|
return;
|
|
135
131
|
}
|
|
136
|
-
const
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
const unembedded =
|
|
132
|
+
const after = embedCoverage(ctx);
|
|
133
|
+
console.log(`Done. ${count} new embeddings created. ${after.vectorIds.length}/${after.memoryIds.length} total.`);
|
|
134
|
+
const embeddedAfter = new Set(after.vectorIds);
|
|
135
|
+
const unembedded = after.memoryIds.filter((id) => !embeddedAfter.has(id)).length;
|
|
140
136
|
if (unembedded > 0) {
|
|
141
137
|
printError(`${unembedded} memories are still not embedded (the warnings above name them). Re-run \`hippo embed\` to retry.`);
|
|
142
138
|
process.exitCode = 1;
|
|
143
139
|
}
|
|
144
140
|
}
|
|
145
|
-
function resetPhysics(
|
|
146
|
-
const
|
|
147
|
-
const embIndex = loadEmbeddingIndex(root);
|
|
148
|
-
const count = resetStoredParticles(root, entries, embIndex);
|
|
141
|
+
function resetPhysics(ctx) {
|
|
142
|
+
const count = resetPhysicsFromVectors(ctx);
|
|
149
143
|
console.log(`Reset physics state: ${count} particles re-initialized from embeddings.`);
|
|
150
144
|
}
|
|
151
|
-
function printEmbedStatus(
|
|
152
|
-
const
|
|
153
|
-
const
|
|
154
|
-
const
|
|
155
|
-
const
|
|
156
|
-
|
|
157
|
-
console.log(`Embedding status: ${activeEmbedded}/${entries.length} memories embedded`);
|
|
145
|
+
function printEmbedStatus(ctx) {
|
|
146
|
+
const { memoryIds, vectorIds } = embedCoverage(ctx);
|
|
147
|
+
const activeIds = new Set(memoryIds);
|
|
148
|
+
const activeEmbedded = vectorIds.filter((id) => activeIds.has(id)).length;
|
|
149
|
+
const orphaned = vectorIds.length - activeEmbedded;
|
|
150
|
+
console.log(`Embedding status: ${activeEmbedded}/${memoryIds.length} memories embedded`);
|
|
158
151
|
if (orphaned > 0) {
|
|
159
152
|
console.log(` ${orphaned} orphaned embeddings (run \`hippo embed\` to prune)`);
|
|
160
153
|
}
|
|
161
|
-
const
|
|
154
|
+
const embedded = new Set(vectorIds);
|
|
155
|
+
const missing = memoryIds.filter((id) => !embedded.has(id));
|
|
162
156
|
if (missing.length > 0) {
|
|
163
157
|
console.log(` ${missing.length} memories need embedding (run \`hippo embed\` to embed them)`);
|
|
164
158
|
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// The customer note verbs: one account's note, versioned by supersession.
|
|
2
|
+
import * as customerNotesModule from '../objects/customer-notes.js';
|
|
3
|
+
import { stringFlag } from './flag-values.js';
|
|
4
|
+
import { requiredText, versionedVerbs } from './versioned-verbs.js';
|
|
5
|
+
function printNoteRow(n) {
|
|
6
|
+
console.log(`#${n.id} [${n.status}] v${n.version} customer="${n.customer}" memory=${n.memoryId ?? '-'}`);
|
|
7
|
+
if (n.changeSummary)
|
|
8
|
+
console.log(` change: ${n.changeSummary}`);
|
|
9
|
+
}
|
|
10
|
+
const noteKind = (hippoRoot, tenantId) => ({
|
|
11
|
+
names: { cmd: 'note', noun: 'Customer note', idLabel: 'note' },
|
|
12
|
+
plural: 'customer notes',
|
|
13
|
+
states: customerNotesModule.VALID_NOTE_STATES,
|
|
14
|
+
usage: [
|
|
15
|
+
'Usage: hippo note new "<customer>" --text "<note>"',
|
|
16
|
+
' hippo note list [--status active|superseded|closed|all] [--customer "<id>"] [--limit N]',
|
|
17
|
+
' hippo note get <id>',
|
|
18
|
+
' hippo note supersede <id> --text "<note>" [--change "<summary>"]',
|
|
19
|
+
' hippo note close <id>',
|
|
20
|
+
],
|
|
21
|
+
supersedeUsage: 'Usage: hippo note supersede <id> --text "<note>" [--change "<summary>"]',
|
|
22
|
+
bodyRequired: '--text "<note>"',
|
|
23
|
+
body: (flags) => requiredText(flags, 'text'),
|
|
24
|
+
keyOf: (n) => n.customer,
|
|
25
|
+
save: (customer, note, extraTags, from) => customerNotesModule.saveCustomerNote(hippoRoot, tenantId, {
|
|
26
|
+
customer, note, extraTags, changeSummary: from?.changeSummary, supersedesNoteId: from?.id,
|
|
27
|
+
}),
|
|
28
|
+
recorded: (n) => `Customer note recorded: #${n.id} (v${n.version}) for customer "${n.customer}"`,
|
|
29
|
+
list: (opts, flags) => customerNotesModule.loadCustomerNotes(hippoRoot, tenantId, { ...opts, customer: stringFlag(flags, 'customer')?.trim() || undefined }),
|
|
30
|
+
loadById: (id) => customerNotesModule.loadCustomerNoteById(hippoRoot, tenantId, id),
|
|
31
|
+
close: (id) => customerNotesModule.closeCustomerNote(hippoRoot, tenantId, id),
|
|
32
|
+
printRow: printNoteRow,
|
|
33
|
+
printDetail: (n) => {
|
|
34
|
+
console.log(` customer: ${n.customer}`);
|
|
35
|
+
console.log(` status: ${n.status}`);
|
|
36
|
+
console.log(` version: ${n.version}`);
|
|
37
|
+
console.log(` note: ${n.note}`);
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
export const handleCustomerNote = versionedVerbs(noteKind);
|
|
41
|
+
//# sourceMappingURL=notes.js.map
|
package/dist/cli/object-verbs.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
// The status, list, id and not-found paths the typed-object verbs (process, policy, skill, brief, note, decide, incident, predict) share.
|
|
2
2
|
import { printError } from './output.js';
|
|
3
3
|
import { parseListLimit, parsePositiveId, stringFlag } from './flag-values.js';
|
|
4
|
+
import { CliExit } from './exit.js';
|
|
4
5
|
/** The member of `states` named by `status`, or exit 1 with the message that lists every allowed value. */
|
|
5
6
|
export function requireStatus(status, states) {
|
|
6
7
|
const found = [...states].find((s) => s === status);
|
|
7
8
|
if (found === undefined) {
|
|
8
9
|
printError(`Invalid --status: "${status}". Must be one of: ${[...states, 'all'].join(' | ')}.`);
|
|
9
|
-
|
|
10
|
+
throw new CliExit(1);
|
|
10
11
|
}
|
|
11
12
|
return found;
|
|
12
13
|
}
|
|
@@ -32,14 +33,14 @@ export function idArgOrExit(args, usage, label, parseId = parsePositiveId) {
|
|
|
32
33
|
const idRaw = args[1];
|
|
33
34
|
if (!idRaw) {
|
|
34
35
|
printError(usage);
|
|
35
|
-
|
|
36
|
+
throw new CliExit(1);
|
|
36
37
|
}
|
|
37
38
|
return parseId(idRaw, label);
|
|
38
39
|
}
|
|
39
40
|
export function foundOrExit(found, noun, id) {
|
|
40
41
|
if (!found) {
|
|
41
42
|
printError(`${noun} ${id} not found.`);
|
|
42
|
-
|
|
43
|
+
throw new CliExit(1);
|
|
43
44
|
}
|
|
44
45
|
return found;
|
|
45
46
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** The part of a child process the launch reads. */
|
|
2
|
+
interface Launched {
|
|
3
|
+
on(event: 'error', listener: (err: Error) => void): void;
|
|
4
|
+
unref(): void;
|
|
5
|
+
}
|
|
6
|
+
type Launcher = (cmd: string, args: string[], opts: {
|
|
7
|
+
detached: boolean;
|
|
8
|
+
stdio: 'ignore';
|
|
9
|
+
windowsHide: boolean;
|
|
10
|
+
}) => Launched;
|
|
11
|
+
/** `launch` is the process starter; tests hand in a stand-in. */
|
|
12
|
+
export declare function openInBrowser(out: string, launch?: Launcher): void;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=open-browser.d.ts.map
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Best-effort browser launch for CLI verbs that write a file.
|
|
2
|
+
import { spawn } from 'child_process';
|
|
3
|
+
import { errorMessage, log } from '../util/log.js';
|
|
4
|
+
/** `launch` is the process starter; tests hand in a stand-in. */
|
|
5
|
+
export function openInBrowser(out, launch = spawn) {
|
|
6
|
+
// Best-effort browser launch; never fail the command if it doesn't work.
|
|
7
|
+
try {
|
|
8
|
+
const [cmd, cmdArgs] = process.platform === 'win32'
|
|
9
|
+
? ['cmd', ['/c', 'start', '', out]]
|
|
10
|
+
: process.platform === 'darwin'
|
|
11
|
+
? ['open', [out]]
|
|
12
|
+
: ['xdg-open', [out]];
|
|
13
|
+
const child = launch(cmd, cmdArgs, { detached: true, stdio: 'ignore', windowsHide: true });
|
|
14
|
+
// A missing launcher (e.g. xdg-open absent) emits 'error' asynchronously; unhandled, it would throw.
|
|
15
|
+
child.on('error', (err) => {
|
|
16
|
+
log.warn(`graph view: could not open the browser: ${errorMessage(err)}`);
|
|
17
|
+
process.exitCode = 1;
|
|
18
|
+
});
|
|
19
|
+
child.unref();
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
// The file is written and its path printed above, so a browser that will not start costs nothing.
|
|
23
|
+
log.debug(`browser not opened: ${errorMessage(err)}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=open-browser.js.map
|
|
@@ -1,14 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Documented MEMORY_ENVELOPE.md contract: owner = `user:<id>` | `agent:<id>`
|
|
5
|
-
* with id ∈ `[A-Za-z0-9_-]+`.
|
|
6
|
-
*
|
|
7
|
-
* Default: WARN-ONLY (log + accept) to preserve back-compat with existing
|
|
8
|
-
* scripted callers passing legacy owner strings. Set `HIPPO_STRICT_OWNER=1`
|
|
9
|
-
* to reject + exit. Strict mode will become the default once real auth replaces
|
|
10
|
-
* the stub (see `TODOS.md` for the migration path).
|
|
11
|
-
*/
|
|
1
|
+
/** --owner validation per MEMORY_ENVELOPE.md: `user:<id>` | `agent:<id>`, id in `[A-Za-z0-9_-]+`.
|
|
2
|
+
* Warn-only by default for legacy scripted callers; `HIPPO_STRICT_OWNER=1` rejects and exits. */
|
|
12
3
|
export declare const OWNER_CONTRACT_HINT = "Must match ^(user|agent):[A-Za-z0-9_-]+$ (e.g. user:alice, agent:capture-bot).";
|
|
13
4
|
export interface OwnerValidation {
|
|
14
5
|
ok: boolean;
|
|
@@ -17,25 +8,11 @@ export interface OwnerValidation {
|
|
|
17
8
|
/** Human-readable message (warn or error). Empty when ok = true. */
|
|
18
9
|
message: string;
|
|
19
10
|
}
|
|
20
|
-
/**
|
|
21
|
-
*
|
|
22
|
-
* `process.exit`. The CLI wrapper below handles side effects so this is
|
|
23
|
-
* unit-testable.
|
|
24
|
-
*
|
|
25
|
-
* Behaviour:
|
|
26
|
-
* - owner undefined → ok=true, value=undefined, no message.
|
|
27
|
-
* - owner matches OWNER_RE → ok=true, value=owner.
|
|
28
|
-
* - owner doesn't match + strict=false → ok=true, value=owner (accept),
|
|
29
|
-
* message contains the warning text.
|
|
30
|
-
* - owner doesn't match + strict=true → ok=false, value=owner (echoed),
|
|
31
|
-
* message contains the error text.
|
|
32
|
-
*/
|
|
11
|
+
/** Pure validator returning `{ ok, value, message }`; never prints or exits, so it is unit-testable.
|
|
12
|
+
* A non-matching owner is accepted with a warning unless strict, where ok=false with an error message. */
|
|
33
13
|
export declare function validateOwner(owner: string | null | undefined, opts?: {
|
|
34
14
|
strict?: boolean;
|
|
35
15
|
}): OwnerValidation;
|
|
36
|
-
/**
|
|
37
|
-
* Returns true when strict-owner enforcement is enabled via env var.
|
|
38
|
-
* Centralised here so any future bump to default-strict is one edit.
|
|
39
|
-
*/
|
|
16
|
+
/** True when strict-owner enforcement is enabled via env var. */
|
|
40
17
|
export declare function isStrictOwnerEnv(env?: NodeJS.ProcessEnv): boolean;
|
|
41
18
|
//# sourceMappingURL=owner-validation.d.ts.map
|