@dungle-scrubs/tallow 0.9.3 → 0.9.6

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 (207) hide show
  1. package/dist/cli.js +7 -4
  2. package/dist/cli.js.map +1 -1
  3. package/dist/config.d.ts +1 -1
  4. package/dist/config.js +1 -1
  5. package/dist/interactive-mode-patch.d.ts +24 -10
  6. package/dist/interactive-mode-patch.d.ts.map +1 -1
  7. package/dist/interactive-mode-patch.js +285 -148
  8. package/dist/interactive-mode-patch.js.map +1 -1
  9. package/dist/interactive-reset.d.ts +49 -0
  10. package/dist/interactive-reset.d.ts.map +1 -0
  11. package/dist/interactive-reset.js +40 -0
  12. package/dist/interactive-reset.js.map +1 -0
  13. package/dist/pi-tui-editor-patch.d.ts +10 -0
  14. package/dist/pi-tui-editor-patch.d.ts.map +1 -0
  15. package/dist/pi-tui-editor-patch.js +159 -0
  16. package/dist/pi-tui-editor-patch.js.map +1 -0
  17. package/dist/pi-tui-patch.d.ts +2 -0
  18. package/dist/pi-tui-patch.d.ts.map +1 -0
  19. package/dist/pi-tui-patch.js +563 -0
  20. package/dist/pi-tui-patch.js.map +1 -0
  21. package/dist/pi-tui-settings-list-patch.d.ts +11 -0
  22. package/dist/pi-tui-settings-list-patch.d.ts.map +1 -0
  23. package/dist/pi-tui-settings-list-patch.js +38 -0
  24. package/dist/pi-tui-settings-list-patch.js.map +1 -0
  25. package/dist/reset-diagnostics.d.ts +69 -0
  26. package/dist/reset-diagnostics.d.ts.map +1 -0
  27. package/dist/reset-diagnostics.js +41 -0
  28. package/dist/reset-diagnostics.js.map +1 -0
  29. package/dist/sdk.d.ts +5 -21
  30. package/dist/sdk.d.ts.map +1 -1
  31. package/dist/sdk.js +180 -149
  32. package/dist/sdk.js.map +1 -1
  33. package/dist/workspace-transition-interactive.d.ts +1 -0
  34. package/dist/workspace-transition-interactive.d.ts.map +1 -1
  35. package/dist/workspace-transition-interactive.js +7 -17
  36. package/dist/workspace-transition-interactive.js.map +1 -1
  37. package/extensions/__integration__/audit-findings.test.ts +6 -16
  38. package/extensions/__integration__/teams-runtime.test.ts +4 -1
  39. package/extensions/_icons/index.ts +2 -4
  40. package/extensions/_shared/__tests__/image-metadata.test.ts +33 -0
  41. package/extensions/_shared/__tests__/terminal-links.test.ts +18 -0
  42. package/extensions/_shared/image-metadata.ts +99 -0
  43. package/extensions/_shared/inline-preview.ts +1 -1
  44. package/extensions/_shared/pid-registry.ts +0 -1
  45. package/extensions/_shared/terminal-links.ts +22 -0
  46. package/extensions/ask-user-question-tool/index.ts +0 -3
  47. package/extensions/clear/__tests__/clear.test.ts +270 -3
  48. package/extensions/command-expansion/index.ts +1 -1
  49. package/extensions/context-files/index.ts +5 -1
  50. package/extensions/context-fork/__tests__/context-fork.test.ts +94 -1
  51. package/extensions/context-fork/extension.json +1 -1
  52. package/extensions/context-fork/index.ts +32 -0
  53. package/extensions/edit-tool-enhanced/index.ts +2 -1
  54. package/extensions/hooks/index.ts +33 -11
  55. package/extensions/loop/index.ts +14 -1
  56. package/extensions/lsp/index.ts +64 -13
  57. package/extensions/lsp/package.json +2 -2
  58. package/extensions/permissions/__tests__/permissions.test.ts +4 -4
  59. package/extensions/random-spinner/index.ts +7 -642
  60. package/extensions/read-tool-enhanced/index.ts +6 -8
  61. package/extensions/render-stabilizer/__tests__/render-stabilizer.test.ts +4 -5
  62. package/extensions/render-stabilizer/index.ts +6 -6
  63. package/extensions/show-system-prompt/__tests__/show-system-prompt.test.ts +1 -1
  64. package/extensions/slash-command-bridge/__tests__/slash-command-bridge.test.ts +26 -0
  65. package/extensions/slash-command-bridge/index.ts +14 -2
  66. package/extensions/subagent-tool/index.ts +1 -1
  67. package/extensions/subagent-tool/model-resolver.ts +274 -7
  68. package/extensions/tasks/__tests__/state-ui.test.ts +3 -3
  69. package/extensions/tasks/__tests__/widget-subagents.test.ts +2 -2
  70. package/extensions/tasks/commands/register-tasks-extension.ts +10 -10
  71. package/extensions/tasks/state/index.ts +1 -1
  72. package/extensions/tasks/ui/index.ts +2 -7
  73. package/extensions/teams-tool/tools/register-extension.ts +1 -3
  74. package/extensions/web-search-tool/index.ts +2 -1
  75. package/extensions/write-tool-enhanced/__tests__/write-tool-enhanced.test.ts +21 -6
  76. package/extensions/write-tool-enhanced/index.ts +2 -1
  77. package/node_modules/@mariozechner/pi-tui/README.md +56 -34
  78. package/node_modules/@mariozechner/pi-tui/dist/autocomplete.d.ts +18 -13
  79. package/node_modules/@mariozechner/pi-tui/dist/autocomplete.d.ts.map +1 -1
  80. package/node_modules/@mariozechner/pi-tui/dist/autocomplete.js +182 -113
  81. package/node_modules/@mariozechner/pi-tui/dist/autocomplete.js.map +1 -1
  82. package/node_modules/@mariozechner/pi-tui/dist/components/cancellable-loader.js +3 -3
  83. package/node_modules/@mariozechner/pi-tui/dist/components/cancellable-loader.js.map +1 -1
  84. package/node_modules/@mariozechner/pi-tui/dist/components/editor.d.ts +45 -36
  85. package/node_modules/@mariozechner/pi-tui/dist/components/editor.d.ts.map +1 -1
  86. package/node_modules/@mariozechner/pi-tui/dist/components/editor.js +489 -325
  87. package/node_modules/@mariozechner/pi-tui/dist/components/editor.js.map +1 -1
  88. package/node_modules/@mariozechner/pi-tui/dist/components/image.d.ts +1 -99
  89. package/node_modules/@mariozechner/pi-tui/dist/components/image.d.ts.map +1 -1
  90. package/node_modules/@mariozechner/pi-tui/dist/components/image.js +17 -192
  91. package/node_modules/@mariozechner/pi-tui/dist/components/image.js.map +1 -1
  92. package/node_modules/@mariozechner/pi-tui/dist/components/input.d.ts.map +1 -1
  93. package/node_modules/@mariozechner/pi-tui/dist/components/input.js +57 -60
  94. package/node_modules/@mariozechner/pi-tui/dist/components/input.js.map +1 -1
  95. package/node_modules/@mariozechner/pi-tui/dist/components/loader.d.ts +2 -69
  96. package/node_modules/@mariozechner/pi-tui/dist/components/loader.d.ts.map +1 -1
  97. package/node_modules/@mariozechner/pi-tui/dist/components/loader.js +5 -102
  98. package/node_modules/@mariozechner/pi-tui/dist/components/loader.js.map +1 -1
  99. package/node_modules/@mariozechner/pi-tui/dist/components/markdown.d.ts.map +1 -1
  100. package/node_modules/@mariozechner/pi-tui/dist/components/markdown.js +111 -53
  101. package/node_modules/@mariozechner/pi-tui/dist/components/markdown.js.map +1 -1
  102. package/node_modules/@mariozechner/pi-tui/dist/components/select-list.d.ts +19 -1
  103. package/node_modules/@mariozechner/pi-tui/dist/components/select-list.d.ts.map +1 -1
  104. package/node_modules/@mariozechner/pi-tui/dist/components/select-list.js +78 -67
  105. package/node_modules/@mariozechner/pi-tui/dist/components/select-list.js.map +1 -1
  106. package/node_modules/@mariozechner/pi-tui/dist/components/settings-list.d.ts +0 -2
  107. package/node_modules/@mariozechner/pi-tui/dist/components/settings-list.d.ts.map +1 -1
  108. package/node_modules/@mariozechner/pi-tui/dist/components/settings-list.js +12 -23
  109. package/node_modules/@mariozechner/pi-tui/dist/components/settings-list.js.map +1 -1
  110. package/node_modules/@mariozechner/pi-tui/dist/index.d.ts +8 -10
  111. package/node_modules/@mariozechner/pi-tui/dist/index.d.ts.map +1 -1
  112. package/node_modules/@mariozechner/pi-tui/dist/index.js +6 -9
  113. package/node_modules/@mariozechner/pi-tui/dist/index.js.map +1 -1
  114. package/node_modules/@mariozechner/pi-tui/dist/keybindings.d.ts +108 -238
  115. package/node_modules/@mariozechner/pi-tui/dist/keybindings.d.ts.map +1 -1
  116. package/node_modules/@mariozechner/pi-tui/dist/keybindings.js +108 -365
  117. package/node_modules/@mariozechner/pi-tui/dist/keybindings.js.map +1 -1
  118. package/node_modules/@mariozechner/pi-tui/dist/keys.d.ts +33 -48
  119. package/node_modules/@mariozechner/pi-tui/dist/keys.d.ts.map +1 -1
  120. package/node_modules/@mariozechner/pi-tui/dist/keys.js +239 -155
  121. package/node_modules/@mariozechner/pi-tui/dist/keys.js.map +1 -1
  122. package/node_modules/@mariozechner/pi-tui/dist/terminal-image.d.ts +14 -94
  123. package/node_modules/@mariozechner/pi-tui/dist/terminal-image.d.ts.map +1 -1
  124. package/node_modules/@mariozechner/pi-tui/dist/terminal-image.js +44 -186
  125. package/node_modules/@mariozechner/pi-tui/dist/terminal-image.js.map +1 -1
  126. package/node_modules/@mariozechner/pi-tui/dist/terminal.d.ts +13 -58
  127. package/node_modules/@mariozechner/pi-tui/dist/terminal.d.ts.map +1 -1
  128. package/node_modules/@mariozechner/pi-tui/dist/terminal.js +78 -111
  129. package/node_modules/@mariozechner/pi-tui/dist/terminal.js.map +1 -1
  130. package/node_modules/@mariozechner/pi-tui/dist/tui.d.ts +24 -110
  131. package/node_modules/@mariozechner/pi-tui/dist/tui.d.ts.map +1 -1
  132. package/node_modules/@mariozechner/pi-tui/dist/tui.js +188 -435
  133. package/node_modules/@mariozechner/pi-tui/dist/tui.js.map +1 -1
  134. package/node_modules/@mariozechner/pi-tui/dist/utils.d.ts +0 -18
  135. package/node_modules/@mariozechner/pi-tui/dist/utils.d.ts.map +1 -1
  136. package/node_modules/@mariozechner/pi-tui/dist/utils.js +251 -119
  137. package/node_modules/@mariozechner/pi-tui/dist/utils.js.map +1 -1
  138. package/node_modules/@mariozechner/pi-tui/package.json +6 -6
  139. package/node_modules/@mariozechner/pi-tui/src/__tests__/__snapshots__/render.test.ts.snap +3 -40
  140. package/node_modules/@mariozechner/pi-tui/src/__tests__/image-component.test.ts +71 -81
  141. package/node_modules/@mariozechner/pi-tui/src/__tests__/render.test.ts +0 -33
  142. package/node_modules/@mariozechner/pi-tui/src/__tests__/terminal-image.test.ts +93 -334
  143. package/node_modules/@mariozechner/pi-tui/src/__tests__/tui-render-scheduling.test.ts +1 -1
  144. package/node_modules/@mariozechner/pi-tui/src/__tests__/utils.test.ts +11 -196
  145. package/node_modules/@mariozechner/pi-tui/src/autocomplete.ts +228 -142
  146. package/node_modules/@mariozechner/pi-tui/src/components/cancellable-loader.ts +3 -3
  147. package/node_modules/@mariozechner/pi-tui/src/components/editor.ts +624 -390
  148. package/node_modules/@mariozechner/pi-tui/src/components/image.ts +17 -227
  149. package/node_modules/@mariozechner/pi-tui/src/components/input.ts +71 -63
  150. package/node_modules/@mariozechner/pi-tui/src/components/loader.ts +5 -137
  151. package/node_modules/@mariozechner/pi-tui/src/components/markdown.ts +143 -52
  152. package/node_modules/@mariozechner/pi-tui/src/components/select-list.ts +136 -70
  153. package/node_modules/@mariozechner/pi-tui/src/components/settings-list.ts +11 -23
  154. package/node_modules/@mariozechner/pi-tui/src/index.ts +17 -36
  155. package/node_modules/@mariozechner/pi-tui/src/keybindings.ts +148 -421
  156. package/node_modules/@mariozechner/pi-tui/src/keys.ts +253 -181
  157. package/node_modules/@mariozechner/pi-tui/src/terminal-image.ts +51 -252
  158. package/node_modules/@mariozechner/pi-tui/src/terminal.ts +78 -133
  159. package/node_modules/@mariozechner/pi-tui/src/tui.ts +202 -478
  160. package/node_modules/@mariozechner/pi-tui/src/utils.ts +289 -125
  161. package/node_modules/@mariozechner/pi-tui/tsconfig.build.json +1 -0
  162. package/package.json +13 -13
  163. package/packages/tallow-tui/node_modules/@types/mime-types/README.md +8 -2
  164. package/packages/tallow-tui/node_modules/@types/mime-types/index.d.ts +6 -0
  165. package/packages/tallow-tui/node_modules/@types/mime-types/package.json +9 -3
  166. package/packages/tallow-tui/node_modules/get-east-asian-width/lookup-data.js +18 -0
  167. package/packages/tallow-tui/node_modules/get-east-asian-width/lookup.js +116 -384
  168. package/packages/tallow-tui/node_modules/get-east-asian-width/package.json +5 -4
  169. package/packages/tallow-tui/node_modules/get-east-asian-width/utilities.js +24 -0
  170. package/packages/tallow-tui/node_modules/marked/README.md +5 -4
  171. package/packages/tallow-tui/node_modules/marked/bin/main.js +10 -8
  172. package/packages/tallow-tui/node_modules/marked/bin/marked.js +2 -1
  173. package/packages/tallow-tui/node_modules/marked/lib/marked.d.ts +156 -125
  174. package/packages/tallow-tui/node_modules/marked/lib/marked.esm.js +67 -2179
  175. package/packages/tallow-tui/node_modules/marked/lib/marked.esm.js.map +3 -3
  176. package/packages/tallow-tui/node_modules/marked/lib/marked.umd.js +67 -2201
  177. package/packages/tallow-tui/node_modules/marked/lib/marked.umd.js.map +3 -3
  178. package/packages/tallow-tui/node_modules/marked/man/marked.1 +4 -2
  179. package/packages/tallow-tui/node_modules/marked/man/marked.1.md +2 -1
  180. package/packages/tallow-tui/node_modules/marked/package.json +26 -34
  181. package/runtime/model-metadata-overrides.ts +10 -1
  182. package/runtime/pid-schema.ts +26 -6
  183. package/skills/tallow-expert/SKILL.md +1 -3
  184. package/node_modules/@mariozechner/pi-tui/dist/border-styles.d.ts +0 -32
  185. package/node_modules/@mariozechner/pi-tui/dist/border-styles.d.ts.map +0 -1
  186. package/node_modules/@mariozechner/pi-tui/dist/border-styles.js +0 -46
  187. package/node_modules/@mariozechner/pi-tui/dist/border-styles.js.map +0 -1
  188. package/node_modules/@mariozechner/pi-tui/dist/components/bordered-box.d.ts +0 -52
  189. package/node_modules/@mariozechner/pi-tui/dist/components/bordered-box.d.ts.map +0 -1
  190. package/node_modules/@mariozechner/pi-tui/dist/components/bordered-box.js +0 -89
  191. package/node_modules/@mariozechner/pi-tui/dist/components/bordered-box.js.map +0 -1
  192. package/node_modules/@mariozechner/pi-tui/dist/test-utils/capability-env.d.ts +0 -14
  193. package/node_modules/@mariozechner/pi-tui/dist/test-utils/capability-env.d.ts.map +0 -1
  194. package/node_modules/@mariozechner/pi-tui/dist/test-utils/capability-env.js +0 -55
  195. package/node_modules/@mariozechner/pi-tui/dist/test-utils/capability-env.js.map +0 -1
  196. package/node_modules/@mariozechner/pi-tui/src/__tests__/editor-change-listener.test.ts +0 -121
  197. package/node_modules/@mariozechner/pi-tui/src/__tests__/editor-ghost-text.test.ts +0 -112
  198. package/node_modules/@mariozechner/pi-tui/src/__tests__/mouse-events.test.ts +0 -134
  199. package/node_modules/@mariozechner/pi-tui/src/__tests__/settings-list.test.ts +0 -49
  200. package/node_modules/@mariozechner/pi-tui/src/__tests__/tui-diff-regression.test.ts +0 -555
  201. package/node_modules/@mariozechner/pi-tui/src/border-styles.ts +0 -60
  202. package/node_modules/@mariozechner/pi-tui/src/components/bordered-box.ts +0 -113
  203. package/node_modules/@mariozechner/pi-tui/src/test-utils/capability-env.ts +0 -56
  204. package/packages/tallow-tui/node_modules/marked/lib/marked.cjs +0 -2211
  205. package/packages/tallow-tui/node_modules/marked/lib/marked.cjs.map +0 -7
  206. package/packages/tallow-tui/node_modules/marked/lib/marked.d.cts +0 -728
  207. package/packages/tallow-tui/node_modules/marked/marked.min.js +0 -69
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Reset diagnostics capture structured reset and deferred-trigger events.
3
+ *
4
+ * Keeps an in-memory ring buffer for tests and optional debug inspection.
5
+ * Production behavior stays quiet unless TALLOW_DEBUG_RESET=1 is set.
6
+ */
7
+ /** Reset/deferred event emitted during session reset handling. */
8
+ export type ResetDiagnosticEvent = {
9
+ readonly kind: "deferred_cancelled";
10
+ readonly reason: string;
11
+ readonly source: string;
12
+ timestamp: number;
13
+ } | {
14
+ readonly kind: "deferred_dropped";
15
+ readonly reason: string;
16
+ readonly source: string;
17
+ timestamp: number;
18
+ } | {
19
+ readonly kind: "deferred_registered";
20
+ readonly source: string;
21
+ timestamp: number;
22
+ } | {
23
+ readonly kind: "reset_complete";
24
+ readonly reason: string;
25
+ timestamp: number;
26
+ } | {
27
+ readonly kind: "reset_start";
28
+ readonly reason: string;
29
+ timestamp: number;
30
+ };
31
+ /** Reset/deferred event input before timestamp attachment. */
32
+ export type ResetDiagnosticInput = {
33
+ readonly kind: "deferred_cancelled";
34
+ readonly reason: string;
35
+ readonly source: string;
36
+ } | {
37
+ readonly kind: "deferred_dropped";
38
+ readonly reason: string;
39
+ readonly source: string;
40
+ } | {
41
+ readonly kind: "deferred_registered";
42
+ readonly source: string;
43
+ } | {
44
+ readonly kind: "reset_complete";
45
+ readonly reason: string;
46
+ } | {
47
+ readonly kind: "reset_start";
48
+ readonly reason: string;
49
+ };
50
+ /**
51
+ * Record one reset diagnostic event.
52
+ *
53
+ * @param event - Structured reset/deferred event
54
+ * @returns Nothing
55
+ */
56
+ export declare function recordResetDiagnostic(event: ResetDiagnosticInput): void;
57
+ /**
58
+ * Return a snapshot of the current reset diagnostics for tests.
59
+ *
60
+ * @returns Recorded reset diagnostics
61
+ */
62
+ export declare function getResetDiagnosticsForTests(): readonly ResetDiagnosticEvent[];
63
+ /**
64
+ * Clear captured reset diagnostics between tests.
65
+ *
66
+ * @returns Nothing
67
+ */
68
+ export declare function resetResetDiagnosticsForTests(): void;
69
+ //# sourceMappingURL=reset-diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reset-diagnostics.d.ts","sourceRoot":"","sources":["../src/reset-diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,kEAAkE;AAClE,MAAM,MAAM,oBAAoB,GAC7B;IACA,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACjB,GACD;IACA,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACjB,GACD;IACA,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACjB,GACD;IACA,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACjB,GACD;IACA,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACjB,CAAC;AAEL,8DAA8D;AAC9D,MAAM,MAAM,oBAAoB,GAC7B;IACA,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACvB,GACD;IACA,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACvB,GACD;IACA,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACvB,GACD;IACA,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACvB,GACD;IACA,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACvB,CAAC;AAIL;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI,CASvE;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,IAAI,SAAS,oBAAoB,EAAE,CAE7E;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,IAAI,IAAI,CAEpD"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Reset diagnostics capture structured reset and deferred-trigger events.
3
+ *
4
+ * Keeps an in-memory ring buffer for tests and optional debug inspection.
5
+ * Production behavior stays quiet unless TALLOW_DEBUG_RESET=1 is set.
6
+ */
7
+ const MAX_DIAGNOSTIC_EVENTS = 200;
8
+ const diagnostics = [];
9
+ /**
10
+ * Record one reset diagnostic event.
11
+ *
12
+ * @param event - Structured reset/deferred event
13
+ * @returns Nothing
14
+ */
15
+ export function recordResetDiagnostic(event) {
16
+ const entry = { ...event, timestamp: Date.now() };
17
+ diagnostics.push(entry);
18
+ if (diagnostics.length > MAX_DIAGNOSTIC_EVENTS) {
19
+ diagnostics.splice(0, diagnostics.length - MAX_DIAGNOSTIC_EVENTS);
20
+ }
21
+ if (process.env.TALLOW_DEBUG_RESET === "1") {
22
+ console.error(`[reset] ${JSON.stringify(entry)}`);
23
+ }
24
+ }
25
+ /**
26
+ * Return a snapshot of the current reset diagnostics for tests.
27
+ *
28
+ * @returns Recorded reset diagnostics
29
+ */
30
+ export function getResetDiagnosticsForTests() {
31
+ return [...diagnostics];
32
+ }
33
+ /**
34
+ * Clear captured reset diagnostics between tests.
35
+ *
36
+ * @returns Nothing
37
+ */
38
+ export function resetResetDiagnosticsForTests() {
39
+ diagnostics.length = 0;
40
+ }
41
+ //# sourceMappingURL=reset-diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reset-diagnostics.js","sourceRoot":"","sources":["../src/reset-diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAyDlC,MAAM,WAAW,GAA2B,EAAE,CAAC;AAE/C;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAA2B;IAChE,MAAM,KAAK,GAAyB,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IACxE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxB,IAAI,WAAW,CAAC,MAAM,GAAG,qBAAqB,EAAE,CAAC;QAChD,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,GAAG,qBAAqB,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG,EAAE,CAAC;QAC5C,OAAO,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;AACF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B;IAC1C,OAAO,CAAC,GAAG,WAAW,CAAC,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,6BAA6B;IAC5C,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;AACxB,CAAC"}
package/dist/sdk.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { type CreateAgentSessionOptions, type CreateAgentSessionResult, type ExtensionFactory, type PromptTemplate, type Skill } from "@mariozechner/pi-coding-agent";
1
+ import { type CreateAgentSessionOptions, type CreateAgentSessionResult, createAgentSessionRuntime, type ExtensionFactory, type PromptTemplate, type Skill } from "@mariozechner/pi-coding-agent";
2
2
  import { type TallowTelemetryConfig, type TelemetryHandle } from "./otel.js";
