@esso0428/pi-subagents 0.17.16 → 0.17.17

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 (359) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/ROADMAP.md +87 -0
  3. package/docs/post-0.17.6-agents-roster-viewer-spec.md +42 -0
  4. package/docs/post-0.17.6-durable-history-spec.md +41 -0
  5. package/docs/post-0.17.6-feature-specs.md +50 -0
  6. package/docs/post-0.17.6-nested-agents-spec.md +38 -0
  7. package/docs/post-0.17.6-recovery-shutdown-spec.md +46 -0
  8. package/docs/post-0.17.6-ui-latency-baseline-spec.md +46 -0
  9. package/docs/post-0.17.6-workflow-rpc-lifecycle-spec.md +54 -0
  10. package/package.json +1 -1
  11. package/src/agent-history.ts +2 -54
  12. package/src/agent-manager.ts +406 -1288
  13. package/src/agent-runner.ts +27 -251
  14. package/src/agent-types.ts +32 -188
  15. package/src/cross-extension-rpc.ts +20 -96
  16. package/src/custom-agents.ts +13 -170
  17. package/src/index.ts +480 -1920
  18. package/src/invocation-config.ts +3 -118
  19. package/src/model-resolver.ts +0 -18
  20. package/src/output-file.ts +6 -61
  21. package/src/prompts.ts +2 -45
  22. package/src/schedule.ts +14 -35
  23. package/src/settings.ts +2 -301
  24. package/src/status-note.ts +1 -66
  25. package/src/types.ts +10 -177
  26. package/src/ui/agent-widget.ts +57 -278
  27. package/src/ui/conversation-blocks.ts +0 -6
  28. package/src/ui/conversation-timeline.ts +25 -139
  29. package/src/ui/conversation-viewer.ts +48 -212
  30. package/src/ui/schedule-menu.ts +8 -9
  31. package/src/usage.ts +2 -109
  32. package/src/worktree.ts +55 -69
  33. package/dist/abortable.d.ts +0 -13
  34. package/dist/abortable.d.ts.map +0 -1
  35. package/dist/abortable.js +0 -43
  36. package/dist/abortable.js.map +0 -1
  37. package/dist/agent-color.d.ts +0 -36
  38. package/dist/agent-color.d.ts.map +0 -1
  39. package/dist/agent-color.js +0 -124
  40. package/dist/agent-color.js.map +0 -1
  41. package/dist/agent-file-toggle.d.ts +0 -126
  42. package/dist/agent-file-toggle.d.ts.map +0 -1
  43. package/dist/agent-file-toggle.js +0 -259
  44. package/dist/agent-file-toggle.js.map +0 -1
  45. package/dist/agent-history-list.d.ts +0 -19
  46. package/dist/agent-history-list.d.ts.map +0 -1
  47. package/dist/agent-history-list.js +0 -69
  48. package/dist/agent-history-list.js.map +0 -1
  49. package/dist/agent-history.d.ts +0 -35
  50. package/dist/agent-history.d.ts.map +0 -1
  51. package/dist/agent-history.js +0 -188
  52. package/dist/agent-history.js.map +0 -1
  53. package/dist/agent-manager.d.ts +0 -503
  54. package/dist/agent-manager.d.ts.map +0 -1
  55. package/dist/agent-manager.js +0 -1572
  56. package/dist/agent-manager.js.map +0 -1
  57. package/dist/agent-recovery.d.ts +0 -37
  58. package/dist/agent-recovery.d.ts.map +0 -1
  59. package/dist/agent-recovery.js +0 -171
  60. package/dist/agent-recovery.js.map +0 -1
  61. package/dist/agent-runner.d.ts +0 -303
  62. package/dist/agent-runner.d.ts.map +0 -1
  63. package/dist/agent-runner.js +0 -1003
  64. package/dist/agent-runner.js.map +0 -1
  65. package/dist/agent-types.d.ts +0 -120
  66. package/dist/agent-types.d.ts.map +0 -1
  67. package/dist/agent-types.js +0 -301
  68. package/dist/agent-types.js.map +0 -1
  69. package/dist/child-context.d.ts +0 -3
  70. package/dist/child-context.d.ts.map +0 -1
  71. package/dist/child-context.js +0 -13
  72. package/dist/child-context.js.map +0 -1
  73. package/dist/context.d.ts +0 -13
  74. package/dist/context.d.ts.map +0 -1
  75. package/dist/context.js +0 -57
  76. package/dist/context.js.map +0 -1
  77. package/dist/cross-extension-rpc.d.ts +0 -67
  78. package/dist/cross-extension-rpc.d.ts.map +0 -1
  79. package/dist/cross-extension-rpc.js +0 -139
  80. package/dist/cross-extension-rpc.js.map +0 -1
  81. package/dist/custom-agents.d.ts +0 -55
  82. package/dist/custom-agents.d.ts.map +0 -1
  83. package/dist/custom-agents.js +0 -309
  84. package/dist/custom-agents.js.map +0 -1
  85. package/dist/default-agents.d.ts +0 -8
  86. package/dist/default-agents.d.ts.map +0 -1
  87. package/dist/default-agents.js +0 -123
  88. package/dist/default-agents.js.map +0 -1
  89. package/dist/enabled-models.d.ts +0 -50
  90. package/dist/enabled-models.d.ts.map +0 -1
  91. package/dist/enabled-models.js +0 -146
  92. package/dist/enabled-models.js.map +0 -1
  93. package/dist/env.d.ts +0 -7
  94. package/dist/env.d.ts.map +0 -1
  95. package/dist/env.js +0 -29
  96. package/dist/env.js.map +0 -1
  97. package/dist/group-join.d.ts +0 -33
  98. package/dist/group-join.d.ts.map +0 -1
  99. package/dist/group-join.js +0 -117
  100. package/dist/group-join.js.map +0 -1
  101. package/dist/index.d.ts +0 -51
  102. package/dist/index.d.ts.map +0 -1
  103. package/dist/index.js +0 -3687
  104. package/dist/index.js.map +0 -1
  105. package/dist/invocation-config.d.ts +0 -108
  106. package/dist/invocation-config.d.ts.map +0 -1
  107. package/dist/invocation-config.js +0 -84
  108. package/dist/invocation-config.js.map +0 -1
  109. package/dist/memory.d.ts +0 -54
  110. package/dist/memory.d.ts.map +0 -1
  111. package/dist/memory.js +0 -166
  112. package/dist/memory.js.map +0 -1
  113. package/dist/mention-clone.d.ts +0 -88
  114. package/dist/mention-clone.d.ts.map +0 -1
  115. package/dist/mention-clone.js +0 -154
  116. package/dist/mention-clone.js.map +0 -1
  117. package/dist/mention.d.ts +0 -82
  118. package/dist/mention.d.ts.map +0 -1
  119. package/dist/mention.js +0 -132
  120. package/dist/mention.js.map +0 -1
  121. package/dist/model-resolver.d.ts +0 -37
  122. package/dist/model-resolver.d.ts.map +0 -1
  123. package/dist/model-resolver.js +0 -96
  124. package/dist/model-resolver.js.map +0 -1
  125. package/dist/model-scope.d.ts +0 -50
  126. package/dist/model-scope.d.ts.map +0 -1
  127. package/dist/model-scope.js +0 -49
  128. package/dist/model-scope.js.map +0 -1
  129. package/dist/nested-tools.d.ts +0 -57
  130. package/dist/nested-tools.d.ts.map +0 -1
  131. package/dist/nested-tools.js +0 -301
  132. package/dist/nested-tools.js.map +0 -1
  133. package/dist/nico-overrides.d.ts +0 -54
  134. package/dist/nico-overrides.d.ts.map +0 -1
  135. package/dist/nico-overrides.js +0 -170
  136. package/dist/nico-overrides.js.map +0 -1
  137. package/dist/output-file.d.ts +0 -44
  138. package/dist/output-file.d.ts.map +0 -1
  139. package/dist/output-file.js +0 -156
  140. package/dist/output-file.js.map +0 -1
  141. package/dist/prompts.d.ts +0 -56
  142. package/dist/prompts.d.ts.map +0 -1
  143. package/dist/prompts.js +0 -92
  144. package/dist/prompts.js.map +0 -1
  145. package/dist/schedule-store.d.ts +0 -39
  146. package/dist/schedule-store.d.ts.map +0 -1
  147. package/dist/schedule-store.js +0 -156
  148. package/dist/schedule-store.js.map +0 -1
  149. package/dist/schedule.d.ts +0 -110
  150. package/dist/schedule.d.ts.map +0 -1
  151. package/dist/schedule.js +0 -360
  152. package/dist/schedule.js.map +0 -1
  153. package/dist/settings.d.ts +0 -354
  154. package/dist/settings.d.ts.map +0 -1
  155. package/dist/settings.js +0 -247
  156. package/dist/settings.js.map +0 -1
  157. package/dist/skill-loader.d.ts +0 -25
  158. package/dist/skill-loader.d.ts.map +0 -1
  159. package/dist/skill-loader.js +0 -94
  160. package/dist/skill-loader.js.map +0 -1
  161. package/dist/status-note.d.ts +0 -62
  162. package/dist/status-note.d.ts.map +0 -1
  163. package/dist/status-note.js +0 -86
  164. package/dist/status-note.js.map +0 -1
  165. package/dist/structured-output.d.ts +0 -62
  166. package/dist/structured-output.d.ts.map +0 -1
  167. package/dist/structured-output.js +0 -113
  168. package/dist/structured-output.js.map +0 -1
  169. package/dist/types.d.ts +0 -372
  170. package/dist/types.d.ts.map +0 -1
  171. package/dist/types.js +0 -6
  172. package/dist/types.js.map +0 -1
  173. package/dist/ui/agent-mention.d.ts +0 -83
  174. package/dist/ui/agent-mention.d.ts.map +0 -1
  175. package/dist/ui/agent-mention.js +0 -188
  176. package/dist/ui/agent-mention.js.map +0 -1
  177. package/dist/ui/agent-widget.d.ts +0 -241
  178. package/dist/ui/agent-widget.d.ts.map +0 -1
  179. package/dist/ui/agent-widget.js +0 -992
  180. package/dist/ui/agent-widget.js.map +0 -1
  181. package/dist/ui/ccstyle/diff/ansi-utils.d.ts +0 -11
  182. package/dist/ui/ccstyle/diff/ansi-utils.d.ts.map +0 -1
  183. package/dist/ui/ccstyle/diff/ansi-utils.js +0 -145
  184. package/dist/ui/ccstyle/diff/ansi-utils.js.map +0 -1
  185. package/dist/ui/ccstyle/diff/diff-presentation.d.ts +0 -12
  186. package/dist/ui/ccstyle/diff/diff-presentation.d.ts.map +0 -1
  187. package/dist/ui/ccstyle/diff/diff-presentation.js +0 -48
  188. package/dist/ui/ccstyle/diff/diff-presentation.js.map +0 -1
  189. package/dist/ui/ccstyle/diff/diff-renderer.d.ts +0 -46
  190. package/dist/ui/ccstyle/diff/diff-renderer.d.ts.map +0 -1
  191. package/dist/ui/ccstyle/diff/diff-renderer.js +0 -2049
  192. package/dist/ui/ccstyle/diff/diff-renderer.js.map +0 -1
  193. package/dist/ui/ccstyle/diff/line-width-safety.d.ts +0 -12
  194. package/dist/ui/ccstyle/diff/line-width-safety.d.ts.map +0 -1
  195. package/dist/ui/ccstyle/diff/line-width-safety.js +0 -58
  196. package/dist/ui/ccstyle/diff/line-width-safety.js.map +0 -1
  197. package/dist/ui/ccstyle/diff/render-utils.d.ts +0 -6
  198. package/dist/ui/ccstyle/diff/render-utils.d.ts.map +0 -1
  199. package/dist/ui/ccstyle/diff/render-utils.js +0 -25
  200. package/dist/ui/ccstyle/diff/render-utils.js.map +0 -1
  201. package/dist/ui/ccstyle/diff/shiki-highlight.d.ts +0 -19
  202. package/dist/ui/ccstyle/diff/shiki-highlight.d.ts.map +0 -1
  203. package/dist/ui/ccstyle/diff/shiki-highlight.js +0 -85
  204. package/dist/ui/ccstyle/diff/shiki-highlight.js.map +0 -1
  205. package/dist/ui/ccstyle/diff/types.d.ts +0 -22
  206. package/dist/ui/ccstyle/diff/types.d.ts.map +0 -1
  207. package/dist/ui/ccstyle/diff/types.js +0 -10
  208. package/dist/ui/ccstyle/diff/types.js.map +0 -1
  209. package/dist/ui/ccstyle/diff/write-display-utils.d.ts +0 -2
  210. package/dist/ui/ccstyle/diff/write-display-utils.d.ts.map +0 -1
  211. package/dist/ui/ccstyle/diff/write-display-utils.js +0 -12
  212. package/dist/ui/ccstyle/diff/write-display-utils.js.map +0 -1
  213. package/dist/ui/ccstyle/tool-renderer.d.ts +0 -17
  214. package/dist/ui/ccstyle/tool-renderer.d.ts.map +0 -1
  215. package/dist/ui/ccstyle/tool-renderer.js +0 -74
  216. package/dist/ui/ccstyle/tool-renderer.js.map +0 -1
  217. package/dist/ui/ccstyle/tool-result.d.ts +0 -44
  218. package/dist/ui/ccstyle/tool-result.d.ts.map +0 -1
  219. package/dist/ui/ccstyle/tool-result.js +0 -423
  220. package/dist/ui/ccstyle/tool-result.js.map +0 -1
  221. package/dist/ui/conversation-blocks.d.ts +0 -46
  222. package/dist/ui/conversation-blocks.d.ts.map +0 -1
  223. package/dist/ui/conversation-blocks.js +0 -313
  224. package/dist/ui/conversation-blocks.js.map +0 -1
  225. package/dist/ui/conversation-nvim.d.ts +0 -8
  226. package/dist/ui/conversation-nvim.d.ts.map +0 -1
  227. package/dist/ui/conversation-nvim.js +0 -117
  228. package/dist/ui/conversation-nvim.js.map +0 -1
  229. package/dist/ui/conversation-role.d.ts +0 -13
  230. package/dist/ui/conversation-role.d.ts.map +0 -1
  231. package/dist/ui/conversation-role.js +0 -39
  232. package/dist/ui/conversation-role.js.map +0 -1
  233. package/dist/ui/conversation-search.d.ts +0 -39
  234. package/dist/ui/conversation-search.d.ts.map +0 -1
  235. package/dist/ui/conversation-search.js +0 -124
  236. package/dist/ui/conversation-search.js.map +0 -1
  237. package/dist/ui/conversation-timeline.d.ts +0 -102
  238. package/dist/ui/conversation-timeline.d.ts.map +0 -1
  239. package/dist/ui/conversation-timeline.js +0 -555
  240. package/dist/ui/conversation-timeline.js.map +0 -1
  241. package/dist/ui/conversation-viewer.d.ts +0 -138
  242. package/dist/ui/conversation-viewer.d.ts.map +0 -1
  243. package/dist/ui/conversation-viewer.js +0 -1175
  244. package/dist/ui/conversation-viewer.js.map +0 -1
  245. package/dist/ui/schedule-menu.d.ts +0 -17
  246. package/dist/ui/schedule-menu.d.ts.map +0 -1
  247. package/dist/ui/schedule-menu.js +0 -95
  248. package/dist/ui/schedule-menu.js.map +0 -1
  249. package/dist/ui/select-item.d.ts +0 -28
  250. package/dist/ui/select-item.d.ts.map +0 -1
  251. package/dist/ui/select-item.js +0 -35
  252. package/dist/ui/select-item.js.map +0 -1
  253. package/dist/ui/viewer-keys.d.ts +0 -21
  254. package/dist/ui/viewer-keys.d.ts.map +0 -1
  255. package/dist/ui/viewer-keys.js +0 -18
  256. package/dist/ui/viewer-keys.js.map +0 -1
  257. package/dist/ui/workflow-card.d.ts +0 -176
  258. package/dist/ui/workflow-card.d.ts.map +0 -1
  259. package/dist/ui/workflow-card.js +0 -333
  260. package/dist/ui/workflow-card.js.map +0 -1
  261. package/dist/ui/workflow-dialog.d.ts +0 -306
  262. package/dist/ui/workflow-dialog.d.ts.map +0 -1
  263. package/dist/ui/workflow-dialog.js +0 -844
  264. package/dist/ui/workflow-dialog.js.map +0 -1
  265. package/dist/ui/workflow-menu.d.ts +0 -42
  266. package/dist/ui/workflow-menu.d.ts.map +0 -1
  267. package/dist/ui/workflow-menu.js +0 -127
  268. package/dist/ui/workflow-menu.js.map +0 -1
  269. package/dist/usage.d.ts +0 -136
  270. package/dist/usage.d.ts.map +0 -1
  271. package/dist/usage.js +0 -121
  272. package/dist/usage.js.map +0 -1
  273. package/dist/workflow/collisions.d.ts +0 -96
  274. package/dist/workflow/collisions.d.ts.map +0 -1
  275. package/dist/workflow/collisions.js +0 -89
  276. package/dist/workflow/collisions.js.map +0 -1
  277. package/dist/workflow/entry.d.ts +0 -33
  278. package/dist/workflow/entry.d.ts.map +0 -1
  279. package/dist/workflow/entry.js +0 -30
  280. package/dist/workflow/entry.js.map +0 -1
  281. package/dist/workflow/host.d.ts +0 -63
  282. package/dist/workflow/host.d.ts.map +0 -1
  283. package/dist/workflow/host.js +0 -363
  284. package/dist/workflow/host.js.map +0 -1
  285. package/dist/workflow/journal.d.ts +0 -98
  286. package/dist/workflow/journal.d.ts.map +0 -1
  287. package/dist/workflow/journal.js +0 -121
  288. package/dist/workflow/journal.js.map +0 -1
  289. package/dist/workflow/json-schema.d.ts +0 -52
  290. package/dist/workflow/json-schema.d.ts.map +0 -1
  291. package/dist/workflow/json-schema.js +0 -112
  292. package/dist/workflow/json-schema.js.map +0 -1
  293. package/dist/workflow/meta.d.ts +0 -68
  294. package/dist/workflow/meta.d.ts.map +0 -1
  295. package/dist/workflow/meta.js +0 -318
  296. package/dist/workflow/meta.js.map +0 -1
  297. package/dist/workflow/progress.d.ts +0 -225
  298. package/dist/workflow/progress.d.ts.map +0 -1
  299. package/dist/workflow/progress.js +0 -362
  300. package/dist/workflow/progress.js.map +0 -1
  301. package/dist/workflow/runtime.d.ts +0 -335
  302. package/dist/workflow/runtime.d.ts.map +0 -1
  303. package/dist/workflow/runtime.js +0 -831
  304. package/dist/workflow/runtime.js.map +0 -1
  305. package/dist/workflow/saved.d.ts +0 -91
  306. package/dist/workflow/saved.d.ts.map +0 -1
  307. package/dist/workflow/saved.js +0 -204
  308. package/dist/workflow/saved.js.map +0 -1
  309. package/dist/workflow/task.d.ts +0 -137
  310. package/dist/workflow/task.d.ts.map +0 -1
  311. package/dist/workflow/task.js +0 -208
  312. package/dist/workflow/task.js.map +0 -1
  313. package/dist/workflow/tool-description.d.ts +0 -39
  314. package/dist/workflow/tool-description.d.ts.map +0 -1
  315. package/dist/workflow/tool-description.js +0 -200
  316. package/dist/workflow/tool-description.js.map +0 -1
  317. package/dist/workflow/worker-source.d.ts +0 -48
  318. package/dist/workflow/worker-source.d.ts.map +0 -1
  319. package/dist/workflow/worker-source.js +0 -779
  320. package/dist/workflow/worker-source.js.map +0 -1
  321. package/dist/worktree.d.ts +0 -53
  322. package/dist/worktree.d.ts.map +0 -1
  323. package/dist/worktree.js +0 -165
  324. package/dist/worktree.js.map +0 -1
  325. package/dist/write-execution.d.ts +0 -42
  326. package/dist/write-execution.d.ts.map +0 -1
  327. package/dist/write-execution.js +0 -138
  328. package/dist/write-execution.js.map +0 -1
  329. package/dist/xml.d.ts +0 -11
  330. package/dist/xml.d.ts.map +0 -1
  331. package/dist/xml.js +0 -13
  332. package/dist/xml.js.map +0 -1
  333. package/src/abortable.ts +0 -43
  334. package/src/agent-color.ts +0 -161
  335. package/src/agent-file-toggle.ts +0 -269
  336. package/src/child-context.ts +0 -15
  337. package/src/mention-clone.ts +0 -196
  338. package/src/mention.ts +0 -141
  339. package/src/model-scope.ts +0 -70
  340. package/src/nested-tools.ts +0 -424
  341. package/src/structured-output.ts +0 -130
  342. package/src/ui/agent-mention.ts +0 -216
  343. package/src/ui/select-item.ts +0 -45
  344. package/src/ui/workflow-card.ts +0 -470
  345. package/src/ui/workflow-dialog.ts +0 -1115
  346. package/src/ui/workflow-menu.ts +0 -166
  347. package/src/workflow/collisions.ts +0 -123
  348. package/src/workflow/entry.ts +0 -47
  349. package/src/workflow/host.ts +0 -403
  350. package/src/workflow/journal.ts +0 -164
  351. package/src/workflow/json-schema.ts +0 -128
  352. package/src/workflow/meta.ts +0 -325
  353. package/src/workflow/progress.ts +0 -550
  354. package/src/workflow/runtime.ts +0 -1219
  355. package/src/workflow/saved.ts +0 -217
  356. package/src/workflow/task.ts +0 -302
  357. package/src/workflow/tool-description.ts +0 -200
  358. package/src/workflow/worker-source.ts +0 -781
  359. package/src/xml.ts +0 -13
