@narumitw/pi-subagents 2.0.0 → 2.0.2
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 +21 -8
- package/dist/chunks/auto-transport-SY2VHUFH.ts +109 -0
- package/dist/chunks/auto-transport-SY2VHUFH.ts.map +7 -0
- package/dist/chunks/capability-grant-CGEWOEKE.ts +19 -0
- package/dist/chunks/capability-grant-CGEWOEKE.ts.map +7 -0
- package/dist/chunks/chunk-434NII74.ts +282 -0
- package/dist/chunks/chunk-434NII74.ts.map +7 -0
- package/dist/chunks/chunk-47SK2QYC.ts +56 -0
- package/dist/chunks/chunk-47SK2QYC.ts.map +7 -0
- package/dist/chunks/chunk-6KJ34M6S.ts +159 -0
- package/dist/chunks/chunk-6KJ34M6S.ts.map +7 -0
- package/dist/chunks/chunk-7OBINKFM.ts +80 -0
- package/dist/chunks/chunk-7OBINKFM.ts.map +7 -0
- package/dist/chunks/chunk-7QPPBBXZ.ts +335 -0
- package/dist/chunks/chunk-7QPPBBXZ.ts.map +7 -0
- package/dist/chunks/chunk-AEUYS7JC.ts +73 -0
- package/dist/chunks/chunk-AEUYS7JC.ts.map +7 -0
- package/dist/chunks/chunk-BFK2Z4ZF.ts +189 -0
- package/dist/chunks/chunk-BFK2Z4ZF.ts.map +7 -0
- package/dist/chunks/chunk-BOAXY55Y.ts +153 -0
- package/dist/chunks/chunk-BOAXY55Y.ts.map +7 -0
- package/dist/chunks/chunk-C4L6P266.ts +22 -0
- package/dist/chunks/chunk-C4L6P266.ts.map +7 -0
- package/dist/chunks/chunk-DPPVEQAM.ts +29 -0
- package/dist/chunks/chunk-DPPVEQAM.ts.map +7 -0
- package/dist/chunks/chunk-DQMN4OYM.ts +913 -0
- package/dist/chunks/chunk-DQMN4OYM.ts.map +7 -0
- package/dist/chunks/chunk-DSOOH73Y.ts +238 -0
- package/dist/chunks/chunk-DSOOH73Y.ts.map +7 -0
- package/dist/chunks/chunk-EFBPISNT.ts +421 -0
- package/dist/chunks/chunk-EFBPISNT.ts.map +7 -0
- package/dist/chunks/chunk-EWWXFU7N.ts +150 -0
- package/dist/chunks/chunk-EWWXFU7N.ts.map +7 -0
- package/dist/chunks/chunk-F4L2UVSK.ts +380 -0
- package/dist/chunks/chunk-F4L2UVSK.ts.map +7 -0
- package/dist/chunks/chunk-F5YWVHQX.ts +1543 -0
- package/dist/chunks/chunk-F5YWVHQX.ts.map +7 -0
- package/dist/chunks/chunk-G3RSMSXJ.ts +63 -0
- package/dist/chunks/chunk-G3RSMSXJ.ts.map +7 -0
- package/dist/chunks/chunk-G6VZTCFH.ts +70 -0
- package/dist/chunks/chunk-G6VZTCFH.ts.map +7 -0
- package/dist/chunks/chunk-H3FP6DLR.ts +160 -0
- package/dist/chunks/chunk-H3FP6DLR.ts.map +7 -0
- package/dist/chunks/chunk-HA36LPCO.ts +130 -0
- package/dist/chunks/chunk-HA36LPCO.ts.map +7 -0
- package/dist/chunks/chunk-HKC4ES4B.ts +65 -0
- package/dist/chunks/chunk-HKC4ES4B.ts.map +7 -0
- package/dist/chunks/chunk-HOP5FXDT.ts +27 -0
- package/dist/chunks/chunk-HOP5FXDT.ts.map +7 -0
- package/dist/chunks/chunk-I2FAK44T.ts +324 -0
- package/dist/chunks/chunk-I2FAK44T.ts.map +7 -0
- package/dist/chunks/chunk-IGAMVWFN.ts +139 -0
- package/dist/chunks/chunk-IGAMVWFN.ts.map +7 -0
- package/dist/chunks/chunk-KMGKCEO4.ts +38 -0
- package/dist/chunks/chunk-KMGKCEO4.ts.map +7 -0
- package/dist/chunks/chunk-N7BLVXKK.ts +73 -0
- package/dist/chunks/chunk-N7BLVXKK.ts.map +7 -0
- package/dist/chunks/chunk-NIF42QMF.ts +297 -0
- package/dist/chunks/chunk-NIF42QMF.ts.map +7 -0
- package/dist/chunks/chunk-O4VO6JUJ.ts +52 -0
- package/dist/chunks/chunk-O4VO6JUJ.ts.map +7 -0
- package/dist/chunks/chunk-ONDTY4EL.ts +91 -0
- package/dist/chunks/chunk-ONDTY4EL.ts.map +7 -0
- package/dist/chunks/chunk-OVPHFGKO.ts +1769 -0
- package/dist/chunks/chunk-OVPHFGKO.ts.map +7 -0
- package/dist/chunks/chunk-P7OH4XMF.ts +60 -0
- package/dist/chunks/chunk-P7OH4XMF.ts.map +7 -0
- package/dist/chunks/chunk-PSK43Y6A.ts +339 -0
- package/dist/chunks/chunk-PSK43Y6A.ts.map +7 -0
- package/dist/chunks/chunk-QBORTI4W.ts +468 -0
- package/dist/chunks/chunk-QBORTI4W.ts.map +7 -0
- package/dist/chunks/chunk-QDVGH2X7.ts +171 -0
- package/dist/chunks/chunk-QDVGH2X7.ts.map +7 -0
- package/dist/chunks/chunk-RHRQMT7Q.ts +490 -0
- package/dist/chunks/chunk-RHRQMT7Q.ts.map +7 -0
- package/dist/chunks/chunk-RRR66UWR.ts +28 -0
- package/dist/chunks/chunk-RRR66UWR.ts.map +7 -0
- package/dist/chunks/chunk-RSUXZD6S.ts +275 -0
- package/dist/chunks/chunk-RSUXZD6S.ts.map +7 -0
- package/dist/chunks/chunk-RTCVYIZA.ts +221 -0
- package/dist/chunks/chunk-RTCVYIZA.ts.map +7 -0
- package/dist/chunks/chunk-S2IWVK3J.ts +44 -0
- package/dist/chunks/chunk-S2IWVK3J.ts.map +7 -0
- package/dist/chunks/chunk-SCZ33MYW.ts +52 -0
- package/dist/chunks/chunk-SCZ33MYW.ts.map +7 -0
- package/dist/chunks/chunk-SWGQLFSD.ts +60 -0
- package/dist/chunks/chunk-SWGQLFSD.ts.map +7 -0
- package/dist/chunks/chunk-UMBPMVJW.ts +22 -0
- package/dist/chunks/chunk-UMBPMVJW.ts.map +7 -0
- package/dist/chunks/chunk-UVFVHIOP.ts +735 -0
- package/dist/chunks/chunk-UVFVHIOP.ts.map +7 -0
- package/dist/chunks/completion-delivery-YPOWSSV3.ts +16 -0
- package/dist/chunks/completion-delivery-YPOWSSV3.ts.map +7 -0
- package/dist/chunks/config-status-J4GPWP46.ts +34 -0
- package/dist/chunks/config-status-J4GPWP46.ts.map +7 -0
- package/dist/chunks/config-ui-3IBMHTQB.ts +1146 -0
- package/dist/chunks/config-ui-3IBMHTQB.ts.map +7 -0
- package/dist/chunks/consult-NYXVDN5G.ts +518 -0
- package/dist/chunks/consult-NYXVDN5G.ts.map +7 -0
- package/dist/chunks/context-QDKLVQXE.ts +11 -0
- package/dist/chunks/context-QDKLVQXE.ts.map +7 -0
- package/dist/chunks/create-stateful-transport-4WKZHRSI.ts +130 -0
- package/dist/chunks/create-stateful-transport-4WKZHRSI.ts.map +7 -0
- package/dist/chunks/cwd-policy-NB6XZ5GF.ts +17 -0
- package/dist/chunks/cwd-policy-NB6XZ5GF.ts.map +7 -0
- package/dist/chunks/delegation-contract-WJPT4FVS.ts +24 -0
- package/dist/chunks/delegation-contract-WJPT4FVS.ts.map +7 -0
- package/dist/chunks/discovery-K25T3SH4.ts +12 -0
- package/dist/chunks/discovery-K25T3SH4.ts.map +7 -0
- package/dist/chunks/execution-DS2DEIQZ.ts +4034 -0
- package/dist/chunks/execution-DS2DEIQZ.ts.map +7 -0
- package/dist/chunks/in-process-transport-TEYAWSEC.ts +38 -0
- package/dist/chunks/in-process-transport-TEYAWSEC.ts.map +7 -0
- package/dist/chunks/inspect-UOQQ3KNL.ts +619 -0
- package/dist/chunks/inspect-UOQQ3KNL.ts.map +7 -0
- package/dist/chunks/peer-communication-KL36Z6CO.ts +294 -0
- package/dist/chunks/peer-communication-KL36Z6CO.ts.map +7 -0
- package/dist/chunks/persistence-VSGXAW4P.ts +344 -0
- package/dist/chunks/persistence-VSGXAW4P.ts.map +7 -0
- package/dist/chunks/registry-E6XPJB7L.ts +1324 -0
- package/dist/chunks/registry-E6XPJB7L.ts.map +7 -0
- package/dist/chunks/retained-semantic-state-7WXSGRJU.ts +81 -0
- package/dist/chunks/retained-semantic-state-7WXSGRJU.ts.map +7 -0
- package/dist/chunks/rpc-transport-Y6LA5BOP.ts +1154 -0
- package/dist/chunks/rpc-transport-Y6LA5BOP.ts.map +7 -0
- package/dist/chunks/runtime-policy-5YELCOVC.ts +15 -0
- package/dist/chunks/runtime-policy-5YELCOVC.ts.map +7 -0
- package/dist/chunks/semantic-snapshot-WPJ3UAFW.ts +19 -0
- package/dist/chunks/semantic-snapshot-WPJ3UAFW.ts.map +7 -0
- package/dist/chunks/spawn-idempotency-QGHO2WKC.ts +13 -0
- package/dist/chunks/spawn-idempotency-QGHO2WKC.ts.map +7 -0
- package/dist/chunks/stateful-lifecycle-JAR6K55H.ts +15 -0
- package/dist/chunks/stateful-lifecycle-JAR6K55H.ts.map +7 -0
- package/dist/chunks/subprocess-transport-C2XVR25R.ts +158 -0
- package/dist/chunks/subprocess-transport-C2XVR25R.ts.map +7 -0
- package/dist/chunks/workspace-WDKLN72J.ts +11 -0
- package/dist/chunks/workspace-WDKLN72J.ts.map +7 -0
- package/dist/index.ts +1057 -0
- package/dist/index.ts.map +7 -0
- package/package.json +8 -4
- package/src/index.ts +1 -1
- package/src/settings-reader.ts +208 -0
- package/src/settings.ts +22 -187
- package/src/stateful-registration.ts +1230 -0
- package/src/stateful-safety.ts +1 -1
- package/src/stateful.ts +2 -1234
- package/src/subagents-extension.ts +307 -0
- package/src/subagents.ts +1 -308
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// @generated by scripts/build-runtime.mjs; do not edit.
|
|
2
|
+
// @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
|
|
3
|
+
import {
|
|
4
|
+
appendResultInstruction
|
|
5
|
+
} from "./chunk-RSUXZD6S.js";
|
|
6
|
+
import {
|
|
7
|
+
appendDelegationContract
|
|
8
|
+
} from "./chunk-I2FAK44T.js";
|
|
9
|
+
import {
|
|
10
|
+
DEFAULT_MAX_CONTEXT_BYTES,
|
|
11
|
+
redactPrivateText,
|
|
12
|
+
truncateUtf8
|
|
13
|
+
} from "./chunk-H3FP6DLR.js";
|
|
14
|
+
import {
|
|
15
|
+
resolveDefaultSubagentTimeoutMs
|
|
16
|
+
} from "./chunk-RRR66UWR.js";
|
|
17
|
+
|
|
18
|
+
// src/stateful-prompt.ts
|
|
19
|
+
function buildStatefulTurnPrompt(record, task, maxBytes = DEFAULT_MAX_CONTEXT_BYTES) {
|
|
20
|
+
const previous = record.history.map((turn) => {
|
|
21
|
+
const redactedTask = redactPrivateText(turn.task);
|
|
22
|
+
const redactedOutput = redactPrivateText(turn.output);
|
|
23
|
+
return `Task: ${redactedTask}
|
|
24
|
+
Output: ${redactedOutput}`;
|
|
25
|
+
}).join("\n\n");
|
|
26
|
+
const currentMessageIds = new Set(record.currentMailboxMessageIds ?? []);
|
|
27
|
+
const messages = record.mailbox.filter((message) => currentMessageIds.has(message.id)).slice(-20).map((message) => `From ${message.senderId}: ${redactPrivateText(message.content)}`).join("\n");
|
|
28
|
+
const context = [
|
|
29
|
+
`Current task:
|
|
30
|
+
${redactPrivateText(task)}`,
|
|
31
|
+
messages ? `Mailbox messages:
|
|
32
|
+
${messages}` : "",
|
|
33
|
+
previous ? `Prior subagent turns:
|
|
34
|
+
${previous}` : "",
|
|
35
|
+
record.context ? `Parent context:
|
|
36
|
+
${redactPrivateText(record.context)}` : ""
|
|
37
|
+
].filter(Boolean).join("\n\n---\n\n");
|
|
38
|
+
const contracted = appendDelegationContract(context, record.contract, maxBytes);
|
|
39
|
+
return truncateUtf8(
|
|
40
|
+
appendResultInstruction(contracted.text, record.resultFormat, maxBytes),
|
|
41
|
+
maxBytes
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
function resolveStatefulTurnTimeout(agent) {
|
|
45
|
+
return agent?.timeoutMs ?? resolveDefaultSubagentTimeoutMs();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export {
|
|
49
|
+
buildStatefulTurnPrompt,
|
|
50
|
+
resolveStatefulTurnTimeout
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=chunk-SCZ33MYW.ts.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/stateful-prompt.ts"],
|
|
4
|
+
"sourcesContent": ["import type { AgentConfig } from \"./agents/types.js\";\nimport { redactPrivateText } from \"./context.js\";\nimport { appendDelegationContract } from \"./delegation-contract.js\";\nimport { resolveDefaultSubagentTimeoutMs } from \"./execution/runtime-policy.js\";\nimport { DEFAULT_MAX_CONTEXT_BYTES, truncateUtf8 } from \"./limits.js\";\nimport type { ManagedAgent } from \"./registry.js\";\nimport { appendResultInstruction } from \"./result-contract.js\";\n\nexport function buildStatefulTurnPrompt(\n\trecord: Pick<\n\t\tManagedAgent,\n\t\t\"context\" | \"history\" | \"mailbox\" | \"currentMailboxMessageIds\" | \"contract\" | \"resultFormat\"\n\t>,\n\ttask: string,\n\tmaxBytes = DEFAULT_MAX_CONTEXT_BYTES,\n): { text: string; truncated: boolean } {\n\tconst previous = record.history\n\t\t.map((turn) => {\n\t\t\tconst redactedTask = redactPrivateText(turn.task);\n\t\t\tconst redactedOutput = redactPrivateText(turn.output);\n\t\t\treturn `Task: ${redactedTask}\\nOutput: ${redactedOutput}`;\n\t\t})\n\t\t.join(\"\\n\\n\");\n\tconst currentMessageIds = new Set(record.currentMailboxMessageIds ?? []);\n\tconst messages = record.mailbox\n\t\t.filter((message) => currentMessageIds.has(message.id))\n\t\t.slice(-20)\n\t\t.map((message) => `From ${message.senderId}: ${redactPrivateText(message.content)}`)\n\t\t.join(\"\\n\");\n\tconst context = [\n\t\t`Current task:\\n${redactPrivateText(task)}`,\n\t\tmessages ? `Mailbox messages:\\n${messages}` : \"\",\n\t\tprevious ? `Prior subagent turns:\\n${previous}` : \"\",\n\t\trecord.context ? `Parent context:\\n${redactPrivateText(record.context)}` : \"\",\n\t]\n\t\t.filter(Boolean)\n\t\t.join(\"\\n\\n---\\n\\n\");\n\tconst contracted = appendDelegationContract(context, record.contract, maxBytes);\n\treturn truncateUtf8(\n\t\tappendResultInstruction(contracted.text, record.resultFormat, maxBytes),\n\t\tmaxBytes,\n\t);\n}\n\nexport function resolveStatefulTurnTimeout(\n\tagent: Pick<AgentConfig, \"timeoutMs\"> | undefined,\n): number {\n\treturn agent?.timeoutMs ?? resolveDefaultSubagentTimeoutMs();\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAQO,SAAS,wBACf,QAIA,MACA,WAAW,2BAC4B;AACvC,QAAM,WAAW,OAAO,QACtB,IAAI,CAAC,SAAS;AACd,UAAM,eAAe,kBAAkB,KAAK,IAAI;AAChD,UAAM,iBAAiB,kBAAkB,KAAK,MAAM;AACpD,WAAO,SAAS,YAAY;AAAA,UAAa,cAAc;AAAA,EACxD,CAAC,EACA,KAAK,MAAM;AACb,QAAM,oBAAoB,IAAI,IAAI,OAAO,4BAA4B,CAAC,CAAC;AACvE,QAAM,WAAW,OAAO,QACtB,OAAO,CAAC,YAAY,kBAAkB,IAAI,QAAQ,EAAE,CAAC,EACrD,MAAM,GAAG,EACT,IAAI,CAAC,YAAY,QAAQ,QAAQ,QAAQ,KAAK,kBAAkB,QAAQ,OAAO,CAAC,EAAE,EAClF,KAAK,IAAI;AACX,QAAM,UAAU;AAAA,IACf;AAAA,EAAkB,kBAAkB,IAAI,CAAC;AAAA,IACzC,WAAW;AAAA,EAAsB,QAAQ,KAAK;AAAA,IAC9C,WAAW;AAAA,EAA0B,QAAQ,KAAK;AAAA,IAClD,OAAO,UAAU;AAAA,EAAoB,kBAAkB,OAAO,OAAO,CAAC,KAAK;AAAA,EAC5E,EACE,OAAO,OAAO,EACd,KAAK,aAAa;AACpB,QAAM,aAAa,yBAAyB,SAAS,OAAO,UAAU,QAAQ;AAC9E,SAAO;AAAA,IACN,wBAAwB,WAAW,MAAM,OAAO,cAAc,QAAQ;AAAA,IACtE;AAAA,EACD;AACD;AAEO,SAAS,2BACf,OACS;AACT,SAAO,OAAO,aAAa,gCAAgC;AAC5D;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// @generated by scripts/build-runtime.mjs; do not edit.
|
|
2
|
+
// @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
|
|
3
|
+
import {
|
|
4
|
+
DEFAULT_MAX_OUTPUT_BYTES,
|
|
5
|
+
TRUNCATION_MARKER,
|
|
6
|
+
redactPrivateText,
|
|
7
|
+
truncateUtf8
|
|
8
|
+
} from "./chunk-H3FP6DLR.js";
|
|
9
|
+
|
|
10
|
+
// src/safe-text.ts
|
|
11
|
+
import * as os from "node:os";
|
|
12
|
+
import * as path from "node:path";
|
|
13
|
+
import { DEFAULT_MAX_LINES, getAgentDir } from "@earendil-works/pi-coding-agent";
|
|
14
|
+
var DEFAULT_MAX_OUTPUT_LINES = DEFAULT_MAX_LINES;
|
|
15
|
+
function safeTerminalText(value) {
|
|
16
|
+
return value.replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f-\u009f]/gu, "?").replace(/\r/gu, "");
|
|
17
|
+
}
|
|
18
|
+
function safeTerminalLine(value, maxBytes = 2 * 1024) {
|
|
19
|
+
const singleLine = safeTerminalText(redactPrivateText(value)).replace(/\s+/gu, " ").trim();
|
|
20
|
+
return truncateUtf8(singleLine, maxBytes).text.replace(/\s+/gu, " ").trim();
|
|
21
|
+
}
|
|
22
|
+
function boundText(value, maxBytes = DEFAULT_MAX_OUTPUT_BYTES, maxLines = DEFAULT_MAX_OUTPUT_LINES) {
|
|
23
|
+
const safe = safeTerminalText(value);
|
|
24
|
+
const lines = safe.split("\n");
|
|
25
|
+
const lineBounded = lines.length > maxLines ? `${lines.slice(0, Math.max(0, maxLines - 1)).join("\n")}${TRUNCATION_MARKER}` : safe;
|
|
26
|
+
const bounded = truncateUtf8(lineBounded, maxBytes);
|
|
27
|
+
return { text: bounded.text, truncated: lines.length > maxLines || bounded.truncated };
|
|
28
|
+
}
|
|
29
|
+
function boundedPrivateText(value, maxBytes) {
|
|
30
|
+
return boundText(redactPrivateText(value), maxBytes).text;
|
|
31
|
+
}
|
|
32
|
+
function safeDisplayPath(value, workspace) {
|
|
33
|
+
if (value.startsWith("built-in:")) return safeTerminalLine(value);
|
|
34
|
+
const resolved = path.resolve(value);
|
|
35
|
+
const agentDir = path.resolve(getAgentDir());
|
|
36
|
+
const relativeAgent = path.relative(agentDir, resolved);
|
|
37
|
+
if (relativeAgent === "" || !relativeAgent.startsWith("..") && !path.isAbsolute(relativeAgent)) {
|
|
38
|
+
return relativeAgent ? `~/${safeTerminalLine(relativeAgent)}` : "~";
|
|
39
|
+
}
|
|
40
|
+
const resolvedWorkspace = path.resolve(workspace);
|
|
41
|
+
const relativeWorkspace = path.relative(resolvedWorkspace, resolved);
|
|
42
|
+
if (relativeWorkspace === "" || !relativeWorkspace.startsWith("..") && !path.isAbsolute(relativeWorkspace)) {
|
|
43
|
+
return relativeWorkspace ? safeTerminalLine(relativeWorkspace) : ".";
|
|
44
|
+
}
|
|
45
|
+
const home = path.resolve(os.homedir());
|
|
46
|
+
const relativeHome = path.relative(home, resolved);
|
|
47
|
+
if (relativeHome === "" || !relativeHome.startsWith("..") && !path.isAbsolute(relativeHome)) {
|
|
48
|
+
return relativeHome ? `~/${safeTerminalLine(relativeHome)}` : "~";
|
|
49
|
+
}
|
|
50
|
+
return safeTerminalLine(resolved);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export {
|
|
54
|
+
safeTerminalText,
|
|
55
|
+
safeTerminalLine,
|
|
56
|
+
boundText,
|
|
57
|
+
boundedPrivateText,
|
|
58
|
+
safeDisplayPath
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=chunk-SWGQLFSD.ts.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/safe-text.ts"],
|
|
4
|
+
"sourcesContent": ["import * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport { DEFAULT_MAX_LINES, getAgentDir } from \"@earendil-works/pi-coding-agent\";\nimport { redactPrivateText } from \"./context.js\";\nimport { DEFAULT_MAX_OUTPUT_BYTES, TRUNCATION_MARKER, truncateUtf8 } from \"./limits.js\";\n\nexport const DEFAULT_MAX_OUTPUT_LINES = DEFAULT_MAX_LINES;\n\nexport function safeTerminalText(value: string): string {\n\treturn (\n\t\tvalue\n\t\t\t// biome-ignore lint/suspicious/noControlCharactersInRegex: Escape untrusted terminal controls while preserving newlines.\n\t\t\t.replace(/[\\u0000-\\u0008\\u000b\\u000c\\u000e-\\u001f\\u007f-\\u009f]/gu, \"?\")\n\t\t\t.replace(/\\r/gu, \"\")\n\t);\n}\n\nexport function safeTerminalLine(value: string, maxBytes = 2 * 1024): string {\n\tconst singleLine = safeTerminalText(redactPrivateText(value)).replace(/\\s+/gu, \" \").trim();\n\treturn truncateUtf8(singleLine, maxBytes).text.replace(/\\s+/gu, \" \").trim();\n}\n\nexport function boundText(\n\tvalue: string,\n\tmaxBytes = DEFAULT_MAX_OUTPUT_BYTES,\n\tmaxLines = DEFAULT_MAX_OUTPUT_LINES,\n): { text: string; truncated: boolean } {\n\tconst safe = safeTerminalText(value);\n\tconst lines = safe.split(\"\\n\");\n\tconst lineBounded =\n\t\tlines.length > maxLines\n\t\t\t? `${lines.slice(0, Math.max(0, maxLines - 1)).join(\"\\n\")}${TRUNCATION_MARKER}`\n\t\t\t: safe;\n\tconst bounded = truncateUtf8(lineBounded, maxBytes);\n\treturn { text: bounded.text, truncated: lines.length > maxLines || bounded.truncated };\n}\n\nexport function boundedPrivateText(value: string, maxBytes: number): string {\n\treturn boundText(redactPrivateText(value), maxBytes).text;\n}\n\nexport function safeDisplayPath(value: string, workspace: string): string {\n\tif (value.startsWith(\"built-in:\")) return safeTerminalLine(value);\n\tconst resolved = path.resolve(value);\n\tconst agentDir = path.resolve(getAgentDir());\n\tconst relativeAgent = path.relative(agentDir, resolved);\n\tif (\n\t\trelativeAgent === \"\" ||\n\t\t(!relativeAgent.startsWith(\"..\") && !path.isAbsolute(relativeAgent))\n\t) {\n\t\treturn relativeAgent ? `~/${safeTerminalLine(relativeAgent)}` : \"~\";\n\t}\n\tconst resolvedWorkspace = path.resolve(workspace);\n\tconst relativeWorkspace = path.relative(resolvedWorkspace, resolved);\n\tif (\n\t\trelativeWorkspace === \"\" ||\n\t\t(!relativeWorkspace.startsWith(\"..\") && !path.isAbsolute(relativeWorkspace))\n\t) {\n\t\treturn relativeWorkspace ? safeTerminalLine(relativeWorkspace) : \".\";\n\t}\n\tconst home = path.resolve(os.homedir());\n\tconst relativeHome = path.relative(home, resolved);\n\tif (relativeHome === \"\" || (!relativeHome.startsWith(\"..\") && !path.isAbsolute(relativeHome))) {\n\t\treturn relativeHome ? `~/${safeTerminalLine(relativeHome)}` : \"~\";\n\t}\n\treturn safeTerminalLine(resolved);\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;AAAA,YAAY,QAAQ;AACpB,YAAY,UAAU;AACtB,SAAS,mBAAmB,mBAAmB;AAIxC,IAAM,2BAA2B;AAEjC,SAAS,iBAAiB,OAAuB;AACvD,SACC,MAEE,QAAQ,2DAA2D,GAAG,EACtE,QAAQ,QAAQ,EAAE;AAEtB;AAEO,SAAS,iBAAiB,OAAe,WAAW,IAAI,MAAc;AAC5E,QAAM,aAAa,iBAAiB,kBAAkB,KAAK,CAAC,EAAE,QAAQ,SAAS,GAAG,EAAE,KAAK;AACzF,SAAO,aAAa,YAAY,QAAQ,EAAE,KAAK,QAAQ,SAAS,GAAG,EAAE,KAAK;AAC3E;AAEO,SAAS,UACf,OACA,WAAW,0BACX,WAAW,0BAC4B;AACvC,QAAM,OAAO,iBAAiB,KAAK;AACnC,QAAM,QAAQ,KAAK,MAAM,IAAI;AAC7B,QAAM,cACL,MAAM,SAAS,WACZ,GAAG,MAAM,MAAM,GAAG,KAAK,IAAI,GAAG,WAAW,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,GAAG,iBAAiB,KAC3E;AACJ,QAAM,UAAU,aAAa,aAAa,QAAQ;AAClD,SAAO,EAAE,MAAM,QAAQ,MAAM,WAAW,MAAM,SAAS,YAAY,QAAQ,UAAU;AACtF;AAEO,SAAS,mBAAmB,OAAe,UAA0B;AAC3E,SAAO,UAAU,kBAAkB,KAAK,GAAG,QAAQ,EAAE;AACtD;AAEO,SAAS,gBAAgB,OAAe,WAA2B;AACzE,MAAI,MAAM,WAAW,WAAW,EAAG,QAAO,iBAAiB,KAAK;AAChE,QAAM,WAAgB,aAAQ,KAAK;AACnC,QAAM,WAAgB,aAAQ,YAAY,CAAC;AAC3C,QAAM,gBAAqB,cAAS,UAAU,QAAQ;AACtD,MACC,kBAAkB,MACjB,CAAC,cAAc,WAAW,IAAI,KAAK,CAAM,gBAAW,aAAa,GACjE;AACD,WAAO,gBAAgB,KAAK,iBAAiB,aAAa,CAAC,KAAK;AAAA,EACjE;AACA,QAAM,oBAAyB,aAAQ,SAAS;AAChD,QAAM,oBAAyB,cAAS,mBAAmB,QAAQ;AACnE,MACC,sBAAsB,MACrB,CAAC,kBAAkB,WAAW,IAAI,KAAK,CAAM,gBAAW,iBAAiB,GACzE;AACD,WAAO,oBAAoB,iBAAiB,iBAAiB,IAAI;AAAA,EAClE;AACA,QAAM,OAAY,aAAW,WAAQ,CAAC;AACtC,QAAM,eAAoB,cAAS,MAAM,QAAQ;AACjD,MAAI,iBAAiB,MAAO,CAAC,aAAa,WAAW,IAAI,KAAK,CAAM,gBAAW,YAAY,GAAI;AAC9F,WAAO,eAAe,KAAK,iBAAiB,YAAY,CAAC,KAAK;AAAA,EAC/D;AACA,SAAO,iBAAiB,QAAQ;AACjC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// @generated by scripts/build-runtime.mjs; do not edit.
|
|
2
|
+
// @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
|
|
3
|
+
|
|
4
|
+
// src/consult-policy.ts
|
|
5
|
+
var READ_ONLY_CONSULT_TOOLS = ["read", "grep", "find", "ls"];
|
|
6
|
+
var READ_ONLY_CONSULT_TOOL_SET = new Set(READ_ONLY_CONSULT_TOOLS);
|
|
7
|
+
function resolveConsultTools(tools) {
|
|
8
|
+
if (tools === void 0) return [...READ_ONLY_CONSULT_TOOLS];
|
|
9
|
+
const seen = /* @__PURE__ */ new Set();
|
|
10
|
+
const effective = [];
|
|
11
|
+
for (const tool of tools) {
|
|
12
|
+
if (!READ_ONLY_CONSULT_TOOL_SET.has(tool) || seen.has(tool)) continue;
|
|
13
|
+
seen.add(tool);
|
|
14
|
+
effective.push(tool);
|
|
15
|
+
}
|
|
16
|
+
return effective;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export {
|
|
20
|
+
resolveConsultTools
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=chunk-UMBPMVJW.ts.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/consult-policy.ts"],
|
|
4
|
+
"sourcesContent": ["export const READ_ONLY_CONSULT_TOOLS = [\"read\", \"grep\", \"find\", \"ls\"] as const;\n\nconst READ_ONLY_CONSULT_TOOL_SET = new Set<string>(READ_ONLY_CONSULT_TOOLS);\n\nexport function resolveConsultTools(tools: readonly string[] | undefined): string[] {\n\tif (tools === undefined) return [...READ_ONLY_CONSULT_TOOLS];\n\tconst seen = new Set<string>();\n\tconst effective: string[] = [];\n\tfor (const tool of tools) {\n\t\tif (!READ_ONLY_CONSULT_TOOL_SET.has(tool) || seen.has(tool)) continue;\n\t\tseen.add(tool);\n\t\teffective.push(tool);\n\t}\n\treturn effective;\n}\n"],
|
|
5
|
+
"mappings": ";;;;AAAO,IAAM,0BAA0B,CAAC,QAAQ,QAAQ,QAAQ,IAAI;AAEpE,IAAM,6BAA6B,IAAI,IAAY,uBAAuB;AAEnE,SAAS,oBAAoB,OAAgD;AACnF,MAAI,UAAU,OAAW,QAAO,CAAC,GAAG,uBAAuB;AAC3D,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,YAAsB,CAAC;AAC7B,aAAW,QAAQ,OAAO;AACzB,QAAI,CAAC,2BAA2B,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,EAAG;AAC7D,SAAK,IAAI,IAAI;AACb,cAAU,KAAK,IAAI;AAAA,EACpB;AACA,SAAO;AACR;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|