@caupulican/pi-adaptative 0.90.11 → 0.91.2

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 (291) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/README.md +8 -10
  3. package/dist/bundled-resources/skills/icm-architect/LICENSE +21 -0
  4. package/dist/bundled-resources/skills/icm-architect/SKILL.md +112 -0
  5. package/dist/bundled-resources/skills/icm-architect/assets/templates/CLAUDE.md +27 -0
  6. package/dist/bundled-resources/skills/icm-architect/assets/templates/CONTEXT.md +14 -0
  7. package/dist/bundled-resources/skills/icm-architect/assets/templates/node.md +29 -0
  8. package/dist/bundled-resources/skills/icm-architect/assets/templates/object.md +43 -0
  9. package/dist/bundled-resources/skills/icm-architect/assets/templates/process.md +38 -0
  10. package/dist/bundled-resources/skills/icm-architect/assets/templates/questionnaire.md +9 -0
  11. package/dist/bundled-resources/skills/icm-architect/assets/templates/schema.md +24 -0
  12. package/dist/bundled-resources/skills/icm-architect/assets/templates/stage-CONTEXT.md +21 -0
  13. package/dist/bundled-resources/skills/icm-architect/references/core.md +92 -0
  14. package/dist/bundled-resources/skills/icm-architect/references/forms.md +182 -0
  15. package/dist/bundled-resources/skills/icm-architect/references/system-map.md +122 -0
  16. package/dist/cli/args.d.ts.map +1 -1
  17. package/dist/cli/args.js +2 -1
  18. package/dist/cli/args.js.map +1 -1
  19. package/dist/core/agent-paths.d.ts +2 -2
  20. package/dist/core/agent-paths.d.ts.map +1 -1
  21. package/dist/core/agent-paths.js +1 -0
  22. package/dist/core/agent-paths.js.map +1 -1
  23. package/dist/core/agent-session.d.ts +12 -0
  24. package/dist/core/agent-session.d.ts.map +1 -1
  25. package/dist/core/agent-session.js +44 -11
  26. package/dist/core/agent-session.js.map +1 -1
  27. package/dist/core/autonomy/lane-tool-surface.d.ts.map +1 -1
  28. package/dist/core/autonomy/lane-tool-surface.js +2 -0
  29. package/dist/core/autonomy/lane-tool-surface.js.map +1 -1
  30. package/dist/core/background-tool-task-controller.d.ts +9 -0
  31. package/dist/core/background-tool-task-controller.d.ts.map +1 -1
  32. package/dist/core/background-tool-task-controller.js +23 -0
  33. package/dist/core/background-tool-task-controller.js.map +1 -1
  34. package/dist/core/bash-executor.js +3 -3
  35. package/dist/core/bash-executor.js.map +1 -1
  36. package/dist/core/context/local-graph-memory-provider.d.ts +9 -0
  37. package/dist/core/context/local-graph-memory-provider.d.ts.map +1 -0
  38. package/dist/core/context/local-graph-memory-provider.js +122 -0
  39. package/dist/core/context/local-graph-memory-provider.js.map +1 -0
  40. package/dist/core/context/tool-output-packer.d.ts +2 -2
  41. package/dist/core/context/tool-output-packer.d.ts.map +1 -1
  42. package/dist/core/context/tool-output-packer.js +3 -3
  43. package/dist/core/context/tool-output-packer.js.map +1 -1
  44. package/dist/core/context-gc.d.ts.map +1 -1
  45. package/dist/core/context-gc.js +2 -0
  46. package/dist/core/context-gc.js.map +1 -1
  47. package/dist/core/default-tool-surface.d.ts.map +1 -1
  48. package/dist/core/default-tool-surface.js +5 -0
  49. package/dist/core/default-tool-surface.js.map +1 -1
  50. package/dist/core/delegation/worker-agent-control-coordinator.d.ts +1 -0
  51. package/dist/core/delegation/worker-agent-control-coordinator.d.ts.map +1 -1
  52. package/dist/core/delegation/worker-agent-control-coordinator.js +16 -8
  53. package/dist/core/delegation/worker-agent-control-coordinator.js.map +1 -1
  54. package/dist/core/delegation/worker-agent-control.d.ts +2 -0
  55. package/dist/core/delegation/worker-agent-control.d.ts.map +1 -1
  56. package/dist/core/delegation/worker-agent-control.js.map +1 -1
  57. package/dist/core/delegation/worker-context-inheritance-policy.d.ts +3 -3
  58. package/dist/core/delegation/worker-context-inheritance-policy.js +4 -4
  59. package/dist/core/delegation/worker-context-inheritance-policy.js.map +1 -1
  60. package/dist/core/delegation/worker-delegation-controller.d.ts +1 -5
  61. package/dist/core/delegation/worker-delegation-controller.d.ts.map +1 -1
  62. package/dist/core/delegation/worker-delegation-controller.js +19 -9
  63. package/dist/core/delegation/worker-delegation-controller.js.map +1 -1
  64. package/dist/core/delegation/worker-tree-budget-coordinator.d.ts +2 -0
  65. package/dist/core/delegation/worker-tree-budget-coordinator.d.ts.map +1 -1
  66. package/dist/core/delegation/worker-tree-budget-coordinator.js +6 -0
  67. package/dist/core/delegation/worker-tree-budget-coordinator.js.map +1 -1
  68. package/dist/core/extensions/extension-session-scope.d.ts +17 -0
  69. package/dist/core/extensions/extension-session-scope.d.ts.map +1 -0
  70. package/dist/core/extensions/extension-session-scope.js +135 -0
  71. package/dist/core/extensions/extension-session-scope.js.map +1 -0
  72. package/dist/core/extensions/index.d.ts +1 -0
  73. package/dist/core/extensions/index.d.ts.map +1 -1
  74. package/dist/core/extensions/index.js +1 -0
  75. package/dist/core/extensions/index.js.map +1 -1
  76. package/dist/core/extensions/runner.d.ts.map +1 -1
  77. package/dist/core/extensions/runner.js +1 -0
  78. package/dist/core/extensions/runner.js.map +1 -1
  79. package/dist/core/extensions/wrapper.d.ts +2 -1
  80. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  81. package/dist/core/extensions/wrapper.js +10 -4
  82. package/dist/core/extensions/wrapper.js.map +1 -1
  83. package/dist/core/foreground-terminal-handoff-controller.d.ts +0 -1
  84. package/dist/core/foreground-terminal-handoff-controller.d.ts.map +1 -1
  85. package/dist/core/foreground-terminal-handoff-controller.js +1 -2
  86. package/dist/core/foreground-terminal-handoff-controller.js.map +1 -1
  87. package/dist/core/goals/goal-continuation-controller.d.ts +7 -1
  88. package/dist/core/goals/goal-continuation-controller.d.ts.map +1 -1
  89. package/dist/core/goals/goal-continuation-controller.js +16 -0
  90. package/dist/core/goals/goal-continuation-controller.js.map +1 -1
  91. package/dist/core/goals/goal-runtime-snapshot.d.ts +3 -0
  92. package/dist/core/goals/goal-runtime-snapshot.d.ts.map +1 -1
  93. package/dist/core/goals/goal-runtime-snapshot.js +8 -1
  94. package/dist/core/goals/goal-runtime-snapshot.js.map +1 -1
  95. package/dist/core/goals/goal-session-controller.d.ts +2 -0
  96. package/dist/core/goals/goal-session-controller.d.ts.map +1 -1
  97. package/dist/core/goals/goal-session-controller.js +1 -0
  98. package/dist/core/goals/goal-session-controller.js.map +1 -1
  99. package/dist/core/goals/goal-tool-core.d.ts +18 -0
  100. package/dist/core/goals/goal-tool-core.d.ts.map +1 -1
  101. package/dist/core/goals/goal-tool-core.js +62 -0
  102. package/dist/core/goals/goal-tool-core.js.map +1 -1
  103. package/dist/core/goals/natural-language-goal.d.ts.map +1 -1
  104. package/dist/core/goals/natural-language-goal.js +4 -2
  105. package/dist/core/goals/natural-language-goal.js.map +1 -1
  106. package/dist/core/human-input-controller.d.ts +3 -34
  107. package/dist/core/human-input-controller.d.ts.map +1 -1
  108. package/dist/core/human-input-controller.js +3 -161
  109. package/dist/core/human-input-controller.js.map +1 -1
  110. package/dist/core/keybindings.d.ts +5 -0
  111. package/dist/core/keybindings.d.ts.map +1 -1
  112. package/dist/core/keybindings.js +2 -0
  113. package/dist/core/keybindings.js.map +1 -1
  114. package/dist/core/learning/reflection-turn-analysis.d.ts.map +1 -1
  115. package/dist/core/learning/reflection-turn-analysis.js +10 -1
  116. package/dist/core/learning/reflection-turn-analysis.js.map +1 -1
  117. package/dist/core/memory/providers/file-store.d.ts.map +1 -1
  118. package/dist/core/memory/providers/file-store.js +4 -0
  119. package/dist/core/memory/providers/file-store.js.map +1 -1
  120. package/dist/core/memory-controller.d.ts +3 -0
  121. package/dist/core/memory-controller.d.ts.map +1 -1
  122. package/dist/core/memory-controller.js +18 -0
  123. package/dist/core/memory-controller.js.map +1 -1
  124. package/dist/core/model-capability.d.ts.map +1 -1
  125. package/dist/core/model-capability.js +1 -0
  126. package/dist/core/model-capability.js.map +1 -1
  127. package/dist/core/orchestration/work-state-projection.d.ts +4 -0
  128. package/dist/core/orchestration/work-state-projection.d.ts.map +1 -1
  129. package/dist/core/orchestration/work-state-projection.js +11 -0
  130. package/dist/core/orchestration/work-state-projection.js.map +1 -1
  131. package/dist/core/pipelines/context.d.ts +6 -0
  132. package/dist/core/pipelines/context.d.ts.map +1 -0
  133. package/dist/core/pipelines/context.js +102 -0
  134. package/dist/core/pipelines/context.js.map +1 -0
  135. package/dist/core/pipelines/discover.d.ts +11 -0
  136. package/dist/core/pipelines/discover.d.ts.map +1 -0
  137. package/dist/core/pipelines/discover.js +147 -0
  138. package/dist/core/pipelines/discover.js.map +1 -0
  139. package/dist/core/pipelines/increment.d.ts +24 -0
  140. package/dist/core/pipelines/increment.d.ts.map +1 -0
  141. package/dist/core/pipelines/increment.js +121 -0
  142. package/dist/core/pipelines/increment.js.map +1 -0
  143. package/dist/core/pipelines/index.d.ts +8 -0
  144. package/dist/core/pipelines/index.d.ts.map +1 -0
  145. package/dist/core/pipelines/index.js +8 -0
  146. package/dist/core/pipelines/index.js.map +1 -0
  147. package/dist/core/pipelines/parse-contract.d.ts +10 -0
  148. package/dist/core/pipelines/parse-contract.d.ts.map +1 -0
  149. package/dist/core/pipelines/parse-contract.js +105 -0
  150. package/dist/core/pipelines/parse-contract.js.map +1 -0
  151. package/dist/core/pipelines/run-state.d.ts +26 -0
  152. package/dist/core/pipelines/run-state.d.ts.map +1 -0
  153. package/dist/core/pipelines/run-state.js +135 -0
  154. package/dist/core/pipelines/run-state.js.map +1 -0
  155. package/dist/core/pipelines/session-pipeline-run.d.ts +6 -0
  156. package/dist/core/pipelines/session-pipeline-run.d.ts.map +1 -0
  157. package/dist/core/pipelines/session-pipeline-run.js +18 -0
  158. package/dist/core/pipelines/session-pipeline-run.js.map +1 -0
  159. package/dist/core/pipelines/types.d.ts +91 -0
  160. package/dist/core/pipelines/types.d.ts.map +1 -0
  161. package/dist/core/pipelines/types.js +44 -0
  162. package/dist/core/pipelines/types.js.map +1 -0
  163. package/dist/core/reflection-controller.d.ts +2 -0
  164. package/dist/core/reflection-controller.d.ts.map +1 -1
  165. package/dist/core/reflection-controller.js +53 -30
  166. package/dist/core/reflection-controller.js.map +1 -1
  167. package/dist/core/resource-loader.d.ts +21 -0
  168. package/dist/core/resource-loader.d.ts.map +1 -1
  169. package/dist/core/resource-loader.js +45 -18
  170. package/dist/core/resource-loader.js.map +1 -1
  171. package/dist/core/runtime-builder.d.ts +3 -0
  172. package/dist/core/runtime-builder.d.ts.map +1 -1
  173. package/dist/core/runtime-builder.js +49 -1
  174. package/dist/core/runtime-builder.js.map +1 -1
  175. package/dist/core/sdk.d.ts.map +1 -1
  176. package/dist/core/sdk.js +3 -0
  177. package/dist/core/sdk.js.map +1 -1
  178. package/dist/core/session-role.d.ts.map +1 -1
  179. package/dist/core/session-role.js +2 -0
  180. package/dist/core/session-role.js.map +1 -1
  181. package/dist/core/settings-manager.d.ts +12 -0
  182. package/dist/core/settings-manager.d.ts.map +1 -1
  183. package/dist/core/settings-manager.js +43 -9
  184. package/dist/core/settings-manager.js.map +1 -1
  185. package/dist/core/system-prompt-builder.js +1 -1
  186. package/dist/core/system-prompt-builder.js.map +1 -1
  187. package/dist/core/system-prompt.d.ts +1 -1
  188. package/dist/core/system-prompt.d.ts.map +1 -1
  189. package/dist/core/system-prompt.js +30 -22
  190. package/dist/core/system-prompt.js.map +1 -1
  191. package/dist/core/tasks/task-projection.d.ts +2 -0
  192. package/dist/core/tasks/task-projection.d.ts.map +1 -1
  193. package/dist/core/tasks/task-projection.js +1 -0
  194. package/dist/core/tasks/task-projection.js.map +1 -1
  195. package/dist/core/tasks/task-state.d.ts +1 -1
  196. package/dist/core/tasks/task-state.d.ts.map +1 -1
  197. package/dist/core/tasks/task-state.js +10 -3
  198. package/dist/core/tasks/task-state.js.map +1 -1
  199. package/dist/core/tools/bash.d.ts.map +1 -1
  200. package/dist/core/tools/bash.js +11 -3
  201. package/dist/core/tools/bash.js.map +1 -1
  202. package/dist/core/tools/delegate.d.ts.map +1 -1
  203. package/dist/core/tools/delegate.js +9 -3
  204. package/dist/core/tools/delegate.js.map +1 -1
  205. package/dist/core/tools/edit.d.ts.map +1 -1
  206. package/dist/core/tools/edit.js +47 -5
  207. package/dist/core/tools/edit.js.map +1 -1
  208. package/dist/core/tools/goal.d.ts +16 -1
  209. package/dist/core/tools/goal.d.ts.map +1 -1
  210. package/dist/core/tools/goal.js +14 -2
  211. package/dist/core/tools/goal.js.map +1 -1
  212. package/dist/core/tools/index.d.ts +1 -1
  213. package/dist/core/tools/index.d.ts.map +1 -1
  214. package/dist/core/tools/index.js +1 -1
  215. package/dist/core/tools/index.js.map +1 -1
  216. package/dist/core/tools/output-accumulator.d.ts +5 -0
  217. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  218. package/dist/core/tools/output-accumulator.js +33 -2
  219. package/dist/core/tools/output-accumulator.js.map +1 -1
  220. package/dist/core/tools/pipeline.d.ts +35 -0
  221. package/dist/core/tools/pipeline.d.ts.map +1 -0
  222. package/dist/core/tools/pipeline.js +203 -0
  223. package/dist/core/tools/pipeline.js.map +1 -0
  224. package/dist/core/tools/skill-audit.d.ts.map +1 -1
  225. package/dist/core/tools/skill-audit.js +2 -1
  226. package/dist/core/tools/skill-audit.js.map +1 -1
  227. package/dist/core/tools/skill.d.ts.map +1 -1
  228. package/dist/core/tools/skill.js +2 -1
  229. package/dist/core/tools/skill.js.map +1 -1
  230. package/dist/core/tools/skillify.d.ts.map +1 -1
  231. package/dist/core/tools/skillify.js +3 -1
  232. package/dist/core/tools/skillify.js.map +1 -1
  233. package/dist/core/tools/task-steps.d.ts +1 -1
  234. package/dist/core/tools/task-steps.d.ts.map +1 -1
  235. package/dist/core/tools/task-steps.js +9 -0
  236. package/dist/core/tools/task-steps.js.map +1 -1
  237. package/dist/core/tools/tool-task.d.ts.map +1 -1
  238. package/dist/core/tools/tool-task.js +5 -1
  239. package/dist/core/tools/tool-task.js.map +1 -1
  240. package/dist/core/tools/write.d.ts.map +1 -1
  241. package/dist/core/tools/write.js +1 -0
  242. package/dist/core/tools/write.js.map +1 -1
  243. package/dist/index.d.ts +1 -1
  244. package/dist/index.d.ts.map +1 -1
  245. package/dist/index.js +1 -1
  246. package/dist/index.js.map +1 -1
  247. package/dist/modes/interactive/components/settings-selector.d.ts +3 -0
  248. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  249. package/dist/modes/interactive/components/settings-selector.js +66 -0
  250. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  251. package/dist/modes/interactive/components/skill-invocation-message.js +1 -1
  252. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  253. package/dist/modes/interactive/components/tool-execution.d.ts +6 -1
  254. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  255. package/dist/modes/interactive/components/tool-execution.js +20 -1
  256. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  257. package/dist/modes/interactive/components/tool-group.d.ts +4 -0
  258. package/dist/modes/interactive/components/tool-group.d.ts.map +1 -1
  259. package/dist/modes/interactive/components/tool-group.js +96 -7
  260. package/dist/modes/interactive/components/tool-group.js.map +1 -1
  261. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  262. package/dist/modes/interactive/interactive-mode.js +8 -10
  263. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  264. package/dist/modes/interactive/key-handlers.d.ts +1 -0
  265. package/dist/modes/interactive/key-handlers.d.ts.map +1 -1
  266. package/dist/modes/interactive/key-handlers.js +2 -1
  267. package/dist/modes/interactive/key-handlers.js.map +1 -1
  268. package/dist/modes/interactive/settings-selector-flow.d.ts.map +1 -1
  269. package/dist/modes/interactive/settings-selector-flow.js +12 -0
  270. package/dist/modes/interactive/settings-selector-flow.js.map +1 -1
  271. package/docs/extensions.md +8 -5
  272. package/docs/harness-architecture.md +3 -4
  273. package/docs/keybindings.md +3 -2
  274. package/docs/quickstart.md +4 -4
  275. package/docs/sdk.md +3 -1
  276. package/docs/settings.md +16 -2
  277. package/docs/task-steps.md +1 -0
  278. package/docs/usage.md +6 -7
  279. package/docs/worker-profiles.md +1 -1
  280. package/docs/worktree-sync.md +1 -1
  281. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  282. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  283. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  284. package/examples/extensions/minimal-mode.ts +1 -1
  285. package/examples/extensions/sandbox/package-lock.json +2 -2
  286. package/examples/extensions/sandbox/package.json +1 -1
  287. package/examples/extensions/with-deps/package-lock.json +2 -2
  288. package/examples/extensions/with-deps/package.json +1 -1
  289. package/examples/sdk/07-context-files.ts +5 -2
  290. package/npm-shrinkwrap.json +12 -12
  291. package/package.json +4 -4
