@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
@@ -0,0 +1,27 @@
1
+ import {
2
+ collectSkippedCommandNotices,
3
+ discoverCommands,
4
+ generateCommandListing,
5
+ inspectCommands,
6
+ resolveCommandBody
7
+ } from "./chunk-AJZWLKLQ.js";
8
+ import "./chunk-KXAYUIKP.js";
9
+ import "./chunk-SWPDKLNM.js";
10
+ import "./chunk-2AAOF5B5.js";
11
+ import "./chunk-XHAO3K7I.js";
12
+ import "./chunk-SBTU5BEC.js";
13
+ import "./chunk-YIL6HTJX.js";
14
+ import "./chunk-EEX6QNXV.js";
15
+ import "./chunk-WV3O5PGX.js";
16
+ import "./chunk-HFB74CLM.js";
17
+ import "./chunk-REASC2QG.js";
18
+ import "./chunk-IDYWN37T.js";
19
+ import "./chunk-ZPSZZUWF.js";
20
+ export {
21
+ collectSkippedCommandNotices,
22
+ discoverCommands,
23
+ generateCommandListing,
24
+ inspectCommands,
25
+ resolveCommandBody
26
+ };
27
+ //# sourceMappingURL=loader-DQNPDKOX.js.map
@@ -4,10 +4,11 @@ import {
4
4
  mcpServersToRecord,
5
5
  partitionMcpServersByApproval,
6
6
  persistMcpProjectServerChoice
7
- } from "./chunk-URLQAXTR.js";
8
- import "./chunk-DGMQEI6Y.js";
9
- import "./chunk-574C6MQR.js";
10
- import "./chunk-24AXE6SP.js";
7
+ } from "./chunk-PTDC7ZUP.js";
8
+ import "./chunk-HFB74CLM.js";
9
+ import "./chunk-REASC2QG.js";
10
+ import "./chunk-IDYWN37T.js";
11
+ import "./chunk-ZPSZZUWF.js";
11
12
  export {
12
13
  evaluateMcpServerApproval,
13
14
  mcpServerFingerprint,
@@ -15,4 +16,4 @@ export {
15
16
  partitionMcpServersByApproval,
16
17
  persistMcpProjectServerChoice
17
18
  };
18
- //# sourceMappingURL=mcp-approvals-WNPH65BK.js.map
19
+ //# sourceMappingURL=mcp-approvals-27LJYADQ.js.map
@@ -4,8 +4,9 @@ import {
4
4
  isValidMcpServerName,
5
5
  loadMcpConfig,
6
6
  resolveMcpServerList
7
- } from "./chunk-3U5IBM24.js";
8
- import "./chunk-24AXE6SP.js";
7
+ } from "./chunk-MEOB2DZA.js";
8
+ import "./chunk-EEX6QNXV.js";
9
+ import "./chunk-ZPSZZUWF.js";
9
10
  export {
10
11
  consoleMcpDiagnosticSink,
11
12
  formatMcpServerCommand,
@@ -13,4 +14,4 @@ export {
13
14
  loadMcpConfig,
14
15
  resolveMcpServerList
15
16
  };
16
- //# sourceMappingURL=mcp-config-YIJIES2C.js.map
17
+ //# sourceMappingURL=mcp-config-GXSODNCM.js.map
@@ -0,0 +1,51 @@
1
+ import {
2
+ DEFAULT_MAX_INDEX_LINES,
3
+ MAX_INDEX_BYTES,
4
+ deleteMemoryEntry,
5
+ findGitRoot,
6
+ findLegacyMemoryBackup,
7
+ getMemoryHealth,
8
+ getNewestMemoryWriteTime,
9
+ getProjectMemoryDir,
10
+ legacyBackupNotice,
11
+ listMemoryFiles,
12
+ loadMemoryContext,
13
+ memoryFileForSlug,
14
+ memoryWriteScope,
15
+ migrateLegacyMemoryDir,
16
+ migrateLegacyMemoryFormat,
17
+ sanitizeMemorySlug,
18
+ shortenAtWord,
19
+ slugifyWorkspace
20
+ } from "./chunk-EFXVSQ5J.js";
21
+ import "./chunk-KXAYUIKP.js";
22
+ import "./chunk-SBTU5BEC.js";
23
+ import "./chunk-OJBMDM5H.js";
24
+ import "./chunk-YIL6HTJX.js";
25
+ import "./chunk-EEX6QNXV.js";
26
+ import "./chunk-WV3O5PGX.js";
27
+ import "./chunk-HFB74CLM.js";
28
+ import "./chunk-REASC2QG.js";
29
+ import "./chunk-IDYWN37T.js";
30
+ import "./chunk-ZPSZZUWF.js";
31
+ export {
32
+ DEFAULT_MAX_INDEX_LINES,
33
+ MAX_INDEX_BYTES,
34
+ deleteMemoryEntry,
35
+ findGitRoot,
36
+ findLegacyMemoryBackup,
37
+ getMemoryHealth,
38
+ getNewestMemoryWriteTime,
39
+ getProjectMemoryDir,
40
+ legacyBackupNotice,
41
+ listMemoryFiles,
42
+ loadMemoryContext,
43
+ memoryFileForSlug,
44
+ memoryWriteScope,
45
+ migrateLegacyMemoryDir,
46
+ migrateLegacyMemoryFormat,
47
+ sanitizeMemorySlug,
48
+ shortenAtWord,
49
+ slugifyWorkspace
50
+ };
51
+ //# sourceMappingURL=memory-store-I6Z54VUN.js.map
@@ -6,12 +6,15 @@ import {
6
6
  MemoryModelWindowStore,
7
7
  createModelWindowStore,
8
8
  defaultModelWindowStorePath,
9
+ learnedModelWindowEntrySchema,
10
+ looseModelWindowStoreSchema,
9
11
  ratchetModelWindow,
10
12
  readModelWindowStore,
11
13
  writeModelWindowStore
12
- } from "./chunk-CAGOB2N4.js";
13
- import "./chunk-574C6MQR.js";
14
- import "./chunk-24AXE6SP.js";
14
+ } from "./chunk-62EEAUID.js";
15
+ import "./chunk-REASC2QG.js";
16
+ import "./chunk-IDYWN37T.js";
17
+ import "./chunk-ZPSZZUWF.js";
15
18
  export {
16
19
  FileModelWindowStore,
17
20
  LEARNED_WINDOW_SAFETY_MARGIN,
@@ -20,8 +23,10 @@ export {
20
23
  MemoryModelWindowStore,
21
24
  createModelWindowStore,
22
25
  defaultModelWindowStorePath,
26
+ learnedModelWindowEntrySchema,
27
+ looseModelWindowStoreSchema,
23
28
  ratchetModelWindow,
24
29
  readModelWindowStore,
25
30
  writeModelWindowStore
26
31
  };
27
- //# sourceMappingURL=model-window-store-YFVNXCIP.js.map
32
+ //# sourceMappingURL=model-window-store-6VKXXTPJ.js.map
@@ -0,0 +1,16 @@
1
+ import {
2
+ chatCompletionStream,
3
+ convertTools,
4
+ parseCompatibleUsage
5
+ } from "./chunk-AHC7OU75.js";
6
+ import "./chunk-2AAOF5B5.js";
7
+ import "./chunk-RT5SATF7.js";
8
+ import "./chunk-OJBMDM5H.js";
9
+ import "./chunk-IDYWN37T.js";
10
+ import "./chunk-ZPSZZUWF.js";
11
+ export {
12
+ chatCompletionStream,
13
+ convertTools,
14
+ parseCompatibleUsage
15
+ };
16
+ //# sourceMappingURL=openai-compatible-IPUNBJ53.js.map
@@ -0,0 +1,15 @@
1
+ import {
2
+ evaluateProjectAllowRule,
3
+ partitionProjectAllowRules,
4
+ persistProjectAllowRuleChoice
5
+ } from "./chunk-MV5PQNIA.js";
6
+ import "./chunk-HFB74CLM.js";
7
+ import "./chunk-REASC2QG.js";
8
+ import "./chunk-IDYWN37T.js";
9
+ import "./chunk-ZPSZZUWF.js";
10
+ export {
11
+ evaluateProjectAllowRule,
12
+ partitionProjectAllowRules,
13
+ persistProjectAllowRuleChoice
14
+ };
15
+ //# sourceMappingURL=permission-approvals-Q5IMFEZI.js.map
@@ -0,0 +1,62 @@
1
+ import {
2
+ ALWAYS_ALLOWED_TOOLS,
3
+ WORKSPACE_READ_JUDGING_MODES,
4
+ WORKSPACE_READ_ONLY_GIT_TOOLS,
5
+ WORKSPACE_READ_REFUSAL_MODES,
6
+ WORKSPACE_READ_TOOLS,
7
+ evaluatePermission,
8
+ evaluatePermissionDetail,
9
+ hasAdjudicationPolicy,
10
+ hasBashAdjudicationPolicy,
11
+ memoryTargetSpellings,
12
+ missingRuleReason,
13
+ parseRule,
14
+ permissionReasonOf,
15
+ permissionResultOf,
16
+ permissionRuleForToolCall,
17
+ permissionRuleLadder,
18
+ permissionRuleMatchesCall,
19
+ permissionRuleOf,
20
+ primaryArgForRule
21
+ } from "./chunk-N2G4Q7ME.js";
22
+ import "./chunk-XJRJVXJR.js";
23
+ import "./chunk-UCFJ43OS.js";
24
+ import "./chunk-HOZXKOE3.js";
25
+ import "./chunk-EFXVSQ5J.js";
26
+ import "./chunk-62EEAUID.js";
27
+ import "./chunk-KXAYUIKP.js";
28
+ import "./chunk-W7SLYS3M.js";
29
+ import "./chunk-SBTU5BEC.js";
30
+ import "./chunk-4DKHLZRI.js";
31
+ import "./chunk-OJBMDM5H.js";
32
+ import "./chunk-YIL6HTJX.js";
33
+ import "./chunk-EEX6QNXV.js";
34
+ import "./chunk-MV5PQNIA.js";
35
+ import "./chunk-B5FC3MYZ.js";
36
+ import "./chunk-WV3O5PGX.js";
37
+ import "./chunk-HFB74CLM.js";
38
+ import "./chunk-REASC2QG.js";
39
+ import "./chunk-IDYWN37T.js";
40
+ import "./chunk-ZPSZZUWF.js";
41
+ export {
42
+ ALWAYS_ALLOWED_TOOLS,
43
+ WORKSPACE_READ_JUDGING_MODES,
44
+ WORKSPACE_READ_ONLY_GIT_TOOLS,
45
+ WORKSPACE_READ_REFUSAL_MODES,
46
+ WORKSPACE_READ_TOOLS,
47
+ evaluatePermission,
48
+ evaluatePermissionDetail,
49
+ hasAdjudicationPolicy,
50
+ hasBashAdjudicationPolicy,
51
+ memoryTargetSpellings,
52
+ missingRuleReason,
53
+ parseRule,
54
+ permissionReasonOf,
55
+ permissionResultOf,
56
+ permissionRuleForToolCall,
57
+ permissionRuleLadder,
58
+ permissionRuleMatchesCall,
59
+ permissionRuleOf,
60
+ primaryArgForRule
61
+ };
62
+ //# sourceMappingURL=permissions-7Y35X6HZ.js.map
@@ -0,0 +1,76 @@
1
+ import {
2
+ LEGACY_BASE_URL_ID,
3
+ MODEL_SELECTION_KEYS,
4
+ PROVIDER_CONNECTION_KEYS,
5
+ WorkspaceProviderRefusalError,
6
+ createWorkspaceProviderGate,
7
+ declaredProviderIds,
8
+ describeApiKeyDeclaration,
9
+ describeDroppedOverride,
10
+ describeLegacyBaseUrl,
11
+ describeOrigin,
12
+ describeReservedProvider,
13
+ describeUnaffectedSelection,
14
+ describeWithheldSelection,
15
+ describeWorkspaceProvider,
16
+ droppedProviderOverrides,
17
+ emptyWorkspaceProviderPartition,
18
+ environmentModelSelections,
19
+ evaluateLegacyBaseUrl,
20
+ legacyBaseUrlFingerprint,
21
+ modelSelectionsOf,
22
+ partitionWorkspaceProviders,
23
+ persistWorkspaceProviderChoice,
24
+ profileModelKey,
25
+ profileOfModelKey,
26
+ providerIdsOf,
27
+ providerPrefixOf,
28
+ unaffectedModelSelections,
29
+ withEnvironmentSelections,
30
+ withheldModelSelections,
31
+ withheldProviderIds,
32
+ withoutWorkspaceProviderOverrides,
33
+ workspaceProviderFingerprint,
34
+ workspaceProviderRefusal
35
+ } from "./chunk-B5FC3MYZ.js";
36
+ import "./chunk-WV3O5PGX.js";
37
+ import "./chunk-HFB74CLM.js";
38
+ import "./chunk-REASC2QG.js";
39
+ import "./chunk-IDYWN37T.js";
40
+ import "./chunk-ZPSZZUWF.js";
41
+ export {
42
+ LEGACY_BASE_URL_ID,
43
+ MODEL_SELECTION_KEYS,
44
+ PROVIDER_CONNECTION_KEYS,
45
+ WorkspaceProviderRefusalError,
46
+ createWorkspaceProviderGate,
47
+ declaredProviderIds,
48
+ describeApiKeyDeclaration,
49
+ describeDroppedOverride,
50
+ describeLegacyBaseUrl,
51
+ describeOrigin,
52
+ describeReservedProvider,
53
+ describeUnaffectedSelection,
54
+ describeWithheldSelection,
55
+ describeWorkspaceProvider,
56
+ droppedProviderOverrides,
57
+ emptyWorkspaceProviderPartition,
58
+ environmentModelSelections,
59
+ evaluateLegacyBaseUrl,
60
+ legacyBaseUrlFingerprint,
61
+ modelSelectionsOf,
62
+ partitionWorkspaceProviders,
63
+ persistWorkspaceProviderChoice,
64
+ profileModelKey,
65
+ profileOfModelKey,
66
+ providerIdsOf,
67
+ providerPrefixOf,
68
+ unaffectedModelSelections,
69
+ withEnvironmentSelections,
70
+ withheldModelSelections,
71
+ withheldProviderIds,
72
+ withoutWorkspaceProviderOverrides,
73
+ workspaceProviderFingerprint,
74
+ workspaceProviderRefusal
75
+ };
76
+ //# sourceMappingURL=provider-approvals-5AGH3RVT.js.map
@@ -0,0 +1,42 @@
1
+ import {
2
+ buildSandboxExecution,
3
+ createSandbox,
4
+ decideSandboxExecution,
5
+ describeControlPathRefusal,
6
+ hasDomainPolicy,
7
+ matchesExcludedCommand,
8
+ protectedWorkspacePaths,
9
+ readCoreHooksPaths,
10
+ readGitConfigIncludes,
11
+ realSandboxHost,
12
+ sandboxBackendAvailable,
13
+ sandboxCoverage,
14
+ sandboxPolicySummary,
15
+ unbindablePaths,
16
+ unsandboxedRefusalMessage,
17
+ withGitConfigReadOnlyNotice
18
+ } from "./chunk-XJRJVXJR.js";
19
+ import "./chunk-OJBMDM5H.js";
20
+ import "./chunk-YIL6HTJX.js";
21
+ import "./chunk-EEX6QNXV.js";
22
+ import "./chunk-IDYWN37T.js";
23
+ import "./chunk-ZPSZZUWF.js";
24
+ export {
25
+ buildSandboxExecution,
26
+ createSandbox,
27
+ decideSandboxExecution,
28
+ describeControlPathRefusal,
29
+ hasDomainPolicy,
30
+ matchesExcludedCommand,
31
+ protectedWorkspacePaths,
32
+ readCoreHooksPaths,
33
+ readGitConfigIncludes,
34
+ realSandboxHost,
35
+ sandboxBackendAvailable,
36
+ sandboxCoverage,
37
+ sandboxPolicySummary,
38
+ unbindablePaths,
39
+ unsandboxedRefusalMessage,
40
+ withGitConfigReadOnlyNotice
41
+ };
42
+ //# sourceMappingURL=sandbox-N2RY72GN.js.map
@@ -1,31 +1,44 @@
1
1
  import {
2
2
  createDefaultRegistry,
3
3
  runAgentLoop
4
- } from "./chunk-XIFFTATU.js";
5
- import "./chunk-A7JLBK2Y.js";
6
- import "./chunk-KWHQ2XXL.js";
7
- import "./chunk-VZQXX3WW.js";
8
- import "./chunk-E75IPST5.js";
9
- import "./chunk-5KLVH3PY.js";
10
- import "./chunk-3U5IBM24.js";
11
- import "./chunk-MAQXCUR4.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";
17
+ import "./chunk-KXAYUIKP.js";
18
+ import "./chunk-SWPDKLNM.js";
19
+ import "./chunk-2AAOF5B5.js";
20
+ import "./chunk-MEOB2DZA.js";
21
+ import "./chunk-W7SLYS3M.js";
22
+ import "./chunk-JGF5HLSI.js";
23
+ import "./chunk-32WBCUAN.js";
24
+ import "./chunk-RT5SATF7.js";
25
+ import "./chunk-XHAO3K7I.js";
26
+ import "./chunk-SBTU5BEC.js";
27
+ import "./chunk-4DKHLZRI.js";
28
+ import "./chunk-OJBMDM5H.js";
12
29
  import {
13
30
  getPrimaryArg,
14
31
  toolResultErrorMessage,
15
32
  toolResultSucceeded
16
- } from "./chunk-5GDZ22YP.js";
17
- import "./chunk-EYGD6X2T.js";
18
- import "./chunk-GTVB4HEM.js";
19
- import "./chunk-S4XL7HOM.js";
20
- import "./chunk-7N4J557C.js";
21
- import "./chunk-BTZZUCLI.js";
22
- import "./chunk-WKBO5R4O.js";
23
- import "./chunk-ANSJPYGI.js";
24
- import "./chunk-DGMQEI6Y.js";
25
- import "./chunk-5RDRAO4B.js";
26
- import "./chunk-CAGOB2N4.js";
27
- import "./chunk-574C6MQR.js";
28
- import "./chunk-24AXE6SP.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";
41
+ import "./chunk-ZPSZZUWF.js";
29
42
 
30
43
  // src/cli/scrollback.ts
31
44
  import { createInterface } from "readline/promises";
@@ -94,7 +107,9 @@ Book turn ${turn}
94
107
  onUsage: () => {
95
108
  }
96
109
  },