3
3
  import { type ResolvedPlugin, type TallowExtensionManifest } from "./plugins.js";
4
4
  import { type ProjectTrustStatus } from "./project-trust.js";
@@ -238,8 +238,10 @@ export declare function applyToolResultRetentionToMessages(messages: unknown[],
238
238
  */
239
239
  export declare function resolveSharedSkillsDirs(globalSettings: Record<string, unknown> | undefined): string[];
240
240
  export interface TallowSession {
241
- /** The underlying AgentSession */
242
- session: CreateAgentSessionResult["session"];
241
+ /** Runtime host used by interactive/print/rpc modes and session replacement flows. */
242
+ runtime: Awaited<ReturnType<typeof createAgentSessionRuntime>>;
243
+ /** The current underlying AgentSession. This getter tracks runtime.session. */
244
+ readonly session: CreateAgentSessionResult["session"];
243
245
  /** Extension loading results */
244
246
  extensions: CreateAgentSessionResult["extensionsResult"];
245
247
  /** Model fallback message (if session model couldn't be restored) */
@@ -319,24 +321,6 @@ export declare function resolveExtensionSelectors(selectors: readonly string[] |
319
321
  cwd?: string;
320
322
  catalog?: readonly BundledExtensionCatalogEntry[];
321
323
  }): string[];
322
- /**
323
- * Create a Tallow session with all bundled extensions, skills, prompts,
324
- * and agents pre-loaded. This is the main SDK entry point.
325
- *
326
- * ```typescript
327
- * import { createTallowSession } from "tallow";
328
- *
329
- * const { session } = await createTallowSession();
330
- *
331
- * session.subscribe((event) => {
332
- * if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
333
- * process.stdout.write(event.assistantMessageEvent.delta);
334
- * }
335
- * });
336
- *
337
- * await session.prompt("Fix the failing tests");
338
- * ```
339
- */
340
324
  export declare function createTallowSession(options?: TallowSessionOptions): Promise<TallowSession>;
341
325
  /**
342
326
  * Collect plugin specs from settings files and CLI options.
package/dist/sdk.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"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"}
package/dist/sdk.js CHANGED
@@ -1,8 +1,7 @@
1
1
  import { existsSync, mkdirSync, readdirSync, readFileSync, statSync } from "node:fs";
2
2
  import { homedir } from "node:os";
3
3
  import { basename, delimiter, dirname, join, resolve, sep } from "node:path";
4
- import { bashTool, codingTools, createAgentSession, createEventBus, DefaultPackageManager, DefaultResourceLoader, editTool, findTool, grepTool, lsTool, ModelRegistry, readOnlyTools, readTool, SessionManager, SettingsManager, writeTool, } from "@mariozechner/pi-coding-agent";
5
- import * as PiTui from "@mariozechner/pi-tui";
4
+ import { bashTool, codingTools, createAgentSession, createAgentSessionRuntime, createEventBus, DefaultPackageManager, DefaultResourceLoader, editTool, findTool, grepTool, lsTool, ModelRegistry, readOnlyTools, readTool, SessionManager, SettingsManager, writeTool, } from "@mariozechner/pi-coding-agent";
6
5
  import { atomicWriteFileSync } from "./atomic-write.js";
7
6
  import { createSecureAuthStorage, resolveRuntimeApiKeyFromEnv } from "./auth-hardening.js";
8
7
  import { applyAgentSessionCompactionCancelPatch } from "./compaction-cancel-patch.js";
@@ -10,6 +9,7 @@ import { BUNDLED, bootstrap, getRuntimeTallowHome, resolveOpSecrets, TALLOW_VERS
10
9
  import { applyInteractiveModeStaleUiPatch } from "./interactive-mode-patch.js";
11
10
  import { applyKnownModelMetadataOverrides } from "./model-metadata-overrides.js";
12
11
  import { createTelemetryHandle, extractTraceContextFromEnv, sessionAttributes, TELEMETRY_API_CHANNELS, } from "./otel.js";
12
+ import { applyPiTuiPatches } from "./pi-tui-patch.js";
13
13
  import { cleanupOrphanPids } from "./pid-manager.js";
14
14
  import { extractClaudePluginResources, readPluginManifest, resolvePlugins, } from "./plugins.js";
15
15
  import { applyProjectTrustContextToEnv, resolveProjectTrust, trustProject, untrustProject, } from "./project-trust.js";
@@ -967,14 +967,41 @@ function applyExtensionStartupPolicies(base, options) {
967
967
  * await session.prompt("Fix the failing tests");
968
968
  * ```
969
969
  */
970
+ /**
971
+ * Apply tallow runtime setting overrides that must be consistent across initial
972
+ * startup and runtime-backed session recreation.
973
+ *
974
+ * @param settingsManager - Settings manager to mutate
975
+ * @param runtimeSettings - Optional runtime settings overrides from SDK/CLI
976
+ * @param trustStatus - Effective project trust status for the target cwd
977
+ * @returns Nothing
978
+ */
979
+ function applySessionSettingsOverrides(settingsManager, runtimeSettings, trustStatus) {
980
+ const global = settingsManager.getGlobalSettings();
981
+ const project = settingsManager.getProjectSettings();
982
+ if (global.quietStartup === undefined && project.quietStartup === undefined) {
983
+ settingsManager.applyOverrides({ quietStartup: true });
984
+ }
985
+ if (runtimeSettings) {
986
+ settingsManager.applyOverrides(runtimeSettings);
987
+ }
988
+ if (trustStatus !== "trusted") {
989
+ const globalPackages = settingsManager.getGlobalSettings().packages;
990
+ settingsManager.applyOverrides({
991
+ packages: (Array.isArray(globalPackages) ? globalPackages : []),
992
+ });
993
+ }
994
+ }
970
995
  export async function createTallowSession(options = {}) {
971
996
  const startupProfile = normalizeStartupProfile(options.startupProfile);
972
997
  const startupTiming = createStartupTimingLogger(startupProfile);
973
998
  const createSessionStartedAtMs = Date.now();
999
+ const callerCwd = process.cwd();
974
1000
  // Ensure env is configured before any framework internals resolve paths
975
1001
  bootstrap();
976
1002
  ensureTallowHome(startupProfile);
977
1003
  if (startupProfile === "interactive") {
1004
+ await applyPiTuiPatches();
978
1005
  await applyInteractiveModeStaleUiPatch();
979
1006
  }
980
1007
  await applyAgentSessionCompactionCancelPatch();
@@ -1015,26 +1042,7 @@ export async function createTallowSession(options = {}) {
1015
1042
  }
1016
1043
  // ── Settings ─────────────────────────────────────────────────────────────
1017
1044
  const settingsManager = SettingsManager.create(cwd, tallowHome);
1018
- // Default to quiet startup — the welcome-screen extension provides the branded
1019
- // header, so the built-in keybinding list and resource listing are redundant.
1020
- // Only apply when the user/project settings haven't explicitly set the value.
1021
- {
1022
- const global = settingsManager.getGlobalSettings();
1023
- const project = settingsManager.getProjectSettings();
1024
- if (global.quietStartup === undefined && project.quietStartup === undefined) {
1025
- settingsManager.applyOverrides({ quietStartup: true });
1026
- }
1027
- }
1028
- // Runtime overrides from options.settings come last so they win.
1029
- if (options.settings) {
1030
- settingsManager.applyOverrides(options.settings);
1031
- }
1032
- if (projectTrust.status !== "trusted") {
1033
- const globalPackages = settingsManager.getGlobalSettings().packages;
1034
- settingsManager.applyOverrides({
1035
- packages: (Array.isArray(globalPackages) ? globalPackages : []),
1036
- });
1037
- }
1045
+ applySessionSettingsOverrides(settingsManager, options.settings, projectTrust.status);
1038
1046
  const toolResultRetentionPolicy = resolveToolResultRetentionPolicy({
1039
1047
  globalSettings: settingsManager.getGlobalSettings(),
1040
1048
  projectSettings: settingsManager.getProjectSettings(),
@@ -1143,9 +1151,6 @@ export async function createTallowSession(options = {}) {
1143
1151
  // ── Package AGENTS.md loading ────────────────────────────────────────────
1144
1152
  // Packages contribute extensions, skills, prompts, themes — but the framework
1145
1153
  // doesn't load AGENTS.md from packages. Use agentsFilesOverride to inject them.
1146
- const packageAgentsFiles = loadAgentsFilesFromPackages(settingsManager, cwd);
1147
- const projectExtensionsDir = resolve(cwd, ".tallow", "extensions");
1148
- const shouldBlockProjectExtensions = projectTrust.status !== "trusted";
1149
1154
  if (projectTrust.status !== "trusted") {
1150
1155
  console.error(projectTrust.status === "stale_fingerprint"
1151
1156
  ? "\x1b[33m⚠ Project trust is stale — repo-controlled execution surfaces are blocked until /trust-project\x1b[0m"
@@ -1153,72 +1158,137 @@ export async function createTallowSession(options = {}) {
1153
1158
  }
1154
1159
  const dedupedExtensionPaths = [...new Set(additionalExtensionPaths)];
1155
1160
  const disabledExtensionNames = new Set(options.disabledExtensions ?? []);
1156
- const shouldApplyExtensionStartupPolicies = shouldBlockProjectExtensions ||
1157
- startupProfile === "headless" ||
1158
- disabledExtensionNames.size > 0;
1159
1161
  const explicitToolRestrictionNames = resolveExplicitToolRestrictionNames(options);
1160
- const loader = new DefaultResourceLoader({
1161
- cwd,
1162
- agentDir: tallowHome,
1163
- settingsManager,
1164
- eventBus,
1165
- additionalExtensionPaths: dedupedExtensionPaths,
1166
- additionalSkillPaths,
1167
- additionalPromptTemplatePaths: additionalPromptPaths,
1168
- additionalThemePaths,
1169
- extensionFactories: [
1170
- createRebrandSystemPromptExtension(contextBudgetPolicy),
1171
- injectImageFilePaths,
1172
- createToolResultRetentionExtension(toolResultRetentionPolicy, contextBudgetPolicy),
1173
- createContextBudgetPlannerExtension(contextBudgetPolicy),
1174
- detectOutputTruncation,
1175
- createProjectTrustExtension(cwd, projectTrust),
1176
- createTelemetryExtension(telemetry, cwd),
1177
- ...(explicitToolRestrictionNames
1178
- ? [createExplicitToolRestrictionExtension(explicitToolRestrictionNames)]
1179
- : []),
1180
- ...(options.extensionFactories ?? []),
1181
- ],
1182
- noExtensions: extensionsOnly,
1183
- extensionsOverride: shouldApplyExtensionStartupPolicies
1184
- ? (base) => applyExtensionStartupPolicies(base, {
1185
- blockProjectExtensions: shouldBlockProjectExtensions,
1186
- disabledExtensionNames,
1187
- projectExtensionsDir,
1188
- startupProfile,
1189
- })
1190
- : undefined,
1191
- systemPromptOverride: options.systemPrompt ? () => options.systemPrompt : undefined,
1192
- appendSystemPromptOverride: options.appendSystemPrompt
1193
- ? (base) => {
1194
- const append = options.appendSystemPrompt;
1195
- return append ? [...base, append] : base;
1196
- }
1197
- : undefined,
1198
- agentsFilesOverride: packageAgentsFiles.length > 0
1199
- ? (base) => ({
1200
- agentsFiles: [...base.agentsFiles, ...packageAgentsFiles],
1201
- })
1202
- : undefined,
1203
- skillsOverride: (base) => {
1204
- const normalized = normalizeSkillNames(base);
1205
- const extra = options.additionalSkills;
1206
- return {
1207
- skills: extra ? [...normalized.skills, ...extra] : normalized.skills,
1208
- diagnostics: normalized.diagnostics,
1209
- };
1210
- },
1211
- promptsOverride: options.additionalPrompts
1212
- ? (base) => {
1213
- const extra = options.additionalPrompts;
1162
+ /**
1163
+ * Create a runtime-backed session for the given cwd/session target.
1164
+ *
1165
+ * @param runtimeCwd - Effective session cwd
1166
+ * @param runtimeSessionManager - Session manager to attach
1167
+ * @param sessionStartEvent - Optional lifecycle metadata for replacement flows
1168
+ * @returns Created session, extension load result, and runtime services
1169
+ */
1170
+ const createRuntime = async ({ cwd: runtimeCwd, sessionManager: runtimeSessionManager, sessionStartEvent, }) => {
1171
+ const runtimeProjectTrust = resolveProjectTrust(runtimeCwd);
1172
+ applyProjectTrustContextToEnv(runtimeProjectTrust);
1173
+ const runtimeSettingsManager = SettingsManager.create(runtimeCwd, tallowHome);
1174
+ applySessionSettingsOverrides(runtimeSettingsManager, options.settings, runtimeProjectTrust.status);
1175
+ const runtimePackageAgentsFiles = loadAgentsFilesFromPackages(runtimeSettingsManager, runtimeCwd);
1176
+ const runtimeProjectExtensionsDir = resolve(runtimeCwd, ".tallow", "extensions");
1177
+ const runtimeShouldBlockProjectExtensions = runtimeProjectTrust.status !== "trusted";
1178
+ const runtimeShouldApplyExtensionStartupPolicies = runtimeShouldBlockProjectExtensions ||
1179
+ startupProfile === "headless" ||
1180
+ disabledExtensionNames.size > 0;
1181
+ const runtimeLoader = new DefaultResourceLoader({
1182
+ cwd: runtimeCwd,
1183
+ agentDir: tallowHome,
1184
+ settingsManager: runtimeSettingsManager,
1185
+ eventBus,
1186
+ additionalExtensionPaths: dedupedExtensionPaths,
1187
+ additionalSkillPaths,
1188
+ additionalPromptTemplatePaths: additionalPromptPaths,
1189
+ additionalThemePaths,
1190
+ extensionFactories: [
1191
+ createRebrandSystemPromptExtension(contextBudgetPolicy),
1192
+ createToolResultRetentionExtension(toolResultRetentionPolicy, contextBudgetPolicy),
1193
+ createContextBudgetPlannerExtension(contextBudgetPolicy),
1194
+ detectOutputTruncation,
1195
+ createProjectTrustExtension(runtimeCwd, runtimeProjectTrust),
1196
+ createTelemetryExtension(telemetry, runtimeCwd),
1197
+ ...(explicitToolRestrictionNames
1198
+ ? [createExplicitToolRestrictionExtension(explicitToolRestrictionNames)]
1199
+ : []),
1200
+ ...(options.extensionFactories ?? []),
1201
+ ],
1202
+ noExtensions: extensionsOnly,
1203
+ extensionsOverride: runtimeShouldApplyExtensionStartupPolicies
1204
+ ? (base) => applyExtensionStartupPolicies(base, {
1205
+ blockProjectExtensions: runtimeShouldBlockProjectExtensions,
1206
+ disabledExtensionNames,
1207
+ projectExtensionsDir: runtimeProjectExtensionsDir,
1208
+ startupProfile,
1209
+ })
1210
+ : undefined,
1211
+ systemPromptOverride: options.systemPrompt ? () => options.systemPrompt : undefined,
1212
+ appendSystemPromptOverride: options.appendSystemPrompt
1213
+ ? (base) => {
1214
+ const append = options.appendSystemPrompt;
1215
+ return append ? [...base, append] : base;
1216
+ }
1217
+ : undefined,
1218
+ agentsFilesOverride: runtimePackageAgentsFiles.length > 0
1219
+ ? (base) => ({
1220
+ agentsFiles: [...base.agentsFiles, ...runtimePackageAgentsFiles],
1221
+ })
1222
+ : undefined,
1223
+ skillsOverride: (base) => {
1224
+ const normalized = normalizeSkillNames(base);
1225
+ const extra = options.additionalSkills;
1214
1226
  return {
1215
- prompts: extra ? [...base.prompts, ...extra] : base.prompts,
1216
- diagnostics: base.diagnostics,
1227
+ skills: extra ? [...normalized.skills, ...extra] : normalized.skills,
1228
+ diagnostics: normalized.diagnostics,
1217
1229
  };
1230
+ },
1231
+ promptsOverride: options.additionalPrompts
1232
+ ? (base) => {
1233
+ const extra = options.additionalPrompts;
1234
+ return {
1235
+ prompts: extra ? [...base.prompts, ...extra] : base.prompts,
1236
+ diagnostics: base.diagnostics,
1237
+ };
1238
+ }
1239
+ : undefined,
1240
+ });
1241
+ await runtimeLoader.reload();
1242
+ applySessionSettingsOverrides(runtimeSettingsManager, options.settings, runtimeProjectTrust.status);
1243
+ let resolvedModel = options.model;
1244
+ if (!resolvedModel && options.provider) {
1245
+ const modelId = options.modelId ?? runtimeSettingsManager.getDefaultModel();
1246
+ if (modelId) {
1247
+ resolvedModel = modelRegistry.find(options.provider, modelId) ?? undefined;
1248
+ if (!resolvedModel) {
1249
+ throw new Error(`Model ${options.provider}/${modelId} not found`);
1250
+ }
1218
1251
  }
1219
- : undefined,
1220
- });
1221
- await loader.reload();
1252
+ else {
1253
+ const available = modelRegistry.getAll().filter((m) => m.provider === options.provider);
1254
+ if (available.length === 0) {
1255
+ throw new Error(`No models found for provider "${options.provider}"`);
1256
+ }
1257
+ resolvedModel = available[0];
1258
+ }
1259
+ }
1260
+ const result = await createAgentSession({
1261
+ cwd: runtimeCwd,
1262
+ agentDir: tallowHome,
1263
+ model: resolvedModel,
1264
+ thinkingLevel: options.thinkingLevel,
1265
+ authStorage,
1266
+ modelRegistry,
1267
+ resourceLoader: runtimeLoader,
1268
+ sessionManager: runtimeSessionManager,
1269
+ settingsManager: runtimeSettingsManager,
1270
+ tools: options.tools,
1271
+ customTools: options.customTools,
1272
+ sessionStartEvent,
1273
+ });
1274
+ if (explicitToolRestrictionNames) {
1275
+ const sessionWithToolControl = result.session;
1276
+ sessionWithToolControl.setActiveToolsByName?.(explicitToolRestrictionNames);
1277
+ }
1278
+ return {
1279
+ ...result,
1280
+ diagnostics: [],
1281
+ services: {
1282
+ agentDir: tallowHome,
1283
+ authStorage,
1284
+ cwd: runtimeCwd,
1285
+ diagnostics: [],
1286
+ modelRegistry,
1287
+ resourceLoader: runtimeLoader,
1288
+ settingsManager: runtimeSettingsManager,
1289
+ },
1290
+ };
1291
+ };
1222
1292
  // ── Session Manager ──────────────────────────────────────────────────────
1223
1293
  let sessionManager;
1224
1294
  const sessionOpt = options.session ?? { type: "new" };
@@ -1259,49 +1329,35 @@ export async function createTallowSession(options = {}) {
1259
1329
  break;
1260
1330
  }
1261
1331
  }
1262
- // ── Model resolution (string Model object) ────────────────────────────
1263
- let resolvedModel = options.model;
1264
- if (!resolvedModel && options.provider) {
1265
- const modelId = options.modelId ?? settingsManager.getDefaultModel();
1266
- if (modelId) {
1267
- resolvedModel = modelRegistry.find(options.provider, modelId) ?? undefined;
1268
- if (!resolvedModel) {
1269
- throw new Error(`Model ${options.provider}/${modelId} not found`);
1270
- }
1271
- }
1272
- else {
1273
- // Provider without model: find any available model for this provider
1274
- const available = modelRegistry.getAll().filter((m) => m.provider === options.provider);
1275
- if (available.length === 0) {
1276
- throw new Error(`No models found for provider "${options.provider}"`);
1277
- }
1278
- resolvedModel = available[0];
1332
+ const initialSessionStartEvent = sessionOpt.type === "continue" || sessionOpt.type === "open" || sessionOpt.type === "resume"
1333
+ ? {
1334
+ type: "session_start",
1335
+ reason: "resume",
1336
+ previousSessionFile: sessionManager.getSessionFile(),
1279
1337
  }
1280
- }
1281
- // ── Create Session ───────────────────────────────────────────────────────
1282
- const result = await createAgentSession({
1338
+ : undefined;
1339
+ const runtime = await createAgentSessionRuntime(({ cwd: runtimeCwd, sessionManager: runtimeSessionManager, sessionStartEvent }) => createRuntime({
1340
+ cwd: runtimeCwd,
1341
+ sessionManager: runtimeSessionManager,
1342
+ sessionStartEvent,
1343
+ }), {
1283
1344
  cwd,
1284
1345
  agentDir: tallowHome,
1285
- model: resolvedModel,
1286
- thinkingLevel: options.thinkingLevel,
1287
- authStorage,
1288
- modelRegistry,
1289
- resourceLoader: loader,
1290
1346
  sessionManager,
1291
- settingsManager,
1292
- tools: options.tools,
1293
- customTools: options.customTools,
1347
+ sessionStartEvent: initialSessionStartEvent,
1294
1348
  });
1295
- if (explicitToolRestrictionNames) {
1296
- const sessionWithToolControl = result.session;
1297
- sessionWithToolControl.setActiveToolsByName?.(explicitToolRestrictionNames);
1349
+ if (process.cwd() !== callerCwd) {
1350
+ process.chdir(callerCwd);
1298
1351
  }
1299
1352
  startupTiming.mark("create-session", createSessionStartedAtMs);
1300
- instrumentSessionStartupTimings(result.session, startupTiming);
1353
+ instrumentSessionStartupTimings(runtime.session, startupTiming);
1301
1354
  return {
1302
- session: result.session,
1303
- extensions: result.extensionsResult,
1304
- modelFallbackMessage: result.modelFallbackMessage,
1355
+ runtime,
1356
+ get session() {
1357
+ return runtime.session;
1358
+ },
1359
+ extensions: runtime.services.resourceLoader.getExtensions(),
1360
+ modelFallbackMessage: runtime.modelFallbackMessage,
1305
1361
  version: TALLOW_VERSION,
1306
1362
  extensionOverrides,
1307
1363
  resolvedPlugins,
@@ -1679,29 +1735,6 @@ function createRebrandSystemPromptExtension(budgetPolicy) {
1679
1735
  });
1680
1736
  };
1681
1737
  }
1682
- /**
1683
- * Injects file paths into Image components for clickable OSC 8 links.
1684
- * When the read tool returns an image, sets the pending file path so
1685
- * the next Image constructor picks it up automatically.
1686
- *
1687
- * @param pi - Extension API
1688
- */
1689
- function injectImageFilePaths(pi) {
1690
- pi.on("tool_result", async (event) => {
1691
- if (event.toolName !== "read")
1692
- return;
1693
- const hasImage = event.content?.some((c) => c.type === "image");
1694
- if (hasImage && event.input?.path) {
1695
- const filePath = resolve(String(event.input.path));
1696
- // pi-tui >= 0.55 may not expose this helper; skip injection when unavailable.
1697
- const maybeSetNextImageFilePath = PiTui
1698
- .setNextImageFilePath;
1699
- if (typeof maybeSetNextImageFilePath === "function") {
1700
- maybeSetNextImageFilePath(filePath);
1701
- }
1702
- }
1703
- });
1704
- }
1705
1738
  /**
1706
1739
  * Create a built-in extension that summarizes oversized historical tool results.
1707
1740
  *
@@ -1897,7 +1930,7 @@ function truncateTextToBytes(text, maxBytes) {
1897
1930
  * message content and allocates a budget envelope for each one, keyed
1898
1931
  * by toolCallId. Envelopes are single-use (consumed via the API) and
1899
1932
  * automatically cleaned up on turn_end, agent_end, session_before_switch,
1900
- * and session_switch events.
1933
+ * and post-transition session_start events.
1901
1934
  *
1902
1935
  * @param budgetPolicy - Resolved context-budget policy
1903
1936
  * @returns Extension factory
@@ -2003,6 +2036,7 @@ function createContextBudgetPlannerExtension(budgetPolicy) {
2003
2036
  },
2004
2037
  };
2005
2038
  pi.on("session_start", async () => {
2039
+ clearEnvelopes();
2006
2040
  publishBudgetApi();
2007
2041
  });
2008
2042
  pi.events.on(CONTEXT_BUDGET_API_CHANNELS.budgetApiRequest, () => {
@@ -2017,9 +2051,6 @@ function createContextBudgetPlannerExtension(budgetPolicy) {
2017
2051
  pi.on("session_before_switch", async () => {
2018
2052
  clearEnvelopes();
2019
2053
  });
2020
- pi.on("session_switch", async () => {
2021
- clearEnvelopes();
2022
- });
2023
2054
  };
2024
2055
  }
2025
2056
  /**