@mjasnikovs/pi-task 0.38.28 → 0.38.30
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/dist/config/config.d.ts +70 -70
- package/dist/config/config.js +26 -35
- package/dist/config/extension-list.d.ts +6 -5
- package/dist/config/extension-list.js +3 -2
- package/dist/config/reasoning-args.d.ts +9 -7
- package/dist/config/reasoning-args.js +12 -10
- package/dist/config/reasoning.d.ts +44 -105
- package/dist/config/reasoning.js +27 -704
- package/dist/config/register.d.ts +34 -48
- package/dist/config/register.js +41 -51
- package/dist/config/tool-list.d.ts +16 -16
- package/dist/config/tool-list.js +1 -1
- package/dist/remote/bridge.d.ts +19 -10
- package/dist/remote/bridge.js +3 -2
- package/dist/remote/broadcast.js +3 -1
- package/dist/remote/events.js +12 -11
- package/dist/remote/history.d.ts +1 -1
- package/dist/remote/protocol.d.ts +6 -3
- package/dist/remote/protocol.js +2 -1
- package/dist/remote/push.d.ts +16 -16
- package/dist/remote/push.js +27 -27
- package/dist/remote/register.d.ts +3 -3
- package/dist/remote/register.js +17 -19
- package/dist/remote/server.d.ts +9 -8
- package/dist/remote/server.js +15 -14
- package/dist/remote/session-state.d.ts +5 -4
- package/dist/remote/session-state.js +8 -5
- package/dist/remote/sw.d.ts +7 -6
- package/dist/remote/sw.js +7 -6
- package/dist/remote/tailscale.d.ts +4 -2
- package/dist/remote/tailscale.js +4 -2
- package/dist/remote/ui-highlight.js +6 -5
- package/dist/remote/ui-render.js +4 -4
- package/dist/remote/ui-script.js +24 -24
- package/dist/remote/ui-styles.d.ts +1 -1
- package/dist/remote/ui-styles.js +10 -13
- package/dist/remote/ui-tools.js +9 -6
- package/dist/shared/child-extensions.d.ts +29 -17
- package/dist/shared/child-extensions.js +29 -17
- package/dist/shared/child-output.d.ts +30 -24
- package/dist/shared/child-output.js +25 -17
- package/dist/shared/child-process.d.ts +47 -40
- package/dist/shared/child-process.js +50 -59
- package/dist/shared/command-watchdog.d.ts +22 -16
- package/dist/shared/command-watchdog.js +28 -21
- package/dist/shared/fs-text.d.ts +16 -10
- package/dist/shared/fs-text.js +16 -10
- package/dist/shared/git-runner.d.ts +25 -25
- package/dist/shared/git-runner.js +25 -25
- package/dist/shared/leaked-tool-call.d.ts +17 -11
- package/dist/shared/leaked-tool-call.js +23 -15
- package/dist/shared/model-endpoint.d.ts +29 -16
- package/dist/shared/model-endpoint.js +33 -21
- package/dist/shared/pi-invocation.d.ts +7 -4
- package/dist/shared/pi-invocation.js +12 -7
- package/dist/shared/pkg-version.d.ts +13 -5
- package/dist/shared/pkg-version.js +13 -5
- package/dist/shared/reasoning-capability.d.ts +35 -24
- package/dist/shared/reasoning-capability.js +35 -24
- package/dist/shared/stream-watchdog.d.ts +60 -44
- package/dist/shared/stream-watchdog.js +62 -45
- package/dist/task/accept-debt.d.ts +41 -43
- package/dist/task/accept-debt.js +73 -65
- package/dist/task/api-synthesis.d.ts +24 -21
- package/dist/task/api-synthesis.js +32 -26
- package/dist/task/apis-contract.d.ts +32 -64
- package/dist/task/apis-contract.js +32 -64
- package/dist/task/artifact-closure.d.ts +27 -13
- package/dist/task/artifact-closure.js +95 -67
- package/dist/task/auto-commit.d.ts +46 -35
- package/dist/task/auto-commit.js +51 -38
- package/dist/task/auto-io.d.ts +45 -25
- package/dist/task/auto-io.js +57 -29
- package/dist/task/auto-orchestrator.d.ts +26 -24
- package/dist/task/auto-orchestrator.js +178 -162
- package/dist/task/auto-prompts.d.ts +36 -24
- package/dist/task/auto-prompts.js +40 -26
- package/dist/task/autofix-ledger.d.ts +27 -25
- package/dist/task/autofix-ledger.js +29 -26
- package/dist/task/batch-test-task.d.ts +20 -12
- package/dist/task/batch-test-task.js +67 -60
- package/dist/task/boot-probe.d.ts +60 -44
- package/dist/task/boot-probe.js +91 -72
- package/dist/task/cancel-input.d.ts +30 -16
- package/dist/task/cancel-input.js +20 -11
- package/dist/task/cancel-points.d.ts +27 -20
- package/dist/task/cancel-points.js +30 -22
- package/dist/task/child-runner.d.ts +46 -51
- package/dist/task/child-runner.js +48 -49
- package/dist/task/child-status.d.ts +23 -16
- package/dist/task/child-status.js +23 -16
- package/dist/task/clamp-output.js +12 -5
- package/dist/task/command-run.d.ts +31 -28
- package/dist/task/command-run.js +44 -35
- package/dist/task/command-shrink.d.ts +25 -18
- package/dist/task/command-shrink.js +37 -31
- package/dist/task/command-watchdog.d.ts +9 -6
- package/dist/task/command-watchdog.js +21 -15
- package/dist/task/context-attribution.d.ts +34 -26
- package/dist/task/context-attribution.js +34 -26
- package/dist/task/context-silence.d.ts +39 -29
- package/dist/task/context-silence.js +35 -25
- package/dist/task/context-usage.d.ts +25 -7
- package/dist/task/context-usage.js +21 -6
- package/dist/task/contracts.d.ts +8 -4
- package/dist/task/contracts.js +25 -17
- package/dist/task/coverage-loop.d.ts +22 -18
- package/dist/task/coverage-loop.js +35 -30
- package/dist/task/critique-probes.d.ts +13 -14
- package/dist/task/critique-probes.js +50 -39
- package/dist/task/debug-log.d.ts +13 -5
- package/dist/task/debug-log.js +32 -20
- package/dist/task/decompose-fidelity.d.ts +11 -9
- package/dist/task/decompose-fidelity.js +38 -33
- package/dist/task/decompose-granularity.d.ts +41 -38
- package/dist/task/decompose-granularity.js +41 -38
- package/dist/task/deep-render-check.d.ts +22 -14
- package/dist/task/deep-render-check.js +40 -31
- package/dist/task/dropped-input.d.ts +12 -7
- package/dist/task/dropped-input.js +5 -2
- package/dist/task/enforce-attribution.d.ts +38 -47
- package/dist/task/enforce-attribution.js +46 -52
- package/dist/task/enforce-guidelines.d.ts +31 -20
- package/dist/task/enforce-guidelines.js +32 -21
- package/dist/task/enrichment.d.ts +7 -2
- package/dist/task/enrichment.js +26 -14
- package/dist/task/env-notes.d.ts +16 -7
- package/dist/task/env-notes.js +48 -31
- package/dist/task/env-template-closure.d.ts +4 -4
- package/dist/task/env-template-closure.js +42 -34
- package/dist/task/external-context.d.ts +28 -21
- package/dist/task/external-context.js +17 -12
- package/dist/task/failure-classifier.d.ts +4 -5
- package/dist/task/failure-classifier.js +6 -7
- package/dist/task/file-inventory.d.ts +15 -11
- package/dist/task/file-inventory.js +25 -22
- package/dist/task/final-gate-fix.d.ts +74 -86
- package/dist/task/final-gate-fix.js +97 -116
- package/dist/task/final-gate-progress.d.ts +29 -46
- package/dist/task/final-gate-progress.js +40 -51
- package/dist/task/final-gate.d.ts +64 -97
- package/dist/task/final-gate.js +192 -199
- package/dist/task/fix-child.d.ts +21 -27
- package/dist/task/fix-child.js +21 -27
- package/dist/task/foreign-path.d.ts +6 -5
- package/dist/task/foreign-path.js +0 -0
- package/dist/task/frozen-conflict.d.ts +9 -10
- package/dist/task/frozen-conflict.js +61 -64
- package/dist/task/frozen-path-guard.d.ts +35 -14
- package/dist/task/frozen-path-guard.js +56 -39
- package/dist/task/gate-child.d.ts +27 -28
- package/dist/task/gate-child.js +37 -35
- package/dist/task/gate-deps.d.ts +34 -27
- package/dist/task/gate-deps.js +169 -159
- package/dist/task/gate-tally.d.ts +77 -80
- package/dist/task/gate-tally.js +65 -68
- package/dist/task/git-state-guard.d.ts +15 -11
- package/dist/task/git-state-guard.js +76 -66
- package/dist/task/impl-widget.d.ts +25 -16
- package/dist/task/impl-widget.js +27 -17
- package/dist/task/implementation-thinking.d.ts +33 -31
- package/dist/task/implementation-thinking.js +5 -6
- package/dist/task/implementation-turn.d.ts +34 -31
- package/dist/task/implementation-turn.js +29 -27
- package/dist/task/inline-markdown.d.ts +20 -7
- package/dist/task/inline-markdown.js +15 -6
- package/dist/task/launch-config-gap.js +25 -39
- package/dist/task/launch-contract.d.ts +18 -21
- package/dist/task/launch-contract.js +28 -30
- package/dist/task/launch-manifest.d.ts +6 -2
- package/dist/task/launch-manifest.js +35 -34
- package/dist/task/ledger.js +16 -14
- package/dist/task/lint-fix.d.ts +6 -8
- package/dist/task/lint-fix.js +67 -69
- package/dist/task/loop-detector.d.ts +9 -8
- package/dist/task/loop-detector.js +16 -12
- package/dist/task/mid-run-input.d.ts +17 -15
- package/dist/task/mid-run-input.js +17 -15
- package/dist/task/orchestrator.d.ts +24 -28
- package/dist/task/orchestrator.js +62 -64
- package/dist/task/orientation.d.ts +18 -23
- package/dist/task/orientation.js +24 -31
- package/dist/task/owned-freeze-conflict.d.ts +21 -20
- package/dist/task/owned-freeze-conflict.js +52 -85
- package/dist/task/owned-freeze-reassign.d.ts +40 -60
- package/dist/task/owned-freeze-reassign.js +41 -61
- package/dist/task/parsers.d.ts +4 -2
- package/dist/task/parsers.js +4 -4
- package/dist/task/phases.d.ts +41 -48
- package/dist/task/phases.js +180 -248
- package/dist/task/plan-io.d.ts +6 -7
- package/dist/task/plan-io.js +6 -7
- package/dist/task/plan-orchestrator.d.ts +10 -8
- package/dist/task/plan-orchestrator.js +14 -10
- package/dist/task/plan-prompts.d.ts +6 -5
- package/dist/task/plan-prompts.js +6 -5
- package/dist/task/plan-readonly.d.ts +4 -5
- package/dist/task/plan-readonly.js +4 -5
- package/dist/task/plan-rounds.d.ts +17 -29
- package/dist/task/plan-rounds.js +21 -34
- package/dist/task/plan-session.d.ts +58 -72
- package/dist/task/plan-session.js +61 -83
- package/dist/task/probe-gaming.d.ts +28 -27
- package/dist/task/probe-gaming.js +0 -0
- package/dist/task/prohibition-probe.d.ts +14 -16
- package/dist/task/prompts.d.ts +3 -4
- package/dist/task/prompts.js +17 -26
- package/dist/task/qa-transcript.d.ts +15 -22
- package/dist/task/qa-transcript.js +15 -21
- package/dist/task/question-box.d.ts +17 -13
- package/dist/task/question-box.js +19 -15
- package/dist/task/question-dedup.d.ts +6 -7
- package/dist/task/question-dedup.js +13 -14
- package/dist/task/question-dialog.d.ts +22 -32
- package/dist/task/question-dialog.js +22 -32
- package/dist/task/question-source.d.ts +18 -44
- package/dist/task/question-source.js +22 -51
- package/dist/task/refuted-constraint.d.ts +11 -31
- package/dist/task/refuted-constraint.js +27 -51
- package/dist/task/regenerable-artifacts.d.ts +12 -31
- package/dist/task/regenerable-artifacts.js +12 -31
- package/dist/task/render-check.d.ts +11 -22
- package/dist/task/render-check.js +33 -46
- package/dist/task/repo-health-check.d.ts +10 -14
- package/dist/task/repo-health-check.js +17 -23
- package/dist/task/requirements.d.ts +38 -71
- package/dist/task/requirements.js +78 -126
- package/dist/task/research-fanout-budget.d.ts +51 -88
- package/dist/task/research-fanout-budget.js +51 -88
- package/dist/task/research-worker.d.ts +33 -36
- package/dist/task/research-worker.js +39 -61
- package/dist/task/resume-gap.d.ts +14 -15
- package/dist/task/root-cause-repair.d.ts +9 -9
- package/dist/task/root-cause-repair.js +28 -40
- package/dist/task/run-bracket.d.ts +10 -13
- package/dist/task/run-end.d.ts +12 -22
- package/dist/task/run-end.js +8 -16
- package/dist/task/run-final-gate.d.ts +19 -21
- package/dist/task/run-final-gate.js +62 -80
- package/dist/task/runner-globs.d.ts +12 -13
- package/dist/task/runner-globs.js +12 -13
- package/dist/task/runner-resolve.d.ts +9 -9
- package/dist/task/runner-resolve.js +22 -23
- package/dist/task/script-escape.d.ts +10 -12
- package/dist/task/script-escape.js +13 -14
- package/dist/task/serve-entry.d.ts +1 -1
- package/dist/task/serve-entry.js +22 -25
- package/dist/task/service-blocks.js +4 -2
- package/dist/task/shipped-source.d.ts +11 -29
- package/dist/task/shipped-source.js +11 -29
- package/dist/task/skip-escape.js +10 -14
- package/dist/task/spec-urls.d.ts +26 -65
- package/dist/task/spec-urls.js +26 -65
- package/dist/task/spec-validation.d.ts +17 -20
- package/dist/task/spec-validation.js +17 -20
- package/dist/task/stall-detector.d.ts +23 -30
- package/dist/task/stall-detector.js +23 -30
- package/dist/task/stream-watchdog.d.ts +14 -12
- package/dist/task/stream-watchdog.js +14 -12
- package/dist/task/substitution-probe.d.ts +17 -20
- package/dist/task/substitution-probe.js +17 -20
- package/dist/task/task-gates.d.ts +36 -41
- package/dist/task/task-gates.js +95 -106
- package/dist/task/task-io.d.ts +4 -4
- package/dist/task/task-io.js +4 -4
- package/dist/task/task-parsers.js +4 -3
- package/dist/task/task-provenance.d.ts +2 -2
- package/dist/task/task-provenance.js +11 -13
- package/dist/task/task-types.d.ts +4 -3
- package/dist/task/terminal-outcome.d.ts +14 -16
- package/dist/task/terminal-outcome.js +12 -14
- package/dist/task/test-assembly.d.ts +13 -20
- package/dist/task/test-assembly.js +13 -20
- package/dist/task/timings.d.ts +5 -3
- package/dist/task/timings.js +5 -3
- package/dist/task/title-label.d.ts +9 -4
- package/dist/task/title-label.js +9 -4
- package/dist/task/type-only-answer.d.ts +44 -52
- package/dist/task/type-only-answer.js +44 -52
- package/dist/task/unfailable-command.d.ts +18 -24
- package/dist/task/unfailable-command.js +21 -27
- package/dist/task/unknown-routing.d.ts +10 -4
- package/dist/task/unknown-routing.js +10 -4
- package/dist/task/user-directives.d.ts +5 -8
- package/dist/task/user-directives.js +5 -8
- package/dist/task/verify-quality.d.ts +18 -22
- package/dist/task/verify-quality.js +45 -46
- package/dist/task/verify-reconcile.d.ts +15 -10
- package/dist/task/verify-reconcile.js +45 -43
- package/dist/task/verify-resolution.d.ts +24 -20
- package/dist/task/verify-resolution.js +51 -50
- package/dist/task/verify-work.d.ts +59 -66
- package/dist/task/verify-work.js +101 -138
- package/dist/task/widget.d.ts +15 -14
- package/dist/task/widget.js +22 -17
- package/dist/task/wiring-claims.d.ts +25 -32
- package/dist/task/wiring-claims.js +30 -35
- package/dist/task/write-guard.d.ts +39 -39
- package/dist/task/write-guard.js +48 -51
- package/dist/task/yolo.d.ts +34 -30
- package/dist/task/yolo.js +42 -37
- package/dist/workers/abstention.d.ts +21 -41
- package/dist/workers/abstention.js +27 -48
- package/dist/workers/brave-search.d.ts +4 -3
- package/dist/workers/brave-search.js +5 -2
- package/dist/workers/brave-warning.d.ts +7 -4
- package/dist/workers/brave-warning.js +19 -7
- package/dist/workers/ddg-search.d.ts +6 -6
- package/dist/workers/ddg-search.js +18 -12
- package/dist/workers/docs-cache.js +5 -2
- package/dist/workers/docs-chunk.d.ts +30 -37
- package/dist/workers/docs-chunk.js +37 -41
- package/dist/workers/docs-core.d.ts +28 -44
- package/dist/workers/docs-core.js +25 -44
- package/dist/workers/docs-index.js +4 -3
- package/dist/workers/docs-lookup.d.ts +15 -22
- package/dist/workers/docs-lookup.js +12 -21
- package/dist/workers/docs-project.d.ts +15 -9
- package/dist/workers/docs-project.js +17 -10
- package/dist/workers/docs-resolve.d.ts +19 -20
- package/dist/workers/docs-resolve.js +35 -32
- package/dist/workers/docs-retrieve.d.ts +5 -6
- package/dist/workers/docs-retrieve.js +18 -15
- package/dist/workers/exa-search.d.ts +9 -6
- package/dist/workers/exa-search.js +23 -12
- package/dist/workers/fetch-core.d.ts +13 -16
- package/dist/workers/fetch-core.js +23 -23
- package/dist/workers/focused-extractor.d.ts +12 -12
- package/dist/workers/focused-extractor.js +16 -19
- package/dist/workers/html-clean.js +24 -14
- package/dist/workers/http-request.d.ts +28 -20
- package/dist/workers/http-request.js +22 -17
- package/dist/workers/npm-version.d.ts +28 -11
- package/dist/workers/npm-version.js +24 -15
- package/dist/workers/phantom-imports.d.ts +15 -12
- package/dist/workers/phantom-imports.js +30 -24
- package/dist/workers/pi-worker-core.d.ts +86 -54
- package/dist/workers/pi-worker-core.js +112 -112
- package/dist/workers/pi-worker-docs.d.ts +24 -19
- package/dist/workers/pi-worker-docs.js +67 -76
- package/dist/workers/pi-worker-fetch.d.ts +7 -3
- package/dist/workers/pi-worker-fetch.js +27 -19
- package/dist/workers/pi-worker-search.js +12 -8
- package/dist/workers/pi-worker.d.ts +9 -4
- package/dist/workers/pi-worker.js +23 -10
- package/dist/workers/reasoning-warning.d.ts +18 -17
- package/dist/workers/reasoning-warning.js +22 -20
- package/dist/workers/research-cache.js +50 -78
- package/dist/workers/search-core.js +7 -5
- package/dist/workers/search-types.d.ts +10 -9
- package/dist/workers/search-types.js +9 -8
- package/dist/workers/session-hint.d.ts +13 -14
- package/dist/workers/session-hint.js +8 -9
- package/dist/workers/shared.d.ts +21 -25
- package/dist/workers/shared.js +0 -0
- package/dist/workers/single-read-extension.d.ts +14 -7
- package/dist/workers/single-read-extension.js +14 -7
- package/dist/workers/single-read-guard.d.ts +25 -28
- package/dist/workers/single-read-guard.js +32 -32
- package/dist/workers/typeonly-log.d.ts +12 -9
- package/dist/workers/typeonly-log.js +29 -33
- package/dist/workers/worker-channels.d.ts +15 -23
- package/dist/workers/worker-channels.js +15 -23
- package/dist/workers/worker-failure.d.ts +38 -46
- package/dist/workers/worker-failure.js +31 -39
- package/dist/workers/worker-kill.d.ts +25 -26
- package/dist/workers/worker-kill.js +16 -19
- package/dist/workers/worker-profiles.d.ts +43 -53
- package/dist/workers/worker-profiles.js +30 -38
- package/package.json +10 -8
|
@@ -5,28 +5,24 @@
|
|
|
5
5
|
* Five children run under the gates: `verify`, `recommend`, `lint-fix`,
|
|
6
6
|
* `final-fix` and `enforce`. All five share one ritual — reset the widget state,
|
|
7
7
|
* stamp the start, open a per-gate debug log, write a start marker, raise a
|
|
8
|
-
* status loader, call `runWorker`
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
8
|
+
* status loader, call `runWorker` on the `gate` profile (no wall clock; the
|
|
9
|
+
* path-revisit loop rule disabled, leaving the exact-match rule), warn on a
|
|
10
|
+
* surviving loop, classify the failure, write an end marker, throw on failure,
|
|
11
|
+
* and stop the loader — `ChildStatus.track` does that last one in a `finally`,
|
|
12
|
+
* so a throwing child never leaves the widget up.
|
|
13
13
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
14
|
+
* Only THREE of the differences between the kinds are row data below: the
|
|
15
|
+
* git-state guard, tool-result logging, and the end marker (plus the loader's
|
|
16
|
+
* step label). Tree-change capture is deliberately NOT a row — it is decided at
|
|
17
|
+
* the bottom of this file by a test on the child's TOOLS, so a future
|
|
18
|
+
* write-capable kind gets it without anyone remembering to set a flag.
|
|
19
19
|
*
|
|
20
|
-
* The
|
|
21
|
-
* `buildGateDeps`'s closure,
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* `
|
|
25
|
-
*
|
|
26
|
-
* task's uncommitted work and never popped it), and it could only be checked
|
|
27
|
-
* indirectly through a fake `mutationCheck` one layer up. Here `runWorker` and
|
|
28
|
-
* the git helpers are injected, so the ordering, the trail lines and the
|
|
29
|
-
* throwing-child path are all directly assertable.
|
|
20
|
+
* The module exists so this is reachable from a test at all. It would otherwise
|
|
21
|
+
* live inside `buildGateDeps`'s closure, and the git-state-guard wiring in
|
|
22
|
+
* particular — snapshot, restore-in-`finally`, `verdictTainted` — is what
|
|
23
|
+
* discards a verify verdict computed on a tree the child itself mutated. Here
|
|
24
|
+
* `runWorker` and the git helpers are injected, so the ordering, the trail lines
|
|
25
|
+
* and the throwing-child path are directly assertable.
|
|
30
26
|
*/
|
|
31
27
|
import type { ExtensionCommandContext } from '@earendil-works/pi-coding-agent';
|
|
32
28
|
import type { RunWorkerInput, RunWorkerResult } from '../workers/pi-worker-core.js';
|
|
@@ -36,16 +32,17 @@ import type { ChildStatus } from './child-status.js';
|
|
|
36
32
|
export type GateChildKind = 'verify' | 'recommend' | 'lint-fix' | 'final-fix' | 'enforce';
|
|
37
33
|
export interface GateChildRow {
|
|
38
34
|
/**
|
|
39
|
-
* Snapshot the tree before and restore after.
|
|
40
|
-
* CONTRACT, but
|
|
41
|
-
*
|
|
42
|
-
*
|
|
35
|
+
* Snapshot the tree before and restore after. `verify` and `recommend` are
|
|
36
|
+
* read-only BY CONTRACT, but that contract is only prompt-level — nothing
|
|
37
|
+
* stops the child mutating the tree, so the restore is what makes it hold.
|
|
38
|
+
* `lint-fix` and `final-fix` are excluded because editing is their job and
|
|
39
|
+
* they carry their own revert guards; `enforce` because it edits too.
|
|
43
40
|
*/
|
|
44
41
|
guarded: boolean;
|
|
45
42
|
/**
|
|
46
|
-
* Log tool OUTPUTS, not just the calls
|
|
47
|
-
* "verify
|
|
48
|
-
*
|
|
43
|
+
* Log tool OUTPUTS, not just the calls. Without the result, a claim like
|
|
44
|
+
* "verify ran curl and it passed" cannot be checked against what the command
|
|
45
|
+
* actually printed. Off for `enforce`, whose log is a per-pass verdict trail.
|
|
49
46
|
*/
|
|
50
47
|
logToolResults: boolean;
|
|
51
48
|
/** The loader's step label. */
|
|
@@ -71,7 +68,9 @@ export interface GateChildDeps {
|
|
|
71
68
|
* verify gate does). Two loaders on one widget key only fight each other.
|
|
72
69
|
*/
|
|
73
70
|
loader?: boolean;
|
|
74
|
-
/** Per-command ceiling
|
|
71
|
+
/** Per-command ceiling. pi's bash tool has none of its own: its schema
|
|
72
|
+
* describes `timeout` as "optional, no default timeout", and
|
|
73
|
+
* `resolveTimeoutMs(undefined)` returns undefined. */
|
|
75
74
|
commandTimeoutMs: number;
|
|
76
75
|
/** Hung-stream bound; the probe-based stall guard cannot supply it. */
|
|
77
76
|
streamInactivityMs: number;
|
package/dist/task/gate-child.js
CHANGED
|
@@ -5,28 +5,24 @@
|
|
|
5
5
|
* Five children run under the gates: `verify`, `recommend`, `lint-fix`,
|
|
6
6
|
* `final-fix` and `enforce`. All five share one ritual — reset the widget state,
|
|
7
7
|
* stamp the start, open a per-gate debug log, write a start marker, raise a
|
|
8
|
-
* status loader, call `runWorker`
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
8
|
+
* status loader, call `runWorker` on the `gate` profile (no wall clock; the
|
|
9
|
+
* path-revisit loop rule disabled, leaving the exact-match rule), warn on a
|
|
10
|
+
* surviving loop, classify the failure, write an end marker, throw on failure,
|
|
11
|
+
* and stop the loader — `ChildStatus.track` does that last one in a `finally`,
|
|
12
|
+
* so a throwing child never leaves the widget up.
|
|
13
13
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
14
|
+
* Only THREE of the differences between the kinds are row data below: the
|
|
15
|
+
* git-state guard, tool-result logging, and the end marker (plus the loader's
|
|
16
|
+
* step label). Tree-change capture is deliberately NOT a row — it is decided at
|
|
17
|
+
* the bottom of this file by a test on the child's TOOLS, so a future
|
|
18
|
+
* write-capable kind gets it without anyone remembering to set a flag.
|
|
19
19
|
*
|
|
20
|
-
* The
|
|
21
|
-
* `buildGateDeps`'s closure,
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* `
|
|
25
|
-
*
|
|
26
|
-
* task's uncommitted work and never popped it), and it could only be checked
|
|
27
|
-
* indirectly through a fake `mutationCheck` one layer up. Here `runWorker` and
|
|
28
|
-
* the git helpers are injected, so the ordering, the trail lines and the
|
|
29
|
-
* throwing-child path are all directly assertable.
|
|
20
|
+
* The module exists so this is reachable from a test at all. It would otherwise
|
|
21
|
+
* live inside `buildGateDeps`'s closure, and the git-state-guard wiring in
|
|
22
|
+
* particular — snapshot, restore-in-`finally`, `verdictTainted` — is what
|
|
23
|
+
* discards a verify verdict computed on a tree the child itself mutated. Here
|
|
24
|
+
* `runWorker` and the git helpers are injected, so the ordering, the trail lines
|
|
25
|
+
* and the throwing-child path are directly assertable.
|
|
30
26
|
*/
|
|
31
27
|
import { formatLoopHint } from './child-runner.js';
|
|
32
28
|
import { classifyEnforceChildFailure } from './enforce-guidelines.js';
|
|
@@ -64,9 +60,11 @@ export function makeGateChild(deps) {
|
|
|
64
60
|
deps.status.reset();
|
|
65
61
|
const startedAt = Date.now();
|
|
66
62
|
// Every marker below (start/end, the guard's restore, the loop warning, a
|
|
67
|
-
// write-capable child's tree changes)
|
|
68
|
-
//
|
|
69
|
-
//
|
|
63
|
+
// write-capable child's tree changes) goes through `log` with no kind, so
|
|
64
|
+
// it defaults to 'event'. The shipped default level is 'events', where
|
|
65
|
+
// shouldLogDebug keeps 'event' and drops 'stream' — so the audit trail
|
|
66
|
+
// survives while the child's own stdout and its tool results, the only
|
|
67
|
+
// things passed as 'stream', do not.
|
|
70
68
|
const log = deps.makeDebugAppender(deps.logPath);
|
|
71
69
|
log(`=== ${deps.kind} start: ${deps.taskTitle} ===`);
|
|
72
70
|
const guardSnapshot = row.guarded ? await deps.captureGitState(deps.cwd, sig) : null;
|
|
@@ -88,12 +86,13 @@ export function makeGateChild(deps) {
|
|
|
88
86
|
cwd: deps.cwd,
|
|
89
87
|
...(sig ? { signal: sig } : {}),
|
|
90
88
|
tools,
|
|
91
|
-
// The four guard literals
|
|
92
|
-
//
|
|
93
|
-
//
|
|
94
|
-
//
|
|
95
|
-
//
|
|
96
|
-
// because they are user
|
|
89
|
+
// The four guard literals — run to completion, a per-command
|
|
90
|
+
// watchdog, a stream watchdog, and the path-revisit rule
|
|
91
|
+
// disabled — are the `gate` row of WORKER_PROFILES
|
|
92
|
+
// (workers/worker-profiles.ts), whose resolve() sets
|
|
93
|
+
// worker-timeout to {timeoutMs: 0} and pathThreshold to
|
|
94
|
+
// Infinity. The two ceilings stay inputs because they are user
|
|
95
|
+
// config, not policy.
|
|
97
96
|
profile: 'gate',
|
|
98
97
|
policyInputs: {
|
|
99
98
|
commandTimeoutMs: deps.commandTimeoutMs,
|
|
@@ -105,6 +104,7 @@ export function makeGateChild(deps) {
|
|
|
105
104
|
// burned two attempts reads exactly like one that ran clean.
|
|
106
105
|
onRestart: rs => log(`=== ${deps.kind} RESTART (attempt ${rs.attempt} discarded)`
|
|
107
106
|
+ ` reason=${rs.reason} wall=${rs.wallMs}ms`
|
|
107
|
+
+ ` discarded=${rs.partialChars}ch`
|
|
108
108
|
+ (rs.detail ? ` — ${rs.detail}` : '')
|
|
109
109
|
+ ' ==='),
|
|
110
110
|
onLine: line => {
|
|
@@ -121,8 +121,10 @@ export function makeGateChild(deps) {
|
|
|
121
121
|
}
|
|
122
122
|
: {}),
|
|
123
123
|
onContextUsage: snapshot => deps.status.onContextUsage(snapshot),
|
|
124
|
-
// The gate child has to be TOLD its window
|
|
125
|
-
//
|
|
124
|
+
// The gate child has to be TOLD its window. pi's session event
|
|
125
|
+
// stream — what `--mode json` emits — carries token counts but
|
|
126
|
+
// no context window; `contextWindow` appears nowhere in
|
|
127
|
+
// agent-session.d.ts.
|
|
126
128
|
contextWindow: deps.status.parentContextWindow
|
|
127
129
|
});
|
|
128
130
|
}
|
|
@@ -163,10 +165,10 @@ export function makeGateChild(deps) {
|
|
|
163
165
|
: `=== ${deps.kind} end: ${row.okMarker} ===`);
|
|
164
166
|
if (failure)
|
|
165
167
|
throw new Error(failure);
|
|
166
|
-
// CAPABILITY-LEVEL diff capture
|
|
167
|
-
//
|
|
168
|
-
// changes logged, so a future write-capable kind
|
|
169
|
-
//
|
|
168
|
+
// CAPABILITY-LEVEL diff capture: any WRITE-capable child — decided by
|
|
169
|
+
// its TOOLS, not by which phase spawned it or by a row in the table
|
|
170
|
+
// above — gets its tree changes logged, so a future write-capable kind
|
|
171
|
+
// cannot run invisibly.
|
|
170
172
|
if (/\b(?:edit|bash|write)\b/.test(tools)) {
|
|
171
173
|
log(`=== ${deps.kind} tree changes: `
|
|
172
174
|
+ `${await deps.describeTreeChanges(deps.cwd, sig)} ===`);
|
package/dist/task/gate-deps.d.ts
CHANGED
|
@@ -10,8 +10,11 @@ import { type TreeChangeSummary, type IgnoredSnapshot } from './write-guard.js';
|
|
|
10
10
|
export type RunTaskFn = GateDeps['runTask'];
|
|
11
11
|
/**
|
|
12
12
|
* One-line, tail-kept, whitespace-flattened summary of a tool's output for the gate
|
|
13
|
-
* debug log. The TAIL is kept
|
|
14
|
-
*
|
|
13
|
+
* debug log. The TAIL is kept — a bind failure, a final status or an assertion
|
|
14
|
+
* lands at the END of the output — with a leading ellipsis when truncated.
|
|
15
|
+
* Measured: all-whitespace and empty input both give "(no output)", internal
|
|
16
|
+
* newlines collapse to single spaces, and a 410-char input comes back 301 chars
|
|
17
|
+
* long, starting `…` and ending on the input's last characters.
|
|
15
18
|
*/
|
|
16
19
|
export declare function truncateToolResult(text: string, limit?: number): string;
|
|
17
20
|
/** One bounded final-gate fix attempt (see final-gate-fix.ts): fix child →
|
|
@@ -32,7 +35,7 @@ ignoredKnown?: string[]) => Promise<FinalFixResult>;
|
|
|
32
35
|
export declare function collectChangedFiles(cwd: string, signal?: AbortSignal): Promise<ChangedFile[]>;
|
|
33
36
|
/**
|
|
34
37
|
* Collect the task's added lines WITH CONTENT (path + text) for the probe-gaming
|
|
35
|
-
* probe
|
|
38
|
+
* probe, which needs the actual line text the numstat-shape collector omits.
|
|
36
39
|
* Pre-commit the work is the tree-vs-HEAD diff plus untracked files (read whole, as
|
|
37
40
|
* all-added); on the post-enforce re-verify the tree is clean, so fall back to the
|
|
38
41
|
* last commit's diff. Failures degrade to an empty list — the probe is a sharpener,
|
|
@@ -40,10 +43,10 @@ export declare function collectChangedFiles(cwd: string, signal?: AbortSignal):
|
|
|
40
43
|
*/
|
|
41
44
|
export declare function collectAddedLines(cwd: string, signal?: AbortSignal): Promise<AddedLine[]>;
|
|
42
45
|
/**
|
|
43
|
-
* Deterministic sandbox-path-leak pass (see foreign-path.ts
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
46
|
+
* Deterministic sandbox-path-leak pass (see foreign-path.ts): find absolute paths
|
|
47
|
+
* the task committed that resolve nowhere on this machine while the real file sits
|
|
48
|
+
* in the repo, REPAIR the ones whose relative form provably resolves, and return
|
|
49
|
+
* verify findings for whatever is left.
|
|
47
50
|
*
|
|
48
51
|
* The repair runs here, before the verify child, for the same reason lint-fix
|
|
49
52
|
* does: the defect is mechanical and the correct target is already known, so
|
|
@@ -53,9 +56,8 @@ export declare function collectAddedLines(cwd: string, signal?: AbortSignal): Pr
|
|
|
53
56
|
*/
|
|
54
57
|
export declare function collectForeignPathFindings(cwd: string, signal?: AbortSignal, logDebug?: (m: string) => void): Promise<string[]>;
|
|
55
58
|
/**
|
|
56
|
-
* Deterministic neutered-check-script pass (see script-escape.ts
|
|
57
|
-
*
|
|
58
|
-
* task changed.
|
|
59
|
+
* Deterministic neutered-check-script pass (see script-escape.ts): check-class
|
|
60
|
+
* scripts that cannot report failure, in a manifest THIS task changed.
|
|
59
61
|
*
|
|
60
62
|
* Scoped to manifests the task touched, so the finding lands on the task that
|
|
61
63
|
* authored the script rather than being re-served to every later task. A script
|
|
@@ -66,10 +68,9 @@ export declare function collectForeignPathFindings(cwd: string, signal?: AbortSi
|
|
|
66
68
|
*/
|
|
67
69
|
export declare function collectScriptEscapeFindings(cwd: string, signal?: AbortSignal): Promise<string[]>;
|
|
68
70
|
/**
|
|
69
|
-
* Deterministic test-runner glob-collision pass (see runner-globs.ts
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
* and dies during collection.
|
|
71
|
+
* Deterministic test-runner glob-collision pass (see runner-globs.ts): the manifest
|
|
72
|
+
* declares both `bun test` and `playwright test` without a provably disjoint file
|
|
73
|
+
* set, so `bun test` imports the playwright specs and dies during collection.
|
|
73
74
|
*
|
|
74
75
|
* Whole-repo rather than diff-scoped, unlike the neutered-script probe: a collision
|
|
75
76
|
* is a property of the PAIR of declarations, and the task that completes the pair is
|
|
@@ -85,24 +86,30 @@ export declare function collectRunnerGlobFindings(cwd: string): Promise<string[]
|
|
|
85
86
|
*/
|
|
86
87
|
export declare function collectTreeChanges(cwd: string, signal?: AbortSignal): Promise<TreeChangeSummary>;
|
|
87
88
|
/**
|
|
88
|
-
* Build output directories declared by the project's OWN build commands
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
89
|
+
* Build output directories declared by the project's OWN build commands, so the
|
|
90
|
+
* ignored-write exemption follows the real tooling instead of a name list.
|
|
91
|
+
*
|
|
92
|
+
* The pattern is `--outdir` or `--out-dir`, LOWERCASE, followed by `=` or a space.
|
|
93
|
+
* Measured on a manifest declaring all four spellings: `--outdir=./dist/` yields
|
|
94
|
+
* `dist` and `--out-dir build` yields `build`, while `--outDir out` (tsc's
|
|
95
|
+
* spelling) yields nothing and a bare `--outdir -` is dropped by the leading-dash
|
|
96
|
+
* guard. Best-effort: an unreadable or non-JSON manifest contributes nothing and
|
|
97
|
+
* the name-list fallback in classifyIgnoredPath applies.
|
|
92
98
|
*/
|
|
93
99
|
export declare function parseBuildOutdirs(cwd: string): string[];
|
|
94
100
|
/**
|
|
95
|
-
* IGNORED-PATH CHANNEL (
|
|
101
|
+
* IGNORED-PATH CHANNEL (see write-guard.ts). A fingerprint of every
|
|
96
102
|
* ACTIONABLE ignored path (`git status --porcelain --ignored=matching`, minus
|
|
97
103
|
* build output / node_modules / .pi-tasks / .git), taken before and after a
|
|
98
104
|
* write-capable gate child so its writes to files git never reports are
|
|
99
105
|
* attributable to it.
|
|
100
106
|
*
|
|
101
107
|
* `--ignored=matching` collapses a wholly-ignored directory into ONE entry, which
|
|
102
|
-
* is what keeps this cheap:
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
108
|
+
* is what keeps this cheap: run against a repo ignoring `logs/`, `node_modules/`
|
|
109
|
+
* and `.env`, with files in all three, it reports exactly three lines —
|
|
110
|
+
* `!! .env`, `!! logs/`, `!! node_modules/` — never one per file. Every failure
|
|
111
|
+
* mode degrades to `{}` (no git, a git that rejects the flag, an unreadable path),
|
|
112
|
+
* so the gate behaves as if the channel were absent.
|
|
106
113
|
*/
|
|
107
114
|
export declare function collectIgnoredSnapshot(cwd: string, signal?: AbortSignal): Promise<IgnoredSnapshot>;
|
|
108
115
|
/**
|
|
@@ -128,9 +135,9 @@ export declare function gatePassesWithoutIgnored(cwd: string, paths: string[], r
|
|
|
128
135
|
*/
|
|
129
136
|
export declare function collectTaskTreeChanges(cwd: string, signal?: AbortSignal): Promise<TreeChangeSummary>;
|
|
130
137
|
/**
|
|
131
|
-
* Deterministic test-assembly probe input
|
|
132
|
-
*
|
|
133
|
-
*
|
|
138
|
+
* Deterministic test-assembly probe input: read the task's own changed TEST files
|
|
139
|
+
* plus the repo's tracked source files, and return the finding lines naming any
|
|
140
|
+
* test that rebuilds a production assembly it never imports.
|
|
134
141
|
* Pure import-graph shape; failures degrade to no findings (the probe is a sharpener,
|
|
135
142
|
* never a blocker). `changed` is the already-collected task diff, reused so the probe
|
|
136
143
|
* costs one extra tracked-file listing, not a second diff.
|
|
@@ -142,7 +149,7 @@ export declare function collectTestAssemblyFindings(cwd: string, changed: Change
|
|
|
142
149
|
* section, and an unreadable task file is the same case — both are null, and every
|
|
143
150
|
* caller already treats null as "nothing to hold the work to" (verify no-ops,
|
|
144
151
|
* frozen paths are empty, recommend falls back to the title). Never throws. This
|
|
145
|
-
*
|
|
152
|
+
* would otherwise be the same four-line try/catch at four gate sites.
|
|
146
153
|
*/
|
|
147
154
|
export declare function readSpecForVerification(cwd: string, taskId: string): Promise<string | null>;
|
|
148
155
|
/**
|