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,42 @@
|
|
|
1
|
+
import { lintSpecFile } from '../../services/loop/spec-service.js';
|
|
2
|
+
import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
|
|
3
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
4
|
+
import { loopSpecParent } from './loop-eval-parents.js';
|
|
5
|
+
export function registerLoopSpecLintCommand(program, io) {
|
|
6
|
+
const spec = loopSpecParent(program);
|
|
7
|
+
addJsonOption(spec
|
|
8
|
+
.command('lint')
|
|
9
|
+
.description('Slice E.2: schema-validate a spec.yaml file (path required).')
|
|
10
|
+
.argument('<file>', 'path to spec.yaml')
|
|
11
|
+
.option('--rid <rid>', 'override the rid embedded in the spec (default: inferred from path)')).action((file, options) => runLoopSpecLint(file, options, io));
|
|
12
|
+
}
|
|
13
|
+
function reportLoopSpecLintFailure(io, error, file, asJson) {
|
|
14
|
+
printResult(io, fail('loop.spec.lint', 'LOOP_SPEC_LINT_FAILED', getErrorMessage(error), { file }, [
|
|
15
|
+
'Verify the file path and rid flag.'
|
|
16
|
+
]), asJson);
|
|
17
|
+
process.exitCode = 1;
|
|
18
|
+
}
|
|
19
|
+
function runLoopSpecLint(file, options, io) {
|
|
20
|
+
try {
|
|
21
|
+
const result = lintSpecFile(file, options.rid);
|
|
22
|
+
if (result.spec === null) {
|
|
23
|
+
printResult(io, fail('loop.spec.lint', 'SPEC_LINT_FAILED', result.report.errors.join('; '), { file, raw: result.raw.slice(0, 200) }, ['Verify the file path and YAML syntax.']), options.json);
|
|
24
|
+
process.exitCode = 1;
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
printResult(io, ok('loop.spec.lint', {
|
|
28
|
+
file,
|
|
29
|
+
spec: result.spec,
|
|
30
|
+
lint: {
|
|
31
|
+
ok: result.report.ok,
|
|
32
|
+
errors: result.report.errors,
|
|
33
|
+
warnings: result.report.warnings
|
|
34
|
+
}
|
|
35
|
+
}, [], []), options.json);
|
|
36
|
+
if (!result.report.ok)
|
|
37
|
+
process.exitCode = 1;
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
reportLoopSpecLintFailure(io, error, file, options.json);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { addJsonOption, getErrorMessage, printResult } from '../cli-helpers.js';
|
|
2
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
3
|
+
import { resolveWorkflow, planWorkflow, planWorkflowRun } from '../../services/workflow/workflow-loader.js';
|
|
4
|
+
import { findProjectRoot } from '../../services/config/config-safety.js';
|
|
5
|
+
import { workflowCommandParent } from './loop-eval-parents.js';
|
|
6
|
+
export function registerWorkflowEvalWorkflowCommands(program, io) {
|
|
7
|
+
const workflow = workflowCommandParent(program);
|
|
8
|
+
// peaks workflow run <id>
|
|
9
|
+
addJsonOption(workflow
|
|
10
|
+
.command('run')
|
|
11
|
+
.description('Slice A.3: replay a captured workflow (.peaks/workflows/<id>.yaml) deterministically. Returns the run-plan order + per-phase status without re-deriving the phase plan.')
|
|
12
|
+
.argument('<id>', 'workflow id (matches .peaks/workflows/<id>.yaml)')
|
|
13
|
+
.requiredOption('--session <sid>', 'session id (from peaks workspace init)')
|
|
14
|
+
.option('--project <path>', 'project root (default: cwd)')).action((id, options) => runWorkflowRun(id, options, io));
|
|
15
|
+
// peaks workflow graph <id> (dry-run graph render)
|
|
16
|
+
// Renamed from `plan` to `graph` to avoid collision with the existing
|
|
17
|
+
// `peaks workflow plan <read|refresh|detect-trigger>` family registered
|
|
18
|
+
// Reuse the existing `graph` parent if `registerWorkflowLifecycleCommand`
|
|
19
|
+
// already created one (it owns `peaks workflow graph show|list`).
|
|
20
|
+
const existingGraph = workflow.commands.find((c) => c.name() === 'graph');
|
|
21
|
+
const graphParent = existingGraph ??
|
|
22
|
+
workflow
|
|
23
|
+
.command('graph')
|
|
24
|
+
.description('workflow graph read commands (slice A.3 dry-run + slice 4.0.8 lifecycle)');
|
|
25
|
+
addJsonOption(graphParent
|
|
26
|
+
.description('Slice A.3 dry-run: render the workflow graph (phases + parallel groups + evaluators + budget). No phase is executed.')
|
|
27
|
+
.argument('<id>', 'workflow id')
|
|
28
|
+
.requiredOption('--session <sid>', 'session id')
|
|
29
|
+
.option('--project <path>', 'project root (default: cwd)')).action((id, options) => runWorkflowGraph(id, options, io));
|
|
30
|
+
// peaks workflow lint <id>
|
|
31
|
+
addJsonOption(workflow
|
|
32
|
+
.command('lint')
|
|
33
|
+
.description('Slice A.3: validate a workflow spec (phases / gates / evaluators / parallel groups / budget).')
|
|
34
|
+
.argument('<id>', 'workflow id')
|
|
35
|
+
.requiredOption('--session <sid>', 'session id')
|
|
36
|
+
.option('--project <path>', 'project root (default: cwd)')).action((id, options) => runWorkflowLint(id, options, io));
|
|
37
|
+
}
|
|
38
|
+
function reportWorkflowRunFailure(io, error, sessionId, asJson) {
|
|
39
|
+
printResult(io, fail('workflow.run', 'WORKFLOW_RUN_FAILED', getErrorMessage(error), { sessionId }, [
|
|
40
|
+
'Verify the workflow id and session binding.'
|
|
41
|
+
]), asJson);
|
|
42
|
+
process.exitCode = 1;
|
|
43
|
+
}
|
|
44
|
+
function reportWorkflowGraphFailure(io, error, sessionId, asJson) {
|
|
45
|
+
printResult(io, fail('workflow.graph', 'WORKFLOW_GRAPH_FAILED', getErrorMessage(error), { sessionId }, [
|
|
46
|
+
'Verify the workflow id and session binding.'
|
|
47
|
+
]), asJson);
|
|
48
|
+
process.exitCode = 1;
|
|
49
|
+
}
|
|
50
|
+
function reportWorkflowLintFailure(io, error, sessionId, asJson) {
|
|
51
|
+
printResult(io, fail('workflow.lint', 'WORKFLOW_LINT_FAILED', getErrorMessage(error), { sessionId }, [
|
|
52
|
+
'Verify the workflow file syntax.'
|
|
53
|
+
]), asJson);
|
|
54
|
+
process.exitCode = 1;
|
|
55
|
+
}
|
|
56
|
+
function workflowRunData(sessionId, resolved, runPlan) {
|
|
57
|
+
return {
|
|
58
|
+
sessionId,
|
|
59
|
+
workflow: { id: resolved.spec.id, label: resolved.spec.label, source: resolved.source },
|
|
60
|
+
runPlan,
|
|
61
|
+
lintWarnings: resolved.lint.warnings
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function workflowGraphData(sessionId, graph, resolved) {
|
|
65
|
+
return {
|
|
66
|
+
sessionId,
|
|
67
|
+
graph,
|
|
68
|
+
lintWarnings: resolved.lint.warnings
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function runWorkflowRun(id, options, io) {
|
|
72
|
+
try {
|
|
73
|
+
const projectRoot = options.project ?? findProjectRoot(process.cwd()) ?? process.cwd();
|
|
74
|
+
const resolved = resolveWorkflow(projectRoot, id);
|
|
75
|
+
if (resolved.source.kind === 'missing') {
|
|
76
|
+
printResult(io, fail('workflow.run', 'WORKFLOW_NOT_FOUND', `workflow "${id}" not found`, { sessionId: options.session }, [`peaks workflow lint ${id} --session ${options.session} --json`]), options.json);
|
|
77
|
+
process.exitCode = 1;
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (!resolved.lint.ok) {
|
|
81
|
+
printResult(io, fail('workflow.run', 'WORKFLOW_LINT_FAILED', `workflow "${id}" has ${resolved.lint.errors.length} lint error(s): ${resolved.lint.errors.join('; ')}`, resolved.lint, [`peaks workflow lint ${id} --session ${options.session} --json`]), options.json);
|
|
82
|
+
process.exitCode = 1;
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const runPlan = planWorkflowRun(resolved.spec);
|
|
86
|
+
const data = workflowRunData(options.session, resolved, runPlan);
|
|
87
|
+
const actions = [
|
|
88
|
+
`Run \`peaks workflow plan ${id} --session ${options.session} --json\` to preview the graph.`
|
|
89
|
+
];
|
|
90
|
+
printResult(io, ok('workflow.run', data, [], actions), options.json);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
reportWorkflowRunFailure(io, error, options.session, options.json);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function runWorkflowGraph(id, options, io) {
|
|
97
|
+
try {
|
|
98
|
+
const projectRoot = options.project ?? findProjectRoot(process.cwd()) ?? process.cwd();
|
|
99
|
+
const resolved = resolveWorkflow(projectRoot, id);
|
|
100
|
+
if (resolved.source.kind === 'missing') {
|
|
101
|
+
printResult(io, fail('workflow.graph', 'WORKFLOW_NOT_FOUND', `workflow "${id}" not found`, { sessionId: options.session }, [`Create .peaks/workflows/${id}.yaml or use the bundled default-fullauto-md.`]), options.json);
|
|
102
|
+
process.exitCode = 1;
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (!resolved.lint.ok) {
|
|
106
|
+
printResult(io, fail('workflow.graph', 'WORKFLOW_LINT_FAILED', `workflow "${id}" has ${resolved.lint.errors.length} lint error(s): ${resolved.lint.errors.join('; ')}`, resolved.lint, [`peaks workflow lint ${id} --session ${options.session} --json`]), options.json);
|
|
107
|
+
process.exitCode = 1;
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
const graph = planWorkflow(resolved.spec, resolved.source);
|
|
111
|
+
const data = workflowGraphData(options.session, graph, resolved);
|
|
112
|
+
const actions = [
|
|
113
|
+
`Run \`peaks workflow run ${id} --session ${options.session} --json\` to materialize the run-plan order.`
|
|
114
|
+
];
|
|
115
|
+
printResult(io, ok('workflow.graph', data, [], actions), options.json);
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
reportWorkflowGraphFailure(io, error, options.session, options.json);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
function runWorkflowLint(id, options, io) {
|
|
122
|
+
try {
|
|
123
|
+
const projectRoot = options.project ?? findProjectRoot(process.cwd()) ?? process.cwd();
|
|
124
|
+
const resolved = resolveWorkflow(projectRoot, id);
|
|
125
|
+
if (resolved.source.kind === 'missing') {
|
|
126
|
+
printResult(io, fail('workflow.lint', 'WORKFLOW_NOT_FOUND', `workflow "${id}" not found`, { sessionId: options.session }, [`Create .peaks/workflows/${id}.yaml`]), options.json);
|
|
127
|
+
process.exitCode = 1;
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
printResult(io, ok('workflow.lint', {
|
|
131
|
+
sessionId: options.session,
|
|
132
|
+
source: resolved.source,
|
|
133
|
+
lint: resolved.lint
|
|
134
|
+
}, [], []), options.json);
|
|
135
|
+
if (!resolved.lint.ok)
|
|
136
|
+
process.exitCode = 1;
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
reportWorkflowLintFailure(io, error, options.session, options.json);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
import { type ProgramIO } from '../cli-helpers.js';
|
|
3
|
+
/** Absolute path of the MCP server's process entry. */
|
|
4
|
+
export declare function mcpServerEntryPath(): string;
|
|
5
|
+
/** The exact command this launcher will spawn, resolved without spawning it. */
|
|
6
|
+
export declare function mcpServeInvocation(entry?: string): {
|
|
7
|
+
command: string;
|
|
8
|
+
args: string[];
|
|
9
|
+
};
|
|
10
|
+
export declare function registerMcpCommands(program: Command, io: ProgramIO): void;
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
// src/cli/commands/mcp-commands.ts
|
|
2
|
+
//
|
|
3
|
+
// `peaks mcp` — the command family around the read-only MCP surface. This slice
|
|
4
|
+
// delivers `serve`; `install` / `uninstall` / `status` are the distribution
|
|
5
|
+
// slice's (spec §12, segment ③).
|
|
6
|
+
//
|
|
7
|
+
// WHY THIS FILE DOES NOT IMPORT THE SERVER. The design's load-bearing invariant
|
|
8
|
+
// is that `src/services/mcp/` is a DELETABLE PIPE (spec §1): remove it and the
|
|
9
|
+
// CLI is unchanged, the interceptor is unchanged, and a harness that used MCP
|
|
10
|
+
// simply falls back to Bash. That invariant is an assertion about import edges,
|
|
11
|
+
// and it is enforced by `tests/unit/standards/no-mcp-source-import.test.ts` —
|
|
12
|
+
// which reports an edge from any module outside the MCP root, this file
|
|
13
|
+
// included. So the server is reached the way the design says a server is
|
|
14
|
+
// reached: as a PROCESS, by path.
|
|
15
|
+
//
|
|
16
|
+
// The path is computed here rather than asked for, because asking would be the
|
|
17
|
+
// import. `SOURCE_TREE` / `TREE_DIR` are the same two facts every other
|
|
18
|
+
// self-spawn in this tree derives the same way (see `daemon-supervisor.ts`):
|
|
19
|
+
// this file's own extension says which tree it was loaded from, and its own
|
|
20
|
+
// directory says where that tree is.
|
|
21
|
+
import { spawn } from 'node:child_process';
|
|
22
|
+
import { dirname, extname, join, resolve } from 'node:path';
|
|
23
|
+
import { fileURLToPath } from 'node:url';
|
|
24
|
+
import { installMcpForAdapter, resolveMcpServerArgv, spawnMcpInstallRunner, uninstallMcpForAdapter } from '../../services/distribution/mcp-install.js';
|
|
25
|
+
import { detectIdeFromContext } from '../../services/ide/hook-translator.js';
|
|
26
|
+
import { resolveIdeOptionHelp, tryGetAdapter } from '../../services/ide/ide-registry.js';
|
|
27
|
+
import { interpreterArgs } from '../../services/web/daemon-supervisor.js';
|
|
28
|
+
import { printResult } from '../cli-helpers.js';
|
|
29
|
+
import { fail, ok } from 'peaks-loop-shared/result';
|
|
30
|
+
/** This file's directory — `<root>/src/cli/commands` or `<root>/dist/cli/commands`. */
|
|
31
|
+
const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
|
|
32
|
+
/** `<root>/src` or `<root>/dist`. */
|
|
33
|
+
const TREE_DIR = resolve(MODULE_DIR, '..', '..');
|
|
34
|
+
/** Compiled trees run `.js` under node; the source tree is TypeScript. */
|
|
35
|
+
const SOURCE_TREE = extname(fileURLToPath(import.meta.url)) === '.ts';
|
|
36
|
+
/** Absolute path of the MCP server's process entry. */
|
|
37
|
+
export function mcpServerEntryPath() {
|
|
38
|
+
return join(TREE_DIR, 'services', 'mcp', SOURCE_TREE ? 'server-main.ts' : 'server-main.js');
|
|
39
|
+
}
|
|
40
|
+
/** The exact command this launcher will spawn, resolved without spawning it. */
|
|
41
|
+
export function mcpServeInvocation(entry = mcpServerEntryPath()) {
|
|
42
|
+
return { command: process.execPath, args: interpreterArgs(entry) };
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Hand the process over to the MCP server: the child inherits all three standard
|
|
46
|
+
* streams, so the harness's stdin/stdout pipe IS the server's pipe and this
|
|
47
|
+
* process adds a frame of indirection and nothing else.
|
|
48
|
+
*/
|
|
49
|
+
function runMcpServe(io, options) {
|
|
50
|
+
const invocation = mcpServeInvocation();
|
|
51
|
+
const child = spawn(invocation.command, invocation.args, {
|
|
52
|
+
stdio: 'inherit',
|
|
53
|
+
cwd: options.project ?? process.cwd(),
|
|
54
|
+
// Windows contract: a spawned child must not allocate a console window.
|
|
55
|
+
windowsHide: true
|
|
56
|
+
});
|
|
57
|
+
child.on('error', (error) => {
|
|
58
|
+
printResult(io, fail('mcp.serve', 'MCP_SERVE_SPAWN_FAILED', `Could not start the MCP server: ${error.message}`, {
|
|
59
|
+
entry: invocation.args.at(-1) ?? ''
|
|
60
|
+
}, ['Check that the build is present, or run `pnpm build`']), options.json === true);
|
|
61
|
+
process.exitCode = 1;
|
|
62
|
+
});
|
|
63
|
+
child.on('exit', (code, signal) => {
|
|
64
|
+
// The child's status IS this command's status — an MCP client reads the
|
|
65
|
+
// server's exit, so masking it would be the only lie this launcher told.
|
|
66
|
+
if (signal !== null) {
|
|
67
|
+
process.exitCode = 1;
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
process.exitCode = code ?? 0;
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
export function registerMcpCommands(program, io) {
|
|
74
|
+
const mcp = program
|
|
75
|
+
.command('mcp')
|
|
76
|
+
.description('Serve peaks-loop read-only capabilities over MCP (stdio)');
|
|
77
|
+
mcp
|
|
78
|
+
.command('serve')
|
|
79
|
+
.description('Run the read-only MCP server on stdio until the caller closes it')
|
|
80
|
+
.option('--project <path>', 'project the server runs the CLI in (default: current directory)')
|
|
81
|
+
.action((options) => {
|
|
82
|
+
runMcpServe(io, options);
|
|
83
|
+
});
|
|
84
|
+
registerMcpRegistrationCommands(mcp, io);
|
|
85
|
+
}
|
|
86
|
+
function resolveTargetAdapter(options) {
|
|
87
|
+
const ide = options.ide !== undefined && options.ide.length > 0
|
|
88
|
+
? options.ide
|
|
89
|
+
: detectIdeFromContext({ env: process.env, cwd: process.cwd(), parsedStdin: null });
|
|
90
|
+
const adapter = tryGetAdapter(ide);
|
|
91
|
+
return adapter === undefined ? { kind: 'unsupported', ide } : { kind: 'adapter', adapter };
|
|
92
|
+
}
|
|
93
|
+
/** One envelope line per adapter: what was registered, or why nothing was. */
|
|
94
|
+
function reportRegistration(result, verb) {
|
|
95
|
+
if (result.skipped) {
|
|
96
|
+
return `${result.ideId}: skipped — ${result.reason}`;
|
|
97
|
+
}
|
|
98
|
+
const { report } = result;
|
|
99
|
+
return `${result.ideId}: ${verb} ${report.ok ? 'ok' : 'FAILED'} — ${report.detail}`;
|
|
100
|
+
}
|
|
101
|
+
/** The `data` BOTH envelopes carry, so the failure path is never a thinner shape. */
|
|
102
|
+
function registrationEnvelopeData(result, verb) {
|
|
103
|
+
return {
|
|
104
|
+
ide: result.ideId,
|
|
105
|
+
skipped: result.skipped,
|
|
106
|
+
summary: reportRegistration(result, verb),
|
|
107
|
+
registration: result
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function runMcpRegistration(io, verb, options) {
|
|
111
|
+
const target = resolveTargetAdapter(options);
|
|
112
|
+
if (target.kind === 'unsupported') {
|
|
113
|
+
printResult(io, fail(`mcp.${verb}`, 'MCP_HARNESS_UNSUPPORTED', `No adapter is registered for harness '${target.ide}'.`, { ide: target.ide }, ['Pass --ide with a registered adapter id']), options.json === true);
|
|
114
|
+
process.exitCode = 1;
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const { adapter } = target;
|
|
118
|
+
const serverArgv = resolveMcpServerArgv();
|
|
119
|
+
const result = verb === 'install'
|
|
120
|
+
? installMcpForAdapter(adapter, serverArgv, spawnMcpInstallRunner)
|
|
121
|
+
: uninstallMcpForAdapter(adapter, serverArgv, spawnMcpInstallRunner);
|
|
122
|
+
const report = result.skipped ? undefined : result.report;
|
|
123
|
+
if (report !== undefined && !report.ok) {
|
|
124
|
+
printResult(io, fail(`mcp.${verb}`, 'MCP_REGISTRATION_FAILED', report.detail, registrationEnvelopeData(result, verb), ['Run the harness command by hand to see its own error']), options.json === true);
|
|
125
|
+
process.exitCode = 1;
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
printResult(io, ok(`mcp.${verb}`, registrationEnvelopeData(result, verb)), options.json === true);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* `peaks mcp install` / `peaks mcp uninstall` — the distribution half of the MCP
|
|
132
|
+
* surface, and an explicit pair on purpose (spec §8.3 Q19): an uninstall that
|
|
133
|
+
* only ran from a package manager's hook is skipped whenever the manager decides
|
|
134
|
+
* to skip it, and the leftover registration then makes the NEXT install fail on
|
|
135
|
+
* a duplicate. Neither command starts a process; they register one.
|
|
136
|
+
*/
|
|
137
|
+
function registerMcpRegistrationCommands(mcp, io) {
|
|
138
|
+
mcp
|
|
139
|
+
.command('install')
|
|
140
|
+
.description('Register the peaks MCP server with the detected harness. Removes the name ' +
|
|
141
|
+
'from every declared scope first, because the harness registers non-idempotently. ' +
|
|
142
|
+
'A harness whose adapter declares no registration entry is skipped, not failed.')
|
|
143
|
+
.option('--ide <id>', resolveIdeOptionHelp())
|
|
144
|
+
.option('--json', 'JSON envelope output')
|
|
145
|
+
.action((options) => {
|
|
146
|
+
runMcpRegistration(io, 'install', options);
|
|
147
|
+
});
|
|
148
|
+
mcp
|
|
149
|
+
.command('uninstall')
|
|
150
|
+
.description('Remove the peaks MCP registration from the harness, sweeping every scope it ' +
|
|
151
|
+
'may hold. Explicit, because no package-manager hook is relied on.')
|
|
152
|
+
.option('--ide <id>', resolveIdeOptionHelp())
|
|
153
|
+
.option('--json', 'JSON envelope output')
|
|
154
|
+
.action((options) => {
|
|
155
|
+
runMcpRegistration(io, 'uninstall', options);
|
|
156
|
+
});
|
|
157
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { RequestArtifactRole, RequestArtifactState, RequestType } from '../../services/artifacts/request-artifact-service.js';
|
|
2
|
+
export type RequestInitOptions = {
|
|
3
|
+
role: string;
|
|
4
|
+
id: string;
|
|
5
|
+
project: string;
|
|
6
|
+
sessionId?: string;
|
|
7
|
+
apply?: boolean;
|
|
8
|
+
type?: RequestType;
|
|
9
|
+
callerId?: string;
|
|
10
|
+
json?: boolean;
|
|
11
|
+
};
|
|
12
|
+
export type RequestListOptions = {
|
|
13
|
+
project: string;
|
|
14
|
+
sessionId?: string;
|
|
15
|
+
role?: RequestArtifactRole;
|
|
16
|
+
summary?: boolean;
|
|
17
|
+
json?: boolean;
|
|
18
|
+
};
|
|
19
|
+
export type RequestShowOptions = {
|
|
20
|
+
role: RequestArtifactRole;
|
|
21
|
+
project: string;
|
|
22
|
+
sessionId?: string;
|
|
23
|
+
json?: boolean;
|
|
24
|
+
pretty?: boolean;
|
|
25
|
+
compact?: boolean;
|
|
26
|
+
};
|
|
27
|
+
export type RequestTransitionOptions = {
|
|
28
|
+
role: RequestArtifactRole;
|
|
29
|
+
project: string;
|
|
30
|
+
state: RequestArtifactState;
|
|
31
|
+
sessionId?: string;
|
|
32
|
+
reason?: string;
|
|
33
|
+
allowIncomplete?: boolean;
|
|
34
|
+
confirm?: boolean;
|
|
35
|
+
forceConfirm?: boolean;
|
|
36
|
+
json?: boolean;
|
|
37
|
+
};
|
|
38
|
+
export type RequestLintOptions = {
|
|
39
|
+
role: RequestArtifactRole;
|
|
40
|
+
project: string;
|
|
41
|
+
sessionId?: string;
|
|
42
|
+
json?: boolean;
|
|
43
|
+
};
|
|
44
|
+
export type RequestRepairStatusOptions = {
|
|
45
|
+
project: string;
|
|
46
|
+
sessionId?: string;
|
|
47
|
+
maxCycles?: string;
|
|
48
|
+
json?: boolean;
|
|
49
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* `request list`. `count` is the true total; `names` carries
|
|
6
|
-
* `role/requestId (state)` labels for the first N entries. The full `items`
|
|
7
|
-
* array (with paths + timestamps) is one flag away — omit `--summary`.
|
|
8
|
-
*/
|
|
9
|
-
export declare function buildRequestListSummary(items: readonly RequestArtifactSummary[]): Record<string, unknown>;
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
import type { ProgramIO } from '../cli-helpers.js';
|
|
3
|
+
export { buildRequestListSummary } from './request-list-command.js';
|
|
10
4
|
export declare function registerRequestCommands(program: Command, io: ProgramIO): void;
|