@letrquan/book 0.2.0 → 0.4.0-beta.0

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 (177) hide show
  1. package/CHANGELOG.md +3771 -40
  2. package/README.md +135 -1311
  3. package/dist/additional-roots-VAWRQ625.js +32 -0
  4. package/dist/{app-MOXXWEOY.js → app-J7BVPSUH.js} +9648 -5509
  5. package/dist/app-J7BVPSUH.js.map +1 -0
  6. package/dist/chunk-2AAOF5B5.js +28 -0
  7. package/dist/chunk-2AAOF5B5.js.map +1 -0
  8. package/dist/chunk-32WBCUAN.js +660 -0
  9. package/dist/chunk-32WBCUAN.js.map +1 -0
  10. package/dist/chunk-4DKHLZRI.js +120 -0
  11. package/dist/chunk-4DKHLZRI.js.map +1 -0
  12. package/dist/{chunk-CAGOB2N4.js → chunk-62EEAUID.js} +6 -4
  13. package/dist/chunk-62EEAUID.js.map +1 -0
  14. package/dist/chunk-AHC7OU75.js +1124 -0
  15. package/dist/chunk-AHC7OU75.js.map +1 -0
  16. package/dist/{chunk-E75IPST5.js → chunk-AJZWLKLQ.js} +73 -70
  17. package/dist/chunk-AJZWLKLQ.js.map +1 -0
  18. package/dist/chunk-B5FC3MYZ.js +395 -0
  19. package/dist/chunk-B5FC3MYZ.js.map +1 -0
  20. package/dist/{chunk-KWHQ2XXL.js → chunk-DNFQTSMJ.js} +55 -13
  21. package/dist/chunk-DNFQTSMJ.js.map +1 -0
  22. package/dist/{chunk-J7MIZ5CA.js → chunk-E5WLQSKA.js} +719 -89
  23. package/dist/chunk-E5WLQSKA.js.map +1 -0
  24. package/dist/chunk-ECLC4CIJ.js +1181 -0
  25. package/dist/chunk-ECLC4CIJ.js.map +1 -0
  26. package/dist/chunk-EEX6QNXV.js +127 -0
  27. package/dist/chunk-EEX6QNXV.js.map +1 -0
  28. package/dist/chunk-EFXVSQ5J.js +931 -0
  29. package/dist/chunk-EFXVSQ5J.js.map +1 -0
  30. package/dist/{chunk-V4BOYR52.js → chunk-ENLB7NYV.js} +1304 -326
  31. package/dist/chunk-ENLB7NYV.js.map +1 -0
  32. package/dist/chunk-FPR7SKIE.js +6926 -0
  33. package/dist/chunk-FPR7SKIE.js.map +1 -0
  34. package/dist/{chunk-DGMQEI6Y.js → chunk-HFB74CLM.js} +30 -9
  35. package/dist/chunk-HFB74CLM.js.map +1 -0
  36. package/dist/{chunk-5RDRAO4B.js → chunk-HOZXKOE3.js} +37 -1
  37. package/dist/chunk-HOZXKOE3.js.map +1 -0
  38. package/dist/chunk-IDYWN37T.js +36 -0
  39. package/dist/chunk-IDYWN37T.js.map +1 -0
  40. package/dist/chunk-J4F2QLM2.js +273 -0
  41. package/dist/chunk-J4F2QLM2.js.map +1 -0
  42. package/dist/chunk-JGF5HLSI.js +1065 -0
  43. package/dist/chunk-JGF5HLSI.js.map +1 -0
  44. package/dist/{chunk-XIFFTATU.js → chunk-KDNWMKXV.js} +7166 -4237
  45. package/dist/chunk-KDNWMKXV.js.map +1 -0
  46. package/dist/chunk-KXAYUIKP.js +90 -0
  47. package/dist/chunk-KXAYUIKP.js.map +1 -0
  48. package/dist/{chunk-3U5IBM24.js → chunk-MEOB2DZA.js} +12 -2
  49. package/dist/chunk-MEOB2DZA.js.map +1 -0
  50. package/dist/{chunk-WKBO5R4O.js → chunk-MV5PQNIA.js} +2 -2
  51. package/dist/chunk-MV5PQNIA.js.map +1 -0
  52. package/dist/chunk-N2G4Q7ME.js +2672 -0
  53. package/dist/chunk-N2G4Q7ME.js.map +1 -0
  54. package/dist/chunk-OJBMDM5H.js +299 -0
  55. package/dist/chunk-OJBMDM5H.js.map +1 -0
  56. package/dist/{chunk-URLQAXTR.js → chunk-PTDC7ZUP.js} +2 -2
  57. package/dist/chunk-PTDC7ZUP.js.map +1 -0
  58. package/dist/{chunk-574C6MQR.js → chunk-REASC2QG.js} +173 -64
  59. package/dist/chunk-REASC2QG.js.map +1 -0
  60. package/dist/{chunk-7N4J557C.js → chunk-RT5SATF7.js} +1 -1
  61. package/dist/chunk-RT5SATF7.js.map +1 -0
  62. package/dist/chunk-SBTU5BEC.js +114 -0
  63. package/dist/chunk-SBTU5BEC.js.map +1 -0
  64. package/dist/{chunk-5KLVH3PY.js → chunk-SWPDKLNM.js} +5 -3
  65. package/dist/chunk-SWPDKLNM.js.map +1 -0
  66. package/dist/chunk-UCFJ43OS.js +520 -0
  67. package/dist/chunk-UCFJ43OS.js.map +1 -0
  68. package/dist/{chunk-VZQXX3WW.js → chunk-W7SLYS3M.js} +80 -16
  69. package/dist/chunk-W7SLYS3M.js.map +1 -0
  70. package/dist/{chunk-ANSJPYGI.js → chunk-WV3O5PGX.js} +3 -3
  71. package/dist/chunk-WV3O5PGX.js.map +1 -0
  72. package/dist/chunk-XHAO3K7I.js +18 -0
  73. package/dist/chunk-XHAO3K7I.js.map +1 -0
  74. package/dist/chunk-XJRJVXJR.js +1050 -0
  75. package/dist/chunk-XJRJVXJR.js.map +1 -0
  76. package/dist/chunk-YIL6HTJX.js +663 -0
  77. package/dist/chunk-YIL6HTJX.js.map +1 -0
  78. package/dist/{chunk-24AXE6SP.js → chunk-ZPSZZUWF.js} +1 -1
  79. package/dist/chunk-ZPSZZUWF.js.map +1 -0
  80. package/dist/{command-approvals-6Y57VCWZ.js → command-approvals-ZRY66LCW.js} +7 -5
  81. package/dist/context-C3RAP6K5.js +41 -0
  82. package/dist/{hook-approvals-CTUFKEJT.js → hook-approvals-DPQD5H65.js} +6 -5
  83. package/dist/index.js +947 -203
  84. package/dist/index.js.map +1 -1
  85. package/dist/{interactive-assets-CCAAWVKH.js → interactive-assets-73AQO5WP.js} +18 -9
  86. package/dist/interactive-assets-73AQO5WP.js.map +1 -0
  87. package/dist/job-runner.js +166 -111
  88. package/dist/job-runner.js.map +1 -1
  89. package/dist/job-supervisor.d.ts +2 -0
  90. package/dist/job-supervisor.js +121 -0
  91. package/dist/job-supervisor.js.map +1 -0
  92. package/dist/loader-DQNPDKOX.js +27 -0
  93. package/dist/{mcp-approvals-WNPH65BK.js → mcp-approvals-27LJYADQ.js} +6 -5
  94. package/dist/{mcp-config-YIJIES2C.js → mcp-config-GXSODNCM.js} +4 -3
  95. package/dist/memory-store-I6Z54VUN.js +51 -0
  96. package/dist/{model-window-store-YFVNXCIP.js → model-window-store-6VKXXTPJ.js} +9 -4
  97. package/dist/openai-compatible-IPUNBJ53.js +16 -0
  98. package/dist/permission-approvals-Q5IMFEZI.js +15 -0
  99. package/dist/permissions-7Y35X6HZ.js +62 -0
  100. package/dist/provider-approvals-5AGH3RVT.js +76 -0
  101. package/dist/sandbox-N2RY72GN.js +42 -0
  102. package/dist/{scrollback-LUKLIBVI.js → scrollback-GD76GNM4.js} +44 -26
  103. package/dist/scrollback-GD76GNM4.js.map +1 -0
  104. package/dist/sdk.d.ts +2739 -2069
  105. package/dist/sdk.js +77 -42
  106. package/dist/sdk.js.map +1 -1
  107. package/dist/settings-loader-KDBH45AQ.js +43 -0
  108. package/dist/settings-loader-KDBH45AQ.js.map +1 -0
  109. package/dist/{settings-removed-JWWPT4WA.js → settings-removed-3ATWJEF3.js} +2 -2
  110. package/dist/settings-removed-3ATWJEF3.js.map +1 -0
  111. package/dist/shell-selection-Z5WORZU4.js +31 -0
  112. package/dist/shell-selection-Z5WORZU4.js.map +1 -0
  113. package/package.json +25 -24
  114. package/dist/app-MOXXWEOY.js.map +0 -1
  115. package/dist/chunk-24AXE6SP.js.map +0 -1
  116. package/dist/chunk-3U5IBM24.js.map +0 -1
  117. package/dist/chunk-574C6MQR.js.map +0 -1
  118. package/dist/chunk-5GDZ22YP.js +0 -449
  119. package/dist/chunk-5GDZ22YP.js.map +0 -1
  120. package/dist/chunk-5KLVH3PY.js.map +0 -1
  121. package/dist/chunk-5RDRAO4B.js.map +0 -1
  122. package/dist/chunk-7N4J557C.js.map +0 -1
  123. package/dist/chunk-A7JLBK2Y.js +0 -3506
  124. package/dist/chunk-A7JLBK2Y.js.map +0 -1
  125. package/dist/chunk-ANSJPYGI.js.map +0 -1
  126. package/dist/chunk-BTZZUCLI.js +0 -264
  127. package/dist/chunk-BTZZUCLI.js.map +0 -1
  128. package/dist/chunk-C7D4NJ2D.js +0 -217
  129. package/dist/chunk-C7D4NJ2D.js.map +0 -1
  130. package/dist/chunk-CAGOB2N4.js.map +0 -1
  131. package/dist/chunk-DGMQEI6Y.js.map +0 -1
  132. package/dist/chunk-E75IPST5.js.map +0 -1
  133. package/dist/chunk-EYGD6X2T.js +0 -180
  134. package/dist/chunk-EYGD6X2T.js.map +0 -1
  135. package/dist/chunk-GTVB4HEM.js +0 -765
  136. package/dist/chunk-GTVB4HEM.js.map +0 -1
  137. package/dist/chunk-J7MIZ5CA.js.map +0 -1
  138. package/dist/chunk-KWHQ2XXL.js.map +0 -1
  139. package/dist/chunk-L6LK2QIQ.js +0 -657
  140. package/dist/chunk-L6LK2QIQ.js.map +0 -1
  141. package/dist/chunk-MAQXCUR4.js +0 -1007
  142. package/dist/chunk-MAQXCUR4.js.map +0 -1
  143. package/dist/chunk-S4XL7HOM.js +0 -402
  144. package/dist/chunk-S4XL7HOM.js.map +0 -1
  145. package/dist/chunk-URLQAXTR.js.map +0 -1
  146. package/dist/chunk-V4BOYR52.js.map +0 -1
  147. package/dist/chunk-VZQXX3WW.js.map +0 -1
  148. package/dist/chunk-WKBO5R4O.js.map +0 -1
  149. package/dist/chunk-XIFFTATU.js.map +0 -1
  150. package/dist/context-ZC5IFEAX.js +0 -25
  151. package/dist/interactive-assets-CCAAWVKH.js.map +0 -1
  152. package/dist/loader-4IDS2RIE.js +0 -15
  153. package/dist/openai-compatible-RHZUBHV6.js +0 -10
  154. package/dist/permission-approvals-76PVREFD.js +0 -14
  155. package/dist/permissions-CHCKTFQQ.js +0 -28
  156. package/dist/sandbox-CNVAQDA7.js +0 -23
  157. package/dist/scrollback-LUKLIBVI.js.map +0 -1
  158. package/dist/settings-loader-M2QP5TX2.js +0 -21
  159. package/dist/shell-selection-V6QAYXPX.js +0 -17
  160. package/patches/ink+6.8.0.patch +0 -13
  161. package/scripts/apply-ink-patch.mjs +0 -29
  162. package/scripts/ink-patch.mjs +0 -59
  163. package/scripts/verify-ink-patch.mjs +0 -11
  164. /package/dist/{command-approvals-6Y57VCWZ.js.map → additional-roots-VAWRQ625.js.map} +0 -0
  165. /package/dist/{context-ZC5IFEAX.js.map → command-approvals-ZRY66LCW.js.map} +0 -0
  166. /package/dist/{hook-approvals-CTUFKEJT.js.map → context-C3RAP6K5.js.map} +0 -0
  167. /package/dist/{loader-4IDS2RIE.js.map → hook-approvals-DPQD5H65.js.map} +0 -0
  168. /package/dist/{mcp-approvals-WNPH65BK.js.map → loader-DQNPDKOX.js.map} +0 -0
  169. /package/dist/{mcp-config-YIJIES2C.js.map → mcp-approvals-27LJYADQ.js.map} +0 -0
  170. /package/dist/{model-window-store-YFVNXCIP.js.map → mcp-config-GXSODNCM.js.map} +0 -0
  171. /package/dist/{openai-compatible-RHZUBHV6.js.map → memory-store-I6Z54VUN.js.map} +0 -0
  172. /package/dist/{permission-approvals-76PVREFD.js.map → model-window-store-6VKXXTPJ.js.map} +0 -0
  173. /package/dist/{permissions-CHCKTFQQ.js.map → openai-compatible-IPUNBJ53.js.map} +0 -0
  174. /package/dist/{sandbox-CNVAQDA7.js.map → permission-approvals-Q5IMFEZI.js.map} +0 -0
  175. /package/dist/{settings-loader-M2QP5TX2.js.map → permissions-7Y35X6HZ.js.map} +0 -0
  176. /package/dist/{settings-removed-JWWPT4WA.js.map → provider-approvals-5AGH3RVT.js.map} +0 -0
  177. /package/dist/{shell-selection-V6QAYXPX.js.map → sandbox-N2RY72GN.js.map} +0 -0
