@letrquan/book 0.3.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 (148) hide show
  1. package/CHANGELOG.md +1024 -0
  2. package/README.md +6 -3
  3. package/dist/{additional-roots-H7UNAEHS.js → additional-roots-VAWRQ625.js} +8 -7
  4. package/dist/{app-GE4OHJOC.js → app-J7BVPSUH.js} +5397 -2953
  5. package/dist/app-J7BVPSUH.js.map +1 -0
  6. package/dist/chunk-32WBCUAN.js +660 -0
  7. package/dist/chunk-32WBCUAN.js.map +1 -0
  8. package/dist/{chunk-525CAZPY.js → chunk-4DKHLZRI.js} +6 -6
  9. package/dist/{chunk-4AS7LKKQ.js → chunk-62EEAUID.js} +2 -2
  10. package/dist/{chunk-AQEQX4FF.js → chunk-AHC7OU75.js} +385 -55
  11. package/dist/chunk-AHC7OU75.js.map +1 -0
  12. package/dist/{chunk-EFJ2NH6E.js → chunk-AJZWLKLQ.js} +63 -14
  13. package/dist/chunk-AJZWLKLQ.js.map +1 -0
  14. package/dist/chunk-B5FC3MYZ.js +395 -0
  15. package/dist/chunk-B5FC3MYZ.js.map +1 -0
  16. package/dist/{chunk-67UZEWWF.js → chunk-DNFQTSMJ.js} +53 -11
  17. package/dist/chunk-DNFQTSMJ.js.map +1 -0
  18. package/dist/{chunk-TLX3H2CL.js → chunk-E5WLQSKA.js} +231 -40
  19. package/dist/chunk-E5WLQSKA.js.map +1 -0
  20. package/dist/chunk-ECLC4CIJ.js +1181 -0
  21. package/dist/chunk-ECLC4CIJ.js.map +1 -0
  22. package/dist/chunk-EEX6QNXV.js +127 -0
  23. package/dist/chunk-EEX6QNXV.js.map +1 -0
  24. package/dist/chunk-EFXVSQ5J.js +931 -0
  25. package/dist/chunk-EFXVSQ5J.js.map +1 -0
  26. package/dist/{chunk-RFJ6Q6LE.js → chunk-ENLB7NYV.js} +577 -164
  27. package/dist/chunk-ENLB7NYV.js.map +1 -0
  28. package/dist/{chunk-IME7R2UI.js → chunk-FPR7SKIE.js} +1268 -883
  29. package/dist/chunk-FPR7SKIE.js.map +1 -0
  30. package/dist/{chunk-VPNLCMVR.js → chunk-HFB74CLM.js} +13 -5
  31. package/dist/chunk-HFB74CLM.js.map +1 -0
  32. package/dist/{chunk-5RDRAO4B.js → chunk-HOZXKOE3.js} +37 -1
  33. package/dist/chunk-HOZXKOE3.js.map +1 -0
  34. package/dist/chunk-IDYWN37T.js +36 -0
  35. package/dist/chunk-IDYWN37T.js.map +1 -0
  36. package/dist/{chunk-YC6W4EJH.js → chunk-JGF5HLSI.js} +193 -75
  37. package/dist/chunk-JGF5HLSI.js.map +1 -0
  38. package/dist/{chunk-5YHTKWJN.js → chunk-KDNWMKXV.js} +2447 -907
  39. package/dist/chunk-KDNWMKXV.js.map +1 -0
  40. package/dist/{chunk-Y2VHN7TC.js → chunk-MEOB2DZA.js} +11 -1
  41. package/dist/chunk-MEOB2DZA.js.map +1 -0
  42. package/dist/{chunk-KBQS35OV.js → chunk-MV5PQNIA.js} +2 -2
  43. package/dist/chunk-N2G4Q7ME.js +2672 -0
  44. package/dist/chunk-N2G4Q7ME.js.map +1 -0
  45. package/dist/{chunk-62QL5QUP.js → chunk-OJBMDM5H.js} +17 -1
  46. package/dist/chunk-OJBMDM5H.js.map +1 -0
  47. package/dist/{chunk-56SIEMDX.js → chunk-PTDC7ZUP.js} +2 -2
  48. package/dist/{chunk-X4NJT436.js → chunk-REASC2QG.js} +67 -28
  49. package/dist/chunk-REASC2QG.js.map +1 -0
  50. package/dist/chunk-SBTU5BEC.js +114 -0
  51. package/dist/chunk-SBTU5BEC.js.map +1 -0
  52. package/dist/{chunk-HQI7NYGX.js → chunk-SWPDKLNM.js} +2 -2
  53. package/dist/{chunk-W3XFHEF4.js → chunk-UCFJ43OS.js} +140 -28
  54. package/dist/chunk-UCFJ43OS.js.map +1 -0
  55. package/dist/{chunk-QYBD22H5.js → chunk-W7SLYS3M.js} +80 -16
  56. package/dist/chunk-W7SLYS3M.js.map +1 -0
  57. package/dist/{chunk-SOW4WRQP.js → chunk-WV3O5PGX.js} +3 -3
  58. package/dist/{chunk-JTPOI3KU.js → chunk-XJRJVXJR.js} +262 -38
  59. package/dist/chunk-XJRJVXJR.js.map +1 -0
  60. package/dist/{chunk-224FJZLH.js → chunk-YIL6HTJX.js} +228 -5
  61. package/dist/chunk-YIL6HTJX.js.map +1 -0
  62. package/dist/{command-approvals-VBIU6BLM.js → command-approvals-ZRY66LCW.js} +5 -4
  63. package/dist/context-C3RAP6K5.js +41 -0
  64. package/dist/{hook-approvals-ZVT4V7IM.js → hook-approvals-DPQD5H65.js} +5 -4
  65. package/dist/index.js +657 -754
  66. package/dist/index.js.map +1 -1
  67. package/dist/{interactive-assets-T4I4SEHU.js → interactive-assets-73AQO5WP.js} +11 -6
  68. package/dist/{interactive-assets-T4I4SEHU.js.map → interactive-assets-73AQO5WP.js.map} +1 -1
  69. package/dist/job-runner.js +10 -3
  70. package/dist/job-runner.js.map +1 -1
  71. package/dist/job-supervisor.js +13 -4
  72. package/dist/job-supervisor.js.map +1 -1
  73. package/dist/loader-DQNPDKOX.js +27 -0
  74. package/dist/{mcp-approvals-HJ2VDYMC.js → mcp-approvals-27LJYADQ.js} +5 -4
  75. package/dist/{mcp-config-RNB5LEVE.js → mcp-config-GXSODNCM.js} +3 -2
  76. package/dist/memory-store-I6Z54VUN.js +51 -0
  77. package/dist/{model-window-store-MTSQ5JDJ.js → model-window-store-6VKXXTPJ.js} +4 -3
  78. package/dist/{openai-compatible-2OB54YST.js → openai-compatible-IPUNBJ53.js} +5 -3
  79. package/dist/{permission-approvals-YLV6UC5W.js → permission-approvals-Q5IMFEZI.js} +5 -4
  80. package/dist/{permissions-DHOKF3W2.js → permissions-7Y35X6HZ.js} +26 -9
  81. package/dist/provider-approvals-5AGH3RVT.js +76 -0
  82. package/dist/{sandbox-WRYTZH3D.js → sandbox-N2RY72GN.js} +6 -5
  83. package/dist/{scrollback-35ME2GFX.js → scrollback-GD76GNM4.js} +36 -28
  84. package/dist/scrollback-GD76GNM4.js.map +1 -0
  85. package/dist/sdk.d.ts +876 -64
  86. package/dist/sdk.js +57 -37
  87. package/dist/sdk.js.map +1 -1
  88. package/dist/settings-loader-KDBH45AQ.js +43 -0
  89. package/dist/{settings-removed-JWWPT4WA.js → settings-removed-3ATWJEF3.js} +2 -2
  90. package/dist/shell-selection-Z5WORZU4.js +31 -0
  91. package/dist/shell-selection-Z5WORZU4.js.map +1 -0
  92. package/package.json +5 -5
  93. package/dist/app-GE4OHJOC.js.map +0 -1
  94. package/dist/chunk-224FJZLH.js.map +0 -1
  95. package/dist/chunk-5RDRAO4B.js.map +0 -1
  96. package/dist/chunk-5YHTKWJN.js.map +0 -1
  97. package/dist/chunk-62QL5QUP.js.map +0 -1
  98. package/dist/chunk-67UZEWWF.js.map +0 -1
  99. package/dist/chunk-6OQQOMZR.js +0 -785
  100. package/dist/chunk-6OQQOMZR.js.map +0 -1
  101. package/dist/chunk-AQEQX4FF.js.map +0 -1
  102. package/dist/chunk-C7ADUNPR.js +0 -273
  103. package/dist/chunk-C7ADUNPR.js.map +0 -1
  104. package/dist/chunk-EFJ2NH6E.js.map +0 -1
  105. package/dist/chunk-IME7R2UI.js.map +0 -1
  106. package/dist/chunk-J62VZYOB.js +0 -1339
  107. package/dist/chunk-J62VZYOB.js.map +0 -1
  108. package/dist/chunk-JTPOI3KU.js.map +0 -1
  109. package/dist/chunk-QYBD22H5.js.map +0 -1
  110. package/dist/chunk-RFJ6Q6LE.js.map +0 -1
  111. package/dist/chunk-S4JMID4G.js +0 -259
  112. package/dist/chunk-S4JMID4G.js.map +0 -1
  113. package/dist/chunk-TLX3H2CL.js.map +0 -1
  114. package/dist/chunk-VPNLCMVR.js.map +0 -1
  115. package/dist/chunk-W3XFHEF4.js.map +0 -1
  116. package/dist/chunk-X4NJT436.js.map +0 -1
  117. package/dist/chunk-X66I2NQO.js +0 -137
  118. package/dist/chunk-X66I2NQO.js.map +0 -1
  119. package/dist/chunk-Y2VHN7TC.js.map +0 -1
  120. package/dist/chunk-YC6W4EJH.js.map +0 -1
  121. package/dist/context-CBOBDY5Q.js +0 -38
  122. package/dist/loader-S77OVTHH.js +0 -18
  123. package/dist/memory-store-DZUT5HUH.js +0 -75
  124. package/dist/scrollback-35ME2GFX.js.map +0 -1
  125. package/dist/settings-loader-JUNPGAAM.js +0 -35
  126. package/dist/shell-selection-CDHGJ4GC.js +0 -17
  127. /package/dist/{additional-roots-H7UNAEHS.js.map → additional-roots-VAWRQ625.js.map} +0 -0
  128. /package/dist/{chunk-525CAZPY.js.map → chunk-4DKHLZRI.js.map} +0 -0
  129. /package/dist/{chunk-4AS7LKKQ.js.map → chunk-62EEAUID.js.map} +0 -0
  130. /package/dist/{chunk-KBQS35OV.js.map → chunk-MV5PQNIA.js.map} +0 -0
  131. /package/dist/{chunk-56SIEMDX.js.map → chunk-PTDC7ZUP.js.map} +0 -0
  132. /package/dist/{chunk-HQI7NYGX.js.map → chunk-SWPDKLNM.js.map} +0 -0
  133. /package/dist/{chunk-SOW4WRQP.js.map → chunk-WV3O5PGX.js.map} +0 -0
  134. /package/dist/{command-approvals-VBIU6BLM.js.map → command-approvals-ZRY66LCW.js.map} +0 -0
  135. /package/dist/{context-CBOBDY5Q.js.map → context-C3RAP6K5.js.map} +0 -0
  136. /package/dist/{hook-approvals-ZVT4V7IM.js.map → hook-approvals-DPQD5H65.js.map} +0 -0
  137. /package/dist/{loader-S77OVTHH.js.map → loader-DQNPDKOX.js.map} +0 -0
  138. /package/dist/{mcp-approvals-HJ2VDYMC.js.map → mcp-approvals-27LJYADQ.js.map} +0 -0
  139. /package/dist/{mcp-config-RNB5LEVE.js.map → mcp-config-GXSODNCM.js.map} +0 -0
  140. /package/dist/{memory-store-DZUT5HUH.js.map → memory-store-I6Z54VUN.js.map} +0 -0
  141. /package/dist/{model-window-store-MTSQ5JDJ.js.map → model-window-store-6VKXXTPJ.js.map} +0 -0
  142. /package/dist/{openai-compatible-2OB54YST.js.map → openai-compatible-IPUNBJ53.js.map} +0 -0
  143. /package/dist/{permission-approvals-YLV6UC5W.js.map → permission-approvals-Q5IMFEZI.js.map} +0 -0
  144. /package/dist/{permissions-DHOKF3W2.js.map → permissions-7Y35X6HZ.js.map} +0 -0
  145. /package/dist/{sandbox-WRYTZH3D.js.map → provider-approvals-5AGH3RVT.js.map} +0 -0
  146. /package/dist/{settings-loader-JUNPGAAM.js.map → sandbox-N2RY72GN.js.map} +0 -0
  147. /package/dist/{settings-removed-JWWPT4WA.js.map → settings-loader-KDBH45AQ.js.map} +0 -0
  148. /package/dist/{shell-selection-CDHGJ4GC.js.map → settings-removed-3ATWJEF3.js.map} +0 -0
