@tea-agent/loop-agent 0.43.0-next.17 → 0.43.0-next.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/CHANGELOG.md +9 -140
- package/dist/application/task-lifecycle/advance.js +4 -17
- package/dist/application/task-lifecycle/observe.js +29 -43
- package/dist/application/task-lifecycle/plan-transitions.js +4 -5
- package/dist/build-stamp.json +3 -3
- package/dist/commands/client-recovery.js +55 -20
- package/dist/commands/new-task.js +5 -0
- package/dist/commands/status.js +57 -0
- package/dist/commands/task-contract.js +269 -0
- package/dist/executors/dag-pi-executor.js +230 -269
- package/dist/executors/pi-executor.js +0 -2
- package/dist/executors/pi-sdk-executor.js +39 -77
- package/dist/executors/shell-executor.js +2 -3
- package/dist/executors/shell-write-guard.js +32 -27
- package/dist/shared/pi-context-pressure/extension.js +16 -26
- package/dist/shared/pi-retry-settings.js +0 -40
- package/dist/shared/prompts.js +26 -0
- package/dist/task/config.js +2 -0
- package/dist/task/contract/validate-draft.js +106 -0
- package/dist/task/goal.js +3 -0
- package/dist/task/index.js +12 -0
- package/dist/task/lifecycle.js +1 -0
- package/dist/task/operator/capabilities.js +6 -0
- package/dist/task/operator/envelope.js +2 -0
- package/dist/task/operator/index.js +5 -0
- package/dist/task/operator/registry.js +2 -0
- package/dist/task/operator/types.js +1 -0
- package/dist/task/paths.js +1 -0
- package/dist/task/source-prepare/source-fidelity-pi.js +2 -2
- package/dist/task/source-references.js +23 -48
- package/dist/task/source-state.js +1 -0
- package/dist/task/subagent-guidance.js +1 -0
- package/dist/worker/console/chat/assistant-content.js +2 -23
- package/dist/worker/console/chat/explore-tools.js +0 -13
- package/dist/worker/console/chat/pi-runtime.js +1182 -221
- package/dist/worker/console/chat/routes.js +71 -213
- package/dist/worker/console/chat/sdd-data-alignment.js +9 -65
- package/dist/worker/console/chat/session-catalog.js +0 -32
- package/dist/worker/console/chat/session-store.js +6 -22
- package/dist/worker/console/chat/shortcuts.js +0 -6
- package/dist/worker/console/chat/sift-bridge.js +1 -0
- package/dist/worker/console/chat/tool-preview.js +0 -11
- package/dist/worker/console/chat/tools.js +0 -6
- package/dist/worker/console/console-update-and-init.js +19 -1
- package/dist/worker/console/console-update-runtime.js +20 -5
- package/dist/worker/console/index.js +20 -0
- package/dist/worker/console/operator-actions.js +1 -13
- package/dist/worker/console/routes.js +0 -8
- package/dist/worker/console/server.js +29 -11
- package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-C4NXyedy.js → abnfDiagram-N423BO3Z-hUmM_GRf.js} +1 -1
- package/dist/worker/console/static/assets/{arc-NZ3qXvBI.js → arc-Bt-xuieW.js} +1 -1
- package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-COZSRvml.js → architectureDiagram-T3A2C74G-DTqkL4DJ.js} +1 -1
- package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-Ck0Gxi9C.js → blockDiagram-VBNYF7ZC-Cy0MNnzV.js} +1 -1
- package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-BX5HQ4Ox.js → c4Diagram-5PPSVZJV-DDdlT0Pd.js} +1 -1
- package/dist/worker/console/static/assets/channel-BpzRnZmU.js +1 -0
- package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-CoviemSL.js → chunk-2GRJ4B5K-3JawwNZ6.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-DbOdOkbZ.js → chunk-2Q5K7J3B-DoTp7Cri.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5RXB4S5H-BsG2pmdQ.js → chunk-5RXB4S5H-CcirhZaS.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5VM5RSS4-DGdvrNm8.js → chunk-5VM5RSS4-VrG21gnP.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-BAy7Yd6y.js → chunk-6Q2QTUOP-DDOgIS70.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-GF5L2VYU-D9UA7hUb.js → chunk-GF5L2VYU-CBjmgvJ_.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-JWPE2WC7-DPz7SZ8V.js → chunk-JWPE2WC7-CCQSht8M.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-KBJHAD2P-BmuEOIh7.js → chunk-KBJHAD2P-BpGMkUUV.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-RYQCIY6F-CIhBWnd8.js → chunk-RYQCIY6F-DNDT41QL.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-XXDRQBXY-CScR6mDD.js → chunk-XXDRQBXY-euXnDFbn.js} +1 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-BhlMVqCc.js +1 -0
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-BhlMVqCc.js +1 -0
- package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-BjpfWaUr.js → cose-bilkent-JH36ORCC-BJ6NAeql.js} +1 -1
- package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-BFQohJgT.js → cynefin-VYW2F7L2-F5JKIvIq.js} +1 -1
- package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-D3gzRJnS.js → cynefinDiagram-MW4NZA55-Cwmkl_Gi.js} +1 -1
- package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-5eojkhoA.js → dagre-VZM6K2ZE-BmCZ8815.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-7IWD3JNH-CpD8LWu_.js → diagram-7IWD3JNH-zWA3hUnX.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-B8_4qJ2a.js → diagram-B4RE2ZJO-BzA-888F.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-LBJQPF4R-HOsXf0eu.js → diagram-LBJQPF4R-tPNheoch.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-Q27KOJAE-BqwRwiWP.js → diagram-Q27KOJAE-Cdi7Fyqp.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-UB23O5K3-BRVCNZe1.js → diagram-UB23O5K3-DFK9VBf1.js} +1 -1
- package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-Cvb1TgGh.js → ebnfDiagram-BXEA7PRR-xCUr1kpg.js} +1 -1
- package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-DS0O0qG9.js → erDiagram-JOGREHBK-BANQHY_A.js} +1 -1
- package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-BHIRvRr3.js → flowDiagram-UKHOOZJN-VHJYEMkP.js} +1 -1
- package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-DcCJ1JWx.js → ganttDiagram-PKOTCBZU-DiyZQ0C6.js} +1 -1
- package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-B9ia5ony.js → gitGraphDiagram-DS77QQ5N-CZtIeBBa.js} +1 -1
- package/dist/worker/console/static/assets/index-BlN6ytLr.css +1 -0
- package/dist/worker/console/static/assets/index-CA-jfWlE.js +449 -0
- package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-3ogpgegn.js → infoDiagram-6WML65LV-BuSspC0X.js} +1 -1
- package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-4tgpQ5SL.js → ishikawaDiagram-WSZJBQD7-DRJZyPFy.js} +1 -1
- package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-DNfgHqFx.js → journeyDiagram-NVQOT4AX-DIfXIVuE.js} +1 -1
- package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-Dz7ngC8z.js → kanban-definition-27J2QSJJ-CT10_7Lt.js} +1 -1
- package/dist/worker/console/static/assets/{linear-DI7Jv62E.js → linear-ufemj74H.js} +1 -1
- package/dist/worker/console/static/assets/{mermaid.core-CQA4Nzmo.js → mermaid.core-DEQe8-_m.js} +5 -5
- package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-CtsMc8Mf.js → mindmap-definition-FAOFIHXS-BRLUrbrC.js} +1 -1
- package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-ByppE9yH.js → pegDiagram-VL7TDLO6-BgibKtiF.js} +1 -1
- package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-B5PtgFgt.js → pieDiagram-7S7Q4E2Y-D3eyfdV9.js} +1 -1
- package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-Cq4p0k2K.js → quadrantDiagram-CIZ2JOQS-DXeTk5Px.js} +1 -1
- package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-DjfkyljN.js → railroadDiagram-AXF67PYL-BgXdFEe7.js} +1 -1
- package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-DzynNRSl.js → requirementDiagram-LRYGKXZP-CseC2A7R.js} +1 -1
- package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-Cj7TCpTJ.js → sankeyDiagram-W5VNT64P-D80PFzfJ.js} +1 -1
- package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-C73C6ykA.js → sequenceDiagram-SI44F4Z6-BWzHW7LS.js} +1 -1
- package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-BiNLgN2x.js → sizeCapture-X5ZJPWSS-xWQYTLAn.js} +1 -1
- package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-UwvjS64-.js → stateDiagram-OKZ733FA-CLxtpZeL.js} +1 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-CiVoq4G-.js +1 -0
- package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-CC7DH98r.js → swimlanes-SLNWSIFB-DwugtmWV.js} +2 -2
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-BkdgdpfR.js +8 -0
- package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-LSBXTR70.js → timeline-definition-Z64GVDOM-DHEOwHIe.js} +1 -1
- package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-BAuxWwGP.js → vennDiagram-T6HMQDX7-pmbZKlBK.js} +1 -1
- package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y--E5_gjZx.js → wardleyDiagram-T6FBY63Y-CivHoM5q.js} +1 -1
- package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-dJWNmyzF.js → xychartDiagram-ELKLHX3M-BfHIE7o6.js} +1 -1
- package/dist/worker/console/static/index.html +2 -2
- package/dist/worker/console/static-src/operator-chat/chat-sse-events.js +10 -122
- package/dist/worker/console/static-src/operator-chat/compaction-message.js +0 -7
- package/dist/worker/console/static-src/operator-chat/pending-user-message.js +15 -35
- package/dist/worker/console/static-src/operator-chat/useChatSessions.js +62 -136
- package/dist/worker/console/static-src/operator-chat/useChatStream.js +68 -159
- package/dist/worker/console/static-src/operator-chat/useChatThread.js +56 -75
- package/dist/worker/console/static-src/operator-chat/useComposer.js +78 -206
- package/dist/worker/console/workspace-context.js +1 -21
- package/dist/worker/observe/static/router.js +1 -1
- package/dist/worker/observe/static/styles.css +4 -7
- package/dist/worker/observe/static/views/dag-inspector.js +19 -12
- package/dist/worker/observe/static/views/dag.js +2 -2
- package/dist/worker/scheduler/index.js +25 -0
- package/dist/workflows/dag/facts.js +4 -0
- package/dist/workflows/dag/frontend-closeout.js +1 -1
- package/dist/workflows/dag/frontend-design-policy.js +1 -2
- package/dist/workflows/dag/frontend-implementation-contract.js +4 -8
- package/dist/workflows/dag/frontend-prewrite-gate.js +3 -3
- package/dist/workflows/dag/frontend-repair.js +76 -55
- package/dist/workflows/dag/frontend-review-context.js +1 -2
- package/dist/workflows/dag/frontend-review-scopes.js +12 -34
- package/dist/workflows/dag/frontend-shape-facts.js +2 -12
- package/dist/workflows/dag/frontend-verification-trace.js +42 -8
- package/dist/workflows/dag/index.js +6 -0
- package/dist/workflows/dag/init-hybrid.js +160 -97
- package/dist/workflows/dynamic/index.js +7 -0
- package/docs/architecture/runtime-boundaries.md +3 -3
- package/docs/templates/frontend-implementation-dag.json +8 -9
- package/package.json +3 -7
- package/skills/frontend-bounded-implement/SKILL.md +3 -4
- package/skills/frontend-bounded-implement/references/code-standards.md +3 -3
- package/skills/frontend-contract/references/contract-protocol.md +1 -3
- package/skills/frontend-design-review/SKILL.md +7 -12
- package/skills/frontend-design-review/references/review-checklist.md +7 -7
- package/skills/frontend-plan/SKILL.md +0 -19
- package/skills/frontend-plan/references/decision-contract.md +19 -26
- package/skills/frontend-review/SKILL.md +18 -12
- package/skills/frontend-review/references/review-findings.md +43 -24
- package/dist/shared/pi-provider-recovery.js +0 -182
- package/dist/worker/console/chat/browser-automation.js +0 -363
- package/dist/worker/console/chat/browser-policy.js +0 -113
- package/dist/worker/console/chat/browser-routes.js +0 -162
- package/dist/worker/console/chat/pi-runtime/custom-tools/ask-user-question.js +0 -44
- package/dist/worker/console/chat/pi-runtime/custom-tools/browser-tools.js +0 -89
- package/dist/worker/console/chat/pi-runtime/custom-tools/explore-tools.js +0 -202
- package/dist/worker/console/chat/pi-runtime/custom-tools/goal-tools.js +0 -79
- package/dist/worker/console/chat/pi-runtime/custom-tools/operator-tools.js +0 -86
- package/dist/worker/console/chat/pi-runtime/custom-tools/todo-write.js +0 -38
- package/dist/worker/console/chat/pi-runtime/inspection-types.js +0 -28
- package/dist/worker/console/chat/pi-runtime/inspection.js +0 -439
- package/dist/worker/console/chat/pi-runtime/sdk-bindings.js +0 -153
- package/dist/worker/console/chat/pi-runtime/sdk-session.js +0 -5
- package/dist/worker/console/chat/scm-routes.js +0 -217
- package/dist/worker/console/chat/scm-service.js +0 -283
- package/dist/worker/console/chat/scm-tools.js +0 -111
- package/dist/worker/console/chat/session-mode-view.js +0 -49
- package/dist/worker/console/chat/session-mode.js +0 -220
- package/dist/worker/console/chat/terminal-routes.js +0 -216
- package/dist/worker/console/chat/terminal-sessions.js +0 -348
- package/dist/worker/console/chat/terminal-tools.js +0 -211
- package/dist/worker/console/static/assets/channel-BxdTlb_5.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-_ByA1Nf8.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-_ByA1Nf8.js +0 -1
- package/dist/worker/console/static/assets/index-B9goN3S5.css +0 -1
- package/dist/worker/console/static/assets/index-wXlQohNs.js +0 -469
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-nLgMZ0D3.js +0 -1
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-BcYqTady.js +0 -8
- package/dist/worker/console/static-src/operator-chat/active-turn-tail.js +0 -10
- package/dist/worker/console/static-src/operator-chat/chat-link.js +0 -94
- package/dist/worker/console/static-src/operator-chat/chat-scroll-position.js +0 -24
- package/dist/worker/console/static-src/operator-chat/composer-session-ledger.js +0 -192
- package/dist/worker/console/static-src/operator-chat/process-label.js +0 -41
- package/dist/worker/console/static-src/operator-chat/turn-group-equality.js +0 -13
- package/dist/worker/console/static-src/operator-chat/turn-process-disclosure.js +0 -10
- package/dist/worker/console/static-src/operator-chat/use-searchable-hidden.js +0 -51
- package/dist/worker/console/static-src/operator-chat/user-turn-anchor-equality.js +0 -21
- package/dist/worker/console/workspace-initialization.js +0 -209
- package/dist/workflows/dag/frontend-capacity.js +0 -9
- package/dist/workflows/dag/frontend-plan-completeness.js +0 -186
- package/dist/workflows/dag/frontend-plan-recovery-policy.js +0 -18
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* source/references/, separate from the derived source/需求.md contract.
|
|
6
6
|
*/
|
|
7
7
|
import { createHash } from "node:crypto";
|
|
8
|
-
import { access, copyFile,
|
|
8
|
+
import { access, copyFile, mkdir, readdir, readFile, writeFile, } from "node:fs/promises";
|
|
9
9
|
import path from "node:path";
|
|
10
10
|
import { getTaskPaths, loadTaskConfig } from "./runtime.js";
|
|
11
11
|
import { writeTaskConfig } from "../infrastructure/harness/task-store.js";
|
|
@@ -87,7 +87,6 @@ export async function materializeTaskReferenceDocs(input) {
|
|
|
87
87
|
const referenceDir = path.join(paths.sourceDir, SOURCE_REFERENCE_DIRECTORY);
|
|
88
88
|
await mkdir(referenceDir, { recursive: true });
|
|
89
89
|
const materialized = [];
|
|
90
|
-
const manifest = await readSourceManifest(paths.sourceDir);
|
|
91
90
|
for (const doc of docs) {
|
|
92
91
|
const absoluteSource = path.isAbsolute(doc.path)
|
|
93
92
|
? doc.path
|
|
@@ -95,10 +94,7 @@ export async function materializeTaskReferenceDocs(input) {
|
|
|
95
94
|
await assertReadableFile(absoluteSource, `referenceDocs entry "${doc.name ?? doc.path}"`);
|
|
96
95
|
const extension = path.extname(absoluteSource) || ".md";
|
|
97
96
|
const baseName = slugifyName(doc.name ?? path.basename(absoluteSource, extension));
|
|
98
|
-
const
|
|
99
|
-
const targetName = imported
|
|
100
|
-
? path.basename(imported.materializedPath)
|
|
101
|
-
: `${baseName}${extension}`;
|
|
97
|
+
const targetName = `${baseName}${extension}`;
|
|
102
98
|
const targetPath = path.join(referenceDir, targetName);
|
|
103
99
|
try {
|
|
104
100
|
await access(targetPath);
|
|
@@ -136,23 +132,14 @@ export async function importPrdDocument(input) {
|
|
|
136
132
|
catch {
|
|
137
133
|
// directory may be empty / just created
|
|
138
134
|
}
|
|
139
|
-
//
|
|
140
|
-
|
|
141
|
-
const
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
const stats = await lstat(candidate);
|
|
148
|
-
if (!stats.isFile() || stats.isSymbolicLink() ||
|
|
149
|
-
!(await sameHashIfExists(candidate, hash.sha256))) {
|
|
150
|
-
throw new Error(`REFERENCE_HASH_MISMATCH: ${matching.materializedPath}`);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
const targetFileName = matching
|
|
154
|
-
? path.basename(matching.materializedPath)
|
|
155
|
-
: ensureUniqueReferenceName(existingNames, requestedName, extension);
|
|
135
|
+
// Prefer stable name "requirement.md" when free; otherwise suffix.
|
|
136
|
+
const preferredName = `${requestedName}${extension}`;
|
|
137
|
+
const targetFileName = existingNames.has(preferredName)
|
|
138
|
+
? // If the same content is already there, reuse; else unique name.
|
|
139
|
+
(await sameHashIfExists(path.join(referenceDir, preferredName), hash.sha256))
|
|
140
|
+
? preferredName
|
|
141
|
+
: ensureUniqueReferenceName(existingNames, requestedName, extension)
|
|
142
|
+
: preferredName;
|
|
156
143
|
const targetPath = path.join(referenceDir, targetFileName);
|
|
157
144
|
if (!(await fileExists(targetPath))) {
|
|
158
145
|
await writeFile(targetPath, hash.content);
|
|
@@ -162,7 +149,7 @@ export async function importPrdDocument(input) {
|
|
|
162
149
|
? toPosixRelative(input.repoRoot, absoluteSource)
|
|
163
150
|
: input.filePath.split(path.sep).join("/");
|
|
164
151
|
const materializedRelativePath = `${SOURCE_REFERENCE_DIRECTORY}/${targetFileName}`;
|
|
165
|
-
const document =
|
|
152
|
+
const document = {
|
|
166
153
|
role,
|
|
167
154
|
name: requestedName,
|
|
168
155
|
sourcePath: sourcePathForRecord,
|
|
@@ -189,28 +176,20 @@ export async function importPrdDocument(input) {
|
|
|
189
176
|
: (existingManifest?.updatedAt ?? importedAt),
|
|
190
177
|
documents,
|
|
191
178
|
};
|
|
192
|
-
|
|
193
|
-
await writeSourceManifest(paths.sourceDir, manifest);
|
|
179
|
+
await writeSourceManifest(paths.sourceDir, manifest);
|
|
194
180
|
const taskConfig = await loadTaskConfig(input.repoRoot, input.taskId);
|
|
195
181
|
const referenceDocs = [...(taskConfig.referenceDocs ?? [])];
|
|
196
|
-
const
|
|
182
|
+
const alreadyListed = referenceDocs.some((doc) => {
|
|
197
183
|
const absolute = path.isAbsolute(doc.path)
|
|
198
184
|
? doc.path
|
|
199
185
|
: path.resolve(input.repoRoot, doc.path);
|
|
200
186
|
return absolute === absoluteSource;
|
|
201
187
|
});
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
};
|
|
208
|
-
const configChanged = listedIndex < 0 || referenceDocs[listedIndex]?.name !== reference.name;
|
|
209
|
-
if (configChanged) {
|
|
210
|
-
if (listedIndex < 0)
|
|
211
|
-
referenceDocs.push(reference);
|
|
212
|
-
else
|
|
213
|
-
referenceDocs[listedIndex] = { ...referenceDocs[listedIndex], ...reference };
|
|
188
|
+
if (!alreadyListed) {
|
|
189
|
+
referenceDocs.push({
|
|
190
|
+
name: requestedName,
|
|
191
|
+
path: sourcePathForRecord,
|
|
192
|
+
});
|
|
214
193
|
await writeTaskConfig(input.repoRoot, input.taskId, {
|
|
215
194
|
...taskConfig,
|
|
216
195
|
referenceDocs,
|
|
@@ -219,15 +198,11 @@ export async function importPrdDocument(input) {
|
|
|
219
198
|
// Managed contracts must bump revision after import-prd mutates manifest/task config.
|
|
220
199
|
// Lazy import avoids circular init with contract/observe.
|
|
221
200
|
const { refreshManagedContractAfterImport } = await import("./contract/import-revision.js");
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
taskId: input.taskId,
|
|
227
|
-
});
|
|
228
|
-
}
|
|
201
|
+
await refreshManagedContractAfterImport({
|
|
202
|
+
repoRoot: input.repoRoot,
|
|
203
|
+
taskId: input.taskId,
|
|
204
|
+
});
|
|
229
205
|
return {
|
|
230
|
-
changed,
|
|
231
206
|
taskId: input.taskId,
|
|
232
207
|
sourcePath: sourcePathForRecord,
|
|
233
208
|
materializedAbsolutePath: targetPath,
|
|
@@ -235,7 +210,7 @@ export async function importPrdDocument(input) {
|
|
|
235
210
|
sha256: hash.sha256,
|
|
236
211
|
bytes: hash.bytes,
|
|
237
212
|
manifestPath: getSourceManifestPath(paths.sourceDir),
|
|
238
|
-
referenceDocs,
|
|
213
|
+
referenceDocs: alreadyListed ? referenceDocs : [...referenceDocs],
|
|
239
214
|
};
|
|
240
215
|
}
|
|
241
216
|
async function sameHashIfExists(filePath, sha256) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { assertPlanFreshForImplement, markSpecCompleted, refreshSourceState, } from "./runtime.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { resolvePiSubagentTools, resolveSubagentGuidance, shouldInjectSubagentGuidance, SUBAGENT_GUIDANCE, SUBAGENT_GUIDANCE_STANDARD, SUBAGENT_GUIDANCE_STRONG, } from "./runtime.js";
|
|
@@ -115,30 +115,9 @@ export function splitFinalAssistantBlocks(blocks, options = {}) {
|
|
|
115
115
|
if (lastProcessIndex === -1) {
|
|
116
116
|
return { answerBlocks: displayable, processBlocks: [] };
|
|
117
117
|
}
|
|
118
|
-
const trailing = displayable.slice(lastProcessIndex + 1);
|
|
119
|
-
if (trailing.length > 0) {
|
|
120
|
-
return {
|
|
121
|
-
answerBlocks: trailing,
|
|
122
|
-
processBlocks: displayable.slice(0, lastProcessIndex + 1),
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
|
-
// The stage ends on a non-text block (a tool call after the prose, or a final
|
|
126
|
-
// thinking block). Returning an empty answer here hid the whole reply inside
|
|
127
|
-
// the collapsed process subtree; keep the last prose block as the visible
|
|
128
|
-
// answer instead (2026-09-08).
|
|
129
|
-
let lastTextIndex = -1;
|
|
130
|
-
for (let i = displayable.length - 1; i >= 0; i--) {
|
|
131
|
-
if (isFinalAnswerBlock(displayable[i])) {
|
|
132
|
-
lastTextIndex = i;
|
|
133
|
-
break;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
if (lastTextIndex === -1) {
|
|
137
|
-
return { answerBlocks: [], processBlocks: displayable };
|
|
138
|
-
}
|
|
139
118
|
return {
|
|
140
|
-
answerBlocks:
|
|
141
|
-
processBlocks: displayable.
|
|
119
|
+
answerBlocks: displayable.slice(lastProcessIndex + 1),
|
|
120
|
+
processBlocks: displayable.slice(0, lastProcessIndex + 1),
|
|
142
121
|
};
|
|
143
122
|
}
|
|
144
123
|
export function joinAssistantText(blocks) {
|
|
@@ -71,10 +71,6 @@ export const SECRET_SCRUB_PATTERNS = [
|
|
|
71
71
|
name: "private-key-block",
|
|
72
72
|
re: /-----BEGIN (?:RSA |EC |OPENSSH |DSA |)PRIVATE KEY-----[\s\S]*?-----END (?:RSA |EC |OPENSSH |DSA |)PRIVATE KEY-----/g,
|
|
73
73
|
},
|
|
74
|
-
{
|
|
75
|
-
name: "aimax-auth-token",
|
|
76
|
-
re: /\bAIMAX_AUTH_TOKEN=["']?[^\s"']+/g,
|
|
77
|
-
},
|
|
78
74
|
];
|
|
79
75
|
/** Throw a typed explore error (kept as a value object so callers can read .code). */
|
|
80
76
|
export class ExploreDeniedError extends Error {
|
|
@@ -93,10 +89,6 @@ export class ExploreDeniedError extends Error {
|
|
|
93
89
|
*/
|
|
94
90
|
export function scrubSecrets(input) {
|
|
95
91
|
let out = input;
|
|
96
|
-
const liveToken = process.env.AIMAX_AUTH_TOKEN;
|
|
97
|
-
if (liveToken && liveToken.length >= 8 && out.includes(liveToken)) {
|
|
98
|
-
out = out.split(liveToken).join("[REDACTED:aimax-auth-token]");
|
|
99
|
-
}
|
|
100
92
|
const redactions = [];
|
|
101
93
|
for (const { name, re } of SECRET_SCRUB_PATTERNS) {
|
|
102
94
|
re.lastIndex = 0;
|
|
@@ -106,11 +98,6 @@ export function scrubSecrets(input) {
|
|
|
106
98
|
redactions.push({ name, count: matches.length });
|
|
107
99
|
}
|
|
108
100
|
}
|
|
109
|
-
if (liveToken && liveToken.length >= 8 && input.includes(liveToken)) {
|
|
110
|
-
const existing = redactions.find((entry) => entry.name === "aimax-auth-token");
|
|
111
|
-
if (!existing)
|
|
112
|
-
redactions.push({ name: "aimax-auth-token", count: 1 });
|
|
113
|
-
}
|
|
114
101
|
return { scrubbed: out, redactions };
|
|
115
102
|
}
|
|
116
103
|
/** True if a repo-relative path matches a sensitive-file denylist pattern. */
|