@narumitw/pi-subagents 2.0.1 → 2.0.3

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.
Files changed (148) hide show
  1. package/README.md +20 -7
  2. package/dist/chunks/auto-transport-SY2VHUFH.ts +109 -0
  3. package/dist/chunks/auto-transport-SY2VHUFH.ts.map +7 -0
  4. package/dist/chunks/capability-grant-CGEWOEKE.ts +19 -0
  5. package/dist/chunks/capability-grant-CGEWOEKE.ts.map +7 -0
  6. package/dist/chunks/chunk-434NII74.ts +282 -0
  7. package/dist/chunks/chunk-434NII74.ts.map +7 -0
  8. package/dist/chunks/chunk-47SK2QYC.ts +56 -0
  9. package/dist/chunks/chunk-47SK2QYC.ts.map +7 -0
  10. package/dist/chunks/chunk-6KJ34M6S.ts +159 -0
  11. package/dist/chunks/chunk-6KJ34M6S.ts.map +7 -0
  12. package/dist/chunks/chunk-7OBINKFM.ts +80 -0
  13. package/dist/chunks/chunk-7OBINKFM.ts.map +7 -0
  14. package/dist/chunks/chunk-7QPPBBXZ.ts +335 -0
  15. package/dist/chunks/chunk-7QPPBBXZ.ts.map +7 -0
  16. package/dist/chunks/chunk-AEUYS7JC.ts +73 -0
  17. package/dist/chunks/chunk-AEUYS7JC.ts.map +7 -0
  18. package/dist/chunks/chunk-BFK2Z4ZF.ts +189 -0
  19. package/dist/chunks/chunk-BFK2Z4ZF.ts.map +7 -0
  20. package/dist/chunks/chunk-BOAXY55Y.ts +153 -0
  21. package/dist/chunks/chunk-BOAXY55Y.ts.map +7 -0
  22. package/dist/chunks/chunk-C4L6P266.ts +22 -0
  23. package/dist/chunks/chunk-C4L6P266.ts.map +7 -0
  24. package/dist/chunks/chunk-DPPVEQAM.ts +29 -0
  25. package/dist/chunks/chunk-DPPVEQAM.ts.map +7 -0
  26. package/dist/chunks/chunk-DQMN4OYM.ts +913 -0
  27. package/dist/chunks/chunk-DQMN4OYM.ts.map +7 -0
  28. package/dist/chunks/chunk-DSOOH73Y.ts +238 -0
  29. package/dist/chunks/chunk-DSOOH73Y.ts.map +7 -0
  30. package/dist/chunks/chunk-EFBPISNT.ts +421 -0
  31. package/dist/chunks/chunk-EFBPISNT.ts.map +7 -0
  32. package/dist/chunks/chunk-EWWXFU7N.ts +150 -0
  33. package/dist/chunks/chunk-EWWXFU7N.ts.map +7 -0
  34. package/dist/chunks/chunk-F4L2UVSK.ts +380 -0
  35. package/dist/chunks/chunk-F4L2UVSK.ts.map +7 -0
  36. package/dist/chunks/chunk-F5YWVHQX.ts +1543 -0
  37. package/dist/chunks/chunk-F5YWVHQX.ts.map +7 -0
  38. package/dist/chunks/chunk-G3RSMSXJ.ts +63 -0
  39. package/dist/chunks/chunk-G3RSMSXJ.ts.map +7 -0
  40. package/dist/chunks/chunk-G6VZTCFH.ts +70 -0
  41. package/dist/chunks/chunk-G6VZTCFH.ts.map +7 -0
  42. package/dist/chunks/chunk-H3FP6DLR.ts +160 -0
  43. package/dist/chunks/chunk-H3FP6DLR.ts.map +7 -0
  44. package/dist/chunks/chunk-HA36LPCO.ts +130 -0
  45. package/dist/chunks/chunk-HA36LPCO.ts.map +7 -0
  46. package/dist/chunks/chunk-HKC4ES4B.ts +65 -0
  47. package/dist/chunks/chunk-HKC4ES4B.ts.map +7 -0
  48. package/dist/chunks/chunk-HOP5FXDT.ts +27 -0
  49. package/dist/chunks/chunk-HOP5FXDT.ts.map +7 -0
  50. package/dist/chunks/chunk-I2FAK44T.ts +324 -0
  51. package/dist/chunks/chunk-I2FAK44T.ts.map +7 -0
  52. package/dist/chunks/chunk-IGAMVWFN.ts +139 -0
  53. package/dist/chunks/chunk-IGAMVWFN.ts.map +7 -0
  54. package/dist/chunks/chunk-KMGKCEO4.ts +38 -0
  55. package/dist/chunks/chunk-KMGKCEO4.ts.map +7 -0
  56. package/dist/chunks/chunk-N7BLVXKK.ts +73 -0
  57. package/dist/chunks/chunk-N7BLVXKK.ts.map +7 -0
  58. package/dist/chunks/chunk-NIF42QMF.ts +297 -0
  59. package/dist/chunks/chunk-NIF42QMF.ts.map +7 -0
  60. package/dist/chunks/chunk-O4VO6JUJ.ts +52 -0
  61. package/dist/chunks/chunk-O4VO6JUJ.ts.map +7 -0
  62. package/dist/chunks/chunk-ONDTY4EL.ts +91 -0
  63. package/dist/chunks/chunk-ONDTY4EL.ts.map +7 -0
  64. package/dist/chunks/chunk-OVPHFGKO.ts +1769 -0
  65. package/dist/chunks/chunk-OVPHFGKO.ts.map +7 -0
  66. package/dist/chunks/chunk-P7OH4XMF.ts +60 -0
  67. package/dist/chunks/chunk-P7OH4XMF.ts.map +7 -0
  68. package/dist/chunks/chunk-PSK43Y6A.ts +339 -0
  69. package/dist/chunks/chunk-PSK43Y6A.ts.map +7 -0
  70. package/dist/chunks/chunk-QBORTI4W.ts +468 -0
  71. package/dist/chunks/chunk-QBORTI4W.ts.map +7 -0
  72. package/dist/chunks/chunk-QDVGH2X7.ts +171 -0
  73. package/dist/chunks/chunk-QDVGH2X7.ts.map +7 -0
  74. package/dist/chunks/chunk-RHRQMT7Q.ts +490 -0
  75. package/dist/chunks/chunk-RHRQMT7Q.ts.map +7 -0
  76. package/dist/chunks/chunk-RRR66UWR.ts +28 -0
  77. package/dist/chunks/chunk-RRR66UWR.ts.map +7 -0
  78. package/dist/chunks/chunk-RSUXZD6S.ts +275 -0
  79. package/dist/chunks/chunk-RSUXZD6S.ts.map +7 -0
  80. package/dist/chunks/chunk-RTCVYIZA.ts +221 -0
  81. package/dist/chunks/chunk-RTCVYIZA.ts.map +7 -0
  82. package/dist/chunks/chunk-S2IWVK3J.ts +44 -0
  83. package/dist/chunks/chunk-S2IWVK3J.ts.map +7 -0
  84. package/dist/chunks/chunk-SCZ33MYW.ts +52 -0
  85. package/dist/chunks/chunk-SCZ33MYW.ts.map +7 -0
  86. package/dist/chunks/chunk-SWGQLFSD.ts +60 -0
  87. package/dist/chunks/chunk-SWGQLFSD.ts.map +7 -0
  88. package/dist/chunks/chunk-UMBPMVJW.ts +22 -0
  89. package/dist/chunks/chunk-UMBPMVJW.ts.map +7 -0
  90. package/dist/chunks/chunk-UVFVHIOP.ts +735 -0
  91. package/dist/chunks/chunk-UVFVHIOP.ts.map +7 -0
  92. package/dist/chunks/completion-delivery-YPOWSSV3.ts +16 -0
  93. package/dist/chunks/completion-delivery-YPOWSSV3.ts.map +7 -0
  94. package/dist/chunks/config-status-J4GPWP46.ts +34 -0
  95. package/dist/chunks/config-status-J4GPWP46.ts.map +7 -0
  96. package/dist/chunks/config-ui-3IBMHTQB.ts +1146 -0
  97. package/dist/chunks/config-ui-3IBMHTQB.ts.map +7 -0
  98. package/dist/chunks/consult-NYXVDN5G.ts +518 -0
  99. package/dist/chunks/consult-NYXVDN5G.ts.map +7 -0
  100. package/dist/chunks/context-QDKLVQXE.ts +11 -0
  101. package/dist/chunks/context-QDKLVQXE.ts.map +7 -0
  102. package/dist/chunks/create-stateful-transport-4WKZHRSI.ts +130 -0
  103. package/dist/chunks/create-stateful-transport-4WKZHRSI.ts.map +7 -0
  104. package/dist/chunks/cwd-policy-NB6XZ5GF.ts +17 -0
  105. package/dist/chunks/cwd-policy-NB6XZ5GF.ts.map +7 -0
  106. package/dist/chunks/delegation-contract-WJPT4FVS.ts +24 -0
  107. package/dist/chunks/delegation-contract-WJPT4FVS.ts.map +7 -0
  108. package/dist/chunks/discovery-K25T3SH4.ts +12 -0
  109. package/dist/chunks/discovery-K25T3SH4.ts.map +7 -0
  110. package/dist/chunks/execution-DS2DEIQZ.ts +4034 -0
  111. package/dist/chunks/execution-DS2DEIQZ.ts.map +7 -0
  112. package/dist/chunks/in-process-transport-TEYAWSEC.ts +38 -0
  113. package/dist/chunks/in-process-transport-TEYAWSEC.ts.map +7 -0
  114. package/dist/chunks/inspect-UOQQ3KNL.ts +619 -0
  115. package/dist/chunks/inspect-UOQQ3KNL.ts.map +7 -0
  116. package/dist/chunks/peer-communication-KL36Z6CO.ts +294 -0
  117. package/dist/chunks/peer-communication-KL36Z6CO.ts.map +7 -0
  118. package/dist/chunks/persistence-VSGXAW4P.ts +344 -0
  119. package/dist/chunks/persistence-VSGXAW4P.ts.map +7 -0
  120. package/dist/chunks/registry-E6XPJB7L.ts +1324 -0
  121. package/dist/chunks/registry-E6XPJB7L.ts.map +7 -0
  122. package/dist/chunks/retained-semantic-state-7WXSGRJU.ts +81 -0
  123. package/dist/chunks/retained-semantic-state-7WXSGRJU.ts.map +7 -0
  124. package/dist/chunks/rpc-transport-Y6LA5BOP.ts +1154 -0
  125. package/dist/chunks/rpc-transport-Y6LA5BOP.ts.map +7 -0
  126. package/dist/chunks/runtime-policy-5YELCOVC.ts +15 -0
  127. package/dist/chunks/runtime-policy-5YELCOVC.ts.map +7 -0
  128. package/dist/chunks/semantic-snapshot-WPJ3UAFW.ts +19 -0
  129. package/dist/chunks/semantic-snapshot-WPJ3UAFW.ts.map +7 -0
  130. package/dist/chunks/spawn-idempotency-QGHO2WKC.ts +13 -0
  131. package/dist/chunks/spawn-idempotency-QGHO2WKC.ts.map +7 -0
  132. package/dist/chunks/stateful-lifecycle-JAR6K55H.ts +15 -0
  133. package/dist/chunks/stateful-lifecycle-JAR6K55H.ts.map +7 -0
  134. package/dist/chunks/subprocess-transport-C2XVR25R.ts +158 -0
  135. package/dist/chunks/subprocess-transport-C2XVR25R.ts.map +7 -0
  136. package/dist/chunks/workspace-WDKLN72J.ts +11 -0
  137. package/dist/chunks/workspace-WDKLN72J.ts.map +7 -0
  138. package/dist/index.ts +1057 -0
  139. package/dist/index.ts.map +7 -0
  140. package/package.json +9 -5
  141. package/src/index.ts +1 -1
  142. package/src/settings-reader.ts +208 -0
  143. package/src/settings.ts +22 -187
  144. package/src/stateful-registration.ts +1230 -0
  145. package/src/stateful-safety.ts +1 -1
  146. package/src/stateful.ts +2 -1234
  147. package/src/subagents-extension.ts +307 -0
  148. 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.ts";
6
+ import {
7
+ appendDelegationContract
8
+ } from "./chunk-I2FAK44T.ts";
9
+ import {
10
+ DEFAULT_MAX_CONTEXT_BYTES,
11
+ redactPrivateText,
12
+ truncateUtf8
13
+ } from "./chunk-H3FP6DLR.ts";
14
+ import {
15
+ resolveDefaultSubagentTimeoutMs
16
+ } from "./chunk-RRR66UWR.ts";
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.ts";
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
+ }