@@ -1,39 +1,44 @@
1
1
  import {
2
2
  createDefaultRegistry,
3
3
  runAgentLoop
4
- } from "./chunk-5YHTKWJN.js";
5
- import "./chunk-Y2VHN7TC.js";
6
- import "./chunk-IME7R2UI.js";
7
- import "./chunk-AQEQX4FF.js";
8
- import "./chunk-67UZEWWF.js";
9
- import "./chunk-W3XFHEF4.js";
10
- import "./chunk-6OQQOMZR.js";
11
- import "./chunk-J62VZYOB.js";
12
- import "./chunk-JTPOI3KU.js";
13
- import "./chunk-4AS7LKKQ.js";
14
- import "./chunk-QYBD22H5.js";
15
- import "./chunk-EFJ2NH6E.js";
4
+ } from "./chunk-KDNWMKXV.js";
5
+ import "./chunk-FPR7SKIE.js";
6
+ import {
7
+ permissionRuleForToolCall
8
+ } from "./chunk-N2G4Q7ME.js";
9
+ import "./chunk-XJRJVXJR.js";
10
+ import "./chunk-AHC7OU75.js";
11
+ import "./chunk-DNFQTSMJ.js";
12
+ import "./chunk-UCFJ43OS.js";
13
+ import "./chunk-HOZXKOE3.js";
14
+ import "./chunk-EFXVSQ5J.js";
15
+ import "./chunk-62EEAUID.js";
16
+ import "./chunk-AJZWLKLQ.js";
16
17
  import "./chunk-KXAYUIKP.js";
