@mono-agent/agent-app 0.20.7 → 0.20.9
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 +22 -1
- package/dist/app-controller-responder.d.ts.map +1 -1
- package/dist/app-controller-responder.js +11 -0
- package/dist/app-controller-responder.js.map +1 -1
- package/dist/channel-drivers/tui.d.ts +6 -0
- package/dist/channel-drivers/tui.d.ts.map +1 -1
- package/dist/channel-drivers/tui.js +42 -19
- package/dist/channel-drivers/tui.js.map +1 -1
- package/dist/codex-model-catalog.d.ts +15 -0
- package/dist/codex-model-catalog.d.ts.map +1 -0
- package/dist/codex-model-catalog.js +220 -0
- package/dist/codex-model-catalog.js.map +1 -0
- package/dist/conversation-title.d.ts +15 -0
- package/dist/conversation-title.d.ts.map +1 -0
- package/dist/conversation-title.js +86 -0
- package/dist/conversation-title.js.map +1 -0
- package/dist/model-effort-capabilities.d.ts +19 -0
- package/dist/model-effort-capabilities.d.ts.map +1 -0
- package/dist/model-effort-capabilities.js +64 -0
- package/dist/model-effort-capabilities.js.map +1 -0
- package/dist/modules/known-tools.d.ts +1 -1
- package/dist/modules/known-tools.d.ts.map +1 -1
- package/dist/modules/known-tools.js +1 -0
- package/dist/modules/known-tools.js.map +1 -1
- package/dist/pi-oauth-login.d.ts +1 -0
- package/dist/pi-oauth-login.d.ts.map +1 -1
- package/dist/pi-oauth-login.js +1 -0
- package/dist/pi-oauth-login.js.map +1 -1
- package/dist/process-jobs-service.js +45 -4
- package/dist/process-jobs-service.js.map +1 -1
- package/dist/wizard/model-discovery.d.ts +2 -10
- package/dist/wizard/model-discovery.d.ts.map +1 -1
- package/dist/wizard/model-discovery.js +2 -192
- package/dist/wizard/model-discovery.js.map +1 -1
- package/dist/wizard/prompts.d.ts.map +1 -1
- package/dist/wizard/prompts.js +1 -0
- package/dist/wizard/prompts.js.map +1 -1
- package/package.json +17 -16
- package/skills/mono-agent-composer/references/feature-coverage.md +1 -1
- package/skills/mono-agent-composer/references/package-map.md +9 -7
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { createInterface } from "node:readline";
|
|
4
|
+
import { credentialNeutralProviderStatusEnvironment } from "./provider-setup.js";
|
|
5
|
+
const SUPPORTED_EFFORTS = new Set([
|
|
6
|
+
"none",
|
|
7
|
+
"minimal",
|
|
8
|
+
"low",
|
|
9
|
+
"medium",
|
|
10
|
+
"high",
|
|
11
|
+
"xhigh",
|
|
12
|
+
"max",
|
|
13
|
+
"ultra",
|
|
14
|
+
]);
|
|
15
|
+
function isRecord(value) {
|
|
16
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
17
|
+
}
|
|
18
|
+
function boundedCatalogText(value, limit) {
|
|
19
|
+
const normalized = typeof value === "string"
|
|
20
|
+
? value.replace(/[\u0000-\u001f\u007f]/gu, " ").replace(/\s+/gu, " ").trim()
|
|
21
|
+
: "";
|
|
22
|
+
return normalized.length <= limit ? normalized : `${normalized.slice(0, Math.max(0, limit - 1))}…`;
|
|
23
|
+
}
|
|
24
|
+
function safeDiscoveryProcessEnv(source = process.env) {
|
|
25
|
+
const env = {};
|
|
26
|
+
for (const key of [
|
|
27
|
+
"PATH",
|
|
28
|
+
"LANG",
|
|
29
|
+
"LC_ALL",
|
|
30
|
+
"LC_CTYPE",
|
|
31
|
+
"SHELL",
|
|
32
|
+
"TMPDIR",
|
|
33
|
+
"TMP",
|
|
34
|
+
"TEMP",
|
|
35
|
+
"SystemRoot",
|
|
36
|
+
"WINDIR",
|
|
37
|
+
"ComSpec",
|
|
38
|
+
"PATHEXT",
|
|
39
|
+
]) {
|
|
40
|
+
const value = source[key];
|
|
41
|
+
if (typeof value === "string" && value.length > 0)
|
|
42
|
+
env[key] = value;
|
|
43
|
+
}
|
|
44
|
+
return env;
|
|
45
|
+
}
|
|
46
|
+
/** Exact non-secret environment used by live Codex model/list discovery. */
|
|
47
|
+
export function codexModelDiscoveryEnvironment(persistedEnv = {}, shellEnv = process.env) {
|
|
48
|
+
const neutral = credentialNeutralProviderStatusEnvironment(shellEnv, persistedEnv);
|
|
49
|
+
return {
|
|
50
|
+
...safeDiscoveryProcessEnv(shellEnv),
|
|
51
|
+
HOME: neutral.HOME ?? homedir(),
|
|
52
|
+
...(neutral.CODEX_HOME === undefined ? {} : { CODEX_HOME: neutral.CODEX_HOME }),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export function normalizeEffort(value) {
|
|
56
|
+
const normalized = value === "off" ? "none" : typeof value === "string" ? value : "";
|
|
57
|
+
return SUPPORTED_EFFORTS.has(normalized) ? normalized : undefined;
|
|
58
|
+
}
|
|
59
|
+
export function normalizeEfforts(values) {
|
|
60
|
+
return [...new Set(values.map(normalizeEffort).filter((value) => value !== undefined))];
|
|
61
|
+
}
|
|
62
|
+
export function normalizeCodexCatalog(rows) {
|
|
63
|
+
const result = [];
|
|
64
|
+
const seen = new Set();
|
|
65
|
+
for (const raw of rows.slice(0, 1_000)) {
|
|
66
|
+
if (!isRecord(raw))
|
|
67
|
+
continue;
|
|
68
|
+
const id = typeof raw.id === "string" ? raw.id.trim() : "";
|
|
69
|
+
if (id.length === 0 || id.length > 160 || seen.has(id))
|
|
70
|
+
continue;
|
|
71
|
+
const supportedRows = Array.isArray(raw.supportedReasoningEfforts)
|
|
72
|
+
? raw.supportedReasoningEfforts.map((entry) => isRecord(entry) ? entry.reasoningEffort : entry)
|
|
73
|
+
: [];
|
|
74
|
+
const supportedEfforts = normalizeEfforts(supportedRows);
|
|
75
|
+
const normalizedDefault = normalizeEffort(raw.defaultReasoningEffort);
|
|
76
|
+
seen.add(id);
|
|
77
|
+
result.push({
|
|
78
|
+
id,
|
|
79
|
+
displayName: boundedCatalogText(raw.displayName, 160) || id,
|
|
80
|
+
supportedEfforts,
|
|
81
|
+
...(normalizedDefault === undefined ? {} : { defaultEffort: normalizedDefault }),
|
|
82
|
+
...(typeof raw.isDefault === "boolean" ? { isDefault: raw.isDefault } : {}),
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
export async function requestCodexModelList(timeoutMs, environment, abortSignal) {
|
|
88
|
+
const child = spawn("codex", ["app-server", "--listen", "stdio://", "-c", "project_doc_max_bytes=0"], {
|
|
89
|
+
stdio: ["pipe", "pipe", "ignore"],
|
|
90
|
+
env: { ...environment },
|
|
91
|
+
});
|
|
92
|
+
const lines = createInterface({ input: child.stdout });
|
|
93
|
+
return await new Promise((resolveResult, rejectResult) => {
|
|
94
|
+
let settled = false;
|
|
95
|
+
let timer;
|
|
96
|
+
const ignoreStdinError = () => undefined;
|
|
97
|
+
child.stdin.on("error", ignoreStdinError);
|
|
98
|
+
const childClosedWithin = async (milliseconds) => {
|
|
99
|
+
if (child.exitCode !== null || child.signalCode !== null)
|
|
100
|
+
return true;
|
|
101
|
+
return await new Promise((resolveClosed) => {
|
|
102
|
+
const onClose = () => {
|
|
103
|
+
clearTimeout(closeTimer);
|
|
104
|
+
resolveClosed(true);
|
|
105
|
+
};
|
|
106
|
+
const closeTimer = setTimeout(() => {
|
|
107
|
+
child.off("close", onClose);
|
|
108
|
+
resolveClosed(false);
|
|
109
|
+
}, milliseconds);
|
|
110
|
+
closeTimer.unref?.();
|
|
111
|
+
child.once("close", onClose);
|
|
112
|
+
});
|
|
113
|
+
};
|
|
114
|
+
const stopChild = async () => {
|
|
115
|
+
lines.removeAllListeners("line");
|
|
116
|
+
lines.close();
|
|
117
|
+
try {
|
|
118
|
+
child.stdin.end();
|
|
119
|
+
}
|
|
120
|
+
catch { /* best effort */ }
|
|
121
|
+
if (await childClosedWithin(25))
|
|
122
|
+
return;
|
|
123
|
+
try {
|
|
124
|
+
child.kill("SIGTERM");
|
|
125
|
+
}
|
|
126
|
+
catch { /* best effort */ }
|
|
127
|
+
if (await childClosedWithin(250))
|
|
128
|
+
return;
|
|
129
|
+
try {
|
|
130
|
+
child.kill("SIGKILL");
|
|
131
|
+
}
|
|
132
|
+
catch { /* best effort */ }
|
|
133
|
+
if (!await childClosedWithin(250)) {
|
|
134
|
+
child.stdin.destroy();
|
|
135
|
+
child.stdout.destroy();
|
|
136
|
+
child.unref();
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
let settle;
|
|
140
|
+
const onChildError = () => void settle(new Error("Codex app-server is unavailable."));
|
|
141
|
+
const onChildClose = () => void settle(new Error("Codex app-server closed before returning models."));
|
|
142
|
+
const onAbort = () => {
|
|
143
|
+
const error = new Error("Codex model catalog discovery was interrupted.");
|
|
144
|
+
error.name = "AbortError";
|
|
145
|
+
void settle(error);
|
|
146
|
+
};
|
|
147
|
+
settle = async (error, models = []) => {
|
|
148
|
+
if (settled)
|
|
149
|
+
return;
|
|
150
|
+
settled = true;
|
|
151
|
+
clearTimeout(timer);
|
|
152
|
+
child.off("error", onChildError);
|
|
153
|
+
child.off("close", onChildClose);
|
|
154
|
+
abortSignal?.removeEventListener("abort", onAbort);
|
|
155
|
+
await stopChild();
|
|
156
|
+
child.stdin.off("error", ignoreStdinError);
|
|
157
|
+
if (error === undefined)
|
|
158
|
+
resolveResult(models);
|
|
159
|
+
else
|
|
160
|
+
rejectResult(error);
|
|
161
|
+
};
|
|
162
|
+
const writeMessage = (message) => {
|
|
163
|
+
if (settled || child.stdin.destroyed || child.stdin.writableEnded)
|
|
164
|
+
return;
|
|
165
|
+
try {
|
|
166
|
+
child.stdin.write(`${JSON.stringify(message)}\n`);
|
|
167
|
+
}
|
|
168
|
+
catch { /* bounded shutdown handles the process */ }
|
|
169
|
+
};
|
|
170
|
+
timer = setTimeout(() => void settle(new Error("Codex model catalog discovery timed out.")), Math.max(250, Math.min(10_000, timeoutMs)));
|
|
171
|
+
timer.unref?.();
|
|
172
|
+
child.once("error", onChildError);
|
|
173
|
+
child.once("close", onChildClose);
|
|
174
|
+
abortSignal?.addEventListener("abort", onAbort, { once: true });
|
|
175
|
+
lines.on("line", (line) => {
|
|
176
|
+
let message;
|
|
177
|
+
try {
|
|
178
|
+
message = JSON.parse(line);
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
if (!isRecord(message))
|
|
184
|
+
return;
|
|
185
|
+
if (typeof message.method === "string" && (typeof message.id === "string" || typeof message.id === "number")) {
|
|
186
|
+
writeMessage({
|
|
187
|
+
id: message.id,
|
|
188
|
+
error: { code: -32601, message: "Model catalog discovery does not support server requests." },
|
|
189
|
+
});
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
if (message.id === 1 && isRecord(message.result)) {
|
|
193
|
+
writeMessage({
|
|
194
|
+
id: 2,
|
|
195
|
+
method: "model/list",
|
|
196
|
+
params: { includeHidden: false, limit: 1_000 },
|
|
197
|
+
});
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
if (message.id !== 2)
|
|
201
|
+
return;
|
|
202
|
+
if (!isRecord(message.result) || !Array.isArray(message.result.data)) {
|
|
203
|
+
void settle(new Error("Codex app-server returned an invalid model catalog."));
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
void settle(undefined, normalizeCodexCatalog(message.result.data));
|
|
207
|
+
});
|
|
208
|
+
writeMessage({
|
|
209
|
+
id: 1,
|
|
210
|
+
method: "initialize",
|
|
211
|
+
params: {
|
|
212
|
+
clientInfo: { name: "mono-agent", title: "mono-agent", version: "0" },
|
|
213
|
+
capabilities: { experimentalApi: true },
|
|
214
|
+
},
|
|
215
|
+
});
|
|
216
|
+
if (abortSignal?.aborted === true)
|
|
217
|
+
onAbort();
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=codex-model-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-model-catalog.js","sourceRoot":"","sources":["../src/codex-model-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAIhD,OAAO,EAAE,0CAA0C,EAAE,MAAM,qBAAqB,CAAC;AAUjF,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAc;IAC7C,MAAM;IACN,SAAS;IACT,KAAK;IACL,QAAQ;IACR,MAAM;IACN,OAAO;IACP,KAAK;IACL,OAAO;CACR,CAAC,CAAC;AAEH,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc,EAAE,KAAa;IACvD,MAAM,UAAU,GAAG,OAAO,KAAK,KAAK,QAAQ;QAC1C,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE;QAC5E,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AACrG,CAAC;AAED,SAAS,uBAAuB,CAC9B,SAAuD,OAAO,CAAC,GAAG;IAElE,MAAM,GAAG,GAAuC,EAAE,CAAC;IACnD,KAAK,MAAM,GAAG,IAAI;QAChB,MAAM;QACN,MAAM;QACN,QAAQ;QACR,UAAU;QACV,OAAO;QACP,QAAQ;QACR,KAAK;QACL,MAAM;QACN,YAAY;QACZ,QAAQ;QACR,SAAS;QACT,SAAS;KACV,EAAE,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACtE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,8BAA8B,CAC5C,eAA6D,EAAE,EAC/D,WAAyD,OAAO,CAAC,GAAG;IAEpE,MAAM,OAAO,GAAG,0CAA0C,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACnF,OAAO;QACL,GAAG,uBAAuB,CAAC,QAAQ,CAAC;QACpC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,OAAO,EAAE;QAC/B,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;KAChF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,MAAM,UAAU,GAAG,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACrF,OAAO,iBAAiB,CAAC,GAAG,CAAC,UAAyB,CAAC,CAAC,CAAC,CAAC,UAAyB,CAAC,CAAC,CAAC,SAAS,CAAC;AAClG,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAA0B;IACzD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAwB,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC;AAChH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAwB;IAC5D,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,SAAS;QAC7B,MAAM,EAAE,GAAG,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,SAAS;QACjE,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;YAChE,CAAC,CAAC,GAAG,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC;YAC/F,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;QACzD,MAAM,iBAAiB,GAAG,eAAe,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACtE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,MAAM,CAAC,IAAI,CAAC;YACV,EAAE;YACF,WAAW,EAAE,kBAAkB,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,EAAE;YAC3D,gBAAgB;YAChB,GAAG,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,iBAAiB,EAAE,CAAC;YAChF,GAAG,CAAC,OAAO,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5E,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,SAAiB,EACjB,WAAyD,EACzD,WAAyB;IAEzB,MAAM,KAAK,GAAG,KAAK,CACjB,OAAO,EACP,CAAC,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,yBAAyB,CAAC,EACvE;QACE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC;QACjC,GAAG,EAAE,EAAE,GAAG,WAAW,EAAE;KACxB,CACF,CAAC;IACF,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACvD,OAAO,MAAM,IAAI,OAAO,CAAsB,CAAC,aAAa,EAAE,YAAY,EAAE,EAAE;QAC5E,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,KAAqB,CAAC;QAC1B,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC;QACzC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QAC1C,MAAM,iBAAiB,GAAG,KAAK,EAAE,YAAoB,EAAoB,EAAE;YACzE,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YACtE,OAAO,MAAM,IAAI,OAAO,CAAU,CAAC,aAAa,EAAE,EAAE;gBAClD,MAAM,OAAO,GAAG,GAAG,EAAE;oBACnB,YAAY,CAAC,UAAU,CAAC,CAAC;oBACzB,aAAa,CAAC,IAAI,CAAC,CAAC;gBACtB,CAAC,CAAC;gBACF,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE;oBACjC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;oBAC5B,aAAa,CAAC,KAAK,CAAC,CAAC;gBACvB,CAAC,EAAE,YAAY,CAAC,CAAC;gBACjB,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;gBACrB,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QACF,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;YAC3B,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YACjC,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,IAAI,CAAC;gBAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;YACtD,IAAI,MAAM,iBAAiB,CAAC,EAAE,CAAC;gBAAE,OAAO;YACxC,IAAI,CAAC;gBAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;YAC1D,IAAI,MAAM,iBAAiB,CAAC,GAAG,CAAC;gBAAE,OAAO;YACzC,IAAI,CAAC;gBAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;YAC1D,IAAI,CAAC,MAAM,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBACtB,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACvB,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,CAAC;QACH,CAAC,CAAC;QACF,IAAI,MAAkF,CAAC;QACvF,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC,CAAC;QACtF,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC,CAAC;QACtG,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAC1E,KAAK,CAAC,IAAI,GAAG,YAAY,CAAC;YAC1B,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC;QACF,MAAM,GAAG,KAAK,EAAE,KAAwB,EAAE,SAA8B,EAAE,EAAE,EAAE;YAC5E,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YACjC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YACjC,WAAW,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACnD,MAAM,SAAS,EAAE,CAAC;YAClB,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;YAC3C,IAAI,KAAK,KAAK,SAAS;gBAAE,aAAa,CAAC,MAAM,CAAC,CAAC;;gBAC1C,YAAY,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC,CAAC;QACF,MAAM,YAAY,GAAG,CAAC,OAAgB,EAAE,EAAE;YACxC,IAAI,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,aAAa;gBAAE,OAAO;YAC1E,IAAI,CAAC;gBAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,0CAA0C,CAAC,CAAC;QACjH,CAAC,CAAC;QACF,KAAK,GAAG,UAAU,CAChB,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC,EACxE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAC3C,CAAC;QACF,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAClC,WAAW,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,OAAgB,CAAC;YACrB,IAAI,CAAC;gBACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO;YACT,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,OAAO;YAC/B,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC;gBAC7G,YAAY,CAAC;oBACX,EAAE,EAAE,OAAO,CAAC,EAAE;oBACd,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,2DAA2D,EAAE;iBAC9F,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,IAAI,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjD,YAAY,CAAC;oBACX,EAAE,EAAE,CAAC;oBACL,MAAM,EAAE,YAAY;oBACpB,MAAM,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;iBAC/C,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,IAAI,OAAO,CAAC,EAAE,KAAK,CAAC;gBAAE,OAAO;YAC7B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrE,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC,CAAC;gBAC9E,OAAO;YACT,CAAC;YACD,KAAK,MAAM,CAAC,SAAS,EAAE,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QACH,YAAY,CAAC;YACX,EAAE,EAAE,CAAC;YACL,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE;gBACN,UAAU,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,EAAE;gBACrE,YAAY,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE;aACxC;SACF,CAAC,CAAC;QACH,IAAI,WAAW,EAAE,OAAO,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { ToolPolicyInput } from "@mono-agent/agent-harness";
|
|
3
|
+
import type { RuntimeOptionsExtension } from "./runtime-option-extensions.js";
|
|
4
|
+
export declare const SET_CONVERSATION_TITLE_MCP_SERVER_NAME = "mono-agent-conversation-title";
|
|
5
|
+
export declare const SET_CONVERSATION_TITLE_TOOL_NAME = "SetConversationTitle";
|
|
6
|
+
export declare const SET_CONVERSATION_TITLE_MAX_CHARACTERS = 80;
|
|
7
|
+
type ConversationTitlePolicy = Pick<ToolPolicyInput, "allowedTools" | "disallowedTools">;
|
|
8
|
+
/** The console title tool follows the normal app-owned allow/deny boundary. */
|
|
9
|
+
export declare function isSetConversationTitleToolAllowed(policy: ConversationTitlePolicy | undefined): boolean;
|
|
10
|
+
/** One stateless tool whose structured result is applied by the originating web console. */
|
|
11
|
+
export declare function createSetConversationTitleServer(): McpServer;
|
|
12
|
+
/** Inject the capability only for an exact writable interactive web turn. */
|
|
13
|
+
export declare function createSetConversationTitleRuntimeExtension(): RuntimeOptionsExtension;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=conversation-title.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-title.d.ts","sourceRoot":"","sources":["../src/conversation-title.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAIjE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAE9E,eAAO,MAAM,sCAAsC,kCAAkC,CAAC;AACtF,eAAO,MAAM,gCAAgC,yBAAyB,CAAC;AACvE,eAAO,MAAM,qCAAqC,KAAK,CAAC;AAcxD,KAAK,uBAAuB,GAAG,IAAI,CAAC,eAAe,EAAE,cAAc,GAAG,iBAAiB,CAAC,CAAC;AAQzF,+EAA+E;AAC/E,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,uBAAuB,GAAG,SAAS,GAAG,OAAO,CAOtG;AAED,4FAA4F;AAC5F,wBAAgB,gCAAgC,IAAI,SAAS,CAqB5D;AAED,6EAA6E;AAC7E,wBAAgB,0CAA0C,IAAI,uBAAuB,CAYpF"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import * as z from "zod/v4";
|
|
3
|
+
import { createRequestScopedMcpRuntimeExtension } from "./request-scoped-mcp.js";
|
|
4
|
+
export const SET_CONVERSATION_TITLE_MCP_SERVER_NAME = "mono-agent-conversation-title";
|
|
5
|
+
export const SET_CONVERSATION_TITLE_TOOL_NAME = "SetConversationTitle";
|
|
6
|
+
export const SET_CONVERSATION_TITLE_MAX_CHARACTERS = 80;
|
|
7
|
+
const SET_CONVERSATION_TITLE_INPUT = z.object({
|
|
8
|
+
title: z.string()
|
|
9
|
+
.trim()
|
|
10
|
+
.min(1)
|
|
11
|
+
.max(SET_CONVERSATION_TITLE_MAX_CHARACTERS)
|
|
12
|
+
.refine((value) => !/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/u.test(value), "title contains unsupported control characters"),
|
|
13
|
+
}).strict();
|
|
14
|
+
const SET_CONVERSATION_TITLE_POLICY_NAMES = [
|
|
15
|
+
SET_CONVERSATION_TITLE_TOOL_NAME,
|
|
16
|
+
`mcp__${SET_CONVERSATION_TITLE_MCP_SERVER_NAME}__${SET_CONVERSATION_TITLE_TOOL_NAME}`,
|
|
17
|
+
`mcp__${SET_CONVERSATION_TITLE_MCP_SERVER_NAME}__*`,
|
|
18
|
+
];
|
|
19
|
+
/** The console title tool follows the normal app-owned allow/deny boundary. */
|
|
20
|
+
export function isSetConversationTitleToolAllowed(policy) {
|
|
21
|
+
const allowed = policy?.allowedTools ?? [];
|
|
22
|
+
const denied = policy?.disallowedTools ?? [];
|
|
23
|
+
if (denied.includes("*") || SET_CONVERSATION_TITLE_POLICY_NAMES.some((name) => denied.includes(name))) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
return allowed.includes("*") || SET_CONVERSATION_TITLE_POLICY_NAMES.some((name) => allowed.includes(name));
|
|
27
|
+
}
|
|
28
|
+
/** One stateless tool whose structured result is applied by the originating web console. */
|
|
29
|
+
export function createSetConversationTitleServer() {
|
|
30
|
+
const server = new McpServer({
|
|
31
|
+
name: SET_CONVERSATION_TITLE_MCP_SERVER_NAME,
|
|
32
|
+
version: "1.0.0",
|
|
33
|
+
});
|
|
34
|
+
server.registerTool(SET_CONVERSATION_TITLE_TOOL_NAME, {
|
|
35
|
+
title: "Set conversation title",
|
|
36
|
+
description: "Set a short semantic title for the current web-console conversation. Call this after you understand the initial topic, then call it again only when the conversation materially changes topic. Prefer a stable 3–8 word topic label over copying the user's message, progress text, or a generic label. The user can permanently lock a title by renaming it manually.",
|
|
37
|
+
inputSchema: SET_CONVERSATION_TITLE_INPUT,
|
|
38
|
+
}, async (input) => {
|
|
39
|
+
const title = normalizeConversationTitle(input.title);
|
|
40
|
+
return {
|
|
41
|
+
content: [{ type: "text", text: `Conversation title proposed: ${title}` }],
|
|
42
|
+
structuredContent: { schema: 1, title },
|
|
43
|
+
};
|
|
44
|
+
});
|
|
45
|
+
return server;
|
|
46
|
+
}
|
|
47
|
+
/** Inject the capability only for an exact writable interactive web turn. */
|
|
48
|
+
export function createSetConversationTitleRuntimeExtension() {
|
|
49
|
+
const extension = createRequestScopedMcpRuntimeExtension({
|
|
50
|
+
serverName: SET_CONVERSATION_TITLE_MCP_SERVER_NAME,
|
|
51
|
+
startingMessage: "Conversation title tool is starting",
|
|
52
|
+
createServer: () => createSetConversationTitleServer(),
|
|
53
|
+
});
|
|
54
|
+
return async (input) => {
|
|
55
|
+
if (!isWritableWebConversationTitleRequest(input.request)) {
|
|
56
|
+
return { runtimeOptions: {}, cleanup: async () => { } };
|
|
57
|
+
}
|
|
58
|
+
return await extension(input);
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function isWritableWebConversationTitleRequest(request) {
|
|
62
|
+
const metadata = request.metadata;
|
|
63
|
+
if (metadata?.source !== "web")
|
|
64
|
+
return false;
|
|
65
|
+
const web = record(metadata.web);
|
|
66
|
+
const capability = record(web?.conversationTitle);
|
|
67
|
+
if (capability?.schema !== 1
|
|
68
|
+
|| capability.writable !== true
|
|
69
|
+
|| typeof web?.threadId !== "string"
|
|
70
|
+
|| typeof web.turnId !== "string"
|
|
71
|
+
|| web.threadId.length === 0
|
|
72
|
+
|| web.turnId.length === 0
|
|
73
|
+
|| web.trigger !== undefined)
|
|
74
|
+
return false;
|
|
75
|
+
const logicalConversationId = request.conversationId.replace(/#\d{4}-\d{2}-\d{2}$/u, "");
|
|
76
|
+
return logicalConversationId === `web:${web.threadId}`;
|
|
77
|
+
}
|
|
78
|
+
function normalizeConversationTitle(value) {
|
|
79
|
+
return value.trim().replace(/\s+/gu, " ");
|
|
80
|
+
}
|
|
81
|
+
function record(value) {
|
|
82
|
+
return typeof value === "object" && value !== null && !Array.isArray(value)
|
|
83
|
+
? value
|
|
84
|
+
: undefined;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=conversation-title.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-title.js","sourceRoot":"","sources":["../src/conversation-title.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { LocalProviderDefinition, ModelEffortLevels, RuntimeModelReference } from "@mono-agent/runtime-adapter";
|
|
2
|
+
import type { CodexCatalogModel } from "./codex-model-catalog.js";
|
|
3
|
+
export interface ClaudeEffortCatalogEntry {
|
|
4
|
+
readonly model: string;
|
|
5
|
+
readonly reference?: string;
|
|
6
|
+
readonly supportedEfforts: readonly string[];
|
|
7
|
+
}
|
|
8
|
+
export interface AdvertisedModelEffortCatalog {
|
|
9
|
+
readonly localProviders?: readonly LocalProviderDefinition[];
|
|
10
|
+
readonly claudeCatalog?: readonly ClaudeEffortCatalogEntry[];
|
|
11
|
+
readonly codexCatalog?: readonly CodexCatalogModel[];
|
|
12
|
+
readonly suppressExplicitEffort?: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Resolve the effort snapshot advertised for one configured or discovered
|
|
16
|
+
* runtime model. Unknown metadata never expands to the global ladder.
|
|
17
|
+
*/
|
|
18
|
+
export declare function resolveAdvertisedModelEffort(ref: RuntimeModelReference, catalog?: AdvertisedModelEffortCatalog): ModelEffortLevels;
|
|
19
|
+
//# sourceMappingURL=model-effort-capabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-effort-capabilities.d.ts","sourceRoot":"","sources":["../src/model-effort-capabilities.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAIlE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,uBAAuB,EAAE,CAAC;IAC7D,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAC7D,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACrD,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAC3C;AA4BD;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,qBAAqB,EAC1B,OAAO,GAAE,4BAAiC,GACzC,iBAAiB,CAgCnB"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { EFFORT_LEVELS } from "@mono-agent/config";
|
|
2
|
+
import { curatedClaudeSdkModels, getPiBuiltinModel, reasoningLevelsForPiModel, } from "@mono-agent/agent-runtime";
|
|
3
|
+
import { resolveModelEffortLevels } from "@mono-agent/runtime-adapter";
|
|
4
|
+
const KNOWN_EFFORTS = new Set(EFFORT_LEVELS);
|
|
5
|
+
function knownEfforts(values) {
|
|
6
|
+
return [...new Set(values)].filter((value) => KNOWN_EFFORTS.has(value));
|
|
7
|
+
}
|
|
8
|
+
function noExplicitEffort(reasoning = true) {
|
|
9
|
+
return { reasoning };
|
|
10
|
+
}
|
|
11
|
+
function gradedEffort(levels) {
|
|
12
|
+
const effortLevels = knownEfforts(levels);
|
|
13
|
+
if (effortLevels.length === 0)
|
|
14
|
+
return noExplicitEffort(true);
|
|
15
|
+
return {
|
|
16
|
+
reasoning: true,
|
|
17
|
+
reasoningMode: "effort",
|
|
18
|
+
effortLevels,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function claudeCatalogEntry(ref, catalog) {
|
|
22
|
+
const reference = `claude:${ref.model}`;
|
|
23
|
+
return catalog?.find((entry) => entry.model === ref.model || entry.reference === reference);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Resolve the effort snapshot advertised for one configured or discovered
|
|
27
|
+
* runtime model. Unknown metadata never expands to the global ladder.
|
|
28
|
+
*/
|
|
29
|
+
export function resolveAdvertisedModelEffort(ref, catalog = {}) {
|
|
30
|
+
if (catalog.suppressExplicitEffort === true || ref.sdk === "opencode" || ref.sdk === "acp") {
|
|
31
|
+
return noExplicitEffort(true);
|
|
32
|
+
}
|
|
33
|
+
if (ref.sdk === "pi") {
|
|
34
|
+
const local = resolveModelEffortLevels(ref, catalog.localProviders);
|
|
35
|
+
if (ref.provider !== undefined && catalog.localProviders?.some((provider) => provider.id === ref.provider)) {
|
|
36
|
+
return local;
|
|
37
|
+
}
|
|
38
|
+
if (ref.provider === undefined)
|
|
39
|
+
return noExplicitEffort(true);
|
|
40
|
+
const builtin = getPiBuiltinModel(ref.provider, ref.model);
|
|
41
|
+
if (builtin === undefined)
|
|
42
|
+
return noExplicitEffort(true);
|
|
43
|
+
if (builtin.reasoning !== true)
|
|
44
|
+
return noExplicitEffort(false);
|
|
45
|
+
return gradedEffort(reasoningLevelsForPiModel(builtin));
|
|
46
|
+
}
|
|
47
|
+
if (ref.sdk === "claude") {
|
|
48
|
+
const discovered = claudeCatalogEntry(ref, catalog.claudeCatalog);
|
|
49
|
+
if (discovered !== undefined)
|
|
50
|
+
return gradedEffort(discovered.supportedEfforts);
|
|
51
|
+
const pinned = claudeCatalogEntry(ref, curatedClaudeSdkModels());
|
|
52
|
+
if (pinned !== undefined)
|
|
53
|
+
return gradedEffort(pinned.supportedEfforts);
|
|
54
|
+
return noExplicitEffort(true);
|
|
55
|
+
}
|
|
56
|
+
if (ref.sdk === "codex") {
|
|
57
|
+
const match = catalog.codexCatalog?.find((entry) => entry.id === ref.model);
|
|
58
|
+
if (match === undefined)
|
|
59
|
+
return noExplicitEffort(true);
|
|
60
|
+
return gradedEffort(match.supportedEfforts);
|
|
61
|
+
}
|
|
62
|
+
return noExplicitEffort(true);
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=model-effort-capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-effort-capabilities.js","sourceRoot":"","sources":["../src/model-effort-capabilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ export { ALLOW_ALL_TOOLS };
|
|
|
9
9
|
/** Mono-agent-managed built-ins gated by `tools.allowedTools` (pi-bridge.js). */
|
|
10
10
|
export declare const BUILTIN_TOOL_NAMES: readonly ["Read", "Write", "Edit", "Glob", "Grep", "Bash", "Exec", "NodeRepl", "WebFetch", "WebSearch", "Agent"];
|
|
11
11
|
/** App-owned tools injected by the configured host and governed by tool policy. */
|
|
12
|
-
export declare const APP_TOOL_NAMES: readonly ["RunHistory", "SessionHistory"];
|
|
12
|
+
export declare const APP_TOOL_NAMES: readonly ["RunHistory", "SessionHistory", "SetConversationTitle"];
|
|
13
13
|
/** Adapter send tools — require BOTH an `allowedTools` entry AND an enabled channel. */
|
|
14
14
|
export declare const ADAPTER_SEND_TOOL_NAMES: readonly ["SlackSendMessage", "TelegramSendMessage", "TelegramSendFile", "AskUser"];
|
|
15
15
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"known-tools.d.ts","sourceRoot":"","sources":["../../src/modules/known-tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,uFAAuF;AACvF,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B,iFAAiF;AACjF,eAAO,MAAM,kBAAkB,kHAcrB,CAAC;AAEX,mFAAmF;AACnF,eAAO,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"known-tools.d.ts","sourceRoot":"","sources":["../../src/modules/known-tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,uFAAuF;AACvF,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B,iFAAiF;AACjF,eAAO,MAAM,kBAAkB,kHAcrB,CAAC;AAEX,mFAAmF;AACnF,eAAO,MAAM,cAAc,mEAIjB,CAAC;AAEX,wFAAwF;AACxF,eAAO,MAAM,uBAAuB,qFAK1B,CAAC;AAEX;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAUtD,CAAC;AAEF,uFAAuF;AACvF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,8DAA8D;AAC9D,eAAO,MAAM,kBAAkB,mCAAoC,CAAC;AAEpE,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAClE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAC1D,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;AAkB3E;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,uEAAuE;AACvE,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAEhE;AAED,4FAA4F;AAC5F,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGhE"}
|
|
@@ -26,6 +26,7 @@ export const BUILTIN_TOOL_NAMES = [
|
|
|
26
26
|
export const APP_TOOL_NAMES = [
|
|
27
27
|
"RunHistory",
|
|
28
28
|
"SessionHistory",
|
|
29
|
+
"SetConversationTitle",
|
|
29
30
|
];
|
|
30
31
|
/** Adapter send tools — require BOTH an `allowedTools` entry AND an enabled channel. */
|
|
31
32
|
export const ADAPTER_SEND_TOOL_NAMES = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"known-tools.js","sourceRoot":"","sources":["../../src/modules/known-tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,uFAAuF;AACvF,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B,iFAAiF;AACjF,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,UAAU;IACV,UAAU;IACV,WAAW;IACX,6EAA6E;IAC7E,6EAA6E;IAC7E,OAAO;CACC,CAAC;AAEX,mFAAmF;AACnF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,YAAY;IACZ,gBAAgB;
|
|
1
|
+
{"version":3,"file":"known-tools.js","sourceRoot":"","sources":["../../src/modules/known-tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,uFAAuF;AACvF,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B,iFAAiF;AACjF,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,UAAU;IACV,UAAU;IACV,WAAW;IACX,6EAA6E;IAC7E,6EAA6E;IAC7E,OAAO;CACC,CAAC;AAEX,mFAAmF;AACnF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,YAAY;IACZ,gBAAgB;IAChB,sBAAsB;CACd,CAAC;AAEX,wFAAwF;AACxF,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,kBAAkB;IAClB,qBAAqB;IACrB,kBAAkB;IAClB,SAAS;CACD,CAAC;AAEX;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA2B;IACzD,kBAAkB,EAAE,kBAAkB;IACtC,qBAAqB,EAAE,qBAAqB;IAC5C,sBAAsB,EAAE,kBAAkB;IAC1C,mBAAmB,EAAE,kBAAkB;IACvC,WAAW,EAAE,YAAY;IACzB,eAAe,EAAE,gBAAgB;IACjC,aAAa,EAAE,cAAc;IAC7B,UAAU,EAAE,WAAW;IACvB,gBAAgB,EAAE,iBAAiB;CACpC,CAAC;AAEF,uFAAuF;AACvF,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,mBAAmB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AAC3C,CAAC;AAED,8DAA8D;AAC9D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AAMpE;;;;;;GAMG;AACH,MAAM,gBAAgB,GAAsB;IAC1C,GAAG,IAAI,GAAG,CAAS;QACjB,GAAG,kBAAkB;QACrB,GAAG,cAAc;QACjB,GAAG,uBAAuB;QAC1B,GAAG,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC;KACtC,CAAC;CACH,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,IAAI,KAAK,eAAe,IAAI,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,mBAAmB,CAAC;AACpG,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,eAAe,CAAC,IAAuB;IACrD,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;AACxC,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACnC,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,CAAC;AAC3E,CAAC"}
|
package/dist/pi-oauth-login.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pi-oauth-login.d.ts","sourceRoot":"","sources":["../src/pi-oauth-login.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"pi-oauth-login.d.ts","sourceRoot":"","sources":["../src/pi-oauth-login.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAA2B,MAAM,uBAAuB,CAAC;AAGhF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACpD,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAWD;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CAsEf;AAED,uEAAuE;AACvE,wBAAgB,sCAAsC,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAG,IAAI,CAMtF"}
|
package/dist/pi-oauth-login.js
CHANGED
|
@@ -37,6 +37,7 @@ export async function runPiOAuthLogin(providerId, options = {}) {
|
|
|
37
37
|
};
|
|
38
38
|
try {
|
|
39
39
|
const interaction = {
|
|
40
|
+
signal: options.signal ?? new AbortController().signal,
|
|
40
41
|
notify: (event) => {
|
|
41
42
|
if (event.type === "auth_url") {
|
|
42
43
|
io.write(`\nOpen this URL in your browser:\n${event.url}\n`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pi-oauth-login.js","sourceRoot":"","sources":["../src/pi-oauth-login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAmB,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"pi-oauth-login.js","sourceRoot":"","sources":["../src/pi-oauth-login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAmB,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAcvE;;;;GAIG;AACH,SAAS,eAAe,CAAC,UAAkB;IACzC,OAAO,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC;AACvF,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAkB,EAClB,UAAkC,EAAE;IAEpC,wEAAwE;IACxE,2EAA2E;IAC3E,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC;IAC9D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,sCAAsC,UAAU,EAAE,CAAC,CAAC;IACtE,CAAC;IACD,sCAAsC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEzD,MAAM,QAAQ,GAAG,OAAO,CAAC,EAAE,KAAK,SAAS;QACvC,CAAC,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;QACnE,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,EAAE,GAAmB,OAAO,CAAC,EAAE,IAAI;QACvC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE,CAAC,QAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACtG,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;KAC5C,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,WAAW,GAA4B;YAC3C,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC,MAAM;YACtD,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBAChB,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;oBAC9B,EAAE,CAAC,KAAK,CAAC,qCAAqC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;oBAC7D,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS;wBAAE,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;oBAC1E,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACf,OAAO;gBACT,CAAC;gBACD,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;oBACjC,EAAE,CAAC,KAAK,CAAC,qCAAqC,KAAK,CAAC,eAAe,IAAI,CAAC,CAAC;oBACzE,EAAE,CAAC,KAAK,CAAC,eAAe,KAAK,CAAC,QAAQ,MAAM,CAAC,CAAC;oBAC9C,OAAO;gBACT,CAAC;gBACD,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;YACjC,CAAC;YACD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;gBACvB,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;oBAClC,OAAO,MAAM,EAAE,CAAC,GAAG,CACjB,qDAAqD;wBACrD,8EAA8E,CAC/E,CAAC;gBACJ,CAAC;gBACD,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC7B,EAAE,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;oBAClC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;oBACzF,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC;oBAC3E,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;oBACrE,iEAAiE;oBACjE,uDAAuD;oBACvD,IAAI,QAAQ,KAAK,SAAS;wBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;oBACvE,OAAO,QAAQ,CAAC;gBAClB,CAAC;gBACD,OAAO,MAAM,EAAE,CAAC,GAAG,CACjB,GAAG,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,WAAW,GAAG,IAAI,CAC3F,CAAC;YACJ,CAAC;SACF,CAAC;QACF,6EAA6E;QAC7E,0EAA0E;QAC1E,oDAAoD;QACpD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,WAAW,EAAE,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACzE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,WAAW,CAAC;QACjD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,SAAS,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;YAC1C,GAAG,IAAI;YACP,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,WAAW,EAAE;SAChD,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACjB,EAAE,CAAC,KAAK,CAAC,0BAA0B,QAAQ,IAAI,CAAC,CAAC;IACnD,CAAC;YAAS,CAAC;QACT,QAAQ,EAAE,KAAK,EAAE,CAAC;IACpB,CAAC;AACH,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,sCAAsC,CAAC,QAAyB;IAC9E,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,6HAA6H,CAC9H,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,IAAY;IAClC,IAAI,MAA8B,CAAC;IACnC,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,CACjB,IAAI,EACJ,WAAW,CAAC,QAAQ,GAAG,WAAW,CAAC,UAAU,GAAG,WAAW,CAAC,UAAU,CACvE,CAAC;QACF,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,0BAA0B,CAAC,CAAC;QACrD,CAAC;QACD,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QAClE,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC;IACxB,CAAC;IACD,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,8BAA8B,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,MAAiC,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,IAAY,EAAE,QAAgB;IACrD,IAAI,MAA8B,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,CACjB,IAAI,EACJ,WAAW,CAAC,QAAQ,GAAG,WAAW,CAAC,UAAU,GAAG,WAAW,CAAC,UAAU,GAAG,WAAW,CAAC,OAAO,EAC5F,KAAK,CACN,CAAC;QACF,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,0BAA0B,CAAC,CAAC;QACrD,CAAC;QACD,2EAA2E;QAC3E,wEAAwE;QACxE,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,uEAAuE;QACvE,mEAAmE;QACnE,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC;IACxB,CAAC;AACH,CAAC"}
|
|
@@ -8,7 +8,7 @@ import { processJobPublicError, } from "@mono-agent/agent-contracts";
|
|
|
8
8
|
import { PROCESS_JOBS_CAPS } from "./process-jobs-config.js";
|
|
9
9
|
import { acquireOwnerPrivateLock } from "./owner-private-lock.js";
|
|
10
10
|
import { attestProcessJobsRootRegistration, } from "./process-jobs-root-registry.js";
|
|
11
|
-
import { isSensitiveEnvironmentName } from "./redact-secrets.js";
|
|
11
|
+
import { isSensitiveEnvironmentName, redactSecrets } from "./redact-secrets.js";
|
|
12
12
|
import { currentProcessIncarnation, isSameProcessIncarnation, readProcessIncarnation, } from "./process-incarnation.js";
|
|
13
13
|
import { isTerminalProcessJobState, isProcessJobOriginRecord, clearProcessJobHealthIncident, loadOrCreateProcessJobSecret, openProcessJobStore, prepareProcessJobStateDirectory, PROCESS_JOB_CONVERSATION_BUSY_ATTEMPT_COUNTER_MAX, PROCESS_JOB_CONVERSATION_BUSY_MAX_AGE_MS, PROCESS_JOB_DESTINATION_UNAVAILABLE_ATTEMPTS, PROCESS_JOB_ENV_KEYS_CAPS, projectProcessJob, processJobOperatorToken, recordProcessJobHealthIncident, } from "./process-jobs-store.js";
|
|
14
14
|
const PROCESS_JOB_OWNER_SCHEMA = "mono-agent.process-jobs-owner.v1";
|
|
@@ -438,9 +438,7 @@ class ProcessJobsService {
|
|
|
438
438
|
const admittedAt = this.now();
|
|
439
439
|
const maxRuntimeMs = Math.min(this.settings.maxRuntimeMs, request.timeoutMs ?? this.settings.maxRuntimeMs);
|
|
440
440
|
const previewChars = Math.min(this.settings.previewChars, request.maxOutputChars ?? this.settings.previewChars);
|
|
441
|
-
const summary = request.
|
|
442
|
-
? "Exec command (values redacted)"
|
|
443
|
-
: "Bash command (content redacted)";
|
|
441
|
+
const summary = processJobSummary(request, processDescriptionSecrets(request.prepared.env), this.options.workspace);
|
|
444
442
|
const record = {
|
|
445
443
|
schemaVersion: 1,
|
|
446
444
|
generation: randomUUID(),
|
|
@@ -1574,6 +1572,30 @@ function pendingRequest(request) {
|
|
|
1574
1572
|
},
|
|
1575
1573
|
};
|
|
1576
1574
|
}
|
|
1575
|
+
const PROCESS_JOB_DESCRIPTION_SCAN_CHARS = 4_096;
|
|
1576
|
+
const PROCESS_JOB_DESCRIPTION_MAX_CHARS = 160;
|
|
1577
|
+
function processJobSummary(request, secrets, workspace) {
|
|
1578
|
+
const fallback = request.tool === "Exec"
|
|
1579
|
+
? "Exec command (values redacted)"
|
|
1580
|
+
: "Bash command (content redacted)";
|
|
1581
|
+
if (typeof request.description !== "string" || request.description.trim().length === 0) {
|
|
1582
|
+
return fallback;
|
|
1583
|
+
}
|
|
1584
|
+
let description = request.description.slice(0, PROCESS_JOB_DESCRIPTION_SCAN_CHARS);
|
|
1585
|
+
const truncatedAtEnd = request.description.length > PROCESS_JOB_DESCRIPTION_SCAN_CHARS;
|
|
1586
|
+
const resolvedWorkspace = resolve(workspace);
|
|
1587
|
+
if (resolvedWorkspace !== "/")
|
|
1588
|
+
description = description.replaceAll(resolvedWorkspace, "<workspace>");
|
|
1589
|
+
const home = homedir();
|
|
1590
|
+
if (home !== "/")
|
|
1591
|
+
description = description.replaceAll(home, "~");
|
|
1592
|
+
description = description.replace(/[\p{Cc}\p{Cf}]+/gu, " ");
|
|
1593
|
+
const sanitized = redactSecrets(redactOutput(description, secrets, truncatedAtEnd), {
|
|
1594
|
+
fallback: "Process job",
|
|
1595
|
+
maxChars: PROCESS_JOB_DESCRIPTION_MAX_CHARS,
|
|
1596
|
+
});
|
|
1597
|
+
return `Purpose: ${sanitized}`;
|
|
1598
|
+
}
|
|
1577
1599
|
function captureMutationSnapshot(draft) {
|
|
1578
1600
|
// Do not structuredClone(draft): the copy-on-read Map subclass deliberately
|
|
1579
1601
|
// keeps its base Map slots empty, so structuredClone would silently lose its
|
|
@@ -1857,6 +1879,25 @@ function processOutputSecrets(overrides) {
|
|
|
1857
1879
|
}
|
|
1858
1880
|
return [...new Set(values)].sort((left, right) => right.length - left.length);
|
|
1859
1881
|
}
|
|
1882
|
+
function processDescriptionSecrets(overrides) {
|
|
1883
|
+
const effective = new Map(Object.entries(process.env));
|
|
1884
|
+
const explicitNames = new Set(Object.keys(overrides ?? {}));
|
|
1885
|
+
for (const [name, value] of Object.entries(overrides ?? {})) {
|
|
1886
|
+
if (value === undefined)
|
|
1887
|
+
effective.delete(name);
|
|
1888
|
+
else
|
|
1889
|
+
effective.set(name, value);
|
|
1890
|
+
}
|
|
1891
|
+
const values = [];
|
|
1892
|
+
for (const [name, value] of effective) {
|
|
1893
|
+
if (typeof value === "string"
|
|
1894
|
+
&& value.length > 0
|
|
1895
|
+
&& (explicitNames.has(name) || isSensitiveEnvironmentName(name))) {
|
|
1896
|
+
values.push(value);
|
|
1897
|
+
}
|
|
1898
|
+
}
|
|
1899
|
+
return [...new Set(values)].sort((left, right) => right.length - left.length);
|
|
1900
|
+
}
|
|
1860
1901
|
function isWakeCapableOrigin(origin) {
|
|
1861
1902
|
return origin.replyToConversationId.startsWith(`${origin.channel}:`)
|
|
1862
1903
|
&& (origin.channel !== "web" || origin.replyToConversationId !== "web:new");
|