@letrquan/book 0.2.0 → 0.3.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 (157) hide show
  1. package/CHANGELOG.md +2747 -40
  2. package/README.md +132 -1311
  3. package/dist/additional-roots-H7UNAEHS.js +31 -0
  4. package/dist/{app-MOXXWEOY.js → app-GE4OHJOC.js} +5740 -4045
  5. package/dist/app-GE4OHJOC.js.map +1 -0
  6. package/dist/{chunk-5GDZ22YP.js → chunk-224FJZLH.js} +99 -108
  7. package/dist/chunk-224FJZLH.js.map +1 -0
  8. package/dist/chunk-2AAOF5B5.js +28 -0
  9. package/dist/chunk-2AAOF5B5.js.map +1 -0
  10. package/dist/{chunk-CAGOB2N4.js → chunk-4AS7LKKQ.js} +6 -4
  11. package/dist/chunk-4AS7LKKQ.js.map +1 -0
  12. package/dist/chunk-525CAZPY.js +120 -0
  13. package/dist/chunk-525CAZPY.js.map +1 -0
  14. package/dist/{chunk-URLQAXTR.js → chunk-56SIEMDX.js} +2 -2
  15. package/dist/chunk-56SIEMDX.js.map +1 -0
  16. package/dist/{chunk-XIFFTATU.js → chunk-5YHTKWJN.js} +5420 -4031
  17. package/dist/chunk-5YHTKWJN.js.map +1 -0
  18. package/dist/chunk-62QL5QUP.js +283 -0
  19. package/dist/chunk-62QL5QUP.js.map +1 -0
  20. package/dist/{chunk-KWHQ2XXL.js → chunk-67UZEWWF.js} +3 -3
  21. package/dist/chunk-67UZEWWF.js.map +1 -0
  22. package/dist/chunk-6OQQOMZR.js +785 -0
  23. package/dist/chunk-6OQQOMZR.js.map +1 -0
  24. package/dist/{chunk-GTVB4HEM.js → chunk-AQEQX4FF.js} +344 -315
  25. package/dist/chunk-AQEQX4FF.js.map +1 -0
  26. package/dist/chunk-C7ADUNPR.js +273 -0
  27. package/dist/chunk-C7ADUNPR.js.map +1 -0
  28. package/dist/{chunk-E75IPST5.js → chunk-EFJ2NH6E.js} +12 -58
  29. package/dist/chunk-EFJ2NH6E.js.map +1 -0
  30. package/dist/{chunk-5KLVH3PY.js → chunk-HQI7NYGX.js} +5 -3
  31. package/dist/chunk-HQI7NYGX.js.map +1 -0
  32. package/dist/chunk-IME7R2UI.js +6541 -0
  33. package/dist/chunk-IME7R2UI.js.map +1 -0
  34. package/dist/chunk-J4F2QLM2.js +273 -0
  35. package/dist/chunk-J4F2QLM2.js.map +1 -0
  36. package/dist/{chunk-MAQXCUR4.js → chunk-J62VZYOB.js} +444 -112
  37. package/dist/chunk-J62VZYOB.js.map +1 -0
  38. package/dist/chunk-JTPOI3KU.js +826 -0
  39. package/dist/chunk-JTPOI3KU.js.map +1 -0
  40. package/dist/{chunk-WKBO5R4O.js → chunk-KBQS35OV.js} +2 -2
  41. package/dist/chunk-KBQS35OV.js.map +1 -0
  42. package/dist/chunk-KXAYUIKP.js +90 -0
  43. package/dist/chunk-KXAYUIKP.js.map +1 -0
  44. package/dist/{chunk-VZQXX3WW.js → chunk-QYBD22H5.js} +1 -1
  45. package/dist/chunk-QYBD22H5.js.map +1 -0
  46. package/dist/{chunk-V4BOYR52.js → chunk-RFJ6Q6LE.js} +763 -198
  47. package/dist/chunk-RFJ6Q6LE.js.map +1 -0
  48. package/dist/{chunk-7N4J557C.js → chunk-RT5SATF7.js} +1 -1
  49. package/dist/chunk-RT5SATF7.js.map +1 -0
  50. package/dist/{chunk-C7D4NJ2D.js → chunk-S4JMID4G.js} +68 -26
  51. package/dist/chunk-S4JMID4G.js.map +1 -0
  52. package/dist/{chunk-ANSJPYGI.js → chunk-SOW4WRQP.js} +3 -3
  53. package/dist/chunk-SOW4WRQP.js.map +1 -0
  54. package/dist/{chunk-J7MIZ5CA.js → chunk-TLX3H2CL.js} +518 -79
  55. package/dist/chunk-TLX3H2CL.js.map +1 -0
  56. package/dist/{chunk-DGMQEI6Y.js → chunk-VPNLCMVR.js} +22 -9
  57. package/dist/chunk-VPNLCMVR.js.map +1 -0
  58. package/dist/{chunk-BTZZUCLI.js → chunk-W3XFHEF4.js} +173 -29
  59. package/dist/chunk-W3XFHEF4.js.map +1 -0
  60. package/dist/{chunk-574C6MQR.js → chunk-X4NJT436.js} +130 -60
  61. package/dist/chunk-X4NJT436.js.map +1 -0
  62. package/dist/chunk-X66I2NQO.js +137 -0
  63. package/dist/chunk-X66I2NQO.js.map +1 -0
  64. package/dist/chunk-XHAO3K7I.js +18 -0
  65. package/dist/chunk-XHAO3K7I.js.map +1 -0
  66. package/dist/{chunk-3U5IBM24.js → chunk-Y2VHN7TC.js} +2 -2
  67. package/dist/chunk-Y2VHN7TC.js.map +1 -0
  68. package/dist/chunk-YC6W4EJH.js +947 -0
  69. package/dist/chunk-YC6W4EJH.js.map +1 -0
  70. package/dist/{chunk-24AXE6SP.js → chunk-ZPSZZUWF.js} +1 -1
  71. package/dist/chunk-ZPSZZUWF.js.map +1 -0
  72. package/dist/{command-approvals-6Y57VCWZ.js → command-approvals-VBIU6BLM.js} +6 -5
  73. package/dist/context-CBOBDY5Q.js +38 -0
  74. package/dist/{hook-approvals-CTUFKEJT.js → hook-approvals-ZVT4V7IM.js} +5 -5
  75. package/dist/index.js +996 -155
  76. package/dist/index.js.map +1 -1
  77. package/dist/{interactive-assets-CCAAWVKH.js → interactive-assets-T4I4SEHU.js} +13 -9
  78. package/dist/interactive-assets-T4I4SEHU.js.map +1 -0
  79. package/dist/job-runner.js +159 -111
  80. package/dist/job-runner.js.map +1 -1
  81. package/dist/job-supervisor.d.ts +2 -0
  82. package/dist/job-supervisor.js +112 -0
  83. package/dist/job-supervisor.js.map +1 -0
  84. package/dist/loader-S77OVTHH.js +18 -0
  85. package/dist/{mcp-approvals-WNPH65BK.js → mcp-approvals-HJ2VDYMC.js} +5 -5
  86. package/dist/{mcp-config-YIJIES2C.js → mcp-config-RNB5LEVE.js} +3 -3
  87. package/dist/memory-store-DZUT5HUH.js +75 -0
  88. package/dist/{model-window-store-YFVNXCIP.js → model-window-store-MTSQ5JDJ.js} +8 -4
  89. package/dist/openai-compatible-2OB54YST.js +14 -0
  90. package/dist/{permission-approvals-76PVREFD.js → permission-approvals-YLV6UC5W.js} +5 -5
  91. package/dist/permissions-DHOKF3W2.js +45 -0
  92. package/dist/sandbox-WRYTZH3D.js +41 -0
  93. package/dist/{scrollback-LUKLIBVI.js → scrollback-35ME2GFX.js} +32 -22
  94. package/dist/scrollback-35ME2GFX.js.map +1 -0
  95. package/dist/sdk.d.ts +2219 -2361
  96. package/dist/sdk.js +53 -38
  97. package/dist/sdk.js.map +1 -1
  98. package/dist/settings-loader-JUNPGAAM.js +35 -0
  99. package/dist/settings-loader-JUNPGAAM.js.map +1 -0
  100. package/dist/{shell-selection-V6QAYXPX.js → shell-selection-CDHGJ4GC.js} +2 -2
  101. package/dist/shell-selection-CDHGJ4GC.js.map +1 -0
  102. package/package.json +23 -22
  103. package/dist/app-MOXXWEOY.js.map +0 -1
  104. package/dist/chunk-24AXE6SP.js.map +0 -1
  105. package/dist/chunk-3U5IBM24.js.map +0 -1
  106. package/dist/chunk-574C6MQR.js.map +0 -1
  107. package/dist/chunk-5GDZ22YP.js.map +0 -1
  108. package/dist/chunk-5KLVH3PY.js.map +0 -1
  109. package/dist/chunk-7N4J557C.js.map +0 -1
  110. package/dist/chunk-A7JLBK2Y.js +0 -3506
  111. package/dist/chunk-A7JLBK2Y.js.map +0 -1
  112. package/dist/chunk-ANSJPYGI.js.map +0 -1
  113. package/dist/chunk-BTZZUCLI.js.map +0 -1
  114. package/dist/chunk-C7D4NJ2D.js.map +0 -1
  115. package/dist/chunk-CAGOB2N4.js.map +0 -1
  116. package/dist/chunk-DGMQEI6Y.js.map +0 -1
  117. package/dist/chunk-E75IPST5.js.map +0 -1
  118. package/dist/chunk-EYGD6X2T.js +0 -180
  119. package/dist/chunk-EYGD6X2T.js.map +0 -1
  120. package/dist/chunk-GTVB4HEM.js.map +0 -1
  121. package/dist/chunk-J7MIZ5CA.js.map +0 -1
  122. package/dist/chunk-KWHQ2XXL.js.map +0 -1
  123. package/dist/chunk-L6LK2QIQ.js +0 -657
  124. package/dist/chunk-L6LK2QIQ.js.map +0 -1
  125. package/dist/chunk-MAQXCUR4.js.map +0 -1
  126. package/dist/chunk-S4XL7HOM.js +0 -402
  127. package/dist/chunk-S4XL7HOM.js.map +0 -1
  128. package/dist/chunk-URLQAXTR.js.map +0 -1
  129. package/dist/chunk-V4BOYR52.js.map +0 -1
  130. package/dist/chunk-VZQXX3WW.js.map +0 -1
  131. package/dist/chunk-WKBO5R4O.js.map +0 -1
  132. package/dist/chunk-XIFFTATU.js.map +0 -1
  133. package/dist/context-ZC5IFEAX.js +0 -25
  134. package/dist/interactive-assets-CCAAWVKH.js.map +0 -1
  135. package/dist/loader-4IDS2RIE.js +0 -15
  136. package/dist/openai-compatible-RHZUBHV6.js +0 -10
  137. package/dist/permissions-CHCKTFQQ.js +0 -28
  138. package/dist/sandbox-CNVAQDA7.js +0 -23
  139. package/dist/scrollback-LUKLIBVI.js.map +0 -1
  140. package/dist/settings-loader-M2QP5TX2.js +0 -21
  141. package/patches/ink+6.8.0.patch +0 -13
  142. package/scripts/apply-ink-patch.mjs +0 -29
  143. package/scripts/ink-patch.mjs +0 -59
  144. package/scripts/verify-ink-patch.mjs +0 -11
  145. /package/dist/{command-approvals-6Y57VCWZ.js.map → additional-roots-H7UNAEHS.js.map} +0 -0
  146. /package/dist/{context-ZC5IFEAX.js.map → command-approvals-VBIU6BLM.js.map} +0 -0
  147. /package/dist/{hook-approvals-CTUFKEJT.js.map → context-CBOBDY5Q.js.map} +0 -0
  148. /package/dist/{loader-4IDS2RIE.js.map → hook-approvals-ZVT4V7IM.js.map} +0 -0
  149. /package/dist/{mcp-approvals-WNPH65BK.js.map → loader-S77OVTHH.js.map} +0 -0
  150. /package/dist/{mcp-config-YIJIES2C.js.map → mcp-approvals-HJ2VDYMC.js.map} +0 -0
  151. /package/dist/{model-window-store-YFVNXCIP.js.map → mcp-config-RNB5LEVE.js.map} +0 -0
  152. /package/dist/{openai-compatible-RHZUBHV6.js.map → memory-store-DZUT5HUH.js.map} +0 -0
  153. /package/dist/{permission-approvals-76PVREFD.js.map → model-window-store-MTSQ5JDJ.js.map} +0 -0
  154. /package/dist/{permissions-CHCKTFQQ.js.map → openai-compatible-2OB54YST.js.map} +0 -0
  155. /package/dist/{sandbox-CNVAQDA7.js.map → permission-approvals-YLV6UC5W.js.map} +0 -0
  156. /package/dist/{settings-loader-M2QP5TX2.js.map → permissions-DHOKF3W2.js.map} +0 -0
  157. /package/dist/{shell-selection-V6QAYXPX.js.map → sandbox-WRYTZH3D.js.map} +0 -0