17
- import "./chunk-HQI7NYGX.js";
18
+ import "./chunk-SWPDKLNM.js";
18
19
  import "./chunk-2AAOF5B5.js";
19
- import "./chunk-YC6W4EJH.js";
20
- import "./chunk-C7ADUNPR.js";
20
+ import "./chunk-MEOB2DZA.js";
21
+ import "./chunk-W7SLYS3M.js";
22
+ import "./chunk-JGF5HLSI.js";
23
+ import "./chunk-32WBCUAN.js";
21
24
  import "./chunk-RT5SATF7.js";
22
25
  import "./chunk-XHAO3K7I.js";
23
- import "./chunk-525CAZPY.js";
24
- import "./chunk-X66I2NQO.js";
25
- import "./chunk-62QL5QUP.js";
26
+ import "./chunk-SBTU5BEC.js";
27
+ import "./chunk-4DKHLZRI.js";
28
+ import "./chunk-OJBMDM5H.js";
26
29
  import {
27
30
  getPrimaryArg,
28
31
  toolResultErrorMessage,
29
32
  toolResultSucceeded
30
- } from "./chunk-224FJZLH.js";
31
- import "./chunk-KBQS35OV.js";
32
- import "./chunk-SOW4WRQP.js";
33
- import "./chunk-VPNLCMVR.js";
34
- import "./chunk-X4NJT436.js";
33
+ } from "./chunk-YIL6HTJX.js";
34
+ import "./chunk-EEX6QNXV.js";
35
+ import "./chunk-MV5PQNIA.js";
36
+ import "./chunk-B5FC3MYZ.js";
37
+ import "./chunk-WV3O5PGX.js";
38
+ import "./chunk-HFB74CLM.js";
39
+ import "./chunk-REASC2QG.js";
40
+ import "./chunk-IDYWN37T.js";
35
41
  import "./chunk-ZPSZZUWF.js";
