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.js
CHANGED
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
* hippo decide "<decision>" [--context "<why>"] [--supersedes <id>]
|
|
34
34
|
* hippo wm <push|read|clear|flush>
|
|
35
35
|
*/
|
|
36
|
-
import { envSkipAutoIntegrations } from './env.js';
|
|
36
|
+
import { envSkipAutoIntegrations } from './util/env.js';
|
|
37
37
|
import * as path from 'path';
|
|
38
38
|
import * as fs from 'fs';
|
|
39
39
|
import { fileURLToPath } from 'node:url';
|
|
@@ -41,41 +41,14 @@ import { repairCodexWrapperIfInstalled } from './hooks/codex-wrapper.js';
|
|
|
41
41
|
import { getHippoRoot } from './store/open.js';
|
|
42
42
|
import { cmdGithub, printGithubBackfillUsage } from './connectors/github/cli-impl.js';
|
|
43
43
|
import { printError } from './cli/output.js';
|
|
44
|
+
import { errorFields, errorMessage, isLevelEnabled, log } from './util/log.js';
|
|
44
45
|
import { isStoreBusy, STORE_BUSY_MESSAGE } from './db/busy.js';
|
|
46
|
+
import { boolFlag, flagIsTrue } from './cli/flag-values.js';
|
|
45
47
|
import { VERB_USAGE, USAGE_HEADER, USAGE_EXAMPLES, printAuditPruneUsage, printSlackBackfillUsage, printSlackWorkspacesUsage } from './cli/usage.js';
|
|
48
|
+
import { VERB_FLAGS, flagKind, isKnownFlag, undeclaredFlags } from './cli/flags.js';
|
|
46
49
|
// ---------------------------------------------------------------------------
|
|
47
50
|
// Helpers
|
|
48
51
|
// ---------------------------------------------------------------------------
|
|
49
|
-
// Every switch the CLI reads. A value on one reads as on under Boolean() (`--fix=false` would fix)
|
|
50
|
-
// and as off under === true (`--pin=true` would not pin), so parseArgs and main() refuse one.
|
|
51
|
-
// tests/cli-parse-flag-equals.test.ts fails when a switch read is missing from this set.
|
|
52
|
-
export const BOOLEAN_FLAGS = new Set([
|
|
53
|
-
'agents', 'all', 'all-tenants', 'apply', 'archive', 'auto', 'bad', 'bootstrap', 'classic', 'churn', 'continuity',
|
|
54
|
-
'cross-project', 'dry-run', 'equal-sources', 'error', 'evc-adaptive', 'extract',
|
|
55
|
-
'filter-conflicts', 'fix', 'force', 'forget', 'git', 'global', 'good', 'graph-stream',
|
|
56
|
-
'help', 'include-logs', 'include-superseded', 'inferred', 'json', 'last-session', 'multihop', 'no-hooks',
|
|
57
|
-
'no-learn', 'no-mmr', 'no-propagate', 'no-schedule', 'no-share', 'no-summarize-older',
|
|
58
|
-
'observed', 'open', 'physics', 'pin', 'pinned-only', 'reject-loser', 'rerank-utility',
|
|
59
|
-
'reset-physics', 'save-baseline', 'show-cases', 'stats', 'stdin',
|
|
60
|
-
'strict', 'suite', 'turn', 'value-aware', 'verified', 'version', 'why',
|
|
61
|
-
]);
|
|
62
|
-
// Every flag some command reads. Anything else is a typo that no command would act on.
|
|
63
|
-
export const KNOWN_FLAGS = new Set([
|
|
64
|
-
...BOOLEAN_FLAGS,
|
|
65
|
-
'actual', 'artifact', 'artifact-ref', 'as-of', 'author', 'baseline', 'body', 'budget', 'card-id',
|
|
66
|
-
'change', 'channel', 'chatgpt', 'class', 'claude', 'codex-home', 'compare', 'constraint', 'content',
|
|
67
|
-
'context', 'contract', 'cursor', 'customer', 'days', 'depends-on', 'depth', 'description',
|
|
68
|
-
'embedding-weight', 'entity', 'estimate', 'file', 'format', 'framing', 'fresh-tail', 'from', 'goal',
|
|
69
|
-
'graph-hops', 'graph-seeds', 'history-path', 'hops', 'host', 'id', 'importance', 'include-recent',
|
|
70
|
-
'instructions', 'keep', 'kind', 'label', 'layer', 'level', 'limit', 'link', 'local-bump', 'log-file',
|
|
71
|
-
'markdown', 'max', 'max-cases', 'max-neighbors', 'min-mrr', 'min-results', 'min-score', 'mmr-lambda',
|
|
72
|
-
'model', 'name', 'next', 'next-step', 'note', 'older-than', 'op', 'out', 'outcome', 'owner', 'parent',
|
|
73
|
-
'path', 'policy', 'port', 'reason', 'repo', 'repos', 'reranker', 'reranker-top-k', 'resolution',
|
|
74
|
-
'role', 'run', 'runtime', 'salience-threshold', 'scan', 'scope', 'session', 'session-id', 'since',
|
|
75
|
-
'source', 'start-offset', 'started-at', 'state', 'status', 'step', 'steps', 'success', 'summary',
|
|
76
|
-
'supersedes', 'tag', 'target', 'target-runtime', 'task', 'team', 'tenant', 'tenant-id', 'tests',
|
|
77
|
-
'text', 'threshold', 'title', 'to', 'transcript', 'trigger', 'type', 'unit', 'value', 'vault',
|
|
78
|
-
]);
|
|
79
52
|
// Commands that delete or hide memories: an unknown flag here stops the run instead of being ignored.
|
|
80
53
|
const DESTRUCTIVE_COMMANDS = new Set([
|
|
81
54
|
'audit', 'dedup', 'forget', 'invalidate', 'projects', 'reject', 'resolve', 'sleep', 'supersede',
|
|
@@ -88,17 +61,13 @@ const DRY_RUN_COMMANDS = new Set([
|
|
|
88
61
|
function dryRunRefusal(command, args, flags) {
|
|
89
62
|
const isBrief = command === 'brief' || command === 'project-brief';
|
|
90
63
|
const onlyForm = command === 'share' ? 'share --auto' : isBrief ? `${command} refresh` : null;
|
|
91
|
-
const honoured = command === 'share' ? args[0] === '--auto' ||
|
|
64
|
+
const honoured = command === 'share' ? args[0] === '--auto' || boolFlag(flags, 'auto')
|
|
92
65
|
: isBrief ? args[0] === 'refresh' : DRY_RUN_COMMANDS.has(command);
|
|
93
66
|
if (honoured)
|
|
94
67
|
return null;
|
|
95
68
|
const where = onlyForm ? ` outside \`hippo ${onlyForm}\`` : '';
|
|
96
69
|
return `hippo ${command} has no --dry-run${where}, so it would run for real. Nothing was changed.`;
|
|
97
70
|
}
|
|
98
|
-
// Shared by both the separated and glued (`=`) forms so the list can't drift.
|
|
99
|
-
function isRepeatableFlag(key) {
|
|
100
|
-
return key === 'tag' || key === 'artifact' || key === 'link' || key === 'step' || key === 'constraint' || key === 'depends-on';
|
|
101
|
-
}
|
|
102
71
|
function pushRepeatableFlag(flags, key, value) {
|
|
103
72
|
if (Array.isArray(flags[key])) {
|
|
104
73
|
// SAFETY: Array.isArray just confirmed flags[key] is an array; the union has no other array member.
|
|
@@ -108,10 +77,43 @@ function pushRepeatableFlag(flags, key, value) {
|
|
|
108
77
|
flags[key] = [value];
|
|
109
78
|
}
|
|
110
79
|
}
|
|
80
|
+
function setGluedFlag(flags, key, value, kind) {
|
|
81
|
+
// Glued form has no following token to swallow, so a switch gets its
|
|
82
|
+
// own branch here instead of the swallow-avoidance short-circuit in setSeparatedFlag.
|
|
83
|
+
if (kind === 'switch') {
|
|
84
|
+
flags[key] = value;
|
|
85
|
+
}
|
|
86
|
+
else if (kind === 'list') {
|
|
87
|
+
if (value !== '')
|
|
88
|
+
pushRepeatableFlag(flags, key, value);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
flags[key] = value === '' ? true : value;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/** Returns how many tokens the flag consumed: its own, plus `next` when that is its value. */
|
|
95
|
+
function setSeparatedFlag(flags, key, next, kind) {
|
|
96
|
+
if (kind === 'switch' && (next === 'true' || next === 'false')) {
|
|
97
|
+
// Kept as a value so main() rejects it, instead of `--pin true` pinning the text "... true".
|
|
98
|
+
flags[key] = next;
|
|
99
|
+
return 2;
|
|
100
|
+
}
|
|
101
|
+
if (!next || next.startsWith('--') || kind === 'switch') {
|
|
102
|
+
// Boolean flag
|
|
103
|
+
flags[key] = true;
|
|
104
|
+
return 1;
|
|
105
|
+
}
|
|
106
|
+
if (kind === 'list')
|
|
107
|
+
pushRepeatableFlag(flags, key, next);
|
|
108
|
+
else
|
|
109
|
+
flags[key] = next;
|
|
110
|
+
return 2;
|
|
111
|
+
}
|
|
111
112
|
export function parseArgs(argv) {
|
|
112
113
|
const [, , command = '', ...rest] = argv;
|
|
113
114
|
const args = [];
|
|
114
115
|
const flags = {};
|
|
116
|
+
const declared = COMMAND_INDEX.get(command)?.flags;
|
|
115
117
|
let i = 0;
|
|
116
118
|
while (i < rest.length) {
|
|
117
119
|
const part = rest[i];
|
|
@@ -121,43 +123,13 @@ export function parseArgs(argv) {
|
|
|
121
123
|
}
|
|
122
124
|
if (part.startsWith('--')) {
|
|
123
125
|
const eqIdx = part.indexOf('=');
|
|
126
|
+
const key = part.slice(2, eqIdx > 2 ? eqIdx : undefined);
|
|
124
127
|
if (eqIdx > 2) {
|
|
125
|
-
|
|
126
|
-
// own branch here instead of the swallow-avoidance short-circuit below.
|
|
127
|
-
const key = part.slice(2, eqIdx);
|
|
128
|
-
const value = part.slice(eqIdx + 1);
|
|
129
|
-
if (BOOLEAN_FLAGS.has(key)) {
|
|
130
|
-
flags[key] = value;
|
|
131
|
-
}
|
|
132
|
-
else if (isRepeatableFlag(key)) {
|
|
133
|
-
if (value !== '')
|
|
134
|
-
pushRepeatableFlag(flags, key, value);
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
flags[key] = value === '' ? true : value;
|
|
138
|
-
}
|
|
139
|
-
i++;
|
|
140
|
-
continue;
|
|
141
|
-
}
|
|
142
|
-
const key = part.slice(2);
|
|
143
|
-
const next = rest[i + 1];
|
|
144
|
-
if (BOOLEAN_FLAGS.has(key) && (next === 'true' || next === 'false')) {
|
|
145
|
-
// Kept as a value so main() rejects it, instead of `--pin true` pinning the text "... true".
|
|
146
|
-
flags[key] = next;
|
|
147
|
-
i += 2;
|
|
148
|
-
}
|
|
149
|
-
else if (!next || next.startsWith('--') || BOOLEAN_FLAGS.has(key)) {
|
|
150
|
-
// Boolean flag
|
|
151
|
-
flags[key] = true;
|
|
128
|
+
setGluedFlag(flags, key, part.slice(eqIdx + 1), flagKind(declared, key));
|
|
152
129
|
i++;
|
|
153
130
|
}
|
|
154
|
-
else if (isRepeatableFlag(key)) {
|
|
155
|
-
pushRepeatableFlag(flags, key, next);
|
|
156
|
-
i += 2;
|
|
157
|
-
}
|
|
158
131
|
else {
|
|
159
|
-
flags[
|
|
160
|
-
i += 2;
|
|
132
|
+
i += setSeparatedFlag(flags, key, rest[i + 1], flagKind(declared, key));
|
|
161
133
|
}
|
|
162
134
|
}
|
|
163
135
|
else if (part === '-h') {
|
|
@@ -178,7 +150,7 @@ export function shouldAutoRepairCodexWrapper(currentCommand, flags) {
|
|
|
178
150
|
if (!['context', 'remember', 'recall', 'sleep', 'capture', 'outcome', 'status', 'init'].includes(currentCommand)) {
|
|
179
151
|
return false;
|
|
180
152
|
}
|
|
181
|
-
if (currentCommand === 'init' && flags
|
|
153
|
+
if (currentCommand === 'init' && flagIsTrue(flags, 'no-hooks'))
|
|
182
154
|
return false;
|
|
183
155
|
return true;
|
|
184
156
|
}
|
|
@@ -193,8 +165,8 @@ function maybeRepairCodexWrapper(currentCommand, flags) {
|
|
|
193
165
|
try {
|
|
194
166
|
repairCodexWrapperIfInstalled();
|
|
195
167
|
}
|
|
196
|
-
catch {
|
|
197
|
-
|
|
168
|
+
catch (err) {
|
|
169
|
+
log.debug(`codex wrapper not repaired: ${errorMessage(err)}`);
|
|
198
170
|
}
|
|
199
171
|
}
|
|
200
172
|
/** Every verb main() dispatches, keyed by name, with its handler, aliases and help blocks. */
|
|
@@ -202,332 +174,410 @@ export const COMMANDS = {
|
|
|
202
174
|
init: {
|
|
203
175
|
run: async ({ hippoRoot, flags }) => { (await import('./cli/init.js')).cmdInit(hippoRoot, flags); },
|
|
204
176
|
usage: VERB_USAGE.init,
|
|
177
|
+
flags: VERB_FLAGS.init,
|
|
205
178
|
},
|
|
206
179
|
remember: {
|
|
207
180
|
run: async (c) => { await (await import('./cli/remember.js')).handleRemember(c); },
|
|
208
181
|
usage: VERB_USAGE.remember,
|
|
182
|
+
flags: VERB_FLAGS.remember,
|
|
209
183
|
},
|
|
210
184
|
recall: {
|
|
211
185
|
run: async (c) => { await (await import('./cli/recall.js')).handleRecall(c); },
|
|
212
186
|
scoped: true,
|
|
213
187
|
usage: VERB_USAGE.recall,
|
|
188
|
+
flags: VERB_FLAGS.recall,
|
|
214
189
|
},
|
|
215
190
|
drill: {
|
|
216
191
|
run: async (c) => { await (await import('./cli/dag.js')).handleDrill(c); },
|
|
217
192
|
scoped: true,
|
|
218
193
|
usage: VERB_USAGE.drill,
|
|
194
|
+
flags: VERB_FLAGS.drill,
|
|
219
195
|
},
|
|
220
196
|
assemble: {
|
|
221
197
|
run: async (c) => { await (await import('./cli/dag.js')).handleAssemble(c); },
|
|
222
198
|
scoped: true,
|
|
223
199
|
usage: VERB_USAGE.assemble,
|
|
200
|
+
flags: VERB_FLAGS.assemble,
|
|
224
201
|
},
|
|
225
202
|
supersede: {
|
|
226
203
|
run: async (c) => { await (await import('./cli/remember.js')).handleSupersede(c); },
|
|
227
204
|
usage: VERB_USAGE.supersede,
|
|
205
|
+
flags: VERB_FLAGS.supersede,
|
|
228
206
|
},
|
|
229
207
|
explain: {
|
|
230
208
|
run: async (c) => { await (await import('./cli/explain.js')).handleExplain(c); },
|
|
231
209
|
scoped: true,
|
|
232
210
|
usage: VERB_USAGE.explain,
|
|
211
|
+
flags: VERB_FLAGS.explain,
|
|
233
212
|
},
|
|
234
213
|
eval: {
|
|
235
214
|
run: async (c) => { await (await import('./cli/eval.js')).handleEval(c); },
|
|
236
215
|
usage: VERB_USAGE.eval,
|
|
216
|
+
flags: VERB_FLAGS.eval,
|
|
237
217
|
},
|
|
238
218
|
trace: {
|
|
239
219
|
run: async (c) => { await (await import('./cli/remember.js')).handleTrace(c); },
|
|
240
220
|
usage: VERB_USAGE.trace,
|
|
221
|
+
flags: VERB_FLAGS.trace,
|
|
241
222
|
},
|
|
242
223
|
refine: {
|
|
243
224
|
run: async ({ hippoRoot, flags }) => { await (await import('./cli/maintenance.js')).cmdRefine(hippoRoot, flags); },
|
|
244
225
|
usage: VERB_USAGE.refine,
|
|
226
|
+
flags: VERB_FLAGS.refine,
|
|
245
227
|
},
|
|
246
228
|
sleep: {
|
|
247
229
|
run: async ({ hippoRoot, flags }) => { await (await import('./cli/sleep.js')).cmdSleep(hippoRoot, flags); },
|
|
248
230
|
scoped: true,
|
|
249
231
|
usage: VERB_USAGE.sleep,
|
|
232
|
+
flags: VERB_FLAGS.sleep,
|
|
250
233
|
},
|
|
251
234
|
'last-sleep': {
|
|
252
235
|
run: async ({ hippoRoot, flags }) => { (await import('./cli/last-sleep.js')).cmdLastSleep(hippoRoot, flags); },
|
|
253
236
|
usage: VERB_USAGE['last-sleep'],
|
|
237
|
+
flags: VERB_FLAGS['last-sleep'],
|
|
254
238
|
},
|
|
255
239
|
'session-end': {
|
|
256
240
|
run: async ({ hippoRoot, flags }) => { await (await import('./cli/session-hooks.js')).cmdSessionEnd(hippoRoot, flags); },
|
|
257
241
|
usage: VERB_USAGE['session-end'],
|
|
242
|
+
flags: VERB_FLAGS['session-end'],
|
|
258
243
|
},
|
|
259
244
|
'__session-end-worker': {
|
|
260
245
|
run: async ({ hippoRoot, flags }) => { await (await import('./cli/session-hooks.js')).cmdSessionEndWorker(hippoRoot, flags); },
|
|
261
246
|
usage: [],
|
|
247
|
+
flags: VERB_FLAGS['__session-end-worker'],
|
|
262
248
|
},
|
|
263
249
|
'pre-compact': {
|
|
264
250
|
run: async (c) => { await (await import('./cli/session-hooks.js')).handlePreCompact(c); },
|
|
265
251
|
usage: VERB_USAGE['pre-compact'],
|
|
252
|
+
flags: VERB_FLAGS['pre-compact'],
|
|
266
253
|
},
|
|
267
254
|
'post-compact': {
|
|
268
255
|
run: async (c) => { await (await import('./cli/session-hooks.js')).handlePostCompact(c); },
|
|
269
256
|
usage: VERB_USAGE['post-compact'],
|
|
257
|
+
flags: VERB_FLAGS['post-compact'],
|
|
270
258
|
},
|
|
271
259
|
'capture-error': {
|
|
272
260
|
run: async (c) => { await (await import('./cli/session-hooks.js')).handleCaptureError(c); },
|
|
273
261
|
usage: VERB_USAGE['capture-error'],
|
|
262
|
+
flags: VERB_FLAGS['capture-error'],
|
|
274
263
|
},
|
|
275
264
|
'compact-resume': {
|
|
276
265
|
run: async (c) => { await (await import('./cli/session-hooks.js')).handleCompactResume(c); },
|
|
277
266
|
usage: VERB_USAGE['compact-resume'],
|
|
267
|
+
flags: VERB_FLAGS['compact-resume'],
|
|
278
268
|
},
|
|
279
269
|
'codex-run': {
|
|
280
270
|
run: async ({ hippoRoot, args }) => { (await import('./cli/session-hooks.js')).cmdCodexRun(hippoRoot, args); },
|
|
281
271
|
usage: VERB_USAGE['codex-run'],
|
|
272
|
+
flags: VERB_FLAGS['codex-run'],
|
|
282
273
|
},
|
|
283
274
|
'__codex-session-end-worker': {
|
|
284
275
|
run: async ({ hippoRoot, flags }) => { await (await import('./cli/session-hooks.js')).cmdCodexSessionEndWorker(hippoRoot, flags); },
|
|
285
276
|
usage: [],
|
|
277
|
+
flags: VERB_FLAGS['__codex-session-end-worker'],
|
|
286
278
|
},
|
|
287
279
|
dedup: {
|
|
288
280
|
run: async ({ hippoRoot, flags }) => { (await import('./cli/maintenance.js')).cmdDedup(hippoRoot, flags); },
|
|
289
281
|
usage: VERB_USAGE.dedup,
|
|
282
|
+
flags: VERB_FLAGS.dedup,
|
|
290
283
|
},
|
|
291
284
|
dag: {
|
|
292
285
|
run: async ({ hippoRoot, flags }) => { (await import('./cli/dag.js')).cmdDag(hippoRoot, flags); },
|
|
293
286
|
usage: VERB_USAGE.dag,
|
|
287
|
+
flags: VERB_FLAGS.dag,
|
|
294
288
|
},
|
|
295
289
|
auth: {
|
|
296
290
|
run: async ({ hippoRoot, args, flags }) => { (await import('./cli/auth.js')).cmdAuth(hippoRoot, args, flags); },
|
|
297
291
|
scoped: true,
|
|
298
292
|
usage: VERB_USAGE.auth,
|
|
293
|
+
flags: VERB_FLAGS.auth,
|
|
299
294
|
},
|
|
300
295
|
goal: {
|
|
301
296
|
run: async ({ hippoRoot, args, flags }) => { (await import('./cli/goals.js')).cmdGoal(hippoRoot, args, flags); },
|
|
302
297
|
scoped: true,
|
|
303
298
|
usage: VERB_USAGE.goal,
|
|
299
|
+
flags: VERB_FLAGS.goal,
|
|
304
300
|
},
|
|
305
301
|
slack: {
|
|
306
|
-
run: async ({ hippoRoot, args, flags }) => { (await import('./cli/slack.js')).cmdSlack(hippoRoot, args, flags); },
|
|
302
|
+
run: async ({ hippoRoot, args, flags }) => { await (await import('./cli/slack.js')).cmdSlack(hippoRoot, args, flags); },
|
|
307
303
|
usage: VERB_USAGE.slack,
|
|
304
|
+
flags: VERB_FLAGS.slack,
|
|
308
305
|
},
|
|
309
306
|
github: {
|
|
310
307
|
run: async ({ hippoRoot, args, flags }) => { await cmdGithub(hippoRoot, args, flags); },
|
|
311
308
|
usage: VERB_USAGE.github,
|
|
309
|
+
flags: VERB_FLAGS.github,
|
|
312
310
|
},
|
|
313
311
|
audit: {
|
|
314
312
|
run: async (c) => { await (await import('./cli/audit.js')).handleAudit(c); },
|
|
315
313
|
scoped: true,
|
|
316
314
|
usage: VERB_USAGE.audit,
|
|
315
|
+
flags: VERB_FLAGS.audit,
|
|
317
316
|
},
|
|
318
317
|
'correction-latency': {
|
|
319
318
|
run: async (c) => { await (await import('./cli/status.js')).handleCorrectionLatency(c); },
|
|
320
319
|
usage: VERB_USAGE['correction-latency'],
|
|
320
|
+
flags: VERB_FLAGS['correction-latency'],
|
|
321
321
|
},
|
|
322
322
|
provenance: {
|
|
323
323
|
run: async (c) => { await (await import('./cli/status.js')).handleProvenance(c); },
|
|
324
324
|
usage: VERB_USAGE.provenance,
|
|
325
|
+
flags: VERB_FLAGS.provenance,
|
|
325
326
|
},
|
|
326
327
|
status: {
|
|
327
328
|
run: async ({ hippoRoot }) => { (await import('./cli/status.js')).cmdStatus(hippoRoot); },
|
|
328
329
|
usage: VERB_USAGE.status,
|
|
330
|
+
flags: VERB_FLAGS.status,
|
|
329
331
|
},
|
|
330
332
|
outcome: {
|
|
331
333
|
run: async ({ hippoRoot, flags }) => { (await import('./cli/curate.js')).cmdOutcome(hippoRoot, flags); },
|
|
332
334
|
scoped: true,
|
|
333
335
|
usage: VERB_USAGE.outcome,
|
|
336
|
+
flags: VERB_FLAGS.outcome,
|
|
334
337
|
},
|
|
335
338
|
conflicts: {
|
|
336
339
|
run: async ({ hippoRoot, flags }) => { (await import('./cli/curate.js')).cmdConflicts(hippoRoot, flags); },
|
|
337
340
|
usage: VERB_USAGE.conflicts,
|
|
341
|
+
flags: VERB_FLAGS.conflicts,
|
|
338
342
|
},
|
|
339
343
|
resolve: {
|
|
340
344
|
run: async ({ hippoRoot, args, flags }) => { (await import('./cli/curate.js')).cmdResolve(hippoRoot, args, flags); },
|
|
341
345
|
usage: VERB_USAGE.resolve,
|
|
346
|
+
flags: VERB_FLAGS.resolve,
|
|
342
347
|
},
|
|
343
348
|
reject: {
|
|
344
349
|
run: async ({ hippoRoot, args, flags }) => { (await import('./cli/curate.js')).cmdReject(hippoRoot, args, flags); },
|
|
345
350
|
usage: VERB_USAGE.reject,
|
|
351
|
+
flags: VERB_FLAGS.reject,
|
|
346
352
|
},
|
|
347
353
|
rejections: {
|
|
348
354
|
run: async ({ hippoRoot, flags }) => { (await import('./cli/curate.js')).cmdRejections(hippoRoot, flags); },
|
|
349
355
|
usage: VERB_USAGE.rejections,
|
|
356
|
+
flags: VERB_FLAGS.rejections,
|
|
350
357
|
},
|
|
351
358
|
unreject: {
|
|
352
359
|
run: async ({ hippoRoot, args, flags }) => { (await import('./cli/curate.js')).cmdUnreject(hippoRoot, args, flags); },
|
|
353
360
|
usage: VERB_USAGE.unreject,
|
|
361
|
+
flags: VERB_FLAGS.unreject,
|
|
354
362
|
},
|
|
355
363
|
dormant: {
|
|
356
364
|
run: async ({ hippoRoot, args, flags }) => { (await import('./cli/curate.js')).cmdDormant(hippoRoot, args, flags); },
|
|
357
365
|
scoped: true,
|
|
358
366
|
usage: VERB_USAGE.dormant,
|
|
367
|
+
flags: VERB_FLAGS.dormant,
|
|
359
368
|
},
|
|
360
369
|
projects: {
|
|
361
370
|
run: async ({ hippoRoot, args, flags }) => { (await import('./cli/projects.js')).cmdProjects(hippoRoot, args, flags); },
|
|
362
371
|
usage: VERB_USAGE.projects,
|
|
372
|
+
flags: VERB_FLAGS.projects,
|
|
363
373
|
},
|
|
364
374
|
quarantine: {
|
|
365
|
-
run: async ({ hippoRoot, args, flags }) => { (await import('./cli/curate.js')).cmdQuarantine(hippoRoot, args, flags); },
|
|
375
|
+
run: async ({ hippoRoot, args, flags }) => { await (await import('./cli/curate.js')).cmdQuarantine(hippoRoot, args, flags); },
|
|
366
376
|
scoped: true,
|
|
367
377
|
usage: VERB_USAGE.quarantine,
|
|
378
|
+
flags: VERB_FLAGS.quarantine,
|
|
368
379
|
},
|
|
369
380
|
tokens: {
|
|
370
381
|
run: async ({ hippoRoot, flags }) => { (await import('./cli/status.js')).cmdTokens(hippoRoot, flags); },
|
|
371
382
|
scoped: true,
|
|
372
383
|
usage: VERB_USAGE.tokens,
|
|
384
|
+
flags: VERB_FLAGS.tokens,
|
|
373
385
|
},
|
|
374
386
|
failures: {
|
|
375
387
|
run: async ({ hippoRoot, flags }) => { (await import('./cli/status.js')).cmdFailures(hippoRoot, flags); },
|
|
376
388
|
scoped: true,
|
|
377
389
|
usage: VERB_USAGE.failures,
|
|
390
|
+
flags: VERB_FLAGS.failures,
|
|
378
391
|
},
|
|
379
392
|
doctor: {
|
|
380
393
|
run: async (c) => { await (await import('./cli/status.js')).handleDoctor(c); },
|
|
381
394
|
usage: VERB_USAGE.doctor,
|
|
395
|
+
flags: VERB_FLAGS.doctor,
|
|
382
396
|
},
|
|
383
397
|
'support-bundle': {
|
|
384
398
|
run: async (c) => { await (await import('./cli/status.js')).handleSupportBundle(c); },
|
|
385
399
|
usage: VERB_USAGE['support-bundle'],
|
|
400
|
+
flags: VERB_FLAGS['support-bundle'],
|
|
386
401
|
},
|
|
387
402
|
snapshot: {
|
|
388
403
|
run: async ({ hippoRoot, args, flags }) => { (await import('./cli/continuity.js')).cmdSnapshot(hippoRoot, args, flags); },
|
|
389
404
|
usage: VERB_USAGE.snapshot,
|
|
405
|
+
flags: VERB_FLAGS.snapshot,
|
|
390
406
|
},
|
|
391
407
|
session: {
|
|
392
408
|
run: async ({ hippoRoot, args, flags }) => { (await import('./cli/continuity.js')).cmdSession(hippoRoot, args, flags); },
|
|
393
409
|
usage: VERB_USAGE.session,
|
|
410
|
+
flags: VERB_FLAGS.session,
|
|
394
411
|
},
|
|
395
412
|
handoff: {
|
|
396
413
|
run: async ({ hippoRoot, args, flags }) => { (await import('./cli/continuity.js')).cmdHandoff(hippoRoot, args, flags); },
|
|
397
414
|
usage: VERB_USAGE.handoff,
|
|
415
|
+
flags: VERB_FLAGS.handoff,
|
|
398
416
|
},
|
|
399
417
|
card: {
|
|
400
418
|
run: async ({ hippoRoot, args, flags }) => { (await import('./cli/card.js')).cmdCard(hippoRoot, args, flags); },
|
|
401
419
|
usage: VERB_USAGE.card,
|
|
420
|
+
flags: VERB_FLAGS.card,
|
|
402
421
|
},
|
|
403
422
|
predict: {
|
|
404
423
|
run: async ({ hippoRoot, args, flags }) => { (await import('./cli/decisions.js')).cmdPredict(hippoRoot, args, flags); },
|
|
405
424
|
usage: VERB_USAGE.predict,
|
|
425
|
+
flags: VERB_FLAGS.predict,
|
|
406
426
|
},
|
|
407
427
|
current: {
|
|
408
428
|
run: async ({ hippoRoot, args, flags }) => { (await import('./cli/continuity.js')).cmdCurrent(hippoRoot, args, flags); },
|
|
409
429
|
usage: VERB_USAGE.current,
|
|
430
|
+
flags: VERB_FLAGS.current,
|
|
410
431
|
},
|
|
411
432
|
forget: {
|
|
412
433
|
run: async (c) => { await (await import('./cli/curate.js')).handleForget(c); },
|
|
413
434
|
scoped: true,
|
|
414
435
|
usage: VERB_USAGE.forget,
|
|
436
|
+
flags: VERB_FLAGS.forget,
|
|
415
437
|
},
|
|
416
438
|
inspect: {
|
|
417
439
|
run: async (c) => { await (await import('./cli/status.js')).handleInspect(c); },
|
|
418
440
|
usage: VERB_USAGE.inspect,
|
|
441
|
+
flags: VERB_FLAGS.inspect,
|
|
419
442
|
},
|
|
420
443
|
context: {
|
|
421
444
|
run: async (c) => { await (await import('./cli/context.js')).handleContext(c); },
|
|
422
445
|
usage: VERB_USAGE.context,
|
|
446
|
+
flags: VERB_FLAGS.context,
|
|
423
447
|
},
|
|
424
448
|
hook: {
|
|
425
449
|
run: async ({ args }) => { (await import('./cli/setup.js')).cmdHook(args); },
|
|
426
450
|
usage: VERB_USAGE.hook,
|
|
451
|
+
flags: VERB_FLAGS.hook,
|
|
427
452
|
},
|
|
428
453
|
setup: {
|
|
429
454
|
run: async ({ flags }) => { (await import('./cli/setup.js')).cmdSetup(flags); },
|
|
430
455
|
usage: VERB_USAGE.setup,
|
|
456
|
+
flags: VERB_FLAGS.setup,
|
|
431
457
|
},
|
|
432
458
|
'daily-runner': {
|
|
433
459
|
run: async () => { (await import('./cli/setup.js')).cmdDailyRunner(); },
|
|
434
460
|
usage: VERB_USAGE['daily-runner'],
|
|
461
|
+
flags: VERB_FLAGS['daily-runner'],
|
|
435
462
|
},
|
|
436
463
|
embed: {
|
|
437
464
|
run: async ({ hippoRoot, flags }) => { await (await import('./cli/maintenance.js')).cmdEmbed(hippoRoot, flags); },
|
|
438
465
|
usage: VERB_USAGE.embed,
|
|
466
|
+
flags: VERB_FLAGS.embed,
|
|
439
467
|
},
|
|
440
468
|
watch: {
|
|
441
469
|
run: async (c) => { await (await import('./cli/transfer.js')).handleWatch(c); },
|
|
442
470
|
usage: VERB_USAGE.watch,
|
|
471
|
+
flags: VERB_FLAGS.watch,
|
|
443
472
|
},
|
|
444
473
|
learn: {
|
|
445
474
|
run: async ({ hippoRoot, flags }) => { (await import('./cli/transfer.js')).cmdLearn(hippoRoot, flags); },
|
|
446
475
|
scoped: true,
|
|
447
476
|
usage: VERB_USAGE.learn,
|
|
477
|
+
flags: VERB_FLAGS.learn,
|
|
448
478
|
},
|
|
449
479
|
promote: {
|
|
450
480
|
run: async (c) => { await (await import('./cli/transfer.js')).handlePromote(c); },
|
|
451
481
|
scoped: true,
|
|
452
482
|
usage: VERB_USAGE.promote,
|
|
483
|
+
flags: VERB_FLAGS.promote,
|
|
453
484
|
},
|
|
454
485
|
sync: {
|
|
455
486
|
run: async ({ hippoRoot, flags }) => { (await import('./cli/transfer.js')).cmdSync(hippoRoot, flags); },
|
|
456
487
|
usage: VERB_USAGE.sync,
|
|
488
|
+
flags: VERB_FLAGS.sync,
|
|
457
489
|
},
|
|
458
490
|
share: {
|
|
459
491
|
run: async (c) => { await (await import('./cli/transfer.js')).handleShare(c); },
|
|
460
492
|
usage: VERB_USAGE.share,
|
|
493
|
+
flags: VERB_FLAGS.share,
|
|
461
494
|
},
|
|
462
495
|
peers: {
|
|
463
496
|
run: async (c) => { await (await import('./cli/transfer.js')).handlePeers(c); },
|
|
464
497
|
usage: VERB_USAGE.peers,
|
|
498
|
+
flags: VERB_FLAGS.peers,
|
|
465
499
|
},
|
|
466
500
|
import: {
|
|
467
501
|
run: async ({ hippoRoot, args, flags }) => { (await import('./cli/transfer.js')).cmdImport(hippoRoot, args, flags); },
|
|
468
502
|
usage: VERB_USAGE.import,
|
|
503
|
+
flags: VERB_FLAGS.import,
|
|
469
504
|
},
|
|
470
505
|
export: {
|
|
471
506
|
run: async (c) => { await (await import('./cli/transfer.js')).handleExport(c); },
|
|
472
507
|
usage: VERB_USAGE.export,
|
|
508
|
+
flags: VERB_FLAGS.export,
|
|
473
509
|
},
|
|
474
510
|
capture: {
|
|
475
511
|
run: async (c) => { await (await import('./cli/session-hooks.js')).handleCapture(c); },
|
|
476
512
|
usage: VERB_USAGE.capture,
|
|
513
|
+
flags: VERB_FLAGS.capture,
|
|
477
514
|
},
|
|
478
515
|
dashboard: {
|
|
479
516
|
run: async (c) => { await (await import('./cli/serve.js')).handleDashboard(c); },
|
|
480
517
|
usage: VERB_USAGE.dashboard,
|
|
518
|
+
flags: VERB_FLAGS.dashboard,
|
|
481
519
|
},
|
|
482
520
|
wm: {
|
|
483
521
|
run: async ({ hippoRoot, args, flags }) => { (await import('./cli/continuity.js')).cmdWm(hippoRoot, args, flags); },
|
|
484
522
|
usage: VERB_USAGE.wm,
|
|
523
|
+
flags: VERB_FLAGS.wm,
|
|
485
524
|
},
|
|
486
525
|
mcp: {
|
|
487
526
|
run: async () => { await (await import('./cli/serve.js')).handleMcp(); },
|
|
488
527
|
usage: VERB_USAGE.mcp,
|
|
528
|
+
flags: VERB_FLAGS.mcp,
|
|
489
529
|
},
|
|
490
530
|
serve: {
|
|
491
531
|
run: async (c) => { await (await import('./cli/serve.js')).handleServe(c); },
|
|
492
532
|
usage: VERB_USAGE.serve,
|
|
533
|
+
flags: VERB_FLAGS.serve,
|
|
493
534
|
},
|
|
494
535
|
invalidate: {
|
|
495
536
|
run: async (c) => { await (await import('./cli/curate.js')).handleInvalidate(c); },
|
|
496
537
|
usage: VERB_USAGE.invalidate,
|
|
538
|
+
flags: VERB_FLAGS.invalidate,
|
|
497
539
|
},
|
|
498
540
|
decide: {
|
|
499
541
|
run: async ({ hippoRoot, args, flags }) => { (await import('./cli/decisions.js')).cmdDecide(hippoRoot, args, flags); },
|
|
500
542
|
usage: VERB_USAGE.decide,
|
|
543
|
+
flags: VERB_FLAGS.decide,
|
|
501
544
|
},
|
|
502
545
|
incident: {
|
|
503
546
|
run: async ({ hippoRoot, args, flags }) => { (await import('./cli/decisions.js')).cmdIncident(hippoRoot, args, flags); },
|
|
504
547
|
usage: VERB_USAGE.incident,
|
|
548
|
+
flags: VERB_FLAGS.incident,
|
|
505
549
|
},
|
|
506
550
|
process: {
|
|
507
551
|
run: async ({ hippoRoot, args, flags }) => { (await import('./cli/playbooks.js')).cmdProcess(hippoRoot, args, flags); },
|
|
508
552
|
usage: VERB_USAGE.process,
|
|
553
|
+
flags: VERB_FLAGS.process,
|
|
509
554
|
},
|
|
510
555
|
policy: {
|
|
511
556
|
run: async ({ hippoRoot, args, flags }) => { (await import('./cli/playbooks.js')).cmdPolicy(hippoRoot, args, flags); },
|
|
512
557
|
usage: VERB_USAGE.policy,
|
|
558
|
+
flags: VERB_FLAGS.policy,
|
|
513
559
|
},
|
|
514
560
|
skill: {
|
|
515
561
|
run: async ({ hippoRoot, args, flags }) => { (await import('./cli/playbooks.js')).cmdSkill(hippoRoot, args, flags); },
|
|
516
562
|
usage: VERB_USAGE.skill,
|
|
563
|
+
flags: VERB_FLAGS.skill,
|
|
517
564
|
},
|
|
518
565
|
brief: {
|
|
519
566
|
run: async ({ hippoRoot, args, flags }) => { (await import('./cli/briefs.js')).cmdProjectBrief(hippoRoot, args, flags); },
|
|
520
567
|
aliases: ['project-brief'],
|
|
521
568
|
usage: VERB_USAGE.brief,
|
|
569
|
+
flags: VERB_FLAGS.brief,
|
|
522
570
|
},
|
|
523
571
|
note: {
|
|
524
572
|
run: async ({ hippoRoot, args, flags }) => { (await import('./cli/briefs.js')).cmdCustomerNote(hippoRoot, args, flags); },
|
|
525
573
|
aliases: ['customer-note'],
|
|
526
574
|
usage: VERB_USAGE.note,
|
|
575
|
+
flags: VERB_FLAGS.note,
|
|
527
576
|
},
|
|
528
577
|
graph: {
|
|
529
578
|
run: async ({ hippoRoot, args, flags }) => { (await import('./cli/briefs.js')).cmdGraph(hippoRoot, args, flags); },
|
|
530
579
|
usage: VERB_USAGE.graph,
|
|
580
|
+
flags: VERB_FLAGS.graph,
|
|
531
581
|
},
|
|
532
582
|
};
|
|
533
583
|
const COMMAND_INDEX = new Map(Object.entries(COMMANDS).flatMap(([verb, spec]) => [verb, ...(spec.aliases ?? [])].map((name) => [name, spec])));
|
|
@@ -577,70 +627,82 @@ function printHelp(command, args) {
|
|
|
577
627
|
// ---------------------------------------------------------------------------
|
|
578
628
|
// Entry point
|
|
579
629
|
// ---------------------------------------------------------------------------
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
return;
|
|
592
|
-
}
|
|
593
|
-
// Before every other step, so help never opens a store, installs a hook or starts a server.
|
|
594
|
-
if (Object.hasOwn(flags, 'help')) {
|
|
595
|
-
printHelp(command, args);
|
|
596
|
-
return;
|
|
597
|
-
}
|
|
598
|
-
maybeRepairCodexWrapper(command, flags);
|
|
599
|
-
/** A value-less --scope parses as boolean true, which consumers coerced to the scope 'true' or dropped;
|
|
600
|
-
* reject it once here so every command, thin-client relays included, sees only a non-empty string. */
|
|
630
|
+
function printVersion() {
|
|
631
|
+
const __filename_local = fileURLToPath(import.meta.url);
|
|
632
|
+
const __dirname_local = path.dirname(__filename_local);
|
|
633
|
+
const pkgJson = fs.readFileSync(path.join(__dirname_local, '..', 'package.json'), 'utf-8');
|
|
634
|
+
const { version } = JSON.parse(pkgJson);
|
|
635
|
+
console.log(version);
|
|
636
|
+
process.exit(0);
|
|
637
|
+
}
|
|
638
|
+
/** A value-less --scope parses as boolean true, which consumers coerced to the scope 'true' or dropped;
|
|
639
|
+
* reject it once here so every command, thin-client relays included, sees only a non-empty string. */
|
|
640
|
+
function rejectEmptyScope(flags) {
|
|
601
641
|
if ('scope' in flags && (typeof flags['scope'] !== 'string' || !flags['scope'].trim())) {
|
|
602
642
|
printError('--scope requires a non-empty value (e.g. --scope slack:private:C1).');
|
|
603
643
|
process.exit(1);
|
|
604
644
|
}
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
for (const key of NUMERIC_FLAGS) {
|
|
612
|
-
const raw = flags[key];
|
|
613
|
-
if (raw === undefined)
|
|
645
|
+
}
|
|
646
|
+
// parseArgs stores a value-less flag as boolean true, and NaN then survives every
|
|
647
|
+
// downstream guard because each comparison against it is false.
|
|
648
|
+
function rejectNonNumericFlags(flags, declared) {
|
|
649
|
+
for (const [key, raw] of Object.entries(flags)) {
|
|
650
|
+
if (flagKind(declared, key) !== 'number')
|
|
614
651
|
continue;
|
|
615
652
|
if (typeof raw !== 'string' || !raw.trim() || !Number.isFinite(Number(raw))) {
|
|
616
653
|
printError(`--${key} requires a numeric value.`);
|
|
617
654
|
process.exit(1);
|
|
618
655
|
}
|
|
619
656
|
}
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
657
|
+
}
|
|
658
|
+
// Reject rather than coerce: consumers read --dry-run both as Boolean() and === true,
|
|
659
|
+
// so no single coercion of an inline value would be correct for every one of them.
|
|
660
|
+
function rejectValuedSwitches(flags, declared) {
|
|
661
|
+
for (const [key, raw] of Object.entries(flags)) {
|
|
662
|
+
if (flagKind(declared, key) === 'switch' && typeof raw !== 'boolean') {
|
|
624
663
|
printError(`--${key} takes no value`);
|
|
625
664
|
process.exit(1);
|
|
626
665
|
}
|
|
627
666
|
}
|
|
667
|
+
}
|
|
668
|
+
function checkUnknownFlags(command, flags, declared) {
|
|
628
669
|
// card checks its flags per subcommand, with a stricter message.
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
printError(`hippo: ignoring unknown flag ${names}. A later release will reject it.`);
|
|
670
|
+
if (command === 'card')
|
|
671
|
+
return;
|
|
672
|
+
const flagNames = (keys) => keys.map((key) => `--${key}`).join(', ');
|
|
673
|
+
const unknown = Object.keys(flags).filter((key) => !isKnownFlag(key));
|
|
674
|
+
if (unknown.length > 0 && DESTRUCTIVE_COMMANDS.has(command)) {
|
|
675
|
+
printError(`Unknown flag ${flagNames(unknown)} for hippo ${command}. Nothing was changed.`);
|
|
676
|
+
process.exit(2);
|
|
637
677
|
}
|
|
678
|
+
// main() refuses --dry-run by name on a verb without one, so that flag is not also called ignored.
|
|
679
|
+
const ignored = declared ? undeclaredFlags(declared, Object.keys(flags)).filter((key) => key !== 'dry-run') : unknown;
|
|
680
|
+
if (ignored.length > 0)
|
|
681
|
+
printError(`hippo: ignoring unknown flag ${flagNames(ignored)}. A later release will reject it.`);
|
|
682
|
+
}
|
|
683
|
+
async function main(command, args, flags, hippoRoot) {
|
|
684
|
+
if (command === '--version' || command === '-v' || flags['version'])
|
|
685
|
+
printVersion();
|
|
686
|
+
if (command === '' || command === 'help' || command === '--help' || command === '-h') {
|
|
687
|
+
printUsage();
|
|
688
|
+
return;
|
|
689
|
+
}
|
|
690
|
+
// Before every other step, so help never opens a store, installs a hook or starts a server.
|
|
691
|
+
if (Object.hasOwn(flags, 'help')) {
|
|
692
|
+
printHelp(command, args);
|
|
693
|
+
return;
|
|
694
|
+
}
|
|
695
|
+
const spec = COMMAND_INDEX.get(command);
|
|
696
|
+
maybeRepairCodexWrapper(command, flags);
|
|
697
|
+
rejectEmptyScope(flags);
|
|
698
|
+
rejectNonNumericFlags(flags, spec?.flags);
|
|
699
|
+
rejectValuedSwitches(flags, spec?.flags);
|
|
700
|
+
checkUnknownFlags(command, flags, spec?.flags);
|
|
638
701
|
const refusal = Object.hasOwn(flags, 'dry-run') ? dryRunRefusal(command, args, flags) : null;
|
|
639
702
|
if (refusal) {
|
|
640
703
|
printError(refusal);
|
|
641
704
|
process.exit(2);
|
|
642
705
|
}
|
|
643
|
-
const spec = COMMAND_INDEX.get(command);
|
|
644
706
|
if (!spec) {
|
|
645
707
|
printError(`Unknown command: ${command}`);
|
|
646
708
|
printUsage();
|
|
@@ -656,6 +718,11 @@ export async function runCli(argv = process.argv) {
|
|
|
656
718
|
}
|
|
657
719
|
catch (err) {
|
|
658
720
|
printError('Error:', isStoreBusy(err) ? STORE_BUSY_MESSAGE : err instanceof Error ? err.message : err);
|
|
721
|
+
// The message alone rarely says where it came from; debug is the level that asks for the rest.
|
|
722
|
+
if (isLevelEnabled('debug')) {
|
|
723
|
+
const { errorClass, stack } = errorFields(err);
|
|
724
|
+
printError(` thrown as ${errorClass}${stack ? `\n${stack}` : ''}`);
|
|
725
|
+
}
|
|
659
726
|
process.exit(1);
|
|
660
727
|
}
|
|
661
728
|
}
|