@@ -1,354 +0,0 @@
1
- import type { AgentMentionMode, JoinMode, ViewerMarkdownMode, WidgetMode } from "./types.js";
2
- export interface SubagentsSettings {
3
- maxConcurrent?: number;
4
- /**
5
- * Max concurrent FOREGROUND (blocking) agents — `0` = unlimited, the default,
6
- * which preserves the behaviour that has always applied: nothing bounded
7
- * foreground work, and pi dispatches a message's tool calls through
8
- * `Promise.all`, so an unqualified fan-out of blocking `Agent` calls runs all
9
- * at once. Set it to bound that (#253 — on local models, parallel agents
10
- * thrash the prompt cache).
11
- *
12
- * Deliberately independent of `maxConcurrent` rather than folded into it: a
13
- * foreground agent blocks the parent anyway, so charging it to the background
14
- * pool would let a saturated pool starve the main session of work it could
15
- * have done itself.
16
- *
17
- * Bounds only spawns a caller is blocking on inline. Nested children are
18
- * exempt — their parent is blocked awaiting them, so queueing a child behind
19
- * its own parent would deadlock — and so are detached spawns from
20
- * cross-extension RPC or `@handle` mentions, which block nobody and are
21
- * documented to start immediately. Foreground `resume` is also outside the
22
- * pool: it reuses an existing session and never reaches the spawn path, so
23
- * several blocking resumes in one message can still exceed the limit.
24
- */
25
- maxConcurrentForeground?: number;
26
- /**
27
- * 0 = unlimited — the extension's single source of truth for that convention:
28
- * `normalizeMaxTurns()` in agent-runner.ts treats 0 → `undefined`, and the
29
- * `/agents` → Settings input prompt explicitly says "0 = unlimited".
30
- */
31
- defaultMaxTurns?: number;
32
- graceTurns?: number;
33
- defaultJoinMode?: JoinMode;
34
- /**
35
- * Whether a top-level `Agent` spawn that doesn't say runs detached.
36
- * Defaults to `true`, following Claude Code, where the agent backgrounds
37
- * unless the caller passes `run_in_background: false`. Set `false` to restore
38
- * the previous behaviour, where an unqualified spawn blocked the turn and
39
- * returned its result inline.
40
- *
41
- * Top-level only. Nested spawns (a subagent spawning its own) always default
42
- * to foreground regardless of this setting — see `nested-tools.ts`, where a
43
- * detached child would be killed by `abortOwnedChildren` when its parent
44
- * settles, with no notification path to deliver its result.
45
- *
46
- * An explicit `run_in_background` on the call, or in the agent file's
47
- * frontmatter, overrides this in both directions; the setting only decides
48
- * what "unspecified" means.
49
- */
50
- backgroundByDefault?: boolean;
51
- /**
52
- * Master switch for the schedule subagent feature. Defaults to `true`.
53
- * When `false`: the `Agent` tool's `schedule` param + its guideline are
54
- * stripped from the tool spec at registration (zero LLM-context cost), the
55
- * scheduler doesn't bind to the session, and the `/agents → Scheduled jobs`
56
- * menu entry is hidden. Schema-level removal applies at extension load
57
- * (next pi session); runtime menu/runtime-fire short-circuit is immediate.
58
- */
59
- schedulingEnabled?: boolean;
60
- /**
61
- * When true, the effective model of each subagent spawn is validated
62
- * against `enabledModels` from pi's settings — both global
63
- * (`<agentDir>/settings.json`) and project-local (`<cwd>/.pi/settings.json`),
64
- * with project overriding global (mirrors pi's SettingsManager deep-merge).
65
- *
66
- * scopeModels guards against runtime LLM choices, not user-level config.
67
- * Out-of-scope handling reflects this:
68
- * - Caller-supplied via `Agent({ model: "..." })` (only when frontmatter
69
- * has no `model:`, since frontmatter is authoritative): hard error
70
- * returned to the orchestrator, listing the allowed models. The LLM
71
- * made an explicit out-of-scope choice and gets explicit feedback.
72
- * - Frontmatter-pinned: warning toast + the pinned model runs. The
73
- * agent's author/installer chose this; trust it.
74
- * - Parent-inherited (neither caller nor frontmatter sets a model):
75
- * warning toast + parent's model runs. The user chose the parent's
76
- * model when starting the session; trust it.
77
- *
78
- * No-op when pi's `enabledModels` is empty or absent — nothing to validate
79
- * against. Defaults to false: subagents may use any model.
80
- */
81
- scopeModels?: boolean;
82
- /**
83
- * When true, an unreadable or unparseable agent `.md` aborts extension load
84
- * instead of being skipped with a warning — pi exits, naming the file.
85
- *
86
- * Startup only, by design. Mid-session reloads (one per `Agent` call) keep
87
- * warning: a bad edit at 3pm should not kill the session on the next
88
- * unrelated spawn, where the failure would look disconnected from its cause.
89
- * For a checked-in `.pi/agents/`, failing at startup is the point — the
90
- * alternative is running a *different* agent than the file names.
91
- * Defaults to false.
92
- */
93
- strictAgentFiles?: boolean;
94
- /**
95
- * When true, the three built-in default agents (general-purpose, Explore, Plan)
96
- * are not registered at startup. User-defined agents from project/global custom
97
- * agent dirs are completely unaffected — only the hardcoded DEFAULT_AGENTS are suppressed.
98
- * Defaults to false.
99
- */
100
- disableDefaultAgents?: boolean;
101
- /**
102
- * Which Agent tool description the LLM sees. "full" (default) is the rich
103
- * Claude Code-style prompt; "compact" is a ~75% smaller version (one-line
104
- * agent type list, terse usage notes) for small/local models where tool-spec
105
- * tokens are expensive; "custom" reads `.pi/agent-tool-description.md`
106
- * (project, falling back to `<agentDir>/agent-tool-description.md`) with
107
- * `{{placeholder}}` substitution — a missing/empty file falls back to "full".
108
- * The mode is read once at tool registration — changing it applies on the
109
- * next pi session.
110
- */
111
- toolDescriptionMode?: ToolDescriptionMode;
112
- /**
113
- * Whether `@handle message` typed at the prompt is routed to that subagent
114
- * instead of the main model, and whether `@` offers running agents alongside
115
- * pi's file completion. Defaults to `model`. Applied live.
116
- *
117
- * - `model`: mentioning an agent that is not running asks the main model to
118
- * spawn it with the `Agent` tool, Claude Code's behaviour. Costs a turn,
119
- * and the model writes the agent's prompt rather than your text being it.
120
- * - `direct`: that agent is started here instead, with the typed message as
121
- * its prompt and no main-model turn spent.
122
- * - `off`: the input hook falls straight through and the stacked
123
- * autocomplete provider delegates everything back to pi's built-in one.
124
- *
125
- * Messaging a running agent and resuming a finished one are direct in both
126
- * `model` and `direct`. The legacy booleans are still accepted: `true` reads
127
- * as `model`, `false` as `off`.
128
- */
129
- agentMentions?: AgentMentionMode;
130
- /**
131
- * Whether subagents persist their pi session by default, so `@handle` can
132
- * reopen an agent's conversation long after its in-memory record is gone.
133
- * Defaults to `true`. Per-agent `persist_session:` frontmatter overrides it
134
- * in both directions. Turning it off restores the previous behaviour, where
135
- * a handle stops resolving roughly ten minutes after the agent finishes and
136
- * mentioning it starts a fresh run instead. Persisted sessions also appear
137
- * nested under the spawning session in pi's `/resume`.
138
- */
139
- rememberAgents?: boolean;
140
- /**
141
- * Display mode for the persistent above-editor agent widget:
142
- * - `all`: show every agent (foreground + background).
143
- * - `background`: hide foreground agents — they already render inline as the
144
- * Agent tool result, so the widget would otherwise double-render them
145
- * (#118); everything else (background, queued, scheduled, RPC) stays.
146
- * - `off`: hide the widget entirely.
147
- * Defaults to `background`. Pure-UI and applied live (toggling refreshes the
148
- * widget).
149
- */
150
- widgetMode?: WidgetMode;
151
- /**
152
- * Project/global default for writing each subagent's `.output` transcript
153
- * (a JSON-lines copy of the run, stored under the OS temp dir).
154
- * Defaults to `true`. Set `false` to make transcripts opt-in for the whole
155
- * project (e.g. a repo that shouldn't leave run transcripts on disk for backup
156
- * or DLP tooling to ingest). A custom agent's `output_transcript` frontmatter
157
- * overrides this per agent. This governs only the transcript — it does NOT
158
- * affect the persisted pi session (`persist_session`), worktree commits
159
- * (`isolation: worktree`), or memory files.
160
- */
161
- outputTranscript?: boolean;
162
- /**
163
- * Whether `isolation: "worktree"` may create a worktree at all. Defaults to
164
- * `true`. Set `false` on a repo where worktrees are too slow or too large to
165
- * be worth it (#184): a requested worktree is then dropped and the agent runs
166
- * in the main checkout.
167
- *
168
- * The drop is deliberately silent — there is no per-result note, because the
169
- * setting exists for projects whose model asks for a worktree on every call,
170
- * where a note would be noise on every result. What keeps the orchestrator
171
- * from claiming a `pi-agent-*` branch anyway is that it is never told the
172
- * capability exists: `isolationParam` (invocation-config.ts) drops the field
173
- * from both tool schemas, and `isolationGuideline` (index.ts) drops the
174
- * matching prose from the full and compact descriptions — a custom one opts
175
- * in via the `{{isolationGuideline}}` placeholder. Anything that
176
- * reintroduces the prose has to reintroduce a note with it.
177
- *
178
- * Deliberately a downgrade rather than an error. The fail-loud rule covers
179
- * worktrees that *cannot* be created; this is the user declining one, and
180
- * throwing would reject exactly the calls that the `isolation: "off"` value
181
- * exists to tolerate. Enforced below the tool boundary, so it also covers the
182
- * scheduler and the unvalidated cross-extension RPC path.
183
- */
184
- worktreeIsolation?: boolean;
185
- /**
186
- * Master switch for scripted workflows. Defaults to `true`.
187
- *
188
- * Off is not a soft hide: the `SubagentWorkflow` tool is never registered, so
189
- * the model is not told it exists and cannot call it, the `/agents`
190
- * Workflows entry is hidden, and `--subagents-workflow-file` is refused.
191
- *
192
- * Absent is not the same as `true`. Unset means *auto*: on, but yielding to
193
- * another extension that already offers a workflow tool, because two
194
- * orchestrators in one tool spec is a worse default than none — the model
195
- * has to guess which to call, and pays for both descriptions to find out.
196
- * Setting it explicitly pins the answer in both directions: `true` keeps
197
- * ours whatever else is loaded, `false` is off regardless. See
198
- * `resolveWorkflowCollisions` in index.ts.
199
- *
200
- * Read once at extension init, before registration, so flipping it in
201
- * `/agents → Settings` takes effect on the next pi session — the same
202
- * contract `schedulingEnabled` has, and for the same reason: a tool spec is
203
- * fixed once pi has it.
204
- */
205
- workflowsEnabled?: boolean;
206
- /**
207
- * Hard ceiling on nested subagent delegation, counted from the main session:
208
- * main = 0, its subagents = 1, their children = 2. Defaults to `2`; `0` or `1`
209
- * disables nesting project-wide. Read when a subagent session is built, so a
210
- * change applies to agents started after it.
211
- */
212
- maxSubagentDepth?: number;
213
- /**
214
- * Agent type substituted when a caller-supplied `subagent_type` doesn't
215
- * resolve to exactly one enabled agent (unknown, disabled, or ambiguous by
216
- * case). Omitted keeps the historical `general-purpose` fallback; a type name
217
- * routes those calls to that agent instead; `"none"` disables the fallback so
218
- * dispatch fails closed with an error naming the available types.
219
- *
220
- * The boolean `false` is accepted as a spelling of `"none"`, because a boolean
221
- * would otherwise be dropped as the wrong type and silently leave the
222
- * PERMISSIVE default in place while the author believes strict dispatch is on
223
- * — the wrong direction to fail for this setting. Every other value is an
224
- * agent name, so a mistaken `"off"` fails loudly at dispatch rather than
225
- * meaning one thing here and another in the resolver.
226
- */
227
- fallbackSubagent?: string;
228
- /**
229
- * Whether this extension's tool results carry a `usage` field, so subagent
230
- * spend reaches the parent session's own accounting. Defaults to `false`.
231
- *
232
- * Subagents run in their own pi sessions, so by default the parent's footer,
233
- * statusline and `/cost` show only what the main model spent — a session that
234
- * delegated most of its work reads as nearly free. Pi folds
235
- * `toolResult.usage` into `getSessionStats()`, so attaching it makes those
236
- * surfaces count subagents too, under `/cost`'s "Tools/summaries" bucket.
237
- *
238
- * Off by default because it changes numbers the user may already be tracking
239
- * (a statusline reading session cost will step up), not because the numbers
240
- * are wrong.
241
- *
242
- * Three properties of what gets reported:
243
- * - Tokens exclude `cacheRead`, for the reason in `usage.ts` — the parent's
244
- * token total therefore rises by billed tokens only.
245
- * - Cost is pi's own per-message `usage.cost.total`; we price nothing, and
246
- * a model pi has no rates for contributes 0.
247
- * - The context-window percentage is untouched. Pi derives it from assistant
248
- * messages alone (`getContextUsage`), so a delegating session's context
249
- * does not appear to fill up faster.
250
- */
251
- reportUsage?: boolean;
252
- /**
253
- * Whether the subagent surfaces show an estimated dollar cost next to their
254
- * token counts (widget, conversation viewer, foreground results,
255
- * completion notifications). Defaults to `false`. Applied live.
256
- *
257
- * Rendered as `~$0.0042` — the tilde marks it as pi's reported estimate
258
- * rather than a billed figure, and it is omitted entirely when the model has
259
- * no pricing data, so a local model shows tokens and no dollars.
260
- *
261
- * Independent of `reportUsage`: this one is what a human reads, that one is
262
- * what the parent session counts.
263
- */
264
- showCost?: boolean;
265
- /**
266
- * Whether the widget's running rows name the model driving each agent and the
267
- * thinking level it is running at.
268
- *
269
- * Off by default, unlike the tool result and the conversation viewer, which
270
- * show the pair unconditionally: those have a line to themselves, while the
271
- * widget row already carries the description, turns, tool uses, tokens and
272
- * elapsed time, and every character it gains is one the description loses on a
273
- * narrow terminal.
274
- */
275
- showModel?: boolean;
276
- /**
277
- * How much of the conversation viewer's transcript renders as Markdown.
278
- * Defaults to `assistant`. Applied live — the viewer's `m` key cycles this
279
- * same setting, so a choice made in the overlay persists like one made in
280
- * `/agents → Settings`.
281
- *
282
- * Scoped rather than all-or-nothing because the two kinds of content have
283
- * different contracts: assistant text is authored as Markdown, while a tool
284
- * result is whatever bytes the tool produced. Rendering the latter as
285
- * Markdown is lossy in ways that look like the tool misbehaved — see
286
- * `ViewerMarkdownMode` for the specific rewrites — so `all` is opt-in.
287
- */
288
- viewerMarkdown?: ViewerMarkdownMode;
289
- }
290
- export type ToolDescriptionMode = "full" | "compact" | "custom";
291
- /** Setter hooks used by applySettings to wire persisted values into in-memory state. */
292
- export interface SettingsAppliers {
293
- setMaxConcurrent: (n: number) => void;
294
- setMaxConcurrentForeground: (n: number) => void;
295
- setDefaultMaxTurns: (n: number) => void;
296
- setGraceTurns: (n: number) => void;
297
- setDefaultJoinMode: (mode: JoinMode) => void;
298
- setBackgroundByDefault: (b: boolean) => void;
299
- setSchedulingEnabled: (b: boolean) => void;
300
- setScopeModels: (enabled: boolean) => void;
301
- setStrictAgentFiles: (b: boolean) => void;
302
- setDisableDefaultAgents: (b: boolean) => void;
303
- setToolDescriptionMode: (mode: ToolDescriptionMode) => void;
304
- setAgentMentions: (mode: AgentMentionMode) => void;
305
- setRememberAgents: (b: boolean) => void;
306
- setWidgetMode: (mode: WidgetMode) => void;
307
- setOutputTranscript: (b: boolean) => void;
308
- setWorktreeIsolation: (b: boolean) => void;
309
- setWorkflowsEnabled: (b: boolean) => void;
310
- setMaxSubagentDepth: (n: number) => void;
311
- setFallbackSubagent: (v: string | undefined) => void;
312
- setReportUsage: (b: boolean) => void;
313
- setShowCost: (b: boolean) => void;
314
- setShowModel: (b: boolean) => void;
315
- setViewerMarkdown: (mode: ViewerMarkdownMode) => void;
316
- }
317
- /** Emit callback — a subset of `pi.events.emit` to keep helpers testable. */
318
- export type SettingsEmit = (event: string, payload: unknown) => void;
319
- /** Load merged settings: global provides defaults, project overrides. */
320
- export declare function loadSettings(cwd?: string): SubagentsSettings;
321
- /**
322
- * Write project-local settings. Global is never touched from code.
323
- * Returns `true` on success, `false` if the write (or mkdir) failed so the
324
- * caller can surface a warning — persistence isn't fatal but isn't silent.
325
- */
326
- export declare function saveSettings(s: SubagentsSettings, cwd?: string): boolean;
327
- /** Apply persisted settings to the in-memory state via caller-supplied setters. */
328
- export declare function applySettings(s: SubagentsSettings, appliers: SettingsAppliers): void;
329
- /**
330
- * Format the user-facing toast for a settings mutation. Pure function —
331
- * routes the success/failure of `saveSettings` into the right message + level
332
- * so the UI layer (index.ts) stays a thin wire between input and notification.
333
- */
334
- export declare function persistToastFor(successMsg: string, persisted: boolean): {
335
- message: string;
336
- level: "info" | "warning";
337
- };
338
- /**
339
- * Load merged settings, apply them to in-memory state, and emit the
340
- * `subagents:settings_loaded` lifecycle event. Returns the loaded settings so
341
- * callers can log/inspect. Extension init wires this once.
342
- */
343
- export declare function applyAndEmitLoaded(appliers: SettingsAppliers, emit: SettingsEmit, cwd?: string): SubagentsSettings;
344
- /**
345
- * Persist a settings snapshot, emit the `subagents:settings_changed` event
346
- * (regardless of persist outcome so listeners see the in-memory change), and
347
- * return the toast the UI should display. Event payload carries the `persisted`
348
- * flag so listeners can react to write failures.
349
- */
350
- export declare function saveAndEmitChanged(snapshot: SubagentsSettings, successMsg: string, emit: SettingsEmit, cwd?: string): {
351
- message: string;
352
- level: "info" | "warning";
353
- };
354
- //# sourceMappingURL=settings.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"}
package/dist/settings.js DELETED
@@ -1,247 +0,0 @@
1
- // Persistence for pi-subagents operational settings.
2
- // - Global: ~/.pi/agent/subagents.json (via getAgentDir()) — manual defaults, never written here
3
- // - Project: <cwd>/.pi/subagents.json — written by /agents → Settings; overrides global on load
4
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
5
- import { dirname, join } from "node:path";
6
- import { getAgentDir } from "@earendil-works/pi-coding-agent";
7
- import { NO_FALLBACK } from "./agent-types.js";
8
- const VALID_JOIN_MODES = new Set(["async", "group", "smart"]);
9
- const VALID_TOOL_DESCRIPTION_MODES = new Set(["full", "compact", "custom"]);
10
- const VALID_WIDGET_MODES = new Set(["all", "background", "off"]);
11
- const VALID_VIEWER_MARKDOWN_MODES = new Set(["off", "assistant", "all"]);
12
- const VALID_AGENT_MENTION_MODES = new Set(["model", "direct", "off"]);
13
- // Sanity ceilings — prevent hand-edited configs from asking for values that
14
- // make no operational sense (e.g. 1e6 concurrent subagents). Permissive enough
15
- // that any realistic power-user setting passes through.
16
- const MAX_CONCURRENT_CEILING = 1024;
17
- const MAX_TURNS_CEILING = 10_000;
18
- const GRACE_TURNS_CEILING = 1_000;
19
- const SUBAGENT_DEPTH_CEILING = 16;
20
- /** Drop fields that don't match the expected shape. Silent — garbage becomes absent. */
21
- function sanitize(raw) {
22
- if (!raw || typeof raw !== "object")
23
- return {};
24
- const r = raw;
25
- const out = {};
26
- if (Number.isInteger(r.maxConcurrent) &&
27
- r.maxConcurrent >= 1 &&
28
- r.maxConcurrent <= MAX_CONCURRENT_CEILING) {
29
- out.maxConcurrent = r.maxConcurrent;
30
- }
31
- // Floor 0, not 1 like maxConcurrent above: 0 is the documented "unlimited"
32
- // value and the default, so dropping it would silently be unrepresentable.
33
- if (Number.isInteger(r.maxConcurrentForeground) &&
34
- r.maxConcurrentForeground >= 0 &&
35
- r.maxConcurrentForeground <= MAX_CONCURRENT_CEILING) {
36
- out.maxConcurrentForeground = r.maxConcurrentForeground;
37
- }
38
- if (Number.isInteger(r.defaultMaxTurns) &&
39
- r.defaultMaxTurns >= 0 &&
40
- r.defaultMaxTurns <= MAX_TURNS_CEILING) {
41
- out.defaultMaxTurns = r.defaultMaxTurns;
42
- }
43
- if (Number.isInteger(r.graceTurns) &&
44
- r.graceTurns >= 1 &&
45
- r.graceTurns <= GRACE_TURNS_CEILING) {
46
- out.graceTurns = r.graceTurns;
47
- }
48
- if (Number.isInteger(r.maxSubagentDepth) &&
49
- r.maxSubagentDepth >= 0 &&
50
- r.maxSubagentDepth <= SUBAGENT_DEPTH_CEILING) {
51
- out.maxSubagentDepth = r.maxSubagentDepth;
52
- }
53
- if (typeof r.defaultJoinMode === "string" && VALID_JOIN_MODES.has(r.defaultJoinMode)) {
54
- out.defaultJoinMode = r.defaultJoinMode;
55
- }
56
- if (typeof r.backgroundByDefault === "boolean") {
57
- out.backgroundByDefault = r.backgroundByDefault;
58
- }
59
- if (typeof r.schedulingEnabled === "boolean") {
60
- out.schedulingEnabled = r.schedulingEnabled;
61
- }
62
- if (typeof r.scopeModels === "boolean") {
63
- out.scopeModels = r.scopeModels;
64
- }
65
- if (typeof r.strictAgentFiles === "boolean") {
66
- out.strictAgentFiles = r.strictAgentFiles;
67
- }
68
- if (typeof r.disableDefaultAgents === "boolean") {
69
- out.disableDefaultAgents = r.disableDefaultAgents;
70
- }
71
- if (typeof r.toolDescriptionMode === "string" && VALID_TOOL_DESCRIPTION_MODES.has(r.toolDescriptionMode)) {
72
- out.toolDescriptionMode = r.toolDescriptionMode;
73
- }
74
- // Was a boolean before the `model` mode existed. A hand-written or
75
- // previously-written `true` means "on", which is now the default `model`.
76
- if (typeof r.agentMentions === "boolean") {
77
- out.agentMentions = r.agentMentions ? "model" : "off";
78
- }
79
- else if (typeof r.agentMentions === "string" && VALID_AGENT_MENTION_MODES.has(r.agentMentions)) {
80
- out.agentMentions = r.agentMentions;
81
- }
82
- if (typeof r.rememberAgents === "boolean") {
83
- out.rememberAgents = r.rememberAgents;
84
- }
85
- if (typeof r.widgetMode === "string" && VALID_WIDGET_MODES.has(r.widgetMode)) {
86
- out.widgetMode = r.widgetMode;
87
- }
88
- if (typeof r.outputTranscript === "boolean") {
89
- out.outputTranscript = r.outputTranscript;
90
- }
91
- if (typeof r.worktreeIsolation === "boolean") {
92
- out.worktreeIsolation = r.worktreeIsolation;
93
- }
94
- if (typeof r.reportUsage === "boolean") {
95
- out.reportUsage = r.reportUsage;
96
- }
97
- if (typeof r.showCost === "boolean") {
98
- out.showCost = r.showCost;
99
- }
100
- if (typeof r.showModel === "boolean") {
101
- out.showModel = r.showModel;
102
- }
103
- if (typeof r.viewerMarkdown === "string" && VALID_VIEWER_MARKDOWN_MODES.has(r.viewerMarkdown)) {
104
- out.viewerMarkdown = r.viewerMarkdown;
105
- }
106
- if (typeof r.workflowsEnabled === "boolean") {
107
- out.workflowsEnabled = r.workflowsEnabled;
108
- }
109
- if (r.fallbackSubagent === false) {
110
- // The only non-string spelling worth accepting: a boolean would otherwise be
111
- // dropped, silently leaving the PERMISSIVE default in place. Every string is
112
- // an agent name except the `none` sentinel, which the resolver recognizes —
113
- // so a mistaken "off" fails loudly at dispatch instead of meaning something
114
- // different here than it does there.
115
- out.fallbackSubagent = NO_FALLBACK;
116
- }
117
- else if (typeof r.fallbackSubagent === "string" && r.fallbackSubagent.trim()) {
118
- out.fallbackSubagent = r.fallbackSubagent.trim();
119
- }
120
- return out;
121
- }
122
- function globalPath() {
123
- return join(getAgentDir(), "subagents.json");
124
- }
125
- function projectPath(cwd) {
126
- return join(cwd, ".pi", "subagents.json");
127
- }
128
- /**
129
- * Read a settings file. Missing file is silent (returns `{}`). A file that
130
- * exists but can't be parsed emits a warning to stderr so users aren't
131
- * silently reverted to defaults — and still returns `{}` so startup proceeds.
132
- */
133
- function readSettingsFile(path) {
134
- if (!existsSync(path))
135
- return {};
136
- try {
137
- return sanitize(JSON.parse(readFileSync(path, "utf-8")));
138
- }
139
- catch (err) {
140
- const reason = err instanceof Error ? err.message : String(err);
141
- console.warn(`[pi-subagents] Ignoring malformed settings at ${path}: ${reason}`);
142
- return {};
143
- }
144
- }
145
- /** Load merged settings: global provides defaults, project overrides. */
146
- export function loadSettings(cwd = process.cwd()) {
147
- return { ...readSettingsFile(globalPath()), ...readSettingsFile(projectPath(cwd)) };
148
- }
149
- /**
150
- * Write project-local settings. Global is never touched from code.
151
- * Returns `true` on success, `false` if the write (or mkdir) failed so the
152
- * caller can surface a warning — persistence isn't fatal but isn't silent.
153
- */
154
- export function saveSettings(s, cwd = process.cwd()) {
155
- const path = projectPath(cwd);
156
- try {
157
- mkdirSync(dirname(path), { recursive: true });
158
- writeFileSync(path, JSON.stringify(s, null, 2), "utf-8");
159
- return true;
160
- }
161
- catch {
162
- return false;
163
- }
164
- }
165
- /** Apply persisted settings to the in-memory state via caller-supplied setters. */
166
- export function applySettings(s, appliers) {
167
- if (typeof s.maxConcurrent === "number")
168
- appliers.setMaxConcurrent(s.maxConcurrent);
169
- if (typeof s.maxConcurrentForeground === "number") {
170
- appliers.setMaxConcurrentForeground(s.maxConcurrentForeground);
171
- }
172
- if (typeof s.defaultMaxTurns === "number")
173
- appliers.setDefaultMaxTurns(s.defaultMaxTurns);
174
- if (typeof s.graceTurns === "number")
175
- appliers.setGraceTurns(s.graceTurns);
176
- if (typeof s.maxSubagentDepth === "number")
177
- appliers.setMaxSubagentDepth(s.maxSubagentDepth);
178
- if (typeof s.fallbackSubagent === "string")
179
- appliers.setFallbackSubagent(s.fallbackSubagent);
180
- if (s.defaultJoinMode)
181
- appliers.setDefaultJoinMode(s.defaultJoinMode);
182
- if (typeof s.backgroundByDefault === "boolean")
183
- appliers.setBackgroundByDefault(s.backgroundByDefault);
184
- if (typeof s.schedulingEnabled === "boolean")
185
- appliers.setSchedulingEnabled(s.schedulingEnabled);
186
- if (typeof s.scopeModels === "boolean")
187
- appliers.setScopeModels(s.scopeModels);
188
- if (typeof s.strictAgentFiles === "boolean")
189
- appliers.setStrictAgentFiles(s.strictAgentFiles);
190
- if (typeof s.disableDefaultAgents === "boolean")
191
- appliers.setDisableDefaultAgents(s.disableDefaultAgents);
192
- if (s.toolDescriptionMode)
193
- appliers.setToolDescriptionMode(s.toolDescriptionMode);
194
- if (s.agentMentions)
195
- appliers.setAgentMentions(s.agentMentions);
196
- if (typeof s.rememberAgents === "boolean")
197
- appliers.setRememberAgents(s.rememberAgents);
198
- if (s.widgetMode)
199
- appliers.setWidgetMode(s.widgetMode);
200
- if (typeof s.outputTranscript === "boolean")
201
- appliers.setOutputTranscript(s.outputTranscript);
202
- if (typeof s.worktreeIsolation === "boolean")
203
- appliers.setWorktreeIsolation(s.worktreeIsolation);
204
- if (typeof s.reportUsage === "boolean")
205
- appliers.setReportUsage(s.reportUsage);
206
- if (typeof s.showCost === "boolean")
207
- appliers.setShowCost(s.showCost);
208
- if (typeof s.showModel === "boolean")
209
- appliers.setShowModel(s.showModel);
210
- if (s.viewerMarkdown)
211
- appliers.setViewerMarkdown(s.viewerMarkdown);
212
- if (typeof s.workflowsEnabled === "boolean")
213
- appliers.setWorkflowsEnabled(s.workflowsEnabled);
214
- }
215
- /**
216
- * Format the user-facing toast for a settings mutation. Pure function —
217
- * routes the success/failure of `saveSettings` into the right message + level
218
- * so the UI layer (index.ts) stays a thin wire between input and notification.
219
- */
220
- export function persistToastFor(successMsg, persisted) {
221
- return persisted
222
- ? { message: successMsg, level: "info" }
223
- : { message: `${successMsg} (session only; failed to persist)`, level: "warning" };
224
- }
225
- /**
226
- * Load merged settings, apply them to in-memory state, and emit the
227
- * `subagents:settings_loaded` lifecycle event. Returns the loaded settings so
228
- * callers can log/inspect. Extension init wires this once.
229
- */
230
- export function applyAndEmitLoaded(appliers, emit, cwd = process.cwd()) {
231
- const settings = loadSettings(cwd);
232
- applySettings(settings, appliers);
233
- emit("subagents:settings_loaded", { settings });
234
- return settings;
235
- }
236
- /**
237
- * Persist a settings snapshot, emit the `subagents:settings_changed` event
238
- * (regardless of persist outcome so listeners see the in-memory change), and
239
- * return the toast the UI should display. Event payload carries the `persisted`
240
- * flag so listeners can react to write failures.
241
- */
242
- export function saveAndEmitChanged(snapshot, successMsg, emit, cwd = process.cwd()) {
243
- const persisted = saveSettings(snapshot, cwd);
244
- emit("subagents:settings_changed", { settings: snapshot, persisted });
245
- return persistToastFor(successMsg, persisted);
246
- }
247
- //# sourceMappingURL=settings.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- /**
2
- * skill-loader.ts — Preload named skills.
3
- *
4
- * Roots, in precedence order:
5
- * - <cwd>/.pi/skills (project, Pi's standard)
6
- * - <cwd>/.agents/skills (project, cross-tool Agent Skills spec — https://agentskills.io)
7
- * - getAgentDir()/skills (user, default ~/.pi/agent/skills — Pi's standard)
8
- * - ~/.agents/skills (user, cross-tool Agent Skills spec)
9
- * - ~/.pi/skills (legacy global, pre-Pi)
10
- *
11
- * Layout per root:
12
- * - <root>/<name>.md (flat file at the top level)
13
- * - <root>/.../<name>/SKILL.md (directory skill, may be nested — Pi's standard)
14
- *
15
- * Recursion skips dotfile entries and node_modules. A directory that itself contains
16
- * SKILL.md is a skill — we don't descend into it (Pi: skills don't nest).
17
- *
18
- * Symlinks are rejected for security (deviation from Pi, which follows them).
19
- */
20
- export interface PreloadedSkill {
21
- name: string;
22
- content: string;
23
- }
24
- export declare function preloadSkills(skillNames: string[], cwd: string): PreloadedSkill[];
25
- //# sourceMappingURL=skill-loader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill-loader.d.ts","sourceRoot":"","sources":["../src/skill-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AASH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,cAAc,EAAE,CAEjF"}