@code-yeongyu/senpi-agent-core 2026.9.12-3 → 2026.9.12
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 +0 -4
- package/dist/harness/agent-harness.d.ts +384 -639
- package/dist/harness/agent-harness.d.ts.map +1 -1
- package/dist/harness/agent-harness.js +250 -5
- package/dist/harness/agent-harness.js.map +1 -1
- package/dist/harness/compaction/branch-summarization.d.ts +6 -12
- package/dist/harness/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/harness/compaction/branch-summarization.js +27 -33
- package/dist/harness/compaction/branch-summarization.js.map +1 -1
- package/dist/harness/compaction/compaction.d.ts +8 -30
- package/dist/harness/compaction/compaction.d.ts.map +1 -1
- package/dist/harness/compaction/compaction.js +64 -53
- package/dist/harness/compaction/compaction.js.map +1 -1
- package/dist/harness/env/nodejs.d.ts +28 -25
- package/dist/harness/env/nodejs.d.ts.map +1 -1
- package/dist/harness/env/nodejs.js +125 -368
- package/dist/harness/env/nodejs.js.map +1 -1
- package/dist/harness/events.d.ts +38 -20
- package/dist/harness/events.d.ts.map +1 -1
- package/dist/harness/events.js +55 -233
- package/dist/harness/events.js.map +1 -1
- package/dist/harness/messages.d.ts +2 -2
- package/dist/harness/messages.d.ts.map +1 -1
- package/dist/harness/messages.js.map +1 -1
- package/dist/harness/prompt-templates.d.ts +2 -3
- package/dist/harness/prompt-templates.d.ts.map +1 -1
- package/dist/harness/prompt-templates.js +17 -17
- package/dist/harness/prompt-templates.js.map +1 -1
- package/dist/harness/reducer.d.ts +100 -0
- package/dist/harness/reducer.d.ts.map +1 -0
- package/dist/harness/reducer.js +420 -0
- package/dist/harness/reducer.js.map +1 -0
- package/dist/harness/result.d.ts +0 -93
- package/dist/harness/result.d.ts.map +1 -1
- package/dist/harness/result.js +0 -39
- package/dist/harness/result.js.map +1 -1
- package/dist/harness/session/context.d.ts +19 -6
- package/dist/harness/session/context.d.ts.map +1 -1
- package/dist/harness/session/context.js +53 -31
- package/dist/harness/session/context.js.map +1 -1
- package/dist/harness/session/index.d.ts +5 -9
- package/dist/harness/session/index.d.ts.map +1 -1
- package/dist/harness/session/index.js +4 -7
- package/dist/harness/session/index.js.map +1 -1
- package/dist/harness/session/jsonl/codec.d.ts +8 -19
- package/dist/harness/session/jsonl/codec.d.ts.map +1 -1
- package/dist/harness/session/jsonl/codec.js +219 -34
- package/dist/harness/session/jsonl/codec.js.map +1 -1
- package/dist/harness/session/jsonl/errors.d.ts +9 -0
- package/dist/harness/session/jsonl/errors.d.ts.map +1 -0
- package/dist/harness/session/jsonl/errors.js +18 -0
- package/dist/harness/session/jsonl/errors.js.map +1 -0
- package/dist/harness/session/jsonl/repo.d.ts +24 -27
- package/dist/harness/session/jsonl/repo.d.ts.map +1 -1
- package/dist/harness/session/jsonl/repo.js +151 -276
- package/dist/harness/session/jsonl/repo.js.map +1 -1
- package/dist/harness/session/jsonl/storage.d.ts +41 -39
- package/dist/harness/session/jsonl/storage.d.ts.map +1 -1
- package/dist/harness/session/jsonl/storage.js +196 -175
- package/dist/harness/session/jsonl/storage.js.map +1 -1
- package/dist/harness/session/jsonl/types.d.ts +22 -23
- package/dist/harness/session/jsonl/types.d.ts.map +1 -1
- package/dist/harness/session/jsonl/types.js +1 -2
- package/dist/harness/session/jsonl/types.js.map +1 -1
- package/dist/harness/session/jsonl.d.ts +3 -0
- package/dist/harness/session/jsonl.d.ts.map +1 -0
- package/dist/harness/session/jsonl.js +2 -0
- package/dist/harness/session/jsonl.js.map +1 -0
- package/dist/harness/session/memory.d.ts +40 -44
- package/dist/harness/session/memory.d.ts.map +1 -1
- package/dist/harness/session/memory.js +115 -333
- package/dist/harness/session/memory.js.map +1 -1
- package/dist/harness/session/session.d.ts +51 -78
- package/dist/harness/session/session.d.ts.map +1 -1
- package/dist/harness/session/session.js +207 -327
- package/dist/harness/session/session.js.map +1 -1
- package/dist/harness/session/state.d.ts +65 -0
- package/dist/harness/session/state.d.ts.map +1 -0
- package/dist/harness/session/state.js +320 -0
- package/dist/harness/session/state.js.map +1 -0
- package/dist/harness/session/testing/conformance.d.ts +4 -0
- package/dist/harness/session/testing/conformance.d.ts.map +1 -0
- package/dist/harness/session/testing/conformance.js +762 -0
- package/dist/harness/session/testing/conformance.js.map +1 -0
- package/dist/harness/session/testing/index.d.ts +2 -9
- package/dist/harness/session/testing/index.d.ts.map +1 -1
- package/dist/harness/session/testing/index.js +1 -8
- package/dist/harness/session/testing/index.js.map +1 -1
- package/dist/harness/session/testing/types.d.ts +7 -5
- package/dist/harness/session/testing/types.d.ts.map +1 -1
- package/dist/harness/session/testing/types.js.map +1 -1
- package/dist/harness/session/types.d.ts +265 -425
- package/dist/harness/session/types.d.ts.map +1 -1
- package/dist/harness/session/types.js +7 -7
- package/dist/harness/session/types.js.map +1 -1
- package/dist/harness/skills.d.ts +2 -3
- package/dist/harness/skills.d.ts.map +1 -1
- package/dist/harness/skills.js +26 -29
- package/dist/harness/skills.js.map +1 -1
- package/dist/harness/telemetry.d.ts +43 -64
- package/dist/harness/telemetry.d.ts.map +1 -1
- package/dist/harness/telemetry.js +26 -45
- package/dist/harness/telemetry.js.map +1 -1
- package/dist/harness/tools/bash.d.ts +4 -4
- package/dist/harness/tools/bash.d.ts.map +1 -1
- package/dist/harness/tools/bash.js +93 -66
- package/dist/harness/tools/bash.js.map +1 -1
- package/dist/harness/tools/edit.d.ts.map +1 -1
- package/dist/harness/tools/edit.js +13 -17
- package/dist/harness/tools/edit.js.map +1 -1
- package/dist/harness/tools/file-mutation-queue.d.ts +1 -2
- package/dist/harness/tools/file-mutation-queue.d.ts.map +1 -1
- package/dist/harness/tools/file-mutation-queue.js +5 -5
- package/dist/harness/tools/file-mutation-queue.js.map +1 -1
- package/dist/harness/tools/path-utils.d.ts +2 -3
- package/dist/harness/tools/path-utils.d.ts.map +1 -1
- package/dist/harness/tools/path-utils.js +5 -5
- package/dist/harness/tools/path-utils.js.map +1 -1
- package/dist/harness/tools/read.d.ts +1 -2
- package/dist/harness/tools/read.d.ts.map +1 -1
- package/dist/harness/tools/read.js +6 -4
- package/dist/harness/tools/read.js.map +1 -1
- package/dist/harness/tools/write.d.ts.map +1 -1
- package/dist/harness/tools/write.js +8 -12
- package/dist/harness/tools/write.js.map +1 -1
- package/dist/harness/types.d.ts +45 -128
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js.map +1 -1
- package/dist/harness/utils/shell-output.d.ts +5 -19
- package/dist/harness/utils/shell-output.d.ts.map +1 -1
- package/dist/harness/utils/shell-output.js +192 -65
- package/dist/harness/utils/shell-output.js.map +1 -1
- package/dist/harness/utils/truncate.d.ts +0 -1
- package/dist/harness/utils/truncate.d.ts.map +1 -1
- package/dist/harness/utils/truncate.js +1 -1
- package/dist/harness/utils/truncate.js.map +1 -1
- package/dist/index.d.ts +1 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/search/index.d.ts +16 -24
- package/dist/search/index.d.ts.map +1 -1
- package/dist/search/index.js +1 -1
- package/dist/search/index.js.map +1 -1
- package/dist/search/scanning.d.ts +29 -0
- package/dist/search/scanning.d.ts.map +1 -0
- package/dist/search/scanning.js +103 -0
- package/dist/search/scanning.js.map +1 -0
- package/dist/types.d.ts +0 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +6 -27
- package/dist/harness/config.d.ts +0 -9
- package/dist/harness/config.d.ts.map +0 -1
- package/dist/harness/config.js +0 -35
- package/dist/harness/config.js.map +0 -1
- package/dist/harness/context.d.ts +0 -9
- package/dist/harness/context.d.ts.map +0 -1
- package/dist/harness/context.js +0 -13
- package/dist/harness/context.js.map +0 -1
- package/dist/harness/execution/assistant.d.ts +0 -42
- package/dist/harness/execution/assistant.d.ts.map +0 -1
- package/dist/harness/execution/assistant.js +0 -82
- package/dist/harness/execution/assistant.js.map +0 -1
- package/dist/harness/execution/effect-gate.d.ts +0 -22
- package/dist/harness/execution/effect-gate.d.ts.map +0 -1
- package/dist/harness/execution/effect-gate.js +0 -48
- package/dist/harness/execution/effect-gate.js.map +0 -1
- package/dist/harness/execution/tools.d.ts +0 -67
- package/dist/harness/execution/tools.d.ts.map +0 -1
- package/dist/harness/execution/tools.js +0 -121
- package/dist/harness/execution/tools.js.map +0 -1
- package/dist/harness/hooks.d.ts +0 -38
- package/dist/harness/hooks.d.ts.map +0 -1
- package/dist/harness/hooks.js +0 -404
- package/dist/harness/hooks.js.map +0 -1
- package/dist/harness/runtime/drive/boundary.d.ts +0 -28
- package/dist/harness/runtime/drive/boundary.d.ts.map +0 -1
- package/dist/harness/runtime/drive/boundary.js +0 -173
- package/dist/harness/runtime/drive/boundary.js.map +0 -1
- package/dist/harness/runtime/drive/checkpoint.d.ts +0 -8
- package/dist/harness/runtime/drive/checkpoint.d.ts.map +0 -1
- package/dist/harness/runtime/drive/checkpoint.js +0 -133
- package/dist/harness/runtime/drive/checkpoint.js.map +0 -1
- package/dist/harness/runtime/drive/deferred.d.ts +0 -15
- package/dist/harness/runtime/drive/deferred.d.ts.map +0 -1
- package/dist/harness/runtime/drive/deferred.js +0 -179
- package/dist/harness/runtime/drive/deferred.js.map +0 -1
- package/dist/harness/runtime/drive/generation.d.ts +0 -8
- package/dist/harness/runtime/drive/generation.d.ts.map +0 -1
- package/dist/harness/runtime/drive/generation.js +0 -205
- package/dist/harness/runtime/drive/generation.js.map +0 -1
- package/dist/harness/runtime/drive/reconcile.d.ts +0 -5
- package/dist/harness/runtime/drive/reconcile.d.ts.map +0 -1
- package/dist/harness/runtime/drive/reconcile.js +0 -140
- package/dist/harness/runtime/drive/reconcile.js.map +0 -1
- package/dist/harness/runtime/drive/recovery.d.ts +0 -8
- package/dist/harness/runtime/drive/recovery.d.ts.map +0 -1
- package/dist/harness/runtime/drive/recovery.js +0 -85
- package/dist/harness/runtime/drive/recovery.js.map +0 -1
- package/dist/harness/runtime/drive/response.d.ts +0 -23
- package/dist/harness/runtime/drive/response.d.ts.map +0 -1
- package/dist/harness/runtime/drive/response.js +0 -394
- package/dist/harness/runtime/drive/response.js.map +0 -1
- package/dist/harness/runtime/drive/retry.d.ts +0 -4
- package/dist/harness/runtime/drive/retry.d.ts.map +0 -1
- package/dist/harness/runtime/drive/retry.js +0 -34
- package/dist/harness/runtime/drive/retry.js.map +0 -1
- package/dist/harness/runtime/drive/structural.d.ts +0 -32
- package/dist/harness/runtime/drive/structural.d.ts.map +0 -1
- package/dist/harness/runtime/drive/structural.js +0 -929
- package/dist/harness/runtime/drive/structural.js.map +0 -1
- package/dist/harness/runtime/drive/terminal.d.ts +0 -7
- package/dist/harness/runtime/drive/terminal.d.ts.map +0 -1
- package/dist/harness/runtime/drive/terminal.js +0 -49
- package/dist/harness/runtime/drive/terminal.js.map +0 -1
- package/dist/harness/runtime/drive/tool-placement.d.ts +0 -14
- package/dist/harness/runtime/drive/tool-placement.d.ts.map +0 -1
- package/dist/harness/runtime/drive/tool-placement.js +0 -244
- package/dist/harness/runtime/drive/tool-placement.js.map +0 -1
- package/dist/harness/runtime/drive/tools.d.ts +0 -6
- package/dist/harness/runtime/drive/tools.d.ts.map +0 -1
- package/dist/harness/runtime/drive/tools.js +0 -449
- package/dist/harness/runtime/drive/tools.js.map +0 -1
- package/dist/harness/runtime/drive.d.ts +0 -6
- package/dist/harness/runtime/drive.d.ts.map +0 -1
- package/dist/harness/runtime/drive.js +0 -93
- package/dist/harness/runtime/drive.js.map +0 -1
- package/dist/harness/runtime/harness.d.ts +0 -59
- package/dist/harness/runtime/harness.d.ts.map +0 -1
- package/dist/harness/runtime/harness.js +0 -302
- package/dist/harness/runtime/harness.js.map +0 -1
- package/dist/harness/runtime/index.d.ts +0 -2
- package/dist/harness/runtime/index.d.ts.map +0 -1
- package/dist/harness/runtime/index.js +0 -2
- package/dist/harness/runtime/index.js.map +0 -1
- package/dist/harness/runtime/lane.d.ts +0 -118
- package/dist/harness/runtime/lane.d.ts.map +0 -1
- package/dist/harness/runtime/lane.js +0 -1559
- package/dist/harness/runtime/lane.js.map +0 -1
- package/dist/harness/runtime/progress.d.ts +0 -15
- package/dist/harness/runtime/progress.d.ts.map +0 -1
- package/dist/harness/runtime/progress.js +0 -66
- package/dist/harness/runtime/progress.js.map +0 -1
- package/dist/harness/runtime/reducer.d.ts +0 -5
- package/dist/harness/runtime/reducer.d.ts.map +0 -1
- package/dist/harness/runtime/reducer.js +0 -240
- package/dist/harness/runtime/reducer.js.map +0 -1
- package/dist/harness/runtime/restore.d.ts +0 -24
- package/dist/harness/runtime/restore.d.ts.map +0 -1
- package/dist/harness/runtime/restore.js +0 -117
- package/dist/harness/runtime/restore.js.map +0 -1
- package/dist/harness/runtime/transcript.d.ts +0 -21
- package/dist/harness/runtime/transcript.d.ts.map +0 -1
- package/dist/harness/runtime/transcript.js +0 -72
- package/dist/harness/runtime/transcript.js.map +0 -1
- package/dist/harness/runtime/types.d.ts +0 -105
- package/dist/harness/runtime/types.d.ts.map +0 -1
- package/dist/harness/runtime/types.js +0 -50
- package/dist/harness/runtime/types.js.map +0 -1
- package/dist/harness/session/commit.d.ts +0 -53
- package/dist/harness/session/commit.d.ts.map +0 -1
- package/dist/harness/session/commit.js +0 -57
- package/dist/harness/session/commit.js.map +0 -1
- package/dist/harness/session/fork-policy.d.ts +0 -21
- package/dist/harness/session/fork-policy.d.ts.map +0 -1
- package/dist/harness/session/fork-policy.js +0 -55
- package/dist/harness/session/fork-policy.js.map +0 -1
- package/dist/harness/session/fork.d.ts +0 -16
- package/dist/harness/session/fork.d.ts.map +0 -1
- package/dist/harness/session/fork.js +0 -79
- package/dist/harness/session/fork.js.map +0 -1
- package/dist/harness/session/in-memory-storage-state.d.ts +0 -39
- package/dist/harness/session/in-memory-storage-state.d.ts.map +0 -1
- package/dist/harness/session/in-memory-storage-state.js +0 -269
- package/dist/harness/session/in-memory-storage-state.js.map +0 -1
- package/dist/harness/session/jsonl/fork.d.ts +0 -38
- package/dist/harness/session/jsonl/fork.d.ts.map +0 -1
- package/dist/harness/session/jsonl/fork.js +0 -266
- package/dist/harness/session/jsonl/fork.js.map +0 -1
- package/dist/harness/session/jsonl/index.d.ts +0 -4
- package/dist/harness/session/jsonl/index.d.ts.map +0 -1
- package/dist/harness/session/jsonl/index.js +0 -4
- package/dist/harness/session/jsonl/index.js.map +0 -1
- package/dist/harness/session/jsonl/io.d.ts +0 -14
- package/dist/harness/session/jsonl/io.d.ts.map +0 -1
- package/dist/harness/session/jsonl/io.js +0 -86
- package/dist/harness/session/jsonl/io.js.map +0 -1
- package/dist/harness/session/jsonl/legacy-v3.d.ts +0 -44
- package/dist/harness/session/jsonl/legacy-v3.d.ts.map +0 -1
- package/dist/harness/session/jsonl/legacy-v3.js +0 -454
- package/dist/harness/session/jsonl/legacy-v3.js.map +0 -1
- package/dist/harness/session/mutation-line.d.ts +0 -8
- package/dist/harness/session/mutation-line.d.ts.map +0 -1
- package/dist/harness/session/mutation-line.js +0 -22
- package/dist/harness/session/mutation-line.js.map +0 -1
- package/dist/harness/session/testing/benchmark/datasets.d.ts +0 -12
- package/dist/harness/session/testing/benchmark/datasets.d.ts.map +0 -1
- package/dist/harness/session/testing/benchmark/datasets.js +0 -24
- package/dist/harness/session/testing/benchmark/datasets.js.map +0 -1
- package/dist/harness/session/testing/benchmark/session-repo.d.ts +0 -42
- package/dist/harness/session/testing/benchmark/session-repo.d.ts.map +0 -1
- package/dist/harness/session/testing/benchmark/session-repo.js +0 -127
- package/dist/harness/session/testing/benchmark/session-repo.js.map +0 -1
- package/dist/harness/session/testing/benchmark/storage.d.ts +0 -25
- package/dist/harness/session/testing/benchmark/storage.d.ts.map +0 -1
- package/dist/harness/session/testing/benchmark/storage.js +0 -114
- package/dist/harness/session/testing/benchmark/storage.js.map +0 -1
- package/dist/harness/session/testing/conformance/session-repo.d.ts +0 -23
- package/dist/harness/session/testing/conformance/session-repo.d.ts.map +0 -1
- package/dist/harness/session/testing/conformance/session-repo.js +0 -809
- package/dist/harness/session/testing/conformance/session-repo.js.map +0 -1
- package/dist/harness/session/testing/conformance/storage.d.ts +0 -4
- package/dist/harness/session/testing/conformance/storage.d.ts.map +0 -1
- package/dist/harness/session/testing/conformance/storage.js +0 -600
- package/dist/harness/session/testing/conformance/storage.js.map +0 -1
- package/dist/harness/session/testing/gating-storage.d.ts +0 -26
- package/dist/harness/session/testing/gating-storage.d.ts.map +0 -1
- package/dist/harness/session/testing/gating-storage.js +0 -103
- package/dist/harness/session/testing/gating-storage.js.map +0 -1
- package/dist/harness/session/testing/instrumented-storage.d.ts +0 -11
- package/dist/harness/session/testing/instrumented-storage.d.ts.map +0 -1
- package/dist/harness/session/testing/instrumented-storage.js +0 -19
- package/dist/harness/session/testing/instrumented-storage.js.map +0 -1
- package/dist/harness/session/testing/storage-decorator.d.ts +0 -20
- package/dist/harness/session/testing/storage-decorator.d.ts.map +0 -1
- package/dist/harness/session/testing/storage-decorator.js +0 -40
- package/dist/harness/session/testing/storage-decorator.js.map +0 -1
- package/dist/harness/session/values.d.ts +0 -95
- package/dist/harness/session/values.d.ts.map +0 -1
- package/dist/harness/session/values.js +0 -81
- package/dist/harness/session/values.js.map +0 -1
- package/dist/harness/utils/adaptive-publisher.d.ts +0 -24
- package/dist/harness/utils/adaptive-publisher.d.ts.map +0 -1
- package/dist/harness/utils/adaptive-publisher.js +0 -79
- package/dist/harness/utils/adaptive-publisher.js.map +0 -1
- package/dist/harness/utils/output-capture.d.ts +0 -31
- package/dist/harness/utils/output-capture.d.ts.map +0 -1
- package/dist/harness/utils/output-capture.js +0 -217
- package/dist/harness/utils/output-capture.js.map +0 -1
- package/dist/harness/utils/usage.d.ts +0 -4
- package/dist/harness/utils/usage.d.ts.map +0 -1
- package/dist/harness/utils/usage.js +0 -33
- package/dist/harness/utils/usage.js.map +0 -1
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { Context, ContextKey } from "@earendil-works/chord";
|
|
2
|
-
import { awaitWithContext, BACKGROUND_CONTEXT, createContextKey, TODO_CONTEXT, withAbortSignal, withCancel, withContextValue, withoutAbortSignal } from "@earendil-works/chord/context";
|
|
3
|
-
import { type TelemetryContext } from "@earendil-works/pi-telemetry";
|
|
4
|
-
export { awaitWithContext, BACKGROUND_CONTEXT, type Context, type ContextKey, createContextKey, TODO_CONTEXT, withAbortSignal, withCancel, withContextValue, withoutAbortSignal, };
|
|
5
|
-
/** Return the telemetry parent attached to a context, or the shared no-op parent. */
|
|
6
|
-
export declare function getTelemetryContext(context: Context): TelemetryContext;
|
|
7
|
-
/** Derive a context whose telemetry children use the supplied parent or active span. */
|
|
8
|
-
export declare function withTelemetryContext(telemetryContext: TelemetryContext, context: Context): Context;
|
|
9
|
-
//# sourceMappingURL=context.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/harness/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EACN,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAE7F,OAAO,EACN,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,kBAAkB,GAClB,CAAC;AAIF,qFAAqF;AACrF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,CAEtE;AAED,wFAAwF;AACxF,wBAAgB,oBAAoB,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAElG"}
|
package/dist/harness/context.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { awaitWithContext, BACKGROUND_CONTEXT, createContextKey, TODO_CONTEXT, withAbortSignal, withCancel, withContextValue, withoutAbortSignal, } from "@earendil-works/chord/context";
|
|
2
|
-
import { NOOP_TELEMETRY_CONTEXT } from "@earendil-works/pi-telemetry";
|
|
3
|
-
export { awaitWithContext, BACKGROUND_CONTEXT, createContextKey, TODO_CONTEXT, withAbortSignal, withCancel, withContextValue, withoutAbortSignal, };
|
|
4
|
-
const TELEMETRY_CONTEXT_KEY = createContextKey("pi.telemetryContext");
|
|
5
|
-
/** Return the telemetry parent attached to a context, or the shared no-op parent. */
|
|
6
|
-
export function getTelemetryContext(context) {
|
|
7
|
-
return context.value(TELEMETRY_CONTEXT_KEY) ?? NOOP_TELEMETRY_CONTEXT;
|
|
8
|
-
}
|
|
9
|
-
/** Derive a context whose telemetry children use the supplied parent or active span. */
|
|
10
|
-
export function withTelemetryContext(telemetryContext, context) {
|
|
11
|
-
return withContextValue(TELEMETRY_CONTEXT_KEY, telemetryContext, context);
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=context.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/harness/context.ts"],"names":[],"mappings":"AACA,OAAO,EACN,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,kBAAkB,GAClB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,sBAAsB,EAAyB,MAAM,8BAA8B,CAAC;AAE7F,OAAO,EACN,gBAAgB,EAChB,kBAAkB,EAGlB,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,kBAAkB,GAClB,CAAC;AAEF,MAAM,qBAAqB,GAAG,gBAAgB,CAAmB,qBAAqB,CAAC,CAAC;AAExF,qFAAqF;AACrF,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IACnD,OAAO,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,IAAI,sBAAsB,CAAC;AACvE,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,oBAAoB,CAAC,gBAAkC,EAAE,OAAgB;IACxF,OAAO,gBAAgB,CAAC,qBAAqB,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;AAC3E,CAAC","sourcesContent":["import type { Context, ContextKey } from \"@earendil-works/chord\";\nimport {\n\tawaitWithContext,\n\tBACKGROUND_CONTEXT,\n\tcreateContextKey,\n\tTODO_CONTEXT,\n\twithAbortSignal,\n\twithCancel,\n\twithContextValue,\n\twithoutAbortSignal,\n} from \"@earendil-works/chord/context\";\nimport { NOOP_TELEMETRY_CONTEXT, type TelemetryContext } from \"@earendil-works/pi-telemetry\";\n\nexport {\n\tawaitWithContext,\n\tBACKGROUND_CONTEXT,\n\ttype Context,\n\ttype ContextKey,\n\tcreateContextKey,\n\tTODO_CONTEXT,\n\twithAbortSignal,\n\twithCancel,\n\twithContextValue,\n\twithoutAbortSignal,\n};\n\nconst TELEMETRY_CONTEXT_KEY = createContextKey<TelemetryContext>(\"pi.telemetryContext\");\n\n/** Return the telemetry parent attached to a context, or the shared no-op parent. */\nexport function getTelemetryContext(context: Context): TelemetryContext {\n\treturn context.value(TELEMETRY_CONTEXT_KEY) ?? NOOP_TELEMETRY_CONTEXT;\n}\n\n/** Derive a context whose telemetry children use the supplied parent or active span. */\nexport function withTelemetryContext(telemetryContext: TelemetryContext, context: Context): Context {\n\treturn withContextValue(TELEMETRY_CONTEXT_KEY, telemetryContext, context);\n}\n"]}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import type { Context as AiContext, Api, AssistantMessage, AssistantMessageEvent, AssistantMessageEventStream, Message, Model, SimpleStreamOptions, Tool } from "@earendil-works/pi-ai";
|
|
2
|
-
import type { AgentMessage, ThinkingLevel } from "../../types.ts";
|
|
3
|
-
import { type Context } from "../context.ts";
|
|
4
|
-
import type { SettledAssistantMessage } from "../session/types.ts";
|
|
5
|
-
import type { AgentHarnessStreamOptions } from "../types.ts";
|
|
6
|
-
/** HTTP response metadata captured before the provider response body is consumed. */
|
|
7
|
-
export interface AssistantResponseMetadata {
|
|
8
|
-
status?: number;
|
|
9
|
-
headers?: Record<string, string>;
|
|
10
|
-
}
|
|
11
|
-
/** Process-local lifecycle observer for one assistant stream. */
|
|
12
|
-
export interface AssistantStreamObserver {
|
|
13
|
-
start(message: AssistantMessage, event: Extract<AssistantMessageEvent, {
|
|
14
|
-
type: "start";
|
|
15
|
-
}>, context: Context): void | Promise<void>;
|
|
16
|
-
update(message: AssistantMessage, event: AssistantMessageEvent, context: Context): void | Promise<void>;
|
|
17
|
-
end(message: SettledAssistantMessage, context: Context): void | Promise<void>;
|
|
18
|
-
}
|
|
19
|
-
/** Executable inputs for one already-approved assistant provider request. */
|
|
20
|
-
export interface HarnessAssistantStreamConfig {
|
|
21
|
-
model: Model<Api>;
|
|
22
|
-
systemPrompt: string;
|
|
23
|
-
tools?: Tool[];
|
|
24
|
-
thinkingLevel: ThinkingLevel;
|
|
25
|
-
streamOptions: AgentHarnessStreamOptions;
|
|
26
|
-
transformContext?: (requestContext: {
|
|
27
|
-
messages: AgentMessage[];
|
|
28
|
-
systemPrompt: string;
|
|
29
|
-
}, context: Context) => Promise<{
|
|
30
|
-
messages: AgentMessage[];
|
|
31
|
-
systemPrompt: string;
|
|
32
|
-
}>;
|
|
33
|
-
toProviderMessages: (messages: AgentMessage[], context: Context) => Message[] | Promise<Message[]>;
|
|
34
|
-
beforePayload?: (payload: unknown, model: Model<Api>, context: Context) => unknown | undefined | Promise<unknown | undefined>;
|
|
35
|
-
afterResponse?: (message: SettledAssistantMessage, metadata: AssistantResponseMetadata, context: Context) => Promise<SettledAssistantMessage>;
|
|
36
|
-
request(aiContext: AiContext, options: SimpleStreamOptions, context: Context): AssistantMessageEventStream | Promise<AssistantMessageEventStream>;
|
|
37
|
-
observer: AssistantStreamObserver;
|
|
38
|
-
}
|
|
39
|
-
export declare function consumeAssistantStream(stream: AssistantMessageEventStream, observer: AssistantStreamObserver, afterResponse: ((message: SettledAssistantMessage, context: Context) => Promise<SettledAssistantMessage>) | undefined, context: Context): Promise<SettledAssistantMessage>;
|
|
40
|
-
/** Stream one assistant response without mutating the caller's message list. */
|
|
41
|
-
export declare function streamHarnessAssistant(messages: AgentMessage[], config: HarnessAssistantStreamConfig, context: Context): Promise<SettledAssistantMessage>;
|
|
42
|
-
//# sourceMappingURL=assistant.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"assistant.d.ts","sourceRoot":"","sources":["../../../src/harness/execution/assistant.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { getTelemetryContext } from "../context.js";
|
|
2
|
-
import { AbortRequested } from "./effect-gate.js";
|
|
3
|
-
function createRequestOptions(config, captureMetadata, context) {
|
|
4
|
-
const options = config.streamOptions;
|
|
5
|
-
return {
|
|
6
|
-
transport: options.transport,
|
|
7
|
-
timeoutMs: options.timeoutMs,
|
|
8
|
-
maxRetries: options.maxRetries,
|
|
9
|
-
maxRetryDelayMs: options.maxRetryDelayMs,
|
|
10
|
-
headers: options.headers,
|
|
11
|
-
metadata: options.metadata,
|
|
12
|
-
cacheRetention: options.cacheRetention,
|
|
13
|
-
deferred: options.deferred,
|
|
14
|
-
...(config.thinkingLevel === "off" ? {} : { reasoning: config.thinkingLevel }),
|
|
15
|
-
signal: context.abortSignal,
|
|
16
|
-
telemetryContext: getTelemetryContext(context),
|
|
17
|
-
onPayload: config.beforePayload === undefined
|
|
18
|
-
? undefined
|
|
19
|
-
: (payload, model) => config.beforePayload?.(payload, model, context),
|
|
20
|
-
onResponse: (response) => {
|
|
21
|
-
captureMetadata({ status: response.status, headers: response.headers });
|
|
22
|
-
},
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
function isUpdateEvent(event) {
|
|
26
|
-
return event.type !== "start" && event.type !== "done" && event.type !== "error";
|
|
27
|
-
}
|
|
28
|
-
export async function consumeAssistantStream(stream, observer, afterResponse, context) {
|
|
29
|
-
let started = false;
|
|
30
|
-
for await (const event of stream) {
|
|
31
|
-
if (event.type === "start") {
|
|
32
|
-
if (started)
|
|
33
|
-
throw new Error("Assistant message stream emitted more than one start event");
|
|
34
|
-
started = true;
|
|
35
|
-
await observer.start({ ...event.partial }, event, context);
|
|
36
|
-
}
|
|
37
|
-
else if (isUpdateEvent(event)) {
|
|
38
|
-
if (!started)
|
|
39
|
-
throw new Error(`Assistant message stream emitted ${event.type} before start`);
|
|
40
|
-
await observer.update({ ...event.partial }, event, context);
|
|
41
|
-
}
|
|
42
|
-
else if (event.type === "done" && !started) {
|
|
43
|
-
throw new Error("Assistant message stream emitted done before start");
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
const settled = (await stream.result());
|
|
47
|
-
let finalMessage = settled;
|
|
48
|
-
if (afterResponse !== undefined) {
|
|
49
|
-
try {
|
|
50
|
-
finalMessage = await afterResponse(settled, context);
|
|
51
|
-
}
|
|
52
|
-
catch (error) {
|
|
53
|
-
if (!(error instanceof AbortRequested))
|
|
54
|
-
throw error;
|
|
55
|
-
await error.cancellation;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
await observer.end(finalMessage, context);
|
|
59
|
-
return finalMessage;
|
|
60
|
-
}
|
|
61
|
-
/** Stream one assistant response without mutating the caller's message list. */
|
|
62
|
-
export async function streamHarnessAssistant(messages, config, context) {
|
|
63
|
-
let requestContext = { messages: messages.slice(), systemPrompt: config.systemPrompt };
|
|
64
|
-
if (config.transformContext) {
|
|
65
|
-
requestContext = await config.transformContext(requestContext, context);
|
|
66
|
-
}
|
|
67
|
-
const providerMessages = await config.toProviderMessages(requestContext.messages, context);
|
|
68
|
-
const aiContext = {
|
|
69
|
-
systemPrompt: requestContext.systemPrompt,
|
|
70
|
-
messages: providerMessages,
|
|
71
|
-
tools: config.tools,
|
|
72
|
-
};
|
|
73
|
-
let metadata = {};
|
|
74
|
-
const stream = await config.request(aiContext, createRequestOptions(config, (nextMetadata) => {
|
|
75
|
-
metadata = nextMetadata;
|
|
76
|
-
}, context), context);
|
|
77
|
-
const afterResponse = config.afterResponse;
|
|
78
|
-
return consumeAssistantStream(stream, config.observer, afterResponse === undefined
|
|
79
|
-
? undefined
|
|
80
|
-
: (message, afterContext) => afterResponse(message, metadata, afterContext), context);
|
|
81
|
-
}
|
|
82
|
-
//# sourceMappingURL=assistant.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"assistant.js","sourceRoot":"","sources":["../../../src/harness/execution/assistant.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tContext as AiContext,\n\tApi,\n\tAssistantMessage,\n\tAssistantMessageEvent,\n\tAssistantMessageEventStream,\n\tMessage,\n\tModel,\n\tSimpleStreamOptions,\n\tTool,\n} from \"@earendil-works/pi-ai\";\nimport type { AgentMessage, ThinkingLevel } from \"../../types.ts\";\nimport { type Context, getTelemetryContext } from \"../context.ts\";\nimport type { SettledAssistantMessage } from \"../session/types.ts\";\nimport type { AgentHarnessStreamOptions } from \"../types.ts\";\nimport { AbortRequested } from \"./effect-gate.ts\";\n\n/** HTTP response metadata captured before the provider response body is consumed. */\nexport interface AssistantResponseMetadata {\n\tstatus?: number;\n\theaders?: Record<string, string>;\n}\n\n/** Process-local lifecycle observer for one assistant stream. */\nexport interface AssistantStreamObserver {\n\tstart(\n\t\tmessage: AssistantMessage,\n\t\tevent: Extract<AssistantMessageEvent, { type: \"start\" }>,\n\t\tcontext: Context,\n\t): void | Promise<void>;\n\tupdate(message: AssistantMessage, event: AssistantMessageEvent, context: Context): void | Promise<void>;\n\tend(message: SettledAssistantMessage, context: Context): void | Promise<void>;\n}\n\n/** Executable inputs for one already-approved assistant provider request. */\nexport interface HarnessAssistantStreamConfig {\n\tmodel: Model<Api>;\n\tsystemPrompt: string;\n\ttools?: Tool[];\n\tthinkingLevel: ThinkingLevel;\n\tstreamOptions: AgentHarnessStreamOptions;\n\ttransformContext?: (\n\t\trequestContext: { messages: AgentMessage[]; systemPrompt: string },\n\t\tcontext: Context,\n\t) => Promise<{ messages: AgentMessage[]; systemPrompt: string }>;\n\ttoProviderMessages: (messages: AgentMessage[], context: Context) => Message[] | Promise<Message[]>;\n\tbeforePayload?: (\n\t\tpayload: unknown,\n\t\tmodel: Model<Api>,\n\t\tcontext: Context,\n\t) => unknown | undefined | Promise<unknown | undefined>;\n\tafterResponse?: (\n\t\tmessage: SettledAssistantMessage,\n\t\tmetadata: AssistantResponseMetadata,\n\t\tcontext: Context,\n\t) => Promise<SettledAssistantMessage>;\n\trequest(\n\t\taiContext: AiContext,\n\t\toptions: SimpleStreamOptions,\n\t\tcontext: Context,\n\t): AssistantMessageEventStream | Promise<AssistantMessageEventStream>;\n\tobserver: AssistantStreamObserver;\n}\n\nfunction createRequestOptions(\n\tconfig: HarnessAssistantStreamConfig,\n\tcaptureMetadata: (metadata: AssistantResponseMetadata) => void,\n\tcontext: Context,\n): SimpleStreamOptions {\n\tconst options = config.streamOptions;\n\treturn {\n\t\ttransport: options.transport,\n\t\ttimeoutMs: options.timeoutMs,\n\t\tmaxRetries: options.maxRetries,\n\t\tmaxRetryDelayMs: options.maxRetryDelayMs,\n\t\theaders: options.headers,\n\t\tmetadata: options.metadata,\n\t\tcacheRetention: options.cacheRetention,\n\t\tdeferred: options.deferred,\n\t\t...(config.thinkingLevel === \"off\" ? {} : { reasoning: config.thinkingLevel }),\n\t\tsignal: context.abortSignal,\n\t\ttelemetryContext: getTelemetryContext(context),\n\t\tonPayload:\n\t\t\tconfig.beforePayload === undefined\n\t\t\t\t? undefined\n\t\t\t\t: (payload, model) => config.beforePayload?.(payload, model, context),\n\t\tonResponse: (response) => {\n\t\t\tcaptureMetadata({ status: response.status, headers: response.headers });\n\t\t},\n\t};\n}\n\nfunction isUpdateEvent(\n\tevent: AssistantMessageEvent,\n): event is Exclude<AssistantMessageEvent, { type: \"start\" | \"done\" | \"error\" }> {\n\treturn event.type !== \"start\" && event.type !== \"done\" && event.type !== \"error\";\n}\n\nexport async function consumeAssistantStream(\n\tstream: AssistantMessageEventStream,\n\tobserver: AssistantStreamObserver,\n\tafterResponse:\n\t\t| ((message: SettledAssistantMessage, context: Context) => Promise<SettledAssistantMessage>)\n\t\t| undefined,\n\tcontext: Context,\n): Promise<SettledAssistantMessage> {\n\tlet started = false;\n\tfor await (const event of stream) {\n\t\tif (event.type === \"start\") {\n\t\t\tif (started) throw new Error(\"Assistant message stream emitted more than one start event\");\n\t\t\tstarted = true;\n\t\t\tawait observer.start({ ...event.partial }, event, context);\n\t\t} else if (isUpdateEvent(event)) {\n\t\t\tif (!started) throw new Error(`Assistant message stream emitted ${event.type} before start`);\n\t\t\tawait observer.update({ ...event.partial }, event, context);\n\t\t} else if (event.type === \"done\" && !started) {\n\t\t\tthrow new Error(\"Assistant message stream emitted done before start\");\n\t\t}\n\t}\n\n\tconst settled = (await stream.result()) as SettledAssistantMessage;\n\tlet finalMessage = settled;\n\tif (afterResponse !== undefined) {\n\t\ttry {\n\t\t\tfinalMessage = await afterResponse(settled, context);\n\t\t} catch (error) {\n\t\t\tif (!(error instanceof AbortRequested)) throw error;\n\t\t\tawait error.cancellation;\n\t\t}\n\t}\n\tawait observer.end(finalMessage, context);\n\treturn finalMessage;\n}\n\n/** Stream one assistant response without mutating the caller's message list. */\nexport async function streamHarnessAssistant(\n\tmessages: AgentMessage[],\n\tconfig: HarnessAssistantStreamConfig,\n\tcontext: Context,\n): Promise<SettledAssistantMessage> {\n\tlet requestContext = { messages: messages.slice(), systemPrompt: config.systemPrompt };\n\tif (config.transformContext) {\n\t\trequestContext = await config.transformContext(requestContext, context);\n\t}\n\n\tconst providerMessages = await config.toProviderMessages(requestContext.messages, context);\n\tconst aiContext: AiContext = {\n\t\tsystemPrompt: requestContext.systemPrompt,\n\t\tmessages: providerMessages,\n\t\ttools: config.tools,\n\t};\n\n\tlet metadata: AssistantResponseMetadata = {};\n\tconst stream = await config.request(\n\t\taiContext,\n\t\tcreateRequestOptions(\n\t\t\tconfig,\n\t\t\t(nextMetadata) => {\n\t\t\t\tmetadata = nextMetadata;\n\t\t\t},\n\t\t\tcontext,\n\t\t),\n\t\tcontext,\n\t);\n\n\tconst afterResponse = config.afterResponse;\n\treturn consumeAssistantStream(\n\t\tstream,\n\t\tconfig.observer,\n\t\tafterResponse === undefined\n\t\t\t? undefined\n\t\t\t: (message, afterContext) => afterResponse(message, metadata, afterContext),\n\t\tcontext,\n\t);\n}\n"]}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/** Expected internal control flow when cancellation wins effect admission. */
|
|
2
|
-
export declare class AbortRequested extends Error {
|
|
3
|
-
readonly cancellation: Promise<void>;
|
|
4
|
-
constructor(cancellation: Promise<void>);
|
|
5
|
-
}
|
|
6
|
-
/** Procedure-facing synchronous admission capability for one drive pass. */
|
|
7
|
-
export interface Gate {
|
|
8
|
-
readonly signal: AbortSignal;
|
|
9
|
-
admit<T>(invoke: () => T): T;
|
|
10
|
-
}
|
|
11
|
-
/** Owner-facing lifecycle controls for one drive pass. */
|
|
12
|
-
export interface GateControl {
|
|
13
|
-
beginAbort(cancellation: Promise<void>): void;
|
|
14
|
-
signalAbort(): void;
|
|
15
|
-
close(error: Error): void;
|
|
16
|
-
}
|
|
17
|
-
/** Create separate procedure-facing and owner-facing views of one effect gate. */
|
|
18
|
-
export declare function createGate(): {
|
|
19
|
-
gate: Gate;
|
|
20
|
-
control: GateControl;
|
|
21
|
-
};
|
|
22
|
-
//# sourceMappingURL=effect-gate.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"effect-gate.d.ts","sourceRoot":"","sources":["../../../src/harness/execution/effect-gate.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,qBAAa,cAAe,SAAQ,KAAK;IACxC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAErC,YAAY,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,EAItC;CACD;AAED,4EAA4E;AAC5E,MAAM,WAAW,IAAI;IACpB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;CAC7B;AAED,0DAA0D;AAC1D,MAAM,WAAW,WAAW;IAC3B,UAAU,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC9C,WAAW,IAAI,IAAI,CAAC;IACpB,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CAC1B;AAOD,kFAAkF;AAClF,wBAAgB,UAAU,IAAI;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,CAiCjE"}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/** Expected internal control flow when cancellation wins effect admission. */
|
|
2
|
-
export class AbortRequested extends Error {
|
|
3
|
-
constructor(cancellation) {
|
|
4
|
-
super("Abort requested");
|
|
5
|
-
this.name = "AbortRequested";
|
|
6
|
-
this.cancellation = cancellation;
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
/** Create separate procedure-facing and owner-facing views of one effect gate. */
|
|
10
|
-
export function createGate() {
|
|
11
|
-
let state = { status: "open" };
|
|
12
|
-
const controller = new AbortController();
|
|
13
|
-
const check = () => {
|
|
14
|
-
if (state.status === "aborting")
|
|
15
|
-
throw new AbortRequested(state.cancellation);
|
|
16
|
-
if (state.status === "closed")
|
|
17
|
-
throw state.error;
|
|
18
|
-
};
|
|
19
|
-
return {
|
|
20
|
-
gate: {
|
|
21
|
-
admit(invoke) {
|
|
22
|
-
check();
|
|
23
|
-
return invoke();
|
|
24
|
-
},
|
|
25
|
-
signal: controller.signal,
|
|
26
|
-
},
|
|
27
|
-
control: {
|
|
28
|
-
beginAbort(cancellation) {
|
|
29
|
-
if (state.status !== "open")
|
|
30
|
-
return;
|
|
31
|
-
state = { status: "aborting", cancellation };
|
|
32
|
-
},
|
|
33
|
-
signalAbort() {
|
|
34
|
-
if (state.status !== "aborting" || controller.signal.aborted)
|
|
35
|
-
return;
|
|
36
|
-
controller.abort(new AbortRequested(state.cancellation));
|
|
37
|
-
},
|
|
38
|
-
close(error) {
|
|
39
|
-
if (state.status === "closed")
|
|
40
|
-
return;
|
|
41
|
-
state = { status: "closed", error };
|
|
42
|
-
if (!controller.signal.aborted)
|
|
43
|
-
controller.abort(error);
|
|
44
|
-
},
|
|
45
|
-
},
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
//# sourceMappingURL=effect-gate.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"effect-gate.js","sourceRoot":"","sources":["../../../src/harness/execution/effect-gate.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,MAAM,OAAO,cAAe,SAAQ,KAAK;IAGxC,YAAY,YAA2B;QACtC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IAClC,CAAC;CACD;AAoBD,kFAAkF;AAClF,MAAM,UAAU,UAAU;IACzB,IAAI,KAAK,GAAc,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IAEzC,MAAM,KAAK,GAAG,GAAS,EAAE;QACxB,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU;YAAE,MAAM,IAAI,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC9E,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;YAAE,MAAM,KAAK,CAAC,KAAK,CAAC;IAClD,CAAC,CAAC;IAEF,OAAO;QACN,IAAI,EAAE;YACL,KAAK,CAAI,MAAe;gBACvB,KAAK,EAAE,CAAC;gBACR,OAAO,MAAM,EAAE,CAAC;YACjB,CAAC;YACD,MAAM,EAAE,UAAU,CAAC,MAAM;SACzB;QACD,OAAO,EAAE;YACR,UAAU,CAAC,YAAY;gBACtB,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;oBAAE,OAAO;gBACpC,KAAK,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;YAC9C,CAAC;YACD,WAAW;gBACV,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAO;gBACrE,UAAU,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;YAC1D,CAAC;YACD,KAAK,CAAC,KAAK;gBACV,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;oBAAE,OAAO;gBACtC,KAAK,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;gBACpC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO;oBAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACzD,CAAC;SACD;KACD,CAAC;AACH,CAAC","sourcesContent":["/** Expected internal control flow when cancellation wins effect admission. */\nexport class AbortRequested extends Error {\n\treadonly cancellation: Promise<void>;\n\n\tconstructor(cancellation: Promise<void>) {\n\t\tsuper(\"Abort requested\");\n\t\tthis.name = \"AbortRequested\";\n\t\tthis.cancellation = cancellation;\n\t}\n}\n\n/** Procedure-facing synchronous admission capability for one drive pass. */\nexport interface Gate {\n\treadonly signal: AbortSignal;\n\tadmit<T>(invoke: () => T): T;\n}\n\n/** Owner-facing lifecycle controls for one drive pass. */\nexport interface GateControl {\n\tbeginAbort(cancellation: Promise<void>): void;\n\tsignalAbort(): void;\n\tclose(error: Error): void;\n}\n\ntype GateState =\n\t| { status: \"open\" }\n\t| { status: \"aborting\"; cancellation: Promise<void> }\n\t| { status: \"closed\"; error: Error };\n\n/** Create separate procedure-facing and owner-facing views of one effect gate. */\nexport function createGate(): { gate: Gate; control: GateControl } {\n\tlet state: GateState = { status: \"open\" };\n\tconst controller = new AbortController();\n\n\tconst check = (): void => {\n\t\tif (state.status === \"aborting\") throw new AbortRequested(state.cancellation);\n\t\tif (state.status === \"closed\") throw state.error;\n\t};\n\n\treturn {\n\t\tgate: {\n\t\t\tadmit<T>(invoke: () => T): T {\n\t\t\t\tcheck();\n\t\t\t\treturn invoke();\n\t\t\t},\n\t\t\tsignal: controller.signal,\n\t\t},\n\t\tcontrol: {\n\t\t\tbeginAbort(cancellation) {\n\t\t\t\tif (state.status !== \"open\") return;\n\t\t\t\tstate = { status: \"aborting\", cancellation };\n\t\t\t},\n\t\t\tsignalAbort() {\n\t\t\t\tif (state.status !== \"aborting\" || controller.signal.aborted) return;\n\t\t\t\tcontroller.abort(new AbortRequested(state.cancellation));\n\t\t\t},\n\t\t\tclose(error) {\n\t\t\t\tif (state.status === \"closed\") return;\n\t\t\t\tstate = { status: \"closed\", error };\n\t\t\t\tif (!controller.signal.aborted) controller.abort(error);\n\t\t\t},\n\t\t},\n\t};\n}\n"]}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { type ToolResultMessage } from "@earendil-works/pi-ai";
|
|
2
|
-
import type { AgentToolCall, AgentToolResult } from "../../types.ts";
|
|
3
|
-
import { type Context } from "../context.ts";
|
|
4
|
-
import type { JsonValue } from "../session/types.ts";
|
|
5
|
-
import type { AgentHarnessTool, AgentHarnessToolInvocation, AgentHarnessToolUpdateCallback } from "../types.ts";
|
|
6
|
-
import type { Gate } from "./effect-gate.ts";
|
|
7
|
-
/** A tool call whose tool exists and whose prepared arguments passed validation. */
|
|
8
|
-
export interface PreparedToolCall<TContext extends object | undefined> {
|
|
9
|
-
toolCall: AgentToolCall;
|
|
10
|
-
tool: AgentHarnessTool<TContext>;
|
|
11
|
-
args: Record<string, JsonValue>;
|
|
12
|
-
}
|
|
13
|
-
/** Synthetic result produced without crossing the external tool-effect boundary. */
|
|
14
|
-
export interface ImmediateToolOutcome {
|
|
15
|
-
kind: "immediate";
|
|
16
|
-
toolCall: AgentToolCall;
|
|
17
|
-
result: AgentToolResult<unknown>;
|
|
18
|
-
isError: true;
|
|
19
|
-
terminate: boolean;
|
|
20
|
-
}
|
|
21
|
-
/** Aggregated decision from the before-tool hook pipeline. */
|
|
22
|
-
export interface BeforeToolDecision {
|
|
23
|
-
args?: Record<string, JsonValue>;
|
|
24
|
-
block?: {
|
|
25
|
-
reason: string;
|
|
26
|
-
terminate?: boolean;
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
/** A prepared call cleared for durable intent publication and execution. */
|
|
30
|
-
export interface ClearedToolCall<TContext extends object | undefined> {
|
|
31
|
-
toolCall: AgentToolCall;
|
|
32
|
-
tool: AgentHarnessTool<TContext>;
|
|
33
|
-
args: Record<string, JsonValue>;
|
|
34
|
-
}
|
|
35
|
-
/** Raw phase-two tool output before after-tool patching. */
|
|
36
|
-
export interface ExecutedToolCall {
|
|
37
|
-
result: AgentToolResult<unknown>;
|
|
38
|
-
isError: boolean;
|
|
39
|
-
}
|
|
40
|
-
/** Aggregated patch from the after-tool hook pipeline. */
|
|
41
|
-
export interface AfterToolPatch {
|
|
42
|
-
content?: AgentToolResult<unknown>["content"];
|
|
43
|
-
details?: JsonValue;
|
|
44
|
-
isError?: boolean;
|
|
45
|
-
usage?: AgentToolResult<unknown>["usage"];
|
|
46
|
-
terminate?: boolean;
|
|
47
|
-
}
|
|
48
|
-
/** Final tool output ready to become a durable tool-result message. */
|
|
49
|
-
export interface FinalizedToolCall {
|
|
50
|
-
toolCall: AgentToolCall;
|
|
51
|
-
result: AgentToolResult<unknown>;
|
|
52
|
-
isError: boolean;
|
|
53
|
-
terminate: boolean;
|
|
54
|
-
}
|
|
55
|
-
/** Resolve a tool, apply its deterministic argument preparation, and validate the result. */
|
|
56
|
-
export declare function prepareToolCall<TContext extends object | undefined>(call: AgentToolCall, tools: AgentHarnessTool<TContext>[]): PreparedToolCall<TContext> | ImmediateToolOutcome;
|
|
57
|
-
/** Apply an explicit hook decision and revalidate replacement arguments. */
|
|
58
|
-
export declare function applyBeforeToolDecision<TContext extends object | undefined>(prepared: PreparedToolCall<TContext>, decision: BeforeToolDecision | undefined): ClearedToolCall<TContext> | ImmediateToolOutcome;
|
|
59
|
-
/** Execute one cleared external tool effect, converting expected tool throws to error output. */
|
|
60
|
-
export declare function executeToolCall<TContext extends object | undefined>(call: ClearedToolCall<TContext>, gate: Gate, onUpdate: AgentHarnessToolUpdateCallback<unknown>, toolContext: TContext, invocation: AgentHarnessToolInvocation, context: Context): Promise<ExecutedToolCall>;
|
|
61
|
-
/** Apply an after-tool patch field by field. */
|
|
62
|
-
export declare function finalizeToolCall<TContext extends object | undefined>(call: ClearedToolCall<TContext>, executed: ExecutedToolCall, patch: AfterToolPatch | undefined): FinalizedToolCall;
|
|
63
|
-
/** Reconstruct the canonical tool result represented by a staged transcript message. */
|
|
64
|
-
export declare function toolResultFromMessage(message: ToolResultMessage<unknown>, terminate: boolean): AgentToolResult<unknown>;
|
|
65
|
-
/** Convert finalized tool output to the provider-facing transcript message. */
|
|
66
|
-
export declare function createToolResultMessage(call: FinalizedToolCall): ToolResultMessage;
|
|
67
|
-
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/harness/execution/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import { validateToolArguments } from "@earendil-works/pi-ai";
|
|
2
|
-
import { withAbortSignal } from "../context.js";
|
|
3
|
-
function createErrorToolResult(message) {
|
|
4
|
-
return {
|
|
5
|
-
content: [{ type: "text", text: message }],
|
|
6
|
-
details: undefined,
|
|
7
|
-
};
|
|
8
|
-
}
|
|
9
|
-
function immediateError(toolCall, message, terminate = false) {
|
|
10
|
-
return {
|
|
11
|
-
kind: "immediate",
|
|
12
|
-
toolCall,
|
|
13
|
-
result: createErrorToolResult(message),
|
|
14
|
-
isError: true,
|
|
15
|
-
terminate,
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
/** Resolve a tool, apply its deterministic argument preparation, and validate the result. */
|
|
19
|
-
export function prepareToolCall(call, tools) {
|
|
20
|
-
const tool = tools.find((candidate) => candidate.name === call.name);
|
|
21
|
-
if (!tool) {
|
|
22
|
-
return immediateError(call, `Tool ${JSON.stringify(call.name)} is unavailable`);
|
|
23
|
-
}
|
|
24
|
-
try {
|
|
25
|
-
const preparedArguments = tool.prepareArguments ? tool.prepareArguments(call.arguments) : call.arguments;
|
|
26
|
-
const preparedCall = preparedArguments === call.arguments
|
|
27
|
-
? call
|
|
28
|
-
: { ...call, arguments: preparedArguments };
|
|
29
|
-
const args = validateToolArguments(tool, preparedCall);
|
|
30
|
-
return { toolCall: call, tool, args };
|
|
31
|
-
}
|
|
32
|
-
catch (error) {
|
|
33
|
-
return immediateError(call, error instanceof Error ? error.message : String(error));
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
/** Apply an explicit hook decision and revalidate replacement arguments. */
|
|
37
|
-
export function applyBeforeToolDecision(prepared, decision) {
|
|
38
|
-
if (decision?.block) {
|
|
39
|
-
return immediateError(prepared.toolCall, decision.block.reason, decision.block.terminate === true);
|
|
40
|
-
}
|
|
41
|
-
if (!decision?.args) {
|
|
42
|
-
return { toolCall: prepared.toolCall, tool: prepared.tool, args: prepared.args };
|
|
43
|
-
}
|
|
44
|
-
try {
|
|
45
|
-
const validatedArgs = validateToolArguments(prepared.tool, {
|
|
46
|
-
...prepared.toolCall,
|
|
47
|
-
arguments: decision.args,
|
|
48
|
-
});
|
|
49
|
-
return { toolCall: prepared.toolCall, tool: prepared.tool, args: validatedArgs };
|
|
50
|
-
}
|
|
51
|
-
catch (error) {
|
|
52
|
-
return immediateError(prepared.toolCall, error instanceof Error ? error.message : String(error));
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
/** Execute one cleared external tool effect, converting expected tool throws to error output. */
|
|
56
|
-
export function executeToolCall(call, gate, onUpdate, toolContext, invocation, context) {
|
|
57
|
-
let acceptingUpdates = true;
|
|
58
|
-
return gate.admit(async () => {
|
|
59
|
-
const admittedContext = withAbortSignal(gate.signal, context);
|
|
60
|
-
admittedContext.abortSignal?.throwIfAborted();
|
|
61
|
-
try {
|
|
62
|
-
const result = await call.tool.execute(call.toolCall.id, call.args, (partial, options) => {
|
|
63
|
-
if (acceptingUpdates)
|
|
64
|
-
onUpdate(partial, options);
|
|
65
|
-
}, toolContext, invocation, admittedContext);
|
|
66
|
-
return { result, isError: false };
|
|
67
|
-
}
|
|
68
|
-
catch (error) {
|
|
69
|
-
return {
|
|
70
|
-
result: createErrorToolResult(error instanceof Error ? error.message : String(error)),
|
|
71
|
-
isError: true,
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
finally {
|
|
75
|
-
acceptingUpdates = false;
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
/** Apply an after-tool patch field by field. */
|
|
80
|
-
export function finalizeToolCall(call, executed, patch) {
|
|
81
|
-
const result = patch
|
|
82
|
-
? {
|
|
83
|
-
...executed.result,
|
|
84
|
-
content: patch.content === undefined ? executed.result.content : patch.content,
|
|
85
|
-
details: patch.details === undefined ? executed.result.details : patch.details,
|
|
86
|
-
usage: patch.usage === undefined ? executed.result.usage : patch.usage,
|
|
87
|
-
terminate: patch.terminate === undefined ? executed.result.terminate : patch.terminate,
|
|
88
|
-
}
|
|
89
|
-
: executed.result;
|
|
90
|
-
return {
|
|
91
|
-
toolCall: call.toolCall,
|
|
92
|
-
result,
|
|
93
|
-
isError: patch?.isError ?? executed.isError,
|
|
94
|
-
terminate: result.terminate === true,
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
/** Reconstruct the canonical tool result represented by a staged transcript message. */
|
|
98
|
-
export function toolResultFromMessage(message, terminate) {
|
|
99
|
-
return {
|
|
100
|
-
content: message.content,
|
|
101
|
-
details: message.details,
|
|
102
|
-
...(message.usage === undefined ? {} : { usage: message.usage }),
|
|
103
|
-
...(message.addedToolNames === undefined ? {} : { addedToolNames: message.addedToolNames }),
|
|
104
|
-
...(terminate ? { terminate: true } : {}),
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
/** Convert finalized tool output to the provider-facing transcript message. */
|
|
108
|
-
export function createToolResultMessage(call) {
|
|
109
|
-
return {
|
|
110
|
-
role: "toolResult",
|
|
111
|
-
toolCallId: call.toolCall.id,
|
|
112
|
-
toolName: call.toolCall.name,
|
|
113
|
-
content: call.result.content ?? [],
|
|
114
|
-
...(call.result.details === undefined ? {} : { details: call.result.details }),
|
|
115
|
-
...(call.result.usage === undefined ? {} : { usage: call.result.usage }),
|
|
116
|
-
...(call.result.addedToolNames?.length ? { addedToolNames: call.result.addedToolNames } : {}),
|
|
117
|
-
isError: call.isError,
|
|
118
|
-
timestamp: Date.now(),
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
//# sourceMappingURL=tools.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/harness/execution/tools.ts"],"names":[],"mappings":"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","sourcesContent":["import { type ToolResultMessage, validateToolArguments } from \"@earendil-works/pi-ai\";\nimport type { AgentToolCall, AgentToolResult } from \"../../types.ts\";\nimport { type Context, withAbortSignal } from \"../context.ts\";\nimport type { JsonValue } from \"../session/types.ts\";\nimport type { AgentHarnessTool, AgentHarnessToolInvocation, AgentHarnessToolUpdateCallback } from \"../types.ts\";\nimport type { Gate } from \"./effect-gate.ts\";\n\n/** A tool call whose tool exists and whose prepared arguments passed validation. */\nexport interface PreparedToolCall<TContext extends object | undefined> {\n\ttoolCall: AgentToolCall;\n\ttool: AgentHarnessTool<TContext>;\n\targs: Record<string, JsonValue>;\n}\n\n/** Synthetic result produced without crossing the external tool-effect boundary. */\nexport interface ImmediateToolOutcome {\n\tkind: \"immediate\";\n\ttoolCall: AgentToolCall;\n\tresult: AgentToolResult<unknown>;\n\tisError: true;\n\tterminate: boolean;\n}\n\n/** Aggregated decision from the before-tool hook pipeline. */\nexport interface BeforeToolDecision {\n\targs?: Record<string, JsonValue>;\n\tblock?: { reason: string; terminate?: boolean };\n}\n\n/** A prepared call cleared for durable intent publication and execution. */\nexport interface ClearedToolCall<TContext extends object | undefined> {\n\ttoolCall: AgentToolCall;\n\ttool: AgentHarnessTool<TContext>;\n\targs: Record<string, JsonValue>;\n}\n\n/** Raw phase-two tool output before after-tool patching. */\nexport interface ExecutedToolCall {\n\tresult: AgentToolResult<unknown>;\n\tisError: boolean;\n}\n\n/** Aggregated patch from the after-tool hook pipeline. */\nexport interface AfterToolPatch {\n\tcontent?: AgentToolResult<unknown>[\"content\"];\n\tdetails?: JsonValue;\n\tisError?: boolean;\n\tusage?: AgentToolResult<unknown>[\"usage\"];\n\tterminate?: boolean;\n}\n\n/** Final tool output ready to become a durable tool-result message. */\nexport interface FinalizedToolCall {\n\ttoolCall: AgentToolCall;\n\tresult: AgentToolResult<unknown>;\n\tisError: boolean;\n\tterminate: boolean;\n}\n\nfunction createErrorToolResult(message: string): AgentToolResult<unknown> {\n\treturn {\n\t\tcontent: [{ type: \"text\", text: message }],\n\t\tdetails: undefined,\n\t};\n}\n\nfunction immediateError(toolCall: AgentToolCall, message: string, terminate = false): ImmediateToolOutcome {\n\treturn {\n\t\tkind: \"immediate\",\n\t\ttoolCall,\n\t\tresult: createErrorToolResult(message),\n\t\tisError: true,\n\t\tterminate,\n\t};\n}\n\n/** Resolve a tool, apply its deterministic argument preparation, and validate the result. */\nexport function prepareToolCall<TContext extends object | undefined>(\n\tcall: AgentToolCall,\n\ttools: AgentHarnessTool<TContext>[],\n): PreparedToolCall<TContext> | ImmediateToolOutcome {\n\tconst tool = tools.find((candidate) => candidate.name === call.name);\n\tif (!tool) {\n\t\treturn immediateError(call, `Tool ${JSON.stringify(call.name)} is unavailable`);\n\t}\n\n\ttry {\n\t\tconst preparedArguments = tool.prepareArguments ? tool.prepareArguments(call.arguments) : call.arguments;\n\t\tconst preparedCall: AgentToolCall =\n\t\t\tpreparedArguments === call.arguments\n\t\t\t\t? call\n\t\t\t\t: { ...call, arguments: preparedArguments as Record<string, JsonValue> };\n\t\tconst args = validateToolArguments(tool, preparedCall) as Record<string, JsonValue>;\n\t\treturn { toolCall: call, tool, args };\n\t} catch (error) {\n\t\treturn immediateError(call, error instanceof Error ? error.message : String(error));\n\t}\n}\n\n/** Apply an explicit hook decision and revalidate replacement arguments. */\nexport function applyBeforeToolDecision<TContext extends object | undefined>(\n\tprepared: PreparedToolCall<TContext>,\n\tdecision: BeforeToolDecision | undefined,\n): ClearedToolCall<TContext> | ImmediateToolOutcome {\n\tif (decision?.block) {\n\t\treturn immediateError(prepared.toolCall, decision.block.reason, decision.block.terminate === true);\n\t}\n\n\tif (!decision?.args) {\n\t\treturn { toolCall: prepared.toolCall, tool: prepared.tool, args: prepared.args };\n\t}\n\n\ttry {\n\t\tconst validatedArgs = validateToolArguments(prepared.tool, {\n\t\t\t...prepared.toolCall,\n\t\t\targuments: decision.args,\n\t\t}) as Record<string, JsonValue>;\n\t\treturn { toolCall: prepared.toolCall, tool: prepared.tool, args: validatedArgs };\n\t} catch (error) {\n\t\treturn immediateError(prepared.toolCall, error instanceof Error ? error.message : String(error));\n\t}\n}\n\n/** Execute one cleared external tool effect, converting expected tool throws to error output. */\nexport function executeToolCall<TContext extends object | undefined>(\n\tcall: ClearedToolCall<TContext>,\n\tgate: Gate,\n\tonUpdate: AgentHarnessToolUpdateCallback<unknown>,\n\ttoolContext: TContext,\n\tinvocation: AgentHarnessToolInvocation,\n\tcontext: Context,\n): Promise<ExecutedToolCall> {\n\tlet acceptingUpdates = true;\n\treturn gate.admit(async () => {\n\t\tconst admittedContext = withAbortSignal(gate.signal, context);\n\t\tadmittedContext.abortSignal?.throwIfAborted();\n\t\ttry {\n\t\t\tconst result = await call.tool.execute(\n\t\t\t\tcall.toolCall.id,\n\t\t\t\tcall.args,\n\t\t\t\t(partial, options) => {\n\t\t\t\t\tif (acceptingUpdates) onUpdate(partial, options);\n\t\t\t\t},\n\t\t\t\ttoolContext,\n\t\t\t\tinvocation,\n\t\t\t\tadmittedContext,\n\t\t\t);\n\t\t\treturn { result, isError: false };\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\tresult: createErrorToolResult(error instanceof Error ? error.message : String(error)),\n\t\t\t\tisError: true,\n\t\t\t};\n\t\t} finally {\n\t\t\tacceptingUpdates = false;\n\t\t}\n\t});\n}\n\n/** Apply an after-tool patch field by field. */\nexport function finalizeToolCall<TContext extends object | undefined>(\n\tcall: ClearedToolCall<TContext>,\n\texecuted: ExecutedToolCall,\n\tpatch: AfterToolPatch | undefined,\n): FinalizedToolCall {\n\tconst result: AgentToolResult<unknown> = patch\n\t\t? {\n\t\t\t\t...executed.result,\n\t\t\t\tcontent: patch.content === undefined ? executed.result.content : patch.content,\n\t\t\t\tdetails: patch.details === undefined ? executed.result.details : patch.details,\n\t\t\t\tusage: patch.usage === undefined ? executed.result.usage : patch.usage,\n\t\t\t\tterminate: patch.terminate === undefined ? executed.result.terminate : patch.terminate,\n\t\t\t}\n\t\t: executed.result;\n\treturn {\n\t\ttoolCall: call.toolCall,\n\t\tresult,\n\t\tisError: patch?.isError ?? executed.isError,\n\t\tterminate: result.terminate === true,\n\t};\n}\n\n/** Reconstruct the canonical tool result represented by a staged transcript message. */\nexport function toolResultFromMessage(\n\tmessage: ToolResultMessage<unknown>,\n\tterminate: boolean,\n): AgentToolResult<unknown> {\n\treturn {\n\t\tcontent: message.content,\n\t\tdetails: message.details,\n\t\t...(message.usage === undefined ? {} : { usage: message.usage }),\n\t\t...(message.addedToolNames === undefined ? {} : { addedToolNames: message.addedToolNames }),\n\t\t...(terminate ? { terminate: true } : {}),\n\t};\n}\n\n/** Convert finalized tool output to the provider-facing transcript message. */\nexport function createToolResultMessage(call: FinalizedToolCall): ToolResultMessage {\n\treturn {\n\t\trole: \"toolResult\",\n\t\ttoolCallId: call.toolCall.id,\n\t\ttoolName: call.toolCall.name,\n\t\tcontent: call.result.content ?? [],\n\t\t...(call.result.details === undefined ? {} : { details: call.result.details }),\n\t\t...(call.result.usage === undefined ? {} : { usage: call.result.usage }),\n\t\t...(call.result.addedToolNames?.length ? { addedToolNames: call.result.addedToolNames } : {}),\n\t\tisError: call.isError,\n\t\ttimestamp: Date.now(),\n\t};\n}\n"]}
|
package/dist/harness/hooks.d.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import type { HookHandler, HookInvocation, HookMap, HookName, Hooks } from "./agent-harness.ts";
|
|
2
|
-
import { type Context } from "./context.ts";
|
|
3
|
-
import type { Gate } from "./execution/effect-gate.ts";
|
|
4
|
-
import type { AgentHarnessStreamOptions, AgentHarnessStreamOptionsPatch } from "./types.ts";
|
|
5
|
-
type HookErrorReporter = (error: Error, hook: HookName, lane: string, context: Context) => void | Promise<void>;
|
|
6
|
-
/** Ordered harness hook registry and aggregate runner. */
|
|
7
|
-
export declare class HookRegistry implements Hooks {
|
|
8
|
-
private readonly registrations;
|
|
9
|
-
private readonly reportError;
|
|
10
|
-
private closedError;
|
|
11
|
-
constructor(reportError: HookErrorReporter);
|
|
12
|
-
on<TName extends HookName>(name: TName, handler: HookHandler<TName>, options?: {
|
|
13
|
-
id?: string;
|
|
14
|
-
}): () => void;
|
|
15
|
-
has(name: HookName): boolean;
|
|
16
|
-
/** Invoke one accepted-operation aggregate after synchronously passing its effect gate. */
|
|
17
|
-
runWithGate<TName extends HookName>(name: TName, event: HookInvocation<TName>, gate: Gate, context: Context): Promise<HookMap[TName]["result"]>;
|
|
18
|
-
/** Invoke a tool-hook aggregate with one telemetry span per registered handler. */
|
|
19
|
-
runToolWithGate<TName extends "before_tool" | "after_tool">(name: TName, event: HookInvocation<TName>, gate: Gate, context: Context): Promise<HookMap[TName]["result"]>;
|
|
20
|
-
close(error: Error): void;
|
|
21
|
-
private runAdmitted;
|
|
22
|
-
private aggregate;
|
|
23
|
-
private beforeRun;
|
|
24
|
-
private beforeTool;
|
|
25
|
-
private transformContext;
|
|
26
|
-
private beforeRequest;
|
|
27
|
-
private beforePayload;
|
|
28
|
-
private afterResponse;
|
|
29
|
-
private afterTool;
|
|
30
|
-
private firstStructural;
|
|
31
|
-
private invokeToolRegistration;
|
|
32
|
-
private registrationsFor;
|
|
33
|
-
private invokeAllFailClosed;
|
|
34
|
-
private invokeAll;
|
|
35
|
-
}
|
|
36
|
-
export declare function applyStreamOptionsPatch(base: AgentHarnessStreamOptions, patch: AgentHarnessStreamOptionsPatch): AgentHarnessStreamOptions;
|
|
37
|
-
export {};
|
|
38
|
-
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/harness/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChG,OAAO,EAAE,KAAK,OAAO,EAAmB,MAAM,cAAc,CAAC;AAC7D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAEvD,OAAO,KAAK,EAAE,yBAAyB,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAO5F,KAAK,iBAAiB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEhH,0DAA0D;AAC1D,qBAAa,YAAa,YAAW,KAAK;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA2C;IACzE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAChD,OAAO,CAAC,WAAW,CAAoB;IAEvC,YAAY,WAAW,EAAE,iBAAiB,EAEzC;IAED,EAAE,CAAC,KAAK,SAAS,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,OAAO,GAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,MAAM,IAAI,CAa9G;IAED,GAAG,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAE3B;IAED,2FAA2F;IAC3F,WAAW,CAAC,KAAK,SAAS,QAAQ,EACjC,IAAI,EAAE,KAAK,EACX,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,EAC5B,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,GACd,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAMnC;IAED,mFAAmF;IACnF,eAAe,CAAC,KAAK,SAAS,aAAa,GAAG,YAAY,EACzD,IAAI,EAAE,KAAK,EACX,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,EAC5B,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,GACd,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAUnC;IAED,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAExB;YAEa,WAAW;YAUX,SAAS;YAuCT,SAAS;YA4BT,UAAU;YAgCV,gBAAgB;YA8BhB,aAAa;YA4Bb,aAAa;YAwBb,aAAa;YAwBb,SAAS;YA2CT,eAAe;IAiC7B,OAAO,CAAC,sBAAsB;IAmC9B,OAAO,CAAC,gBAAgB;YAIV,mBAAmB;YAgBnB,SAAS;CAmBvB;AAED,wBAAgB,uBAAuB,CACtC,IAAI,EAAE,yBAAyB,EAC/B,KAAK,EAAE,8BAA8B,GACnC,yBAAyB,CAsC3B"}
|