peaks-loop 4.1.2 → 4.1.3
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/.claude-plugin/marketplace.json +136 -47
- package/CHANGELOG.md +56 -0
- package/README-en.md +1 -1
- package/README.md +1 -1
- package/contracts/readonly-argv-whitelist.json +211 -0
- package/dist/cli/commands/audit-artifact-runners.d.ts +16 -0
- package/dist/cli/commands/audit-artifact-runners.js +170 -0
- package/dist/cli/commands/audit-command-shared.d.ts +97 -0
- package/dist/cli/commands/audit-command-shared.js +60 -0
- package/dist/cli/commands/audit-commands.d.ts +7 -31
- package/dist/cli/commands/audit-commands.js +64 -473
- package/dist/cli/commands/audit-goal-runners.d.ts +17 -0
- package/dist/cli/commands/audit-goal-runners.js +114 -0
- package/dist/cli/commands/audit-red-lines-runners.d.ts +11 -0
- package/dist/cli/commands/audit-red-lines-runners.js +43 -0
- package/dist/cli/commands/audit-refusal-data.d.ts +23 -0
- package/dist/cli/commands/audit-refusal-data.js +69 -0
- package/dist/cli/commands/audit-static-runners.d.ts +13 -0
- package/dist/cli/commands/audit-static-runners.js +139 -0
- package/dist/cli/commands/await-runners.d.ts +11 -0
- package/dist/cli/commands/await-runners.js +148 -0
- package/dist/cli/commands/code-auto-compact-command.d.ts +3 -0
- package/dist/cli/commands/code-auto-compact-command.js +124 -0
- package/dist/cli/commands/code-auto-compact-envelope.d.ts +22 -0
- package/dist/cli/commands/code-auto-compact-envelope.js +39 -0
- package/dist/cli/commands/code-context-audit-command.d.ts +3 -0
- package/dist/cli/commands/code-context-audit-command.js +68 -0
- package/dist/cli/commands/code-context-now-command.d.ts +3 -0
- package/dist/cli/commands/code-context-now-command.js +124 -0
- package/dist/cli/commands/code-context-now-envelope.d.ts +66 -0
- package/dist/cli/commands/code-context-now-envelope.js +136 -0
- package/dist/cli/commands/code-context-now-mapping.d.ts +27 -0
- package/dist/cli/commands/code-context-now-mapping.js +43 -0
- package/dist/cli/commands/code-emit-handoff-command.d.ts +3 -0
- package/dist/cli/commands/code-emit-handoff-command.js +99 -0
- package/dist/cli/commands/code-gate-step-08-command.d.ts +3 -0
- package/dist/cli/commands/code-gate-step-08-command.js +139 -0
- package/dist/cli/commands/code-post-compact-detect-command.d.ts +3 -0
- package/dist/cli/commands/code-post-compact-detect-command.js +50 -0
- package/dist/cli/commands/code-runtime-commands.d.ts +9 -43
- package/dist/cli/commands/code-runtime-commands.js +20 -672
- package/dist/cli/commands/code-runtime-session.d.ts +1 -0
- package/dist/cli/commands/code-runtime-session.js +15 -0
- package/dist/cli/commands/compact-command.d.ts +6 -2
- package/dist/cli/commands/compact-command.js +12 -559
- package/dist/cli/commands/compact-dry-run-command.d.ts +3 -0
- package/dist/cli/commands/compact-dry-run-command.js +87 -0
- package/dist/cli/commands/compact-force-command.d.ts +3 -0
- package/dist/cli/commands/compact-force-command.js +98 -0
- package/dist/cli/commands/compact-harness-window-command.d.ts +3 -0
- package/dist/cli/commands/compact-harness-window-command.js +174 -0
- package/dist/cli/commands/compact-history-command.d.ts +3 -0
- package/dist/cli/commands/compact-history-command.js +89 -0
- package/dist/cli/commands/compact-read-commands.d.ts +3 -0
- package/dist/cli/commands/compact-read-commands.js +123 -0
- package/dist/cli/commands/compact-settle-command.d.ts +3 -0
- package/dist/cli/commands/compact-settle-command.js +130 -0
- package/dist/cli/commands/compact-shared.d.ts +9 -0
- package/dist/cli/commands/compact-shared.js +26 -0
- package/dist/cli/commands/core/skill-command.d.ts +1 -44
- package/dist/cli/commands/core/skill-command.js +13 -541
- package/dist/cli/commands/core/skill-context-verdict.d.ts +38 -0
- package/dist/cli/commands/core/skill-context-verdict.js +63 -0
- package/dist/cli/commands/core/skill-generated-config-notice.d.ts +41 -0
- package/dist/cli/commands/core/skill-generated-config-notice.js +75 -0
- package/dist/cli/commands/core/skill-heartbeat-commands.d.ts +3 -0
- package/dist/cli/commands/core/skill-heartbeat-commands.js +50 -0
- package/dist/cli/commands/core/skill-presence-commands.d.ts +3 -0
- package/dist/cli/commands/core/skill-presence-commands.js +123 -0
- package/dist/cli/commands/core/skill-presence-housekeeping-commands.d.ts +3 -0
- package/dist/cli/commands/core/skill-presence-housekeeping-commands.js +165 -0
- package/dist/cli/commands/core/skill-registry-commands.d.ts +3 -0
- package/dist/cli/commands/core/skill-registry-commands.js +117 -0
- package/dist/cli/commands/core/skill-runbook-command.d.ts +3 -0
- package/dist/cli/commands/core/skill-runbook-command.js +29 -0
- package/dist/cli/commands/dispatch-command-spec.d.ts +2 -0
- package/dist/cli/commands/dispatch-command-spec.js +62 -0
- package/dist/cli/commands/dispatch-commands.js +159 -775
- package/dist/cli/commands/dispatch-detached-branch.d.ts +3 -0
- package/dist/cli/commands/dispatch-detached-branch.js +58 -0
- package/dist/cli/commands/dispatch-envelope.d.ts +36 -0
- package/dist/cli/commands/dispatch-envelope.js +104 -0
- package/dist/cli/commands/dispatch-isolation-lease.d.ts +17 -0
- package/dist/cli/commands/dispatch-isolation-lease.js +149 -0
- package/dist/cli/commands/dispatch-preflight.d.ts +7 -0
- package/dist/cli/commands/dispatch-preflight.js +105 -0
- package/dist/cli/commands/dispatch-prompt-blocks.d.ts +10 -0
- package/dist/cli/commands/dispatch-prompt-blocks.js +56 -0
- package/dist/cli/commands/dispatch-prompt-composition.d.ts +30 -0
- package/dist/cli/commands/dispatch-prompt-composition.js +171 -0
- package/dist/cli/commands/dispatch-record-write.d.ts +24 -0
- package/dist/cli/commands/dispatch-record-write.js +96 -0
- package/dist/cli/commands/dispatch-tool-call.d.ts +15 -0
- package/dist/cli/commands/dispatch-tool-call.js +128 -0
- package/dist/cli/commands/evolution-command-shared.d.ts +78 -0
- package/dist/cli/commands/evolution-command-shared.js +107 -0
- package/dist/cli/commands/evolution-commands.d.ts +11 -1
- package/dist/cli/commands/evolution-commands.js +19 -350
- package/dist/cli/commands/evolution-evaluate-command.d.ts +24 -0
- package/dist/cli/commands/evolution-evaluate-command.js +138 -0
- package/dist/cli/commands/evolution-propose-command.d.ts +23 -0
- package/dist/cli/commands/evolution-propose-command.js +145 -0
- package/dist/cli/commands/evolution-status-command.d.ts +17 -0
- package/dist/cli/commands/evolution-status-command.js +41 -0
- package/dist/cli/commands/evolution-verdict-commands.d.ts +30 -0
- package/dist/cli/commands/evolution-verdict-commands.js +100 -0
- package/dist/cli/commands/finalize-accumulator.d.ts +44 -0
- package/dist/cli/commands/finalize-accumulator.js +55 -0
- package/dist/cli/commands/finalize-branches.d.ts +34 -0
- package/dist/cli/commands/finalize-branches.js +119 -0
- package/dist/cli/commands/finalize-runners.d.ts +3 -0
- package/dist/cli/commands/finalize-runners.js +92 -0
- package/dist/cli/commands/finalize-selection.d.ts +65 -0
- package/dist/cli/commands/finalize-selection.js +35 -0
- package/dist/cli/commands/gate-commands.js +26 -8
- package/dist/cli/commands/job-checkpoint-commands.d.ts +3 -0
- package/dist/cli/commands/job-checkpoint-commands.js +157 -0
- package/dist/cli/commands/job-command-shared.d.ts +109 -0
- package/dist/cli/commands/job-command-shared.js +72 -0
- package/dist/cli/commands/job-commands.d.ts +4 -64
- package/dist/cli/commands/job-commands.js +42 -552
- package/dist/cli/commands/job-cost-check-command.d.ts +3 -0
- package/dist/cli/commands/job-cost-check-command.js +41 -0
- package/dist/cli/commands/job-init-status-commands.d.ts +3 -0
- package/dist/cli/commands/job-init-status-commands.js +149 -0
- package/dist/cli/commands/job-run-commands.d.ts +3 -0
- package/dist/cli/commands/job-run-commands.js +97 -0
- package/dist/cli/commands/job-state-root.d.ts +35 -0
- package/dist/cli/commands/job-state-root.js +76 -0
- package/dist/cli/commands/loop-eval-capture-index.d.ts +4 -0
- package/dist/cli/commands/loop-eval-capture-index.js +44 -0
- package/dist/cli/commands/loop-eval-commands.d.ts +8 -5
- package/dist/cli/commands/loop-eval-commands.js +12 -626
- package/dist/cli/commands/loop-eval-eval-command.d.ts +3 -0
- package/dist/cli/commands/loop-eval-eval-command.js +168 -0
- package/dist/cli/commands/loop-eval-monotonic-command.d.ts +3 -0
- package/dist/cli/commands/loop-eval-monotonic-command.js +90 -0
- package/dist/cli/commands/loop-eval-parents.d.ts +7 -0
- package/dist/cli/commands/loop-eval-parents.js +20 -0
- package/dist/cli/commands/loop-eval-run-code.d.ts +7 -0
- package/dist/cli/commands/loop-eval-run-code.js +40 -0
- package/dist/cli/commands/loop-eval-run-command.d.ts +3 -0
- package/dist/cli/commands/loop-eval-run-command.js +113 -0
- package/dist/cli/commands/loop-eval-spec-commands.d.ts +3 -0
- package/dist/cli/commands/loop-eval-spec-commands.js +165 -0
- package/dist/cli/commands/loop-eval-spec-lint-command.d.ts +3 -0
- package/dist/cli/commands/loop-eval-spec-lint-command.js +42 -0
- package/dist/cli/commands/loop-eval-workflow-commands.d.ts +3 -0
- package/dist/cli/commands/loop-eval-workflow-commands.js +141 -0
- package/dist/cli/commands/mcp-commands.d.ts +10 -0
- package/dist/cli/commands/mcp-commands.js +157 -0
- package/dist/cli/commands/request-command-options.d.ts +49 -0
- package/dist/cli/commands/request-command-options.js +1 -0
- package/dist/cli/commands/request-commands.d.ts +3 -9
- package/dist/cli/commands/request-commands.js +17 -522
- package/dist/cli/commands/request-init-command.d.ts +3 -0
- package/dist/cli/commands/request-init-command.js +100 -0
- package/dist/cli/commands/request-lint-command.d.ts +3 -0
- package/dist/cli/commands/request-lint-command.js +50 -0
- package/dist/cli/commands/request-list-command.d.ts +10 -0
- package/dist/cli/commands/request-list-command.js +53 -0
- package/dist/cli/commands/request-repair-status-command.d.ts +3 -0
- package/dist/cli/commands/request-repair-status-command.js +61 -0
- package/dist/cli/commands/request-show-command.d.ts +3 -0
- package/dist/cli/commands/request-show-command.js +56 -0
- package/dist/cli/commands/request-transition-command.d.ts +3 -0
- package/dist/cli/commands/request-transition-command.js +122 -0
- package/dist/cli/commands/request-transition-failures.d.ts +8 -0
- package/dist/cli/commands/request-transition-failures.js +90 -0
- package/dist/cli/commands/request-transition-hooks.d.ts +50 -0
- package/dist/cli/commands/request-transition-hooks.js +115 -0
- package/dist/cli/commands/request-transition-preflight.d.ts +10 -0
- package/dist/cli/commands/request-transition-preflight.js +107 -0
- package/dist/cli/commands/scan-command-shared.d.ts +96 -0
- package/dist/cli/commands/scan-command-shared.js +83 -0
- package/dist/cli/commands/scan-commands.d.ts +3 -2
- package/dist/cli/commands/scan-commands.js +23 -463
- package/dist/cli/commands/scan-inventory-commands.d.ts +3 -0
- package/dist/cli/commands/scan-inventory-commands.js +96 -0
- package/dist/cli/commands/scan-project-commands.d.ts +3 -0
- package/dist/cli/commands/scan-project-commands.js +65 -0
- package/dist/cli/commands/scan-scope-commands.d.ts +3 -0
- package/dist/cli/commands/scan-scope-commands.js +149 -0
- package/dist/cli/commands/scan-scope-helpers.d.ts +8 -0
- package/dist/cli/commands/scan-scope-helpers.js +54 -0
- package/dist/cli/commands/scan-structural-commands.d.ts +3 -0
- package/dist/cli/commands/scan-structural-commands.js +113 -0
- package/dist/cli/commands/share-commands.d.ts +12 -68
- package/dist/cli/commands/share-commands.js +47 -556
- package/dist/cli/commands/share-error-hints.d.ts +14 -0
- package/dist/cli/commands/share-error-hints.js +38 -0
- package/dist/cli/commands/share-identity.d.ts +13 -0
- package/dist/cli/commands/share-identity.js +22 -0
- package/dist/cli/commands/share-record-paths.d.ts +37 -0
- package/dist/cli/commands/share-record-paths.js +68 -0
- package/dist/cli/commands/share-runners.d.ts +3 -0
- package/dist/cli/commands/share-runners.js +158 -0
- package/dist/cli/commands/shared-read-runners.d.ts +3 -0
- package/dist/cli/commands/shared-read-runners.js +51 -0
- package/dist/cli/commands/slice-check-command.d.ts +3 -0
- package/dist/cli/commands/slice-check-command.js +54 -0
- package/dist/cli/commands/slice-commands.d.ts +2 -22
- package/dist/cli/commands/slice-commands.js +18 -517
- package/dist/cli/commands/slice-decompose-artifacts.d.ts +18 -0
- package/dist/cli/commands/slice-decompose-artifacts.js +79 -0
- package/dist/cli/commands/slice-decompose-command.d.ts +3 -0
- package/dist/cli/commands/slice-decompose-command.js +123 -0
- package/dist/cli/commands/slice-list-commands.d.ts +3 -0
- package/dist/cli/commands/slice-list-commands.js +182 -0
- package/dist/cli/commands/slice-pick-command.d.ts +3 -0
- package/dist/cli/commands/slice-pick-command.js +60 -0
- package/dist/cli/commands/slice-plan-command.d.ts +24 -0
- package/dist/cli/commands/slice-plan-command.js +111 -0
- package/dist/cli/commands/workflow-commands.d.ts +10 -1
- package/dist/cli/commands/workflow-commands.js +6 -594
- package/dist/cli/commands/workflow-gate-commands.d.ts +3 -0
- package/dist/cli/commands/workflow-gate-commands.js +116 -0
- package/dist/cli/commands/workflow-plan-helpers.d.ts +48 -0
- package/dist/cli/commands/workflow-plan-helpers.js +103 -0
- package/dist/cli/commands/workflow-planning-commands.d.ts +3 -0
- package/dist/cli/commands/workflow-planning-commands.js +56 -0
- package/dist/cli/commands/workflow-swarm-actions.d.ts +7 -0
- package/dist/cli/commands/workflow-swarm-actions.js +109 -0
- package/dist/cli/commands/workflow-swarm-commands.d.ts +3 -0
- package/dist/cli/commands/workflow-swarm-commands.js +138 -0
- package/dist/cli/commands/workflow-tech-actions.d.ts +10 -0
- package/dist/cli/commands/workflow-tech-actions.js +150 -0
- package/dist/cli/commands/workspace/init-actions.d.ts +10 -0
- package/dist/cli/commands/workspace/init-actions.js +199 -0
- package/dist/cli/commands/workspace/init-codegraph-stake.d.ts +10 -0
- package/dist/cli/commands/workspace/init-codegraph-stake.js +54 -0
- package/dist/cli/commands/workspace/init-command.d.ts +8 -124
- package/dist/cli/commands/workspace/init-command.js +59 -623
- package/dist/cli/commands/workspace/init-context.d.ts +58 -0
- package/dist/cli/commands/workspace/init-context.js +121 -0
- package/dist/cli/commands/workspace/init-envelope.d.ts +3 -0
- package/dist/cli/commands/workspace/init-envelope.js +34 -0
- package/dist/cli/commands/workspace/init-failures.d.ts +3 -0
- package/dist/cli/commands/workspace/init-failures.js +84 -0
- package/dist/cli/commands/workspace/init-hooks-decision.d.ts +24 -0
- package/dist/cli/commands/workspace/init-hooks-decision.js +189 -0
- package/dist/cli/commands/workspace/init-options.d.ts +102 -0
- package/dist/cli/commands/workspace/init-options.js +1 -0
- package/dist/cli/commands/worktree-lease-commands.d.ts +10 -6
- package/dist/cli/commands/worktree-lease-commands.js +42 -512
- package/dist/cli/commands/worktree-lease-gc-command.d.ts +12 -0
- package/dist/cli/commands/worktree-lease-gc-command.js +117 -0
- package/dist/cli/commands/worktree-lease-git.d.ts +22 -0
- package/dist/cli/commands/worktree-lease-git.js +48 -0
- package/dist/cli/commands/worktree-lease-list-command.d.ts +12 -0
- package/dist/cli/commands/worktree-lease-list-command.js +100 -0
- package/dist/cli/commands/worktree-lease-load.d.ts +37 -0
- package/dist/cli/commands/worktree-lease-load.js +28 -0
- package/dist/cli/commands/worktree-lease-release-command.d.ts +13 -0
- package/dist/cli/commands/worktree-lease-release-command.js +105 -0
- package/dist/cli/commands/worktree-lease-renew-command.d.ts +11 -0
- package/dist/cli/commands/worktree-lease-renew-command.js +99 -0
- package/dist/cli/commands/worktree-lease-session.d.ts +22 -0
- package/dist/cli/commands/worktree-lease-session.js +29 -0
- package/dist/cli/commands/worktree-lease-spawn-command.d.ts +11 -0
- package/dist/cli/commands/worktree-lease-spawn-command.js +119 -0
- package/dist/cli/commands/worktree-lease-status-command.d.ts +11 -0
- package/dist/cli/commands/worktree-lease-status-command.js +86 -0
- package/dist/cli/commands/worktree-lease-store.d.ts +19 -0
- package/dist/cli/commands/worktree-lease-store.js +24 -0
- package/dist/cli/program.js +5 -0
- package/dist/services/distribution/mcp-install-runner.d.ts +21 -0
- package/dist/services/distribution/mcp-install-runner.js +59 -0
- package/dist/services/distribution/mcp-install.d.ts +95 -0
- package/dist/services/distribution/mcp-install.js +179 -0
- package/dist/services/distribution/plugin-manifest.d.ts +97 -0
- package/dist/services/distribution/plugin-manifest.js +126 -0
- package/dist/services/hooks/mcp-surface-gate.d.ts +19 -0
- package/dist/services/hooks/mcp-surface-gate.js +87 -0
- package/dist/services/ide/adapters/claude-code-adapter.d.ts +4 -35
- package/dist/services/ide/adapters/claude-code-adapter.js +48 -171
- package/dist/services/ide/adapters/claude-code-local-state.d.ts +28 -0
- package/dist/services/ide/adapters/claude-code-local-state.js +112 -0
- package/dist/services/ide/adapters/claude-code-model-window.d.ts +37 -0
- package/dist/services/ide/adapters/claude-code-model-window.js +113 -0
- package/dist/services/ide/ide-mcp-install-types.d.ts +78 -0
- package/dist/services/ide/ide-mcp-install-types.js +104 -0
- package/dist/services/ide/ide-types.d.ts +45 -1
- package/dist/services/ide/mcp-tool-matcher.d.ts +34 -0
- package/dist/services/ide/mcp-tool-matcher.js +84 -0
- package/dist/services/lint/npx-resolver.js +7 -0
- package/dist/services/mcp/cli-executor.d.ts +36 -0
- package/dist/services/mcp/cli-executor.js +97 -0
- package/dist/services/mcp/json-rpc.d.ts +81 -0
- package/dist/services/mcp/json-rpc.js +116 -0
- package/dist/services/mcp/memory-tool.d.ts +3 -0
- package/dist/services/mcp/memory-tool.js +62 -0
- package/dist/services/mcp/server-main.d.ts +1 -0
- package/dist/services/mcp/server-main.js +66 -0
- package/dist/services/mcp/server.d.ts +22 -0
- package/dist/services/mcp/server.js +152 -0
- package/dist/services/mcp/surface.d.ts +62 -0
- package/dist/services/mcp/surface.js +198 -0
- package/dist/services/mcp/tool-core.d.ts +42 -0
- package/dist/services/mcp/tool-core.js +137 -0
- package/dist/services/mcp/tools.d.ts +13 -0
- package/dist/services/mcp/tools.js +58 -0
- package/dist/services/readonly-surface/argv-guard.d.ts +32 -0
- package/dist/services/readonly-surface/argv-guard.js +164 -0
- package/dist/services/readonly-surface/readonly-whitelist.d.ts +147 -0
- package/dist/services/readonly-surface/readonly-whitelist.js +107 -0
- package/dist/services/readonly-surface/whitelist-generator.d.ts +64 -0
- package/dist/services/readonly-surface/whitelist-generator.js +212 -0
- package/dist/services/skills/hooks-codegate-superpowers.d.ts +1 -0
- package/dist/services/skills/hooks-codegate-superpowers.js +26 -0
- package/dist/services/skills/hooks-settings-service.js +10 -2
- package/package.json +17 -6
- package/scripts/install-skills-bundles.mjs +233 -0
- package/scripts/install-skills-fs.mjs +148 -0
- package/scripts/install-skills-ide.mjs +279 -0
- package/scripts/install-skills-output-style-default.mjs +196 -0
- package/scripts/install-skills-output-styles.mjs +121 -0
- package/scripts/install-skills-report.mjs +42 -0
- package/scripts/install-skills-user-config.mjs +198 -0
- package/scripts/install-skills.mjs +36 -1066
- package/scripts/watch-tree.mjs +140 -0
- package/scripts/watch.mjs +4 -126
- package/skills/peaks-status/SKILL.md +31 -13
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// The one table-to-vocabulary mapping `peaks code context-now` decides with: the
|
|
2
|
+
// shared `CompactTrigger` kind translated to this command's `action`, and the labels
|
|
3
|
+
// it prints, both read out of the mode in force.
|
|
4
|
+
import { thresholdFor } from '../../services/code/auto-compact-modes.js';
|
|
5
|
+
import { AUTO_COMPACT_SOFT_WARN_RATIO } from '../../services/context/auto-compact-types.js';
|
|
6
|
+
import { evaluateCompactTrigger } from '../../services/code/auto-compact-orchestrator.js';
|
|
7
|
+
/** The one dispatch verb the action and red-line tiers name. */
|
|
8
|
+
const COMPACT_CMD = 'peaks code auto-compact';
|
|
9
|
+
/**
|
|
10
|
+
* Slice H4 (rid=h4-context-now-mode-blind) — the ONE mapping from the shared
|
|
11
|
+
* `CompactTrigger` to this command's `action` vocabulary, so the two cannot
|
|
12
|
+
* drift: the trigger is `evaluateCompactTrigger`, the same function `peaks
|
|
13
|
+
* code auto-compact` decides with.
|
|
14
|
+
*
|
|
15
|
+
* `auto-fire` maps to `soft-warn` in BOTH modes: that tier is `peaks skill
|
|
16
|
+
* presence`'s — the every-turn probe, which reads this same table and mode
|
|
17
|
+
* resolver — so `context-now` has no auto-fire tier of its own (SKILL.md
|
|
18
|
+
* "two probes, two thresholds"). Reporting it as `auto-compact-now` would
|
|
19
|
+
* change every non-24h session's output, which slice H4 forbids.
|
|
20
|
+
*/
|
|
21
|
+
export function contextNowActionFor(ratio, mode) {
|
|
22
|
+
const kind = evaluateCompactTrigger(ratio, mode).kind;
|
|
23
|
+
if (kind === 'red-line')
|
|
24
|
+
return { action: 'red-line', next: COMPACT_CMD };
|
|
25
|
+
if (kind === 'pre-compact')
|
|
26
|
+
return { action: 'auto-compact-now', next: COMPACT_CMD };
|
|
27
|
+
return { action: kind === 'none' ? 'ok' : 'soft-warn', next: null };
|
|
28
|
+
}
|
|
29
|
+
/** Slice H4: the labels `context-now` prints, read out of the table for the mode
|
|
30
|
+
* in force — the old hard-coded "≥0.85 / ≥0.95 / 50–85%" told a 24h operator
|
|
31
|
+
* the wrong lines. `*Ratio` is the `0.85` form `gateModeNotice` uses. */
|
|
32
|
+
export function contextNowBandLabels(mode) {
|
|
33
|
+
const pct = (r) => `${(r * 100).toFixed(0)}`;
|
|
34
|
+
const pre = thresholdFor(mode, 'preCompact');
|
|
35
|
+
const red = thresholdFor(mode, 'redLine');
|
|
36
|
+
return {
|
|
37
|
+
softWarn: pct(AUTO_COMPACT_SOFT_WARN_RATIO),
|
|
38
|
+
preCompact: pct(pre),
|
|
39
|
+
redLine: pct(red),
|
|
40
|
+
preCompactRatio: pre.toFixed(2),
|
|
41
|
+
redLineRatio: red.toFixed(2)
|
|
42
|
+
};
|
|
43
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
|
|
2
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
3
|
+
import { evaluateEmitHandoff, JOB_NOT_INITIALIZED, JOB_REMAINING_BLOCKED } from '../../services/code/emit-handoff.js';
|
|
4
|
+
import { readActiveSid } from './code-runtime-session.js';
|
|
5
|
+
export function registerCodeEmitHandoffCommand(code, io) {
|
|
6
|
+
// v3.1.2 Step 11 / final handoff — Size-fear ban.
|
|
7
|
+
// Refuses to emit a final handoff while a Job has remaining slices.
|
|
8
|
+
addJsonOption(code
|
|
9
|
+
.command('emit-handoff')
|
|
10
|
+
.description('v3.1.2 Step 11 size-fear ban: under Job mode, refuse to emit a final ' +
|
|
11
|
+
'handoff while remaining > 0. Exit 0 = allow, exit 1 = block. Pass ' +
|
|
12
|
+
'--force-under-job to override (requires explicit user approval).')
|
|
13
|
+
.requiredOption('--project <path>', 'target project root')
|
|
14
|
+
.option('--session-id <sid>', 'override session id (default: read from active presence)')
|
|
15
|
+
.option('--job-id <jid>', 'override job id (default: read from job-shape.json decision.suggestedJobId)')
|
|
16
|
+
.option('--force-under-job', 'override the remaining>0 block (explicit user approval required)')).action((opts) => runEmitHandoff(opts, io));
|
|
17
|
+
}
|
|
18
|
+
function runEmitHandoff(opts, io) {
|
|
19
|
+
try {
|
|
20
|
+
const sessionId = opts.sessionId ?? readActiveSid(opts.project);
|
|
21
|
+
if (sessionId === null) {
|
|
22
|
+
printEmitHandoffNoSession(io, opts.json);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const evalInput = {
|
|
26
|
+
projectRoot: opts.project,
|
|
27
|
+
sessionId
|
|
28
|
+
};
|
|
29
|
+
if (opts.jobId !== undefined)
|
|
30
|
+
evalInput.jobId = opts.jobId;
|
|
31
|
+
if (opts.forceUnderJob === true)
|
|
32
|
+
evalInput.forceUnderJob = true;
|
|
33
|
+
const verdict = evaluateEmitHandoff(evalInput);
|
|
34
|
+
reportEmitHandoffVerdict(verdict, io, opts.json);
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
reportEmitHandoffFailure(io, err, opts.json);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function reportEmitHandoffVerdict(verdict, io, json) {
|
|
41
|
+
if (verdict.kind === 'allow-not-job') {
|
|
42
|
+
printEmitHandoffAllowNotJob(io, json);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (verdict.kind === 'allow-done') {
|
|
46
|
+
printEmitHandoffAllowDone(verdict, io, json);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (verdict.kind === 'allow-force-override') {
|
|
50
|
+
printEmitHandoffAllowForceOverride(verdict, io, json);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (verdict.kind === 'block-not-initialized') {
|
|
54
|
+
printEmitHandoffBlockNotInitialized(verdict, io, json);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
printEmitHandoffBlockRemaining(verdict, io, json);
|
|
58
|
+
}
|
|
59
|
+
function printEmitHandoffNoSession(io, json) {
|
|
60
|
+
const envelope = ok('code.emit-handoff', { allow: true, mode: 'no-session' }, [], ['No active session id; gate passes through (single-rid mode).']);
|
|
61
|
+
printResult(io, envelope, json);
|
|
62
|
+
}
|
|
63
|
+
function printEmitHandoffAllowNotJob(io, json) {
|
|
64
|
+
const envelope = ok('code.emit-handoff', { allow: true, mode: 'single' }, [], ['job-shape.json says isJob=false (or absent); normal handoff allowed.']);
|
|
65
|
+
printResult(io, envelope, json);
|
|
66
|
+
}
|
|
67
|
+
function printEmitHandoffAllowDone(verdict, io, json) {
|
|
68
|
+
const envelope = ok('code.emit-handoff', { allow: true, mode: 'job-done', remaining: verdict.remaining }, [], [`Job is complete (remaining=0); handoff allowed.`]);
|
|
69
|
+
printResult(io, envelope, json);
|
|
70
|
+
}
|
|
71
|
+
function printEmitHandoffAllowForceOverride(verdict, io, json) {
|
|
72
|
+
const envelope = ok('code.emit-handoff', { allow: true, mode: 'job-force-override', remaining: verdict.remaining }, [], [
|
|
73
|
+
`Job has ${verdict.remaining} remaining slices; --force-under-job override applied. Handoff allowed (explicit user approval).`
|
|
74
|
+
]);
|
|
75
|
+
printResult(io, envelope, json);
|
|
76
|
+
}
|
|
77
|
+
function printEmitHandoffBlockNotInitialized(verdict, io, json) {
|
|
78
|
+
const envelope = fail('code.emit-handoff', JOB_NOT_INITIALIZED, `Job ${verdict.jobId} has no state.json; peaks job init was skipped.`, { jobId: verdict.jobId }, [`Run \`peaks job init --job-id ${verdict.jobId} --slice-list <...>\` before emitting handoff.`]);
|
|
79
|
+
printResult(io, envelope, json);
|
|
80
|
+
process.exitCode = 1;
|
|
81
|
+
}
|
|
82
|
+
function printEmitHandoffBlockRemaining(verdict, io, json) {
|
|
83
|
+
// block-remaining
|
|
84
|
+
const blockMessage = `BLOCKED: Job ${verdict.jobId} has ${verdict.remaining} remaining slices. Run \`peaks job status\`. Use --force-under-job only with explicit user approval.`;
|
|
85
|
+
const envelope = fail('code.emit-handoff', JOB_REMAINING_BLOCKED, blockMessage, { jobId: verdict.jobId, remaining: verdict.remaining }, [
|
|
86
|
+
`Run \`peaks job status --job-id ${verdict.jobId}\` to see remaining slices.`,
|
|
87
|
+
'Resume Step 0.81 (per-slice checkpoint loop) and continue until remaining === 0.',
|
|
88
|
+
'Use --force-under-job only with explicit user approval (size-fear ban override).'
|
|
89
|
+
]);
|
|
90
|
+
io.stderr(`${blockMessage}\n`);
|
|
91
|
+
printResult(io, envelope, json);
|
|
92
|
+
process.exitCode = 1;
|
|
93
|
+
}
|
|
94
|
+
function reportEmitHandoffFailure(io, err, json) {
|
|
95
|
+
printResult(io, fail('code.emit-handoff', 'EMIT_HANDOFF_FAILED', getErrorMessage(err), null, [
|
|
96
|
+
'Verify the project path and try again'
|
|
97
|
+
]), json);
|
|
98
|
+
process.exitCode = 1;
|
|
99
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
|
|
2
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
3
|
+
import { evaluateStep08, STEP_08_BACKUP_REGEX } from '../../services/code/step-08-gate.js';
|
|
4
|
+
import { buildContextAuditHint } from '../../services/context/context-audit-hint.js';
|
|
5
|
+
import { resolveOuterSessionId } from '../../services/session/binding-status-service.js';
|
|
6
|
+
import { readActiveSid } from './code-runtime-session.js';
|
|
7
|
+
export function registerCodeGateStep08Command(code, io) {
|
|
8
|
+
// v3.1.2 Step 0.8 — Mechanical PreToolUse gate.
|
|
9
|
+
// Wire-installed by `peaks workspace init` (extends the existing hook
|
|
10
|
+
// installer). Exit code is the load-bearing contract:
|
|
11
|
+
// exit 0 → allow (with structured stdout describing the decision)
|
|
12
|
+
// exit 2 → block (stderr contains the BLOCKED: ... reason)
|
|
13
|
+
addJsonOption(code
|
|
14
|
+
.command('gate-step-08')
|
|
15
|
+
.description('v3.1.2: PreToolUse gate for Step 0.8 — allow when job-shape.json exists; ' +
|
|
16
|
+
'fail-closed backup regex when missing. Exit 0 = allow, exit 2 = block. ' +
|
|
17
|
+
'When the decision says isJob=true AND progress.json exists, the stdout ' +
|
|
18
|
+
'also carries `Next: slice #N+1 of M (<currentSlice>)` so the LLM cannot ' +
|
|
19
|
+
'wake up cold. When the context ratio is ≥ 0.70 the stdout gains ONE more ' +
|
|
20
|
+
'line naming the largest context consumer (audit cached ≥ 5 min; fail-soft).')
|
|
21
|
+
.requiredOption('--project <path>', 'target project root (the hook passes "." so resolveCanonicalProjectRoot promotes it to the git root)')
|
|
22
|
+
.option('--session-id <sid>', 'override session id (default: read from active presence)')
|
|
23
|
+
.option('--prompt <text>', 'explicit prompt text (default: read last-prompt.txt; stdin ignored)')).action((opts) => runGateStep08(opts, io));
|
|
24
|
+
}
|
|
25
|
+
function runGateStep08(opts, io) {
|
|
26
|
+
try {
|
|
27
|
+
const sessionId = opts.sessionId ?? readActiveSid(opts.project);
|
|
28
|
+
if (sessionId === null) {
|
|
29
|
+
// No session binding — treat as allow (single-rid mode). The
|
|
30
|
+
// LLM has not yet anchored; we have nothing to gate against.
|
|
31
|
+
printGateStep08NoSession(io, opts.json);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const context = resolveGateStep08Context(opts, sessionId);
|
|
35
|
+
const verdict = context.result.verdict;
|
|
36
|
+
if (verdict.kind === 'allow-job') {
|
|
37
|
+
printGateStep08AllowJob(verdict, context, io, opts.json);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (verdict.kind === 'allow-single') {
|
|
41
|
+
printGateStep08AllowSingle(context, io, opts.json);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
// block-missing-decision
|
|
45
|
+
if (verdict.promptHit) {
|
|
46
|
+
// Block: backup regex hit. Exit code 2 is the load-bearing
|
|
47
|
+
// signal for the PreToolUse hook.
|
|
48
|
+
printGateStep08Blocked(verdict, context, io, opts.json);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
// No decision + no regex hit → allow.
|
|
52
|
+
printGateStep08Undecided(verdict, context, io, opts.json);
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
reportGateStep08Failure(io, err, opts.json);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function resolveGateStep08Context(opts, sessionId) {
|
|
59
|
+
// hint. Runs ONLY when the window is ≥ 0.70 full, caches the audit
|
|
60
|
+
// result for ≥ 5 min so the transcript is scanned at most once per
|
|
61
|
+
// TTL window, and is fail-soft (null → no extra line). It never
|
|
62
|
+
// changes the exit code and never blocks.
|
|
63
|
+
const hintLine = buildContextAuditHint({
|
|
64
|
+
projectRoot: opts.project,
|
|
65
|
+
sessionId,
|
|
66
|
+
outerSessionId: resolveOuterSessionId(opts.project, sessionId)
|
|
67
|
+
});
|
|
68
|
+
const hintActions = hintLine === null ? [] : [hintLine];
|
|
69
|
+
const evalInput = {
|
|
70
|
+
projectRoot: opts.project,
|
|
71
|
+
sessionId
|
|
72
|
+
};
|
|
73
|
+
if (opts.prompt !== undefined)
|
|
74
|
+
evalInput.prompt = opts.prompt;
|
|
75
|
+
const result = evaluateStep08(evalInput);
|
|
76
|
+
return { result, hintActions };
|
|
77
|
+
}
|
|
78
|
+
function printGateStep08NoSession(io, json) {
|
|
79
|
+
const envelope = ok('code.gate-step-08', {
|
|
80
|
+
allow: true,
|
|
81
|
+
mode: 'no-session',
|
|
82
|
+
decision: null,
|
|
83
|
+
nextSlice: null
|
|
84
|
+
}, [], ['No active session id; gate passes through (single-rid mode).']);
|
|
85
|
+
printResult(io, envelope, json);
|
|
86
|
+
}
|
|
87
|
+
function printGateStep08AllowJob(verdict, context, io, json) {
|
|
88
|
+
const result = context.result;
|
|
89
|
+
const envelope = ok('code.gate-step-08', {
|
|
90
|
+
allow: true,
|
|
91
|
+
mode: 'job',
|
|
92
|
+
decision: verdict.decision,
|
|
93
|
+
progress: verdict.progress,
|
|
94
|
+
nextSlice: result.nextSliceLine
|
|
95
|
+
}, [], [...(result.nextSliceLine !== null ? [result.nextSliceLine] : []), ...context.hintActions]);
|
|
96
|
+
printResult(io, envelope, json);
|
|
97
|
+
}
|
|
98
|
+
function printGateStep08AllowSingle(context, io, json) {
|
|
99
|
+
const envelope = ok('code.gate-step-08', {
|
|
100
|
+
allow: true,
|
|
101
|
+
mode: 'single',
|
|
102
|
+
decision: null,
|
|
103
|
+
nextSlice: null
|
|
104
|
+
}, [], ['job-shape.json says isJob=false; single-rid mode (gate allows).', ...context.hintActions]);
|
|
105
|
+
printResult(io, envelope, json);
|
|
106
|
+
}
|
|
107
|
+
function printGateStep08Blocked(verdict, context, io, json) {
|
|
108
|
+
const blockMessage = 'BLOCKED: prompt looks Job-shaped but peaks code detect-job has not been called. Run `peaks code detect-job --is-job true ...` to record your Job-shape verdict, then retry.';
|
|
109
|
+
const envelope = fail('code.gate-step-08', 'STEP_08_BLOCKED', blockMessage, {
|
|
110
|
+
promptSource: verdict.promptSource,
|
|
111
|
+
backupRegex: STEP_08_BACKUP_REGEX.toString()
|
|
112
|
+
}, [
|
|
113
|
+
'Run `peaks code detect-job --is-job true --rationale <text> --suggested-job-id <slug>` to record the Job-shape verdict.',
|
|
114
|
+
'Then re-run the Bash tool call.',
|
|
115
|
+
...context.hintActions
|
|
116
|
+
]);
|
|
117
|
+
io.stderr(`${blockMessage}\n`);
|
|
118
|
+
printResult(io, envelope, json);
|
|
119
|
+
process.exitCode = 2;
|
|
120
|
+
}
|
|
121
|
+
function printGateStep08Undecided(verdict, context, io, json) {
|
|
122
|
+
const envelope = ok('code.gate-step-08', {
|
|
123
|
+
allow: true,
|
|
124
|
+
mode: 'undecided-no-regex-hit',
|
|
125
|
+
decision: null,
|
|
126
|
+
nextSlice: null,
|
|
127
|
+
promptSource: verdict.promptSource
|
|
128
|
+
}, [], [
|
|
129
|
+
'No job-shape.json AND no backup-regex match on prompt → allow (most prompts are not Job-shaped).',
|
|
130
|
+
...context.hintActions
|
|
131
|
+
]);
|
|
132
|
+
printResult(io, envelope, json);
|
|
133
|
+
}
|
|
134
|
+
function reportGateStep08Failure(io, err, json) {
|
|
135
|
+
printResult(io, fail('code.gate-step-08', 'GATE_STEP_08_FAILED', getErrorMessage(err), null, [
|
|
136
|
+
'Verify the project path and try again'
|
|
137
|
+
]), json);
|
|
138
|
+
process.exitCode = 1;
|
|
139
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
|
|
2
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
3
|
+
import { detectPostCompactResume, formatPostCompactResumeLogLine } from '../../services/code/post-compact-detector.js';
|
|
4
|
+
import { readActiveSid } from './code-runtime-session.js';
|
|
5
|
+
function printPostCompactNoActiveSession(io, opts) {
|
|
6
|
+
printResult(io, fail('code.post-compact-detect', 'NO_ACTIVE_SESSION', 'no active session id; pass --session-id or set presence via `peaks skill presence:set peaks-code`', null, ['Re-run with --session-id <sid>']), opts.json);
|
|
7
|
+
process.exitCode = 1;
|
|
8
|
+
}
|
|
9
|
+
const POST_COMPACT_DETECT_DESCRIPTION = 'v2.11.0 D7: detect whether the current invocation is a same-day post-compact resume. ' +
|
|
10
|
+
'Auto-resumes (no AskUserQuestion) when the most-recent checkpoint is from today, has a mode field, ' +
|
|
11
|
+
'and the active skill is peaks-code. Falls through to the normal Step 0.7 flow otherwise.';
|
|
12
|
+
/** The catch branch, lifted verbatim out of the action body. */
|
|
13
|
+
function reportPostCompactDetectFailure(io, err, json) {
|
|
14
|
+
printResult(io, fail('code.post-compact-detect', 'POST_COMPACT_DETECT_FAILED', getErrorMessage(err), null, [
|
|
15
|
+
'Verify the project path and try again'
|
|
16
|
+
]), json);
|
|
17
|
+
process.exitCode = 1;
|
|
18
|
+
}
|
|
19
|
+
/** The action body, lifted to a module-level function so both it and the registrar fit in 50 lines. */
|
|
20
|
+
async function runPostCompactDetect(opts, io) {
|
|
21
|
+
try {
|
|
22
|
+
const sessionId = opts.sessionId ?? readActiveSid(opts.project);
|
|
23
|
+
if (sessionId === null) {
|
|
24
|
+
printPostCompactNoActiveSession(io, opts);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const probe = await detectPostCompactResume({
|
|
28
|
+
sessionId,
|
|
29
|
+
projectRoot: opts.project,
|
|
30
|
+
activeSkill: opts.activeSkill
|
|
31
|
+
});
|
|
32
|
+
const logLine = formatPostCompactResumeLogLine(probe);
|
|
33
|
+
printResult(io, ok('code.post-compact-detect', { ...probe, logLine }, [...probe.warnings], [
|
|
34
|
+
probe.shouldAutoResume
|
|
35
|
+
? `Post-compact match → auto-resume mode=${probe.mode ?? '?'} checkpoint=${probe.checkpointPath ?? '?'}`
|
|
36
|
+
: `No auto-resume: ${probe.reason}`
|
|
37
|
+
]), opts.json);
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
reportPostCompactDetectFailure(io, err, opts.json);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export function registerCodePostCompactDetectCommand(code, io) {
|
|
44
|
+
addJsonOption(code
|
|
45
|
+
.command('post-compact-detect')
|
|
46
|
+
.description(POST_COMPACT_DETECT_DESCRIPTION)
|
|
47
|
+
.requiredOption('--project <path>', 'target project root')
|
|
48
|
+
.option('--session-id <sid>', 'override session id (default: read from active presence)')
|
|
49
|
+
.option('--active-skill <skill>', 'override active skill (test seam; default: read from presence)')).action((opts) => runPostCompactDetect(opts, io));
|
|
50
|
+
}
|
|
@@ -1,50 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* context-now / context-audit / gate-step-08 /
|
|
2
|
+
* context-now / context-audit / post-compact-detect / auto-compact / gate-step-08 /
|
|
3
|
+
* emit-handoff.
|
|
3
4
|
*
|
|
4
5
|
* Owns: 6 sub-commands that read or mutate runtime state.
|
|
5
|
-
* Owns the `readActiveSid` helper (only used by these runtime probes).
|
|
6
6
|
*
|
|
7
|
-
*
|
|
7
|
+
* This module is the registrar only. Each sub-command owns a file, and the pure
|
|
8
|
+
* helpers they share live beside them rather than inside one of them. Both
|
|
9
|
+
* re-exports below are part of the published surface of this module path, so the
|
|
10
|
+
* callers that reach for them keep their specifier.
|
|
8
11
|
*/
|
|
9
12
|
import type { Command } from 'commander';
|
|
10
|
-
import {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
import { type AutoCompactMode } from '../../services/code/auto-compact-modes.js';
|
|
14
|
-
/**
|
|
15
|
-
* Slice H4 (rid=h4-context-now-mode-blind) — the ONE mapping from the shared
|
|
16
|
-
* `CompactTrigger` to this command's `action` vocabulary, so the two cannot
|
|
17
|
-
* drift: the trigger is `evaluateCompactTrigger`, the same function `peaks
|
|
18
|
-
* code auto-compact` decides with.
|
|
19
|
-
*
|
|
20
|
-
* `auto-fire` maps to `soft-warn` in BOTH modes: that tier is `peaks skill
|
|
21
|
-
* presence`'s — the every-turn probe, which reads this same table and mode
|
|
22
|
-
* resolver — so `context-now` has no auto-fire tier of its own (SKILL.md
|
|
23
|
-
* "two probes, two thresholds"). Reporting it as `auto-compact-now` would
|
|
24
|
-
* change every non-24h session's output, which slice H4 forbids.
|
|
25
|
-
*/
|
|
26
|
-
export declare function contextNowActionFor(ratio: number, mode: AutoCompactMode): {
|
|
27
|
-
action: 'ok' | 'soft-warn' | 'auto-compact-now' | 'red-line';
|
|
28
|
-
next: string | null;
|
|
29
|
-
};
|
|
30
|
-
/**
|
|
31
|
-
* Adapt `runAutoCompact`'s domain result to a `ResultEnvelope`.
|
|
32
|
-
*
|
|
33
|
-
* Extracted and exported so the CHANNEL each fact chooses can be asserted
|
|
34
|
-
* directly, without a real red-line probe.
|
|
35
|
-
*
|
|
36
|
-
* The harness-window CONFLICT ("peaks-loop divided this ratio by N but the
|
|
37
|
-
* settings file pins M") is a fact about the STATE, not an instruction, so it
|
|
38
|
-
* rides `warnings` — the very channel `peaks code context-now` already puts it
|
|
39
|
-
* on, via the same `harnessWindowSyncWarning`. Before this, the shim hard-coded
|
|
40
|
-
* `warnings: []`, so the identical fact reached a consumer as a sentence inside
|
|
41
|
-
* `nextActions` on this command and as a `warnings` entry on the other one. One
|
|
42
|
-
* fact, two shapes, depending on which of the two syncing commands a consumer
|
|
43
|
-
* happened to read: two parsers for one mechanism.
|
|
44
|
-
*
|
|
45
|
-
* The prose description (`describeHarnessWindowSync`) stays in `nextActions` on
|
|
46
|
-
* BOTH commands — that half is advice ("what to do about it") and both already
|
|
47
|
-
* agree on it.
|
|
48
|
-
*/
|
|
49
|
-
export declare function buildAutoCompactEnvelope(result: AutoCompactResult): ResultEnvelope<unknown>;
|
|
13
|
+
import type { ProgramIO } from '../cli-helpers.js';
|
|
14
|
+
export { buildAutoCompactEnvelope } from './code-auto-compact-envelope.js';
|
|
15
|
+
export { contextNowActionFor } from './code-context-now-mapping.js';
|
|
50
16
|
export declare function registerCodeRuntimeCommands(code: Command, io: ProgramIO): void;
|