peaks-loop 3.0.0 → 3.0.1
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 +3 -3
- package/CHANGELOG.md +57 -57
- package/README-en.md +2 -2
- package/README.md +2 -2
- package/agents/karpathy-reviewer.md +2 -2
- package/dist/src/cli/commands/agent-commands.js +3 -3
- package/dist/src/cli/commands/audit-commands.d.ts +1 -1
- package/dist/src/cli/commands/audit-commands.js +6 -6
- package/dist/src/cli/commands/classify-classify-commands.js +1 -1
- package/dist/src/cli/commands/code-review-commands.d.ts +3 -3
- package/dist/src/cli/commands/code-review-commands.js +5 -5
- package/dist/src/cli/commands/compact-command.d.ts +21 -0
- package/dist/src/cli/commands/compact-command.js +252 -0
- package/dist/src/cli/commands/context-commands.d.ts +1 -1
- package/dist/src/cli/commands/context-commands.js +1 -1
- package/dist/src/cli/commands/contract-commands.d.ts +1 -1
- package/dist/src/cli/commands/core/session-command.js +17 -7
- package/dist/src/cli/commands/core/skill-command.js +1 -1
- package/dist/src/cli/commands/feedback-commands.js +1 -1
- package/dist/src/cli/commands/hook-handle.d.ts +1 -1
- package/dist/src/cli/commands/hook-handle.js +1 -1
- package/dist/src/cli/commands/legacy-commands.d.ts +1 -1
- package/dist/src/cli/commands/legacy-commands.js +2 -2
- package/dist/src/cli/commands/log-commands.js +2 -2
- package/dist/src/cli/commands/loop-commands.d.ts +1 -1
- package/dist/src/cli/commands/loop-commands.js +1 -1
- package/dist/src/cli/commands/loop-eval-commands.d.ts +1 -1
- package/dist/src/cli/commands/loop-eval-commands.js +1 -1
- package/dist/src/cli/commands/playwright-commands.d.ts +1 -1
- package/dist/src/cli/commands/playwright-commands.js +2 -2
- package/dist/src/cli/commands/request-commands.js +40 -1
- package/dist/src/cli/commands/role-commands.js +1 -1
- package/dist/src/cli/commands/slice-commands.js +5 -5
- package/dist/src/cli/commands/upgrade-commands.d.ts +1 -1
- package/dist/src/cli/commands/upgrade-commands.js +6 -6
- package/dist/src/cli/commands/workspace/init-command.js +2 -2
- package/dist/src/cli/program.js +10 -1
- package/dist/src/services/agent/ecc-agent-service.js +5 -5
- package/dist/src/services/audit/artifact-writer.d.ts +1 -1
- package/dist/src/services/audit/artifact-writer.js +1 -1
- package/dist/src/services/audit/decision-writer.d.ts +1 -1
- package/dist/src/services/audit/decision-writer.js +1 -1
- package/dist/src/services/audit/enforcers/lint-output-style.js +5 -5
- package/dist/src/services/audit/enforcers/mock-placement.d.ts +1 -1
- package/dist/src/services/audit/enforcers/mock-placement.js +1 -1
- package/dist/src/services/audit/enforcers/no-root-pollution.js +1 -1
- package/dist/src/services/audit/red-line-catalog-p2-a.js +2 -2
- package/dist/src/services/audit/red-line-catalog-p2-b.js +2 -2
- package/dist/src/services/audit/static-service.d.ts +1 -1
- package/dist/src/services/audit/static-service.js +5 -5
- package/dist/src/services/audit/types.d.ts +1 -1
- package/dist/src/services/audit/types.js +1 -1
- package/dist/src/services/audit-independent/perf-audit-service.js +1 -1
- package/dist/src/services/audit-independent/security-audit-service.js +1 -1
- package/dist/src/services/classify/classify-service.d.ts +1 -1
- package/dist/src/services/classify/classify-service.js +1 -1
- package/dist/src/services/classify/classify-types.d.ts +1 -1
- package/dist/src/services/classify/classify-types.js +1 -1
- package/dist/src/services/code-review/ecc-bridge.d.ts +2 -2
- package/dist/src/services/code-review/ecc-bridge.js +2 -2
- package/dist/src/services/code-review/ocr-service.d.ts +9 -9
- package/dist/src/services/code-review/ocr-service.js +16 -16
- package/dist/src/services/compact/decision-tables.d.ts +66 -0
- package/dist/src/services/compact/decision-tables.js +127 -0
- package/dist/src/services/compact/request-transition-hook.d.ts +20 -0
- package/dist/src/services/compact/request-transition-hook.js +110 -0
- package/dist/src/services/compact/suggest-service.d.ts +74 -0
- package/dist/src/services/compact/suggest-service.js +203 -0
- package/dist/src/services/config/config-migration.js +1 -1
- package/dist/src/services/config/config-safety.d.ts +1 -1
- package/dist/src/services/config/config-safety.js +1 -1
- package/dist/src/services/config/config-service.d.ts +1 -1
- package/dist/src/services/config/config-service.js +1 -1
- package/dist/src/services/context/auto-compact-dispatcher.js +4 -4
- package/dist/src/services/context/auto-compact-types.d.ts +6 -6
- package/dist/src/services/context/auto-compact-types.js +5 -5
- package/dist/src/services/dispatch/sub-agent-dispatcher.js +1 -1
- package/dist/src/services/dispatch/test-tool-detection.d.ts +1 -1
- package/dist/src/services/dispatch/test-tool-detection.js +1 -1
- package/dist/src/services/doctor/doctor-service.d.ts +1 -1
- package/dist/src/services/doctor/doctor-service.js +5 -5
- package/dist/src/services/hooks/presence-marker-detector.js +5 -5
- package/dist/src/services/ide/adapters/claude-code-adapter.d.ts +1 -1
- package/dist/src/services/ide/adapters/claude-code-adapter.js +2 -2
- package/dist/src/services/ide/adapters/codex-adapter.d.ts +2 -2
- package/dist/src/services/ide/adapters/codex-adapter.js +2 -2
- package/dist/src/services/ide/adapters/cursor-adapter.d.ts +2 -2
- package/dist/src/services/ide/adapters/cursor-adapter.js +2 -2
- package/dist/src/services/ide/adapters/hermes-adapter.d.ts +1 -1
- package/dist/src/services/ide/adapters/hermes-adapter.js +1 -1
- package/dist/src/services/ide/adapters/openclaw-adapter.d.ts +1 -1
- package/dist/src/services/ide/adapters/openclaw-adapter.js +1 -1
- package/dist/src/services/ide/adapters/trae-adapter.d.ts +1 -1
- package/dist/src/services/ide/adapters/trae-adapter.js +1 -1
- package/dist/src/services/ide/ide-types.d.ts +9 -9
- package/dist/src/services/legacy/legacy-detector.d.ts +1 -1
- package/dist/src/services/legacy/legacy-detector.js +1 -1
- package/dist/src/services/log/log-commands-service.d.ts +1 -1
- package/dist/src/services/log/log-commands-service.js +1 -1
- package/dist/src/services/log/logger.d.ts +3 -3
- package/dist/src/services/log/logger.js +3 -3
- package/dist/src/services/log/redact.d.ts +1 -1
- package/dist/src/services/log/redact.js +1 -1
- package/dist/src/services/loop/evaluator-dispatcher.d.ts +1 -1
- package/dist/src/services/loop/evaluator-dispatcher.js +16 -15
- package/dist/src/services/loop/monotonic-guard.js +35 -18
- package/dist/src/services/loop/monotonic-runner.d.ts +3 -0
- package/dist/src/services/loop/monotonic-runner.js +62 -28
- package/dist/src/services/loop/run-driver.js +45 -24
- package/dist/src/services/memory/llm-reranker.d.ts +1 -1
- package/dist/src/services/memory/llm-reranker.js +1 -1
- package/dist/src/services/mut/production-stryker.d.ts +0 -5
- package/dist/src/services/mut/production-stryker.js +19 -10
- package/dist/src/services/openspec/openspec-propose-from-doctor-service.d.ts +1 -1
- package/dist/src/services/openspec/openspec-propose-from-doctor-service.js +1 -1
- package/dist/src/services/perf/perf-baseline-service.d.ts +2 -2
- package/dist/src/services/perf/perf-baseline-service.js +2 -2
- package/dist/src/services/prd/handoff-auto-regen.js +1 -1
- package/dist/src/services/prd/project-scan-sediment.js +3 -3
- package/dist/src/services/prd/project-scan-types.d.ts +1 -1
- package/dist/src/services/preferences/preferences-types.d.ts +3 -3
- package/dist/src/services/preferences/preferences-types.js +2 -2
- package/dist/src/services/role/role-registry.d.ts +1 -1
- package/dist/src/services/role/role-registry.js +1 -1
- package/dist/src/services/sc/sc-service.js +3 -3
- package/dist/src/services/skill/resume-detector.js +2 -2
- package/dist/src/services/skills/sync-service.d.ts +3 -3
- package/dist/src/services/skills/sync-service.js +9 -9
- package/dist/src/services/slice/calibration-store.d.ts +1 -1
- package/dist/src/services/slice/calibration-store.js +1 -1
- package/dist/src/services/solo/auto-compact-orchestrator.d.ts +1 -1
- package/dist/src/services/solo/auto-compact-orchestrator.js +7 -7
- package/dist/src/services/solo/dag-orchestrator.js +1 -1
- package/dist/src/services/solo/mode-gate.d.ts +1 -1
- package/dist/src/services/solo/mode-gate.js +4 -4
- package/dist/src/services/solo/user-touchpoint-classifier.js +1 -1
- package/dist/src/services/standards/migrate-claude-rules-service.js +5 -5
- package/dist/src/services/standards/migrate-service.d.ts +3 -3
- package/dist/src/services/standards/migrate-service.js +5 -5
- package/dist/src/services/standards/project-standards-service.js +1 -1
- package/dist/src/services/upgrade/gitignore-migrate-service.d.ts +3 -3
- package/dist/src/services/upgrade/gitignore-migrate-service.js +4 -4
- package/dist/src/services/upgrade/upgrade-service.d.ts +1 -1
- package/dist/src/services/upgrade/upgrade-service.js +5 -5
- package/dist/src/services/verdict/envelopes.d.ts +1 -1
- package/dist/src/services/verdict/envelopes.js +1 -1
- package/dist/src/services/workflow/workflow-loader.js +1 -1
- package/dist/src/services/workspace/migrate-1-4-1-service.d.ts +1 -1
- package/dist/src/services/workspace/migrate-1-4-1-service.js +1 -1
- package/dist/src/services/workspace/migrate-types.d.ts +1 -1
- package/dist/src/services/workspace/migrate-types.js +1 -1
- package/dist/src/services/workspace/workspace-claude-settings-materializer.d.ts +2 -2
- package/dist/src/services/workspace/workspace-claude-settings-materializer.js +9 -9
- package/dist/src/services/workspace/workspace-service.d.ts +1 -1
- package/dist/src/services/workspace/workspace-service.js +1 -1
- package/dist/src/shared/path-safety.d.ts +1 -1
- package/dist/src/shared/path-safety.js +1 -1
- package/dist/src/shared/version.d.ts +1 -1
- package/dist/src/shared/version.js +1 -1
- package/output-styles/peaks-skill-swarm.md +33 -33
- package/package.json +5 -4
- package/schemas/decomposition-v1.json +1 -1
- package/schemas/decomposition-v2.json +1 -1
- package/schemas/replay-fixture.schema.json +1 -1
- package/schemas/reviewer-envelope.schema.json +1 -1
- package/scripts/install-skills.mjs +11 -11
- package/skills/peaks-audit/SKILL.md +2 -2
- package/skills/peaks-doctor/SKILL.md +4 -4
- package/skills/peaks-final-review/SKILL.md +2 -2
- package/skills/peaks-ide/SKILL.md +3 -3
- package/skills/peaks-perf-audit/SKILL.md +1 -1
- package/skills/peaks-prd/SKILL.md +14 -14
- package/skills/peaks-prd/references/workflow.md +1 -1
- package/skills/peaks-qa/SKILL.md +17 -17
- package/skills/peaks-qa/references/artifact-per-request.md +1 -1
- package/skills/peaks-qa/references/browser-validation-contracts.md +2 -2
- package/skills/peaks-qa/references/codegraph-regression-focus.md +1 -1
- package/skills/peaks-qa/references/external-capability-guidance.md +2 -2
- package/skills/peaks-qa/references/qa-fanout-contract.md +1 -1
- package/skills/peaks-qa/references/qa-gstack-integration.md +3 -3
- package/skills/peaks-qa/references/qa-local-artifacts.md +1 -1
- package/skills/peaks-qa/references/qa-matt-pocock-integration.md +1 -1
- package/skills/peaks-qa/references/qa-runbook.md +3 -3
- package/skills/peaks-qa/references/qa-skill-presence.md +1 -1
- package/skills/peaks-qa/references/qa-standards-preflight.md +2 -2
- package/skills/peaks-qa/references/qa-transition-gates.md +9 -9
- package/skills/peaks-qa/references/regression-gates.md +1 -1
- package/skills/peaks-rd/SKILL.md +13 -13
- package/skills/peaks-rd/references/artifact-and-standards-output.md +1 -1
- package/skills/peaks-rd/references/codegraph-project-analysis.md +1 -1
- package/skills/peaks-rd/references/external-references.md +3 -3
- package/skills/peaks-rd/references/karpathy-reviewer-prompt.md +1 -1
- package/skills/peaks-rd/references/mandatory-perf-baseline.md +1 -1
- package/skills/peaks-rd/references/matt-pocock-integration.md +2 -2
- package/skills/peaks-rd/references/ocr-integration.md +19 -19
- package/skills/peaks-rd/references/openspec-cli.md +2 -2
- package/skills/peaks-rd/references/rd-gstack-integration.md +5 -5
- package/skills/peaks-rd/references/rd-runbook.md +9 -9
- package/skills/peaks-rd/references/rd-standards-preflight.md +1 -1
- package/skills/peaks-rd/references/rd-transition-gates.md +13 -13
- package/skills/peaks-rd/references/skill-presence-and-title.md +1 -1
- package/skills/peaks-reviewer/SKILL.md +2 -2
- package/skills/peaks-sc/SKILL.md +9 -9
- package/skills/peaks-security-audit/SKILL.md +1 -1
- package/skills/peaks-slice-decompose/SKILL.md +2 -2
- package/skills/peaks-solo/SKILL.md +49 -49
- package/skills/peaks-solo/references/a2a-artifact-mapping.md +8 -8
- package/skills/peaks-solo/references/anchoring-and-session-info.md +3 -3
- package/skills/peaks-solo/references/boundaries.md +4 -4
- package/skills/peaks-solo/references/browser-workflow.md +2 -2
- package/skills/peaks-solo/references/codegraph-orchestration.md +1 -1
- package/skills/peaks-solo/references/completion-handoff.md +2 -2
- package/skills/peaks-solo/references/external-references.md +3 -3
- package/skills/peaks-solo/references/external-skill-invocation.md +2 -2
- package/skills/peaks-solo/references/frontend-only-mode.md +1 -1
- package/skills/peaks-solo/references/gstack-integration.md +4 -4
- package/skills/peaks-solo/references/local-artifact-workspace.md +2 -2
- package/skills/peaks-solo/references/micro-cycle.md +4 -4
- package/skills/peaks-solo/references/mode-selection.md +5 -5
- package/skills/peaks-solo/references/openspec-workflow.md +2 -2
- package/skills/peaks-solo/references/playwright-mcp-multi-terminal.md +1 -1
- package/skills/peaks-solo/references/project-memory-loading.md +1 -1
- package/skills/peaks-solo/references/project-scan-checklist.md +1 -1
- package/skills/peaks-solo/references/quality-gate-cheatsheet.md +1 -1
- package/skills/peaks-solo/references/resume-detection.md +1 -1
- package/skills/peaks-solo/references/runbook.md +20 -20
- package/skills/peaks-solo/references/skill-presence-and-title.md +2 -2
- package/skills/peaks-solo/references/standards-preflight.md +2 -2
- package/skills/peaks-solo/references/step-0-55-1x-detection.md +3 -3
- package/skills/peaks-solo/references/sub-agent-dispatch.md +3 -3
- package/skills/peaks-solo/references/swarm-dispatch-contract.md +3 -3
- package/skills/peaks-solo/references/workflow-gates-and-types.md +34 -34
- package/skills/peaks-solo-resume/SKILL.md +2 -2
- package/skills/peaks-solo-status/SKILL.md +4 -4
- package/skills/peaks-solo-test/SKILL.md +4 -4
- package/skills/peaks-sop/SKILL.md +5 -5
- package/skills/peaks-txt/SKILL.md +17 -17
- package/skills/peaks-ui/SKILL.md +17 -17
- package/skills/peaks-ui/references/workflow.md +1 -1
|
@@ -8,12 +8,12 @@ import { fail, ok } from '../../shared/result.js';
|
|
|
8
8
|
export function registerUpgradeCommands(program, io) {
|
|
9
9
|
addJsonOption(program
|
|
10
10
|
.command('upgrade')
|
|
11
|
-
.description('Upgrade a peaks-
|
|
11
|
+
.description('Upgrade a peaks-loop 1.x project to 2.0. Umbrella that orquestrates 7 sub-commands: config-migrate / standards-migrate / memory-extract / hooks-install / skill-sync / audit-verify + write-upgrade-record. Per the "one-key completion" tenet, prefer letting `npm i -g peaks-loop@2.0` postinstall run this for you. Use `--detect-1x` for a read-only probe (no file writes) that the peaks-solo skill uses to gate the 1.x → 2.0 AskUserQuestion.')
|
|
12
12
|
.option('--to <version>', 'target version (only "2.0" supported)', '2.0')
|
|
13
13
|
.option('--project <path>', 'project root to upgrade (default: cwd)')
|
|
14
14
|
.option('--auto', 'non-interactive: accept soft-fail on any sub-step (used by the postinstall hook)')
|
|
15
15
|
.option('--detect-1x', 'read-only probe: returns the 1.x state as JSON (no file writes); consumed by peaks-solo Step 0.55 to gate the AskUserQuestion')
|
|
16
|
-
.option('--apply-init', 'slice 4 (slice 2026-06-13-selfheal-claude-settings-template): run initWorkspace so the drift-driven self-heal fires on the consumer-project .claude/settings.local.json and the offline .peaks/.claude-settings-template.json. Idempotent. Use after a peaks-
|
|
16
|
+
.option('--apply-init', 'slice 4 (slice 2026-06-13-selfheal-claude-settings-template): run initWorkspace so the drift-driven self-heal fires on the consumer-project .claude/settings.local.json and the offline .peaks/.claude-settings-template.json. Idempotent. Use after a peaks-loop version bump if you do not otherwise re-run init. Mutually exclusive with --detect-1x.')).action(async (options) => {
|
|
17
17
|
const projectRoot = options.project ?? process.cwd();
|
|
18
18
|
// Branch 1: --detect-1x (read-only probe)
|
|
19
19
|
if (options.detect1x === true) {
|
|
@@ -39,13 +39,13 @@ export function registerUpgradeCommands(program, io) {
|
|
|
39
39
|
// Branch 2: --apply-init (slice 4 — slice 2026-06-13-selfheal-claude-settings-template).
|
|
40
40
|
//
|
|
41
41
|
// The drift-driven self-heal inside initWorkspace only fires when
|
|
42
|
-
// the user invokes init. After a peaks-
|
|
42
|
+
// the user invokes init. After a peaks-loop version bump, users who
|
|
43
43
|
// never re-run init are stuck with stale templates until they do.
|
|
44
44
|
// This flag is the post-bump escape hatch: it triggers init for them.
|
|
45
45
|
//
|
|
46
46
|
// We do NOT pass --session-id (the CLI auto-generates / reuses an
|
|
47
47
|
// existing binding). We do NOT pass --no-claude-hooks (the goal is to
|
|
48
|
-
// bring the project to the current peaks-
|
|
48
|
+
// bring the project to the current peaks-loop baseline, including the
|
|
49
49
|
// consumer-project hook).
|
|
50
50
|
if (options.applyInit === true) {
|
|
51
51
|
try {
|
|
@@ -67,7 +67,7 @@ export function registerUpgradeCommands(program, io) {
|
|
|
67
67
|
// Surface the same self-heal messaging that workspace-init uses.
|
|
68
68
|
if (result.claudeSettings.offlineTemplate.action === 'refreshed') {
|
|
69
69
|
nextActions.push(`Self-healed .peaks/.claude-settings-template.json (action: refreshed) — ` +
|
|
70
|
-
'the offline recovery anchor now matches the current peaks-
|
|
70
|
+
'the offline recovery anchor now matches the current peaks-loop template.');
|
|
71
71
|
nextActions.push('⚠️ If you had manually edited .peaks/.claude-settings-template.json, ' +
|
|
72
72
|
'those edits have been overwritten by the self-heal.');
|
|
73
73
|
}
|
|
@@ -77,7 +77,7 @@ export function registerUpgradeCommands(program, io) {
|
|
|
77
77
|
}
|
|
78
78
|
if (result.claudeSettings.action === 'refreshed') {
|
|
79
79
|
nextActions.push(`Refreshed .claude/settings.local.json (action: refreshed) — ` +
|
|
80
|
-
'the consumer-project hook now matches the current peaks-
|
|
80
|
+
'the consumer-project hook now matches the current peaks-loop template. ' +
|
|
81
81
|
'Restart Claude Code so the hooks take effect.');
|
|
82
82
|
}
|
|
83
83
|
else if (result.claudeSettings.action === 'written') {
|
|
@@ -183,7 +183,7 @@ export function registerWorkspaceInitCommand(workspace, io) {
|
|
|
183
183
|
// Slice 2026-06-13-selfheal-claude-settings-template: surface
|
|
184
184
|
// the self-heal outcome for the offline
|
|
185
185
|
// `.peaks/.claude-settings-template.json` copy. When the offline
|
|
186
|
-
// file was refreshed (i.e. the previous peaks-
|
|
186
|
+
// file was refreshed (i.e. the previous peaks-loop release left
|
|
187
187
|
// a stale version without the `node -e "..."` wrapper), the user
|
|
188
188
|
// benefits from seeing that the manual-recovery anchor now
|
|
189
189
|
// points at the corrected template. We surface `written` and
|
|
@@ -197,7 +197,7 @@ export function registerWorkspaceInitCommand(workspace, io) {
|
|
|
197
197
|
// to make sure anyone who customised sees the prompt.
|
|
198
198
|
if (report.claudeSettings.offlineTemplate.action === 'refreshed') {
|
|
199
199
|
nextActions.push(`Self-healed .peaks/.claude-settings-template.json (action: refreshed) — ` +
|
|
200
|
-
'the offline recovery anchor now matches the current peaks-
|
|
200
|
+
'the offline recovery anchor now matches the current peaks-loop template. ' +
|
|
201
201
|
'No action required; future manual recoveries will copy the corrected wrapper.');
|
|
202
202
|
nextActions.push('⚠️ If you had manually edited .peaks/.claude-settings-template.json, ' +
|
|
203
203
|
'those edits have been overwritten by the self-heal. ' +
|
package/dist/src/cli/program.js
CHANGED
|
@@ -69,6 +69,11 @@ import { registerMutCommands } from './commands/mut-commands.js';
|
|
|
69
69
|
import { registerFixtureCommands } from './commands/fixture-commands.js';
|
|
70
70
|
import { registerReviewerCommands } from './commands/reviewer-commands.js';
|
|
71
71
|
import { registerObservabilityCommands } from './commands/observability-commands.js';
|
|
72
|
+
// Slice 2026-07-01-strategic-compact-cli: peaks compact
|
|
73
|
+
// (suggest | recommend | survival | dry-run | force) — strategic-compact
|
|
74
|
+
// CLI primitives. See src/services/compact/ and
|
|
75
|
+
// src/cli/commands/compact-command.ts.
|
|
76
|
+
import { registerCompactCommands } from './commands/compact-command.js';
|
|
72
77
|
import { applyRetention } from '../services/log/retention.js';
|
|
73
78
|
import { writeLogEntry, maybeWriteStderr } from '../services/log/logger.js';
|
|
74
79
|
export { printResult } from './cli-helpers.js';
|
|
@@ -279,7 +284,7 @@ Run peaks (no arguments) for a quickstart. You likely want one of:
|
|
|
279
284
|
// Slice #13: peaks swarm * — additional subcommands (pipeline /
|
|
280
285
|
// dispatch / verify / loop) are added inline in workflow-commands.ts
|
|
281
286
|
// alongside the existing swarm.plan. This avoids the duplicate top-level
|
|
282
|
-
// command conflict (peaks-
|
|
287
|
+
// command conflict (peaks-loop-when-adding-a-new-subcommand-check-for-existing-top-level-first).
|
|
283
288
|
// Slice #14: peaks loop * + peaks goal compose — L4 Agent Loop sub-features.
|
|
284
289
|
registerLoopCommands(program, io);
|
|
285
290
|
// Slice v3.0.0 loop-eng-native-solo-a-b: peaks workflow run|plan|lint
|
|
@@ -332,5 +337,9 @@ Run peaks (no arguments) for a quickstart. You likely want one of:
|
|
|
332
337
|
// (read-only queries over the JSONL metrics emitted from the
|
|
333
338
|
// peaks request transition hook in Slice A).
|
|
334
339
|
registerObservabilityCommands(program, io);
|
|
340
|
+
// Slice 2026-07-01-strategic-compact-cli: `peaks compact
|
|
341
|
+
// suggest|recommend|survival|dry-run|force` — strategic-compact CLI
|
|
342
|
+
// primitives. See src/cli/commands/compact-command.ts.
|
|
343
|
+
registerCompactCommands(program, io);
|
|
335
344
|
return program;
|
|
336
345
|
}
|
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
* ECC 64 agents soft-optional integration — `peaks agent run`.
|
|
3
3
|
*
|
|
4
4
|
* Per spec §7.2 line 818: "64 agents — Soft Optional — 装了 L3
|
|
5
|
-
* 直接调; 不装 L3 退化到 peaks-
|
|
5
|
+
* 直接调; 不装 L3 退化到 peaks-loop 自有少数核心诊断". The
|
|
6
6
|
* canonical ECC subprocess contract is:
|
|
7
7
|
*
|
|
8
8
|
* npx ecc consult "<topic>" --target claude
|
|
9
9
|
* npx ecc agent run <agent-name> --target <path> --json
|
|
10
10
|
*
|
|
11
|
-
* The peaks-
|
|
11
|
+
* The peaks-loop `peaks agent run <name> --target <path> --json`
|
|
12
12
|
* CLI shells out to the second form. When ECC is missing OR
|
|
13
13
|
* `agentShieldEnabled: false`, the audit completes with a
|
|
14
|
-
* peaks-
|
|
14
|
+
* peaks-loop-only envelope.
|
|
15
15
|
*
|
|
16
16
|
* Mirrors `static-service.ts` (the ECC AgentShield wrapper from
|
|
17
17
|
* L2.3 P2-a): same `subprocessRunner` injection point, same
|
|
@@ -102,7 +102,7 @@ export function runEccAgent(input, runner = defaultSubprocessRunner) {
|
|
|
102
102
|
reason = 'flag-enabled-but-ecc-missing';
|
|
103
103
|
spawned = false;
|
|
104
104
|
warnings.push('`npx ecc --version` failed. Run `npx ecc --help` to install ECC, ' +
|
|
105
|
-
'then re-run `peaks agent run`. The peaks-
|
|
105
|
+
'then re-run `peaks agent run`. The peaks-loop native diagnostic ' +
|
|
106
106
|
'still runs via `peaks doctor scan`.');
|
|
107
107
|
}
|
|
108
108
|
else {
|
|
@@ -123,7 +123,7 @@ export function runEccAgent(input, runner = defaultSubprocessRunner) {
|
|
|
123
123
|
parsed = JSON.parse(subResult.stdout);
|
|
124
124
|
}
|
|
125
125
|
catch {
|
|
126
|
-
// Non-JSON output is allowed; peaks-
|
|
126
|
+
// Non-JSON output is allowed; peaks-loop surfaces the raw
|
|
127
127
|
// stdout for the human reader and treats the run as
|
|
128
128
|
// ok=true (the subprocess exited 0).
|
|
129
129
|
parsed = undefined;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Generalizes the original `decision-writer.ts` (which only knew how to
|
|
5
5
|
* persist a `RedLineAudit` snapshot) into a polymorphic writer that
|
|
6
|
-
* handles the 4 artifact types produced during a peaks-
|
|
6
|
+
* handles the 4 artifact types produced during a peaks-loop audit:
|
|
7
7
|
*
|
|
8
8
|
* 1. **decision** — `RedLineAudit` snapshot → audit-decisions/<slug>.md
|
|
9
9
|
* 2. **prompt** — methodology input (LLM-facing text) → audit-prompts/<slug>.md
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Generalizes the original `decision-writer.ts` (which only knew how to
|
|
5
5
|
* persist a `RedLineAudit` snapshot) into a polymorphic writer that
|
|
6
|
-
* handles the 4 artifact types produced during a peaks-
|
|
6
|
+
* handles the 4 artifact types produced during a peaks-loop audit:
|
|
7
7
|
*
|
|
8
8
|
* 1. **decision** — `RedLineAudit` snapshot → audit-decisions/<slug>.md
|
|
9
9
|
* 2. **prompt** — methodology input (LLM-facing text) → audit-prompts/<slug>.md
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* ephemeral state. The subdir is named for human discoverability; the
|
|
22
22
|
* memory service's recursive scan picks it up automatically.
|
|
23
23
|
*
|
|
24
|
-
* 3. **No new CLI subcommand.** Per `peaks-
|
|
24
|
+
* 3. **No new CLI subcommand.** Per `peaks-loop-when-adding-a-new-subcommand-…`
|
|
25
25
|
* we extend the existing `peaks audit static` with a `--record` flag
|
|
26
26
|
* instead of adding `peaks audit record` (which would be a new
|
|
27
27
|
* top-level shape and conflict with the dev-preference red line
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* ephemeral state. The subdir is named for human discoverability; the
|
|
22
22
|
* memory service's recursive scan picks it up automatically.
|
|
23
23
|
*
|
|
24
|
-
* 3. **No new CLI subcommand.** Per `peaks-
|
|
24
|
+
* 3. **No new CLI subcommand.** Per `peaks-loop-when-adding-a-new-subcommand-…`
|
|
25
25
|
* we extend the existing `peaks audit static` with a `--record` flag
|
|
26
26
|
* instead of adding `peaks audit record` (which would be a new
|
|
27
27
|
* top-level shape and conflict with the dev-preference red line
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* P2-a Theme C — output style enforcers.
|
|
3
3
|
*
|
|
4
|
-
* The peaks-
|
|
5
|
-
* header (`Peaks-
|
|
4
|
+
* The peaks-loop dogfood rule: every skill response carries a status
|
|
5
|
+
* header (`Peaks-Loop Skill: <name> | Peaks-Loop Gate: <gate> | Next:
|
|
6
6
|
* <action>`), the SKILL.md body has no greeting/closing-prompt
|
|
7
7
|
* flattery, and the status header is detectable in the recent
|
|
8
8
|
* session transcript (test-only fixture).
|
|
@@ -32,7 +32,7 @@ const CLOSING_PROMPTS = [
|
|
|
32
32
|
/\b随时(欢迎)?(联系|提问)/i,
|
|
33
33
|
/\b随时 (欢迎 )?(联系|提问)/i
|
|
34
34
|
];
|
|
35
|
-
const STATUS_HEADER_PATTERN = /Peaks-
|
|
35
|
+
const STATUS_HEADER_PATTERN = /Peaks-Loop Skill:\s*peaks-[a-z0-9-]+\s*\|\s*Peaks-Loop Gate:\s*[A-Za-z0-9_.-]+\s*\|\s*Next:\s*\S/;
|
|
36
36
|
export function lintNoFluff(skill) {
|
|
37
37
|
const hits = [];
|
|
38
38
|
for (const pattern of FLUFF_GREETINGS) {
|
|
@@ -84,10 +84,10 @@ export function lintStatusHeader(projectRoot, sessionId) {
|
|
|
84
84
|
if (!STATUS_HEADER_PATTERN.test(body)) {
|
|
85
85
|
return [{
|
|
86
86
|
catalogId: 'rl-output-style-status-header-001',
|
|
87
|
-
rule: 'Peaks-
|
|
87
|
+
rule: 'Peaks-Loop status header on every response',
|
|
88
88
|
file: logPath,
|
|
89
89
|
line: 1,
|
|
90
|
-
matchedText: '(no Peaks-
|
|
90
|
+
matchedText: '(no Peaks-Loop Skill / Gate / Next header found in session.log)'
|
|
91
91
|
}];
|
|
92
92
|
}
|
|
93
93
|
return [];
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Per L2 redesign §5.4. Mocks belong in `tests/fixtures/`, not inline.
|
|
8
8
|
* Per `references/mock-data-placement.md` from peaks-rd: framework-aware
|
|
9
|
-
* mock placement. peaks-
|
|
9
|
+
* mock placement. peaks-loop has no UI framework, but the rule still
|
|
10
10
|
* applies for non-fixture files.
|
|
11
11
|
*/
|
|
12
12
|
export interface MockPlacementCheckInput {
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Per L2 redesign §5.4. Mocks belong in `tests/fixtures/`, not inline.
|
|
8
8
|
* Per `references/mock-data-placement.md` from peaks-rd: framework-aware
|
|
9
|
-
* mock placement. peaks-
|
|
9
|
+
* mock placement. peaks-loop has no UI framework, but the rule still
|
|
10
10
|
* applies for non-fixture files.
|
|
11
11
|
*/
|
|
12
12
|
const MOCK_PATTERNS = [
|
|
@@ -18,7 +18,7 @@ const ROOT_FILE_ALLOWLIST = new Set([
|
|
|
18
18
|
'tsconfig.*.json', 'vitest.config.ts', 'vite.config.ts', '.npmrc', '.nvmrc',
|
|
19
19
|
// VCS / editor
|
|
20
20
|
'.gitignore', '.gitattributes', '.editorconfig', '.gitkeep',
|
|
21
|
-
// Project-local config dirs (peaks-
|
|
21
|
+
// Project-local config dirs (peaks-loop convention)
|
|
22
22
|
'openspec', '.peaks', '.claude', '.peaksrc',
|
|
23
23
|
// Source dirs (writes into them are normal)
|
|
24
24
|
'src', 'tests', 'bin', 'scripts', 'schemas', 'output-styles', 'docs',
|
|
@@ -73,9 +73,9 @@ const FRONTMATTER_APPLICABLE_TASK_LEVELS = {
|
|
|
73
73
|
/** Theme C — Output style (3 enforcers) */
|
|
74
74
|
const OUTPUT_STYLE_STATUS_HEADER = {
|
|
75
75
|
id: 'rl-output-style-status-header-001',
|
|
76
|
-
rule: 'Output style: Peaks-
|
|
76
|
+
rule: 'Output style: Peaks-Loop status header on every response',
|
|
77
77
|
markers: ['MANDATORY'],
|
|
78
|
-
phrases: ['peaks-
|
|
78
|
+
phrases: ['peaks-loop skill:', 'peaks-loop gate:', 'peaks-loop next:', 'status header'],
|
|
79
79
|
enforcerRef: 'src/services/audit/enforcers/lint-output-style.ts',
|
|
80
80
|
};
|
|
81
81
|
const OUTPUT_STYLE_NO_FLUFF = {
|
|
@@ -118,7 +118,7 @@ const REF_NO_BASH_HEREDOC = {
|
|
|
118
118
|
};
|
|
119
119
|
const REF_NO_SUDO = {
|
|
120
120
|
id: 'rl-ref-no-sudo-001',
|
|
121
|
-
rule: 'Reference inline shell: no `sudo` (peaks-
|
|
121
|
+
rule: 'Reference inline shell: no `sudo` (peaks-loop is user-scope)',
|
|
122
122
|
markers: ['MUST NOT'],
|
|
123
123
|
phrases: ['no sudo', 'user-scope', 'sudo command'],
|
|
124
124
|
enforcerRef: 'src/services/audit/enforcers/lint-reference-shape.ts',
|
|
@@ -147,7 +147,7 @@ const REF_NO_FAKE_PROMPT = {
|
|
|
147
147
|
};
|
|
148
148
|
const REF_NO_ABSOLUTE_PATHS = {
|
|
149
149
|
id: 'rl-ref-no-absolute-paths-001',
|
|
150
|
-
rule: 'Reference code blocks: no `C:\\` or `/usr/local` (use peaks-
|
|
150
|
+
rule: 'Reference code blocks: no `C:\\` or `/usr/local` (use peaks-loop primitives)',
|
|
151
151
|
markers: ['MUST NOT'],
|
|
152
152
|
phrases: ['absolute path', 'c:\\', '/usr/local', 'machine-specific'],
|
|
153
153
|
enforcerRef: 'src/services/audit/enforcers/lint-reference-shape.ts',
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* (102 lint rules) on a soft-optional basis. When ECC is installed
|
|
8
8
|
* AND `agentShieldEnabled: true`, the audit subprocess spawns the
|
|
9
9
|
* ECC scanner and merges its findings; when either is missing, the
|
|
10
|
-
* audit completes with peaks-
|
|
10
|
+
* audit completes with peaks-loop-only findings.
|
|
11
11
|
*
|
|
12
12
|
* The subprocess is **observability enhancement**, not a structural
|
|
13
13
|
* gate — every soft-fail path returns a well-formed audit report.
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* (102 lint rules) on a soft-optional basis. When ECC is installed
|
|
8
8
|
* AND `agentShieldEnabled: true`, the audit subprocess spawns the
|
|
9
9
|
* ECC scanner and merges its findings; when either is missing, the
|
|
10
|
-
* audit completes with peaks-
|
|
10
|
+
* audit completes with peaks-loop-only findings.
|
|
11
11
|
*
|
|
12
12
|
* The subprocess is **observability enhancement**, not a structural
|
|
13
13
|
* gate — every soft-fail path returns a well-formed audit report.
|
|
@@ -52,8 +52,8 @@ function isEccInstalled(runner) {
|
|
|
52
52
|
function runEccScan(projectRoot, runner) {
|
|
53
53
|
try {
|
|
54
54
|
// Per spec §7.2 line 828: the canonical ECC subprocess call uses
|
|
55
|
-
// `--target <path>`, NOT `--project`. The peaks-
|
|
56
|
-
// (`peaks audit static --project <path>`) follows peaks-
|
|
55
|
+
// `--target <path>`, NOT `--project`. The peaks-loop CLI flag
|
|
56
|
+
// (`peaks audit static --project <path>`) follows peaks-loop
|
|
57
57
|
// convention; the inner ecc-agentshield call follows the
|
|
58
58
|
// upstream ECC contract.
|
|
59
59
|
const result = runner.run('npx', ['ecc-agentshield', 'scan', '--json', '--target', projectRoot], ECC_SCAN_TIMEOUT_MS);
|
|
@@ -104,7 +104,7 @@ export function runStaticAudit(input) {
|
|
|
104
104
|
else if (!installed) {
|
|
105
105
|
// Enabled but ECC missing — soft-fail with a warning.
|
|
106
106
|
warnings.push('agentShieldEnabled is true but `npx ecc-agentshield --version` failed. ' +
|
|
107
|
-
'Run `npx ecc-agentshield --help` to install. Audit ran with peaks-
|
|
107
|
+
'Run `npx ecc-agentshield --help` to install. Audit ran with peaks-loop findings only.');
|
|
108
108
|
state = { spawned: false, installed: false, reason: 'flag-enabled-but-ecc-missing', findings: [] };
|
|
109
109
|
}
|
|
110
110
|
else {
|
|
@@ -112,7 +112,7 @@ export function runStaticAudit(input) {
|
|
|
112
112
|
const findings = runEccScan(input.projectRoot, runner);
|
|
113
113
|
state = { spawned: true, installed: true, reason: 'enabled-and-installed', findings };
|
|
114
114
|
}
|
|
115
|
-
// Always run the peaks-
|
|
115
|
+
// Always run the peaks-loop lint layer; merge ECC findings.
|
|
116
116
|
const peaksResult = runRedLinesAudit({ projectRoot: input.projectRoot });
|
|
117
117
|
const mergedAudit = {
|
|
118
118
|
...peaksResult.audit,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Red-line audit framework — types.
|
|
3
3
|
*
|
|
4
|
-
* Spec: docs/superpowers/specs/2026-06-11-peaks-
|
|
4
|
+
* Spec: docs/superpowers/specs/2026-06-11-peaks-loop-l1-l2-l3-redesign.md §5
|
|
5
5
|
* PRD: .peaks/_runtime/2026-06-11-session-f0312d/prd/requests/001-001-l2-1-redlines-audit.md
|
|
6
6
|
* OpenSpec: openspec/changes/2026-06-11-l2-1-redlines-audit/
|
|
7
7
|
*
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Red-line audit framework — types.
|
|
3
3
|
*
|
|
4
|
-
* Spec: docs/superpowers/specs/2026-06-11-peaks-
|
|
4
|
+
* Spec: docs/superpowers/specs/2026-06-11-peaks-loop-l1-l2-l3-redesign.md §5
|
|
5
5
|
* PRD: .peaks/_runtime/2026-06-11-session-f0312d/prd/requests/001-001-l2-1-redlines-audit.md
|
|
6
6
|
* OpenSpec: openspec/changes/2026-06-11-l2-1-redlines-audit/
|
|
7
7
|
*
|
|
@@ -186,7 +186,7 @@ export function detectPerfAudit(input) {
|
|
|
186
186
|
],
|
|
187
187
|
nextActions: [
|
|
188
188
|
'Verify the perf-audit skill prompt matches PRD AC-3.x output shape.',
|
|
189
|
-
'If the envelope shape is intentionally different, file a bug at the peaks-
|
|
189
|
+
'If the envelope shape is intentionally different, file a bug at the peaks-loop repo.'
|
|
190
190
|
]
|
|
191
191
|
};
|
|
192
192
|
}
|
|
@@ -197,7 +197,7 @@ export function detectSecurityAudit(input) {
|
|
|
197
197
|
],
|
|
198
198
|
nextActions: [
|
|
199
199
|
'Verify the security-audit skill prompt matches PRD AC-2.x output shape.',
|
|
200
|
-
'If the envelope shape is intentionally different, file a bug at the peaks-
|
|
200
|
+
'If the envelope shape is intentionally different, file a bug at the peaks-loop repo.'
|
|
201
201
|
]
|
|
202
202
|
};
|
|
203
203
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* L1a task classification service.
|
|
3
3
|
*
|
|
4
|
-
* Spec: docs/superpowers/specs/2026-06-11-peaks-
|
|
4
|
+
* Spec: docs/superpowers/specs/2026-06-11-peaks-loop-l1-l2-l3-redesign.md §4
|
|
5
5
|
*
|
|
6
6
|
* Hybrid mechanism: signal-based heuristic + user override + audit log.
|
|
7
7
|
*
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* L1a task classification service.
|
|
3
3
|
*
|
|
4
|
-
* Spec: docs/superpowers/specs/2026-06-11-peaks-
|
|
4
|
+
* Spec: docs/superpowers/specs/2026-06-11-peaks-loop-l1-l2-l3-redesign.md §4
|
|
5
5
|
*
|
|
6
6
|
* Hybrid mechanism: signal-based heuristic + user override + audit log.
|
|
7
7
|
*
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* L1a task classification — types and per-level gate sets.
|
|
3
3
|
*
|
|
4
|
-
* Spec: docs/superpowers/specs/2026-06-11-peaks-
|
|
4
|
+
* Spec: docs/superpowers/specs/2026-06-11-peaks-loop-l1-l2-l3-redesign.md §4
|
|
5
5
|
*
|
|
6
6
|
* Five task levels: typo / bug / feature / refactor / migration. Each
|
|
7
7
|
* level has a gate set (the "配套 gate set" — L1b) that the slice
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* L1a task classification — types and per-level gate sets.
|
|
3
3
|
*
|
|
4
|
-
* Spec: docs/superpowers/specs/2026-06-11-peaks-
|
|
4
|
+
* Spec: docs/superpowers/specs/2026-06-11-peaks-loop-l1-l2-l3-redesign.md §4
|
|
5
5
|
*
|
|
6
6
|
* Five task levels: typo / bug / feature / refactor / migration. Each
|
|
7
7
|
* level has a gate set (the "配套 gate set" — L1b) that the slice
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* Gate B3 already reads (`mustContain: ['## Findings', 'CRITICAL']`).
|
|
7
7
|
*
|
|
8
8
|
* Companion to `ocr-service.ts`: ECC is the in-skill agent option
|
|
9
|
-
* (uses peaks-
|
|
9
|
+
* (uses peaks-loop's own Agent tool surface), ocr is the external
|
|
10
10
|
* subprocess option. Both produce a second-opinion code review that
|
|
11
11
|
* the parent RD loop aggregates alongside its own inline review.
|
|
12
12
|
*
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
*
|
|
27
27
|
* ECC is shipped via the `everything-claude-code` plugin, not as a
|
|
28
28
|
* separate npm package. The user installs the plugin (a one-time
|
|
29
|
-
* marketplace step); peaks-
|
|
29
|
+
* marketplace step); peaks-loop does not write or read any LLM
|
|
30
30
|
* endpoint config for ECC. If a future ECC release needs user-
|
|
31
31
|
* managed config (URL / token / model), add a `peaksConfig.ecc.*`
|
|
32
32
|
* block then — not speculatively now.
|
|
@@ -210,8 +210,8 @@ export function detectEcc(input) {
|
|
|
210
210
|
'ECC `code-review` agent returned a value that failed envelope validation (expected { passed, violations, gateAction }).'
|
|
211
211
|
],
|
|
212
212
|
nextActions: [
|
|
213
|
-
'Verify the ECC plugin version is compatible with peaks-
|
|
214
|
-
'If the envelope shape is intentionally different, file a bug at the peaks-
|
|
213
|
+
'Verify the ECC plugin version is compatible with peaks-loop 2.11.0+ (this bridge).',
|
|
214
|
+
'If the envelope shape is intentionally different, file a bug at the peaks-loop repo.'
|
|
215
215
|
]
|
|
216
216
|
};
|
|
217
217
|
}
|
|
@@ -6,9 +6,9 @@ export interface OcrDetectResult {
|
|
|
6
6
|
readonly binaryPath: string | null;
|
|
7
7
|
readonly version: string | null;
|
|
8
8
|
/**
|
|
9
|
-
* The peaks-
|
|
9
|
+
* The peaks-loop config path that holds `peaksConfig.ocr.llm`.
|
|
10
10
|
* The user pastes the `peaks code-review config-template` output
|
|
11
|
-
* here. Empty string when peaks-
|
|
11
|
+
* here. Empty string when peaks-loop has not been bootstrapped.
|
|
12
12
|
*/
|
|
13
13
|
readonly configPath: string;
|
|
14
14
|
readonly configValid: boolean;
|
|
@@ -49,7 +49,7 @@ export interface SubprocessRunner {
|
|
|
49
49
|
/**
|
|
50
50
|
* Locate the ocr launcher script (`bin/ocr.js`) inside our own
|
|
51
51
|
* node_modules tree. Returns null when the npm package is not
|
|
52
|
-
* present (peaks-
|
|
52
|
+
* present (peaks-loop was installed but its dependency tree is
|
|
53
53
|
* corrupt, or the user removed it).
|
|
54
54
|
*
|
|
55
55
|
* Walks up from this file (dist/src/services/code-review/) to
|
|
@@ -58,7 +58,7 @@ export interface SubprocessRunner {
|
|
|
58
58
|
export declare function resolveOcrLauncher(searchRoots: readonly string[]): string | null;
|
|
59
59
|
/**
|
|
60
60
|
* Resolve search roots for the ocr launcher. We look in two
|
|
61
|
-
* places: (1) the peaks-
|
|
61
|
+
* places: (1) the peaks-loop install root (next to our own dist/),
|
|
62
62
|
* (2) the user's cwd.
|
|
63
63
|
*/
|
|
64
64
|
export declare function defaultOcrSearchRoots(currentDirPath: string, cwd: string): readonly string[];
|
|
@@ -69,19 +69,19 @@ export declare function defaultOcrSearchRoots(currentDirPath: string, cwd: strin
|
|
|
69
69
|
* the block is ready to drive the ocr subprocess.
|
|
70
70
|
*
|
|
71
71
|
* The block is independent of the OCR package's own
|
|
72
|
-
* `~/.opencodereview/config.json` file. peaks-
|
|
72
|
+
* `~/.opencodereview/config.json` file. peaks-loop only ever reads
|
|
73
73
|
* from its own config; the env-var injection in `runOcrReview`
|
|
74
74
|
* makes the legacy file irrelevant.
|
|
75
75
|
*/
|
|
76
76
|
export declare function getOcrLlmMissingFields(llm: OcrLlmConfig | null): readonly string[];
|
|
77
77
|
/**
|
|
78
|
-
* Build the env-var overlay peaks-
|
|
78
|
+
* Build the env-var overlay peaks-loop injects into the ocr
|
|
79
79
|
* subprocess. Maps `peaksConfig.ocr.llm` onto the OCR package's
|
|
80
80
|
* env-var surface (its highest-priority config source).
|
|
81
81
|
*/
|
|
82
82
|
export declare function buildOcrEnv(llm: OcrLlmConfig): NodeJS.ProcessEnv;
|
|
83
83
|
/**
|
|
84
|
-
* The JSON template the user pastes into their peaks-
|
|
84
|
+
* The JSON template the user pastes into their peaks-loop config
|
|
85
85
|
* (`peaksConfig.ocr.llm`). Returned as a stable string so the
|
|
86
86
|
* `peaks code-review config-template` CLI command can print it
|
|
87
87
|
* verbatim, and so the detector's `nextActions` payload embeds
|
|
@@ -91,7 +91,7 @@ export declare function getOcrConfigTemplate(): string;
|
|
|
91
91
|
export interface OcrDetectOptions {
|
|
92
92
|
readonly cwd: string;
|
|
93
93
|
/**
|
|
94
|
-
* The peaks-
|
|
94
|
+
* The peaks-loop config path that holds `peaksConfig.ocr.llm`.
|
|
95
95
|
* Surfaced in the detect result so the user knows where to
|
|
96
96
|
* paste the template.
|
|
97
97
|
*/
|
|
@@ -123,7 +123,7 @@ export interface OcrReviewOptions extends OcrDetectOptions {
|
|
|
123
123
|
* The LLM endpoint config from `peaksConfig.ocr.llm` is injected
|
|
124
124
|
* as env vars (`OCR_LLM_URL` / `OCR_LLM_TOKEN` / ...), which the
|
|
125
125
|
* ocr package treats as the highest-priority config source. This
|
|
126
|
-
* is how peaks-
|
|
126
|
+
* is how peaks-loop wires the user-managed config into the ocr
|
|
127
127
|
* subprocess without ever writing `~/.opencodereview/config.json`.
|
|
128
128
|
*/
|
|
129
129
|
export declare function runOcrReview(options: OcrReviewOptions): OcrReviewResult;
|