@@ -4,10 +4,10 @@ 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-56SIEMDX.js";
8
+ import "./chunk-VPNLCMVR.js";
9
+ import "./chunk-X4NJT436.js";
10
+ import "./chunk-ZPSZZUWF.js";
11
11
  export {
12
12
  evaluateMcpServerApproval,
13
13
  mcpServerFingerprint,
@@ -15,4 +15,4 @@ export {
15
15
  partitionMcpServersByApproval,
16
16
  persistMcpProjectServerChoice
17
17
  };
18
- //# sourceMappingURL=mcp-approvals-WNPH65BK.js.map
18
+ //# sourceMappingURL=mcp-approvals-HJ2VDYMC.js.map
@@ -4,8 +4,8 @@ import {
4
4
  isValidMcpServerName,
5
5
  loadMcpConfig,
6
6
  resolveMcpServerList
7
- } from "./chunk-3U5IBM24.js";
8
- import "./chunk-24AXE6SP.js";
7
+ } from "./chunk-Y2VHN7TC.js";
8
+ import "./chunk-ZPSZZUWF.js";
9
9
  export {
10
10
  consoleMcpDiagnosticSink,
11
11
  formatMcpServerCommand,
@@ -13,4 +13,4 @@ export {
13
13
  loadMcpConfig,
14
14
  resolveMcpServerList
15
15
  };
16
- //# sourceMappingURL=mcp-config-YIJIES2C.js.map
16
+ //# sourceMappingURL=mcp-config-RNB5LEVE.js.map
@@ -0,0 +1,75 @@
1
+ import {
2
+ DEFAULT_MAX_INDEX_LINES,
3
+ DELEGATED_MEMORY_TYPES,
4
+ MAX_BODY_CHARS,
5
+ MEMORY_TYPES,
6
+ approveMemoryCandidate,
7
+ canModelWriteMemory,
8
+ countMemoryCandidates,
9
+ deleteMemoryEntry,
10
+ discardMemoryCandidate,
11
+ getMemoryExtractionLockPath,
12
+ getMemoryExtractionStatePath,
13
+ getMemoryHealth,
14
+ getMemoryInboxDir,
15
+ getNewestMemoryWriteTime,
16
+ getProjectMemoryDir,
17
+ isMemorySaveAvailable,
18
+ listMemoryCandidates,
19
+ listMemoryFiles,
20
+ loadMemoryContext,
21
+ memoryEntryDriver,
22
+ memoryFileForSlug,
23
+ memoryWriteScope,
24
+ readMemoryFile,
25
+ rulesNameMemorySave,
26
+ sanitizeMemorySlug,
27
+ sanitizeMemoryTitle,
28
+ saveMemory,
29
+ shouldRejectMemoryText,
30
+ slugifyWorkspace,
31
+ writeMemoryCandidate
32
+ } from "./chunk-6OQQOMZR.js";
33
+ import "./chunk-J62VZYOB.js";
34
+ import "./chunk-JTPOI3KU.js";
35
+ import "./chunk-KXAYUIKP.js";
36
+ import "./chunk-525CAZPY.js";
37
+ import "./chunk-X66I2NQO.js";
38
+ import "./chunk-62QL5QUP.js";
39
+ import "./chunk-224FJZLH.js";
40
+ import "./chunk-VPNLCMVR.js";
41
+ import "./chunk-X4NJT436.js";
42
+ import "./chunk-ZPSZZUWF.js";
43
+ export {
44
+ DEFAULT_MAX_INDEX_LINES,
45
+ DELEGATED_MEMORY_TYPES,
46
+ MAX_BODY_CHARS,
47
+ MEMORY_TYPES,
48
+ approveMemoryCandidate,
49
+ canModelWriteMemory,
50
+ countMemoryCandidates,
51
+ deleteMemoryEntry,
52
+ discardMemoryCandidate,
53
+ getMemoryExtractionLockPath,
54
+ getMemoryExtractionStatePath,
55
+ getMemoryHealth,
56
+ getMemoryInboxDir,
57
+ getNewestMemoryWriteTime,
58
+ getProjectMemoryDir,
59
+ isMemorySaveAvailable,
60
+ listMemoryCandidates,
61
+ listMemoryFiles,
62
+ loadMemoryContext,
63
+ memoryEntryDriver,
64
+ memoryFileForSlug,
65
+ memoryWriteScope,
66
+ readMemoryFile,
67
+ rulesNameMemorySave,
68
+ sanitizeMemorySlug,
69
+ sanitizeMemoryTitle,
70
+ saveMemory,
71
+ shouldRejectMemoryText,
72
+ slugifyWorkspace,
73
+ writeMemoryCandidate
74
+ };
75
+ //# sourceMappingURL=memory-store-DZUT5HUH.js.map
@@ -6,12 +6,14 @@ 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-4AS7LKKQ.js";
15
+ import "./chunk-X4NJT436.js";
16
+ import "./chunk-ZPSZZUWF.js";
15
17
  export {
16
18
  FileModelWindowStore,
17
19
  LEARNED_WINDOW_SAFETY_MARGIN,
@@ -20,8 +22,10 @@ export {
20
22
  MemoryModelWindowStore,
21
23
  createModelWindowStore,
22
24
  defaultModelWindowStorePath,
25
+ learnedModelWindowEntrySchema,
26
+ looseModelWindowStoreSchema,
23
27
  ratchetModelWindow,
24
28
  readModelWindowStore,
25
29
  writeModelWindowStore
26
30
  };
27
- //# sourceMappingURL=model-window-store-YFVNXCIP.js.map
31
+ //# sourceMappingURL=model-window-store-MTSQ5JDJ.js.map
@@ -0,0 +1,14 @@
1
+ import {
2
+ chatCompletionStream,
3
+ convertTools,
4
+ parseCompatibleUsage
5
+ } from "./chunk-AQEQX4FF.js";
6
+ import "./chunk-2AAOF5B5.js";
7
+ import "./chunk-RT5SATF7.js";
8
+ import "./chunk-62QL5QUP.js";
9
+ export {
10
+ chatCompletionStream,
11
+ convertTools,
12
+ parseCompatibleUsage
13
+ };
14
+ //# sourceMappingURL=openai-compatible-2OB54YST.js.map
@@ -2,13 +2,13 @@ import {
2
2
  evaluateProjectAllowRule,
3
3
  partitionProjectAllowRules,
4
4
  persistProjectAllowRuleChoice
5
- } from "./chunk-WKBO5R4O.js";
6
- import "./chunk-DGMQEI6Y.js";
7
- import "./chunk-574C6MQR.js";
8
- import "./chunk-24AXE6SP.js";
5
+ } from "./chunk-KBQS35OV.js";
6
+ import "./chunk-VPNLCMVR.js";
7
+ import "./chunk-X4NJT436.js";
8
+ import "./chunk-ZPSZZUWF.js";
9
9
  export {
10
10
  evaluateProjectAllowRule,
11
11
  partitionProjectAllowRules,
12
12
  persistProjectAllowRuleChoice
13
13
  };
14
- //# sourceMappingURL=permission-approvals-76PVREFD.js.map
14
+ //# sourceMappingURL=permission-approvals-YLV6UC5W.js.map
@@ -0,0 +1,45 @@
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
+ parseRule,
11
+ permissionReasonOf,
12
+ permissionResultOf,
13
+ permissionRuleForToolCall,
14
+ permissionRuleLadder,
15
+ permissionRuleMatchesCall,
16
+ permissionRuleOf,
17
+ primaryArgForRule
18
+ } from "./chunk-J62VZYOB.js";
19
+ import "./chunk-JTPOI3KU.js";
20
+ import "./chunk-525CAZPY.js";
21
+ import "./chunk-X66I2NQO.js";
22
+ import "./chunk-62QL5QUP.js";
23
+ import "./chunk-224FJZLH.js";
24
+ import "./chunk-VPNLCMVR.js";
25
+ import "./chunk-X4NJT436.js";
26
+ import "./chunk-ZPSZZUWF.js";
27
+ export {
28
+ ALWAYS_ALLOWED_TOOLS,
29
+ WORKSPACE_READ_JUDGING_MODES,
30
+ WORKSPACE_READ_ONLY_GIT_TOOLS,
31
+ WORKSPACE_READ_REFUSAL_MODES,
32
+ WORKSPACE_READ_TOOLS,
33
+ evaluatePermission,
34
+ evaluatePermissionDetail,
35
+ hasAdjudicationPolicy,
36
+ parseRule,
37
+ permissionReasonOf,
38
+ permissionResultOf,
39
+ permissionRuleForToolCall,
40
+ permissionRuleLadder,
41
+ permissionRuleMatchesCall,
42
+ permissionRuleOf,
43
+ primaryArgForRule
44
+ };
45
+ //# sourceMappingURL=permissions-DHOKF3W2.js.map
@@ -0,0 +1,41 @@
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-JTPOI3KU.js";
19
+ import "./chunk-X66I2NQO.js";
20
+ import "./chunk-62QL5QUP.js";
21
+ import "./chunk-224FJZLH.js";
22
+ import "./chunk-ZPSZZUWF.js";
23
+ export {
24
+ buildSandboxExecution,
25
+ createSandbox,
26
+ decideSandboxExecution,
27
+ describeControlPathRefusal,
28
+ hasDomainPolicy,
29
+ matchesExcludedCommand,
30
+ protectedWorkspacePaths,
31
+ readCoreHooksPaths,
32
+ readGitConfigIncludes,
33
+ realSandboxHost,
34
+ sandboxBackendAvailable,
35
+ sandboxCoverage,
36
+ sandboxPolicySummary,
37
+ unbindablePaths,
38
+ unsandboxedRefusalMessage,
39
+ withGitConfigReadOnlyNotice
40
+ };
41
+ //# sourceMappingURL=sandbox-WRYTZH3D.js.map
@@ -1,31 +1,39 @@
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-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";
16
+ import "./chunk-KXAYUIKP.js";
17
+ import "./chunk-HQI7NYGX.js";
18
+ import "./chunk-2AAOF5B5.js";
19
+ import "./chunk-YC6W4EJH.js";
20
+ import "./chunk-C7ADUNPR.js";
21
+ import "./chunk-RT5SATF7.js";
22
+ import "./chunk-XHAO3K7I.js";
23
+ import "./chunk-525CAZPY.js";
24
+ import "./chunk-X66I2NQO.js";
25
+ import "./chunk-62QL5QUP.js";
12
26
  import {
13
27
  getPrimaryArg,
14
28
  toolResultErrorMessage,
15
29
  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";
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";
35
+ import "./chunk-ZPSZZUWF.js";
25
36
  import "./chunk-5RDRAO4B.js";
26
- import "./chunk-CAGOB2N4.js";
27
- import "./chunk-574C6MQR.js";
28
- import "./chunk-24AXE6SP.js";
29
37
 
30
38
  // src/cli/scrollback.ts
31
39
  import { createInterface } from "readline/promises";
@@ -123,7 +131,9 @@ async function askPermission(call, read, output) {
123
131
  `[permission] ${call.name}${getPrimaryArg(call.arguments) ? ` ${getPrimaryArg(call.arguments)}` : ""}
124
132
  Allow? [y]es/[n]o/[a]lways: `
125
133
  );
126
- const answer = (await read(""))?.trim().toLowerCase();
134
+ const line = await read("");
135
+ if (line === null) return { result: "deny", reason: "no_approver" };
136
+ const answer = line.trim().toLowerCase();
127
137
  if (answer === "a" || answer === "always") return "always";
128
138
  if (answer === "y" || answer === "yes") return "allow";
129
139
  return "deny";
@@ -133,4 +143,4 @@ export {
133
143
  formatToolResult,
134
144
  runScrollbackSession
135
145
  };
136
- //# sourceMappingURL=scrollback-LUKLIBVI.js.map
146
+ //# sourceMappingURL=scrollback-35ME2GFX.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 { 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 );\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 output.write(\n `[permission] ${call.name}${getPrimaryArg(call.arguments) ? ` ${getPrimaryArg(call.arguments)}` : ''}\\nAllow? [y]es/[n]o/[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 if (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":[]}