@@ -1,25 +0,0 @@
1
- import {
2
- AgentContextCache,
3
- buildMessages,
4
- buildSystemPrompt,
5
- buildSystemPromptZones
6
- } from "./chunk-A7JLBK2Y.js";
7
- import "./chunk-KWHQ2XXL.js";
8
- import "./chunk-VZQXX3WW.js";
9
- import "./chunk-E75IPST5.js";
10
- import "./chunk-5KLVH3PY.js";
11
- import "./chunk-5GDZ22YP.js";
12
- import "./chunk-BTZZUCLI.js";
13
- import "./chunk-WKBO5R4O.js";
14
- import "./chunk-ANSJPYGI.js";
15
- import "./chunk-DGMQEI6Y.js";
16
- import "./chunk-5RDRAO4B.js";
17
- import "./chunk-574C6MQR.js";
18
- import "./chunk-24AXE6SP.js";
19
- export {
20
- AgentContextCache,
21
- buildMessages,
22
- buildSystemPrompt,
23
- buildSystemPromptZones
24
- };
25
- //# sourceMappingURL=context-ZC5IFEAX.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/tui/interactive-assets.ts"],"sourcesContent":["import { discoverCommands } from '../commands/loader.js';\r\nimport { discoverSkills, type Skill } from '../skills.js';\r\nimport type { SlashCommand } from '../types/commands.js';\r\nimport type { AgentConfig } from '../types/runtime.js';\r\nimport { listCustomThemes, resolveTheme, type ResolvedTheme } from './theme.js';\r\n\r\nexport interface InteractiveAssets {\r\n commands: SlashCommand[];\r\n skills: Skill[];\r\n customThemes: string[];\r\n initialTheme: ResolvedTheme | null;\r\n}\r\n\r\n/** Load filesystem-backed UI metadata before React begins rendering. */\r\nexport function loadInteractiveAssets(\r\n config: Pick<AgentConfig, 'workspace' | 'settings'>,\r\n): InteractiveAssets {\r\n return {\r\n commands: discoverCommands(config.workspace),\r\n skills: discoverSkills(config.workspace, config.settings.skills.overrides, {\r\n executionOverrides: config.settings.skills.execution,\r\n enabled: config.settings.skills.enabled,\r\n }),\r\n customThemes: listCustomThemes(config.workspace),\r\n initialTheme: resolveTheme(config.workspace, config.settings.theme ?? 'apple'),\r\n };\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;AAcO,SAAS,sBACd,QACmB;AACnB,SAAO;AAAA,IACL,UAAU,iBAAiB,OAAO,SAAS;AAAA,IAC3C,QAAQ,eAAe,OAAO,WAAW,OAAO,SAAS,OAAO,WAAW;AAAA,MACzE,oBAAoB,OAAO,SAAS,OAAO;AAAA,MAC3C,SAAS,OAAO,SAAS,OAAO;AAAA,IAClC,CAAC;AAAA,IACD,cAAc,iBAAiB,OAAO,SAAS;AAAA,IAC/C,cAAc,aAAa,OAAO,WAAW,OAAO,SAAS,SAAS,OAAO;AAAA,EAC/E;AACF;","names":[]}
@@ -1,15 +0,0 @@
1
- import {
2
- discoverCommands,
3
- generateCommandListing,
4
- resolveCommandBody
5
- } from "./chunk-E75IPST5.js";
6
- import "./chunk-5KLVH3PY.js";
7
- import "./chunk-DGMQEI6Y.js";
8
- import "./chunk-574C6MQR.js";
9
- import "./chunk-24AXE6SP.js";
10
- export {
11
- discoverCommands,
12
- generateCommandListing,
13
- resolveCommandBody
14
- };
15
- //# sourceMappingURL=loader-4IDS2RIE.js.map
@@ -1,10 +0,0 @@
1
- import {
2
- chatCompletionStream,
3
- convertTools
4
- } from "./chunk-GTVB4HEM.js";
5
- import "./chunk-7N4J557C.js";
6
- export {
7
- chatCompletionStream,
8
- convertTools
9
- };
10
- //# sourceMappingURL=openai-compatible-RHZUBHV6.js.map
@@ -1,14 +0,0 @@
1
- import {
2
- evaluateProjectAllowRule,
3
- partitionProjectAllowRules,
4
- persistProjectAllowRuleChoice
5
- } from "./chunk-WKBO5R4O.js";
6
- import "./chunk-DGMQEI6Y.js";
7
- import "./chunk-574C6MQR.js";
8
- import "./chunk-24AXE6SP.js";
9
- export {
10
- evaluateProjectAllowRule,
11
- partitionProjectAllowRules,
12
- persistProjectAllowRuleChoice
13
- };
14
- //# sourceMappingURL=permission-approvals-76PVREFD.js.map
@@ -1,28 +0,0 @@
1
- import {
2
- evaluatePermission,
3
- evaluatePermissionDetail,
4
- hasAdjudicationPolicy,
5
- parseRule,
6
- permissionResultOf,
7
- permissionRuleForToolCall,
8
- permissionRuleLadder,
9
- permissionRuleMatchesCall,
10
- permissionRuleOf,
11
- primaryArgForRule
12
- } from "./chunk-MAQXCUR4.js";
13
- import "./chunk-5GDZ22YP.js";
14
- import "./chunk-EYGD6X2T.js";
15
- import "./chunk-24AXE6SP.js";
16
- export {
17
- evaluatePermission,
18
- evaluatePermissionDetail,
19
- hasAdjudicationPolicy,
20
- parseRule,
21
- permissionResultOf,
22
- permissionRuleForToolCall,
23
- permissionRuleLadder,
24
- permissionRuleMatchesCall,
25
- permissionRuleOf,
26
- primaryArgForRule
27
- };
28
- //# sourceMappingURL=permissions-CHCKTFQQ.js.map
@@ -1,23 +0,0 @@
1
- import {
2
- buildSandboxExecution,
3
- createSandbox,
4
- hasDomainPolicy,
5
- matchesExcludedCommand,
6
- sandboxBackendAvailable,
7
- sandboxCoverage,
8
- sandboxPolicySummary,
9
- unbindablePaths,
10
- unsandboxedRefusalMessage
11
- } from "./chunk-EYGD6X2T.js";
12
- export {
13
- buildSandboxExecution,
14
- createSandbox,
15
- hasDomainPolicy,
16
- matchesExcludedCommand,
17
- sandboxBackendAvailable,
18
- sandboxCoverage,
19
- sandboxPolicySummary,
20
- unbindablePaths,
21
- unsandboxedRefusalMessage
22
- };
23
- //# sourceMappingURL=sandbox-CNVAQDA7.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cli/scrollback.ts"],"sourcesContent":["import { createInterface } from 'node:readline/promises';\r\nimport type { AgentConfig, PermissionMode } from '../types/runtime.js';\r\nimport type { AgentLoopCallbacks } from '../types/providers.js';\r\nimport type { Message } from '../types/messages.js';\r\nimport type { ToolCall, ToolResult } from '../types/tools.js';\r\nimport { runAgentLoop } from '../agent/loop.js';\r\nimport { createDefaultRegistry, type ToolRegistry } from '../tools/registry.js';\r\nimport { getPrimaryArg } from '../tools/primary-arg.js';\r\nimport { toolResultErrorMessage, toolResultSucceeded } from '../tools/result.js';\r\n\r\nexport interface ScrollbackOptions {\r\n mode: PermissionMode;\r\n input?: NodeJS.ReadableStream;\r\n output?: { write: (s: string) => boolean | void };\r\n readPrompt?: () => Promise<string | null>;\r\n runLoop?: typeof runAgentLoop;\r\n registry?: ToolRegistry;\r\n}\r\n\r\nexport function formatToolCall(call: ToolCall): string {\r\n const primary = getPrimaryArg(call.arguments);\r\n return `\\n[tool] ${call.name}${primary ? ` ${primary}` : ''}\\n`;\r\n}\r\n\r\nexport function formatToolResult(result: ToolResult, call?: ToolCall): string {\r\n const success = toolResultSucceeded(result);\r\n const label = success ? '[OK]' : '[ERR]';\r\n const name = call?.name ?? 'tool';\r\n const primary = call ? getPrimaryArg(call.arguments) : '';\r\n const detail = success ? result.content : (toolResultErrorMessage(result) ?? '');\r\n return `${label} ${name}${primary ? ` ${primary}` : ''}${detail ? `\\n${detail.trimEnd()}` : ''}\\n`;\r\n}\r\n\r\nexport async function runScrollbackSession(\r\n config: AgentConfig,\r\n options: ScrollbackOptions,\r\n): Promise<Message[]> {\r\n const output = options.output ?? process.stdout;\r\n const registry =\r\n options.registry ?? createDefaultRegistry({ agents: config.settings.agents.mode !== 'off' });\r\n const runLoop = options.runLoop ?? runAgentLoop;\r\n const history: Message[] = [];\r\n const toolCalls = new Map<string, ToolCall>();\r\n const close = createPromptReader(options);\r\n\r\n output.write('Book scrollback mode. Terminal scrollback owns history. Type /exit to quit.\\n\\n');\r\n\r\n try {\r\n while (true) {\r\n const prompt = await close.read('You> ');\r\n if (prompt === null) break;\r\n const trimmed = prompt.trim();\r\n if (!trimmed) continue;\r\n if (trimmed === '/exit') break;\r\n if (trimmed === '/clear') {\r\n history.length = 0;\r\n output.write('[cleared]\\n');\r\n continue;\r\n }\r\n\r\n output.write('\\nBook\\n');\r\n const updated = await runLoop(\r\n config,\r\n registry,\r\n prompt,\r\n history,\r\n {\r\n onText: (text) => output.write(text),\r\n onReasoning: (text) => output.write(`\\n[thinking] ${text}\\n`),\r\n onToolCall: (call) => {\r\n toolCalls.set(call.id, call);\r\n output.write(formatToolCall(call));\r\n },\r\n onToolResult: (result) =>\r\n output.write(formatToolResult(result, toolCalls.get(result.toolCallId))),\r\n onError: (error) => output.write(`\\n[error] ${error}\\n`),\r\n onTurnStart: (turn) => {\r\n if (turn > 1) output.write(`\\nBook turn ${turn}\\n`);\r\n },\r\n onDone: () => output.write('\\n'),\r\n onPermissionRequired: (call) => askPermission(call, close.read, output),\r\n onUsage: () => {},\r\n } satisfies AgentLoopCallbacks,\r\n options.mode,\r\n );\r\n\r\n history.length = 0;\r\n history.push(...updated);\r\n output.write('\\n');\r\n }\r\n } finally {\r\n close.close();\r\n }\r\n\r\n return history;\r\n}\r\n\r\nfunction createPromptReader(options: ScrollbackOptions): {\r\n read: (prompt?: string) => Promise<string | null>;\r\n close: () => void;\r\n} {\r\n if (options.readPrompt)\r\n return { read: () => options.readPrompt?.() ?? Promise.resolve(null), close: () => {} };\r\n\r\n const rl = createInterface({\r\n input: options.input ?? process.stdin,\r\n output: process.stdout,\r\n });\r\n\r\n return {\r\n read: (prompt = 'You> ') => rl.question(prompt),\r\n close: () => rl.close(),\r\n };\r\n}\r\n\r\nasync function askPermission(\r\n call: ToolCall,\r\n read: (prompt?: string) => Promise<string | null>,\r\n output: { write: (s: string) => boolean | void },\r\n): Promise<'allow' | 'deny' | 'always'> {\r\n output.write(\r\n `[permission] ${call.name}${getPrimaryArg(call.arguments) ? ` ${getPrimaryArg(call.arguments)}` : ''}\\nAllow? [y]es/[n]o/[a]lways: `,\r\n );\r\n const answer = (await read(''))?.trim().toLowerCase();\r\n if (answer === 'a' || answer === 'always') return 'always';\r\n if (answer === 'y' || answer === 'yes') return 'allow';\r\n return 'deny';\r\n}\r\n"],"mappings":"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","names":[]}
@@ -1,21 +0,0 @@
1
- import {
2
- loadSettingsFile,
3
- mergeSettings,
4
- migrateLegacyPermissions,
5
- resolveSettings,
6
- settingsLayerPaths
7
- } from "./chunk-BTZZUCLI.js";
8
- import "./chunk-WKBO5R4O.js";
9
- import "./chunk-ANSJPYGI.js";
10
- import "./chunk-DGMQEI6Y.js";
11
- import "./chunk-5RDRAO4B.js";
12
- import "./chunk-574C6MQR.js";
13
- import "./chunk-24AXE6SP.js";
14
- export {
15
- loadSettingsFile,
16
- mergeSettings,
17
- migrateLegacyPermissions,
18
- resolveSettings,
19
- settingsLayerPaths
20
- };
21
- //# sourceMappingURL=settings-loader-M2QP5TX2.js.map
@@ -1,17 +0,0 @@
1
- import {
2
- decodePowerShellCommand,
3
- describeShell,
4
- encodePowerShellCommand,
5
- resolveShell,
6
- shellExecution,
7
- shellPromptLine
8
- } from "./chunk-VZQXX3WW.js";
9
- export {
10
- decodePowerShellCommand,
11
- describeShell,
12
- encodePowerShellCommand,
13
- resolveShell,
14
- shellExecution,
15
- shellPromptLine
16
- };
17
- //# sourceMappingURL=shell-selection-V6QAYXPX.js.map
@@ -1,13 +0,0 @@
1
- diff --git a/node_modules/ink/build/log-update.js b/node_modules/ink/build/log-update.js
2
- index 73e297d..06c1a22 100644
3
- --- a/node_modules/ink/build/log-update.js
4
- +++ b/node_modules/ink/build/log-update.js
5
- @@ -161,7 +161,7 @@ const createIncremental = (stream, { showCursor = false } = {}) => {
6
- buffer.push(ansiEscapes.eraseLines(previousVisible - visibleCount + extraSlot), ansiEscapes.cursorUp(visibleCount));
7
- }
8
- else {
9
- - buffer.push(ansiEscapes.cursorUp(previousVisible - 1));
10
- + buffer.push(ansiEscapes.cursorUp(previousLines.length - 1));
11
- }
12
- for (let i = 0; i < visibleCount; i++) {
13
- const isLastLine = i === visibleCount - 1;
@@ -1,29 +0,0 @@
1
- import { createRequire } from 'node:module';
2
- import { spawnSync } from 'node:child_process';
3
- import {
4
- assertInkVersionMatchesPatch,
5
- assertRendererPatchApplied,
6
- resolveInkPatch,
7
- } from './ink-patch.mjs';
8
-
9
- const patch = resolveInkPatch();
10
- if (!patch) process.exit(0);
11
-
12
- const require = createRequire(import.meta.url);
13
- let patchPackagePath;
14
- try {
15
- patchPackagePath = require.resolve('patch-package');
16
- } catch {
17
- // Production tarballs do not include devDependencies; their install must remain usable.
18
- process.exit(0);
19
- }
20
-
21
- // Checked before patch-package runs, because patch-package itself only warns on a version
22
- // mismatch and applies the patch regardless.
23
- assertInkVersionMatchesPatch(patch);
24
-
25
- const result = spawnSync(process.execPath, [patchPackagePath], { stdio: 'inherit' });
26
- if (result.error) throw result.error;
27
- if (result.status !== 0) process.exit(result.status ?? 1);
28
-
29
- assertRendererPatchApplied(patch);
@@ -1,59 +0,0 @@
1
- import { existsSync, readFileSync, readdirSync } from 'node:fs';
2
- import { createRequire } from 'node:module';
3
- import { dirname, join } from 'node:path';
4
-
5
- const require = createRequire(import.meta.url);
6
-
7
- /** The single renderer line the patch rewrites — see patches/ink+6.8.0.patch. */
8
- export const PATCHED_RENDERER_CALL = 'ansiEscapes.cursorUp(previousLines.length - 1)';
9
-
10
- /**
11
- * Locate the ink renderer patch and the ink install it targets, or undefined when either is
12
- * absent — production tarballs ship neither the patches directory nor a resolvable dev tree.
13
- */
14
- export function resolveInkPatch(root = process.cwd()) {
15
- const patchesDir = join(root, 'patches');
16
- if (!existsSync(patchesDir)) return undefined;
17
-
18
- const patchFile = readdirSync(patchesDir).find(
19
- (name) => name.startsWith('ink+') && name.endsWith('.patch'),
20
- );
21
- if (!patchFile) return undefined;
22
-
23
- let buildDir;
24
- try {
25
- buildDir = dirname(require.resolve('ink'));
26
- } catch {
27
- return undefined;
28
- }
29
-
30
- return {
31
- patchPath: join(patchesDir, patchFile),
32
- patchFile,
33
- patchedVersion: patchFile.slice('ink+'.length, -'.patch'.length),
34
- installedVersion: JSON.parse(readFileSync(join(buildDir, '..', 'package.json'), 'utf8'))
35
- .version,
36
- logUpdatePath: join(buildDir, 'log-update.js'),
37
- };
38
- }
39
-
40
- /**
41
- * patch-package matches patches by package name alone, so `ink+6.8.0.patch` still applies to a
42
- * later ink and downgrades the version mismatch to a warning. Pin the version so a bump fails
43
- * instead of silently grafting the 6.8 renderer fix onto a renderer it was never written for.
44
- */
45
- export function assertInkVersionMatchesPatch({ patchFile, patchedVersion, installedVersion }) {
46
- if (installedVersion === patchedVersion) return;
47
- throw new Error(
48
- `Ink renderer patch targets ink@${patchedVersion} but ink@${installedVersion} is installed.\n` +
49
- `patch-package only warns about this and applies the patch anyway.\n` +
50
- `Re-verify TUI rendering against ink@${installedVersion}, then run \`npx patch-package ink\` ` +
51
- `to retarget ${patchFile}.`,
52
- );
53
- }
54
-
55
- export function assertRendererPatchApplied({ patchedVersion, logUpdatePath }) {
56
- const source = readFileSync(logUpdatePath, 'utf8');
57
- if (source.includes(PATCHED_RENDERER_CALL)) return;
58
- throw new Error(`Ink ${patchedVersion} renderer patch is missing from ${logUpdatePath}`);
59
- }
@@ -1,11 +0,0 @@
1
- import {
2
- assertInkVersionMatchesPatch,
3
- assertRendererPatchApplied,
4
- resolveInkPatch,
5
- } from './ink-patch.mjs';
6
-
7
- const patch = resolveInkPatch();
8
- if (!patch) throw new Error('No ink renderer patch found in patches/');
9
-
10
- assertInkVersionMatchesPatch(patch);
11
- assertRendererPatchApplied(patch);