@bingjiang0611/rotom 0.1.24 → 0.1.26
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/observability/index.ts +20 -2
- package/extensions/qoder/messages.mjs +1 -1
- package/extensions/qoder/provider.mjs +14 -6
- package/extensions/qoder/transport.mjs +53 -11
- package/extensions/third-party/node_modules/.package-lock.json +6 -6
- package/extensions/third-party/node_modules/pi-subagents/README.md +17 -0
- package/extensions/third-party/node_modules/pi-subagents/agents/delegate.md +2 -0
- package/extensions/third-party/node_modules/pi-subagents/agents/oracle.md +18 -14
- package/extensions/third-party/node_modules/pi-subagents/agents/reviewer.md +5 -3
- package/extensions/third-party/node_modules/pi-subagents/docs/models.md +1 -1
- package/extensions/third-party/node_modules/pi-subagents/docs/tool-reference.md +2 -2
- package/extensions/third-party/node_modules/pi-subagents/docs/workflows.md +2 -2
- package/extensions/third-party/node_modules/pi-subagents/package.json +1 -1
- package/extensions/third-party/node_modules/pi-subagents/prompts/gather-context-and-clarify.md +1 -1
- package/extensions/third-party/node_modules/pi-subagents/prompts/parallel-research.md +4 -6
- package/extensions/third-party/node_modules/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +8 -8
- package/extensions/third-party/node_modules/pi-subagents/skills/pi-subagents/references/execution-controls.md +5 -5
- package/extensions/third-party/node_modules/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +7 -8
- package/extensions/third-party/node_modules/pi-subagents/src/agents/agents.ts +0 -1
- package/extensions/third-party/node_modules/pi-subagents/src/extension/index.ts +9 -2
- package/extensions/third-party/node_modules/pi-subagents/src/profiles/profiles.ts +1 -2
- package/extensions/third-party/node_modules/pi-subagents/src/runs/background/async-execution.ts +81 -52
- package/extensions/third-party/node_modules/pi-subagents/src/runs/background/process-terminal.ts +13 -0
- package/extensions/third-party/node_modules/pi-subagents/src/runs/background/stale-run-reconciler.ts +7 -3
- package/extensions/third-party/node_modules/sol-pi/UPSTREAM.md +8 -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 +6 -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/node_modules/sol-pi/src/sol-pi/extensions/evidence-preserving-reducer/receipt.ts +79 -16
- package/extensions/third-party/package-lock.json +8 -8
- package/extensions/third-party/package.json +2 -2
- package/extensions/third-party/vendor/README.md +12 -11
- package/extensions/third-party/vendor/pi-subagents-0.52.1-rotom.10.tgz +0 -0
- package/extensions/third-party/vendor/sol-pi-0.1.0-rotom.2.tgz +0 -0
- package/package.json +10 -10
- package/runtime/pi/fork-build.json +24 -24
- 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/dist/api/anthropic-messages.d.ts.map +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +2 -1
- package/runtime/pi/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-ai/dist/utils/error-body.d.ts +8 -0
- package/runtime/pi/node_modules/@earendil-works/pi-ai/dist/utils/error-body.d.ts.map +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-ai/dist/utils/error-body.js +37 -1
- package/runtime/pi/node_modules/@earendil-works/pi-ai/dist/utils/error-body.js.map +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-ai/dist/utils/retry.d.ts +6 -0
- package/runtime/pi/node_modules/@earendil-works/pi-ai/dist/utils/retry.d.ts.map +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-ai/dist/utils/retry.js +34 -0
- package/runtime/pi/node_modules/@earendil-works/pi-ai/dist/utils/retry.js.map +1 -1
- 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/anthropic-messages-H6BRNJYC.js +6 -0
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{azure-openai-responses-KZZFKCXW.js → azure-openai-responses-45AJGMB6.js} +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/bedrock-converse-stream.js +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{chunk-2CKNKV2I.js → chunk-5MTGRVNE.js} +2 -2
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{chunk-ITZNWD4K.js → chunk-7OCND3IM.js} +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/chunk-CTEAMRDY.js +2 -0
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{chunk-3CD5ZAQX.js → chunk-ESL4WJJF.js} +11 -11
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{chunk-XQ3UQBJ2.js → chunk-MXCOAUPD.js} +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{cloudflare-workers-ai-system-one-UTBL2KOF.js → cloudflare-workers-ai-system-one-IEPXKTM7.js} +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{execute-4WILIDZF.js → execute-ULZNGRYF.js} +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{google-generative-ai-KJOKBJM3.js → google-generative-ai-KXRSXWRQ.js} +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{google-vertex-VCLZ36OB.js → google-vertex-CVLJXJIO.js} +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{llama-cpp-classify-FYN623RH.js → llama-cpp-classify-42ZH3VVO.js} +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{openai-codex-responses-ZYGHVE5B.js → openai-codex-responses-L4P7LV62.js} +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{openai-completions-BGCEXFAB.js → openai-completions-ZIOWDPDJ.js} +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{openai-decisions-WVPMQ4JD.js → openai-decisions-L7N23NC7.js} +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{openai-responses-KCCCXI3B.js → openai-responses-XT6CQ4R7.js} +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{openrouter-images-DUPG5DZO.js → openrouter-images-FQ7HEE4T.js} +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{typesafe-system-one-ZSK3RN4B.js → typesafe-system-one-IH2QHGKL.js} +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{virtual-modules-C5BH2VI2.js → virtual-modules-YSF6BJRF.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 +5 -0
- 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 +60 -27
- 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/dist/modes/interactive/components/status-indicator.d.ts +1 -0
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/status-indicator.js +4 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/status-indicator.js.map +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js +37 -4
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.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/docs/json.md +6 -0
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/docs/rpc-extension-ui.md +2 -0
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/docs/settings.md +3 -1
- 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 +5 -5
- package/extensions/third-party/node_modules/pi-subagents/agents/researcher.md +0 -52
- package/extensions/third-party/node_modules/pi-subagents/docs/agents.md +0 -383
- package/extensions/third-party/vendor/pi-subagents-0.52.1-rotom.7.tgz +0 -0
- package/extensions/third-party/vendor/sol-pi-0.1.0-rotom.0.tgz +0 -0
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/anthropic-messages-UIH6DSZT.js +0 -6
- package/runtime/pi/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/chunk-TEPMHNKQ.js +0 -2
- 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
|
@@ -30,9 +30,30 @@ export interface ValidatedReceipt {
|
|
|
30
30
|
readonly evidence: readonly VerifiedEvidence[];
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
export type QuoteRejection = "invalid-kind" | "not-a-string" | "empty" | "too-long" | "not-in-source";
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Why one evidence item was rejected, without its text: the journal may only
|
|
37
|
+
* hold digests, sizes and line numbers, never log or model content.
|
|
38
|
+
*/
|
|
39
|
+
export interface QuoteDiagnostic {
|
|
40
|
+
readonly cause: QuoteRejection;
|
|
41
|
+
readonly evidenceIndex: number;
|
|
42
|
+
readonly evidenceCount: number;
|
|
43
|
+
readonly quoteChars?: number;
|
|
44
|
+
readonly quoteSha256?: string;
|
|
45
|
+
/** Longest leading part of the quote found in the log, and its line. */
|
|
46
|
+
readonly matchedPrefixChars?: number;
|
|
47
|
+
readonly matchedPrefixLine?: number;
|
|
48
|
+
/** Whether the quote would match after removing ANSI escapes from the log. */
|
|
49
|
+
readonly matchesWithoutAnsi?: boolean;
|
|
50
|
+
/** Whether the quote would match after collapsing whitespace runs in both. */
|
|
51
|
+
readonly matchesWithCollapsedWhitespace?: boolean;
|
|
52
|
+
}
|
|
53
|
+
|
|
33
54
|
export type ReceiptValidation =
|
|
34
55
|
| { readonly ok: true; readonly value: ValidatedReceipt }
|
|
35
|
-
| { readonly ok: false; readonly reason: string };
|
|
56
|
+
| { readonly ok: false; readonly reason: string; readonly quoteDiagnostic?: QuoteDiagnostic };
|
|
36
57
|
|
|
37
58
|
export function reducerInstructions(): string {
|
|
38
59
|
return [
|
|
@@ -74,6 +95,50 @@ function lineNumberOf(body: string, quote: string): number | undefined {
|
|
|
74
95
|
return line;
|
|
75
96
|
}
|
|
76
97
|
|
|
98
|
+
const ALLOWED_KINDS = new Set<EvidenceKind>(["fatal", "failure", "warning", "target", "summary"]);
|
|
99
|
+
const ANSI_ESCAPE = /\u001b\[[0-9;?]*[ -/]*[@-~]/gu;
|
|
100
|
+
|
|
101
|
+
function collapseWhitespace(value: string): string {
|
|
102
|
+
return value.replace(/\s+/gu, " ").trim();
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function quoteRejection(kind: unknown, quote: unknown, body: string): QuoteRejection | undefined {
|
|
106
|
+
if (typeof kind !== "string" || !ALLOWED_KINDS.has(kind as EvidenceKind)) return "invalid-kind";
|
|
107
|
+
if (typeof quote !== "string") return "not-a-string";
|
|
108
|
+
if (quote.length < 1) return "empty";
|
|
109
|
+
if (quote.length > MAX_QUOTE_CHARS) return "too-long";
|
|
110
|
+
if (!body.includes(quote)) return "not-in-source";
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function quoteDiagnostic(
|
|
115
|
+
cause: QuoteRejection,
|
|
116
|
+
quote: unknown,
|
|
117
|
+
body: string,
|
|
118
|
+
evidenceIndex: number,
|
|
119
|
+
evidenceCount: number,
|
|
120
|
+
): QuoteDiagnostic {
|
|
121
|
+
const base = { cause, evidenceIndex, evidenceCount };
|
|
122
|
+
if (typeof quote !== "string") return base;
|
|
123
|
+
const sized = { ...base, quoteChars: quote.length, quoteSha256: sha256(quote) };
|
|
124
|
+
if (cause !== "not-in-source") return sized;
|
|
125
|
+
// Prefix presence is monotonic, so a binary search finds the longest one.
|
|
126
|
+
let found = 0;
|
|
127
|
+
let missing = quote.length;
|
|
128
|
+
while (missing - found > 1) {
|
|
129
|
+
const middle = Math.floor((found + missing) / 2);
|
|
130
|
+
if (body.includes(quote.slice(0, middle))) found = middle;
|
|
131
|
+
else missing = middle;
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
...sized,
|
|
135
|
+
matchedPrefixChars: found,
|
|
136
|
+
matchedPrefixLine: found > 0 ? lineNumberOf(body, quote.slice(0, found)) : undefined,
|
|
137
|
+
matchesWithoutAnsi: body.replace(ANSI_ESCAPE, "").includes(quote),
|
|
138
|
+
matchesWithCollapsedWhitespace: collapseWhitespace(body).includes(collapseWhitespace(quote)),
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
|
|
77
142
|
/**
|
|
78
143
|
* Accept a receipt only when every claim in it can be checked against the
|
|
79
144
|
* archived log: right schema, right source hash, status that matches the
|
|
@@ -104,31 +169,29 @@ export function validateReceipt(
|
|
|
104
169
|
) {
|
|
105
170
|
return { ok: false, reason: "schema-mismatch" };
|
|
106
171
|
}
|
|
107
|
-
const allowedKinds = new Set<EvidenceKind>(["fatal", "failure", "warning", "target", "summary"]);
|
|
108
172
|
const evidence: VerifiedEvidence[] = [];
|
|
109
173
|
const seen = new Set<string>();
|
|
110
|
-
for (const item of evidenceValue) {
|
|
174
|
+
for (const [index, item] of evidenceValue.entries()) {
|
|
111
175
|
const kind = recordValue(item, "kind");
|
|
112
176
|
const quote = recordValue(item, "quote");
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
) {
|
|
121
|
-
return { ok: false, reason: "unverifiable-quote" };
|
|
177
|
+
const rejection = quoteRejection(kind, quote, body);
|
|
178
|
+
if (rejection !== undefined) {
|
|
179
|
+
return {
|
|
180
|
+
ok: false,
|
|
181
|
+
reason: "unverifiable-quote",
|
|
182
|
+
quoteDiagnostic: quoteDiagnostic(rejection, quote, body, index, evidenceValue.length),
|
|
183
|
+
};
|
|
122
184
|
}
|
|
123
185
|
const evidenceKind = kind as EvidenceKind;
|
|
124
|
-
const
|
|
186
|
+
const evidenceQuote = quote as string;
|
|
187
|
+
const key = `${evidenceKind}\0${evidenceQuote}`;
|
|
125
188
|
if (seen.has(key)) continue;
|
|
126
189
|
seen.add(key);
|
|
127
190
|
evidence.push({
|
|
128
191
|
kind: evidenceKind,
|
|
129
|
-
line: lineNumberOf(body,
|
|
130
|
-
quote,
|
|
131
|
-
quoteSha256: sha256(
|
|
192
|
+
line: lineNumberOf(body, evidenceQuote),
|
|
193
|
+
quote: evidenceQuote,
|
|
194
|
+
quoteSha256: sha256(evidenceQuote),
|
|
132
195
|
});
|
|
133
196
|
}
|
|
134
197
|
// A failing log that reads as a failure must carry failure evidence, or the
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
"@juicesharp/rpiv-ask-user-question": "2.6.2",
|
|
11
11
|
"@narumitw/pi-goal": "0.54.4-rotom.8",
|
|
12
12
|
"pi-context-view": "0.7.1",
|
|
13
|
-
"pi-subagents": "0.52.1-rotom.
|
|
14
|
-
"sol-pi": "0.1.0-rotom.
|
|
13
|
+
"pi-subagents": "0.52.1-rotom.10",
|
|
14
|
+
"sol-pi": "0.1.0-rotom.2"
|
|
15
15
|
}
|
|
16
16
|
},
|
|
17
17
|
"node_modules/@injaneity/pi-computer-use": {
|
|
@@ -142,9 +142,9 @@
|
|
|
142
142
|
}
|
|
143
143
|
},
|
|
144
144
|
"node_modules/pi-subagents": {
|
|
145
|
-
"version": "0.52.1-rotom.
|
|
146
|
-
"resolved": "file:vendor/pi-subagents-0.52.1-rotom.
|
|
147
|
-
"integrity": "sha512-
|
|
145
|
+
"version": "0.52.1-rotom.10",
|
|
146
|
+
"resolved": "file:vendor/pi-subagents-0.52.1-rotom.10.tgz",
|
|
147
|
+
"integrity": "sha512-5mXSC3zXponiWE+NP16rJ4zo1j1mHS04bbFO+fOc31RVVHA8rKvZ3nvemDOHT9qCBqINAiRcXJuhpZCNNNeoHg==",
|
|
148
148
|
"license": "MIT",
|
|
149
149
|
"dependencies": {
|
|
150
150
|
"acorn": "8.18.0",
|
|
@@ -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.2",
|
|
181
|
+
"resolved": "file:vendor/sol-pi-0.1.0-rotom.2.tgz",
|
|
182
|
+
"integrity": "sha512-9SOaxYtxnfbnU+IByPpz8dmk95eDsGs4dvi1sq9i2g3VrGxIok0sGatlhPLhiOUgETWZyRBtRHULCm+yZiOu2g==",
|
|
183
183
|
"license": "MIT",
|
|
184
184
|
"engines": {
|
|
185
185
|
"node": ">=22.19.0"
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# Locked Subagent distribution
|
|
2
2
|
|
|
3
|
-
The default product selects **`pi-subagents@0.52.1-rotom.
|
|
3
|
+
The default product selects **`pi-subagents@0.52.1-rotom.10`**, independently maintained in the repository's `packages/rotom-subagents/`. New builds consume its reviewed archive, not installed source or a patch stack. This is a Subagent fork, not a Pi fork.
|
|
4
4
|
|
|
5
|
-
- Archive: `pi-subagents-0.52.1-rotom.
|
|
6
|
-
- SHA256: `
|
|
7
|
-
- SHA512 SRI: `sha512-
|
|
8
|
-
- Source digest: `
|
|
5
|
+
- Archive: `pi-subagents-0.52.1-rotom.10.tgz`
|
|
6
|
+
- SHA256: `aee008364cb159c4424678c37a2f77e75a78d292937f0354f318ce483fd5dede`
|
|
7
|
+
- SHA512 SRI: `sha512-5mXSC3zXponiWE+NP16rJ4zo1j1mHS04bbFO+fOc31RVVHA8rKvZ3nvemDOHT9qCBqINAiRcXJuhpZCNNNeoHg==`
|
|
8
|
+
- Source digest: `3474af84fa16bf546df3438066571a51b25698b099f53f8c50ddf34ffe291070`
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
`.rotom.10` makes the builtin roles launchable in owned scope: `delegate` and `oracle`/`advisor` declare empty ambient extensions and fresh default context (oracle now works from a parent-written decision brief), `reviewer` gains prompt-restricted read-only `bash`, and `researcher` is removed because its web tools do not exist in rotom. `.rotom.9` pauses the retiring runtime's live runners and awaits close finalization before cleanup on quit/reload/session replacement/disposal. A result arriving before the native close callback retains pending only while this process owns the matching live observer; registration is not an exit proof. It never signals historical PIDs or repairs missing old-run proof. Retired schedule execution and automatic goal-mission continuation remain disabled, including legacy opt-out sessions; old data remains untouched. Targeted status uses bounded current-session output and native recovery preflight, which is not launch authorization. Shared legacy mission/inspector readers remain. Product schema and prompt guidance are scoped by the product wrapper; raw execution still passes the original fences.
|
|
11
11
|
- Upstream: <https://github.com/nicobailon/pi-subagents>
|
|
12
12
|
- License: MIT, Copyright (c) 2026 Nico Bailon. Original notice remains in `package/LICENSE`; provenance and maintenance notes are in `package/UPSTREAM.md`.
|
|
13
13
|
- Source baseline: validated `0.52.1-dev-agent-owned-flat.7`; 213 TS and four existing mjs files retained byte-for-byte. The component has independent metadata, lockfile, tests and packaging. In `.rotom.1`, worker/scout/reviewer declare empty ambient extensions and fresh default context without expanding tools; explicit user/project overrides remain effective. `.rotom.3` explicitly loads the verified product Qoder provider for Qoder child models, preserving ambient isolation, tool ceilings, model choice and launch identity. Other custom providers still require explicit child configuration. Offline CLI/RPC coverage does not claim live inference acceptance.
|
|
@@ -18,7 +18,7 @@ The former `pi-subagents-0.52.1-rotom.0.tgz` and `pi-subagents-0.52.1-dev-agent-
|
|
|
18
18
|
|
|
19
19
|
Do not use `--replace-registry-host=always`: npm 11 rewrites even local archive URLs into registry URLs. The product launcher now selects `owned-process-groups-v2` for new sessions and anchors its store under `~/.local/state/rotom/subagent-store`; see `node_modules/pi-subagents/docs/owned-execution.md` for the admitted topologies. That default neither migrates live sessions nor authorizes replay, and unknown ownership remains fenced. Unselected upstream tools/templates/skills remain disabled by product policy.
|
|
20
20
|
|
|
21
|
-
The
|
|
21
|
+
The `.rotom.5` baseline also included the terminal-projection fix: projection failure preserves unknown and observed closure evidence, never authorizing replay. It is subsequent development and is **not** included in the already frozen rotom 0.1.17 artifact. Component unit/SDK/type checks and current product gates are separate from the unavailable historical `test:compat` discovery path documented in the component README.
|
|
22
22
|
|
|
23
23
|
## Locked Computer Use distribution
|
|
24
24
|
|
|
@@ -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.2`**, 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.2.tgz`
|
|
52
|
+
- SHA512 SRI: `sha512-9SOaxYtxnfbnU+IByPpz8dmk95eDsGs4dvi1sq9i2g3VrGxIok0sGatlhPLhiOUgETWZyRBtRHULCm+yZiOu2g==`
|
|
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`. `.rotom.2` adds a content-free `quoteDiagnostic` (cause, index, length, SHA-256, matched prefix and line, ANSI/whitespace near-match flags) to `unverifiable-quote` journal entries; acceptance is unchanged. The `.rotom.0` (rotom 0.1.24) and `.rotom.1` (rotom 0.1.25) archives are removed here.
|
|
55
|
+
- Tests: `.rotom.2` passes upstream's suite plus the rotom usage and quote-diagnostic tests, 168/168, against both the Pi `1.3.0-rotom.2` packages and the pinned upstream Pi `0.85.1` devDependencies (`.rotom.1`: 167/167; `.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
|
|
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.26",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Personal coding agent built on Pi, with explicit tools and runtime contracts",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -88,22 +88,22 @@
|
|
|
88
88
|
"extensions/third-party/package.json",
|
|
89
89
|
"extensions/third-party/package-lock.json",
|
|
90
90
|
"extensions/third-party/vendor/README.md",
|
|
91
|
-
"extensions/third-party/vendor/pi-subagents-0.52.1-rotom.
|
|
91
|
+
"extensions/third-party/vendor/pi-subagents-0.52.1-rotom.10.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.2.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": "
|
|
6
|
-
"builderSha256": "
|
|
5
|
+
"sourceSha256": "4d29bfc5fb6e95f198de675f2ebcaed9e1f4a6b730c0a480ec0f057fc954ada6",
|
|
6
|
+
"builderSha256": "d18bb9a81cdcbec7959d074c3b781982e0f81bc3cb844d5a8fe8d2a513a3ff60",
|
|
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-S/VLSqA9jFw4YR/mIsK2CjpUIxFiUN8pTuAPojSJMPB9dTyj8W4KqTypB2gSUkIXqWSYvicUjrA5SOwLlIqz3g=="
|
|
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-C+amXGgzVvJ3lQ17dSOfpjKzsyA6dvOR+WmMKEMFndG1Ap1cdO7i7gAHd09UG6h2A2vT2mY8ctfDCP4ijSiZVg=="
|
|
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-D5+gwzxsaEvFbaZqYl1gF2C3VniKbbMlLBBLGvxb1SrjU2Kb5LEj7GrFk8YO8VEd9f3lbom33XRIdrhd3U4HLA=="
|
|
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-c0LiTpRmf4ia7PaEDCJFGF+vs94pl9R0BoNHwrqhqrwR1HdOGGFF8oKptBF4AuebZF/MW4ukPY7PJcHy5EX5bw=="
|
|
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-LBakjwHQ8hGkQc9DCGowRTyD7PKcw9/RwpboNq0DrTW/CrOpM0mtTpSIber1C/q+dgsNlcSAZijwpnRyLg+L3A=="
|
|
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-Fph1A8eYjzq8hc3NrshPKNCgX84X4zs29COkLaDZYL8dhzUubL5c2YrBz0o1NtXgP78U2GtrxdXZV5u+JrYgSg=="
|
|
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-DGjn1daN0S9yJnZS/TTRc5jlYZXo80RaqIVfrkbOW+kSQp+J6OSn1rKRkF1o0Uhw0ORfGqfEHjsz2sHfxqkmpw=="
|
|
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-c0LiTpRmf4ia7PaEDCJFGF+vs94pl9R0BoNHwrqhqrwR1HdOGGFF8oKptBF4AuebZF/MW4ukPY7PJcHy5EX5bw==",
|
|
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-C+amXGgzVvJ3lQ17dSOfpjKzsyA6dvOR+WmMKEMFndG1Ap1cdO7i7gAHd09UG6h2A2vT2mY8ctfDCP4ijSiZVg==",
|
|
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-LBakjwHQ8hGkQc9DCGowRTyD7PKcw9/RwpboNq0DrTW/CrOpM0mtTpSIber1C/q+dgsNlcSAZijwpnRyLg+L3A==",
|
|
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-DGjn1daN0S9yJnZS/TTRc5jlYZXo80RaqIVfrkbOW+kSQp+J6OSn1rKRkF1o0Uhw0ORfGqfEHjsz2sHfxqkmpw==",
|
|
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-Fph1A8eYjzq8hc3NrshPKNCgX84X4zs29COkLaDZYL8dhzUubL5c2YrBz0o1NtXgP78U2GtrxdXZV5u+JrYgSg==",
|
|
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-S/VLSqA9jFw4YR/mIsK2CjpUIxFiUN8pTuAPojSJMPB9dTyj8W4KqTypB2gSUkIXqWSYvicUjrA5SOwLlIqz3g==",
|
|
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-D5+gwzxsaEvFbaZqYl1gF2C3VniKbbMlLBBLGvxb1SrjU2Kb5LEj7GrFk8YO8VEd9f3lbom33XRIdrhd3U4HLA==",
|
|
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) {
|