@@ -34,6 +34,7 @@ export interface KeyHandlersHost {
34
34
  handleDebugCommand(): void;
35
35
  showModelSelector(initialSearchInput?: string): Promise<void>;
36
36
  loadTuiHistoryOnDemand(): void;
37
+ toggleToolOutputExpansion(): void;
37
38
  showTranscriptPager(): void;
38
39
  toggleAgentsOverlay(): void;
39
40
  toggleThinkingBlockVisibility(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"key-handlers.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/key-handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,aAAa,EAAE,YAAY,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC;IACjB,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,aAAa,GAAG,eAAe,GAAG,WAAW,GAAG,4BAA4B,CAAC,CAAC;IACnH,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,uBAAuB,CAAC,CAAC;IACzE,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,6BAA6B,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC;IAC3F,uBAAuB,IAAI,IAAI,CAAC;IAChC,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnD,uBAAuB,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvD,WAAW,IAAI,IAAI,CAAC;IACpB,WAAW,IAAI,IAAI,CAAC;IACpB,WAAW,IAAI,IAAI,CAAC;IACpB,kBAAkB,IAAI,IAAI,CAAC;IAC3B,UAAU,CAAC,SAAS,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,kBAAkB,IAAI,IAAI,CAAC;IAC3B,iBAAiB,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,sBAAsB,IAAI,IAAI,CAAC;IAC/B,mBAAmB,IAAI,IAAI,CAAC;IAC5B,mBAAmB,IAAI,IAAI,CAAC;IAC5B,6BAA6B,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,aAAa,IAAI,IAAI,CAAC;IACtB,kBAAkB,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,mBAAmB,IAAI,IAAI,CAAC;IAC5B,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAuE5D"}
1
+ {"version":3,"file":"key-handlers.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/key-handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,aAAa,EAAE,YAAY,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC;IACjB,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,aAAa,GAAG,eAAe,GAAG,WAAW,GAAG,4BAA4B,CAAC,CAAC;IACnH,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,uBAAuB,CAAC,CAAC;IACzE,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,6BAA6B,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC;IAC3F,uBAAuB,IAAI,IAAI,CAAC;IAChC,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnD,uBAAuB,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvD,WAAW,IAAI,IAAI,CAAC;IACpB,WAAW,IAAI,IAAI,CAAC;IACpB,WAAW,IAAI,IAAI,CAAC;IACpB,kBAAkB,IAAI,IAAI,CAAC;IAC3B,UAAU,CAAC,SAAS,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,kBAAkB,IAAI,IAAI,CAAC;IAC3B,iBAAiB,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,sBAAsB,IAAI,IAAI,CAAC;IAC/B,yBAAyB,IAAI,IAAI,CAAC;IAClC,mBAAmB,IAAI,IAAI,CAAC;IAC5B,mBAAmB,IAAI,IAAI,CAAC;IAC5B,6BAA6B,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,aAAa,IAAI,IAAI,CAAC;IACtB,kBAAkB,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,mBAAmB,IAAI,IAAI,CAAC;IAC5B,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAwE5D"}
@@ -52,7 +52,8 @@ export function setupKeyHandlers(host) {
52
52
  // Global debug handler on TUI (works regardless of focus)
53
53
  host.ui.onDebug = () => host.handleDebugCommand();
54
54
  host.defaultEditor.onAction("app.model.select", () => void host.showModelSelector());
55
- host.defaultEditor.onAction("app.tools.expand", () => host.loadTuiHistoryOnDemand());
55
+ host.defaultEditor.onAction("app.tools.expand", () => host.toggleToolOutputExpansion());
56
+ host.defaultEditor.onAction("app.history.load", () => host.loadTuiHistoryOnDemand());
56
57
  host.defaultEditor.onBackgroundTool = () => host.session.backgroundRunningToolCalls() > 0;
57
58
  host.defaultEditor.onAction("app.transcript.open", () => host.showTranscriptPager());
58
59
  host.defaultEditor.onAction("app.agents.open", () => host.toggleAgentsOverlay());
@@ -1 +1 @@
1
- {"version":3,"file":"key-handlers.js","sourceRoot":"","sources":["../../../src/modes/interactive/key-handlers.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Editor/global key-handler wiring extracted from interactive-mode.\n *\n * `setupKeyHandlers` installs the escape/action/ctrl-D/change/paste/recall\n * callbacks on the default editor (and the global debug handler on the TUI),\n * each delegating to a host method or toggling the bash-mode/last-escape state.\n * It runs once at init through a wide `KeyHandlersHost` seam; interactive-mode\n * keeps a thin wrapper.\n */\n\nimport type { EditorComponent, TUI } from \"@caupulican/pi-tui\";\nimport type { AgentSession } from \"../../core/agent-session.ts\";\nimport type { SettingsManager } from \"../../core/settings-manager.ts\";\nimport type { CustomEditor } from \"./components/custom-editor.ts\";\n\nexport interface KeyHandlersHost {\n\treadonly defaultEditor: CustomEditor;\n\treadonly editor: EditorComponent;\n\treadonly ui: TUI;\n\treadonly session: Pick<AgentSession, \"isStreaming\" | \"isBashRunning\" | \"abortBash\" | \"backgroundRunningToolCalls\">;\n\treadonly settingsManager: Pick<SettingsManager, \"getDoubleEscapeAction\">;\n\tisBashMode: boolean;\n\tlastEscapeTime: number;\n\trestoreQueuedMessagesToEditor(options?: { abort?: boolean; currentText?: string }): number;\n\tupdateEditorBorderColor(): void;\n\tshowTreeSelector(initialSelectedId?: string): void;\n\tshowUserMessageSelector(newSessionName?: string): void;\n\thandleCtrlC(): void;\n\thandleCtrlD(): void;\n\thandleCtrlZ(): void;\n\tcycleThinkingLevel(): void;\n\tcycleModel(direction: \"forward\" | \"backward\"): Promise<void>;\n\thandleDebugCommand(): void;\n\tshowModelSelector(initialSearchInput?: string): Promise<void>;\n\tloadTuiHistoryOnDemand(): void;\n\tshowTranscriptPager(): void;\n\ttoggleAgentsOverlay(): void;\n\ttoggleThinkingBlockVisibility(): Promise<void>;\n\topenExternalEditor(): Promise<void>;\n\thandleFollowUp(): Promise<void>;\n\thandleDequeue(): void;\n\thandleClearCommand(newSessionName?: string): Promise<void>;\n\tshowSessionSelector(): void;\n\thandleClipboardImagePaste(): Promise<void>;\n}\n\nexport function setupKeyHandlers(host: KeyHandlersHost): void {\n\t// Set up handlers on defaultEditor - they use host.editor for text access\n\t// so they work correctly regardless of which editor is active\n\thost.defaultEditor.onEscape = () => {\n\t\tif (host.session.isStreaming) {\n\t\t\thost.restoreQueuedMessagesToEditor({ abort: true });\n\t\t} else if (host.session.isBashRunning) {\n\t\t\thost.session.abortBash();\n\t\t} else if (host.isBashMode) {\n\t\t\thost.editor.setText(\"\");\n\t\t\thost.isBashMode = false;\n\t\t\thost.updateEditorBorderColor();\n\t\t} else if (!host.editor.getText().trim()) {\n\t\t\t// Double-escape with empty editor triggers /tree, /fork, or nothing based on setting\n\t\t\tconst action = host.settingsManager.getDoubleEscapeAction();\n\t\t\tif (action !== \"none\") {\n\t\t\t\tconst now = Date.now();\n\t\t\t\tif (now - host.lastEscapeTime < 500) {\n\t\t\t\t\tif (action === \"tree\") {\n\t\t\t\t\t\thost.showTreeSelector();\n\t\t\t\t\t} else {\n\t\t\t\t\t\thost.showUserMessageSelector();\n\t\t\t\t\t}\n\t\t\t\t\thost.lastEscapeTime = 0;\n\t\t\t\t} else {\n\t\t\t\t\thost.lastEscapeTime = now;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Register app action handlers\n\thost.defaultEditor.onAction(\"app.clear\", () => host.handleCtrlC());\n\thost.defaultEditor.onCtrlD = () => host.handleCtrlD();\n\thost.defaultEditor.onAction(\"app.suspend\", () => host.handleCtrlZ());\n\thost.defaultEditor.onAction(\"app.thinking.cycle\", () => host.cycleThinkingLevel());\n\thost.defaultEditor.onAction(\"app.model.cycleForward\", () => host.cycleModel(\"forward\"));\n\thost.defaultEditor.onAction(\"app.model.cycleBackward\", () => host.cycleModel(\"backward\"));\n\n\t// Global debug handler on TUI (works regardless of focus)\n\thost.ui.onDebug = () => host.handleDebugCommand();\n\thost.defaultEditor.onAction(\"app.model.select\", () => void host.showModelSelector());\n\thost.defaultEditor.onAction(\"app.tools.expand\", () => host.loadTuiHistoryOnDemand());\n\thost.defaultEditor.onBackgroundTool = () => host.session.backgroundRunningToolCalls() > 0;\n\thost.defaultEditor.onAction(\"app.transcript.open\", () => host.showTranscriptPager());\n\thost.defaultEditor.onAction(\"app.agents.open\", () => host.toggleAgentsOverlay());\n\thost.defaultEditor.onAction(\"app.thinking.toggle\", () => void host.toggleThinkingBlockVisibility());\n\thost.defaultEditor.onAction(\"app.editor.external\", () => host.openExternalEditor());\n\thost.defaultEditor.onAction(\"app.message.followUp\", () => host.handleFollowUp());\n\thost.defaultEditor.onAction(\"app.message.dequeue\", () => host.handleDequeue());\n\t// Plain Up arrow on an empty editor recalls queued messages for editing\n\t// before history navigation. Many terminals (e.g. Windows Terminal) swallow\n\t// the alt-chord bindings, so the queue must be reachable without them.\n\thost.defaultEditor.onRecallQueued = () => host.restoreQueuedMessagesToEditor() > 0;\n\thost.defaultEditor.onAction(\"app.session.new\", () => host.handleClearCommand());\n\thost.defaultEditor.onAction(\"app.session.tree\", () => host.showTreeSelector());\n\thost.defaultEditor.onAction(\"app.session.fork\", () => host.showUserMessageSelector());\n\thost.defaultEditor.onAction(\"app.session.resume\", () => host.showSessionSelector());\n\n\thost.defaultEditor.onChangeSummary = ({ firstNonWhitespace }) => {\n\t\tconst wasBashMode = host.isBashMode;\n\t\thost.isBashMode = firstNonWhitespace === \"!\";\n\t\tif (wasBashMode !== host.isBashMode) {\n\t\t\thost.updateEditorBorderColor();\n\t\t}\n\t};\n\n\t// Handle the configurable platform paste chord (Ctrl+V on Unix, Alt+V on Windows).\n\thost.defaultEditor.onPasteImage = () => {\n\t\thost.handleClipboardImagePaste();\n\t};\n}\n"]}
1
+ {"version":3,"file":"key-handlers.js","sourceRoot":"","sources":["../../../src/modes/interactive/key-handlers.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Editor/global key-handler wiring extracted from interactive-mode.\n *\n * `setupKeyHandlers` installs the escape/action/ctrl-D/change/paste/recall\n * callbacks on the default editor (and the global debug handler on the TUI),\n * each delegating to a host method or toggling the bash-mode/last-escape state.\n * It runs once at init through a wide `KeyHandlersHost` seam; interactive-mode\n * keeps a thin wrapper.\n */\n\nimport type { EditorComponent, TUI } from \"@caupulican/pi-tui\";\nimport type { AgentSession } from \"../../core/agent-session.ts\";\nimport type { SettingsManager } from \"../../core/settings-manager.ts\";\nimport type { CustomEditor } from \"./components/custom-editor.ts\";\n\nexport interface KeyHandlersHost {\n\treadonly defaultEditor: CustomEditor;\n\treadonly editor: EditorComponent;\n\treadonly ui: TUI;\n\treadonly session: Pick<AgentSession, \"isStreaming\" | \"isBashRunning\" | \"abortBash\" | \"backgroundRunningToolCalls\">;\n\treadonly settingsManager: Pick<SettingsManager, \"getDoubleEscapeAction\">;\n\tisBashMode: boolean;\n\tlastEscapeTime: number;\n\trestoreQueuedMessagesToEditor(options?: { abort?: boolean; currentText?: string }): number;\n\tupdateEditorBorderColor(): void;\n\tshowTreeSelector(initialSelectedId?: string): void;\n\tshowUserMessageSelector(newSessionName?: string): void;\n\thandleCtrlC(): void;\n\thandleCtrlD(): void;\n\thandleCtrlZ(): void;\n\tcycleThinkingLevel(): void;\n\tcycleModel(direction: \"forward\" | \"backward\"): Promise<void>;\n\thandleDebugCommand(): void;\n\tshowModelSelector(initialSearchInput?: string): Promise<void>;\n\tloadTuiHistoryOnDemand(): void;\n\ttoggleToolOutputExpansion(): void;\n\tshowTranscriptPager(): void;\n\ttoggleAgentsOverlay(): void;\n\ttoggleThinkingBlockVisibility(): Promise<void>;\n\topenExternalEditor(): Promise<void>;\n\thandleFollowUp(): Promise<void>;\n\thandleDequeue(): void;\n\thandleClearCommand(newSessionName?: string): Promise<void>;\n\tshowSessionSelector(): void;\n\thandleClipboardImagePaste(): Promise<void>;\n}\n\nexport function setupKeyHandlers(host: KeyHandlersHost): void {\n\t// Set up handlers on defaultEditor - they use host.editor for text access\n\t// so they work correctly regardless of which editor is active\n\thost.defaultEditor.onEscape = () => {\n\t\tif (host.session.isStreaming) {\n\t\t\thost.restoreQueuedMessagesToEditor({ abort: true });\n\t\t} else if (host.session.isBashRunning) {\n\t\t\thost.session.abortBash();\n\t\t} else if (host.isBashMode) {\n\t\t\thost.editor.setText(\"\");\n\t\t\thost.isBashMode = false;\n\t\t\thost.updateEditorBorderColor();\n\t\t} else if (!host.editor.getText().trim()) {\n\t\t\t// Double-escape with empty editor triggers /tree, /fork, or nothing based on setting\n\t\t\tconst action = host.settingsManager.getDoubleEscapeAction();\n\t\t\tif (action !== \"none\") {\n\t\t\t\tconst now = Date.now();\n\t\t\t\tif (now - host.lastEscapeTime < 500) {\n\t\t\t\t\tif (action === \"tree\") {\n\t\t\t\t\t\thost.showTreeSelector();\n\t\t\t\t\t} else {\n\t\t\t\t\t\thost.showUserMessageSelector();\n\t\t\t\t\t}\n\t\t\t\t\thost.lastEscapeTime = 0;\n\t\t\t\t} else {\n\t\t\t\t\thost.lastEscapeTime = now;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Register app action handlers\n\thost.defaultEditor.onAction(\"app.clear\", () => host.handleCtrlC());\n\thost.defaultEditor.onCtrlD = () => host.handleCtrlD();\n\thost.defaultEditor.onAction(\"app.suspend\", () => host.handleCtrlZ());\n\thost.defaultEditor.onAction(\"app.thinking.cycle\", () => host.cycleThinkingLevel());\n\thost.defaultEditor.onAction(\"app.model.cycleForward\", () => host.cycleModel(\"forward\"));\n\thost.defaultEditor.onAction(\"app.model.cycleBackward\", () => host.cycleModel(\"backward\"));\n\n\t// Global debug handler on TUI (works regardless of focus)\n\thost.ui.onDebug = () => host.handleDebugCommand();\n\thost.defaultEditor.onAction(\"app.model.select\", () => void host.showModelSelector());\n\thost.defaultEditor.onAction(\"app.tools.expand\", () => host.toggleToolOutputExpansion());\n\thost.defaultEditor.onAction(\"app.history.load\", () => host.loadTuiHistoryOnDemand());\n\thost.defaultEditor.onBackgroundTool = () => host.session.backgroundRunningToolCalls() > 0;\n\thost.defaultEditor.onAction(\"app.transcript.open\", () => host.showTranscriptPager());\n\thost.defaultEditor.onAction(\"app.agents.open\", () => host.toggleAgentsOverlay());\n\thost.defaultEditor.onAction(\"app.thinking.toggle\", () => void host.toggleThinkingBlockVisibility());\n\thost.defaultEditor.onAction(\"app.editor.external\", () => host.openExternalEditor());\n\thost.defaultEditor.onAction(\"app.message.followUp\", () => host.handleFollowUp());\n\thost.defaultEditor.onAction(\"app.message.dequeue\", () => host.handleDequeue());\n\t// Plain Up arrow on an empty editor recalls queued messages for editing\n\t// before history navigation. Many terminals (e.g. Windows Terminal) swallow\n\t// the alt-chord bindings, so the queue must be reachable without them.\n\thost.defaultEditor.onRecallQueued = () => host.restoreQueuedMessagesToEditor() > 0;\n\thost.defaultEditor.onAction(\"app.session.new\", () => host.handleClearCommand());\n\thost.defaultEditor.onAction(\"app.session.tree\", () => host.showTreeSelector());\n\thost.defaultEditor.onAction(\"app.session.fork\", () => host.showUserMessageSelector());\n\thost.defaultEditor.onAction(\"app.session.resume\", () => host.showSessionSelector());\n\n\thost.defaultEditor.onChangeSummary = ({ firstNonWhitespace }) => {\n\t\tconst wasBashMode = host.isBashMode;\n\t\thost.isBashMode = firstNonWhitespace === \"!\";\n\t\tif (wasBashMode !== host.isBashMode) {\n\t\t\thost.updateEditorBorderColor();\n\t\t}\n\t};\n\n\t// Handle the configurable platform paste chord (Ctrl+V on Unix, Alt+V on Windows).\n\thost.defaultEditor.onPasteImage = () => {\n\t\thost.handleClipboardImagePaste();\n\t};\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"settings-selector-flow.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/settings-selector-flow.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACjG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAGhE,OAAO,KAAK,EACX,YAAY,EACZ,wBAAwB,EACxB,eAAe,EACf,aAAa,EACb,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAM9D,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC;IAClC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC;IACjB,QAAQ,CAAC,aAAa,EAAE,YAAY,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,IAAI,KAAK;QAAE,SAAS,EAAE,SAAS,CAAC;QAAC,KAAK,EAAE,SAAS,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7F,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,wBAAwB,IAAI,UAAU,EAAE,CAAC;IACzC,yBAAyB,IAAI,IAAI,CAAC;IAClC,uBAAuB,IAAI,IAAI,CAAC;IAChC,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,8BAA8B,CAAC,QAAQ,EAAE,wBAAwB,GAAG,MAAM,GAAG,SAAS,CAAC;IACvF,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACnE,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;IAC3E,qBAAqB,IAAI,IAAI,CAAC;IAC9B,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,CA8RrE"}
1
+ {"version":3,"file":"settings-selector-flow.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/settings-selector-flow.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACjG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAGhE,OAAO,KAAK,EACX,YAAY,EACZ,wBAAwB,EACxB,eAAe,EACf,aAAa,EACb,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAM9D,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC;IAClC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC;IACjB,QAAQ,CAAC,aAAa,EAAE,YAAY,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,IAAI,KAAK;QAAE,SAAS,EAAE,SAAS,CAAC;QAAC,KAAK,EAAE,SAAS,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7F,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,wBAAwB,IAAI,UAAU,EAAE,CAAC;IACzC,yBAAyB,IAAI,IAAI,CAAC;IAClC,uBAAuB,IAAI,IAAI,CAAC;IAChC,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,8BAA8B,CAAC,QAAQ,EAAE,wBAAwB,GAAG,MAAM,GAAG,SAAS,CAAC;IACvF,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACnE,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;IAC3E,qBAAqB,IAAI,IAAI,CAAC;IAC9B,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,CA2SrE"}
@@ -52,6 +52,8 @@ export function showSettingsSelector(host) {
52
52
  // even if the profile would block re-selecting it.
53
53
  availableThemes: getAvailableThemes().filter((name) => host.settingsManager.isResourceAllowedByProfile("themes", name)),
54
54
  hideThinkingBlock: host.hideThinkingBlock,
55
+ projectContextFiles: host.settingsManager.getProjectContextFiles(),
56
+ projectContextFilesScope: host.settingsManager.getProjectContextFilesScope(),
55
57
  collapseChangelog: host.settingsManager.getCollapseChangelog(),
56
58
  enableInstallTelemetry: host.settingsManager.getEnableInstallTelemetry(),
57
59
  doubleEscapeAction: host.settingsManager.getDoubleEscapeAction(),
@@ -167,6 +169,16 @@ export function showSettingsSelector(host) {
167
169
  host.ui.requestRender();
168
170
  }
169
171
  },
172
+ onProjectContextFilesChange: (mode, scope) => {
173
+ host.settingsManager.setProjectContextFiles(mode, scope);
174
+ const where = scope === "directoryProfile"
175
+ ? "this directory"
176
+ : scope === "project"
177
+ ? "this project"
178
+ : "all projects";
179
+ const load = mode === "on-demand" ? "lists this project's AGENTS.md" : "global AGENTS.md only";
180
+ host.showStatus(`Project context files: ${load} (${where}). Run /reload to apply.`);
181
+ },
170
182
  onHideThinkingBlockChange: (hidden) => {
171
183
  host.hideThinkingBlock = hidden;
172
184
  host.settingsManager.setHideThinkingBlock(hidden);
@@ -1 +1 @@
1
- {"version":3,"file":"settings-selector-flow.js","sourceRoot":"","sources":["../../../src/modes/interactive/settings-selector-flow.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAG/D,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAO/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAG9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AA0BhE,MAAM,UAAU,oBAAoB,CAAC,IAA0B;IAC9D,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1B,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE,CAAC;QAClE,MAAM,cAAc,GAAG;YACtB;gBACC,KAAK,EAAE,QAAQ;gBACf,KAAK,EAAE,QAAQ;gBACf,WAAW,EAAE,oDAAoD;aACjE;YACD,GAAG,IAAI,CAAC,eAAe;iBACrB,kBAAkB,EAAE;iBACpB,YAAY,EAAE;iBACd,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAClB,KAAK,EAAE,OAAO,CAAC,IAAI;gBACnB,KAAK,EAAE,OAAO,CAAC,IAAI;gBACnB,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,MAAM;aAClD,CAAC,CAAC;SACJ,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,yBAAyB,CAC7C;YACC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,qBAAqB;YAC/C,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;YAChD,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE;YAC1D,gBAAgB,EAAE,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE;YAC3D,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE;YAClD,mBAAmB,EAAE,IAAI,CAAC,eAAe,CAAC,sBAAsB,EAAE;YAClE,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;YACvC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;YACvC,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;YAC9C,iBAAiB,EAAE,IAAI,CAAC,eAAe,CAAC,oBAAoB,EAAE;YAC9D,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa;YACzC,uBAAuB,EAAE,IAAI,CAAC,OAAO,CAAC,0BAA0B,EAAE;YAClE,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,MAAM;YACvD,kFAAkF;YAClF,kFAAkF;YAClF,mDAAmD;YACnD,eAAe,EAAE,kBAAkB,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACrD,IAAI,CAAC,eAAe,CAAC,0BAA0B,CAAC,QAAQ,EAAE,IAAI,CAAC,CAC/D;YACD,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,iBAAiB,EAAE,IAAI,CAAC,eAAe,CAAC,oBAAoB,EAAE;YAC9D,sBAAsB,EAAE,IAAI,CAAC,eAAe,CAAC,yBAAyB,EAAE;YACxE,kBAAkB,EAAE,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE;YAChE,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE;YACxD,kBAAkB,EAAE,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE;YAChE,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE;YACxD,sBAAsB,EAAE,IAAI,CAAC,eAAe,CAAC,yBAAyB,EAAE;YACxE,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE;YACpD,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE;YACtD,oBAAoB,EAAE,IAAI,CAAC,eAAe,CAAC,uBAAuB,EAAE;YACpE,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;YAC5C,gBAAgB,EAAE,IAAI,CAAC,eAAe,CAAC,2BAA2B,EAAE;YACpE,qBAAqB,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YAC9E,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE;YACpD,aAAa,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YAC9D,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,uBAAuB,EAAE;YAC5D,iBAAiB,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YACtE,gBAAgB,EAAE,IAAI,CAAC,eAAe,CAAC,2BAA2B,EAAE;YACpE,qBAAqB,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YAC9E,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,0BAA0B,EAAE;YAClE,oBAAoB,EAAE,eAAe,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YACpF,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC,yBAAyB,EAAE;YAChE,mBAAmB,EAAE,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YAC1E,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,0BAA0B,EAAE;YAClE,oBAAoB,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YAC5E,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,sBAAsB,EAAE;YAC1D,gBAAgB,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YACpE,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,oBAAoB,EAAE;YACtD,cAAc,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YAChE,qBAAqB,EAAE,IAAI,CAAC,wBAAwB,EAAE;YACtD,0BAA0B,EAAE,CAAC,YAAY,EAAE,EAAE;gBAC5C,IAAI,CAAC,YAAY;oBAAE,OAAO,IAAI,CAAC,OAAO,CAAC,0BAA0B,EAAE,CAAC;gBACpE,MAAM,QAAQ,GAAG,eAAe,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;gBACxG,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,0BAA0B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAChF,CAAC;YACD,wBAAwB,EAAE,IAAI,CAAC,eAAe,CAAC,mCAAmC,EAAE;YACpF,6BAA6B,EAAE,eAAe,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YAChG,sBAAsB,EAAE,IAAI,CAAC,eAAe,CAAC,0BAA0B,EAAE;YACzE,2BAA2B,EAAE,eAAe,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YACzF,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;gBACtC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE;gBAC3D,CAAC,CAAC,SAAS;YACZ,iBAAiB,EAAE,IAAI,CAAC,eAAe,CAAC,6BAA6B,EAAE,CAAC,CAAC,CAAC;YAC1E,cAAc;YACd,qBAAqB,EAAE,IAAI,CAAC,eAAe,CAAC,wBAAwB,EAAE;YACtE,oBAAoB,EAAE,IAAI,CAAC,eAAe,CAAC,uBAAuB,EAAE;SACpE,EACD;YACC,mBAAmB,EAAE,CAAC,OAAO,EAAE,EAAE;gBAChC,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;gBAC/C,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;YAC5C,CAAC;YACD,kBAAkB,EAAE,CAAC,OAAO,EAAE,EAAE;gBAC/B,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBAC5C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;oBACjD,IAAI,KAAK,YAAY,sBAAsB,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;wBACpF,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;oBAC9B,CAAC;gBACF,CAAC;gBACD,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;YACzB,CAAC;YACD,uBAAuB,EAAE,CAAC,KAAK,EAAE,EAAE;gBAClC,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBAC/C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;oBACjD,IAAI,KAAK,YAAY,sBAAsB,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;wBACpF,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;oBACjC,CAAC;gBACF,CAAC;gBACD,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;YACzB,CAAC;YACD,wBAAwB,EAAE,CAAC,OAAO,EAAE,EAAE;gBACrC,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAClD,CAAC;YACD,mBAAmB,EAAE,CAAC,OAAO,EAAE,EAAE;gBAChC,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAC9C,CAAC;YACD,2BAA2B,EAAE,CAAC,OAAO,EAAE,EAAE;gBACxC,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;gBACrD,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAClC,CAAC;YACD,oBAAoB,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC9B,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YACpC,CAAC;YACD,oBAAoB,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC9B,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YACpC,CAAC;YACD,iBAAiB,EAAE,CAAC,SAAS,EAAE,EAAE;gBAChC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;gBAC7C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;YAC1C,CAAC;YACD,yBAAyB,EAAE,CAAC,SAAS,EAAE,EAAE;gBACxC,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;gBACrD,uBAAuB,CAAC,SAAS,CAAC,CAAC;gBACnC,IAAI,CAAC,UAAU,CAAC,sBAAsB,uBAAuB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAC7E,CAAC;YACD,qBAAqB,EAAE,CAAC,KAAK,EAAE,EAAE;gBAChC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBACrC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;gBACzB,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAChC,CAAC;YACD,aAAa,EAAE,CAAC,SAAS,EAAE,EAAE;gBAC5B,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBACzC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACzC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC;gBACrB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACrB,IAAI,CAAC,SAAS,CAAC,yBAAyB,SAAS,MAAM,MAAM,CAAC,KAAK,4BAA4B,CAAC,CAAC;gBAClG,CAAC;YACF,CAAC;YACD,cAAc,EAAE,CAAC,SAAS,EAAE,EAAE;gBAC7B,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBACzC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpB,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC;oBACrB,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;gBACzB,CAAC;YACF,CAAC;YACD,yBAAyB,EAAE,CAAC,MAAM,EAAE,EAAE;gBACrC,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC;gBAChC,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;gBAClD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;oBACjD,IAAI,KAAK,YAAY,yBAAyB,EAAE,CAAC;wBAChD,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;oBACpC,CAAC;gBACF,CAAC;gBACD,KAAK,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACrC,CAAC;YACD,yBAAyB,EAAE,CAAC,SAAS,EAAE,EAAE;gBACxC,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;YACtD,CAAC;YACD,8BAA8B,EAAE,CAAC,OAAO,EAAE,EAAE;gBAC3C,IAAI,CAAC,eAAe,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;YACzD,CAAC;YACD,oBAAoB,EAAE,CAAC,OAAO,EAAE,EAAE;gBACjC,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAC/C,CAAC;YACD,0BAA0B,EAAE,CAAC,MAAM,EAAE,EAAE;gBACtC,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;YACpD,CAAC;YACD,sBAAsB,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChC,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC9C,CAAC;YACD,0BAA0B,EAAE,CAAC,OAAO,EAAE,EAAE;gBACvC,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;gBACpD,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;YACxC,CAAC;YACD,sBAAsB,EAAE,CAAC,OAAO,EAAE,EAAE;gBACnC,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;gBAChD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBACxC,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;oBACjF,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBAClC,CAAC;YACF,CAAC;YACD,8BAA8B,EAAE,CAAC,UAAU,EAAE,EAAE;gBAC9C,IAAI,CAAC,eAAe,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC;gBAC3D,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC;gBACzD,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC,yBAAyB,KAAK,SAAS,EAAE,CAAC;oBAC/F,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC;gBACnD,CAAC;YACF,CAAC;YACD,qBAAqB,EAAE,CAAC,OAAO,EAAE,EAAE;gBAClC,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBAC/C,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;YACD,4BAA4B,EAAE,CAAC,OAAO,EAAE,EAAE;gBACzC,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;YACvD,CAAC;YACD,gBAAgB,EAAE,CAAC,QAAQ,EAAE,EAAE;gBAC9B,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC5C,CAAC;YACD,wBAAwB,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBAC7C,IAAI,CAAC,eAAe,CAAC,2BAA2B,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAClE,MAAM,iBAAiB,GAAG,IAAI,CAAC,8BAA8B,CAAC,QAAQ,CAAC,CAAC;gBACxE,IAAI,iBAAiB,EAAE,CAAC;oBACvB,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;gBACrC,CAAC;gBACD,IAAI,CAAC,UAAU,CACd,uCAAuC,KAAK,iFAAiF,CAC7H,CAAC;YACH,CAAC;YACD,gBAAgB,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBACrC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,IAAI,KAAK,EAAE,KAAK,CAAC,CAAC;gBACtD,IAAI,CAAC,UAAU,CAAC,iBAAiB,QAAQ,CAAC,IAAI,IAAI,KAAK,aAAa,KAAK,yBAAyB,CAAC,CAAC;YACrG,CAAC;YACD,oBAAoB,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBACzC,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAC9D,IAAI,CAAC,UAAU,CACd,mCAAmC,KAAK,oDAAoD,CAC5F,CAAC;YACH,CAAC;YACD,wBAAwB,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBAC7C,IAAI,CAAC,eAAe,CAAC,2BAA2B,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAClE,IAAI,CAAC,UAAU,CAAC,uCAAuC,KAAK,gCAAgC,CAAC,CAAC;YAC/F,CAAC;YACD,sBAAsB,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBAC3C,IAAI,CAAC,eAAe,CAAC,yBAAyB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAChE,IAAI,CAAC,UAAU,CAAC,4BAA4B,KAAK,GAAG,CAAC,CAAC;YACvD,CAAC;YACD,uBAAuB,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBAC5C,IAAI,CAAC,eAAe,CAAC,0BAA0B,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBACjE,IAAI,CAAC,UAAU,CAAC,kCAAkC,KAAK,gDAAgD,CAAC,CAAC;YAC1G,CAAC;YACD,uBAAuB,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBAC5C,IAAI,CAAC,eAAe,CAAC,0BAA0B,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBACjE,IAAI,CAAC,UAAU,CACd,sCAAsC,KAAK,wDAAwD,CACnG,CAAC;YACH,CAAC;YACD,mBAAmB,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBACxC,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAC7D,KAAK,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;oBAC5F,MAAM,iBAAiB,GAAG,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;oBAClE,IAAI,iBAAiB,EAAE,CAAC;wBACvB,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC,CAAC;oBACvF,CAAC;gBACF,CAAC;gBACD,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC7B,IAAI,CAAC,UAAU,CAAC,kCAAkC,KAAK,8CAA8C,CAAC,CAAC;YACxG,CAAC;YACD,iBAAiB,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBACtC,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAC3D,MAAM,iBAAiB,GAAG,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC3E,IAAI,iBAAiB,EAAE,CAAC;oBACvB,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;gBACrC,CAAC;gBACD,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC7B,IAAI,CAAC,UAAU,CAAC,gCAAgC,KAAK,8CAA8C,CAAC,CAAC;YACtG,CAAC;YACD,gCAAgC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBACrD,IAAI,CAAC,eAAe,CAAC,mCAAmC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAC1E,IAAI,CAAC,UAAU,CAAC,2CAA2C,KAAK,GAAG,CAAC,CAAC;YACtE,CAAC;YACD,8BAA8B,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBACnD,IAAI,CAAC,eAAe,CAAC,0BAA0B,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBACjE,IAAI,CAAC,UAAU,CAAC,8CAA8C,KAAK,GAAG,CAAC,CAAC;YACzE,CAAC;YACD,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;gBAChC,IAAI,EAAE,CAAC;gBACP,KAAK,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;YAC5C,CAAC;YACD,QAAQ,EAAE,GAAG,EAAE;gBACd,IAAI,EAAE,CAAC;gBACP,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;YACzB,CAAC;SACD,CACD,CAAC;QACF,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,eAAe,EAAE,EAAE,CAAC;IACnE,CAAC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["/**\n * `/settings` selector flow extracted from interactive-mode.\n *\n * Builds the SettingsSelectorComponent model from the current settings/session\n * state and wires its change callbacks back through a `SettingsSelectorHost`\n * seam. Self-mod/auto-learn validation, autonomy-preset application, autocomplete\n * rebuild, and the resources-hub hand-off stay host-side (shared with other\n * flows); interactive-mode keeps a thin wrapper building the host once.\n */\n\nimport { getSupportedThinkingLevels } from \"@caupulican/pi-ai\";\nimport type { Component, Container, EditorComponent, SelectItem, TUI } from \"@caupulican/pi-tui\";\nimport type { AgentSession } from \"../../core/agent-session.ts\";\nimport { configureHttpDispatcher, formatHttpIdleTimeoutMs } from \"../../core/http-dispatcher.ts\";\nimport { resolveCliModel } from \"../../core/model-resolver.ts\";\nimport type {\n\tAutonomyMode,\n\tSelfModificationSettings,\n\tSettingsManager,\n\tSettingsScope,\n} from \"../../core/settings-manager.ts\";\nimport { AssistantMessageComponent } from \"./components/assistant-message.ts\";\nimport type { CustomEditor } from \"./components/custom-editor.ts\";\nimport type { FooterComponent } from \"./components/footer.ts\";\nimport { SettingsSelectorComponent } from \"./components/settings-selector.ts\";\nimport { ToolExecutionComponent } from \"./components/tool-execution.ts\";\nimport { ToolGroupComponent } from \"./components/tool-group.ts\";\nimport { getAvailableThemes, setTheme } from \"./theme/theme.ts\";\n\nexport interface SettingsSelectorHost {\n\treadonly session: AgentSession;\n\treadonly settingsManager: SettingsManager;\n\treadonly footer: FooterComponent;\n\treadonly chatContainer: Container;\n\treadonly ui: TUI;\n\treadonly defaultEditor: CustomEditor;\n\treadonly editor: EditorComponent;\n\thideThinkingBlock: boolean;\n\tshowSelector(create: (done: () => void) => { component: Component; focus: Component }): void;\n\tshowStatus(message: string): void;\n\tshowWarning(message: string): void;\n\tshowError(message: string): void;\n\tgetAutoLearnModelOptions(): SelectItem[];\n\tsetupAutocompleteProvider(): void;\n\tupdateEditorBorderColor(): void;\n\trebuildChatFromMessages(): Promise<void>;\n\tvalidateSelfModificationSource(settings: SelfModificationSettings): string | undefined;\n\tapplyAutonomyMode(mode: AutonomyMode, scope?: SettingsScope): void;\n\tvalidateAutoLearnModelValue(value: string | undefined): string | undefined;\n\tupdateAutoLearnFooter(): void;\n\thandleResourcesHubAction(action: string): Promise<void>;\n}\n\nexport function showSettingsSelector(host: SettingsSelectorHost): void {\n\thost.showSelector((done) => {\n\t\tconst projectSettings = host.settingsManager.getProjectSettings();\n\t\tconst profileOptions = [\n\t\t\t{\n\t\t\t\tvalue: \"(none)\",\n\t\t\t\tlabel: \"(none)\",\n\t\t\t\tdescription: \"Use configured profile selection (session default)\",\n\t\t\t},\n\t\t\t...host.settingsManager\n\t\t\t\t.getProfileRegistry()\n\t\t\t\t.listProfiles()\n\t\t\t\t.map((profile) => ({\n\t\t\t\t\tvalue: profile.name,\n\t\t\t\t\tlabel: profile.name,\n\t\t\t\t\tdescription: profile.description ?? profile.source,\n\t\t\t\t})),\n\t\t];\n\t\tconst selector = new SettingsSelectorComponent(\n\t\t\t{\n\t\t\t\tautoCompact: host.session.autoCompactionEnabled,\n\t\t\t\tshowImages: host.settingsManager.getShowImages(),\n\t\t\t\timageWidthCells: host.settingsManager.getImageWidthCells(),\n\t\t\t\tautoResizeImages: host.settingsManager.getImageAutoResize(),\n\t\t\t\tblockImages: host.settingsManager.getBlockImages(),\n\t\t\t\tenableSkillCommands: host.settingsManager.getEnableSkillCommands(),\n\t\t\t\tsteeringMode: host.session.steeringMode,\n\t\t\t\tfollowUpMode: host.session.followUpMode,\n\t\t\t\ttransport: host.settingsManager.getTransport(),\n\t\t\t\thttpIdleTimeoutMs: host.settingsManager.getHttpIdleTimeoutMs(),\n\t\t\t\tthinkingLevel: host.session.thinkingLevel,\n\t\t\t\tavailableThinkingLevels: host.session.getAvailableThinkingLevels(),\n\t\t\t\tcurrentTheme: host.settingsManager.getTheme() || \"dark\",\n\t\t\t\t// The picker offers only themes the active profile permits (no-bypass). The theme\n\t\t\t\t// registry/renderer keeps the full set, so an already-applied theme still renders\n\t\t\t\t// even if the profile would block re-selecting it.\n\t\t\t\tavailableThemes: getAvailableThemes().filter((name) =>\n\t\t\t\t\thost.settingsManager.isResourceAllowedByProfile(\"themes\", name),\n\t\t\t\t),\n\t\t\t\thideThinkingBlock: host.hideThinkingBlock,\n\t\t\t\tcollapseChangelog: host.settingsManager.getCollapseChangelog(),\n\t\t\t\tenableInstallTelemetry: host.settingsManager.getEnableInstallTelemetry(),\n\t\t\t\tdoubleEscapeAction: host.settingsManager.getDoubleEscapeAction(),\n\t\t\t\ttreeFilterMode: host.settingsManager.getTreeFilterMode(),\n\t\t\t\tshowHardwareCursor: host.settingsManager.getShowHardwareCursor(),\n\t\t\t\teditorPaddingX: host.settingsManager.getEditorPaddingX(),\n\t\t\t\tautocompleteMaxVisible: host.settingsManager.getAutocompleteMaxVisible(),\n\t\t\t\tquietStartup: host.settingsManager.getQuietStartup(),\n\t\t\t\tclearOnShrink: host.settingsManager.getClearOnShrink(),\n\t\t\t\tshowTerminalProgress: host.settingsManager.getShowTerminalProgress(),\n\t\t\t\twarnings: host.settingsManager.getWarnings(),\n\t\t\t\tselfModification: host.settingsManager.getSelfModificationSettings(),\n\t\t\t\tselfModificationScope: projectSettings.selfModification ? \"project\" : \"global\",\n\t\t\t\tautonomy: host.settingsManager.getAutonomySettings(),\n\t\t\t\tautonomyScope: projectSettings.autonomy ? \"project\" : \"global\",\n\t\t\t\tresearchLane: host.settingsManager.getResearchLaneSettings(),\n\t\t\t\tresearchLaneScope: projectSettings.researchLane ? \"project\" : \"global\",\n\t\t\t\tworkerDelegation: host.settingsManager.getWorkerDelegationSettings(),\n\t\t\t\tworkerDelegationScope: projectSettings.workerDelegation ? \"project\" : \"global\",\n\t\t\t\tcontextCuration: host.settingsManager.getContextCurationSettings(),\n\t\t\t\tcontextCurationScope: projectSettings.contextPolicy?.curation ? \"project\" : \"global\",\n\t\t\t\tlearningPolicy: host.settingsManager.getLearningPolicySettings(),\n\t\t\t\tlearningPolicyScope: projectSettings.learningPolicy ? \"project\" : \"global\",\n\t\t\t\tmodelCapability: host.settingsManager.getModelCapabilitySettings(),\n\t\t\t\tmodelCapabilityScope: projectSettings.modelCapability ? \"project\" : \"global\",\n\t\t\t\tmodelRouter: host.settingsManager.getModelRouterSettings(),\n\t\t\t\tmodelRouterScope: projectSettings.modelRouter ? \"project\" : \"global\",\n\t\t\t\tautoLearn: host.settingsManager.getAutoLearnSettings(),\n\t\t\t\tautoLearnScope: projectSettings.autoLearn ? \"project\" : \"global\",\n\t\t\t\tautoLearnModelOptions: host.getAutoLearnModelOptions(),\n\t\t\t\tresolveModelThinkingLevels: (modelPattern) => {\n\t\t\t\t\tif (!modelPattern) return host.session.getAvailableThinkingLevels();\n\t\t\t\t\tconst resolved = resolveCliModel({ cliModel: modelPattern, modelRegistry: host.session.modelRegistry });\n\t\t\t\t\treturn resolved.model ? getSupportedThinkingLevels(resolved.model) : undefined;\n\t\t\t\t},\n\t\t\t\tcontextPolicyEnforcement: host.settingsManager.getContextPromptEnforcementSettings(),\n\t\t\t\tcontextPolicyEnforcementScope: projectSettings.contextPolicy?.enforcement ? \"project\" : \"global\",\n\t\t\t\tcontextMemoryRetrieval: host.settingsManager.getMemoryRetrievalSettings(),\n\t\t\t\tcontextMemoryRetrievalScope: projectSettings.contextPolicy?.memory ? \"project\" : \"global\",\n\t\t\t\tcurrentModelPattern: host.session.model\n\t\t\t\t\t? `${host.session.model.provider}/${host.session.model.id}`\n\t\t\t\t\t: undefined,\n\t\t\t\tactiveProfileName: host.settingsManager.getActiveResourceProfileNames()[0],\n\t\t\t\tprofileOptions,\n\t\t\t\texternalResourceRoots: host.settingsManager.getExternalResourceRoots(),\n\t\t\t\ttrustedResourceRoots: host.settingsManager.getTrustedResourceRoots(),\n\t\t\t},\n\t\t\t{\n\t\t\t\tonAutoCompactChange: (enabled) => {\n\t\t\t\t\thost.session.setAutoCompactionEnabled(enabled);\n\t\t\t\t\thost.footer.setAutoCompactEnabled(enabled);\n\t\t\t\t},\n\t\t\t\tonShowImagesChange: (enabled) => {\n\t\t\t\t\thost.settingsManager.setShowImages(enabled);\n\t\t\t\t\tfor (const child of host.chatContainer.children) {\n\t\t\t\t\t\tif (child instanceof ToolExecutionComponent || child instanceof ToolGroupComponent) {\n\t\t\t\t\t\t\tchild.setShowImages(enabled);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\thost.ui.requestRender();\n\t\t\t\t},\n\t\t\t\tonImageWidthCellsChange: (width) => {\n\t\t\t\t\thost.settingsManager.setImageWidthCells(width);\n\t\t\t\t\tfor (const child of host.chatContainer.children) {\n\t\t\t\t\t\tif (child instanceof ToolExecutionComponent || child instanceof ToolGroupComponent) {\n\t\t\t\t\t\t\tchild.setImageWidthCells(width);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\thost.ui.requestRender();\n\t\t\t\t},\n\t\t\t\tonAutoResizeImagesChange: (enabled) => {\n\t\t\t\t\thost.settingsManager.setImageAutoResize(enabled);\n\t\t\t\t},\n\t\t\t\tonBlockImagesChange: (blocked) => {\n\t\t\t\t\thost.settingsManager.setBlockImages(blocked);\n\t\t\t\t},\n\t\t\t\tonEnableSkillCommandsChange: (enabled) => {\n\t\t\t\t\thost.settingsManager.setEnableSkillCommands(enabled);\n\t\t\t\t\thost.setupAutocompleteProvider();\n\t\t\t\t},\n\t\t\t\tonSteeringModeChange: (mode) => {\n\t\t\t\t\thost.session.setSteeringMode(mode);\n\t\t\t\t},\n\t\t\t\tonFollowUpModeChange: (mode) => {\n\t\t\t\t\thost.session.setFollowUpMode(mode);\n\t\t\t\t},\n\t\t\t\tonTransportChange: (transport) => {\n\t\t\t\t\thost.settingsManager.setTransport(transport);\n\t\t\t\t\thost.session.agent.transport = transport;\n\t\t\t\t},\n\t\t\t\tonHttpIdleTimeoutMsChange: (timeoutMs) => {\n\t\t\t\t\thost.settingsManager.setHttpIdleTimeoutMs(timeoutMs);\n\t\t\t\t\tconfigureHttpDispatcher(timeoutMs);\n\t\t\t\t\thost.showStatus(`HTTP idle timeout: ${formatHttpIdleTimeoutMs(timeoutMs)}`);\n\t\t\t\t},\n\t\t\t\tonThinkingLevelChange: (level) => {\n\t\t\t\t\thost.session.setThinkingLevel(level);\n\t\t\t\t\thost.footer.invalidate();\n\t\t\t\t\thost.updateEditorBorderColor();\n\t\t\t\t},\n\t\t\t\tonThemeChange: (themeName) => {\n\t\t\t\t\tconst result = setTheme(themeName, true);\n\t\t\t\t\thost.settingsManager.setTheme(themeName);\n\t\t\t\t\thost.ui.invalidate();\n\t\t\t\t\tif (!result.success) {\n\t\t\t\t\t\thost.showError(`Failed to load theme \"${themeName}\": ${result.error}\\nFell back to dark theme.`);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonThemePreview: (themeName) => {\n\t\t\t\t\tconst result = setTheme(themeName, true);\n\t\t\t\t\tif (result.success) {\n\t\t\t\t\t\thost.ui.invalidate();\n\t\t\t\t\t\thost.ui.requestRender();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonHideThinkingBlockChange: (hidden) => {\n\t\t\t\t\thost.hideThinkingBlock = hidden;\n\t\t\t\t\thost.settingsManager.setHideThinkingBlock(hidden);\n\t\t\t\t\tfor (const child of host.chatContainer.children) {\n\t\t\t\t\t\tif (child instanceof AssistantMessageComponent) {\n\t\t\t\t\t\t\tchild.setHideThinkingBlock(hidden);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tvoid host.rebuildChatFromMessages();\n\t\t\t\t},\n\t\t\t\tonCollapseChangelogChange: (collapsed) => {\n\t\t\t\t\thost.settingsManager.setCollapseChangelog(collapsed);\n\t\t\t\t},\n\t\t\t\tonEnableInstallTelemetryChange: (enabled) => {\n\t\t\t\t\thost.settingsManager.setEnableInstallTelemetry(enabled);\n\t\t\t\t},\n\t\t\t\tonQuietStartupChange: (enabled) => {\n\t\t\t\t\thost.settingsManager.setQuietStartup(enabled);\n\t\t\t\t},\n\t\t\t\tonDoubleEscapeActionChange: (action) => {\n\t\t\t\t\thost.settingsManager.setDoubleEscapeAction(action);\n\t\t\t\t},\n\t\t\t\tonTreeFilterModeChange: (mode) => {\n\t\t\t\t\thost.settingsManager.setTreeFilterMode(mode);\n\t\t\t\t},\n\t\t\t\tonShowHardwareCursorChange: (enabled) => {\n\t\t\t\t\thost.settingsManager.setShowHardwareCursor(enabled);\n\t\t\t\t\thost.ui.setShowHardwareCursor(enabled);\n\t\t\t\t},\n\t\t\t\tonEditorPaddingXChange: (padding) => {\n\t\t\t\t\thost.settingsManager.setEditorPaddingX(padding);\n\t\t\t\t\thost.defaultEditor.setPaddingX(padding);\n\t\t\t\t\tif (host.editor !== host.defaultEditor && host.editor.setPaddingX !== undefined) {\n\t\t\t\t\t\thost.editor.setPaddingX(padding);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonAutocompleteMaxVisibleChange: (maxVisible) => {\n\t\t\t\t\thost.settingsManager.setAutocompleteMaxVisible(maxVisible);\n\t\t\t\t\thost.defaultEditor.setAutocompleteMaxVisible(maxVisible);\n\t\t\t\t\tif (host.editor !== host.defaultEditor && host.editor.setAutocompleteMaxVisible !== undefined) {\n\t\t\t\t\t\thost.editor.setAutocompleteMaxVisible(maxVisible);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonClearOnShrinkChange: (enabled) => {\n\t\t\t\t\thost.settingsManager.setClearOnShrink(enabled);\n\t\t\t\t\thost.ui.setClearOnShrink(enabled);\n\t\t\t\t},\n\t\t\t\tonShowTerminalProgressChange: (enabled) => {\n\t\t\t\t\thost.settingsManager.setShowTerminalProgress(enabled);\n\t\t\t\t},\n\t\t\t\tonWarningsChange: (warnings) => {\n\t\t\t\t\thost.settingsManager.setWarnings(warnings);\n\t\t\t\t},\n\t\t\t\tonSelfModificationChange: (settings, scope) => {\n\t\t\t\t\thost.settingsManager.setSelfModificationSettings(settings, scope);\n\t\t\t\t\tconst validationMessage = host.validateSelfModificationSource(settings);\n\t\t\t\t\tif (validationMessage) {\n\t\t\t\t\t\thost.showWarning(validationMessage);\n\t\t\t\t\t}\n\t\t\t\t\thost.showStatus(\n\t\t\t\t\t\t`Self modification settings saved to ${scope}. Start a new session or /reload for system-prompt guardrails to fully refresh.`,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tonAutonomyChange: (settings, scope) => {\n\t\t\t\t\thost.applyAutonomyMode(settings.mode ?? \"off\", scope);\n\t\t\t\t\thost.showStatus(`Autonomy mode ${settings.mode ?? \"off\"} saved to ${scope}. Use /autonomy status.`);\n\t\t\t\t},\n\t\t\t\tonResearchLaneChange: (settings, scope) => {\n\t\t\t\t\thost.settingsManager.setResearchLaneSettings(settings, scope);\n\t\t\t\t\thost.showStatus(\n\t\t\t\t\t\t`Research lane settings saved to ${scope}. Use /autonomy research or /autonomy diagnostics.`,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tonWorkerDelegationChange: (settings, scope) => {\n\t\t\t\t\thost.settingsManager.setWorkerDelegationSettings(settings, scope);\n\t\t\t\t\thost.showStatus(`Worker delegation settings saved to ${scope}. The delegate tool uses them.`);\n\t\t\t\t},\n\t\t\t\tonLearningPolicyChange: (settings, scope) => {\n\t\t\t\t\thost.settingsManager.setLearningPolicySettings(settings, scope);\n\t\t\t\t\thost.showStatus(`Learning policy saved to ${scope}.`);\n\t\t\t\t},\n\t\t\t\tonModelCapabilityChange: (settings, scope) => {\n\t\t\t\t\thost.settingsManager.setModelCapabilitySettings(settings, scope);\n\t\t\t\t\thost.showStatus(`Model capability mode saved to ${scope}. Applies on the next model switch or /reload.`);\n\t\t\t\t},\n\t\t\t\tonContextCurationChange: (settings, scope) => {\n\t\t\t\t\thost.settingsManager.setContextCurationSettings(settings, scope);\n\t\t\t\t\thost.showStatus(\n\t\t\t\t\t\t`Context curation settings saved to ${scope}. Run /fitness <model> first if the model is unprobed.`,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tonModelRouterChange: (settings, scope) => {\n\t\t\t\t\thost.settingsManager.setModelRouterSettings(settings, scope);\n\t\t\t\t\tfor (const value of [settings.cheapModel, settings.expensiveModel, settings.learningModel]) {\n\t\t\t\t\t\tconst validationMessage = host.validateAutoLearnModelValue(value);\n\t\t\t\t\t\tif (validationMessage) {\n\t\t\t\t\t\t\thost.showWarning(validationMessage.replace(\"Auto Learn model\", \"Model router model\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\thost.updateAutoLearnFooter();\n\t\t\t\t\thost.showStatus(`Model Router settings saved to ${scope}. Use /session or /usage to inspect routing.`);\n\t\t\t\t},\n\t\t\t\tonAutoLearnChange: (settings, scope) => {\n\t\t\t\t\thost.settingsManager.setAutoLearnSettings(settings, scope);\n\t\t\t\t\tconst validationMessage = host.validateAutoLearnModelValue(settings.model);\n\t\t\t\t\tif (validationMessage) {\n\t\t\t\t\t\thost.showWarning(validationMessage);\n\t\t\t\t\t}\n\t\t\t\t\thost.updateAutoLearnFooter();\n\t\t\t\t\thost.showStatus(`Auto Learn settings saved to ${scope}. Use /auto-learn status or /auto-learn run.`);\n\t\t\t\t},\n\t\t\t\tonContextPolicyEnforcementChange: (settings, scope) => {\n\t\t\t\t\thost.settingsManager.setContextPromptEnforcementSettings(settings, scope);\n\t\t\t\t\thost.showStatus(`Context/prompt-policy settings saved to ${scope}.`);\n\t\t\t\t},\n\t\t\t\tonContextMemoryRetrievalChange: (settings, scope) => {\n\t\t\t\t\thost.settingsManager.setMemoryRetrievalSettings(settings, scope);\n\t\t\t\t\thost.showStatus(`Context/memory-retrieval settings saved to ${scope}.`);\n\t\t\t\t},\n\t\t\t\tonResourcesHubAction: (action) => {\n\t\t\t\t\tdone();\n\t\t\t\t\tvoid host.handleResourcesHubAction(action);\n\t\t\t\t},\n\t\t\t\tonCancel: () => {\n\t\t\t\t\tdone();\n\t\t\t\t\thost.ui.requestRender();\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t\treturn { component: selector, focus: selector.getSettingsList() };\n\t});\n}\n"]}
1
+ {"version":3,"file":"settings-selector-flow.js","sourceRoot":"","sources":["../../../src/modes/interactive/settings-selector-flow.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAG/D,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAO/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAG9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AA0BhE,MAAM,UAAU,oBAAoB,CAAC,IAA0B;IAC9D,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1B,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE,CAAC;QAClE,MAAM,cAAc,GAAG;YACtB;gBACC,KAAK,EAAE,QAAQ;gBACf,KAAK,EAAE,QAAQ;gBACf,WAAW,EAAE,oDAAoD;aACjE;YACD,GAAG,IAAI,CAAC,eAAe;iBACrB,kBAAkB,EAAE;iBACpB,YAAY,EAAE;iBACd,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAClB,KAAK,EAAE,OAAO,CAAC,IAAI;gBACnB,KAAK,EAAE,OAAO,CAAC,IAAI;gBACnB,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,MAAM;aAClD,CAAC,CAAC;SACJ,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,yBAAyB,CAC7C;YACC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,qBAAqB;YAC/C,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;YAChD,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE;YAC1D,gBAAgB,EAAE,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE;YAC3D,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE;YAClD,mBAAmB,EAAE,IAAI,CAAC,eAAe,CAAC,sBAAsB,EAAE;YAClE,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;YACvC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;YACvC,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;YAC9C,iBAAiB,EAAE,IAAI,CAAC,eAAe,CAAC,oBAAoB,EAAE;YAC9D,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa;YACzC,uBAAuB,EAAE,IAAI,CAAC,OAAO,CAAC,0BAA0B,EAAE;YAClE,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,MAAM;YACvD,kFAAkF;YAClF,kFAAkF;YAClF,mDAAmD;YACnD,eAAe,EAAE,kBAAkB,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACrD,IAAI,CAAC,eAAe,CAAC,0BAA0B,CAAC,QAAQ,EAAE,IAAI,CAAC,CAC/D;YACD,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,mBAAmB,EAAE,IAAI,CAAC,eAAe,CAAC,sBAAsB,EAAE;YAClE,wBAAwB,EAAE,IAAI,CAAC,eAAe,CAAC,2BAA2B,EAAE;YAC5E,iBAAiB,EAAE,IAAI,CAAC,eAAe,CAAC,oBAAoB,EAAE;YAC9D,sBAAsB,EAAE,IAAI,CAAC,eAAe,CAAC,yBAAyB,EAAE;YACxE,kBAAkB,EAAE,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE;YAChE,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE;YACxD,kBAAkB,EAAE,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE;YAChE,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE;YACxD,sBAAsB,EAAE,IAAI,CAAC,eAAe,CAAC,yBAAyB,EAAE;YACxE,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE;YACpD,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE;YACtD,oBAAoB,EAAE,IAAI,CAAC,eAAe,CAAC,uBAAuB,EAAE;YACpE,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;YAC5C,gBAAgB,EAAE,IAAI,CAAC,eAAe,CAAC,2BAA2B,EAAE;YACpE,qBAAqB,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YAC9E,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE;YACpD,aAAa,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YAC9D,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,uBAAuB,EAAE;YAC5D,iBAAiB,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YACtE,gBAAgB,EAAE,IAAI,CAAC,eAAe,CAAC,2BAA2B,EAAE;YACpE,qBAAqB,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YAC9E,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,0BAA0B,EAAE;YAClE,oBAAoB,EAAE,eAAe,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YACpF,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC,yBAAyB,EAAE;YAChE,mBAAmB,EAAE,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YAC1E,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,0BAA0B,EAAE;YAClE,oBAAoB,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YAC5E,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,sBAAsB,EAAE;YAC1D,gBAAgB,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YACpE,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,oBAAoB,EAAE;YACtD,cAAc,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YAChE,qBAAqB,EAAE,IAAI,CAAC,wBAAwB,EAAE;YACtD,0BAA0B,EAAE,CAAC,YAAY,EAAE,EAAE;gBAC5C,IAAI,CAAC,YAAY;oBAAE,OAAO,IAAI,CAAC,OAAO,CAAC,0BAA0B,EAAE,CAAC;gBACpE,MAAM,QAAQ,GAAG,eAAe,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;gBACxG,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,0BAA0B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAChF,CAAC;YACD,wBAAwB,EAAE,IAAI,CAAC,eAAe,CAAC,mCAAmC,EAAE;YACpF,6BAA6B,EAAE,eAAe,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YAChG,sBAAsB,EAAE,IAAI,CAAC,eAAe,CAAC,0BAA0B,EAAE;YACzE,2BAA2B,EAAE,eAAe,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YACzF,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;gBACtC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE;gBAC3D,CAAC,CAAC,SAAS;YACZ,iBAAiB,EAAE,IAAI,CAAC,eAAe,CAAC,6BAA6B,EAAE,CAAC,CAAC,CAAC;YAC1E,cAAc;YACd,qBAAqB,EAAE,IAAI,CAAC,eAAe,CAAC,wBAAwB,EAAE;YACtE,oBAAoB,EAAE,IAAI,CAAC,eAAe,CAAC,uBAAuB,EAAE;SACpE,EACD;YACC,mBAAmB,EAAE,CAAC,OAAO,EAAE,EAAE;gBAChC,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;gBAC/C,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;YAC5C,CAAC;YACD,kBAAkB,EAAE,CAAC,OAAO,EAAE,EAAE;gBAC/B,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBAC5C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;oBACjD,IAAI,KAAK,YAAY,sBAAsB,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;wBACpF,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;oBAC9B,CAAC;gBACF,CAAC;gBACD,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;YACzB,CAAC;YACD,uBAAuB,EAAE,CAAC,KAAK,EAAE,EAAE;gBAClC,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBAC/C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;oBACjD,IAAI,KAAK,YAAY,sBAAsB,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;wBACpF,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;oBACjC,CAAC;gBACF,CAAC;gBACD,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;YACzB,CAAC;YACD,wBAAwB,EAAE,CAAC,OAAO,EAAE,EAAE;gBACrC,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAClD,CAAC;YACD,mBAAmB,EAAE,CAAC,OAAO,EAAE,EAAE;gBAChC,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAC9C,CAAC;YACD,2BAA2B,EAAE,CAAC,OAAO,EAAE,EAAE;gBACxC,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;gBACrD,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAClC,CAAC;YACD,oBAAoB,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC9B,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YACpC,CAAC;YACD,oBAAoB,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC9B,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YACpC,CAAC;YACD,iBAAiB,EAAE,CAAC,SAAS,EAAE,EAAE;gBAChC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;gBAC7C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;YAC1C,CAAC;YACD,yBAAyB,EAAE,CAAC,SAAS,EAAE,EAAE;gBACxC,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;gBACrD,uBAAuB,CAAC,SAAS,CAAC,CAAC;gBACnC,IAAI,CAAC,UAAU,CAAC,sBAAsB,uBAAuB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAC7E,CAAC;YACD,qBAAqB,EAAE,CAAC,KAAK,EAAE,EAAE;gBAChC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBACrC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;gBACzB,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAChC,CAAC;YACD,aAAa,EAAE,CAAC,SAAS,EAAE,EAAE;gBAC5B,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBACzC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACzC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC;gBACrB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACrB,IAAI,CAAC,SAAS,CAAC,yBAAyB,SAAS,MAAM,MAAM,CAAC,KAAK,4BAA4B,CAAC,CAAC;gBAClG,CAAC;YACF,CAAC;YACD,cAAc,EAAE,CAAC,SAAS,EAAE,EAAE;gBAC7B,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBACzC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpB,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC;oBACrB,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;gBACzB,CAAC;YACF,CAAC;YACD,2BAA2B,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBAC5C,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACzD,MAAM,KAAK,GACV,KAAK,KAAK,kBAAkB;oBAC3B,CAAC,CAAC,gBAAgB;oBAClB,CAAC,CAAC,KAAK,KAAK,SAAS;wBACpB,CAAC,CAAC,cAAc;wBAChB,CAAC,CAAC,cAAc,CAAC;gBACpB,MAAM,IAAI,GAAG,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,uBAAuB,CAAC;gBAC/F,IAAI,CAAC,UAAU,CAAC,0BAA0B,IAAI,KAAK,KAAK,0BAA0B,CAAC,CAAC;YACrF,CAAC;YACD,yBAAyB,EAAE,CAAC,MAAM,EAAE,EAAE;gBACrC,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC;gBAChC,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;gBAClD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;oBACjD,IAAI,KAAK,YAAY,yBAAyB,EAAE,CAAC;wBAChD,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;oBACpC,CAAC;gBACF,CAAC;gBACD,KAAK,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACrC,CAAC;YACD,yBAAyB,EAAE,CAAC,SAAS,EAAE,EAAE;gBACxC,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;YACtD,CAAC;YACD,8BAA8B,EAAE,CAAC,OAAO,EAAE,EAAE;gBAC3C,IAAI,CAAC,eAAe,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;YACzD,CAAC;YACD,oBAAoB,EAAE,CAAC,OAAO,EAAE,EAAE;gBACjC,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAC/C,CAAC;YACD,0BAA0B,EAAE,CAAC,MAAM,EAAE,EAAE;gBACtC,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;YACpD,CAAC;YACD,sBAAsB,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChC,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC9C,CAAC;YACD,0BAA0B,EAAE,CAAC,OAAO,EAAE,EAAE;gBACvC,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;gBACpD,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;YACxC,CAAC;YACD,sBAAsB,EAAE,CAAC,OAAO,EAAE,EAAE;gBACnC,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;gBAChD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBACxC,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;oBACjF,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBAClC,CAAC;YACF,CAAC;YACD,8BAA8B,EAAE,CAAC,UAAU,EAAE,EAAE;gBAC9C,IAAI,CAAC,eAAe,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC;gBAC3D,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC;gBACzD,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC,yBAAyB,KAAK,SAAS,EAAE,CAAC;oBAC/F,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC;gBACnD,CAAC;YACF,CAAC;YACD,qBAAqB,EAAE,CAAC,OAAO,EAAE,EAAE;gBAClC,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBAC/C,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;YACD,4BAA4B,EAAE,CAAC,OAAO,EAAE,EAAE;gBACzC,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;YACvD,CAAC;YACD,gBAAgB,EAAE,CAAC,QAAQ,EAAE,EAAE;gBAC9B,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC5C,CAAC;YACD,wBAAwB,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBAC7C,IAAI,CAAC,eAAe,CAAC,2BAA2B,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAClE,MAAM,iBAAiB,GAAG,IAAI,CAAC,8BAA8B,CAAC,QAAQ,CAAC,CAAC;gBACxE,IAAI,iBAAiB,EAAE,CAAC;oBACvB,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;gBACrC,CAAC;gBACD,IAAI,CAAC,UAAU,CACd,uCAAuC,KAAK,iFAAiF,CAC7H,CAAC;YACH,CAAC;YACD,gBAAgB,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBACrC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,IAAI,KAAK,EAAE,KAAK,CAAC,CAAC;gBACtD,IAAI,CAAC,UAAU,CAAC,iBAAiB,QAAQ,CAAC,IAAI,IAAI,KAAK,aAAa,KAAK,yBAAyB,CAAC,CAAC;YACrG,CAAC;YACD,oBAAoB,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBACzC,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAC9D,IAAI,CAAC,UAAU,CACd,mCAAmC,KAAK,oDAAoD,CAC5F,CAAC;YACH,CAAC;YACD,wBAAwB,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBAC7C,IAAI,CAAC,eAAe,CAAC,2BAA2B,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAClE,IAAI,CAAC,UAAU,CAAC,uCAAuC,KAAK,gCAAgC,CAAC,CAAC;YAC/F,CAAC;YACD,sBAAsB,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBAC3C,IAAI,CAAC,eAAe,CAAC,yBAAyB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAChE,IAAI,CAAC,UAAU,CAAC,4BAA4B,KAAK,GAAG,CAAC,CAAC;YACvD,CAAC;YACD,uBAAuB,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBAC5C,IAAI,CAAC,eAAe,CAAC,0BAA0B,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBACjE,IAAI,CAAC,UAAU,CAAC,kCAAkC,KAAK,gDAAgD,CAAC,CAAC;YAC1G,CAAC;YACD,uBAAuB,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBAC5C,IAAI,CAAC,eAAe,CAAC,0BAA0B,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBACjE,IAAI,CAAC,UAAU,CACd,sCAAsC,KAAK,wDAAwD,CACnG,CAAC;YACH,CAAC;YACD,mBAAmB,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBACxC,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAC7D,KAAK,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;oBAC5F,MAAM,iBAAiB,GAAG,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;oBAClE,IAAI,iBAAiB,EAAE,CAAC;wBACvB,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC,CAAC;oBACvF,CAAC;gBACF,CAAC;gBACD,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC7B,IAAI,CAAC,UAAU,CAAC,kCAAkC,KAAK,8CAA8C,CAAC,CAAC;YACxG,CAAC;YACD,iBAAiB,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBACtC,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAC3D,MAAM,iBAAiB,GAAG,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC3E,IAAI,iBAAiB,EAAE,CAAC;oBACvB,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;gBACrC,CAAC;gBACD,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC7B,IAAI,CAAC,UAAU,CAAC,gCAAgC,KAAK,8CAA8C,CAAC,CAAC;YACtG,CAAC;YACD,gCAAgC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBACrD,IAAI,CAAC,eAAe,CAAC,mCAAmC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAC1E,IAAI,CAAC,UAAU,CAAC,2CAA2C,KAAK,GAAG,CAAC,CAAC;YACtE,CAAC;YACD,8BAA8B,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBACnD,IAAI,CAAC,eAAe,CAAC,0BAA0B,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBACjE,IAAI,CAAC,UAAU,CAAC,8CAA8C,KAAK,GAAG,CAAC,CAAC;YACzE,CAAC;YACD,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;gBAChC,IAAI,EAAE,CAAC;gBACP,KAAK,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;YAC5C,CAAC;YACD,QAAQ,EAAE,GAAG,EAAE;gBACd,IAAI,EAAE,CAAC;gBACP,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;YACzB,CAAC;SACD,CACD,CAAC;QACF,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,eAAe,EAAE,EAAE,CAAC;IACnE,CAAC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["/**\n * `/settings` selector flow extracted from interactive-mode.\n *\n * Builds the SettingsSelectorComponent model from the current settings/session\n * state and wires its change callbacks back through a `SettingsSelectorHost`\n * seam. Self-mod/auto-learn validation, autonomy-preset application, autocomplete\n * rebuild, and the resources-hub hand-off stay host-side (shared with other\n * flows); interactive-mode keeps a thin wrapper building the host once.\n */\n\nimport { getSupportedThinkingLevels } from \"@caupulican/pi-ai\";\nimport type { Component, Container, EditorComponent, SelectItem, TUI } from \"@caupulican/pi-tui\";\nimport type { AgentSession } from \"../../core/agent-session.ts\";\nimport { configureHttpDispatcher, formatHttpIdleTimeoutMs } from \"../../core/http-dispatcher.ts\";\nimport { resolveCliModel } from \"../../core/model-resolver.ts\";\nimport type {\n\tAutonomyMode,\n\tSelfModificationSettings,\n\tSettingsManager,\n\tSettingsScope,\n} from \"../../core/settings-manager.ts\";\nimport { AssistantMessageComponent } from \"./components/assistant-message.ts\";\nimport type { CustomEditor } from \"./components/custom-editor.ts\";\nimport type { FooterComponent } from \"./components/footer.ts\";\nimport { SettingsSelectorComponent } from \"./components/settings-selector.ts\";\nimport { ToolExecutionComponent } from \"./components/tool-execution.ts\";\nimport { ToolGroupComponent } from \"./components/tool-group.ts\";\nimport { getAvailableThemes, setTheme } from \"./theme/theme.ts\";\n\nexport interface SettingsSelectorHost {\n\treadonly session: AgentSession;\n\treadonly settingsManager: SettingsManager;\n\treadonly footer: FooterComponent;\n\treadonly chatContainer: Container;\n\treadonly ui: TUI;\n\treadonly defaultEditor: CustomEditor;\n\treadonly editor: EditorComponent;\n\thideThinkingBlock: boolean;\n\tshowSelector(create: (done: () => void) => { component: Component; focus: Component }): void;\n\tshowStatus(message: string): void;\n\tshowWarning(message: string): void;\n\tshowError(message: string): void;\n\tgetAutoLearnModelOptions(): SelectItem[];\n\tsetupAutocompleteProvider(): void;\n\tupdateEditorBorderColor(): void;\n\trebuildChatFromMessages(): Promise<void>;\n\tvalidateSelfModificationSource(settings: SelfModificationSettings): string | undefined;\n\tapplyAutonomyMode(mode: AutonomyMode, scope?: SettingsScope): void;\n\tvalidateAutoLearnModelValue(value: string | undefined): string | undefined;\n\tupdateAutoLearnFooter(): void;\n\thandleResourcesHubAction(action: string): Promise<void>;\n}\n\nexport function showSettingsSelector(host: SettingsSelectorHost): void {\n\thost.showSelector((done) => {\n\t\tconst projectSettings = host.settingsManager.getProjectSettings();\n\t\tconst profileOptions = [\n\t\t\t{\n\t\t\t\tvalue: \"(none)\",\n\t\t\t\tlabel: \"(none)\",\n\t\t\t\tdescription: \"Use configured profile selection (session default)\",\n\t\t\t},\n\t\t\t...host.settingsManager\n\t\t\t\t.getProfileRegistry()\n\t\t\t\t.listProfiles()\n\t\t\t\t.map((profile) => ({\n\t\t\t\t\tvalue: profile.name,\n\t\t\t\t\tlabel: profile.name,\n\t\t\t\t\tdescription: profile.description ?? profile.source,\n\t\t\t\t})),\n\t\t];\n\t\tconst selector = new SettingsSelectorComponent(\n\t\t\t{\n\t\t\t\tautoCompact: host.session.autoCompactionEnabled,\n\t\t\t\tshowImages: host.settingsManager.getShowImages(),\n\t\t\t\timageWidthCells: host.settingsManager.getImageWidthCells(),\n\t\t\t\tautoResizeImages: host.settingsManager.getImageAutoResize(),\n\t\t\t\tblockImages: host.settingsManager.getBlockImages(),\n\t\t\t\tenableSkillCommands: host.settingsManager.getEnableSkillCommands(),\n\t\t\t\tsteeringMode: host.session.steeringMode,\n\t\t\t\tfollowUpMode: host.session.followUpMode,\n\t\t\t\ttransport: host.settingsManager.getTransport(),\n\t\t\t\thttpIdleTimeoutMs: host.settingsManager.getHttpIdleTimeoutMs(),\n\t\t\t\tthinkingLevel: host.session.thinkingLevel,\n\t\t\t\tavailableThinkingLevels: host.session.getAvailableThinkingLevels(),\n\t\t\t\tcurrentTheme: host.settingsManager.getTheme() || \"dark\",\n\t\t\t\t// The picker offers only themes the active profile permits (no-bypass). The theme\n\t\t\t\t// registry/renderer keeps the full set, so an already-applied theme still renders\n\t\t\t\t// even if the profile would block re-selecting it.\n\t\t\t\tavailableThemes: getAvailableThemes().filter((name) =>\n\t\t\t\t\thost.settingsManager.isResourceAllowedByProfile(\"themes\", name),\n\t\t\t\t),\n\t\t\t\thideThinkingBlock: host.hideThinkingBlock,\n\t\t\t\tprojectContextFiles: host.settingsManager.getProjectContextFiles(),\n\t\t\t\tprojectContextFilesScope: host.settingsManager.getProjectContextFilesScope(),\n\t\t\t\tcollapseChangelog: host.settingsManager.getCollapseChangelog(),\n\t\t\t\tenableInstallTelemetry: host.settingsManager.getEnableInstallTelemetry(),\n\t\t\t\tdoubleEscapeAction: host.settingsManager.getDoubleEscapeAction(),\n\t\t\t\ttreeFilterMode: host.settingsManager.getTreeFilterMode(),\n\t\t\t\tshowHardwareCursor: host.settingsManager.getShowHardwareCursor(),\n\t\t\t\teditorPaddingX: host.settingsManager.getEditorPaddingX(),\n\t\t\t\tautocompleteMaxVisible: host.settingsManager.getAutocompleteMaxVisible(),\n\t\t\t\tquietStartup: host.settingsManager.getQuietStartup(),\n\t\t\t\tclearOnShrink: host.settingsManager.getClearOnShrink(),\n\t\t\t\tshowTerminalProgress: host.settingsManager.getShowTerminalProgress(),\n\t\t\t\twarnings: host.settingsManager.getWarnings(),\n\t\t\t\tselfModification: host.settingsManager.getSelfModificationSettings(),\n\t\t\t\tselfModificationScope: projectSettings.selfModification ? \"project\" : \"global\",\n\t\t\t\tautonomy: host.settingsManager.getAutonomySettings(),\n\t\t\t\tautonomyScope: projectSettings.autonomy ? \"project\" : \"global\",\n\t\t\t\tresearchLane: host.settingsManager.getResearchLaneSettings(),\n\t\t\t\tresearchLaneScope: projectSettings.researchLane ? \"project\" : \"global\",\n\t\t\t\tworkerDelegation: host.settingsManager.getWorkerDelegationSettings(),\n\t\t\t\tworkerDelegationScope: projectSettings.workerDelegation ? \"project\" : \"global\",\n\t\t\t\tcontextCuration: host.settingsManager.getContextCurationSettings(),\n\t\t\t\tcontextCurationScope: projectSettings.contextPolicy?.curation ? \"project\" : \"global\",\n\t\t\t\tlearningPolicy: host.settingsManager.getLearningPolicySettings(),\n\t\t\t\tlearningPolicyScope: projectSettings.learningPolicy ? \"project\" : \"global\",\n\t\t\t\tmodelCapability: host.settingsManager.getModelCapabilitySettings(),\n\t\t\t\tmodelCapabilityScope: projectSettings.modelCapability ? \"project\" : \"global\",\n\t\t\t\tmodelRouter: host.settingsManager.getModelRouterSettings(),\n\t\t\t\tmodelRouterScope: projectSettings.modelRouter ? \"project\" : \"global\",\n\t\t\t\tautoLearn: host.settingsManager.getAutoLearnSettings(),\n\t\t\t\tautoLearnScope: projectSettings.autoLearn ? \"project\" : \"global\",\n\t\t\t\tautoLearnModelOptions: host.getAutoLearnModelOptions(),\n\t\t\t\tresolveModelThinkingLevels: (modelPattern) => {\n\t\t\t\t\tif (!modelPattern) return host.session.getAvailableThinkingLevels();\n\t\t\t\t\tconst resolved = resolveCliModel({ cliModel: modelPattern, modelRegistry: host.session.modelRegistry });\n\t\t\t\t\treturn resolved.model ? getSupportedThinkingLevels(resolved.model) : undefined;\n\t\t\t\t},\n\t\t\t\tcontextPolicyEnforcement: host.settingsManager.getContextPromptEnforcementSettings(),\n\t\t\t\tcontextPolicyEnforcementScope: projectSettings.contextPolicy?.enforcement ? \"project\" : \"global\",\n\t\t\t\tcontextMemoryRetrieval: host.settingsManager.getMemoryRetrievalSettings(),\n\t\t\t\tcontextMemoryRetrievalScope: projectSettings.contextPolicy?.memory ? \"project\" : \"global\",\n\t\t\t\tcurrentModelPattern: host.session.model\n\t\t\t\t\t? `${host.session.model.provider}/${host.session.model.id}`\n\t\t\t\t\t: undefined,\n\t\t\t\tactiveProfileName: host.settingsManager.getActiveResourceProfileNames()[0],\n\t\t\t\tprofileOptions,\n\t\t\t\texternalResourceRoots: host.settingsManager.getExternalResourceRoots(),\n\t\t\t\ttrustedResourceRoots: host.settingsManager.getTrustedResourceRoots(),\n\t\t\t},\n\t\t\t{\n\t\t\t\tonAutoCompactChange: (enabled) => {\n\t\t\t\t\thost.session.setAutoCompactionEnabled(enabled);\n\t\t\t\t\thost.footer.setAutoCompactEnabled(enabled);\n\t\t\t\t},\n\t\t\t\tonShowImagesChange: (enabled) => {\n\t\t\t\t\thost.settingsManager.setShowImages(enabled);\n\t\t\t\t\tfor (const child of host.chatContainer.children) {\n\t\t\t\t\t\tif (child instanceof ToolExecutionComponent || child instanceof ToolGroupComponent) {\n\t\t\t\t\t\t\tchild.setShowImages(enabled);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\thost.ui.requestRender();\n\t\t\t\t},\n\t\t\t\tonImageWidthCellsChange: (width) => {\n\t\t\t\t\thost.settingsManager.setImageWidthCells(width);\n\t\t\t\t\tfor (const child of host.chatContainer.children) {\n\t\t\t\t\t\tif (child instanceof ToolExecutionComponent || child instanceof ToolGroupComponent) {\n\t\t\t\t\t\t\tchild.setImageWidthCells(width);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\thost.ui.requestRender();\n\t\t\t\t},\n\t\t\t\tonAutoResizeImagesChange: (enabled) => {\n\t\t\t\t\thost.settingsManager.setImageAutoResize(enabled);\n\t\t\t\t},\n\t\t\t\tonBlockImagesChange: (blocked) => {\n\t\t\t\t\thost.settingsManager.setBlockImages(blocked);\n\t\t\t\t},\n\t\t\t\tonEnableSkillCommandsChange: (enabled) => {\n\t\t\t\t\thost.settingsManager.setEnableSkillCommands(enabled);\n\t\t\t\t\thost.setupAutocompleteProvider();\n\t\t\t\t},\n\t\t\t\tonSteeringModeChange: (mode) => {\n\t\t\t\t\thost.session.setSteeringMode(mode);\n\t\t\t\t},\n\t\t\t\tonFollowUpModeChange: (mode) => {\n\t\t\t\t\thost.session.setFollowUpMode(mode);\n\t\t\t\t},\n\t\t\t\tonTransportChange: (transport) => {\n\t\t\t\t\thost.settingsManager.setTransport(transport);\n\t\t\t\t\thost.session.agent.transport = transport;\n\t\t\t\t},\n\t\t\t\tonHttpIdleTimeoutMsChange: (timeoutMs) => {\n\t\t\t\t\thost.settingsManager.setHttpIdleTimeoutMs(timeoutMs);\n\t\t\t\t\tconfigureHttpDispatcher(timeoutMs);\n\t\t\t\t\thost.showStatus(`HTTP idle timeout: ${formatHttpIdleTimeoutMs(timeoutMs)}`);\n\t\t\t\t},\n\t\t\t\tonThinkingLevelChange: (level) => {\n\t\t\t\t\thost.session.setThinkingLevel(level);\n\t\t\t\t\thost.footer.invalidate();\n\t\t\t\t\thost.updateEditorBorderColor();\n\t\t\t\t},\n\t\t\t\tonThemeChange: (themeName) => {\n\t\t\t\t\tconst result = setTheme(themeName, true);\n\t\t\t\t\thost.settingsManager.setTheme(themeName);\n\t\t\t\t\thost.ui.invalidate();\n\t\t\t\t\tif (!result.success) {\n\t\t\t\t\t\thost.showError(`Failed to load theme \"${themeName}\": ${result.error}\\nFell back to dark theme.`);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonThemePreview: (themeName) => {\n\t\t\t\t\tconst result = setTheme(themeName, true);\n\t\t\t\t\tif (result.success) {\n\t\t\t\t\t\thost.ui.invalidate();\n\t\t\t\t\t\thost.ui.requestRender();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonProjectContextFilesChange: (mode, scope) => {\n\t\t\t\t\thost.settingsManager.setProjectContextFiles(mode, scope);\n\t\t\t\t\tconst where =\n\t\t\t\t\t\tscope === \"directoryProfile\"\n\t\t\t\t\t\t\t? \"this directory\"\n\t\t\t\t\t\t\t: scope === \"project\"\n\t\t\t\t\t\t\t\t? \"this project\"\n\t\t\t\t\t\t\t\t: \"all projects\";\n\t\t\t\t\tconst load = mode === \"on-demand\" ? \"lists this project's AGENTS.md\" : \"global AGENTS.md only\";\n\t\t\t\t\thost.showStatus(`Project context files: ${load} (${where}). Run /reload to apply.`);\n\t\t\t\t},\n\t\t\t\tonHideThinkingBlockChange: (hidden) => {\n\t\t\t\t\thost.hideThinkingBlock = hidden;\n\t\t\t\t\thost.settingsManager.setHideThinkingBlock(hidden);\n\t\t\t\t\tfor (const child of host.chatContainer.children) {\n\t\t\t\t\t\tif (child instanceof AssistantMessageComponent) {\n\t\t\t\t\t\t\tchild.setHideThinkingBlock(hidden);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tvoid host.rebuildChatFromMessages();\n\t\t\t\t},\n\t\t\t\tonCollapseChangelogChange: (collapsed) => {\n\t\t\t\t\thost.settingsManager.setCollapseChangelog(collapsed);\n\t\t\t\t},\n\t\t\t\tonEnableInstallTelemetryChange: (enabled) => {\n\t\t\t\t\thost.settingsManager.setEnableInstallTelemetry(enabled);\n\t\t\t\t},\n\t\t\t\tonQuietStartupChange: (enabled) => {\n\t\t\t\t\thost.settingsManager.setQuietStartup(enabled);\n\t\t\t\t},\n\t\t\t\tonDoubleEscapeActionChange: (action) => {\n\t\t\t\t\thost.settingsManager.setDoubleEscapeAction(action);\n\t\t\t\t},\n\t\t\t\tonTreeFilterModeChange: (mode) => {\n\t\t\t\t\thost.settingsManager.setTreeFilterMode(mode);\n\t\t\t\t},\n\t\t\t\tonShowHardwareCursorChange: (enabled) => {\n\t\t\t\t\thost.settingsManager.setShowHardwareCursor(enabled);\n\t\t\t\t\thost.ui.setShowHardwareCursor(enabled);\n\t\t\t\t},\n\t\t\t\tonEditorPaddingXChange: (padding) => {\n\t\t\t\t\thost.settingsManager.setEditorPaddingX(padding);\n\t\t\t\t\thost.defaultEditor.setPaddingX(padding);\n\t\t\t\t\tif (host.editor !== host.defaultEditor && host.editor.setPaddingX !== undefined) {\n\t\t\t\t\t\thost.editor.setPaddingX(padding);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonAutocompleteMaxVisibleChange: (maxVisible) => {\n\t\t\t\t\thost.settingsManager.setAutocompleteMaxVisible(maxVisible);\n\t\t\t\t\thost.defaultEditor.setAutocompleteMaxVisible(maxVisible);\n\t\t\t\t\tif (host.editor !== host.defaultEditor && host.editor.setAutocompleteMaxVisible !== undefined) {\n\t\t\t\t\t\thost.editor.setAutocompleteMaxVisible(maxVisible);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonClearOnShrinkChange: (enabled) => {\n\t\t\t\t\thost.settingsManager.setClearOnShrink(enabled);\n\t\t\t\t\thost.ui.setClearOnShrink(enabled);\n\t\t\t\t},\n\t\t\t\tonShowTerminalProgressChange: (enabled) => {\n\t\t\t\t\thost.settingsManager.setShowTerminalProgress(enabled);\n\t\t\t\t},\n\t\t\t\tonWarningsChange: (warnings) => {\n\t\t\t\t\thost.settingsManager.setWarnings(warnings);\n\t\t\t\t},\n\t\t\t\tonSelfModificationChange: (settings, scope) => {\n\t\t\t\t\thost.settingsManager.setSelfModificationSettings(settings, scope);\n\t\t\t\t\tconst validationMessage = host.validateSelfModificationSource(settings);\n\t\t\t\t\tif (validationMessage) {\n\t\t\t\t\t\thost.showWarning(validationMessage);\n\t\t\t\t\t}\n\t\t\t\t\thost.showStatus(\n\t\t\t\t\t\t`Self modification settings saved to ${scope}. Start a new session or /reload for system-prompt guardrails to fully refresh.`,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tonAutonomyChange: (settings, scope) => {\n\t\t\t\t\thost.applyAutonomyMode(settings.mode ?? \"off\", scope);\n\t\t\t\t\thost.showStatus(`Autonomy mode ${settings.mode ?? \"off\"} saved to ${scope}. Use /autonomy status.`);\n\t\t\t\t},\n\t\t\t\tonResearchLaneChange: (settings, scope) => {\n\t\t\t\t\thost.settingsManager.setResearchLaneSettings(settings, scope);\n\t\t\t\t\thost.showStatus(\n\t\t\t\t\t\t`Research lane settings saved to ${scope}. Use /autonomy research or /autonomy diagnostics.`,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tonWorkerDelegationChange: (settings, scope) => {\n\t\t\t\t\thost.settingsManager.setWorkerDelegationSettings(settings, scope);\n\t\t\t\t\thost.showStatus(`Worker delegation settings saved to ${scope}. The delegate tool uses them.`);\n\t\t\t\t},\n\t\t\t\tonLearningPolicyChange: (settings, scope) => {\n\t\t\t\t\thost.settingsManager.setLearningPolicySettings(settings, scope);\n\t\t\t\t\thost.showStatus(`Learning policy saved to ${scope}.`);\n\t\t\t\t},\n\t\t\t\tonModelCapabilityChange: (settings, scope) => {\n\t\t\t\t\thost.settingsManager.setModelCapabilitySettings(settings, scope);\n\t\t\t\t\thost.showStatus(`Model capability mode saved to ${scope}. Applies on the next model switch or /reload.`);\n\t\t\t\t},\n\t\t\t\tonContextCurationChange: (settings, scope) => {\n\t\t\t\t\thost.settingsManager.setContextCurationSettings(settings, scope);\n\t\t\t\t\thost.showStatus(\n\t\t\t\t\t\t`Context curation settings saved to ${scope}. Run /fitness <model> first if the model is unprobed.`,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tonModelRouterChange: (settings, scope) => {\n\t\t\t\t\thost.settingsManager.setModelRouterSettings(settings, scope);\n\t\t\t\t\tfor (const value of [settings.cheapModel, settings.expensiveModel, settings.learningModel]) {\n\t\t\t\t\t\tconst validationMessage = host.validateAutoLearnModelValue(value);\n\t\t\t\t\t\tif (validationMessage) {\n\t\t\t\t\t\t\thost.showWarning(validationMessage.replace(\"Auto Learn model\", \"Model router model\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\thost.updateAutoLearnFooter();\n\t\t\t\t\thost.showStatus(`Model Router settings saved to ${scope}. Use /session or /usage to inspect routing.`);\n\t\t\t\t},\n\t\t\t\tonAutoLearnChange: (settings, scope) => {\n\t\t\t\t\thost.settingsManager.setAutoLearnSettings(settings, scope);\n\t\t\t\t\tconst validationMessage = host.validateAutoLearnModelValue(settings.model);\n\t\t\t\t\tif (validationMessage) {\n\t\t\t\t\t\thost.showWarning(validationMessage);\n\t\t\t\t\t}\n\t\t\t\t\thost.updateAutoLearnFooter();\n\t\t\t\t\thost.showStatus(`Auto Learn settings saved to ${scope}. Use /auto-learn status or /auto-learn run.`);\n\t\t\t\t},\n\t\t\t\tonContextPolicyEnforcementChange: (settings, scope) => {\n\t\t\t\t\thost.settingsManager.setContextPromptEnforcementSettings(settings, scope);\n\t\t\t\t\thost.showStatus(`Context/prompt-policy settings saved to ${scope}.`);\n\t\t\t\t},\n\t\t\t\tonContextMemoryRetrievalChange: (settings, scope) => {\n\t\t\t\t\thost.settingsManager.setMemoryRetrievalSettings(settings, scope);\n\t\t\t\t\thost.showStatus(`Context/memory-retrieval settings saved to ${scope}.`);\n\t\t\t\t},\n\t\t\t\tonResourcesHubAction: (action) => {\n\t\t\t\t\tdone();\n\t\t\t\t\tvoid host.handleResourcesHubAction(action);\n\t\t\t\t},\n\t\t\t\tonCancel: () => {\n\t\t\t\t\tdone();\n\t\t\t\t\thost.ui.requestRender();\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t\treturn { component: selector, focus: selector.getSettingsList() };\n\t});\n}\n"]}
@@ -530,7 +530,7 @@ pi.on("before_agent_start", async (event, ctx) => {
530
530
  // .promptGuidelines - custom guideline bullets
531
531
  // .appendSystemPrompt - text from --append-system-prompt flags
532
532
  // .cwd - working directory
533
- // .contextFiles - eagerly loaded AGENTS.md/CLAUDE.md/GEMINI.md context files
533
+ // .contextFiles - global AGENTS.md/CLAUDE.md/GEMINI.md contents plus on-demand project paths
534
534
  // .skills - discovered frontmatter metadata, host-side; not rendered into the startup prompt
535
535
 
536
536
  return {
@@ -2073,8 +2073,9 @@ The built-in limit is **50KB** (~10k tokens) and **2000 lines**, whichever is hi
2073
2073
 
2074
2074
  ```typescript
2075
2075
  import {
2076
- truncateHead, // Keep first N lines/bytes (good for file reads, search results)
2077
- truncateTail, // Keep last N lines/bytes (good for logs, command output)
2076
+ truncateHead, // Keep first N lines/bytes (good for file reads)
2077
+ truncateTail, // Keep last N lines/bytes (good for live log tails)
2078
+ truncateMiddle, // Keep a head and a tail (good for packed search/command output)
2078
2079
  truncateLine, // Truncate a single line to maxBytes with ellipsis
2079
2080
  formatSize, // Human-readable size (e.g., "50KB", "1.5MB")
2080
2081
  DEFAULT_MAX_BYTES, // 50KB
@@ -2114,8 +2115,9 @@ async execute(toolCallId, params, signal, onUpdate, ctx) {
2114
2115
  ```
2115
2116
 
2116
2117
  **Key points:**
2117
- - Use `truncateHead` for content where the beginning matters (search results, file reads)
2118
- - Use `truncateTail` for content where the end matters (logs, command output)
2118
+ - Use `truncateHead` for content where only the beginning matters (file reads)
2119
+ - Use `truncateTail` for live log tails
2120
+ - Use `truncateMiddle` when first hits and terminal errors both matter (search results, finished command output)
2119
2121
  - Always inform the LLM when output is truncated and where to find the full version
2120
2122
  - Document the truncation limits in your tool's description
2121
2123
 
@@ -2672,6 +2674,7 @@ const highlighted = highlightCode(code, lang, theme);
2672
2674
  - Extension errors are logged, agent continues
2673
2675
  - `tool_call` errors block the tool (fail-safe)
2674
2676
  - Tool `execute` errors must be signaled by throwing; the thrown error is caught, reported to the LLM with `isError: true`, and execution continues
2677
+ - After a successful extension tool result, the harness retains identity fields that also exist on that extension's tool schema (`*Id`, `card`, `project`, `board`, including nested `board.id` → `boardId`). The next call from the same extension that omits those fields is filled before validation. Unresolved statuses (`needs_*`, `ambiguous*`) and builtin tools are not retained. An extension `prepareArguments` still runs first and can override this.
2675
2678
 
2676
2679
  ## Mode Behavior
2677
2680
 
@@ -128,10 +128,9 @@ process-tree termination contract. The platform shell is real host process autho
128
128
  isolation or a path-scoped substitute for `write`/`edit`.
129
129
 
130
130
  Birth context is selected once, before a new logical agent is admitted, with `forkTurns: "none"`,
131
- `"all"`, or a positive turn count such as `"3"`. Omitted top-level starts mean `all` only when the
132
- foreground and worker use the exact same provider and model. Omitted nested starts mean `none`, so a
133
- self-contained child task cannot inherit and mistake parent-level orchestration intent for child
134
- ownership; explicit nested inheritance remains available inside the exact provider/model boundary.
131
+ `"all"`, or a positive turn count such as `"3"`. Omitted starts mean `none`, so a self-contained
132
+ child task cannot inherit and mistake parent-level orchestration intent for child ownership.
133
+ Explicit inheritance remains available inside the exact provider/model boundary.
135
134
  Crossing either provider or model defaults to `none`, and an explicit non-`none` cross-boundary
136
135
  request is rejected. The content-addressed snapshot contains bounded whole
137
136
  user turns and complete text-only assistant answers. It excludes system/developer/custom messages,
@@ -122,13 +122,14 @@ These actions apply while the built-in `ask_question` interaction has focus. The
122
122
  | `app.model.cycleForward` | `ctrl+p` | Cycle to next model |
123
123
  | `app.model.cycleBackward` | `shift+ctrl+p` | Cycle to previous model |
124
124
  | `app.thinking.cycle` | `shift+tab` | Cycle thinking level |
125
- | `app.thinking.toggle` | `ctrl+t` | Collapse or expand thinking blocks |
125
+ | `app.thinking.toggle` | `ctrl+t` | Show or hide thinking blocks (hidden by default) |
126
126
 
127
127
  ### Display and Message Queue
128
128
 
129
129
  | Keybinding id | Default | Description |
130
130
  |--------|---------|-------------|
131
- | `app.tools.expand` | `ctrl+o` | Collapse or expand tool output |
131
+ | `app.tools.expand` | `ctrl+o` | Expand or collapse tool output (file groups stay as a count + short list until then) |
132
+ | `app.history.load` | `ctrl+shift+h` | Load deferred session history into the chat |
132
133
  | `app.message.followUp` | `alt+enter` | Queue follow-up message |
133
134
  | `app.message.dequeue` | `alt+up` | Restore queued messages to editor |
134
135
 
@@ -85,7 +85,7 @@ Additional built-in read-only tools (`grep`, `find`, `ls`) are available through
85
85
 
86
86
  ## Give pi project instructions
87
87
 
88
- Pi discovers and injects context file contents at startup. Add an `AGENTS.md` file to tell it how to work in a project:
88
+ Global instructions live in `~/.pi/agent/AGENTS.md` and are always injected. Add a repo `AGENTS.md` for project conventions; Pi lists that path and the agent reads it on demand:
89
89
 
90
90
  ```markdown
91
91
  # Project Instructions
@@ -97,10 +97,10 @@ Pi discovers and injects context file contents at startup. Add an `AGENTS.md` fi
97
97
 
98
98
  Pi discovers:
99
99
 
100
- - `AGENTS.md`, `CLAUDE.md`, or `GEMINI.md` in `~/.pi/agent/` for global instructions
101
- - `AGENTS.md`, `CLAUDE.md`, or `GEMINI.md` from parent directories and the current directory
100
+ - `AGENTS.md`, `CLAUDE.md`, or `GEMINI.md` in `~/.pi/agent/` for global instructions (always injected)
101
+ - `AGENTS.md`, `CLAUDE.md`, or `GEMINI.md` from parent directories and the current directory (paths only; read on demand)
102
102
 
103
- Restart pi, or run `/reload`, after changing context file contents or locations so the next prompt rebuild includes the latest instructions.
103
+ Repo `AGENTS.md` is off until you opt in: `/settings` → **Project AGENTS.md**. Set Load to **global-only** to keep only `~/.pi/agent`. Restart pi, or run `/reload`, after changing the setting or global context file contents.
104
104
 
105
105
  ## Common things to try
106
106
 
package/docs/sdk.md CHANGED
@@ -348,7 +348,7 @@ const { session } = await createAgentSession({
348
348
  - `.pi/skills/`
349
349
  - `.agents/skills/` in `cwd` and ancestor directories (up to git repo root, or filesystem root when not in a repo)
350
350
  - Project prompts (`.pi/prompts/`)
351
- - Context files (`AGENTS.md`, `CLAUDE.md`, or `GEMINI.md` walking up from cwd)
351
+ - Context files (`AGENTS.md`, `CLAUDE.md`, or `GEMINI.md` walking up from cwd after opt-in; path-only unless you override)
352
352
  - Session directory naming
353
353
 
354
354
  `agentDir` is used by `DefaultResourceLoader` for:
@@ -626,6 +626,8 @@ const { session } = await createAgentSession({ resourceLoader: loader });
626
626
 
627
627
  ### Context Files
628
628
 
629
+ Global `~/.pi/agent` files are always loaded. Repository `AGENTS.md`/`CLAUDE.md`/`GEMINI.md` stay off until `projectContextFiles` is `"on-demand"` (per directory overlay, project `.pi/settings.json`, or global settings).
630
+
629
631
  ```typescript
630
632
  import { createAgentSession, DefaultResourceLoader } from "@caupulican/pi-adaptative";
631
633
 
package/docs/settings.md CHANGED
@@ -20,7 +20,7 @@ Edit directly or use `/settings` for common options.
20
20
  | `defaultProvider` | string | - | Default provider (e.g., `"anthropic"`, `"openai"`) |
21
21
  | `defaultModel` | string | - | Default model ID |
22
22
  | `defaultThinkingLevel` | string | model default | `"off"`, `"minimal"`, `"low"`, `"medium"`, `"high"`, `"xhigh"`, `"max"`, or `"ultra"` |
23
- | `hideThinkingBlock` | boolean | `false` | Hide thinking blocks in output |
23
+ | `hideThinkingBlock` | boolean | `true` | Hide thinking blocks in output. Press the thinking toggle (default Ctrl+T) to show them. |
24
24
  | `thinkingBudgets` | object | - | Custom token budgets per thinking level |
25
25
 
26
26
  #### thinkingBudgets
@@ -50,6 +50,20 @@ Edit directly or use `/settings` for common options.
50
50
  | `autocompleteMaxVisible` | number | `5` | Max visible items in autocomplete dropdown (3-20) |
51
51
  | `showHardwareCursor` | boolean | `false` | Show the terminal cursor while TUI positions it for IME support |
52
52
 
53
+ ### Context Files
54
+
55
+ | Setting | Type | Default | Description |
56
+ |---------|------|---------|-------------|
57
+ | `projectContextFiles` | string | `"off"` | Opt-in for repository `AGENTS.md`/`CLAUDE.md`/`GEMINI.md`. `"off"` (default) loads only `~/.pi/agent` files. `"on-demand"` lists this project's files for the agent to read. Save per directory, per project, or globally. |
58
+
59
+ ```json
60
+ {
61
+ "projectContextFiles": "on-demand"
62
+ }
63
+ ```
64
+
65
+ Enable from `/settings` → **Project AGENTS.md**. Choose save scope (this directory, this project, or all projects) and Load (`global-only` or `on-demand`). `--no-context-files` (`-nc`) also skips project files for that session. Neither disables the global file. Restart or `/reload` after changing the setting.
66
+
53
67
  ### Telemetry and update checks
54
68
 
55
69
  `enableInstallTelemetry` only controls the anonymous install/update ping to `https://pi.dev/api/report-install`. Opting out of telemetry does not disable update checks; Pi can still fetch `https://registry.npmjs.org/@caupulican%2fpi-adaptative/latest` to look for the latest Pi Adaptative version.
@@ -184,7 +198,7 @@ A `roles`-only configuration (no `default` in any scope) leaves every role not l
184
198
  }
185
199
  ```
186
200
 
187
- For a new logical agent, `forkTurns` chooses immutable sanitized birth context: `"none"`, `"all"`, or a positive user-turn count encoded as a string, such as `"3"`. When omitted, an exact same-provider/model top-level worker defaults to `"all"`, while a nested worker defaults to `"none"` so the parent's global orchestration request cannot replace the child's self-contained task. A worker that changes provider or model also defaults to `"none"`, and explicitly requesting inherited turns across that boundary is rejected. Explicit nested `"all"` or count inheritance remains available inside the exact provider/model boundary. The bounded snapshot keeps whole text-only user/complete-assistant turns and a valid compaction checkpoint when needed. It excludes system/developer/custom context, reasoning/commentary, tool protocol and results, mailbox controls, attachments, and incomplete assistant output. A reused `agentId` continues its existing transcript and cannot replace its birth context.
201
+ For a new logical agent, `forkTurns` chooses immutable sanitized birth context: `"none"`, `"all"`, or a positive user-turn count encoded as a string, such as `"3"`. When omitted, the worker receives no parent transcript, so a self-contained task cannot inherit and mistake parent-level orchestration intent for child ownership. A worker that changes provider or model also defaults to `"none"`, and explicitly requesting inherited turns across that boundary is rejected. Explicit `"all"` or count inheritance remains available inside the exact provider/model boundary. The bounded snapshot keeps whole text-only user/complete-assistant turns and a valid compaction checkpoint when needed. It excludes system/developer/custom context, reasoning/commentary, tool protocol and results, mailbox controls, attachments, and incomplete assistant output. A reused `agentId` continues its existing transcript and cannot replace its birth context.
188
202
 
189
203
  ```json
190
204
  {
@@ -31,6 +31,7 @@ The native tool supports:
31
31
  - `list`: show open work; set `showCompleted` to include terminal steps.
32
32
  - `compact`: archive completed and cancelled counts while retaining open work.
33
33
  - `clear`: remove all tracked and archived steps.
34
+ - `advance`: complete the current step and start the next pending step.
34
35
 
35
36
  An update selector can be `current`/`active`, an exact step ID, a unique ID prefix, or unique step content. IDs are shown in tool and command output for unambiguous updates.
36
37
 
package/docs/usage.md CHANGED
@@ -64,7 +64,7 @@ Type `/` in the editor to open command completion. Extensions can register custo
64
64
  | `/login`, `/logout` | Manage OAuth or API-key credentials |
65
65
  | `/model` | Switch models |
66
66
  | `/scoped-models` | Enable/disable models for Ctrl+P cycling |
67
- | `/settings` | Thinking level, theme, message delivery, transport |
67
+ | `/settings` | Thinking level, theme, Project AGENTS.md, message delivery, transport |
68
68
  | `/secrets` | Connect Bitwarden; add, bind, activate, or remove project credential profiles |
69
69
  | `/resume` | Pick from previous sessions |
70
70
  | `/new` | Start a new session |
@@ -128,13 +128,12 @@ See [Sessions](sessions.md) and [Compaction](compaction.md) for details.
128
128
 
129
129
  ## Context Files
130
130
 
131
- Pi discovers `AGENTS.md`, `CLAUDE.md`, or `GEMINI.md` context files at startup from:
131
+ Pi discovers `AGENTS.md`, `CLAUDE.md`, or `GEMINI.md` context files from:
132
132
 
133
- - `AGENTS.md`, `CLAUDE.md`, or `GEMINI.md` in `~/.pi/agent/` for global instructions
134
- - parent directories, walking up from the current working directory
135
- - the current directory
133
+ - `AGENTS.md`, `CLAUDE.md`, or `GEMINI.md` in `~/.pi/agent/` for global instructions (always injected)
134
+ - parent directories and the current directory, only after that directory/project opts in
136
135
 
137
- Use context files for project conventions, commands, safety rules, and preferences. Their contents are injected into the startup system prompt so every session begins with the active project context. Pi scans these files for direct prompt-injection/exfiltration phrases before injection and replaces suspicious content with a blocked notice. Disable discovery with `--no-context-files` or `-nc`.
136
+ Global files are scanned for prompt-injection/exfiltration phrases and injected into the system prompt. Repository files are off until you opt in (`/settings` Project AGENTS.md). Opt-in lists their paths so the agent can read them; they are not injected at startup. Set Load to **global-only**, or pass `--no-context-files` (`-nc`), to keep only the global file.
138
137
 
139
138
  ### System Prompt Files
140
139
 
@@ -239,7 +238,7 @@ Built-in tools include `read`, `edit`, `write`, `grep`, `find`, `ls`, `ask_quest
239
238
  | `--no-prompt-templates` | Disable prompt template discovery |
240
239
  | `--theme <path>` | Load a theme; repeatable |
241
240
  | `--no-themes` | Disable theme discovery |
242
- | `--no-context-files`, `-nc` | Disable `AGENTS.md`, `CLAUDE.md`, and `GEMINI.md` discovery |
241
+ | `--no-context-files`, `-nc` | Skip project `AGENTS.md`/`CLAUDE.md`/`GEMINI.md`; global `~/.pi/agent` files still load |
243
242
 
244
243
  Combine `--no-*` with explicit flags to load exactly what you need, ignoring settings. Example:
245
244
 
@@ -15,7 +15,7 @@ Use `delegate { action: "profile_inspect" }` when the reusable bases or model co
15
15
 
16
16
  Worker agents do not receive the root-only profile/status actions. They receive `delegate` only when their admitted tool set and capability ceiling both retain delegation; a caller can create a non-delegating leaf by narrowing either field. Delegating workers may recursively create descendants within the fixed depth, direct-child, session-agent, and queue bounds. They can discover safe session-peer metadata, exchange non-waking threaded messages and bounded broadcasts, and use event-driven `wait`/`wait_many`, but bounded transcript reads and waking controls remain limited to the caller's own control subtree. Transcript cursors address raw session entries, so a continuation page may be empty after non-message entries; an individually oversized message is omitted with a count instead of being truncated. A descendant may vary model or role through another preset, but it cannot acquire new resources: pointers must fully match the ancestor's admitted pointer metadata, soul text must match exactly, and verifier resources and authority stay within the ancestral verifier or worker boundary.
17
17
 
18
- New agents may receive immutable sanitized birth context with `forkTurns: "none"`, `"all"`, or a positive user-turn count such as `"3"`. Omitted top-level starts inherit all bounded complete turns only for the exact same provider and model. Omitted nested starts receive no parent transcript, keeping their self-contained task separate from the parent's global orchestration instructions; explicit nested inheritance remains available inside the exact provider/model boundary. Crossing either provider or model defaults to no inherited turns, and an explicit non-`none` cross-boundary fork is rejected. Tool calls/results, reasoning/commentary, system/developer/custom messages, mailbox controls, non-text content, and incomplete assistant output never enter the snapshot. Dispatching another task with an existing `agentId` reuses that agent's durable transcript and cannot replace its birth context.
18
+ New agents may receive immutable sanitized birth context with `forkTurns: "none"`, `"all"`, or a positive user-turn count such as `"3"`. Omitted starts receive no parent transcript, so a self-contained task cannot inherit and mistake parent-level orchestration intent for child ownership. Explicit inheritance remains available inside the exact provider/model boundary. Crossing either provider or model defaults to no inherited turns, and an explicit non-`none` cross-boundary fork is rejected. Tool calls/results, reasoning/commentary, system/developer/custom messages, mailbox controls, non-text content, and incomplete assistant output never enter the snapshot. Dispatching another task with an existing `agentId` reuses that agent's durable transcript and cannot replace its birth context.
19
19
 
20
20
  `delegate tasks` is the bounded view of the same durable task/DAG runtime used for dispatch and recovery. A new task may name existing same-objective task IDs with `dependsOn`; it remains pending until those dependencies complete, while invalid or cyclic edges fail closed. Evidence-classified transient failures retain their attempt/retry count and exact `notBefore` deadline across restart. Agent, task, and attempt projections are independently capped at 256 entries.
21
21
 
@@ -164,7 +164,7 @@ environment value a lane-bound process can set to shed the worker ceiling below.
164
164
 
165
165
  ### Forbidden-tool ceiling
166
166
 
167
- A worker session can never activate: `goal`, `delegate`, `improvement_loop`,
167
+ A worker session can never activate: `goal`, `pipeline`, `delegate`, `improvement_loop`,
168
168
  `extensionify`, `skillify`, `run_toolkit_script`, `model_fitness`, `tmux_agent_manager`,
169
169
  `context_scout`, `python`. This is enforced as the FIRST line of the tool registry's allow
170
170
  predicate (`RuntimeBuilder.refreshToolRegistry`'s `isAllowedTool`) -- it wins over an allow-list,
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pi-extension-custom-provider",
3
- "version": "0.90.11",
3
+ "version": "0.91.2",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pi-extension-custom-provider",
9
- "version": "0.90.11",
9
+ "version": "0.91.2",
10
10
  "dependencies": {
11
11
  "@anthropic-ai/sdk": "^0.52.0"
12
12
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-custom-provider-anthropic",
3
3
  "private": true,
4
- "version": "0.90.11",
4
+ "version": "0.91.2",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-custom-provider-gitlab-duo",
3
3
  "private": true,
4
- "version": "0.90.11",
4
+ "version": "0.91.2",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -121,7 +121,7 @@ export default function (pi: ExtensionAPI) {
121
121
  name: "bash",
122
122
  label: "bash",
123
123
  description:
124
- "Execute a bash command in the current working directory. Returns stdout and stderr. Output is truncated to last 2000 lines or 50KB (whichever is hit first).",
124
+ "Execute a bash command in the current working directory. Returns stdout and stderr. Output is truncated to a head+tail preview within 2000 lines or 50KB (whichever is hit first).",
125
125
  parameters: getBuiltInTools(process.cwd()).bash.parameters,
126
126
 
127
127
  async execute(toolCallId, params, signal, onUpdate, ctx) {
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pi-extension-sandbox",
3
- "version": "0.90.11",
3
+ "version": "0.91.2",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pi-extension-sandbox",
9
- "version": "0.90.11",
9
+ "version": "0.91.2",
10
10
  "dependencies": {
11
11
  "@anthropic-ai/sandbox-runtime": "^0.0.26"
12
12
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-sandbox",
3
3
  "private": true,
4
- "version": "0.90.11",
4
+ "version": "0.91.2",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pi-extension-with-deps",
3
- "version": "0.90.11",
3
+ "version": "0.91.2",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pi-extension-with-deps",
9
- "version": "0.90.11",
9
+ "version": "0.91.2",
10
10
  "dependencies": {
11
11
  "ms": "^2.1.3"
12
12
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-with-deps",
3
3
  "private": true,
4
- "version": "0.90.11",
4
+ "version": "0.91.2",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",