@mjasnikovs/pi-task 0.38.29 → 0.38.31
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/index.js +2 -0
- 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 +85 -16
- package/dist/shared/command-watchdog.js +115 -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 +192 -165
- 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 +124 -55
- package/dist/task/child-runner.js +298 -90
- 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 +16 -9
- package/dist/task/context-usage.js +16 -9
- 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 +30 -8
- 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 +36 -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-guards.d.ts +26 -0
- package/dist/task/implementation-guards.js +177 -0
- package/dist/task/implementation-thinking.d.ts +33 -31
- package/dist/task/implementation-thinking.js +5 -6
- package/dist/task/implementation-turn.d.ts +39 -31
- package/dist/task/implementation-turn.js +41 -28
- 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 +27 -8
- package/dist/task/loop-detector.js +38 -14
- 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 +89 -66
- 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 +196 -252
- 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 +29 -39
- package/dist/task/research-worker.js +37 -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 +13 -12
- package/dist/workers/focused-extractor.js +27 -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 +65 -96
- package/dist/workers/pi-worker-core.js +93 -181
- 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 +21 -14
- 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 +27 -30
- package/dist/workers/single-read-guard.js +36 -36
- 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 +54 -56
- package/dist/workers/worker-profiles.js +63 -39
- package/package.json +10 -8
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { type ContextSnapshot, type LoopHit, type SpawnFn } from '../shared/child-process.js';
|
|
2
|
+
import { type CommandKill } from '../shared/command-watchdog.js';
|
|
3
|
+
export { commandCeilingForAttempt } from '../shared/command-watchdog.js';
|
|
2
4
|
import { RESTART_ORDER } from './worker-kill.js';
|
|
3
5
|
import { type WorkerGuardOverride, type WorkerGuardPolicy, type WorkerPolicyInputs, type WorkerProfileId } from './worker-profiles.js';
|
|
4
6
|
/**
|
|
@@ -6,44 +8,48 @@ import { type WorkerGuardOverride, type WorkerGuardPolicy, type WorkerPolicyInpu
|
|
|
6
8
|
* command could be cited from. `pi-worker-docs` (the primary), `read` and `grep`
|
|
7
9
|
* (project source), and the web escalations `pi-worker-search`/`pi-worker-fetch`.
|
|
8
10
|
*
|
|
9
|
-
* `ls` and `find` are deliberately EXCLUDED: they return file
|
|
10
|
-
* and APIS owns symbols by name only, never paths (
|
|
11
|
-
* enumeration cannot verify a
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
11
|
+
* `ls` and `find` are deliberately EXCLUDED: they return file and directory
|
|
12
|
+
* NAMES, and APIS owns symbols by name only, never paths (see
|
|
13
|
+
* RESEARCH_APIS_PROMPT in prompts.ts). Bare enumeration cannot verify a
|
|
14
|
+
* signature, so a worker that fabricates its section from memory cannot launder
|
|
15
|
+
* itself grounded by calling `ls` once — "one trivial `ls` then fabricate the
|
|
16
|
+
* rest" still leaves groundingRetrievalCount at 0.
|
|
17
|
+
*
|
|
18
|
+
* The set is DERIVED from WORKER_CHANNELS (worker-channels.ts), not hand-kept.
|
|
19
|
+
* Re-exported here only so worker-channels.test.ts can assert this module hands
|
|
20
|
+
* back the same predicate.
|
|
15
21
|
*/
|
|
16
22
|
export { isGroundingRetrieval } from './worker-channels.js';
|
|
17
23
|
/**
|
|
18
24
|
* Does this partial output carry ANSWER CONTENT, or is it the model clearing its
|
|
19
25
|
* throat?
|
|
20
26
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* attempts and salvage shipped this as the section:
|
|
27
|
+
* Keeping the LONGEST partial is not the same question, and it has an obvious
|
|
28
|
+
* failure: a preamble sentence like
|
|
24
29
|
*
|
|
25
30
|
* "Now let me get more details on the specific APIs and components I need:"
|
|
26
31
|
*
|
|
27
|
-
*
|
|
28
|
-
* nothing. Both trials scored 2 entries and DEGRADED, against 22 and 5 for the
|
|
29
|
-
* same fixtures in baseline.
|
|
32
|
+
* beats an empty string on length and carries nothing.
|
|
30
33
|
*
|
|
31
34
|
* A research worker's answer is a list of lines that each name something and
|
|
32
|
-
* describe it. The test is therefore structural, not lexical: at least
|
|
33
|
-
* that look like entries — a name, then a gap, then a description. Prose wraps
|
|
34
|
-
*
|
|
35
|
+
* describe it. The test is therefore structural, not lexical: at least TWO lines
|
|
36
|
+
* that look like entries — a name, then a gap, then a description. Prose wraps at
|
|
37
|
+
* no particular column and does not repeat that shape; the sentence above scores
|
|
38
|
+
* zero entry lines.
|
|
35
39
|
*/
|
|
36
40
|
export declare function hasAnswerContent(text: string): boolean;
|
|
37
41
|
/**
|
|
38
42
|
* Is ONE line an entry — a name, a gap, then a description — rather than prose?
|
|
39
43
|
*
|
|
40
|
-
* Split out of `hasAnswerContent` so the same rule can decide what a line IS,
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
+
* Split out of `hasAnswerContent` so the same rule can decide what a line IS, not
|
|
45
|
+
* just how many of them there are — a reader of a FILES section needs the same
|
|
46
|
+
* test, and its own idea of an entry would count a preamble sentence or a leaked
|
|
47
|
+
* `</tool_call>` as one.
|
|
44
48
|
*
|
|
45
|
-
*
|
|
46
|
-
* spaced dash
|
|
49
|
+
* A leading `-`, `*`, `•` or `1.`/`1)` bullet is stripped first. What remains must
|
|
50
|
+
* hold a two-space gap or a spaced dash and must NOT end in `.` or `:`. Prose
|
|
51
|
+
* wraps at no particular column, so it carries neither; when it does carry one, it
|
|
52
|
+
* ends in punctuation and an entry does not.
|
|
47
53
|
*/
|
|
48
54
|
export declare function isEntryLine(raw: string): boolean;
|
|
49
55
|
/**
|
|
@@ -67,7 +73,7 @@ export interface RunWorkerInput {
|
|
|
67
73
|
/** Called for each tool execution start and text-writing event inside the worker. */
|
|
68
74
|
onLine?: (line: string) => void;
|
|
69
75
|
/** Called when a tool call FINISHES, with its (truncatable) result — lets a caller
|
|
70
|
-
* log tool OUTPUTS, not just the command
|
|
76
|
+
* log tool OUTPUTS, not just the command. */
|
|
71
77
|
onToolResult?: (result: {
|
|
72
78
|
name: string;
|
|
73
79
|
isError: boolean;
|
|
@@ -85,34 +91,31 @@ export interface RunWorkerInput {
|
|
|
85
91
|
* The worker child's context window in tokens, or `'unknown'` when the
|
|
86
92
|
* caller genuinely has none.
|
|
87
93
|
*
|
|
88
|
-
* REQUIRED, and required for the same reason `profile` below is.
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
* exists and did not trip.
|
|
94
|
+
* REQUIRED, and required for the same reason `profile` below is. pi's event
|
|
95
|
+
* stream carries NO window — the string `context_usage` appears nowhere in any
|
|
96
|
+
* installed @earendil-works package, and its only usage-bearing JSON event is
|
|
97
|
+
* `message_update` — so this parameter is the only source there is. Left
|
|
98
|
+
* optional, a caller that omits it leaves `noteContext` seeing 0, and
|
|
99
|
+
* `StallDetector`'s CONTEXT CHURN rule is gated on a positive window, so the
|
|
100
|
+
* rule silently does not exist. That reads exactly like a rule that exists and
|
|
101
|
+
* did not trip.
|
|
97
102
|
*
|
|
98
|
-
* WHY A WORD AND NOT `0` OR `null`. Both of those are what a caller types
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
103
|
+
* WHY A WORD AND NOT `0` OR `null`. Both of those are what a caller types when
|
|
104
|
+
* it has not thought about the question, and both disarm the rule silently.
|
|
105
|
+
* `'unknown'` cannot be typed by accident, is greppable, and shows up in a diff
|
|
106
|
+
* as a decision.
|
|
102
107
|
*
|
|
103
108
|
* Two consumers read it: the churn rule, and the caller's progress bar, which
|
|
104
|
-
* shows a bare token count without a window. Both degrade
|
|
105
|
-
* on `'unknown'`.
|
|
109
|
+
* shows a bare token count without a window. Both degrade on `'unknown'`.
|
|
106
110
|
*/
|
|
107
111
|
contextWindow: number | 'unknown';
|
|
108
112
|
/**
|
|
109
113
|
* WHICH KIND of worker child this is — the whole guard policy, in one word.
|
|
110
114
|
*
|
|
111
|
-
* REQUIRED, and required on purpose.
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
* children without anyone deciding it should. See worker-profiles.ts.
|
|
115
|
+
* REQUIRED, and required on purpose. As independent optionals, a caller that
|
|
116
|
+
* named none of the guard knobs still got a full policy and nobody could see
|
|
117
|
+
* which one — so a child can end up running the strictest wall clock of the
|
|
118
|
+
* three without anyone deciding it should. See worker-profiles.ts.
|
|
116
119
|
*/
|
|
117
120
|
profile: WorkerProfileId;
|
|
118
121
|
/**
|
|
@@ -121,10 +124,11 @@ export interface RunWorkerInput {
|
|
|
121
124
|
*/
|
|
122
125
|
policyInputs?: WorkerPolicyInputs;
|
|
123
126
|
/**
|
|
124
|
-
* Whole guard rows laid over the profile's. TESTS AND
|
|
125
|
-
*
|
|
126
|
-
*
|
|
127
|
-
*
|
|
127
|
+
* Whole guard rows laid over the profile's. TESTS AND HARNESSES ONLY — an
|
|
128
|
+
* override at a production call site is the hand-picked subset this design
|
|
129
|
+
* exists to stop. `worker-profiles.test.ts` enforces it: its "no production
|
|
130
|
+
* source file passes an `override` to runWorker" test scans src/ for a leading
|
|
131
|
+
* `override:` and fails on any hit.
|
|
128
132
|
*/
|
|
129
133
|
override?: WorkerGuardOverride;
|
|
130
134
|
/**
|
|
@@ -133,9 +137,9 @@ export interface RunWorkerInput {
|
|
|
133
137
|
*
|
|
134
138
|
* WHY: asserting that a profile RESOLVES correctly proves nothing about
|
|
135
139
|
* whether runWorker then READS it correctly — a rewiring that turns "0 means
|
|
136
|
-
* off" into "0 means on" leaves every profile assertion green. This hook
|
|
137
|
-
*
|
|
138
|
-
*
|
|
140
|
+
* off" into "0 means on" leaves every profile assertion green. This hook lets
|
|
141
|
+
* a test drive the REAL call site and read back the REAL policy instead of
|
|
142
|
+
* re-typing the table; worker-profiles.test.ts is where those assertions live.
|
|
139
143
|
*/
|
|
140
144
|
onPolicy?: (policy: WorkerGuardPolicy) => void;
|
|
141
145
|
/** Backoff sleep, injectable so tests don't wait out the real delays. */
|
|
@@ -168,12 +172,10 @@ export interface RunWorkerInput {
|
|
|
168
172
|
*
|
|
169
173
|
* WHY: every restart branch below throws away a whole attempt's wall clock
|
|
170
174
|
* along with its text, and `waitMs`/`workMs` describe the FINAL attempt only.
|
|
171
|
-
* With no hook here
|
|
172
|
-
*
|
|
173
|
-
*
|
|
174
|
-
*
|
|
175
|
-
* was only recoverable by subtracting reported wait+work from the timestamps
|
|
176
|
-
* of the `start` and `done` lines around it.
|
|
175
|
+
* With no hook here a discarded attempt is structurally invisible — the worker
|
|
176
|
+
* still returns `exitCode` 0 and reads as a clean success, and the lost time is
|
|
177
|
+
* recoverable only by subtracting the reported wait+work from the timestamps
|
|
178
|
+
* around the call.
|
|
177
179
|
*/
|
|
178
180
|
onRestart?: (restart: WorkerRestart) => void;
|
|
179
181
|
}
|
|
@@ -200,13 +202,9 @@ export interface WorkerRestart {
|
|
|
200
202
|
* thrown away.
|
|
201
203
|
*
|
|
202
204
|
* Recorded whatever `carryForward` says, because the DISCARD is the thing a
|
|
203
|
-
* reader cannot otherwise see.
|
|
204
|
-
*
|
|
205
|
-
*
|
|
206
|
-
* run threw away a finished answer" print identically. Measured on the
|
|
207
|
-
* ad-hoc `pi-worker` corpus: T024 lost an attempt to a dropped model socket
|
|
208
|
-
* at 275s and returned 52 chars over 620s; nothing in the run said whether
|
|
209
|
-
* those 275s held anything.
|
|
205
|
+
* reader cannot otherwise see. Without it, "the guards worked and the run
|
|
206
|
+
* returned almost nothing" and "the guards worked and the run threw away a
|
|
207
|
+
* finished answer" print identically.
|
|
210
208
|
*
|
|
211
209
|
* It is an OBSERVATION, not a decision: harvesting into `salvage` is still
|
|
212
210
|
* gated on the profile, and this number changes no behaviour.
|
|
@@ -222,9 +220,9 @@ export interface RunWorkerResult {
|
|
|
222
220
|
* The provider-reported cause when the model turn itself failed (disconnect,
|
|
223
221
|
* fetch failed, 5xx after pi's own retries): pi delivers it as an assistant
|
|
224
222
|
* message with stopReason "error" and EMPTY text, exit code 0. Phase children
|
|
225
|
-
*
|
|
226
|
-
*
|
|
227
|
-
*
|
|
223
|
+
* surface this through child-runner.ts; without it a swallowed provider error
|
|
224
|
+
* reaches the caller as an indistinguishable empty answer and gets reported as
|
|
225
|
+
* the useless "produced no output".
|
|
228
226
|
* Only meaningful when `text` is empty: a turn that produced text after pi
|
|
229
227
|
* recovered is a success, and the first-error capture must not relabel it.
|
|
230
228
|
*/
|
|
@@ -341,28 +339,6 @@ export interface RunWorkerResult {
|
|
|
341
339
|
idleMs: number;
|
|
342
340
|
};
|
|
343
341
|
}
|
|
344
|
-
/**
|
|
345
|
-
* The per-command ceiling for attempt N, halving each time a hang recurs.
|
|
346
|
-
*
|
|
347
|
-
* The first attempt gets the full configured ceiling — a genuinely slow build or
|
|
348
|
-
* test suite deserves it. But every hang-caused restart carries
|
|
349
|
-
* commandTimeoutHint, which tells the model in as many words to bound its
|
|
350
|
-
* command; a SECOND hang means it ignored an explicit instruction, and a third
|
|
351
|
-
* means it ignored it twice. Giving a non-complying child the full ceiling again
|
|
352
|
-
* would put the worst case at 3 × 15 min = 45 minutes of dead time, resting
|
|
353
|
-
* entirely on the model obeying prose. Halving bounds it at ~26 min while
|
|
354
|
-
* costing a complying child nothing.
|
|
355
|
-
*
|
|
356
|
-
* `priorHangs` counts watchdog kills specifically, NOT total restarts — the
|
|
357
|
-
* restart budget is shared with loop kills, and a child restarted for LOOPING
|
|
358
|
-
* never received the bound-your-command hint, so its first hang still deserves
|
|
359
|
-
* the full ceiling. Only a hang after a hang is defiance.
|
|
360
|
-
*
|
|
361
|
-
* Floored at 30s so repeated halving cannot shrink the ceiling to something no
|
|
362
|
-
* real command could finish inside — but never ABOVE the configured ceiling
|
|
363
|
-
* itself, or a caller asking for 10s would silently get 30.
|
|
364
|
-
*/
|
|
365
|
-
export declare function commandCeilingForAttempt(baseMs: number, priorHangs: number): number;
|
|
366
342
|
/**
|
|
367
343
|
* Everything the restart ladder reads about one finished attempt, plus the
|
|
368
344
|
* budgets it draws on. Assembled once per attempt so the rules below can be
|
|
@@ -377,7 +353,8 @@ interface RestartState {
|
|
|
377
353
|
timedOut: boolean;
|
|
378
354
|
modelError?: string;
|
|
379
355
|
leaked: string | null;
|
|
380
|
-
/** The cap this attempt actually died against
|
|
356
|
+
/** The cap this attempt actually died against, not the configured one:
|
|
357
|
+
* `extend`/`progress` can push the deadline out during the attempt. */
|
|
381
358
|
effectiveCapMs: number;
|
|
382
359
|
/** The child's tool string, which decides whether its edits can persist. */
|
|
383
360
|
tools: string;
|
|
@@ -440,12 +417,4 @@ interface RestartRule {
|
|
|
440
417
|
* becoming visible in `restarts`.
|
|
441
418
|
*/
|
|
442
419
|
export declare const RESTART_RULES: readonly RestartRule[];
|
|
443
|
-
/** What the command watchdog recorded when it killed an attempt. */
|
|
444
|
-
interface CommandKill {
|
|
445
|
-
toolName: string;
|
|
446
|
-
timeoutMs: number;
|
|
447
|
-
/** The command line itself, when the tool carried one — quoted into the hint
|
|
448
|
-
* so the fresh child knows which call it must not repeat unbounded. */
|
|
449
|
-
detail?: string;
|
|
450
|
-
}
|
|
451
420
|
export declare function runWorker(input: RunWorkerInput): Promise<RunWorkerResult>;
|