@tea-agent/loop-agent 0.39.0-beta.2 → 0.39.0-beta.4
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/AGENTS.md +4 -1
- package/CHANGELOG.md +187 -92
- package/README.md +9 -5
- package/bin/loop-agent.js +7 -3
- package/dist/application/task-lifecycle/recommendations.js +13 -2
- package/dist/build-stamp.json +3 -3
- package/dist/cli/command-definitions.js +16 -5
- package/dist/cli/program.js +16 -2
- package/dist/cli/update/notifier.js +2 -2
- package/dist/cli.js +2 -1
- package/dist/commands/dag-rerun.js +55 -1
- package/dist/commands/init-model-catalog.js +464 -0
- package/dist/commands/init-upgrade.js +265 -97
- package/dist/commands/init.js +429 -28
- package/dist/commands/inspect-next.js +8 -0
- package/dist/executors/dag-pi-executor.js +1691 -29
- package/dist/executors/pi-extension-resolver.js +233 -0
- package/dist/executors/pi-playwright-cli-tool.js +51 -12
- package/dist/executors/pi-sdk-executor.js +180 -33
- package/dist/executors/shell-executor.js +1152 -171
- package/dist/executors/shell-write-guard.js +14 -0
- package/dist/shared/dag-prompt-override.js +28 -0
- package/dist/shared/openspec-spec.js +70 -4
- package/dist/shared/operator/capabilities.js +32 -0
- package/dist/shared/playwright-cli-command-policy.js +15 -0
- package/dist/shared/update/console-notifier.js +100 -0
- package/dist/{cli → shared}/update/npm-client.js +41 -8
- package/dist/{cli → shared}/update/state.js +41 -13
- package/dist/task/config-types.js +19 -5
- package/dist/task/contract/project.js +3 -0
- package/dist/task/contract/schema.js +2 -1
- package/dist/task/frontend-project-capability.js +60 -17
- package/dist/task/source-prepare/parse-intent.js +24 -4
- package/dist/task/source-prepare/prepare.js +36 -0
- package/dist/worker/cli.js +31 -1
- package/dist/worker/console/chat/pi-console-config.js +81 -10
- package/dist/worker/console/chat/routes.js +1 -0
- package/dist/worker/console/dag-execution-receipt.js +33 -0
- package/dist/worker/console/frontend-human-decision-adapter.js +19 -0
- package/dist/worker/console/frontend-split-operation-adapter.js +20 -0
- package/dist/worker/console/index.js +3 -0
- package/dist/worker/console/operation-store.js +226 -6
- package/dist/worker/console/operator-actions.js +263 -0
- package/dist/worker/console/operator-user-error.js +2 -2
- package/dist/worker/console/routes.js +43 -2
- package/dist/worker/console/security.js +63 -9
- package/dist/worker/console/server.js +151 -6
- package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-C4kVYweA.js → abnfDiagram-N423BO3Z-zsNyvGaH.js} +1 -1
- package/dist/worker/console/static/assets/{arc-Bj2M8iO5.js → arc-BDjZ5kE1.js} +1 -1
- package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-CLlXe4-6.js → architectureDiagram-T3A2C74G-BkgaujnN.js} +1 -1
- package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-psEp5xH0.js → blockDiagram-VBNYF7ZC-CqxOJi0j.js} +1 -1
- package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-DeKcOCGJ.js → c4Diagram-5PPSVZJV-C2JHLdRi.js} +1 -1
- package/dist/worker/console/static/assets/channel-BuqaGKAT.js +1 -0
- package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-K0C744p1.js → chunk-2GRJ4B5K-DF_YSvOS.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-xbNw4J9-.js → chunk-2Q5K7J3B-D3Ort5Vo.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5RXB4S5H-DjLaSDUO.js → chunk-5RXB4S5H-XfAfZeUC.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5VM5RSS4-CtiPlKel.js → chunk-5VM5RSS4-SLBibhf5.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-DZtolir7.js → chunk-6Q2QTUOP-Dz29Ye_f.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-GF5L2VYU-CPcdNeew.js → chunk-GF5L2VYU-DB2G4H8V.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-JWPE2WC7-NgHc6V37.js → chunk-JWPE2WC7-CIoGkxdu.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-KBJHAD2P-DQ_T-hg8.js → chunk-KBJHAD2P-CG78FGkn.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-RYQCIY6F-DgLsxcVP.js → chunk-RYQCIY6F-ZDHAvXPd.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-XXDRQBXY-UrVoM9z1.js → chunk-XXDRQBXY-BKkkC4VA.js} +1 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-DNdSHjH9.js +1 -0
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-DNdSHjH9.js +1 -0
- package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-CLkYvTb3.js → cose-bilkent-JH36ORCC-SposUZsO.js} +1 -1
- package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-BwT_xKrE.js → cynefin-VYW2F7L2-BSCtQpD7.js} +1 -1
- package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-Bi9tuzif.js → cynefinDiagram-MW4NZA55-DgFHrw9l.js} +1 -1
- package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-BCIqkWBV.js → dagre-VZM6K2ZE-BVBasYbj.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-7IWD3JNH-Dip6l9_Z.js → diagram-7IWD3JNH-6r_4rN_c.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-B-xkh_wK.js → diagram-B4RE2ZJO-JmuaB41P.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-LBJQPF4R-DZO0kTt_.js → diagram-LBJQPF4R-xXvAY3sk.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-Q27KOJAE-D6ZplNbZ.js → diagram-Q27KOJAE-D2B3lY2o.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-UB23O5K3-BPekbhoS.js → diagram-UB23O5K3-tK54tMEX.js} +1 -1
- package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-BtmaJpK5.js → ebnfDiagram-BXEA7PRR-CNtELzV-.js} +1 -1
- package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-6DS0Xc44.js → erDiagram-JOGREHBK-C1xKMKcW.js} +1 -1
- package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-CihnROSm.js → flowDiagram-UKHOOZJN-CZ7dlPMz.js} +1 -1
- package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-CZC4zOE2.js → ganttDiagram-PKOTCBZU-BqGb42Xe.js} +1 -1
- package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-Dq1fhzGN.js → gitGraphDiagram-DS77QQ5N-D_BlXEtt.js} +1 -1
- package/dist/worker/console/static/assets/{index-DTZOKgAn.js → index-D5zGX6fG.js} +68 -68
- package/dist/worker/console/static/assets/index-DBbhESQ_.css +1 -0
- package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-DlSl4BGx.js → infoDiagram-6WML65LV-Vce2vmIe.js} +1 -1
- package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-snnzFl_U.js → ishikawaDiagram-WSZJBQD7-DDwVBAvI.js} +1 -1
- package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-BDE7qpMx.js → journeyDiagram-NVQOT4AX-y_Ew-wv4.js} +1 -1
- package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-CD2Ci04G.js → kanban-definition-27J2QSJJ-CjXJFp1K.js} +1 -1
- package/dist/worker/console/static/assets/{linear-DdnapKIH.js → linear-1itMst1Q.js} +1 -1
- package/dist/worker/console/static/assets/{mermaid.core-BVjAT9b8.js → mermaid.core-C-D3ZRUa.js} +5 -5
- package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-D0yJk-zA.js → mindmap-definition-FAOFIHXS-BiYywmZc.js} +1 -1
- package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-BVo9tFP-.js → pegDiagram-VL7TDLO6-l2fydNWA.js} +1 -1
- package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-DnOV-mZ_.js → pieDiagram-7S7Q4E2Y-Dz0hNbYW.js} +1 -1
- package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-CzUJo58i.js → quadrantDiagram-CIZ2JOQS-BujI_mLZ.js} +1 -1
- package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-Bvikrolh.js → railroadDiagram-AXF67PYL-pWe84beb.js} +1 -1
- package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-DtaSVCap.js → requirementDiagram-LRYGKXZP-ByYu2frg.js} +1 -1
- package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-C2c9A0wW.js → sankeyDiagram-W5VNT64P-CoPnilFP.js} +1 -1
- package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-DmXJcU7r.js → sequenceDiagram-SI44F4Z6-1Md2LnS0.js} +1 -1
- package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-B4GUFW92.js → sizeCapture-X5ZJPWSS-DqqqAoSH.js} +1 -1
- package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-Dsad2MXf.js → stateDiagram-OKZ733FA-C4sGkf--.js} +1 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-B8rmop_9.js +1 -0
- package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-DGq48Fbi.js → swimlanes-SLNWSIFB-ByxJrUzW.js} +2 -2
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-B0ky-kBM.js +8 -0
- package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-CSSi6OFf.js → timeline-definition-Z64GVDOM-D8MLgM0O.js} +1 -1
- package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-BqyzPrWv.js → vennDiagram-T6HMQDX7-DnBis-wZ.js} +1 -1
- package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-DlznVb6S.js → wardleyDiagram-T6FBY63Y-uuyYT7UO.js} +1 -1
- package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-CfBcgJ_K.js → xychartDiagram-ELKLHX3M-BjgabhwK.js} +1 -1
- package/dist/worker/console/static/index.html +2 -2
- package/dist/worker/console/static-src/active-run-badge.js +17 -0
- package/dist/worker/console/static-src/operator-chat/mutation-gate.js +1 -1
- package/dist/worker/loop-agent/loop-agent-client.js +7 -3
- package/dist/worker/materialize/frontend-split-task-materializer.js +72 -0
- package/dist/worker/observe/node-input.js +74 -3
- package/dist/worker/observe/node-process.js +377 -0
- package/dist/worker/observe/routes.js +36 -3
- package/dist/worker/observe/shell-handler-keys.js +34 -0
- package/dist/worker/observe/static/api.js +66 -0
- package/dist/worker/observe/static/constants.js +8 -1
- package/dist/worker/observe/static/dag-history-labels.js +4 -0
- package/dist/worker/observe/static/format.js +23 -0
- package/dist/worker/observe/static/markdown-render.js +20 -1
- package/dist/worker/observe/static/operator-chrome.js +4 -0
- package/dist/worker/observe/static/state.js +13 -2
- package/dist/worker/observe/static/styles.css +73 -0
- package/dist/worker/observe/static/views/dag-inspector.js +612 -8
- package/dist/worker/observe/static/views/dag.js +8 -1
- package/dist/worker/observe/static/views/failures.js +5 -2
- package/dist/worker/observe/static/views/session-timeline.js +78 -9
- package/dist/workflows/dag/backend-test-case-coverage-analysis.js +20 -2
- package/dist/workflows/dag/contract-output-registry.js +15 -0
- package/dist/workflows/dag/contract-validator-registrations.js +1 -2
- package/dist/workflows/dag/failure-category.js +12 -0
- package/dist/workflows/dag/frontend-closeout.js +221 -0
- package/dist/workflows/dag/frontend-design-policy.js +366 -0
- package/dist/workflows/dag/frontend-human-decision.js +182 -0
- package/dist/workflows/dag/frontend-implementation-contract.js +378 -160
- package/dist/workflows/dag/frontend-prewrite-gate.js +343 -391
- package/dist/workflows/dag/frontend-provider-capability-matrix.js +159 -0
- package/dist/workflows/dag/frontend-recovery-capsule.js +455 -0
- package/dist/workflows/dag/frontend-recovery-controller.js +201 -0
- package/dist/workflows/dag/frontend-recovery-lineage.js +178 -0
- package/dist/workflows/dag/frontend-recovery-plan.js +17 -10
- package/dist/workflows/dag/frontend-recovery-run.js +33 -20
- package/dist/workflows/dag/frontend-repair.js +7 -424
- package/dist/workflows/dag/frontend-review-context.js +195 -8
- package/dist/workflows/dag/frontend-risk.js +15 -2
- package/dist/workflows/dag/frontend-shadow-dual-write.js +665 -0
- package/dist/workflows/dag/frontend-shape-capsule-store.js +191 -0
- package/dist/workflows/dag/frontend-shape-facts.js +409 -0
- package/dist/workflows/dag/frontend-shape.js +425 -0
- package/dist/workflows/dag/frontend-split-application-service.js +203 -0
- package/dist/workflows/dag/frontend-split-orchestrator.js +899 -0
- package/dist/workflows/dag/frontend-test-case-checklist.js +26 -2
- package/dist/workflows/dag/frontend-test-case-manifest.js +5 -0
- package/dist/workflows/dag/frontend-test-case-quality.js +5 -13
- package/dist/workflows/dag/frontend-test-environment-probe.js +227 -0
- package/dist/workflows/dag/frontend-test-markdown.js +61 -0
- package/dist/workflows/dag/frontend-test-result-contract.js +160 -28
- package/dist/workflows/dag/frontend-test-standard-scenarios.js +68 -0
- package/dist/workflows/dag/frontend-typed-event-store.js +439 -0
- package/dist/workflows/dag/frontend-typed-event-transaction.js +180 -0
- package/dist/workflows/dag/frontend-verification-trace.js +52 -17
- package/dist/workflows/dag/frontend-worktree-diff.js +97 -18
- package/dist/workflows/dag/frontend-writer-admission.js +260 -0
- package/dist/workflows/dag/frontend-writer-status.js +244 -0
- package/dist/workflows/dag/init-hybrid.js +572 -500
- package/dist/workflows/dag/node-execution.js +307 -70
- package/dist/workflows/dag/prompt.js +10 -18
- package/dist/workflows/dag/rerun-plan.js +144 -5
- package/dist/workflows/dag/rerun-run.js +58 -6
- package/dist/workflows/dag/retry-policy.js +228 -4
- package/dist/workflows/dag/runner.js +314 -119
- package/dist/workflows/dag/scheduler.js +114 -16
- package/dist/workflows/dag/structured-output-repair.js +712 -0
- package/dist/workflows/dag/types.js +235 -23
- package/dist/workflows/dag/upstream-artifacts.js +0 -4
- package/dist/workflows/dag/validate.js +60 -10
- package/docs/init-surface.manifest.json +5 -0
- package/docs/operations/README.md +1 -1
- package/docs/templates/agent-dag.schema.json +44 -0
- package/docs/templates/frontend-test-dag.json +8 -10
- package/docs/templates/frontend-test-dag.retrieve-context.prompt.md +1 -1
- package/docs/templates/init-managed-agents.md +13 -3
- package/harness.json +3 -3
- package/package.json +5 -1
- package/scripts/next-info.mjs +356 -0
- package/scripts/next-publish-gate.mjs +238 -0
- package/scripts/release-source-binding.mjs +251 -0
- package/skills/codebase-scout/SKILL.md +1 -1
- package/skills/fe-test-ui-scout/SKILL.md +65 -0
- package/skills/fe-test-ui-scout/references/ledger-schema.md +62 -0
- package/skills/fe-test-ui-scout/references/recon-protocol.md +54 -0
- package/skills/frontend-implementation/SKILL.md +4 -4
- package/skills/frontend-implementation/references/design-spec.md +11 -7
- package/skills/frontend-implementation/references/node-contracts.md +20 -11
- package/skills/loop-agent/references/command-reference.md +11 -4
- package/skills/loop-agent/references/hybrid-dag.md +1 -1
- package/skills/playwright-cli/SKILL.md +22 -0
- package/skills/playwright-cli-case-generator/SKILL.md +20 -1
- package/dist/worker/console/static/assets/channel-CPF4N7pf.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-C2DwA_Y1.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-C2DwA_Y1.js +0 -1
- package/dist/worker/console/static/assets/index-Ya5FE7cD.css +0 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-B8FB_cNk.js +0 -1
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-CrZYaWfx.js +0 -8
|
@@ -7,6 +7,7 @@ import { runCoverageReport } from "../commands/coverage-report.js";
|
|
|
7
7
|
import { runExamples } from "../commands/examples.js";
|
|
8
8
|
import { runHandoffCheck } from "../commands/handoff-check.js";
|
|
9
9
|
import { runInspect } from "../commands/inspect.js";
|
|
10
|
+
import { runInspectNext } from "../commands/inspect-next.js";
|
|
10
11
|
import { runInstructions } from "../commands/instructions.js";
|
|
11
12
|
import { runTaskAdvance } from "../commands/task-advance.js";
|
|
12
13
|
import { runTaskStatus } from "../commands/task-status.js";
|
|
@@ -74,6 +75,7 @@ export function parseSummaryFlag(tokens) {
|
|
|
74
75
|
const DOCS_SUBCOMMANDS = ["audit", "archive"];
|
|
75
76
|
const INIT_SUBCOMMANDS = [
|
|
76
77
|
"instructions",
|
|
78
|
+
"model-catalog",
|
|
77
79
|
"doctor",
|
|
78
80
|
"check-update",
|
|
79
81
|
"update",
|
|
@@ -162,10 +164,19 @@ export const COMMAND_DEFINITIONS = [
|
|
|
162
164
|
name: "inspect",
|
|
163
165
|
adapter: "required",
|
|
164
166
|
tier: "operator",
|
|
165
|
-
intent: "Inspect the target repo harness manifest.",
|
|
166
|
-
usage: "inspect",
|
|
167
|
-
|
|
168
|
-
|
|
167
|
+
intent: "Inspect the target repo harness manifest, or report the current npm next binding.",
|
|
168
|
+
usage: "inspect | inspect next [--json]",
|
|
169
|
+
subcommands: ["next"],
|
|
170
|
+
handler: async ({ adapter, repoRoot, subcommand, rest }) => {
|
|
171
|
+
if (subcommand === "next") {
|
|
172
|
+
await runInspectNext(repoRoot, rest.filter((arg) => Boolean(arg)));
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
if (subcommand === undefined || subcommand.startsWith("-")) {
|
|
176
|
+
await runInspect(adapter, repoRoot);
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
throw new Error("usage: inspect | inspect next [--json]");
|
|
169
180
|
},
|
|
170
181
|
},
|
|
171
182
|
{
|
|
@@ -205,7 +216,7 @@ export const COMMAND_DEFINITIONS = [
|
|
|
205
216
|
adapter: "none",
|
|
206
217
|
tier: "primary",
|
|
207
218
|
intent: "Initialize a target repository with loop-agent harness capabilities.",
|
|
208
|
-
usage: "init [instructions|doctor|check-update|update|reconcile|upgrade] [--profile full|minimal] [--merge] [--json|--markdown] [--bootstrap-surface|--apply-safe] [--client-recovery=auto|project|user|off] [--run-id <id> --status|--continue|--report]",
|
|
219
|
+
usage: "init [instructions|model-catalog|doctor|check-update|update|reconcile|upgrade] [--profile full|minimal] [--merge] [--model provider/model | --low-model provider/model --med-model provider/model --high-model provider/model] [--json|--markdown] [--bootstrap-surface|--apply-safe] [--client-recovery=auto|project|user|off] [--run-id <id> --status|--continue|--report]",
|
|
209
220
|
subcommands: [...INIT_SUBCOMMANDS],
|
|
210
221
|
handler: async ({ repoRoot, subcommand, rest }) => {
|
|
211
222
|
await runInit(repoRoot, [subcommand, ...rest].filter(Boolean), { readRuntimeActivity: readInitRuntimeActivity });
|
package/dist/cli/program.js
CHANGED
|
@@ -33,6 +33,7 @@ import { runHarvest } from "../commands/harvest.js";
|
|
|
33
33
|
import { runInit } from "../commands/init.js";
|
|
34
34
|
import { readInitRuntimeActivity } from "./update/runtime-activity.js";
|
|
35
35
|
import { runInspect } from "../commands/inspect.js";
|
|
36
|
+
import { runInspectNext } from "../commands/inspect-next.js";
|
|
36
37
|
import { runInstructions } from "../commands/instructions.js";
|
|
37
38
|
import { runKnowledge } from "../commands/knowledge.js";
|
|
38
39
|
import { runLoop } from "../commands/loop.js";
|
|
@@ -97,6 +98,9 @@ async function dispatchRegisteredCommand(commandObject, defaultRepoRoot, rawArgs
|
|
|
97
98
|
[...rest, ...rawArgs].some((token) => token === "--json")) ||
|
|
98
99
|
(command === "stats" &&
|
|
99
100
|
subcommand === "context" &&
|
|
101
|
+
[...rest, ...rawArgs].some((token) => token === "--json")) ||
|
|
102
|
+
(command === "inspect" &&
|
|
103
|
+
subcommand === "next" &&
|
|
100
104
|
[...rest, ...rawArgs].some((token) => token === "--json"));
|
|
101
105
|
const repoRoot = resolveRepoRootOnly(commandObject, defaultRepoRoot, {
|
|
102
106
|
quiet,
|
|
@@ -125,8 +129,15 @@ async function runTaskCommand(repoRoot, subcommand, rest) {
|
|
|
125
129
|
async function runCommanderAction(ctx, command, subcommand, rest) {
|
|
126
130
|
switch (command) {
|
|
127
131
|
case "inspect":
|
|
128
|
-
|
|
129
|
-
|
|
132
|
+
if (subcommand === "next") {
|
|
133
|
+
await runInspectNext(ctx.repoRoot, rest);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
if (subcommand === undefined || subcommand.startsWith("-")) {
|
|
137
|
+
await runInspect(ctx.adapter, ctx.repoRoot);
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
throw new Error("usage: inspect | inspect next [--json]");
|
|
130
141
|
case "doctor":
|
|
131
142
|
await runDoctor(ctx.adapter, ctx.repoRoot, compactArgs([subcommand, ...rest]));
|
|
132
143
|
return;
|
|
@@ -595,6 +606,9 @@ export function buildLoopAgentProgram(options) {
|
|
|
595
606
|
.option("--no-merge", "skip existing files")
|
|
596
607
|
.option("--provider <provider>", "provider paired with a bare --model (otherwise use provider/model)")
|
|
597
608
|
.option("--model <model>", "qualified provider/model, or a bare model paired with --provider")
|
|
609
|
+
.option("--low-model <provider/model>", "credential-ready Pi model for LOW")
|
|
610
|
+
.option("--med-model <provider/model>", "credential-ready Pi model for MED")
|
|
611
|
+
.option("--high-model <provider/model>", "credential-ready Pi model for HIGH")
|
|
598
612
|
.option("--json", "print JSON")
|
|
599
613
|
.option("--markdown", "print Markdown")
|
|
600
614
|
.option("--bootstrap-surface", "write an inferred .harness/init-surface.json baseline")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createInterface } from "node:readline/promises";
|
|
2
2
|
import { evaluateLatestVersion, shouldCheckForUpdates } from "./policy.js";
|
|
3
|
-
import { acquireUpdateLock, readUpdateState, updateLockPath, updateStatePath, writeUpdateState, } from "
|
|
3
|
+
import { acquireUpdateLock, readUpdateState, updateLockPath, updateStatePath, writeUpdateState, } from "../../shared/update/state.js";
|
|
4
4
|
const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000;
|
|
5
5
|
const FAILURE_COOLDOWN_MS = 10 * 60 * 1000;
|
|
6
6
|
export async function runSelfUpdateNotifier(options) {
|
|
@@ -69,7 +69,7 @@ export async function runSelfUpdateNotifier(options) {
|
|
|
69
69
|
}
|
|
70
70
|
writeStderr(`loop-agent 已更新到 ${decision.targetVersion};新版本将在下一次调用时生效。\n`);
|
|
71
71
|
await safeWriteState(statePath, {
|
|
72
|
-
|
|
72
|
+
...state,
|
|
73
73
|
lastCheckedAt: now().toISOString(),
|
|
74
74
|
latestVersion: decision.targetVersion,
|
|
75
75
|
});
|
package/dist/cli.js
CHANGED
|
@@ -4,7 +4,7 @@ import os from "node:os";
|
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
|
6
6
|
import { buildLoopAgentProgram } from "./cli/program.js";
|
|
7
|
-
import { createNpmUpdateClient } from "./
|
|
7
|
+
import { createNpmUpdateClient } from "./shared/update/npm-client.js";
|
|
8
8
|
import { runSelfUpdateNotifier } from "./cli/update/notifier.js";
|
|
9
9
|
import { resolveInitSurfaceRepoRoot, runInitSurfaceNotifier, } from "./cli/update/init-surface-notifier.js";
|
|
10
10
|
async function main() {
|
|
@@ -29,6 +29,7 @@ async function main() {
|
|
|
29
29
|
client: createNpmUpdateClient({
|
|
30
30
|
currentVersion,
|
|
31
31
|
packageRoot,
|
|
32
|
+
cwd: defaultRepoRoot,
|
|
32
33
|
env: process.env,
|
|
33
34
|
}),
|
|
34
35
|
});
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { isDagRerunPromptOverrideEnabled } from "../shared/dag-prompt-override.js";
|
|
1
3
|
import { executeDagRerun, planDagRerun, } from "../workflows/dag/rerun-run.js";
|
|
2
4
|
export function parseDagRerunArgs(args) {
|
|
3
5
|
if (args.length === 0) {
|
|
@@ -9,6 +11,8 @@ export function parseDagRerunArgs(args) {
|
|
|
9
11
|
let planHash;
|
|
10
12
|
let requestId;
|
|
11
13
|
let reason;
|
|
14
|
+
const promptOverrideSpecs = [];
|
|
15
|
+
const promptOverrideAppendSpecs = [];
|
|
12
16
|
for (let index = 0; index < args.length; index += 1) {
|
|
13
17
|
const arg = args[index];
|
|
14
18
|
if (arg === "--run-id")
|
|
@@ -33,6 +37,14 @@ export function parseDagRerunArgs(args) {
|
|
|
33
37
|
reason = args[++index];
|
|
34
38
|
else if (arg.startsWith("--reason="))
|
|
35
39
|
reason = arg.slice("--reason=".length);
|
|
40
|
+
else if (arg === "--prompt-override")
|
|
41
|
+
promptOverrideSpecs.push(args[++index] ?? "");
|
|
42
|
+
else if (arg.startsWith("--prompt-override="))
|
|
43
|
+
promptOverrideSpecs.push(arg.slice("--prompt-override=".length));
|
|
44
|
+
else if (arg === "--prompt-override-append")
|
|
45
|
+
promptOverrideAppendSpecs.push(args[++index] ?? "");
|
|
46
|
+
else if (arg.startsWith("--prompt-override-append="))
|
|
47
|
+
promptOverrideAppendSpecs.push(arg.slice("--prompt-override-append=".length));
|
|
36
48
|
else if (arg === "--json")
|
|
37
49
|
continue;
|
|
38
50
|
else if (arg.startsWith("-"))
|
|
@@ -50,7 +62,13 @@ export function parseDagRerunArgs(args) {
|
|
|
50
62
|
if (planHash || requestId || reason) {
|
|
51
63
|
throw new Error("dag rerun --plan cannot be combined with execute flags");
|
|
52
64
|
}
|
|
53
|
-
return {
|
|
65
|
+
return {
|
|
66
|
+
parentRunId,
|
|
67
|
+
selectedNodeId,
|
|
68
|
+
planOnly: true,
|
|
69
|
+
promptOverrideSpecs,
|
|
70
|
+
promptOverrideAppendSpecs,
|
|
71
|
+
};
|
|
54
72
|
}
|
|
55
73
|
if (!planHash?.trim()) {
|
|
56
74
|
throw new Error("dag rerun execute requires --plan-hash <hash>");
|
|
@@ -68,15 +86,50 @@ export function parseDagRerunArgs(args) {
|
|
|
68
86
|
planHash: planHash.trim(),
|
|
69
87
|
requestId: requestId.trim(),
|
|
70
88
|
reason: reason.trim(),
|
|
89
|
+
promptOverrideSpecs,
|
|
90
|
+
promptOverrideAppendSpecs,
|
|
71
91
|
};
|
|
72
92
|
}
|
|
93
|
+
async function loadPromptOverrides(specs, mode) {
|
|
94
|
+
const overrides = [];
|
|
95
|
+
for (const spec of specs) {
|
|
96
|
+
const separator = spec.indexOf("@");
|
|
97
|
+
if (separator <= 0 || separator >= spec.length - 1) {
|
|
98
|
+
throw new Error(`dag rerun --prompt-override${mode === "append" ? "-append" : ""} expects <nodeId>@<filePath>, got: ${spec}`);
|
|
99
|
+
}
|
|
100
|
+
const nodeId = spec.slice(0, separator);
|
|
101
|
+
const filePath = spec.slice(separator + 1);
|
|
102
|
+
let prompt;
|
|
103
|
+
try {
|
|
104
|
+
prompt = await readFile(filePath, "utf-8");
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
throw new Error(`cannot read prompt override file for node ${nodeId} (${filePath}): ${error instanceof Error ? error.message : String(error)}`);
|
|
108
|
+
}
|
|
109
|
+
overrides.push(mode === "append" ? { nodeId, prompt, mode } : { nodeId, prompt });
|
|
110
|
+
}
|
|
111
|
+
return overrides;
|
|
112
|
+
}
|
|
73
113
|
export async function runDagRerun(repoRoot, rawArgs) {
|
|
74
114
|
const parsed = parseDagRerunArgs(rawArgs);
|
|
115
|
+
let promptOverrides;
|
|
116
|
+
const hasOverrides = parsed.promptOverrideSpecs.length > 0 ||
|
|
117
|
+
parsed.promptOverrideAppendSpecs.length > 0;
|
|
118
|
+
if (hasOverrides) {
|
|
119
|
+
if (!isDagRerunPromptOverrideEnabled()) {
|
|
120
|
+
throw new Error("prompt override rerun is disabled; set HARNESS_DAG_RERUN_PROMPT_OVERRIDE=1 to enable this experimental capability");
|
|
121
|
+
}
|
|
122
|
+
promptOverrides = [
|
|
123
|
+
...(await loadPromptOverrides(parsed.promptOverrideSpecs, "replace")),
|
|
124
|
+
...(await loadPromptOverrides(parsed.promptOverrideAppendSpecs, "append")),
|
|
125
|
+
];
|
|
126
|
+
}
|
|
75
127
|
if (parsed.planOnly) {
|
|
76
128
|
const plan = await planDagRerun({
|
|
77
129
|
cwd: repoRoot,
|
|
78
130
|
parentRunId: parsed.parentRunId,
|
|
79
131
|
selectedNodeId: parsed.selectedNodeId,
|
|
132
|
+
promptOverrides,
|
|
80
133
|
});
|
|
81
134
|
const result = {
|
|
82
135
|
ok: plan.eligible,
|
|
@@ -95,6 +148,7 @@ export async function runDagRerun(repoRoot, rawArgs) {
|
|
|
95
148
|
planHash: parsed.planHash,
|
|
96
149
|
requestId: parsed.requestId,
|
|
97
150
|
reason: parsed.reason,
|
|
151
|
+
promptOverrides,
|
|
98
152
|
});
|
|
99
153
|
console.log(JSON.stringify(result, null, 2));
|
|
100
154
|
if (!result.ok) {
|