@stigmer/runner 3.15.0 → 3.15.2-dev.20260913223433
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/README.md +2 -4
- package/dist/.build-fingerprint +1 -1
- package/dist/__test-utils__/execution-record-fixture.d.ts +14 -0
- package/dist/__test-utils__/execution-record-fixture.js +4 -0
- package/dist/__test-utils__/execution-record-fixture.js.map +1 -1
- package/dist/__test-utils__/file-review-projection.d.ts +40 -0
- package/dist/__test-utils__/file-review-projection.js +136 -0
- package/dist/__test-utils__/file-review-projection.js.map +1 -0
- package/dist/__test-utils__/harness-contract/types.d.ts +23 -1
- package/dist/__test-utils__/harness-contract/types.js +15 -0
- package/dist/__test-utils__/harness-contract/types.js.map +1 -1
- package/dist/__test-utils__/hermetic-activity.d.ts +44 -12
- package/dist/__test-utils__/hermetic-activity.js +52 -14
- package/dist/__test-utils__/hermetic-activity.js.map +1 -1
- package/dist/__test-utils__/model-registry-fixture.d.ts +32 -7
- package/dist/__test-utils__/model-registry-fixture.js +31 -7
- package/dist/__test-utils__/model-registry-fixture.js.map +1 -1
- package/dist/__test-utils__/turn-input-fixture.d.ts +1 -1
- package/dist/__test-utils__/turn-input-fixture.js +1 -1
- package/dist/__test-utils__/turn-input-fixture.js.map +1 -1
- package/dist/activities/call-agent.js +2 -2
- package/dist/activities/call-agent.js.map +1 -1
- package/dist/activities/execute-cursor/__test-utils__/contract-subject.js +45 -3
- package/dist/activities/execute-cursor/__test-utils__/contract-subject.js.map +1 -1
- package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.d.ts +0 -9
- package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js +2 -41
- package/dist/activities/execute-cursor/__test-utils__/hermetic-cursor.js.map +1 -1
- package/dist/activities/execute-cursor/adapter.d.ts +7 -5
- package/dist/activities/execute-cursor/adapter.js +7 -5
- package/dist/activities/execute-cursor/adapter.js.map +1 -1
- package/dist/activities/execute-cursor/approval-policy.d.ts +5 -2
- package/dist/activities/execute-cursor/approval-policy.js +5 -2
- package/dist/activities/execute-cursor/approval-policy.js.map +1 -1
- package/dist/activities/execute-cursor/approval-state.d.ts +16 -8
- package/dist/activities/execute-cursor/approval-state.js +6 -3
- package/dist/activities/execute-cursor/approval-state.js.map +1 -1
- package/dist/activities/execute-cursor/cas-observations.d.ts +14 -2
- package/dist/activities/execute-cursor/cas-observations.js +19 -2
- package/dist/activities/execute-cursor/cas-observations.js.map +1 -1
- package/dist/activities/execute-cursor/cursor-capabilities.d.ts +8 -4
- package/dist/activities/execute-cursor/cursor-capabilities.js +21 -4
- package/dist/activities/execute-cursor/cursor-capabilities.js.map +1 -1
- package/dist/activities/execute-cursor/message-translator.d.ts +12 -20
- package/dist/activities/execute-cursor/message-translator.js +19 -32
- package/dist/activities/execute-cursor/message-translator.js.map +1 -1
- package/dist/activities/execute-cursor/prompt-builder.d.ts +48 -58
- package/dist/activities/execute-cursor/prompt-builder.js +76 -95
- package/dist/activities/execute-cursor/prompt-builder.js.map +1 -1
- package/dist/activities/execute-cursor/turn-boundary.d.ts +27 -55
- package/dist/activities/execute-cursor/turn-boundary.js +30 -90
- package/dist/activities/execute-cursor/turn-boundary.js.map +1 -1
- package/dist/activities/execute-cursor/turn-settle.d.ts +11 -7
- package/dist/activities/execute-cursor/turn-settle.js +37 -49
- package/dist/activities/execute-cursor/turn-settle.js.map +1 -1
- package/dist/activities/execute-cursor/turn-setup.d.ts +16 -24
- package/dist/activities/execute-cursor/turn-setup.js +29 -59
- package/dist/activities/execute-cursor/turn-setup.js.map +1 -1
- package/dist/activities/execute-cursor/turn-stream.d.ts +3 -8
- package/dist/activities/execute-cursor/turn-stream.js +9 -22
- package/dist/activities/execute-cursor/turn-stream.js.map +1 -1
- package/dist/activities/execute-cursor/turn.js +5 -1
- package/dist/activities/execute-cursor/turn.js.map +1 -1
- package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.d.ts +93 -0
- package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.js +348 -0
- package/dist/activities/execute-deep-agent/__test-utils__/contract-subject.js.map +1 -0
- package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.d.ts +170 -0
- package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.js +225 -0
- package/dist/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.js.map +1 -0
- package/dist/activities/execute-deep-agent/__test-utils__/hitl-script.d.ts +24 -0
- package/dist/activities/execute-deep-agent/__test-utils__/hitl-script.js +41 -0
- package/dist/activities/execute-deep-agent/__test-utils__/hitl-script.js.map +1 -0
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.d.ts +54 -0
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.js +72 -0
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model-module.js.map +1 -0
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.d.ts +187 -23
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js +238 -27
- package/dist/activities/execute-deep-agent/__test-utils__/scripted-model.js.map +1 -1
- package/dist/activities/execute-deep-agent/adapter.d.ts +41 -0
- package/dist/activities/execute-deep-agent/adapter.js +78 -0
- package/dist/activities/execute-deep-agent/adapter.js.map +1 -0
- package/dist/activities/execute-deep-agent/cas-capture-observer.d.ts +8 -0
- package/dist/activities/execute-deep-agent/cas-capture-observer.js +9 -0
- package/dist/activities/execute-deep-agent/cas-capture-observer.js.map +1 -1
- package/dist/activities/execute-deep-agent/deep-agent-capabilities.d.ts +31 -0
- package/dist/activities/execute-deep-agent/deep-agent-capabilities.js +40 -0
- package/dist/activities/execute-deep-agent/deep-agent-capabilities.js.map +1 -0
- package/dist/activities/execute-deep-agent/execution-state.d.ts +4 -11
- package/dist/activities/execute-deep-agent/execution-state.js +4 -12
- package/dist/activities/execute-deep-agent/execution-state.js.map +1 -1
- package/dist/activities/execute-deep-agent/hitl.d.ts +49 -47
- package/dist/activities/execute-deep-agent/hitl.js +77 -103
- package/dist/activities/execute-deep-agent/hitl.js.map +1 -1
- package/dist/activities/execute-deep-agent/prompt-builder.d.ts +51 -23
- package/dist/activities/execute-deep-agent/prompt-builder.js +115 -76
- package/dist/activities/execute-deep-agent/prompt-builder.js.map +1 -1
- package/dist/activities/execute-deep-agent/status-builder-shared.d.ts +18 -32
- package/dist/activities/execute-deep-agent/status-builder-shared.js +10 -65
- package/dist/activities/execute-deep-agent/status-builder-shared.js.map +1 -1
- package/dist/activities/execute-deep-agent/streaming-side-effects.d.ts +10 -8
- package/dist/activities/execute-deep-agent/streaming-side-effects.js +12 -14
- package/dist/activities/execute-deep-agent/streaming-side-effects.js.map +1 -1
- package/dist/activities/execute-deep-agent/subagent-tracker.d.ts +36 -13
- package/dist/activities/execute-deep-agent/subagent-tracker.js +76 -39
- package/dist/activities/execute-deep-agent/subagent-tracker.js.map +1 -1
- package/dist/activities/execute-deep-agent/subagent-transformer.d.ts +25 -28
- package/dist/activities/execute-deep-agent/subagent-transformer.js +29 -82
- package/dist/activities/execute-deep-agent/subagent-transformer.js.map +1 -1
- package/dist/activities/execute-deep-agent/subagent-wiring.d.ts +3 -2
- package/dist/activities/execute-deep-agent/subagent-wiring.js +2 -2
- package/dist/activities/execute-deep-agent/subagent-wiring.js.map +1 -1
- package/dist/activities/execute-deep-agent/turn-settle.d.ts +42 -0
- package/dist/activities/execute-deep-agent/turn-settle.js +146 -0
- package/dist/activities/execute-deep-agent/turn-settle.js.map +1 -0
- package/dist/activities/execute-deep-agent/turn-setup.d.ts +212 -0
- package/dist/activities/execute-deep-agent/turn-setup.js +430 -0
- package/dist/activities/execute-deep-agent/turn-setup.js.map +1 -0
- package/dist/activities/execute-deep-agent/turn-stream.d.ts +97 -0
- package/dist/activities/execute-deep-agent/turn-stream.js +242 -0
- package/dist/activities/execute-deep-agent/turn-stream.js.map +1 -0
- package/dist/activities/execute-deep-agent/turn.d.ts +42 -0
- package/dist/activities/execute-deep-agent/turn.js +116 -0
- package/dist/activities/execute-deep-agent/turn.js.map +1 -0
- package/dist/activities/execute-deep-agent/v3-event-recorder.d.ts +6 -5
- package/dist/activities/execute-deep-agent/v3-event-recorder.js +6 -5
- package/dist/activities/execute-deep-agent/v3-event-recorder.js.map +1 -1
- package/dist/activities/execute-deep-agent/v3-events.d.ts +1 -1
- package/dist/activities/execute-deep-agent/v3-events.js +1 -1
- package/dist/activities/execute-deep-agent/v3-status-builder.d.ts +60 -17
- package/dist/activities/execute-deep-agent/v3-status-builder.js +72 -57
- package/dist/activities/execute-deep-agent/v3-status-builder.js.map +1 -1
- package/dist/harness/approval-decisions.d.ts +61 -0
- package/dist/harness/approval-decisions.js +102 -0
- package/dist/harness/approval-decisions.js.map +1 -0
- package/dist/harness/capabilities.d.ts +16 -5
- package/dist/harness/capabilities.js +9 -0
- package/dist/harness/capabilities.js.map +1 -1
- package/dist/harness/capture.d.ts +144 -0
- package/dist/harness/capture.js +219 -0
- package/dist/harness/capture.js.map +1 -0
- package/dist/harness/persist-chokepoint.d.ts +19 -4
- package/dist/harness/persist-chokepoint.js +17 -4
- package/dist/harness/persist-chokepoint.js.map +1 -1
- package/dist/harness/run-turn.js +115 -29
- package/dist/harness/run-turn.js.map +1 -1
- package/dist/harness/terminal-table.d.ts +40 -11
- package/dist/harness/terminal-table.js +58 -19
- package/dist/harness/terminal-table.js.map +1 -1
- package/dist/harness/turn-context.d.ts +141 -76
- package/dist/harness/turn-context.js +194 -99
- package/dist/harness/turn-context.js.map +1 -1
- package/dist/harness/types.d.ts +65 -12
- package/dist/harness/types.js +8 -2
- package/dist/harness/types.js.map +1 -1
- package/dist/harness-adapters.d.ts +12 -8
- package/dist/harness-adapters.js +17 -9
- package/dist/harness-adapters.js.map +1 -1
- package/dist/middleware/approval-gate.d.ts +1 -1
- package/dist/middleware/approval-gate.js +1 -1
- package/dist/middleware/approval-gate.js.map +1 -1
- package/dist/middleware/cost-advisory.d.ts +39 -0
- package/dist/middleware/{cost-cap.js → cost-advisory.js} +37 -55
- package/dist/middleware/cost-advisory.js.map +1 -0
- package/dist/middleware/index.d.ts +23 -12
- package/dist/middleware/index.js +26 -18
- package/dist/middleware/index.js.map +1 -1
- package/dist/middleware/types.d.ts +3 -2
- package/dist/runner-manager.js +1 -5
- package/dist/runner-manager.js.map +1 -1
- package/dist/runner.js +1 -5
- package/dist/runner.js.map +1 -1
- package/dist/shared/attachment-resolver.d.ts +41 -18
- package/dist/shared/attachment-resolver.js +178 -46
- package/dist/shared/attachment-resolver.js.map +1 -1
- package/dist/shared/attachment-zip.d.ts +85 -0
- package/dist/shared/attachment-zip.js +185 -0
- package/dist/shared/attachment-zip.js.map +1 -0
- package/dist/shared/connect-backfill.js +5 -4
- package/dist/shared/connect-backfill.js.map +1 -1
- package/dist/shared/cost-guard.d.ts +3 -3
- package/dist/shared/cost-guard.js +3 -3
- package/dist/shared/execution-status-writer.d.ts +5 -5
- package/dist/shared/execution-status-writer.js +5 -5
- package/dist/shared/extract-structured-output.d.ts +8 -7
- package/dist/shared/extract-structured-output.js +8 -7
- package/dist/shared/extract-structured-output.js.map +1 -1
- package/dist/shared/filereview/cas-progress.d.ts +1 -18
- package/dist/shared/filereview/cas-progress.js +4 -0
- package/dist/shared/filereview/cas-progress.js.map +1 -1
- package/dist/shared/filereview/cas-touched.d.ts +56 -0
- package/dist/shared/filereview/cas-touched.js +63 -0
- package/dist/shared/filereview/cas-touched.js.map +1 -0
- package/dist/shared/filereview/index.d.ts +2 -1
- package/dist/shared/filereview/index.js +2 -1
- package/dist/shared/filereview/index.js.map +1 -1
- package/dist/shared/mcp-resolver.d.ts +4 -5
- package/dist/shared/mcp-resolver.js +4 -5
- package/dist/shared/mcp-resolver.js.map +1 -1
- package/dist/shared/persist-decision.d.ts +3 -4
- package/dist/shared/persist-decision.js +3 -4
- package/dist/shared/persist-decision.js.map +1 -1
- package/dist/shared/plan-mode-permissions.d.ts +2 -2
- package/dist/shared/plan-mode-permissions.js +2 -2
- package/dist/shared/plan-mode-prompt.d.ts +1 -1
- package/dist/shared/plan-mode-prompt.js +1 -1
- package/dist/shared/prompt-sections.d.ts +163 -0
- package/dist/shared/prompt-sections.js +164 -0
- package/dist/shared/prompt-sections.js.map +1 -0
- package/dist/shared/skill-resolver.d.ts +4 -2
- package/dist/shared/skill-resolver.js +4 -2
- package/dist/shared/skill-resolver.js.map +1 -1
- package/dist/shared/tool-rounds.d.ts +32 -0
- package/dist/shared/tool-rounds.js +43 -0
- package/dist/shared/tool-rounds.js.map +1 -1
- package/dist/shared/tool-row.d.ts +34 -0
- package/dist/shared/tool-row.js +52 -0
- package/dist/shared/tool-row.js.map +1 -1
- package/dist/shared/workspace/session-provision.d.ts +3 -3
- package/dist/shared/workspace/session-provision.js +3 -3
- package/dist/shared/workspace/stigmer-link.d.ts +3 -3
- package/dist/shared/workspace/stigmer-link.js +3 -3
- package/dist/shared/workspace/writeback-coordinator.d.ts +15 -22
- package/dist/shared/workspace/writeback-coordinator.js +16 -53
- package/dist/shared/workspace/writeback-coordinator.js.map +1 -1
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/index.js +1 -1
- package/package.json +4 -4
- package/src/__test-utils__/__tests__/harness-contract-self-check.test.ts +1 -0
- package/src/__test-utils__/execution-record-fixture.ts +18 -2
- package/src/__test-utils__/file-review-projection.ts +156 -0
- package/src/__test-utils__/git-workspace-fixture.ts +58 -0
- package/src/__test-utils__/harness-boot-order-child.ts +7 -2
- package/src/__test-utils__/harness-contract/contract.ts +33 -20
- package/src/__test-utils__/harness-contract/recording-sink.ts +11 -1
- package/src/__test-utils__/harness-contract/runtime-contract.ts +328 -10
- package/src/__test-utils__/harness-contract/scripted-adapter.ts +38 -6
- package/src/__test-utils__/harness-contract/types.ts +27 -3
- package/src/__test-utils__/hermetic-activity.ts +52 -14
- package/src/__test-utils__/model-registry-fixture.ts +32 -7
- package/src/__test-utils__/module-specifiers.ts +24 -0
- package/src/__test-utils__/turn-input-fixture.ts +2 -2
- package/src/__tests__/harness-boot-order.test.ts +9 -2
- package/src/activities/call-agent.ts +2 -2
- package/src/activities/execute-cursor/__test-utils__/contract-subject.ts +47 -3
- package/src/activities/execute-cursor/__test-utils__/hermetic-cursor.ts +2 -48
- package/src/activities/execute-cursor/__tests__/approval-decisions-agree.test.ts +1 -1
- package/src/activities/execute-cursor/__tests__/approval-gate.test.ts +6 -1
- package/src/activities/execute-cursor/__tests__/build-prompt.test.ts +52 -27
- package/src/activities/execute-cursor/__tests__/cas-observations.test.ts +25 -0
- package/src/activities/execute-cursor/__tests__/goldens/prompt.enhanced.everything.prompt.md +166 -0
- package/src/activities/execute-cursor/__tests__/goldens/prompt.enhanced.plan-mode.prompt.md +186 -0
- package/src/activities/execute-cursor/__tests__/goldens/prompt.hitl.recovery.prompt.md +191 -0
- package/src/activities/execute-cursor/__tests__/goldens/prompt.hitl.reinvocation.prompt.md +13 -0
- package/src/activities/execute-cursor/__tests__/goldens/prompt.resumed.prefixed.prompt.md +32 -0
- package/src/activities/execute-cursor/__tests__/goldens/prompt.resumed.raw.prompt.md +1 -0
- package/src/activities/execute-cursor/__tests__/hermetic/file-review-capture.test.ts +1 -2
- package/src/activities/execute-cursor/__tests__/hermetic/goldens/sdk-error-at-create.status.json +4 -0
- package/src/activities/execute-cursor/__tests__/hermetic/harness-contract.test.ts +24 -4
- package/src/activities/execute-cursor/__tests__/hermetic/stream-self-stop-arms.test.ts +6 -5
- package/src/activities/execute-cursor/__tests__/hermetic/thrown-error-arms.test.ts +9 -0
- package/src/activities/execute-cursor/__tests__/hitl-resume-history.test.ts +11 -8
- package/src/activities/execute-cursor/__tests__/prompt-goldens.test.ts +229 -0
- package/src/activities/execute-cursor/__tests__/same-identity-reproposal.test.ts +3 -3
- package/src/activities/execute-cursor/__tests__/sequential-gate-resume.test.ts +2 -2
- package/src/activities/execute-cursor/__tests__/turn-boundary.test.ts +78 -234
- package/src/activities/execute-cursor/__tests__/turn-stream.test.ts +1 -26
- package/src/activities/execute-cursor/adapter.ts +7 -5
- package/src/activities/execute-cursor/approval-policy.ts +5 -2
- package/src/activities/execute-cursor/approval-state.ts +16 -8
- package/src/activities/execute-cursor/cas-observations.ts +20 -2
- package/src/activities/execute-cursor/cursor-capabilities.ts +24 -5
- package/src/activities/execute-cursor/message-translator.ts +29 -41
- package/src/activities/execute-cursor/prompt-builder.ts +99 -157
- package/src/activities/execute-cursor/turn-boundary.ts +34 -140
- package/src/activities/execute-cursor/turn-settle.ts +37 -51
- package/src/activities/execute-cursor/turn-setup.ts +30 -70
- package/src/activities/execute-cursor/turn-stream.ts +8 -31
- package/src/activities/execute-cursor/turn.ts +5 -1
- package/src/activities/execute-deep-agent/__test-utils__/contract-subject.ts +391 -0
- package/src/activities/execute-deep-agent/__test-utils__/hermetic-deep-agent.ts +313 -0
- package/src/activities/execute-deep-agent/__test-utils__/hitl-script.ts +48 -0
- package/src/activities/execute-deep-agent/__test-utils__/scripted-model-module.ts +85 -0
- package/src/activities/execute-deep-agent/__test-utils__/scripted-model.ts +383 -36
- package/src/activities/execute-deep-agent/__tests__/adapter-graph-is-sdk-free.test.ts +76 -0
- package/src/activities/execute-deep-agent/__tests__/adapter-is-temporal-free.test.ts +47 -0
- package/src/activities/execute-deep-agent/__tests__/adapter.test.ts +80 -0
- package/src/activities/execute-deep-agent/__tests__/cas-capture-backend.test.ts +1 -1
- package/src/activities/execute-deep-agent/__tests__/execution-state-extended.test.ts +0 -2
- package/src/activities/execute-deep-agent/__tests__/execution-state.test.ts +0 -3
- package/src/activities/execute-deep-agent/__tests__/goldens/system-prompt.build-from-plan.prompt.md +172 -0
- package/src/activities/execute-deep-agent/__tests__/goldens/system-prompt.everything.prompt.md +167 -0
- package/src/activities/execute-deep-agent/__tests__/goldens/system-prompt.minimal.prompt.md +36 -0
- package/src/activities/execute-deep-agent/__tests__/goldens/system-prompt.plan-mode.prompt.md +178 -0
- package/src/activities/execute-deep-agent/__tests__/goldens/system-prompt.skills-below-threshold.prompt.md +158 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/file-review-capture.test.ts +210 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn1.status.json +74 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve-all-lease.turn2.status.json +104 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/approve.turn2.status.json +78 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/file-review-capture.status.json +138 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/gate.turn1.status.json +68 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn1.status.json +154 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/inline-artifact.turn2.status.json +116 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.after-tool.status.json +69 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/pause.loop.mid-tool.status.json +67 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/plain-turn.status.json +47 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/platform-stop.status.json +68 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/recursion-limit.persisted.status.json +280 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/reject.turn2.status.json +77 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/resolution-error.status.json +18 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn2.status.json +99 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sequential-gates.turn3.status.json +109 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/skip.turn2.status.json +76 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/structured-output.text-fallback.status.json +51 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/structured-output.tier2.status.json +51 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/structured-output.tool-strategy.status.json +56 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/sub-agent-delegation.status.json +90 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/tool-call.status.json +70 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/goldens/worker-shutdown.status.json +71 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/harness-contract.test.ts +144 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-approve-all-lease.test.ts +184 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-round-trips.test.ts +203 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/hitl-sequential-gates.test.ts +170 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/inline-artifact-across-gate.test.ts +175 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/pause-vs-shutdown.test.ts +206 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/plain-turn.test.ts +142 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/platform-stop.test.ts +126 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/recursion-limit.test.ts +139 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/resolution-error.test.ts +122 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/structured-output.test.ts +236 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/sub-agent-delegation.test.ts +161 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/tool-call.test.ts +157 -0
- package/src/activities/execute-deep-agent/__tests__/hermetic/workspace-lock-timeout.test.ts +152 -0
- package/src/activities/execute-deep-agent/__tests__/hitl.test.ts +50 -122
- package/src/activities/execute-deep-agent/__tests__/inline-publisher.test.ts +8 -6
- package/src/activities/execute-deep-agent/__tests__/plan-mode-path-normalization.test.ts +2 -2
- package/src/activities/execute-deep-agent/__tests__/prompt-builder.test.ts +35 -35
- package/src/activities/execute-deep-agent/__tests__/prompt-goldens.test.ts +247 -0
- package/src/activities/execute-deep-agent/__tests__/scripted-model.test.ts +329 -0
- package/src/activities/execute-deep-agent/__tests__/status-builder-shared.test.ts +1 -20
- package/src/activities/execute-deep-agent/__tests__/streaming-side-effects.test.ts +78 -0
- package/src/activities/execute-deep-agent/__tests__/subagent-gitignored-capture.test.ts +1 -1
- package/src/activities/execute-deep-agent/__tests__/subagent-plan-mode-permissions.test.ts +2 -2
- package/src/activities/execute-deep-agent/__tests__/subagent-tracker.test.ts +57 -31
- package/src/activities/execute-deep-agent/__tests__/subagent-transformer.test.ts +19 -79
- package/src/activities/execute-deep-agent/__tests__/subagent-wiring.test.ts +15 -15
- package/src/activities/execute-deep-agent/__tests__/summarization-verification.test.ts +1 -1
- package/src/activities/execute-deep-agent/__tests__/turn-stream.test.ts +391 -0
- package/src/activities/execute-deep-agent/__tests__/v3-status-builder.test.ts +343 -38
- package/src/activities/execute-deep-agent/__tests__/vision-input.test.ts +5 -5
- package/src/activities/execute-deep-agent/adapter.ts +94 -0
- package/src/activities/execute-deep-agent/cas-capture-observer.ts +11 -0
- package/src/activities/execute-deep-agent/deep-agent-capabilities.ts +43 -0
- package/src/activities/execute-deep-agent/execution-state.ts +4 -13
- package/src/activities/execute-deep-agent/hitl.ts +100 -123
- package/src/activities/execute-deep-agent/prompt-builder.ts +141 -115
- package/src/activities/execute-deep-agent/status-builder-shared.ts +21 -84
- package/src/activities/execute-deep-agent/streaming-side-effects.ts +13 -19
- package/src/activities/execute-deep-agent/subagent-tracker.ts +77 -42
- package/src/activities/execute-deep-agent/subagent-transformer.ts +46 -105
- package/src/activities/execute-deep-agent/subagent-wiring.ts +5 -4
- package/src/activities/execute-deep-agent/turn-settle.ts +164 -0
- package/src/activities/execute-deep-agent/turn-setup.ts +541 -0
- package/src/activities/execute-deep-agent/turn-stream.ts +313 -0
- package/src/activities/execute-deep-agent/turn.ts +131 -0
- package/src/activities/execute-deep-agent/v3-event-recorder.ts +6 -5
- package/src/activities/execute-deep-agent/v3-events.ts +1 -1
- package/src/activities/execute-deep-agent/v3-status-builder.ts +84 -63
- package/src/harness/__tests__/approval-decisions.test.ts +116 -0
- package/src/harness/__tests__/capture.test.ts +268 -0
- package/src/harness/__tests__/mount-skills.test.ts +169 -0
- package/src/harness/__tests__/persist-chokepoint.test.ts +38 -2
- package/src/harness/__tests__/run-turn-deterministic.test.ts +94 -0
- package/src/harness/__tests__/run-turn.test.ts +39 -23
- package/src/harness/__tests__/turn-attachments-vision.test.ts +80 -0
- package/src/harness/__tests__/turn-context.test.ts +73 -26
- package/src/harness/approval-decisions.ts +104 -0
- package/src/harness/capabilities.ts +16 -5
- package/src/harness/capture.ts +301 -0
- package/src/harness/persist-chokepoint.ts +24 -4
- package/src/harness/run-turn.ts +120 -29
- package/src/harness/terminal-table.ts +61 -20
- package/src/harness/turn-context.ts +208 -111
- package/src/harness/types.ts +66 -12
- package/src/harness-adapters.ts +17 -9
- package/src/middleware/__tests__/approval-gate.test.ts +1 -1
- package/src/middleware/__tests__/cost-advisory.test.ts +113 -0
- package/src/middleware/approval-gate.ts +2 -2
- package/src/middleware/{cost-cap.ts → cost-advisory.ts} +40 -70
- package/src/middleware/index.ts +29 -29
- package/src/middleware/types.ts +3 -2
- package/src/runner-manager.ts +0 -8
- package/src/runner.ts +0 -8
- package/src/shared/__tests__/attachment-naming.test.ts +6 -19
- package/src/shared/__tests__/attachment-resolver.test.ts +158 -8
- package/src/shared/__tests__/attachment-zip.test.ts +236 -0
- package/src/shared/__tests__/bedrock-adapter.test.ts +1 -1
- package/src/shared/__tests__/blueprint-resolver.test.ts +43 -0
- package/src/shared/__tests__/cost-guard.test.ts +3 -3
- package/src/shared/__tests__/prompt-sections.test.ts +167 -0
- package/src/shared/__tests__/secret-leak-scan.test.ts +2 -2
- package/src/{activities/execute-deep-agent → shared}/__tests__/stamp-flowed-rows.test.ts +33 -10
- package/src/shared/__tests__/vertex-adapter.test.ts +1 -1
- package/src/shared/attachment-resolver.ts +218 -55
- package/src/shared/attachment-zip.ts +281 -0
- package/src/shared/connect-backfill.ts +9 -11
- package/src/shared/cost-guard.ts +3 -3
- package/src/shared/execution-status-writer.ts +5 -5
- package/src/shared/extract-structured-output.ts +8 -7
- package/src/shared/filereview/__tests__/capture.test.ts +86 -4
- package/src/shared/filereview/__tests__/cas-progress.test.ts +2 -1
- package/src/shared/filereview/cas-progress.ts +5 -19
- package/src/shared/filereview/cas-touched.ts +89 -0
- package/src/shared/filereview/index.ts +4 -2
- package/src/shared/mcp-resolver.ts +4 -5
- package/src/shared/persist-decision.ts +3 -4
- package/src/shared/plan-mode-permissions.ts +2 -2
- package/src/shared/plan-mode-prompt.ts +1 -1
- package/src/shared/prompt-sections.ts +256 -0
- package/src/shared/skill-resolver.ts +4 -2
- package/src/shared/tool-rounds.ts +48 -0
- package/src/shared/tool-row.ts +61 -0
- package/src/shared/workspace/__tests__/stigmer-link.test.ts +7 -22
- package/src/shared/workspace/__tests__/writeback-coordinator.test.ts +20 -61
- package/src/shared/workspace/session-provision.ts +3 -3
- package/src/shared/workspace/stigmer-link.ts +3 -3
- package/src/shared/workspace/writeback-coordinator.ts +16 -64
- package/src/tools/index.ts +1 -1
- package/dist/activities/execute-cursor/capture-flow.d.ts +0 -142
- package/dist/activities/execute-cursor/capture-flow.js +0 -285
- package/dist/activities/execute-cursor/capture-flow.js.map +0 -1
- package/dist/activities/execute-cursor/command-provenance.d.ts +0 -48
- package/dist/activities/execute-cursor/command-provenance.js +0 -38
- package/dist/activities/execute-cursor/command-provenance.js.map +0 -1
- package/dist/activities/execute-deep-agent/attachment-injector.d.ts +0 -134
- package/dist/activities/execute-deep-agent/attachment-injector.js +0 -386
- package/dist/activities/execute-deep-agent/attachment-injector.js.map +0 -1
- package/dist/activities/execute-deep-agent/command-provenance.d.ts +0 -61
- package/dist/activities/execute-deep-agent/command-provenance.js +0 -72
- package/dist/activities/execute-deep-agent/command-provenance.js.map +0 -1
- package/dist/activities/execute-deep-agent/environment.d.ts +0 -24
- package/dist/activities/execute-deep-agent/environment.js +0 -58
- package/dist/activities/execute-deep-agent/environment.js.map +0 -1
- package/dist/activities/execute-deep-agent/event-recorder.d.ts +0 -21
- package/dist/activities/execute-deep-agent/event-recorder.js +0 -67
- package/dist/activities/execute-deep-agent/event-recorder.js.map +0 -1
- package/dist/activities/execute-deep-agent/index.d.ts +0 -15
- package/dist/activities/execute-deep-agent/index.js +0 -918
- package/dist/activities/execute-deep-agent/index.js.map +0 -1
- package/dist/activities/execute-deep-agent/mcp-gate.d.ts +0 -28
- package/dist/activities/execute-deep-agent/mcp-gate.js +0 -22
- package/dist/activities/execute-deep-agent/mcp-gate.js.map +0 -1
- package/dist/activities/execute-deep-agent/post-stream.d.ts +0 -23
- package/dist/activities/execute-deep-agent/post-stream.js +0 -71
- package/dist/activities/execute-deep-agent/post-stream.js.map +0 -1
- package/dist/activities/execute-deep-agent/setup.d.ts +0 -136
- package/dist/activities/execute-deep-agent/setup.js +0 -767
- package/dist/activities/execute-deep-agent/setup.js.map +0 -1
- package/dist/activities/execute-deep-agent/stamp-flowed-rows.d.ts +0 -36
- package/dist/activities/execute-deep-agent/stamp-flowed-rows.js +0 -56
- package/dist/activities/execute-deep-agent/stamp-flowed-rows.js.map +0 -1
- package/dist/activities/execute-deep-agent/status-builder.d.ts +0 -93
- package/dist/activities/execute-deep-agent/status-builder.js +0 -365
- package/dist/activities/execute-deep-agent/status-builder.js.map +0 -1
- package/dist/activities/execute-deep-agent/streaming-terminal.d.ts +0 -21
- package/dist/activities/execute-deep-agent/streaming-terminal.js +0 -80
- package/dist/activities/execute-deep-agent/streaming-terminal.js.map +0 -1
- package/dist/activities/execute-deep-agent/streaming-v3.d.ts +0 -13
- package/dist/activities/execute-deep-agent/streaming-v3.js +0 -174
- package/dist/activities/execute-deep-agent/streaming-v3.js.map +0 -1
- package/dist/activities/execute-deep-agent/streaming.d.ts +0 -81
- package/dist/activities/execute-deep-agent/streaming.js +0 -160
- package/dist/activities/execute-deep-agent/streaming.js.map +0 -1
- package/dist/middleware/cost-cap.d.ts +0 -22
- package/dist/middleware/cost-cap.js.map +0 -1
- package/dist/middleware/graceful-stop.d.ts +0 -17
- package/dist/middleware/graceful-stop.js +0 -63
- package/dist/middleware/graceful-stop.js.map +0 -1
- package/dist/shared/skill-writer.d.ts +0 -75
- package/dist/shared/skill-writer.js +0 -207
- package/dist/shared/skill-writer.js.map +0 -1
- package/src/activities/execute-cursor/__tests__/capture-flow.test.ts +0 -1032
- package/src/activities/execute-cursor/__tests__/command-provenance.test.ts +0 -240
- package/src/activities/execute-cursor/__tests__/progress-substrate.test.ts +0 -169
- package/src/activities/execute-cursor/capture-flow.ts +0 -379
- package/src/activities/execute-cursor/command-provenance.ts +0 -73
- package/src/activities/execute-deep-agent/__tests__/attachment-injector.test.ts +0 -1161
- package/src/activities/execute-deep-agent/__tests__/command-provenance.test.ts +0 -252
- package/src/activities/execute-deep-agent/__tests__/environment.test.ts +0 -108
- package/src/activities/execute-deep-agent/__tests__/event-recorder.test.ts +0 -150
- package/src/activities/execute-deep-agent/__tests__/hitl-integration.test.ts +0 -226
- package/src/activities/execute-deep-agent/__tests__/hitl-reject.test.ts +0 -318
- package/src/activities/execute-deep-agent/__tests__/hitl-resume-approve-all.test.ts +0 -351
- package/src/activities/execute-deep-agent/__tests__/hitl-resume-history.test.ts +0 -293
- package/src/activities/execute-deep-agent/__tests__/index.test.ts +0 -99
- package/src/activities/execute-deep-agent/__tests__/mcp-gate.test.ts +0 -44
- package/src/activities/execute-deep-agent/__tests__/post-stream.test.ts +0 -112
- package/src/activities/execute-deep-agent/__tests__/sequential-gate-resume.test.ts +0 -358
- package/src/activities/execute-deep-agent/__tests__/status-builder.test.ts +0 -1933
- package/src/activities/execute-deep-agent/__tests__/streaming-terminal.test.ts +0 -40
- package/src/activities/execute-deep-agent/__tests__/streaming-v3.test.ts +0 -597
- package/src/activities/execute-deep-agent/__tests__/streaming.test.ts +0 -508
- package/src/activities/execute-deep-agent/attachment-injector.ts +0 -627
- package/src/activities/execute-deep-agent/command-provenance.ts +0 -102
- package/src/activities/execute-deep-agent/environment.ts +0 -76
- package/src/activities/execute-deep-agent/event-recorder.ts +0 -95
- package/src/activities/execute-deep-agent/index.ts +0 -1072
- package/src/activities/execute-deep-agent/mcp-gate.ts +0 -37
- package/src/activities/execute-deep-agent/post-stream.ts +0 -109
- package/src/activities/execute-deep-agent/setup.ts +0 -1081
- package/src/activities/execute-deep-agent/stamp-flowed-rows.ts +0 -64
- package/src/activities/execute-deep-agent/status-builder.ts +0 -481
- package/src/activities/execute-deep-agent/streaming-terminal.ts +0 -106
- package/src/activities/execute-deep-agent/streaming-v3.ts +0 -277
- package/src/activities/execute-deep-agent/streaming.ts +0 -313
- package/src/middleware/__tests__/cost-cap.test.ts +0 -192
- package/src/middleware/__tests__/graceful-stop.test.ts +0 -105
- package/src/middleware/graceful-stop.ts +0 -86
- package/src/shared/__tests__/skill-writer.test.ts +0 -372
- package/src/shared/skill-writer.ts +0 -266
|
@@ -1,44 +1,54 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* The native harness's system prompt: what `createDeepAgent` receives as
|
|
3
|
+
* `systemPrompt`, rebuilt on EVERY invocation (never checkpointed with the
|
|
4
|
+
* message history), so every standing fact is injected on every turn by
|
|
5
|
+
* design — a first-turn-only injection would vanish from turn 2 onward.
|
|
3
6
|
*
|
|
4
|
-
* Pure functions: no side effects, no I/O.
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
+
* Pure functions: no side effects, no I/O. `turn-setup.ts` gathers the
|
|
8
|
+
* inputs from the runtime's resolved record and this module renders them.
|
|
9
|
+
*
|
|
10
|
+
* What is this harness's and what is shared (S3 M5, Q-S3-10 / Q-M5-2):
|
|
11
|
+
* - Shared through `shared/prompt-sections.ts`: WHICH standing sections
|
|
12
|
+
* render and in WHAT order (`standingContextSections`), the input-files
|
|
13
|
+
* bullet and disclosure lines (`inputFileLines`), which skills a prompt
|
|
14
|
+
* highlights (`selectSkillsForPrompt`, called from `turn-setup.ts`) and
|
|
15
|
+
* the also-available sentence. Their WORDS come from each fact's own
|
|
16
|
+
* module; this builder only frames them.
|
|
17
|
+
* - This harness's: the framing — `## Heading` markdown sections, the house
|
|
18
|
+
* style for a system prompt — and every text that quotes this engine's
|
|
19
|
+
* tools: the `## Skills` activation protocol (`read`, `execute(...)`), the
|
|
20
|
+
* response rules, the sub-agent delegation rules, the plan-mode
|
|
21
|
+
* read-boundary sentence, and the workspace section (the deepagents
|
|
22
|
+
* backend's path resolution is this engine's).
|
|
23
|
+
*
|
|
24
|
+
* The rendered bytes are load-bearing for the hermetic tests: `ScriptedModel`
|
|
25
|
+
* tells its scripted roles apart by the system prompt's text, so this
|
|
26
|
+
* module's whole output is pinned by `__tests__/prompt-goldens.test.ts`.
|
|
7
27
|
*/
|
|
8
28
|
|
|
9
29
|
import { relative } from "node:path";
|
|
10
30
|
import { InteractionMode } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
11
31
|
import type { ProvisionResult, GitMetadata } from "../../shared/workspace/types.js";
|
|
12
32
|
import { SourceType } from "../../shared/workspace/types.js";
|
|
13
|
-
import { formatContextBridgeText } from "../../shared/context-bridge.js";
|
|
14
33
|
import { formatConversationCatchupText } from "../../shared/conversation-catchup.js";
|
|
34
|
+
import type { SenderIdentity } from "../../shared/sender-identity.js";
|
|
35
|
+
import type { DeclaredPreferencesContent } from "../../shared/declared-preferences.js";
|
|
36
|
+
import type { RecalledMemoriesContent } from "../../shared/recalled-memories.js";
|
|
37
|
+
import type { DownloadUrlKind } from "../../shared/attachment-download-urls.js";
|
|
15
38
|
import {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
formatDeclaredPreferencesText,
|
|
22
|
-
type DeclaredPreferencesContent,
|
|
23
|
-
} from "../../shared/declared-preferences.js";
|
|
24
|
-
import {
|
|
25
|
-
formatRecalledMemoriesText,
|
|
26
|
-
type RecalledMemoriesContent,
|
|
27
|
-
} from "../../shared/recalled-memories.js";
|
|
28
|
-
import {
|
|
29
|
-
visionDisclosureLines,
|
|
30
|
-
type NotViewableEntry,
|
|
31
|
-
} from "../../shared/attachment-vision.js";
|
|
32
|
-
import {
|
|
33
|
-
downloadUrlDisclosureLine,
|
|
34
|
-
type DownloadUrlKind,
|
|
35
|
-
} from "../../shared/attachment-download-urls.js";
|
|
39
|
+
inputFileLines,
|
|
40
|
+
standingContextSections,
|
|
41
|
+
type StandingSectionKind,
|
|
42
|
+
type VisionPromptInfo,
|
|
43
|
+
} from "../../shared/prompt-sections.js";
|
|
36
44
|
import { PLAN_MODE_DIRECTIVE } from "../../shared/plan-mode-prompt.js";
|
|
37
45
|
import {
|
|
38
46
|
buildImplementPlanDirective,
|
|
39
47
|
findApprovedPlanPath,
|
|
40
48
|
} from "../../shared/implement-plan-prompt.js";
|
|
41
|
-
import type {
|
|
49
|
+
import type { ResolvedAttachment } from "../../shared/attachment-resolver.js";
|
|
50
|
+
import type { SkillMetadata } from "../../shared/skill-resolver.js";
|
|
51
|
+
import { STIGMER_LOCAL_STATE_DIR } from "../../shared/workspace/stigmer-link.js";
|
|
42
52
|
|
|
43
53
|
const RESPONSE_RULES = `
|
|
44
54
|
|
|
@@ -106,7 +116,11 @@ directly over delegating. Only delegate when context isolation \
|
|
|
106
116
|
or parallelism genuinely helps the user.
|
|
107
117
|
`;
|
|
108
118
|
|
|
119
|
+
/** The agent's instructions when the blueprint carries none; the prompt is never empty (S3 M2a, F-M2a-16: was `setup.ts`'s alone). */
|
|
120
|
+
export const DEFAULT_INSTRUCTIONS = "You are a helpful AI assistant.";
|
|
121
|
+
|
|
109
122
|
export interface PromptBuilderInput {
|
|
123
|
+
/** The blueprint's instructions, raw; empty falls back to {@link DEFAULT_INSTRUCTIONS}. */
|
|
110
124
|
instructions: string;
|
|
111
125
|
provisionResults: ProvisionResult[];
|
|
112
126
|
containerRoot: string;
|
|
@@ -119,7 +133,8 @@ export interface PromptBuilderInput {
|
|
|
119
133
|
channelTemplatesPromptSection?: string;
|
|
120
134
|
workspaceFileRefs: string[];
|
|
121
135
|
workspaceRoot: string;
|
|
122
|
-
|
|
136
|
+
/** The turn's resolved input files, as the runtime's attachment phase returns them. */
|
|
137
|
+
inputFiles: readonly ResolvedAttachment[];
|
|
123
138
|
/**
|
|
124
139
|
* Vision facts about this turn's attachments (T04): which images the model
|
|
125
140
|
* sees inline in the user message and which degraded to path-only.
|
|
@@ -135,7 +150,7 @@ export interface PromptBuilderInput {
|
|
|
135
150
|
/**
|
|
136
151
|
* The execution's interaction mode. PLAN appends the shared plan-mode
|
|
137
152
|
* directive so the model knows the turn's deliverable is a plan document.
|
|
138
|
-
* Tool-level write enforcement is separate (see setup.ts permissions) —
|
|
153
|
+
* Tool-level write enforcement is separate (see turn-setup.ts permissions) —
|
|
139
154
|
* without this directive the model is silently read-only but never told
|
|
140
155
|
* to produce a plan.
|
|
141
156
|
*/
|
|
@@ -192,28 +207,34 @@ export interface PromptBuilderInput {
|
|
|
192
207
|
recalledMemories?: RecalledMemoriesContent;
|
|
193
208
|
}
|
|
194
209
|
|
|
195
|
-
// The prompt renders the
|
|
196
|
-
// once lived here and silently dropped the size field
|
|
197
|
-
// so the "(N bytes)" annotation never rendered. One
|
|
198
|
-
|
|
210
|
+
// The prompt renders the attachment resolver's own result type — a local
|
|
211
|
+
// structural twin once lived here and silently dropped the size field
|
|
212
|
+
// (`size` vs `sizeBytes`), so the "(N bytes)" annotation never rendered. One
|
|
213
|
+
// type, one truth: the runtime's `ResolvedAttachment`; the vision facts are
|
|
214
|
+
// the shared `VisionPromptInfo` (prompt-sections.ts) for the same reason.
|
|
215
|
+
|
|
216
|
+
export type { VisionPromptInfo };
|
|
199
217
|
|
|
200
218
|
/**
|
|
201
|
-
*
|
|
202
|
-
*
|
|
203
|
-
*
|
|
204
|
-
*
|
|
219
|
+
* This harness's heading for each shared standing section (the section's
|
|
220
|
+
* identity and order are `prompt-sections.ts`'s; the `##` framing is the
|
|
221
|
+
* house style for a system prompt). Exhaustive by the compiler: a new kind
|
|
222
|
+
* fails here until it is named.
|
|
205
223
|
*/
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
224
|
+
const STANDING_SECTION_HEADINGS: Record<StandingSectionKind, string> = {
|
|
225
|
+
"conversation-sender": "Conversation sender",
|
|
226
|
+
"declared-preferences": "Declared preferences",
|
|
227
|
+
"recalled-memories": "Remembered facts",
|
|
228
|
+
"session-context": "Session context",
|
|
229
|
+
"previous-conversation": "Previous conversation context",
|
|
230
|
+
};
|
|
210
231
|
|
|
211
232
|
/**
|
|
212
233
|
* Assemble the full system prompt from base instructions and contextual
|
|
213
234
|
* sections. Pure function with no I/O.
|
|
214
235
|
*/
|
|
215
236
|
export function buildEnhancedSystemPrompt(input: PromptBuilderInput): string {
|
|
216
|
-
let prompt = input.instructions;
|
|
237
|
+
let prompt = input.instructions || DEFAULT_INSTRUCTIONS;
|
|
217
238
|
|
|
218
239
|
const workspaceSection = buildWorkspacePromptSection(
|
|
219
240
|
input.provisionResults,
|
|
@@ -241,50 +262,16 @@ export function buildEnhancedSystemPrompt(input: PromptBuilderInput): string {
|
|
|
241
262
|
}
|
|
242
263
|
}
|
|
243
264
|
|
|
244
|
-
if (input.
|
|
245
|
-
prompt +=
|
|
246
|
-
input.
|
|
265
|
+
if (input.inputFiles.length > 0) {
|
|
266
|
+
prompt += buildInputFilesSection(
|
|
267
|
+
input.inputFiles, input.vision, input.downloadUrlKind,
|
|
247
268
|
);
|
|
248
269
|
}
|
|
249
270
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
// Platform-declared standing facts precede embedder-supplied context
|
|
257
|
-
// (DD-002 D3): both are standing background, but the declared preferences
|
|
258
|
-
// are platform-authored while session context is the embedder's overlay —
|
|
259
|
-
// the more specific overlay reads later and naturally refines.
|
|
260
|
-
if (input.declaredPreferences) {
|
|
261
|
-
prompt +=
|
|
262
|
-
"\n\n## Declared preferences\n\n" +
|
|
263
|
-
formatDeclaredPreferencesText(input.declaredPreferences);
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
// Declared-by-humans precedes learned-and-confirmed (DD-006 D4): both
|
|
267
|
-
// are platform-authored standing background, but a preference is the
|
|
268
|
-
// user's exact words while a memory is an agent's confirmed inference —
|
|
269
|
-
// the exact statement reads first.
|
|
270
|
-
if (input.recalledMemories) {
|
|
271
|
-
prompt +=
|
|
272
|
-
"\n\n## Remembered facts\n\n" +
|
|
273
|
-
formatRecalledMemoriesText(input.recalledMemories);
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
// Standing facts about the user (session context) come before the
|
|
277
|
-
// carried conversation (bridge): the bridge may refer back to them.
|
|
278
|
-
if (input.sessionContext) {
|
|
279
|
-
prompt +=
|
|
280
|
-
"\n\n## Session context\n\n" +
|
|
281
|
-
formatSessionContextText(input.sessionContext);
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
if (input.contextBridge) {
|
|
285
|
-
prompt +=
|
|
286
|
-
"\n\n## Previous conversation context\n\n" +
|
|
287
|
-
formatContextBridgeText(input.contextBridge);
|
|
271
|
+
// The standing context, in the shared order (the doctrine is stated once,
|
|
272
|
+
// on `standingContextSections`); this harness only frames each section.
|
|
273
|
+
for (const section of standingContextSections(input)) {
|
|
274
|
+
prompt += `\n\n## ${STANDING_SECTION_HEADINGS[section.kind]}\n\n${section.body}`;
|
|
288
275
|
}
|
|
289
276
|
|
|
290
277
|
prompt += RESPONSE_RULES;
|
|
@@ -310,7 +297,7 @@ export function buildEnhancedSystemPrompt(input: PromptBuilderInput): string {
|
|
|
310
297
|
|
|
311
298
|
if (input.buildFromPlan) {
|
|
312
299
|
const planPath = findApprovedPlanPath(
|
|
313
|
-
input.
|
|
300
|
+
input.inputFiles.map((f) => f.relativePath),
|
|
314
301
|
);
|
|
315
302
|
prompt +=
|
|
316
303
|
"\n\n## Implement the approved plan\n\n" +
|
|
@@ -339,6 +326,62 @@ export function composeUserMessage(
|
|
|
339
326
|
: message;
|
|
340
327
|
}
|
|
341
328
|
|
|
329
|
+
/**
|
|
330
|
+
* The `## Skills` section of this harness's system prompt, rendered from the
|
|
331
|
+
* runtime's mounted-skill metadata (`shared/skill-resolver.ts`
|
|
332
|
+
* `SkillMetadata`), following the Agent Skills spec's progressive
|
|
333
|
+
* disclosure model: only name, description and location are injected; the
|
|
334
|
+
* agent reads SKILL.md on demand through its filesystem tools. Byte for byte
|
|
335
|
+
* the text the orchestrator-era `generatePromptSection` rendered from the
|
|
336
|
+
* `Skill` proto (deleted with `setup.ts` at S3 M2b); the one difference is
|
|
337
|
+
* the input — a mounted file's metadata, not a fetched resource — so this
|
|
338
|
+
* renderer needs no client and serves the root and every sub-agent alike.
|
|
339
|
+
* Empty for no skills.
|
|
340
|
+
*/
|
|
341
|
+
export function renderSkillsSection(skills: readonly SkillMetadata[]): string {
|
|
342
|
+
if (skills.length === 0) return "";
|
|
343
|
+
|
|
344
|
+
const lines: string[] = [
|
|
345
|
+
"",
|
|
346
|
+
"",
|
|
347
|
+
"## Skills",
|
|
348
|
+
"",
|
|
349
|
+
"You have access to the following skills. Each skill provides specialized " +
|
|
350
|
+
"knowledge or capabilities.",
|
|
351
|
+
"",
|
|
352
|
+
"**Activation protocol**: To use a skill, read its SKILL.md file " +
|
|
353
|
+
"using the `read` tool. The SKILL.md contains detailed instructions, " +
|
|
354
|
+
"available tools, and usage examples.",
|
|
355
|
+
"",
|
|
356
|
+
"**Usage pattern**:",
|
|
357
|
+
"",
|
|
358
|
+
"1. Review the skill description below to determine relevance",
|
|
359
|
+
"2. Read `{location}/SKILL.md` for full instructions",
|
|
360
|
+
"3. Follow the skill's documented operations:",
|
|
361
|
+
"",
|
|
362
|
+
"`read {location}/references/schema.md`",
|
|
363
|
+
'`execute("python3 {location}/scripts/run.py")`',
|
|
364
|
+
"",
|
|
365
|
+
];
|
|
366
|
+
|
|
367
|
+
for (const skill of skills) {
|
|
368
|
+
const skillDir = skillDirOf(skill);
|
|
369
|
+
lines.push(`### ${skill.name}`);
|
|
370
|
+
lines.push(`**Description**: ${skill.description || "(no description)"}`);
|
|
371
|
+
lines.push(`**Location**: \`${skillDir}/\``);
|
|
372
|
+
lines.push(`**Activate**: \`read ${skillDir}/SKILL.md\``);
|
|
373
|
+
lines.push("");
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
return lines.join("\n");
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
/** The mount directory a skill's `SKILL.md` path names (`.stigmer/skills/<name>`). */
|
|
380
|
+
function skillDirOf(skill: SkillMetadata): string {
|
|
381
|
+
const slash = skill.path.lastIndexOf("/");
|
|
382
|
+
return slash > 0 ? skill.path.slice(0, slash) : `${STIGMER_LOCAL_STATE_DIR}/skills/${skill.name}`;
|
|
383
|
+
}
|
|
384
|
+
|
|
342
385
|
function buildWorkspacePromptSection(
|
|
343
386
|
provisionResults: ProvisionResult[],
|
|
344
387
|
containerRoot: string,
|
|
@@ -452,8 +495,14 @@ function buildReferencedFilesSection(
|
|
|
452
495
|
return section;
|
|
453
496
|
}
|
|
454
497
|
|
|
455
|
-
|
|
456
|
-
|
|
498
|
+
/**
|
|
499
|
+
* The `## Input Files` section: this harness's intro (it names this engine's
|
|
500
|
+
* `read` tool) around the shared lines (`prompt-sections.ts` `inputFileLines`
|
|
501
|
+
* says what each bullet and disclosure carries and why). Each disclosure
|
|
502
|
+
* group is set off by a blank line, the markdown idiom.
|
|
503
|
+
*/
|
|
504
|
+
function buildInputFilesSection(
|
|
505
|
+
files: readonly ResolvedAttachment[],
|
|
457
506
|
vision?: VisionPromptInfo,
|
|
458
507
|
downloadUrlKind?: DownloadUrlKind,
|
|
459
508
|
): string {
|
|
@@ -467,38 +516,15 @@ function buildInjectedFilesSection(
|
|
|
467
516
|
"-- they are reference material, not output. " +
|
|
468
517
|
"Do NOT modify or delete these files.\n\n";
|
|
469
518
|
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
// name so the agent can connect "the two report.pdfs" in the user's
|
|
474
|
-
// message to distinct files on disk. A file with a minted download URL
|
|
475
|
-
// (attachment-download-urls.ts) lists it beside the path for the remote
|
|
476
|
-
// hand-off story.
|
|
477
|
-
const renameInfo =
|
|
478
|
-
f.renamedFrom !== undefined
|
|
479
|
-
? ` (renamed from duplicate '${f.renamedFrom}')`
|
|
480
|
-
: "";
|
|
481
|
-
const urlInfo =
|
|
482
|
-
f.downloadUrl !== undefined ? ` — download URL: ${f.downloadUrl}` : "";
|
|
483
|
-
section += `- \`${f.path}\`${sizeInfo}${renameInfo}${urlInfo}\n`;
|
|
519
|
+
const lines = inputFileLines(files, vision, downloadUrlKind);
|
|
520
|
+
for (const entry of lines.entries) {
|
|
521
|
+
section += `${entry}\n`;
|
|
484
522
|
}
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
// renders only when some listed file actually carries a URL — its wording
|
|
488
|
-
// keys on what kind of URL the storage backend mints.
|
|
489
|
-
if (downloadUrlKind !== undefined && files.some((f) => f.downloadUrl !== undefined)) {
|
|
490
|
-
section += "\n" + downloadUrlDisclosureLine(downloadUrlKind) + "\n";
|
|
523
|
+
if (lines.urlHandoff !== undefined) {
|
|
524
|
+
section += "\n" + lines.urlHandoff + "\n";
|
|
491
525
|
}
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
// which of these files it can already SEE inline in the user message versus
|
|
495
|
-
// which degraded to path-only — without them an agent silently ignores a
|
|
496
|
-
// photo the user believes it can see.
|
|
497
|
-
if (vision) {
|
|
498
|
-
const lines = visionDisclosureLines(vision.inlineFilenames, vision.notViewable);
|
|
499
|
-
if (lines.length > 0) {
|
|
500
|
-
section += "\n" + lines.join("\n") + "\n";
|
|
501
|
-
}
|
|
526
|
+
if (lines.vision.length > 0) {
|
|
527
|
+
section += "\n" + lines.vision.join("\n") + "\n";
|
|
502
528
|
}
|
|
503
529
|
|
|
504
530
|
return section;
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* What the transcript builders share: the tool-result serialization and the
|
|
3
|
+
* approval-provenance stamp that `V3StatusBuilder` (the root transcript) and
|
|
4
|
+
* `SubAgentTracker` (the sub-agent transcripts) both perform at the moment
|
|
5
|
+
* they classify a tool call, so the two never drift on either rule.
|
|
3
6
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
+
* Until S3 M2b this module also carried the v2 `StatusBuilder`'s share — the
|
|
8
|
+
* `UsageAccumulator` that summed `streamingUsage` (the turn runtime's
|
|
9
|
+
* accountant owns the field now, `harness/usage-accumulator.ts`) and the v2
|
|
10
|
+
* `on_tool_end` result extractor — both retired with the v2 stream (Q-S3-1).
|
|
7
11
|
*/
|
|
8
12
|
|
|
9
|
-
import { create } from "@bufbuild/protobuf";
|
|
10
|
-
import { StreamingUsageSummarySchema } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/usage_pb";
|
|
11
|
-
import type { StreamingUsageSummary } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/usage_pb";
|
|
12
13
|
import type { ToolCall } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/message_pb";
|
|
13
|
-
import { utcTimestamp } from "../../shared/status.js";
|
|
14
14
|
import {
|
|
15
15
|
POLICY_ENGINE_VERSION,
|
|
16
16
|
resolveApprovalProvenance,
|
|
@@ -19,62 +19,6 @@ import {
|
|
|
19
19
|
} from "../../shared/approval-policy.js";
|
|
20
20
|
import type { ToolApprovalCategory } from "../../shared/tool-kind.js";
|
|
21
21
|
|
|
22
|
-
// ── Usage Accumulator ──────────────────────────────────────────────
|
|
23
|
-
|
|
24
|
-
export interface UsageSnapshot {
|
|
25
|
-
inputTokens: bigint;
|
|
26
|
-
outputTokens: bigint;
|
|
27
|
-
cacheReadTokens: bigint;
|
|
28
|
-
cacheWriteTokens: bigint;
|
|
29
|
-
totalTokens: bigint;
|
|
30
|
-
turnCount: number;
|
|
31
|
-
observedAt: string;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export class UsageAccumulator {
|
|
35
|
-
private inputTokens = 0n;
|
|
36
|
-
private outputTokens = 0n;
|
|
37
|
-
private cacheReadTokens = 0n;
|
|
38
|
-
private cacheWriteTokens = 0n;
|
|
39
|
-
private turnCount = 0;
|
|
40
|
-
private lastObservedAt = "";
|
|
41
|
-
|
|
42
|
-
accumulate(meta: Record<string, unknown>): void {
|
|
43
|
-
this.inputTokens += toBigInt(meta.input_tokens);
|
|
44
|
-
this.outputTokens += toBigInt(meta.output_tokens);
|
|
45
|
-
this.cacheReadTokens += toBigInt(meta.cache_read_input_tokens);
|
|
46
|
-
this.cacheWriteTokens += toBigInt(meta.cache_creation_input_tokens);
|
|
47
|
-
this.turnCount++;
|
|
48
|
-
this.lastObservedAt = utcTimestamp();
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
snapshot(): UsageSnapshot {
|
|
52
|
-
return {
|
|
53
|
-
inputTokens: this.inputTokens,
|
|
54
|
-
outputTokens: this.outputTokens,
|
|
55
|
-
cacheReadTokens: this.cacheReadTokens,
|
|
56
|
-
cacheWriteTokens: this.cacheWriteTokens,
|
|
57
|
-
totalTokens: this.inputTokens + this.outputTokens +
|
|
58
|
-
this.cacheReadTokens + this.cacheWriteTokens,
|
|
59
|
-
turnCount: this.turnCount,
|
|
60
|
-
observedAt: this.lastObservedAt,
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/** Create a protobuf StreamingUsageSummary from the current snapshot. */
|
|
65
|
-
toProto(): StreamingUsageSummary {
|
|
66
|
-
return create(StreamingUsageSummarySchema, this.snapshot());
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// ── BigInt Coercion ────────────────────────────────────────────────
|
|
71
|
-
|
|
72
|
-
export function toBigInt(value: unknown): bigint {
|
|
73
|
-
if (typeof value === "bigint") return value;
|
|
74
|
-
if (typeof value === "number" && Number.isFinite(value)) return BigInt(Math.floor(value));
|
|
75
|
-
return 0n;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
22
|
// ── Tool Result Extraction ─────────────────────────────────────────
|
|
79
23
|
|
|
80
24
|
/**
|
|
@@ -99,20 +43,6 @@ function serializeToolContent(content: unknown): string | undefined {
|
|
|
99
43
|
return undefined;
|
|
100
44
|
}
|
|
101
45
|
|
|
102
|
-
export function extractToolResult(data: Record<string, unknown>): string {
|
|
103
|
-
const output = data.output;
|
|
104
|
-
if (typeof output === "string") return output;
|
|
105
|
-
if (typeof output === "object" && output !== null) {
|
|
106
|
-
const fromContent = serializeToolContent((output as Record<string, unknown>).content);
|
|
107
|
-
if (fromContent !== undefined) return fromContent;
|
|
108
|
-
}
|
|
109
|
-
try {
|
|
110
|
-
return JSON.stringify(output ?? data);
|
|
111
|
-
} catch {
|
|
112
|
-
return "[serialization error]";
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
46
|
/**
|
|
117
47
|
* Extract tool result from v3 tool-finished output.
|
|
118
48
|
* v3 output wraps LangChain ToolMessage in a constructor envelope:
|
|
@@ -140,10 +70,8 @@ export function extractToolResultV3(output: unknown): string {
|
|
|
140
70
|
// ── Authorization Provenance ───────────────────────────────────────
|
|
141
71
|
|
|
142
72
|
/**
|
|
143
|
-
* The policy inputs the
|
|
144
|
-
*
|
|
145
|
-
* structurally this — defined here so the shared stamper has no import cycle back
|
|
146
|
-
* into the builders.
|
|
73
|
+
* The policy inputs the builders need to decide whether a tool call waits for
|
|
74
|
+
* approval and to attribute its authorization provenance.
|
|
147
75
|
*/
|
|
148
76
|
export interface ApprovalProvenanceInputs {
|
|
149
77
|
readonly policies: ReadonlyMap<string, MergedToolPolicy>;
|
|
@@ -167,6 +95,15 @@ export interface ApprovalProvenanceInputs {
|
|
|
167
95
|
readonly unattended?: boolean;
|
|
168
96
|
}
|
|
169
97
|
|
|
98
|
+
/**
|
|
99
|
+
* The name the builder's API uses for the same shape (`setApprovalProvider`):
|
|
100
|
+
* the adapter hands the gate's policy state in under this name. One shape, two
|
|
101
|
+
* names on purpose — the provider is what a caller SUPPLIES, the inputs are
|
|
102
|
+
* what the stamper READS; until S3 M2b the v2 builder declared the provider as
|
|
103
|
+
* an empty `interface extends`, a second type for one shape.
|
|
104
|
+
*/
|
|
105
|
+
export type ApprovalPolicyProvider = ApprovalProvenanceInputs;
|
|
106
|
+
|
|
170
107
|
/** Shared empty set so a provider without leases allocates nothing per call. */
|
|
171
108
|
const NO_LEASED_CATEGORIES: ReadonlySet<ToolApprovalCategory> = new Set();
|
|
172
109
|
|
|
@@ -200,6 +137,6 @@ export function stampApprovalProvenance(
|
|
|
200
137
|
// ── Approval Args Sanitization ─────────────────────────────────────
|
|
201
138
|
|
|
202
139
|
// Relocated to src/shared/args-preview.ts so both harnesses share one home for
|
|
203
|
-
// arg sanitization. Re-exported here so the native importers (status-builder,
|
|
204
|
-
//
|
|
140
|
+
// arg sanitization. Re-exported here so the native importers (v3-status-builder,
|
|
141
|
+
// approval-file-change) keep their existing import path.
|
|
205
142
|
export { sanitizeArgsPreview } from "../../shared/args-preview.js";
|
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* The inline-publish trigger of the native stream: a v3 `tools` event carries
|
|
3
|
+
* the tool INPUT on `tool-started` and the OUTPUT on `tool-finished`, so the
|
|
4
|
+
* two are correlated by `tool_call_id` and a file-modifying tool's target
|
|
5
|
+
* path is published (`InlinePublisher`) once the call has finished — the
|
|
6
|
+
* artifact appears on the status mid-turn, not at the end.
|
|
3
7
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
8
|
+
* Until S3 M2b (Q-M1-1) the same correlation also fed the write-back
|
|
9
|
+
* coordinator's per-file commit (`onFileModified`); write-back is
|
|
10
|
+
* finalize-only now, the turn runtime's, so publishing is this trigger's one
|
|
11
|
+
* effect. The loop (`turn-stream.ts`) drains {@link pendingPublishPromises}
|
|
12
|
+
* in the settle.
|
|
7
13
|
*/
|
|
8
14
|
|
|
9
15
|
import type { V3ProtocolEvent } from "./v3-event-recorder.js";
|
|
10
16
|
import type { InlinePublisher } from "./inline-publisher.js";
|
|
11
|
-
import type { WriteBackCoordinator } from "../../shared/workspace/writeback-coordinator.js";
|
|
12
17
|
import { extractFilePath, isFileModifyingTool } from "../../shared/file-tools.js";
|
|
13
18
|
|
|
14
19
|
interface CachedToolInput {
|
|
@@ -19,21 +24,15 @@ interface CachedToolInput {
|
|
|
19
24
|
export class StreamingSideEffects {
|
|
20
25
|
private readonly inputCache = new Map<string, CachedToolInput>();
|
|
21
26
|
private readonly inlinePublisher: InlinePublisher | undefined;
|
|
22
|
-
private readonly writebackCoordinator: WriteBackCoordinator | undefined;
|
|
23
27
|
readonly pendingPublishPromises: Promise<void>[] = [];
|
|
24
|
-
readonly pendingWritebackPromises: Promise<void>[] = [];
|
|
25
28
|
|
|
26
|
-
constructor(opts: {
|
|
27
|
-
inlinePublisher?: InlinePublisher;
|
|
28
|
-
writebackCoordinator?: WriteBackCoordinator;
|
|
29
|
-
}) {
|
|
29
|
+
constructor(opts: { inlinePublisher?: InlinePublisher }) {
|
|
30
30
|
this.inlinePublisher = opts.inlinePublisher;
|
|
31
|
-
this.writebackCoordinator = opts.writebackCoordinator;
|
|
32
31
|
}
|
|
33
32
|
|
|
34
33
|
onProtocolEvent(event: V3ProtocolEvent): void {
|
|
35
34
|
if (event.method !== "tools") return;
|
|
36
|
-
if (!this.inlinePublisher
|
|
35
|
+
if (!this.inlinePublisher) return;
|
|
37
36
|
|
|
38
37
|
const data = event.params.data as Record<string, unknown> | undefined;
|
|
39
38
|
if (!data) return;
|
|
@@ -64,12 +63,7 @@ export class StreamingSideEffects {
|
|
|
64
63
|
const filePath = extractFilePath(cached.input);
|
|
65
64
|
if (!filePath) return;
|
|
66
65
|
|
|
67
|
-
|
|
68
|
-
this.pendingPublishPromises.push(this.inlinePublisher.publish(filePath));
|
|
69
|
-
}
|
|
70
|
-
if (this.writebackCoordinator) {
|
|
71
|
-
this.pendingWritebackPromises.push(this.writebackCoordinator.onFileModified(filePath));
|
|
72
|
-
}
|
|
66
|
+
this.pendingPublishPromises.push(this.inlinePublisher.publish(filePath));
|
|
73
67
|
}
|
|
74
68
|
}
|
|
75
69
|
}
|