36
- import "./chunk-5RDRAO4B.js";
37
42
 
38
43
  // src/cli/scrollback.ts
39
44
  import { createInterface } from "readline/promises";
@@ -102,7 +107,9 @@ Book turn ${turn}
102
107
  onUsage: () => {
103
108
  }
104
109
  },
105
- options.mode
110
+ options.mode,
111
+ // The line is what the user typed, so its `$name` tokens invoke skills.
112
+ { typedText: prompt }
106
113
  );
107
114
  history.length = 0;
108
115
  history.push(...updated);
@@ -127,14 +134,15 @@ function createPromptReader(options) {
127
134
  };
128
135
  }
129
136
  async function askPermission(call, read, output) {
137
+ const canRemember = permissionRuleForToolCall(call) !== void 0;
130
138
  output.write(
131
139
  `[permission] ${call.name}${getPrimaryArg(call.arguments) ? ` ${getPrimaryArg(call.arguments)}` : ""}
132
- Allow? [y]es/[n]o/[a]lways: `
140
+ Allow? [y]es/[n]o${canRemember ? "/[a]lways" : ""}: `
133
141
  );
134
142
  const line = await read("");
135
143
  if (line === null) return { result: "deny", reason: "no_approver" };
136
144
  const answer = line.trim().toLowerCase();
137
- if (answer === "a" || answer === "always") return "always";
145
+ if (canRemember && (answer === "a" || answer === "always")) return "always";
138
146
  if (answer === "y" || answer === "yes") return "allow";
139
147
  return "deny";
140
148
  }
@@ -143,4 +151,4 @@ export {
143
151
  formatToolResult,
144
152
  runScrollbackSession
145
153
  };
146
- //# sourceMappingURL=scrollback-35ME2GFX.js.map
154
+ //# sourceMappingURL=scrollback-GD76GNM4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/scrollback.ts"],"sourcesContent":["import { createInterface } from 'node:readline/promises';\nimport type { AgentConfig, PermissionMode } from '../types/runtime.js';\nimport type { AgentLoopCallbacks } from '../types/providers.js';\nimport type { Message } from '../types/messages.js';\nimport type { PermissionDecision, PermissionResult, ToolCall, ToolResult } from '../types/tools.js';\nimport { runAgentLoop } from '../agent/loop.js';\nimport { createDefaultRegistry, type ToolRegistry } from '../tools/registry.js';\nimport { getPrimaryArg } from '../tools/primary-arg.js';\nimport { permissionRuleForToolCall } from '../permissions.js';\nimport { toolResultErrorMessage, toolResultSucceeded } from '../tools/result.js';\n\nexport interface ScrollbackOptions {\n mode: PermissionMode;\n input?: NodeJS.ReadableStream;\n output?: { write: (s: string) => boolean | void };\n readPrompt?: () => Promise<string | null>;\n runLoop?: typeof runAgentLoop;\n registry?: ToolRegistry;\n}\n\nexport function formatToolCall(call: ToolCall): string {\n const primary = getPrimaryArg(call.arguments);\n return `\\n[tool] ${call.name}${primary ? ` ${primary}` : ''}\\n`;\n}\n\nexport function formatToolResult(result: ToolResult, call?: ToolCall): string {\n const success = toolResultSucceeded(result);\n const label = success ? '[OK]' : '[ERR]';\n const name = call?.name ?? 'tool';\n const primary = call ? getPrimaryArg(call.arguments) : '';\n const detail = success ? result.content : (toolResultErrorMessage(result) ?? '');\n return `${label} ${name}${primary ? ` ${primary}` : ''}${detail ? `\\n${detail.trimEnd()}` : ''}\\n`;\n}\n\nexport async function runScrollbackSession(\n config: AgentConfig,\n options: ScrollbackOptions,\n): Promise<Message[]> {\n const output = options.output ?? process.stdout;\n const registry =\n options.registry ?? createDefaultRegistry({ agents: config.settings.agents.mode !== 'off' });\n const runLoop = options.runLoop ?? runAgentLoop;\n const history: Message[] = [];\n const toolCalls = new Map<string, ToolCall>();\n const close = createPromptReader(options);\n\n output.write('Book scrollback mode. Terminal scrollback owns history. Type /exit to quit.\\n\\n');\n\n try {\n while (true) {\n const prompt = await close.read('You> ');\n if (prompt === null) break;\n const trimmed = prompt.trim();\n if (!trimmed) continue;\n if (trimmed === '/exit') break;\n if (trimmed === '/clear') {\n history.length = 0;\n output.write('[cleared]\\n');\n continue;\n }\n\n output.write('\\nBook\\n');\n const updated = await runLoop(\n config,\n registry,\n prompt,\n history,\n {\n onText: (text) => output.write(text),\n onReasoning: (text) => output.write(`\\n[thinking] ${text}\\n`),\n onToolCall: (call) => {\n toolCalls.set(call.id, call);\n output.write(formatToolCall(call));\n },\n onToolResult: (result) =>\n output.write(formatToolResult(result, toolCalls.get(result.toolCallId))),\n onError: (error) => output.write(`\\n[error] ${error}\\n`),\n onTurnStart: (turn) => {\n if (turn > 1) output.write(`\\nBook turn ${turn}\\n`);\n },\n onDone: () => output.write('\\n'),\n onPermissionRequired: (call) => askPermission(call, close.read, output),\n onUsage: () => {},\n } satisfies AgentLoopCallbacks,\n options.mode,\n // The line is what the user typed, so its `$name` tokens invoke skills.\n { typedText: prompt },\n );\n\n history.length = 0;\n history.push(...updated);\n output.write('\\n');\n }\n } finally {\n close.close();\n }\n\n return history;\n}\n\nfunction createPromptReader(options: ScrollbackOptions): {\n read: (prompt?: string) => Promise<string | null>;\n close: () => void;\n} {\n if (options.readPrompt)\n return { read: () => options.readPrompt?.() ?? Promise.resolve(null), close: () => {} };\n\n const rl = createInterface({\n input: options.input ?? process.stdin,\n output: process.stdout,\n });\n\n return {\n read: (prompt = 'You> ') => rl.question(prompt),\n close: () => rl.close(),\n };\n}\n\nasync function askPermission(\n call: ToolCall,\n read: (prompt?: string) => Promise<string | null>,\n output: { write: (s: string) => boolean | void },\n): Promise<PermissionResult | PermissionDecision> {\n // \"Always\" is offered only when the call has a rule to save, as on the Ink card: a Bash command\n // holding `*` or spanning lines has none (#521), and neither has an argument holding `*` or `?`.\n const canRemember = permissionRuleForToolCall(call) !== undefined;\n output.write(\n `[permission] ${call.name}${getPrimaryArg(call.arguments) ? ` ${getPrimaryArg(call.arguments)}` : ''}\\nAllow? [y]es/[n]o${canRemember ? '/[a]lways' : ''}: `,\n );\n const line = await read('');\n // The input closed: nobody is left to answer, which is not a person saying no (#264).\n if (line === null) return { result: 'deny', reason: 'no_approver' };\n const answer = line.trim().toLowerCase();\n // Where it is not offered, `a` is no answer, and an unrecognized answer is a no.\n if (canRemember && (answer === 'a' || answer === 'always')) return 'always';\n if (answer === 'y' || answer === 'yes') return 'allow';\n return 'deny';\n}\n"],"mappings":"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","names":[]}