@bingjiang0611/rotom 0.1.24 → 0.1.25
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/THIRD_PARTY_NOTICES.md +2 -2
- package/extensions/third-party/node_modules/.package-lock.json +3 -3
- package/extensions/third-party/node_modules/sol-pi/UPSTREAM.md +7 -3
- package/extensions/third-party/node_modules/sol-pi/package.json +1 -1
- package/extensions/third-party/node_modules/sol-pi/src/sol-pi/extensions/evidence-preserving-reducer/index.ts +5 -2
- package/extensions/third-party/node_modules/sol-pi/src/sol-pi/extensions/evidence-preserving-reducer/journal.ts +21 -0
- package/extensions/third-party/node_modules/sol-pi/src/sol-pi/extensions/evidence-preserving-reducer/provider.ts +7 -1
- package/extensions/third-party/package-lock.json +4 -4
- package/extensions/third-party/package.json +1 -1
- package/extensions/third-party/vendor/README.md +5 -4
- package/extensions/third-party/vendor/sol-pi-0.1.0-rotom.1.tgz +0 -0
- package/package.json +9 -9
- package/runtime/pi/fork-build.json +23 -23
- package/runtime/pi/node_modules/.package-lock.json +29 -29
- package/runtime/pi/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +30 -7
- package/runtime/pi/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
- package/runtime/pi/node_modules/@earendil-works/pi-ai/package.json +3 -3
- package/runtime/pi/node_modules/@earendil-works/pi-codemode/package.json +2 -2
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{chunk-3CD5ZAQX.js → chunk-6NUCYK64.js} +4 -4
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{chunk-XQ3UQBJ2.js → chunk-DSV77X2M.js} +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{virtual-modules-C5BH2VI2.js → virtual-modules-INPREDLP.js} +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/bundle/cli-runtime.js +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/bundle/index.js +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/bundle/rpc-entry.js +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.js +4 -0
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/loader.js +5 -0
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.js +1 -0
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.d.ts +8 -0
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/docs/extensions.md +1 -0
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/package.json +7 -7
- package/runtime/pi/node_modules/@earendil-works/pi-mcp/package.json +2 -2
- package/runtime/pi/node_modules/@earendil-works/pi-telemetry/package.json +2 -2
- package/runtime/pi/node_modules/@earendil-works/pi-tui/package.json +2 -2
- package/runtime/pi/package-lock.json +37 -37
- package/runtime/pi/package.json +15 -15
- package/runtime/pi/vendor/earendil-works-pi-agent-core-1.3.0-rotom.2.tgz +0 -0
- package/runtime/pi/vendor/earendil-works-pi-ai-1.3.0-rotom.2.tgz +0 -0
- package/runtime/pi/vendor/earendil-works-pi-codemode-1.3.0-rotom.2.tgz +0 -0
- package/runtime/pi/vendor/{earendil-works-pi-coding-agent-1.3.0-rotom.1.tgz → earendil-works-pi-coding-agent-1.3.0-rotom.2.tgz} +0 -0
- package/runtime/pi/vendor/earendil-works-pi-mcp-1.3.0-rotom.2.tgz +0 -0
- package/runtime/pi/vendor/earendil-works-pi-telemetry-1.3.0-rotom.2.tgz +0 -0
- package/runtime/pi/vendor/earendil-works-pi-tui-1.3.0-rotom.2.tgz +0 -0
- package/runtime/product-config.mjs +4 -4
- package/extensions/third-party/vendor/sol-pi-0.1.0-rotom.0.tgz +0 -0
- package/runtime/pi/vendor/earendil-works-pi-agent-core-1.3.0-rotom.1.tgz +0 -0
- package/runtime/pi/vendor/earendil-works-pi-ai-1.3.0-rotom.1.tgz +0 -0
- package/runtime/pi/vendor/earendil-works-pi-codemode-1.3.0-rotom.1.tgz +0 -0
- package/runtime/pi/vendor/earendil-works-pi-mcp-1.3.0-rotom.1.tgz +0 -0
- package/runtime/pi/vendor/earendil-works-pi-telemetry-1.3.0-rotom.1.tgz +0 -0
- package/runtime/pi/vendor/earendil-works-pi-tui-1.3.0-rotom.1.tgz +0 -0
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -6,13 +6,13 @@ rotom 的根产品许可证尚未确定(当前 `UNLICENSED`);此状态不
|
|
|
6
6
|
|
|
7
7
|
| Package | Version | Declared license | Distribution |
|
|
8
8
|
|---|---|---|---|
|
|
9
|
-
| `@earendil-works/pi-coding-agent`, `pi-agent-core`, `pi-ai`, `pi-tui`, `pi-telemetry`, `pi-codemode`, `pi-mcp` (all under `@earendil-works`) | `1.3.0-rotom.
|
|
9
|
+
| `@earendil-works/pi-coding-agent`, `pi-agent-core`, `pi-ai`, `pi-tui`, `pi-telemetry`, `pi-codemode`, `pi-mcp` (all under `@earendil-works`) | `1.3.0-rotom.2` | MIT | In-repository Pi fork (`packages/rotom-pi/`), built into integrity-pinned archives and installed under `runtime/pi/node_modules/` |
|
|
10
10
|
| `@injaneity/pi-computer-use` | `0.5.1-rotom.0` | MIT | Independently maintained fork (`packages/rotom-computer-use/`), included from its integrity-pinned vendor archive |
|
|
11
11
|
| `@juicesharp/rpiv-ask-user-question` | `2.6.2` | MIT | Included under `extensions/third-party/node_modules/` |
|
|
12
12
|
| `@narumitw/pi-goal` | `0.54.4-rotom.8` | MIT | Independently maintained fork (`packages/rotom-goal/`), included from its integrity-pinned vendor archive |
|
|
13
13
|
| `pi-context-view` | `0.7.1` | MIT | Included unmodified under `extensions/third-party/node_modules/` |
|
|
14
14
|
| `pi-subagents` | `0.52.1-rotom.7` | MIT | Independently maintained Subagent source, included from its integrity-pinned vendor archive |
|
|
15
|
-
| `sol-pi` (SoL-Pi, Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES) | `0.1.0-rotom.
|
|
15
|
+
| `sol-pi` (SoL-Pi, Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES) | `0.1.0-rotom.1` | MIT | Maintained import (`packages/rotom-sol-pi/`), included from its integrity-pinned vendor archive |
|
|
16
16
|
|
|
17
17
|
Each included extension retains its original `LICENSE` and package metadata; transitive dependency notices remain in their installed package directories. The modified Subagent, Computer Use, Goal and SoL-Pi archives' origin and scope are documented in `extensions/third-party/vendor/README.md` and each fork's `package/UPSTREAM.md`. Shipping the complete dependency does not enable its unselected tools, templates, or skills.
|
|
18
18
|
|
|
@@ -166,9 +166,9 @@
|
|
|
166
166
|
}
|
|
167
167
|
},
|
|
168
168
|
"node_modules/sol-pi": {
|
|
169
|
-
"version": "0.1.0-rotom.
|
|
170
|
-
"resolved": "file:vendor/sol-pi-0.1.0-rotom.
|
|
171
|
-
"integrity": "sha512-
|
|
169
|
+
"version": "0.1.0-rotom.1",
|
|
170
|
+
"resolved": "file:vendor/sol-pi-0.1.0-rotom.1.tgz",
|
|
171
|
+
"integrity": "sha512-t4h2lPg0ktcA4oyiBwKJur13Noc5pfYUhV5lXkRuoPV3CQ/Bf1oYil8zIgz8rBB5vMrYXUn6zRhDQg+S/VljAw==",
|
|
172
172
|
"license": "MIT",
|
|
173
173
|
"engines": {
|
|
174
174
|
"node": ">=22.19.0"
|
|
@@ -3,13 +3,17 @@
|
|
|
3
3
|
- Upstream: SoL-Pi, <https://github.com/NVlabs/SoL-Pi>. License: MIT, Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES; the original notice stays in `LICENSE`.
|
|
4
4
|
- Upstream base: `2b791687` ("Update Pi to 0.85.1 and verify 0.84.2 compatibility (#63)").
|
|
5
5
|
- Source: the maintainer's SoL-Pi branch at `b463fad0ffab6e42488f5c80687adab67174a0ee`, imported from its tracked files. On top of the upstream base it carries five commits: recalled pages keep source references (`81b80b0`), the Pi 0.85 compaction-reason test (`83c5426`), the 0.85.1 baseline merge (`807ad60`), selected upstream reliability backports (`32840b2`), and Pi error-result handling plus runtime compatibility repairs (`b463fad`).
|
|
6
|
-
- Maintained version: `0.1.0-rotom.
|
|
6
|
+
- Maintained version: `0.1.0-rotom.1`, a private component of [rotom](https://github.com/bingjiang0611/rotom). It is not an upstream or npm release.
|
|
7
7
|
|
|
8
8
|
## Changes in this import
|
|
9
9
|
|
|
10
|
-
- `package.json` / `package-lock.json`: version `0.1.0-rotom.
|
|
10
|
+
- `package.json` / `package-lock.json`: version `0.1.0-rotom.1`, rotom description, `UPSTREAM.md` added to and the hero image removed from the packed files.
|
|
11
11
|
- Not imported: `.github/`, `AGENTS.md`, `CLAUDE.md`, `.gitattributes` and `assets/` (the README hero image link is therefore broken in this copy).
|
|
12
|
-
- `src/` and `tests/`
|
|
12
|
+
- `src/` and `tests/` were byte-identical to the source commit in `0.1.0-rotom.0`.
|
|
13
|
+
|
|
14
|
+
## rotom changes
|
|
15
|
+
|
|
16
|
+
- `0.1.0-rotom.1`: the Evidence-Preserving Reducer records each returned reducer response (applied or rejected) as a Pi `usage` entry of kind `sol_pi_reducer`, attributed to the reducer provider/model with the provider-reported usage unchanged. Pi's footer, session stats, usage breakdown and Goal budgets then include the reducer spend. It uses `pi.appendUsage`, which the rotom Pi fork exposes from `1.3.0-rotom.2`; on Pi releases without it (upstream Pi) only the SoL-Pi journal entry is written, as before. Calls that throw before a response (timeout, unavailable model, missing auth) record no usage. Files: `evidence-preserving-reducer/{provider,journal,index}.ts`, `tests/helpers.ts`, `tests/evidence-preserving-reducer.test.ts`.
|
|
13
17
|
|
|
14
18
|
## How rotom uses it
|
|
15
19
|
|
|
@@ -39,7 +39,7 @@ import {
|
|
|
39
39
|
type ReducerConfigOptions,
|
|
40
40
|
sha256,
|
|
41
41
|
} from "./config.ts";
|
|
42
|
-
import { createJournal, type Journal } from "./journal.ts";
|
|
42
|
+
import { createJournal, createUsageRecorder, type Journal, type UsageRecorder } from "./journal.ts";
|
|
43
43
|
import { callReducer, type ProviderResult } from "./provider.ts";
|
|
44
44
|
import { receiptText, validateReceipt } from "./receipt.ts";
|
|
45
45
|
|
|
@@ -57,6 +57,7 @@ function errorName(error: unknown): string | undefined {
|
|
|
57
57
|
|
|
58
58
|
export async function reduceToolResult(
|
|
59
59
|
journal: Journal,
|
|
60
|
+
recordUsage: UsageRecorder,
|
|
60
61
|
config: ReducerConfig,
|
|
61
62
|
event: ToolResultEvent,
|
|
62
63
|
context: ExtensionContext,
|
|
@@ -103,6 +104,7 @@ export async function reduceToolResult(
|
|
|
103
104
|
return undefined;
|
|
104
105
|
}
|
|
105
106
|
|
|
107
|
+
recordUsage(provider);
|
|
106
108
|
journal("provider_response", {
|
|
107
109
|
toolCallId: event.toolCallId,
|
|
108
110
|
sourceSha256: archive.hash,
|
|
@@ -179,6 +181,7 @@ export async function reduceToolResult(
|
|
|
179
181
|
export function createEvidencePreservingReducerExtension(options: EvidencePreservingReducerOptions = {}): ExtensionFactory {
|
|
180
182
|
return (pi: ExtensionAPI) => {
|
|
181
183
|
const states = new Map<string, { config: ReducerConfig; journal: Journal }>();
|
|
184
|
+
const recordUsage = createUsageRecorder(pi);
|
|
182
185
|
pi.on("tool_result", (event, context) => {
|
|
183
186
|
let root: string;
|
|
184
187
|
try {
|
|
@@ -192,7 +195,7 @@ export function createEvidencePreservingReducerExtension(options: EvidencePreser
|
|
|
192
195
|
state = { config, journal: createJournal(pi, config) };
|
|
193
196
|
states.set(root, state);
|
|
194
197
|
}
|
|
195
|
-
return reduceToolResult(state.journal, state.config, event, context);
|
|
198
|
+
return reduceToolResult(state.journal, recordUsage, state.config, event, context);
|
|
196
199
|
});
|
|
197
200
|
};
|
|
198
201
|
}
|
|
@@ -2,8 +2,13 @@
|
|
|
2
2
|
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
3
3
|
* SPDX-License-Identifier: MIT
|
|
4
4
|
*/
|
|
5
|
+
import type { Usage } from "@earendil-works/pi-ai";
|
|
5
6
|
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
6
7
|
import { REDUCER_EVENT_SCHEMA, REDUCER_EVENT_TYPE, type ReducerConfig } from "./config.ts";
|
|
8
|
+
import type { ProviderResult } from "./provider.ts";
|
|
9
|
+
|
|
10
|
+
/** Pi usage-entry kind for reducer model calls. */
|
|
11
|
+
export const REDUCER_USAGE_KIND = "sol_pi_reducer";
|
|
7
12
|
|
|
8
13
|
/**
|
|
9
14
|
* Append one non-context session entry per decision the reducer made.
|
|
@@ -23,3 +28,19 @@ export function createJournal(pi: ExtensionAPI, config: ReducerConfig): Journal
|
|
|
23
28
|
});
|
|
24
29
|
};
|
|
25
30
|
}
|
|
31
|
+
|
|
32
|
+
type AppendUsage = (kind: string, provider: string, model: string, usage: Usage, note?: string) => void;
|
|
33
|
+
export type UsageRecorder = (provider: ProviderResult) => void;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Record each reducer response in Pi's usage entries so footer, session stats
|
|
37
|
+
* and budgets include the reducer spend. Pi releases without
|
|
38
|
+
* `pi.appendUsage` (upstream Pi) keep only the journal record.
|
|
39
|
+
*/
|
|
40
|
+
export function createUsageRecorder(pi: ExtensionAPI): UsageRecorder {
|
|
41
|
+
const appendUsage = (pi as ExtensionAPI & { appendUsage?: AppendUsage }).appendUsage;
|
|
42
|
+
if (typeof appendUsage !== "function") return () => {};
|
|
43
|
+
return (provider) => {
|
|
44
|
+
appendUsage.call(pi, REDUCER_USAGE_KIND, provider.provider, provider.responseModel, provider.responseUsage);
|
|
45
|
+
};
|
|
46
|
+
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* SPDX-License-Identifier: MIT
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import type { Api, AssistantMessage, Context, Model, ProviderStreamOptions } from "@earendil-works/pi-ai";
|
|
6
|
+
import type { Api, AssistantMessage, Context, Model, ProviderStreamOptions, Usage } from "@earendil-works/pi-ai";
|
|
7
7
|
import { complete as completeCompat } from "@earendil-works/pi-ai/compat";
|
|
8
8
|
import type { ExtensionContext } from "@earendil-works/pi-coding-agent";
|
|
9
9
|
import type { ArchiveObject } from "./archive.ts";
|
|
@@ -44,6 +44,10 @@ export interface ProviderResult {
|
|
|
44
44
|
readonly ok: boolean;
|
|
45
45
|
readonly outputText: string;
|
|
46
46
|
readonly provider: string;
|
|
47
|
+
/** Concrete model that served the request, for usage attribution. */
|
|
48
|
+
readonly responseModel: string;
|
|
49
|
+
/** Provider-reported usage including cost, recorded unchanged in Pi's usage entries. */
|
|
50
|
+
readonly responseUsage: Usage;
|
|
47
51
|
readonly stopReason: AssistantMessage["stopReason"];
|
|
48
52
|
readonly usage: NormalizedUsage;
|
|
49
53
|
}
|
|
@@ -154,6 +158,8 @@ export async function callReducer(
|
|
|
154
158
|
ok: response.stopReason === "stop" || response.stopReason === "length",
|
|
155
159
|
outputText: responseOutputText(response),
|
|
156
160
|
provider: response.provider,
|
|
161
|
+
responseModel: response.responseModel ?? response.model,
|
|
162
|
+
responseUsage: response.usage,
|
|
157
163
|
stopReason: response.stopReason,
|
|
158
164
|
usage: normalizedUsage(response),
|
|
159
165
|
};
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"@narumitw/pi-goal": "0.54.4-rotom.8",
|
|
12
12
|
"pi-context-view": "0.7.1",
|
|
13
13
|
"pi-subagents": "0.52.1-rotom.7",
|
|
14
|
-
"sol-pi": "0.1.0-rotom.
|
|
14
|
+
"sol-pi": "0.1.0-rotom.1"
|
|
15
15
|
}
|
|
16
16
|
},
|
|
17
17
|
"node_modules/@injaneity/pi-computer-use": {
|
|
@@ -177,9 +177,9 @@
|
|
|
177
177
|
}
|
|
178
178
|
},
|
|
179
179
|
"node_modules/sol-pi": {
|
|
180
|
-
"version": "0.1.0-rotom.
|
|
181
|
-
"resolved": "file:vendor/sol-pi-0.1.0-rotom.
|
|
182
|
-
"integrity": "sha512-
|
|
180
|
+
"version": "0.1.0-rotom.1",
|
|
181
|
+
"resolved": "file:vendor/sol-pi-0.1.0-rotom.1.tgz",
|
|
182
|
+
"integrity": "sha512-t4h2lPg0ktcA4oyiBwKJur13Noc5pfYUhV5lXkRuoPV3CQ/Bf1oYil8zIgz8rBB5vMrYXUn6zRhDQg+S/VljAw==",
|
|
183
183
|
"license": "MIT",
|
|
184
184
|
"engines": {
|
|
185
185
|
"node": ">=22.19.0"
|
|
@@ -46,12 +46,13 @@ The default product selects **`@narumitw/pi-goal@0.54.4-rotom.8`**, independentl
|
|
|
46
46
|
|
|
47
47
|
## Locked SoL-Pi distribution
|
|
48
48
|
|
|
49
|
-
The default product selects **`sol-pi@0.1.0-rotom.
|
|
49
|
+
The default product selects **`sol-pi@0.1.0-rotom.1`**, maintained in `packages/rotom-sol-pi/`. SoL-Pi has no npm release; this archive is packed from that directory.
|
|
50
50
|
|
|
51
|
-
- Archive: `sol-pi-0.1.0-rotom.
|
|
52
|
-
- SHA512 SRI: `sha512-
|
|
51
|
+
- Archive: `sol-pi-0.1.0-rotom.1.tgz`
|
|
52
|
+
- SHA512 SRI: `sha512-t4h2lPg0ktcA4oyiBwKJur13Noc5pfYUhV5lXkRuoPV3CQ/Bf1oYil8zIgz8rBB5vMrYXUn6zRhDQg+S/VljAw==`
|
|
53
53
|
- Upstream: <https://github.com/NVlabs/SoL-Pi>, License MIT (original notice in `package/LICENSE`; provenance in `package/UPSTREAM.md`).
|
|
54
|
-
- Source: the maintainer's branch `b463fad` (upstream `2b791687` plus five fix/compat commits). `src/`
|
|
54
|
+
- Source: the maintainer's branch `b463fad` (upstream `2b791687` plus five fix/compat commits). `.rotom.0` kept `src/` byte-identical. `.rotom.1` records each returned reducer response as a Pi `usage` entry (`sol_pi_reducer`) through the fork's `pi.appendUsage`, so the footer, session stats and Goal budgets include reducer spend; see `UPSTREAM.md`. The `.rotom.0` archive shipped in rotom 0.1.24 and is removed here.
|
|
55
|
+
- Tests: `.rotom.1` passes upstream's suite plus the new usage tests, 167/167, against the Pi `1.3.0-rotom.2` packages (`.rotom.0`: 166/166 on `1.3.0-rotom.1`). In `packages/rotom-sol-pi/` itself, the 2 `tests/install-guide.test.ts` cases fail because they read the non-imported upstream `AGENTS.md`/`CLAUDE.md`.
|
|
55
56
|
- `extensions/third-party/sol-pi.ts` supplies rotom's default (Action Fusion, Observation Pack, Evidence-Preserving Reducer on; Online Context Compact off) only when no SoL-Pi config file exists.
|
|
56
57
|
|
|
57
58
|
`pi-context-view@0.7.1` is taken unmodified from the public npm registry and pinned by its registry integrity in `package-lock.json` and `runtime/product-config.mjs`.
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bingjiang0611/rotom",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.25",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Personal coding agent built on Pi, with explicit tools and runtime contracts",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -91,19 +91,19 @@
|
|
|
91
91
|
"extensions/third-party/vendor/pi-subagents-0.52.1-rotom.7.tgz",
|
|
92
92
|
"extensions/third-party/vendor/narumitw-pi-goal-0.54.4-rotom.8.tgz",
|
|
93
93
|
"extensions/third-party/vendor/injaneity-pi-computer-use-0.5.1-rotom.0.tgz",
|
|
94
|
-
"extensions/third-party/vendor/sol-pi-0.1.0-rotom.
|
|
94
|
+
"extensions/third-party/vendor/sol-pi-0.1.0-rotom.1.tgz",
|
|
95
95
|
"extensions/third-party/node_modules",
|
|
96
96
|
"skills/pi-subagents/SKILL.md",
|
|
97
97
|
"runtime/pi/package.json",
|
|
98
98
|
"runtime/pi/package-lock.json",
|
|
99
99
|
"runtime/pi/fork-build.json",
|
|
100
|
-
"runtime/pi/vendor/earendil-works-pi-telemetry-1.3.0-rotom.
|
|
101
|
-
"runtime/pi/vendor/earendil-works-pi-ai-1.3.0-rotom.
|
|
102
|
-
"runtime/pi/vendor/earendil-works-pi-tui-1.3.0-rotom.
|
|
103
|
-
"runtime/pi/vendor/earendil-works-pi-agent-core-1.3.0-rotom.
|
|
104
|
-
"runtime/pi/vendor/earendil-works-pi-coding-agent-1.3.0-rotom.
|
|
105
|
-
"runtime/pi/vendor/earendil-works-pi-codemode-1.3.0-rotom.
|
|
106
|
-
"runtime/pi/vendor/earendil-works-pi-mcp-1.3.0-rotom.
|
|
100
|
+
"runtime/pi/vendor/earendil-works-pi-telemetry-1.3.0-rotom.2.tgz",
|
|
101
|
+
"runtime/pi/vendor/earendil-works-pi-ai-1.3.0-rotom.2.tgz",
|
|
102
|
+
"runtime/pi/vendor/earendil-works-pi-tui-1.3.0-rotom.2.tgz",
|
|
103
|
+
"runtime/pi/vendor/earendil-works-pi-agent-core-1.3.0-rotom.2.tgz",
|
|
104
|
+
"runtime/pi/vendor/earendil-works-pi-coding-agent-1.3.0-rotom.2.tgz",
|
|
105
|
+
"runtime/pi/vendor/earendil-works-pi-codemode-1.3.0-rotom.2.tgz",
|
|
106
|
+
"runtime/pi/vendor/earendil-works-pi-mcp-1.3.0-rotom.2.tgz",
|
|
107
107
|
"runtime/pi/node_modules"
|
|
108
108
|
]
|
|
109
109
|
}
|
|
@@ -1,44 +1,44 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "rotom-pi-fork/v1",
|
|
3
|
-
"version": "1.3.0-rotom.
|
|
3
|
+
"version": "1.3.0-rotom.2",
|
|
4
4
|
"upstreamRevision": "71023aec1546d6d677a65669c5665c0927ce0dd0",
|
|
5
|
-
"sourceSha256": "
|
|
5
|
+
"sourceSha256": "0cbc3f20d1d7666b7945ebcba3ae377d097f69a1766e5bcc3fdc779e9f6bdc5d",
|
|
6
6
|
"builderSha256": "acb979e0c9b7e04cac0b0b24a35cca93301400fd4cd936b7b899a4dfb630756e",
|
|
7
7
|
"artifacts": {
|
|
8
8
|
"@earendil-works/pi-telemetry": {
|
|
9
|
-
"version": "1.3.0-rotom.
|
|
10
|
-
"file": "vendor/earendil-works-pi-telemetry-1.3.0-rotom.
|
|
11
|
-
"integrity": "sha512-
|
|
9
|
+
"version": "1.3.0-rotom.2",
|
|
10
|
+
"file": "vendor/earendil-works-pi-telemetry-1.3.0-rotom.2.tgz",
|
|
11
|
+
"integrity": "sha512-JX+D+lTE5wT1ZwTGIlYhQePxKMbPfctWZ3G9SWXNtcHV0BMKmN9tIW6O3Z5h6FbARDJvq5GgwIkz0P/ctCrDEg=="
|
|
12
12
|
},
|
|
13
13
|
"@earendil-works/pi-ai": {
|
|
14
|
-
"version": "1.3.0-rotom.
|
|
15
|
-
"file": "vendor/earendil-works-pi-ai-1.3.0-rotom.
|
|
16
|
-
"integrity": "sha512-
|
|
14
|
+
"version": "1.3.0-rotom.2",
|
|
15
|
+
"file": "vendor/earendil-works-pi-ai-1.3.0-rotom.2.tgz",
|
|
16
|
+
"integrity": "sha512-rTZR8o2zh++q1FBqfAOjPgk6eGjjAEAc3ZXS3Id3uTjf/LbyQXeWiu/biDZDtpNw9eBof+z05/mcbfIp3Eethg=="
|
|
17
17
|
},
|
|
18
18
|
"@earendil-works/pi-tui": {
|
|
19
|
-
"version": "1.3.0-rotom.
|
|
20
|
-
"file": "vendor/earendil-works-pi-tui-1.3.0-rotom.
|
|
21
|
-
"integrity": "sha512-
|
|
19
|
+
"version": "1.3.0-rotom.2",
|
|
20
|
+
"file": "vendor/earendil-works-pi-tui-1.3.0-rotom.2.tgz",
|
|
21
|
+
"integrity": "sha512-IDuOXDilIvkRsF4bCx0Q02GK57ohnot6fL1yr70tbA9+TouxmtFBLqW0XeXh0oyZSXmavB8MBSxiVNhlAbiiFw=="
|
|
22
22
|
},
|
|
23
23
|
"@earendil-works/pi-agent-core": {
|
|
24
|
-
"version": "1.3.0-rotom.
|
|
25
|
-
"file": "vendor/earendil-works-pi-agent-core-1.3.0-rotom.
|
|
26
|
-
"integrity": "sha512-
|
|
24
|
+
"version": "1.3.0-rotom.2",
|
|
25
|
+
"file": "vendor/earendil-works-pi-agent-core-1.3.0-rotom.2.tgz",
|
|
26
|
+
"integrity": "sha512-biXnah8jKEs+h75t9Vdl2f71He33mTUAtc846XFg+Ym2uDfBkqoTf9xpQ1NPHMAkS4C/hkO7aOsKY6jQnh+YQw=="
|
|
27
27
|
},
|
|
28
28
|
"@earendil-works/pi-codemode": {
|
|
29
|
-
"version": "1.3.0-rotom.
|
|
30
|
-
"file": "vendor/earendil-works-pi-codemode-1.3.0-rotom.
|
|
31
|
-
"integrity": "sha512-
|
|
29
|
+
"version": "1.3.0-rotom.2",
|
|
30
|
+
"file": "vendor/earendil-works-pi-codemode-1.3.0-rotom.2.tgz",
|
|
31
|
+
"integrity": "sha512-RK2HCSJDciiq+d1wI3wcUEfOtbgHGgQdNBr2Rb6fu7fgo1AMlYVLEB9Usza+yEojQZo1qy+4Q9cntcIhoelliA=="
|
|
32
32
|
},
|
|
33
33
|
"@earendil-works/pi-mcp": {
|
|
34
|
-
"version": "1.3.0-rotom.
|
|
35
|
-
"file": "vendor/earendil-works-pi-mcp-1.3.0-rotom.
|
|
36
|
-
"integrity": "sha512-
|
|
34
|
+
"version": "1.3.0-rotom.2",
|
|
35
|
+
"file": "vendor/earendil-works-pi-mcp-1.3.0-rotom.2.tgz",
|
|
36
|
+
"integrity": "sha512-PRp1ldn50YH9oewJX/ouxzKScTvpwXkrzn/B2jGvSRuTwNM0z6FifonB3l8YZxR+k17EdO9hG77LQ9cUTpU3FA=="
|
|
37
37
|
},
|
|
38
38
|
"@earendil-works/pi-coding-agent": {
|
|
39
|
-
"version": "1.3.0-rotom.
|
|
40
|
-
"file": "vendor/earendil-works-pi-coding-agent-1.3.0-rotom.
|
|
41
|
-
"integrity": "sha512-
|
|
39
|
+
"version": "1.3.0-rotom.2",
|
|
40
|
+
"file": "vendor/earendil-works-pi-coding-agent-1.3.0-rotom.2.tgz",
|
|
41
|
+
"integrity": "sha512-exOT4pJFc3E++aNApXsPVJT0XPJ8xotpb4XgtJnVZt+rpCfq+PSucqP7//AFQTcjFgYAaOWPmx8vx3ybNBy1qQ=="
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rotom-pi-runtime",
|
|
3
|
-
"version": "1.3.0-rotom.
|
|
3
|
+
"version": "1.3.0-rotom.2",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
@@ -376,12 +376,12 @@
|
|
|
376
376
|
}
|
|
377
377
|
},
|
|
378
378
|
"node_modules/@earendil-works/pi-agent-core": {
|
|
379
|
-
"version": "1.3.0-rotom.
|
|
380
|
-
"resolved": "file:vendor/earendil-works-pi-agent-core-1.3.0-rotom.
|
|
381
|
-
"integrity": "sha512-
|
|
379
|
+
"version": "1.3.0-rotom.2",
|
|
380
|
+
"resolved": "file:vendor/earendil-works-pi-agent-core-1.3.0-rotom.2.tgz",
|
|
381
|
+
"integrity": "sha512-biXnah8jKEs+h75t9Vdl2f71He33mTUAtc846XFg+Ym2uDfBkqoTf9xpQ1NPHMAkS4C/hkO7aOsKY6jQnh+YQw==",
|
|
382
382
|
"license": "MIT",
|
|
383
383
|
"dependencies": {
|
|
384
|
-
"@earendil-works/pi-ai": "1.3.0-rotom.
|
|
384
|
+
"@earendil-works/pi-ai": "1.3.0-rotom.2",
|
|
385
385
|
"typebox": "1.3.27"
|
|
386
386
|
},
|
|
387
387
|
"engines": {
|
|
@@ -389,14 +389,14 @@
|
|
|
389
389
|
}
|
|
390
390
|
},
|
|
391
391
|
"node_modules/@earendil-works/pi-ai": {
|
|
392
|
-
"version": "1.3.0-rotom.
|
|
393
|
-
"resolved": "file:vendor/earendil-works-pi-ai-1.3.0-rotom.
|
|
394
|
-
"integrity": "sha512-
|
|
392
|
+
"version": "1.3.0-rotom.2",
|
|
393
|
+
"resolved": "file:vendor/earendil-works-pi-ai-1.3.0-rotom.2.tgz",
|
|
394
|
+
"integrity": "sha512-rTZR8o2zh++q1FBqfAOjPgk6eGjjAEAc3ZXS3Id3uTjf/LbyQXeWiu/biDZDtpNw9eBof+z05/mcbfIp3Eethg==",
|
|
395
395
|
"license": "MIT",
|
|
396
396
|
"dependencies": {
|
|
397
397
|
"@anthropic-ai/sdk": "0.129.0",
|
|
398
398
|
"@aws-sdk/client-bedrock-runtime": "3.1127.0",
|
|
399
|
-
"@earendil-works/pi-telemetry": "1.3.0-rotom.
|
|
399
|
+
"@earendil-works/pi-telemetry": "1.3.0-rotom.2",
|
|
400
400
|
"@google/genai": "2.21.0",
|
|
401
401
|
"@smithy/node-http-handler": "4.12.1",
|
|
402
402
|
"http-proxy-agent": "9.1.0",
|
|
@@ -436,9 +436,9 @@
|
|
|
436
436
|
}
|
|
437
437
|
},
|
|
438
438
|
"node_modules/@earendil-works/pi-codemode": {
|
|
439
|
-
"version": "1.3.0-rotom.
|
|
440
|
-
"resolved": "file:vendor/earendil-works-pi-codemode-1.3.0-rotom.
|
|
441
|
-
"integrity": "sha512-
|
|
439
|
+
"version": "1.3.0-rotom.2",
|
|
440
|
+
"resolved": "file:vendor/earendil-works-pi-codemode-1.3.0-rotom.2.tgz",
|
|
441
|
+
"integrity": "sha512-RK2HCSJDciiq+d1wI3wcUEfOtbgHGgQdNBr2Rb6fu7fgo1AMlYVLEB9Usza+yEojQZo1qy+4Q9cntcIhoelliA==",
|
|
442
442
|
"license": "MIT",
|
|
443
443
|
"dependencies": {
|
|
444
444
|
"quickjs-wasi": "3.6.2"
|
|
@@ -448,16 +448,16 @@
|
|
|
448
448
|
}
|
|
449
449
|
},
|
|
450
450
|
"node_modules/@earendil-works/pi-coding-agent": {
|
|
451
|
-
"version": "1.3.0-rotom.
|
|
452
|
-
"resolved": "file:vendor/earendil-works-pi-coding-agent-1.3.0-rotom.
|
|
453
|
-
"integrity": "sha512-
|
|
451
|
+
"version": "1.3.0-rotom.2",
|
|
452
|
+
"resolved": "file:vendor/earendil-works-pi-coding-agent-1.3.0-rotom.2.tgz",
|
|
453
|
+
"integrity": "sha512-exOT4pJFc3E++aNApXsPVJT0XPJ8xotpb4XgtJnVZt+rpCfq+PSucqP7//AFQTcjFgYAaOWPmx8vx3ybNBy1qQ==",
|
|
454
454
|
"license": "MIT",
|
|
455
455
|
"dependencies": {
|
|
456
|
-
"@earendil-works/pi-agent-core": "1.3.0-rotom.
|
|
457
|
-
"@earendil-works/pi-ai": "1.3.0-rotom.
|
|
458
|
-
"@earendil-works/pi-codemode": "1.3.0-rotom.
|
|
459
|
-
"@earendil-works/pi-mcp": "1.3.0-rotom.
|
|
460
|
-
"@earendil-works/pi-tui": "1.3.0-rotom.
|
|
456
|
+
"@earendil-works/pi-agent-core": "1.3.0-rotom.2",
|
|
457
|
+
"@earendil-works/pi-ai": "1.3.0-rotom.2",
|
|
458
|
+
"@earendil-works/pi-codemode": "1.3.0-rotom.2",
|
|
459
|
+
"@earendil-works/pi-mcp": "1.3.0-rotom.2",
|
|
460
|
+
"@earendil-works/pi-tui": "1.3.0-rotom.2",
|
|
461
461
|
"@silvia-odwyer/photon-node": "0.3.4",
|
|
462
462
|
"brace-expansion": "5.0.12",
|
|
463
463
|
"chalk": "6.0.0",
|
|
@@ -484,9 +484,9 @@
|
|
|
484
484
|
}
|
|
485
485
|
},
|
|
486
486
|
"node_modules/@earendil-works/pi-mcp": {
|
|
487
|
-
"version": "1.3.0-rotom.
|
|
488
|
-
"resolved": "file:vendor/earendil-works-pi-mcp-1.3.0-rotom.
|
|
489
|
-
"integrity": "sha512-
|
|
487
|
+
"version": "1.3.0-rotom.2",
|
|
488
|
+
"resolved": "file:vendor/earendil-works-pi-mcp-1.3.0-rotom.2.tgz",
|
|
489
|
+
"integrity": "sha512-PRp1ldn50YH9oewJX/ouxzKScTvpwXkrzn/B2jGvSRuTwNM0z6FifonB3l8YZxR+k17EdO9hG77LQ9cUTpU3FA==",
|
|
490
490
|
"license": "MIT",
|
|
491
491
|
"dependencies": {
|
|
492
492
|
"cross-spawn": "7.0.6"
|
|
@@ -496,18 +496,18 @@
|
|
|
496
496
|
}
|
|
497
497
|
},
|
|
498
498
|
"node_modules/@earendil-works/pi-telemetry": {
|
|
499
|
-
"version": "1.3.0-rotom.
|
|
500
|
-
"resolved": "file:vendor/earendil-works-pi-telemetry-1.3.0-rotom.
|
|
501
|
-
"integrity": "sha512-
|
|
499
|
+
"version": "1.3.0-rotom.2",
|
|
500
|
+
"resolved": "file:vendor/earendil-works-pi-telemetry-1.3.0-rotom.2.tgz",
|
|
501
|
+
"integrity": "sha512-JX+D+lTE5wT1ZwTGIlYhQePxKMbPfctWZ3G9SWXNtcHV0BMKmN9tIW6O3Z5h6FbARDJvq5GgwIkz0P/ctCrDEg==",
|
|
502
502
|
"license": "MIT",
|
|
503
503
|
"engines": {
|
|
504
504
|
"node": ">=22.19.0"
|
|
505
505
|
}
|
|
506
506
|
},
|
|
507
507
|
"node_modules/@earendil-works/pi-tui": {
|
|
508
|
-
"version": "1.3.0-rotom.
|
|
509
|
-
"resolved": "file:vendor/earendil-works-pi-tui-1.3.0-rotom.
|
|
510
|
-
"integrity": "sha512-
|
|
508
|
+
"version": "1.3.0-rotom.2",
|
|
509
|
+
"resolved": "file:vendor/earendil-works-pi-tui-1.3.0-rotom.2.tgz",
|
|
510
|
+
"integrity": "sha512-IDuOXDilIvkRsF4bCx0Q02GK57ohnot6fL1yr70tbA9+TouxmtFBLqW0XeXh0oyZSXmavB8MBSxiVNhlAbiiFw==",
|
|
511
511
|
"license": "MIT",
|
|
512
512
|
"dependencies": {
|
|
513
513
|
"get-east-asian-width": "1.6.0",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-loop.d.ts","sourceRoot":"","sources":["../src/agent-loop.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,KAAK,gBAAgB,EACrB,WAAW,EASX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EACX,YAAY,EACZ,UAAU,EACV,eAAe,EACf,YAAY,EACZ,SAAS,EACT,aAAa,EACb,oBAAoB,EACpB,eAAe,EAEf,QAAQ,EACR,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAEzE;;;GAGG;AACH,wBAAgB,SAAS,CACxB,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,QAAQ,EAAE,QAAQ,GAChB,WAAW,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC,CAiBzC;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,QAAQ,EAAE,QAAQ,GAChB,WAAW,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC,CAwBzC;AAED,wBAAsB,YAAY,CACjC,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,QAAQ,EAAE,QAAQ,GAChB,OAAO,CAAC,YAAY,EAAE,CAAC,CAiBzB;AAED,wBAAsB,oBAAoB,CACzC,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,QAAQ,EAAE,QAAQ,GAChB,OAAO,CAAC,YAAY,EAAE,CAAC,CAiBzB;
|
|
1
|
+
{"version":3,"file":"agent-loop.d.ts","sourceRoot":"","sources":["../src/agent-loop.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,KAAK,gBAAgB,EACrB,WAAW,EASX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EACX,YAAY,EACZ,UAAU,EACV,eAAe,EACf,YAAY,EACZ,SAAS,EACT,aAAa,EACb,oBAAoB,EACpB,eAAe,EAEf,QAAQ,EACR,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAEzE;;;GAGG;AACH,wBAAgB,SAAS,CACxB,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,QAAQ,EAAE,QAAQ,GAChB,WAAW,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC,CAiBzC;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,QAAQ,EAAE,QAAQ,GAChB,WAAW,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC,CAwBzC;AAED,wBAAsB,YAAY,CACjC,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,QAAQ,EAAE,QAAQ,GAChB,OAAO,CAAC,YAAY,EAAE,CAAC,CAiBzB;AAED,wBAAsB,oBAAoB,CACzC,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,QAAQ,EAAE,QAAQ,GAChB,OAAO,CAAC,YAAY,EAAE,CAAC,CAiBzB;AAojBD,iFAAiF;AACjF,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,EAAE,gBAAgB,GAAG,eAAe,CAAC,CAAC;AAEtF,KAAK,cAAc,GAAG,CAAC,aAAa,EAAE,eAAe,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAiHpF,uCAAuC;AACvC,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACxD,uCAAuC;IACvC,KAAK,EAAE,SAAS,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;IACjC,+DAA+D;IAC/D,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,wDAAwD;IACxD,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC1B;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAQrH"}
|
|
@@ -182,13 +182,6 @@ async function runLoop(initialContext, newMessages, initialConfig, signal, emit,
|
|
|
182
182
|
await emit({ type: "agent_end", messages: newMessages });
|
|
183
183
|
return;
|
|
184
184
|
}
|
|
185
|
-
// A turn-end listener may abort to stop before the next provider request
|
|
186
|
-
// (for example, to compact at a completed tool boundary). Do not dispatch
|
|
187
|
-
// another request with a signal that is already aborted.
|
|
188
|
-
if (signal?.aborted) {
|
|
189
|
-
await emit({ type: "agent_end", messages: newMessages });
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
185
|
explicitContinuation = decision?.action === "continue";
|
|
193
186
|
pendingMessages = (await config.getSteeringMessages?.()) || [];
|
|
194
187
|
if (hasMoreToolCalls || pendingMessages.length > 0) {
|
|
@@ -265,6 +258,36 @@ function withToolChanges(message, { toolsAdded, toolsRemoved }) {
|
|
|
265
258
|
* This is where AgentMessage[] gets transformed to Message[] for the LLM.
|
|
266
259
|
*/
|
|
267
260
|
async function streamAssistantResponse(context, config, signal, emit, streamFunction) {
|
|
261
|
+
// rotom: never dispatch a provider request (or resolve an API key, which may
|
|
262
|
+
// refresh OAuth) with a signal that is already aborted, for example after an
|
|
263
|
+
// abort during tool execution or from a turn-end listener. Settle the turn with
|
|
264
|
+
// the aborted message a provider would return, so the transcript still ends in
|
|
265
|
+
// an aborted assistant message that consumers (UI, Goal) treat as an interruption.
|
|
266
|
+
if (signal?.aborted) {
|
|
267
|
+
const aborted = {
|
|
268
|
+
role: "assistant",
|
|
269
|
+
content: [],
|
|
270
|
+
api: config.model.api,
|
|
271
|
+
provider: config.model.provider,
|
|
272
|
+
model: config.model.id,
|
|
273
|
+
usage: {
|
|
274
|
+
input: 0,
|
|
275
|
+
output: 0,
|
|
276
|
+
cacheRead: 0,
|
|
277
|
+
cacheWrite: 0,
|
|
278
|
+
totalTokens: 0,
|
|
279
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
|
|
280
|
+
},
|
|
281
|
+
stopReason: "aborted",
|
|
282
|
+
errorMessage: "Request was aborted",
|
|
283
|
+
timestamp: Date.now(),
|
|
284
|
+
thinkingLevel: config.reasoning ?? "off",
|
|
285
|
+
};
|
|
286
|
+
context.messages.push(aborted);
|
|
287
|
+
await emit({ type: "message_start", message: { ...aborted } });
|
|
288
|
+
await emit({ type: "message_end", message: aborted });
|
|
289
|
+
return aborted;
|
|
290
|
+
}
|
|
268
291
|
// Apply context transform if configured (AgentMessage[] → AgentMessage[])
|
|
269
292
|
let messages = context.messages;
|
|
270
293
|
if (config.transformContext) {
|