97
- options.mode
110
+ options.mode,
111
+ // The line is what the user typed, so its `$name` tokens invoke skills.
112
+ { typedText: prompt }
98
113
  );
99
114
  history.length = 0;
100
115
  history.push(...updated);
@@ -119,12 +134,15 @@ function createPromptReader(options) {
119
134
  };
120
135
  }
121
136
  async function askPermission(call, read, output) {
137
+ const canRemember = permissionRuleForToolCall(call) !== void 0;
122
138
  output.write(
123
139
  `[permission] ${call.name}${getPrimaryArg(call.arguments) ? ` ${getPrimaryArg(call.arguments)}` : ""}
124
- Allow? [y]es/[n]o/[a]lways: `
140
+ Allow? [y]es/[n]o${canRemember ? "/[a]lways" : ""}: `
125
141
  );
126
- const answer = (await read(""))?.trim().toLowerCase();
127
- if (answer === "a" || answer === "always") return "always";
142
+ const line = await read("");
143
+ if (line === null) return { result: "deny", reason: "no_approver" };
144
+ const answer = line.trim().toLowerCase();
145
+ if (canRemember && (answer === "a" || answer === "always")) return "always";
128
146
  if (answer === "y" || answer === "yes") return "allow";
129
147
  return "deny";
130
148
  }
@@ -133,4 +151,4 @@ export {
133
151
  formatToolResult,
134
152
  runScrollbackSession
135
153
  };
136
- //# sourceMappingURL=scrollback-LUKLIBVI.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":[]}