@agimon-ai/doompi-ui 0.0.1-alpha.2 → 0.0.1-alpha.21

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 (327) hide show
  1. package/README.md +21 -18
  2. package/dist/_virtual/_rolldown/runtime.cjs +1 -1
  3. package/dist/adapters/pi/extension.cjs +2 -0
  4. package/dist/adapters/pi/extension.cjs.map +1 -0
  5. package/dist/adapters/pi/extension.d.cts +7 -0
  6. package/dist/adapters/pi/extension.d.cts.map +1 -0
  7. package/dist/adapters/pi/extension.d.mts +7 -0
  8. package/dist/adapters/pi/extension.d.mts.map +1 -0
  9. package/dist/adapters/pi/extension.mjs +2 -0
  10. package/dist/adapters/pi/extension.mjs.map +1 -0
  11. package/dist/adapters/pi/extensionName.cjs +2 -0
  12. package/dist/adapters/pi/extensionName.cjs.map +1 -0
  13. package/dist/adapters/pi/extensionName.d.cts +16 -0
  14. package/dist/adapters/pi/extensionName.d.cts.map +1 -0
  15. package/dist/adapters/pi/extensionName.d.mts +16 -0
  16. package/dist/adapters/pi/extensionName.d.mts.map +1 -0
  17. package/dist/adapters/pi/extensionName.mjs +2 -0
  18. package/dist/adapters/pi/extensionName.mjs.map +1 -0
  19. package/dist/adapters/pi/toolOverrides.cjs +2 -0
  20. package/dist/adapters/pi/toolOverrides.cjs.map +1 -0
  21. package/dist/adapters/pi/toolOverrides.mjs +2 -0
  22. package/dist/adapters/pi/toolOverrides.mjs.map +1 -0
  23. package/dist/adapters/telemetry/logSinkTelemetry.cjs +2 -0
  24. package/dist/adapters/telemetry/logSinkTelemetry.cjs.map +1 -0
  25. package/dist/adapters/telemetry/logSinkTelemetry.d.cts +29 -0
  26. package/dist/adapters/telemetry/logSinkTelemetry.d.cts.map +1 -0
  27. package/dist/adapters/telemetry/logSinkTelemetry.d.mts +29 -0
  28. package/dist/adapters/telemetry/logSinkTelemetry.d.mts.map +1 -0
  29. package/dist/adapters/telemetry/logSinkTelemetry.mjs +2 -0
  30. package/dist/adapters/telemetry/logSinkTelemetry.mjs.map +1 -0
  31. package/dist/components/configOverlay.cjs +0 -0
  32. package/dist/components/configOverlay.d.cts +0 -0
  33. package/dist/components/configOverlay.d.mts +0 -0
  34. package/dist/components/configOverlay.mjs +0 -0
  35. package/dist/components/doomEditor.cjs +1 -2
  36. package/dist/components/doomEditor.d.cts +2 -59
  37. package/dist/components/doomEditor.d.mts +2 -59
  38. package/dist/components/doomEditor.mjs +1 -2
  39. package/dist/components/doomFooter.cjs +1 -2
  40. package/dist/components/doomFooter.d.cts +2 -32
  41. package/dist/components/doomFooter.d.mts +2 -32
  42. package/dist/components/doomFooter.mjs +1 -2
  43. package/dist/components/doomHeader.cjs +1 -2
  44. package/dist/components/doomHeader.d.cts +2 -34
  45. package/dist/components/doomHeader.d.mts +2 -34
  46. package/dist/components/doomHeader.mjs +1 -2
  47. package/dist/components/doomOverlay.cjs +1 -2
  48. package/dist/components/doomOverlay.d.cts +2 -79
  49. package/dist/components/doomOverlay.d.mts +2 -79
  50. package/dist/components/doomOverlay.mjs +1 -2
  51. package/dist/components/leaderHints.cjs +1 -2
  52. package/dist/components/leaderHints.d.cts +2 -37
  53. package/dist/components/leaderHints.d.mts +2 -37
  54. package/dist/components/leaderHints.mjs +1 -2
  55. package/dist/components/toolsOverlay.cjs +1 -2
  56. package/dist/components/toolsOverlay.d.cts +2 -29
  57. package/dist/components/toolsOverlay.d.mts +2 -29
  58. package/dist/components/toolsOverlay.mjs +1 -2
  59. package/dist/config.cjs +1 -2
  60. package/dist/config.d.cts +2 -5
  61. package/dist/config.d.mts +2 -5
  62. package/dist/config.mjs +1 -2
  63. package/dist/extension.cjs +1 -2
  64. package/dist/extension.d.cts +2 -7
  65. package/dist/extension.d.mts +2 -7
  66. package/dist/extension.mjs +1 -2
  67. package/dist/extensionName.cjs +1 -2
  68. package/dist/extensionName.d.cts +2 -5
  69. package/dist/extensionName.d.mts +2 -5
  70. package/dist/extensionName.mjs +1 -2
  71. package/dist/extensions/pi.cjs +1 -1
  72. package/dist/extensions/pi.cjs.map +1 -1
  73. package/dist/extensions/pi.d.cts +1 -1
  74. package/dist/extensions/pi.d.mts +1 -1
  75. package/dist/extensions/pi.mjs +1 -1
  76. package/dist/extensions/pi.mjs.map +1 -1
  77. package/dist/footer.cjs +1 -2
  78. package/dist/footer.d.cts +2 -5
  79. package/dist/footer.d.mts +2 -5
  80. package/dist/footer.mjs +1 -2
  81. package/dist/harnessMetadata.cjs +1 -2
  82. package/dist/harnessMetadata.d.cts +2 -21
  83. package/dist/harnessMetadata.d.mts +2 -21
  84. package/dist/harnessMetadata.mjs +1 -2
  85. package/dist/index.cjs +1 -1
  86. package/dist/index.d.cts +14 -25
  87. package/dist/index.d.mts +14 -25
  88. package/dist/index.mjs +1 -1
  89. package/dist/leaderRegistry.cjs +1 -2
  90. package/dist/leaderRegistry.d.cts +2 -58
  91. package/dist/leaderRegistry.d.mts +2 -58
  92. package/dist/leaderRegistry.mjs +1 -2
  93. package/dist/logSinkTelemetry.cjs +1 -2
  94. package/dist/logSinkTelemetry.d.cts +2 -29
  95. package/dist/logSinkTelemetry.d.mts +2 -29
  96. package/dist/logSinkTelemetry.mjs +1 -2
  97. package/dist/rendering.cjs +1 -2
  98. package/dist/rendering.d.cts +2 -11
  99. package/dist/rendering.d.mts +2 -11
  100. package/dist/rendering.mjs +1 -2
  101. package/dist/services/leader/leaderRegistry.cjs +2 -0
  102. package/dist/services/leader/leaderRegistry.cjs.map +1 -0
  103. package/dist/services/leader/leaderRegistry.d.cts +58 -0
  104. package/dist/services/leader/leaderRegistry.d.cts.map +1 -0
  105. package/dist/services/leader/leaderRegistry.d.mts +58 -0
  106. package/dist/services/leader/leaderRegistry.d.mts.map +1 -0
  107. package/dist/services/leader/leaderRegistry.mjs +2 -0
  108. package/dist/services/leader/leaderRegistry.mjs.map +1 -0
  109. package/dist/services/state/uiState.cjs +2 -0
  110. package/dist/services/state/uiState.cjs.map +1 -0
  111. package/dist/services/state/uiState.d.cts +38 -0
  112. package/dist/services/state/uiState.d.cts.map +1 -0
  113. package/dist/services/state/uiState.d.mts +38 -0
  114. package/dist/services/state/uiState.d.mts.map +1 -0
  115. package/dist/services/state/uiState.mjs +2 -0
  116. package/dist/services/state/uiState.mjs.map +1 -0
  117. package/dist/services/tools/toolInventory.cjs +2 -0
  118. package/dist/services/tools/toolInventory.cjs.map +1 -0
  119. package/dist/services/tools/toolInventory.d.cts +51 -0
  120. package/dist/services/tools/toolInventory.d.cts.map +1 -0
  121. package/dist/services/tools/toolInventory.d.mts +51 -0
  122. package/dist/services/tools/toolInventory.d.mts.map +1 -0
  123. package/dist/services/tools/toolInventory.mjs +2 -0
  124. package/dist/services/tools/toolInventory.mjs.map +1 -0
  125. package/dist/skills.cjs +1 -1
  126. package/dist/skills.d.cts +2 -1
  127. package/dist/skills.d.mts +2 -1
  128. package/dist/skills.mjs +1 -1
  129. package/dist/theme.cjs +1 -2
  130. package/dist/theme.d.cts +2 -95
  131. package/dist/theme.d.mts +2 -95
  132. package/dist/theme.mjs +1 -2
  133. package/dist/toolChrome.cjs +1 -0
  134. package/dist/toolChrome.d.cts +2 -0
  135. package/dist/toolChrome.d.mts +2 -0
  136. package/dist/toolChrome.mjs +1 -0
  137. package/dist/toolInventory.cjs +1 -2
  138. package/dist/toolInventory.d.cts +2 -40
  139. package/dist/toolInventory.d.mts +2 -40
  140. package/dist/toolInventory.mjs +1 -2
  141. package/dist/tui/builtinToolRender.cjs +14 -0
  142. package/dist/tui/builtinToolRender.cjs.map +1 -0
  143. package/dist/tui/builtinToolRender.mjs +14 -0
  144. package/dist/tui/builtinToolRender.mjs.map +1 -0
  145. package/dist/tui/codeGutter.cjs +2 -0
  146. package/dist/tui/codeGutter.cjs.map +1 -0
  147. package/dist/tui/codeGutter.mjs +2 -0
  148. package/dist/tui/codeGutter.mjs.map +1 -0
  149. package/dist/tui/configOverlay.cjs +0 -0
  150. package/dist/tui/configOverlay.cjs.map +1 -0
  151. package/dist/tui/configOverlay.d.cts +0 -0
  152. package/dist/tui/configOverlay.d.cts.map +1 -0
  153. package/dist/tui/configOverlay.d.mts +0 -0
  154. package/dist/tui/configOverlay.d.mts.map +1 -0
  155. package/dist/tui/configOverlay.mjs +0 -0
  156. package/dist/tui/configOverlay.mjs.map +1 -0
  157. package/dist/tui/diffRender.cjs +4 -0
  158. package/dist/tui/diffRender.cjs.map +1 -0
  159. package/dist/tui/diffRender.mjs +4 -0
  160. package/dist/tui/diffRender.mjs.map +1 -0
  161. package/dist/tui/doomEditor.cjs +2 -0
  162. package/dist/tui/doomEditor.cjs.map +1 -0
  163. package/dist/tui/doomEditor.d.cts +63 -0
  164. package/dist/tui/doomEditor.d.cts.map +1 -0
  165. package/dist/tui/doomEditor.d.mts +63 -0
  166. package/dist/tui/doomEditor.d.mts.map +1 -0
  167. package/dist/tui/doomEditor.mjs +2 -0
  168. package/dist/tui/doomEditor.mjs.map +1 -0
  169. package/dist/tui/doomFooter.cjs +2 -0
  170. package/dist/tui/doomFooter.cjs.map +1 -0
  171. package/dist/tui/doomFooter.d.cts +32 -0
  172. package/dist/tui/doomFooter.d.cts.map +1 -0
  173. package/dist/tui/doomFooter.d.mts +32 -0
  174. package/dist/tui/doomFooter.d.mts.map +1 -0
  175. package/dist/tui/doomFooter.mjs +2 -0
  176. package/dist/tui/doomFooter.mjs.map +1 -0
  177. package/dist/tui/doomHeader.cjs +2 -0
  178. package/dist/tui/doomHeader.cjs.map +1 -0
  179. package/dist/tui/doomHeader.d.cts +34 -0
  180. package/dist/tui/doomHeader.d.cts.map +1 -0
  181. package/dist/tui/doomHeader.d.mts +34 -0
  182. package/dist/tui/doomHeader.d.mts.map +1 -0
  183. package/dist/tui/doomHeader.mjs +2 -0
  184. package/dist/tui/doomHeader.mjs.map +1 -0
  185. package/dist/tui/doomOverlay.cjs +2 -0
  186. package/dist/tui/doomOverlay.cjs.map +1 -0
  187. package/dist/tui/doomOverlay.d.cts +84 -0
  188. package/dist/tui/doomOverlay.d.cts.map +1 -0
  189. package/dist/tui/doomOverlay.d.mts +84 -0
  190. package/dist/tui/doomOverlay.d.mts.map +1 -0
  191. package/dist/tui/doomOverlay.mjs +2 -0
  192. package/dist/tui/doomOverlay.mjs.map +1 -0
  193. package/dist/tui/leaderHints.cjs +2 -0
  194. package/dist/tui/leaderHints.cjs.map +1 -0
  195. package/dist/tui/leaderHints.d.cts +36 -0
  196. package/dist/tui/leaderHints.d.cts.map +1 -0
  197. package/dist/tui/leaderHints.d.mts +36 -0
  198. package/dist/tui/leaderHints.d.mts.map +1 -0
  199. package/dist/tui/leaderHints.mjs +2 -0
  200. package/dist/tui/leaderHints.mjs.map +1 -0
  201. package/dist/tui/rendering.cjs +2 -0
  202. package/dist/tui/rendering.cjs.map +1 -0
  203. package/dist/tui/rendering.d.cts +16 -0
  204. package/dist/tui/rendering.d.cts.map +1 -0
  205. package/dist/tui/rendering.d.mts +16 -0
  206. package/dist/tui/rendering.d.mts.map +1 -0
  207. package/dist/tui/rendering.mjs +2 -0
  208. package/dist/tui/rendering.mjs.map +1 -0
  209. package/dist/tui/theme.cjs +2 -0
  210. package/dist/tui/theme.cjs.map +1 -0
  211. package/dist/tui/theme.d.cts +103 -0
  212. package/dist/tui/theme.d.cts.map +1 -0
  213. package/dist/tui/theme.d.mts +103 -0
  214. package/dist/tui/theme.d.mts.map +1 -0
  215. package/dist/tui/theme.mjs +2 -0
  216. package/dist/tui/theme.mjs.map +1 -0
  217. package/dist/tui/toolChrome.cjs +2 -0
  218. package/dist/tui/toolChrome.cjs.map +1 -0
  219. package/dist/tui/toolChrome.d.cts +30 -0
  220. package/dist/tui/toolChrome.d.cts.map +1 -0
  221. package/dist/tui/toolChrome.d.mts +30 -0
  222. package/dist/tui/toolChrome.d.mts.map +1 -0
  223. package/dist/tui/toolChrome.mjs +2 -0
  224. package/dist/tui/toolChrome.mjs.map +1 -0
  225. package/dist/tui/toolsOverlay.cjs +2 -0
  226. package/dist/tui/toolsOverlay.cjs.map +1 -0
  227. package/dist/tui/toolsOverlay.d.cts +29 -0
  228. package/dist/tui/toolsOverlay.d.cts.map +1 -0
  229. package/dist/tui/toolsOverlay.d.mts +29 -0
  230. package/dist/tui/toolsOverlay.d.mts.map +1 -0
  231. package/dist/tui/toolsOverlay.mjs +2 -0
  232. package/dist/tui/toolsOverlay.mjs.map +1 -0
  233. package/dist/types/harnessMetadata.cjs +2 -0
  234. package/dist/types/harnessMetadata.cjs.map +1 -0
  235. package/dist/types/harnessMetadata.d.cts +21 -0
  236. package/dist/types/harnessMetadata.d.cts.map +1 -0
  237. package/dist/types/harnessMetadata.d.mts +21 -0
  238. package/dist/types/harnessMetadata.d.mts.map +1 -0
  239. package/dist/types/harnessMetadata.mjs +2 -0
  240. package/dist/types/harnessMetadata.mjs.map +1 -0
  241. package/dist/uiState.cjs +1 -2
  242. package/dist/uiState.d.cts +2 -37
  243. package/dist/uiState.d.mts +2 -37
  244. package/dist/uiState.mjs +1 -2
  245. package/package.json +19 -12
  246. package/themes/doom-pi-dark.json +32 -30
  247. package/dist/_virtual/_rolldown/runtime.mjs +0 -1
  248. package/dist/components/configOverlay.cjs.map +0 -1
  249. package/dist/components/configOverlay.d.cts.map +0 -1
  250. package/dist/components/configOverlay.d.mts.map +0 -1
  251. package/dist/components/configOverlay.mjs.map +0 -1
  252. package/dist/components/doomEditor.cjs.map +0 -1
  253. package/dist/components/doomEditor.d.cts.map +0 -1
  254. package/dist/components/doomEditor.d.mts.map +0 -1
  255. package/dist/components/doomEditor.mjs.map +0 -1
  256. package/dist/components/doomFooter.cjs.map +0 -1
  257. package/dist/components/doomFooter.d.cts.map +0 -1
  258. package/dist/components/doomFooter.d.mts.map +0 -1
  259. package/dist/components/doomFooter.mjs.map +0 -1
  260. package/dist/components/doomHeader.cjs.map +0 -1
  261. package/dist/components/doomHeader.d.cts.map +0 -1
  262. package/dist/components/doomHeader.d.mts.map +0 -1
  263. package/dist/components/doomHeader.mjs.map +0 -1
  264. package/dist/components/doomOverlay.cjs.map +0 -1
  265. package/dist/components/doomOverlay.d.cts.map +0 -1
  266. package/dist/components/doomOverlay.d.mts.map +0 -1
  267. package/dist/components/doomOverlay.mjs.map +0 -1
  268. package/dist/components/leaderHints.cjs.map +0 -1
  269. package/dist/components/leaderHints.d.cts.map +0 -1
  270. package/dist/components/leaderHints.d.mts.map +0 -1
  271. package/dist/components/leaderHints.mjs.map +0 -1
  272. package/dist/components/toolsOverlay.cjs.map +0 -1
  273. package/dist/components/toolsOverlay.d.cts.map +0 -1
  274. package/dist/components/toolsOverlay.d.mts.map +0 -1
  275. package/dist/components/toolsOverlay.mjs.map +0 -1
  276. package/dist/config.cjs.map +0 -1
  277. package/dist/config.d.cts.map +0 -1
  278. package/dist/config.d.mts.map +0 -1
  279. package/dist/config.mjs.map +0 -1
  280. package/dist/extension.cjs.map +0 -1
  281. package/dist/extension.d.cts.map +0 -1
  282. package/dist/extension.d.mts.map +0 -1
  283. package/dist/extension.mjs.map +0 -1
  284. package/dist/extensionName.cjs.map +0 -1
  285. package/dist/extensionName.d.cts.map +0 -1
  286. package/dist/extensionName.d.mts.map +0 -1
  287. package/dist/extensionName.mjs.map +0 -1
  288. package/dist/footer.cjs.map +0 -1
  289. package/dist/footer.d.cts.map +0 -1
  290. package/dist/footer.d.mts.map +0 -1
  291. package/dist/footer.mjs.map +0 -1
  292. package/dist/harnessMetadata.cjs.map +0 -1
  293. package/dist/harnessMetadata.d.cts.map +0 -1
  294. package/dist/harnessMetadata.d.mts.map +0 -1
  295. package/dist/harnessMetadata.mjs.map +0 -1
  296. package/dist/leaderRegistry.cjs.map +0 -1
  297. package/dist/leaderRegistry.d.cts.map +0 -1
  298. package/dist/leaderRegistry.d.mts.map +0 -1
  299. package/dist/leaderRegistry.mjs.map +0 -1
  300. package/dist/logSinkTelemetry.cjs.map +0 -1
  301. package/dist/logSinkTelemetry.d.cts.map +0 -1
  302. package/dist/logSinkTelemetry.d.mts.map +0 -1
  303. package/dist/logSinkTelemetry.mjs.map +0 -1
  304. package/dist/mode.cjs +0 -2
  305. package/dist/mode.cjs.map +0 -1
  306. package/dist/mode.d.cts +0 -5
  307. package/dist/mode.d.cts.map +0 -1
  308. package/dist/mode.d.mts +0 -5
  309. package/dist/mode.d.mts.map +0 -1
  310. package/dist/mode.mjs +0 -2
  311. package/dist/mode.mjs.map +0 -1
  312. package/dist/rendering.cjs.map +0 -1
  313. package/dist/rendering.d.cts.map +0 -1
  314. package/dist/rendering.d.mts.map +0 -1
  315. package/dist/rendering.mjs.map +0 -1
  316. package/dist/theme.cjs.map +0 -1
  317. package/dist/theme.d.cts.map +0 -1
  318. package/dist/theme.d.mts.map +0 -1
  319. package/dist/theme.mjs.map +0 -1
  320. package/dist/toolInventory.cjs.map +0 -1
  321. package/dist/toolInventory.d.cts.map +0 -1
  322. package/dist/toolInventory.d.mts.map +0 -1
  323. package/dist/toolInventory.mjs.map +0 -1
  324. package/dist/uiState.cjs.map +0 -1
  325. package/dist/uiState.d.cts.map +0 -1
  326. package/dist/uiState.d.mts.map +0 -1
  327. package/dist/uiState.mjs.map +0 -1
@@ -1,29 +1,2 @@
1
- import { DoomOverlay, DoomOverlayChrome, DoomOverlayTui } from "./doomOverlay.mjs";
2
- import { ToolSource } from "../toolInventory.mjs";
3
- import { ExtensionContext, Theme } from "@earendil-works/pi-coding-agent";
4
- //#region src/components/toolsOverlay.d.ts
5
- declare class ToolsOverlayComponent extends DoomOverlay {
6
- private readonly sources;
7
- private readonly done;
8
- private selected;
9
- private bodyHeight;
10
- constructor(tui: DoomOverlayTui, theme: Theme, sources: readonly ToolSource[], done: (result: undefined) => void);
11
- /** Every source is always expanded: the source row is a heading, not a control. */
12
- private rows;
13
- private currentTool;
14
- /** Source rows are labels, so the cursor steps over them to the next tool. */
15
- private move;
16
- handleInput(data: string): void;
17
- private treeLines;
18
- private field;
19
- private toolLines;
20
- private detailLines;
21
- protected getChrome(): DoomOverlayChrome;
22
- private hintLine;
23
- protected renderBody(width: number, height: number): string[];
24
- private renderStacked;
25
- }
26
- declare function openToolsOverlay(ctx: ExtensionContext, sources: readonly ToolSource[]): Promise<void>;
27
- //#endregion
28
- export { ToolsOverlayComponent, openToolsOverlay };
29
- //# sourceMappingURL=toolsOverlay.d.mts.map
1
+ import { ToolsOverlayComponent, openToolsOverlay } from "../tui/toolsOverlay.mjs";
2
+ export { ToolsOverlayComponent, openToolsOverlay };
@@ -1,2 +1 @@
1
- import{DOOM_FULLSCREEN_UI_OPTIONS as e,DOOM_OVERLAY_ACCENT as t,DoomOverlay as n}from"./doomOverlay.mjs";import{matchesKey as r,truncateToWidth as i,visibleWidth as a}from"@earendil-works/pi-tui";const o=[[`↑↓`,`move`],[`esc`,`close`]],s=`No tools are registered in this session.`;function c(e,t){let n=i(e,Math.max(0,t),`…`);return n+` `.repeat(Math.max(0,t-a(n)))}function l(e,t,n){let r=a(t),i=Math.max(0,n-r-1);return c(e,i)+` `.repeat(Math.max(1,n-i-r))+c(t,r)}function u(e,t){if(t<=0)return[];let n=[],r=``;for(let i of e.split(/\s+/).filter(Boolean))r.length===0?r=i:r.length+1+i.length<=t?r+=` ${i}`:(n.push(r),r=i);return r.length>0&&n.push(r),n}function d(e){if(typeof e!=`object`||!e)return[];let t=e;if(typeof t.properties!=`object`||t.properties===null)return[];let n=new Set(Array.isArray(t.required)?t.required.filter(e=>typeof e==`string`):[]);return Object.entries(t.properties).map(([e,t])=>{let r=typeof t==`object`&&t?t.type:void 0;return{name:e,type:typeof r==`string`?r:``,required:n.has(e)}})}function f(e){return e.tools.reduce((e,t)=>e+ +!!t.active,0)}var p=class extends n{sources;done;selected;bodyHeight=1;constructor(e,t,n,r){super(e,t),this.sources=n,this.done=r,this.selected=this.rows().findIndex(e=>e.kind===`tool`)}rows(){let e=[];for(let t of this.sources){e.push({kind:`source`,source:t});for(let n of t.tools)e.push({kind:`tool`,source:t,tool:n})}return e}currentTool(){let e=this.rows()[this.selected];return e?.kind===`tool`?e:void 0}move(e){let t=this.rows(),n=e<0?-1:1,r=this.selected;for(let i=Math.abs(e);i>0;--i){let e=r+n;for(;e>=0&&e<t.length&&t[e]?.kind!==`tool`;)e+=n;if(e<0||e>=t.length)break;r=e}r!==this.selected&&(this.selected=r,this.tui.requestRender())}handleInput(e){if(r(e,`escape`)||r(e,`ctrl+c`)||e===`q`){this.done(void 0);return}if(r(e,`up`)||e===`k`)return this.move(-1);if(r(e,`down`)||e===`j`)return this.move(1);if(r(e,`pageUp`))return this.move(-Math.max(1,this.bodyHeight-1));if(r(e,`pageDown`))return this.move(Math.max(1,this.bodyHeight-1))}treeLines(e){let t=this.rows(),n=[this.theme.bold(`SOURCES`),``];if(t.length===0)return n.push(this.theme.fg(`dim`,s)),n;let r=Math.max(1,this.bodyHeight-n.length),i=Math.max(0,Math.min(this.selected,t.length-1)),a=Math.max(0,Math.min(i-r+1,Math.max(0,t.length-r)));for(let[o,s]of t.slice(a,a+r).entries()){let t=s.kind===`source`?l(this.theme.bold(s.source.label),this.theme.fg(`dim`,s.source.status??String(f(s.source))),e):this.theme.fg(s.tool.active?`text`:`dim`,c(` ${s.tool.name}`,e));n.push(a+o===i?this.theme.bg(`selectedBg`,c(t,e)):t)}return n}field(e,t,n){let r=Math.max(1,n-12);return u(t,r).map((t,n)=>`${this.theme.fg(`dim`,c(n===0?e:``,12))}${c(t,r)}`)}toolLines(e,t,n){let r=[this.theme.bold(t.name),``];r.push(...this.field(`source`,e.label,n)),e.detail&&r.push(...this.field(`registered`,e.detail,n)),r.push(...this.field(`status`,t.active?this.theme.fg(`success`,`active`):this.theme.fg(`dim`,`inactive`),n)),t.description&&(r.push(``),r.push(...u(t.description,n)));let i=d(t.parameters);if(i.length>0){r.push(``),r.push(this.theme.fg(`dim`,`PARAMETERS`));for(let e of i){let t=e.required?`${e.name}${this.theme.fg(`warning`,` *`)}`:e.name;r.push(l(t,this.theme.fg(`dim`,e.type),n))}}for(let e of t.promptGuidelines??[])r.push(``),r.push(...u(e,n));return r}detailLines(e){let t=this.currentTool();return t?this.toolLines(t.source,t.tool,e):[this.theme.fg(`dim`,s)]}getChrome(){let e=`${this.sources.reduce((e,t)=>e+f(t),0)}/${this.sources.reduce((e,t)=>e+t.tools.length,0)}`;return{title:`TOOLS`,accent:t,breadcrumb:`SPC › e / t · tools`,headerRight:`${e} tools · ${this.sources.length} sources · esc close`,footer:this.hintLine()}}hintLine(){return o.map(([e,t])=>`${this.theme.bg(`selectedBg`,this.theme.fg(`text`,` ${e} `))}${this.theme.fg(`dim`,` ${t}`)}`).join(this.theme.fg(`dim`,` `))}renderBody(e,t){if(this.bodyHeight=t,e<48)return this.renderStacked(e,t);let n=Math.max(18,Math.floor((e-1)*.3333333333333333)),r=Math.max(1,e-n-1),a=Math.max(1,n-1),o=Math.max(1,r-1),s=this.treeLines(a),l=this.detailLines(o),u=this.theme.fg(`borderMuted`,`│`);return Array.from({length:t},(t,n)=>{let r=`${c(s[n]??``,a)} ${u} ${c(l[n]??``,o)}`;return i(r,e,`…`)})}renderStacked(e,t){let n=Math.max(1,Math.floor((t-1)/2)),r=Math.max(0,t-n-1);this.bodyHeight=n;let i=this.treeLines(e),a=this.detailLines(e);return[...i.slice(0,n),...Array.from({length:Math.max(0,n-i.length)},()=>``),this.theme.fg(`borderMuted`,`─`.repeat(e)),...a.slice(0,r)]}};async function m(t,n){await t.ui.custom((e,t,r,i)=>new p(e,t,n,i),e)}export{p as ToolsOverlayComponent,m as openToolsOverlay};
2
- //# sourceMappingURL=toolsOverlay.mjs.map
1
+ import{ToolsOverlayComponent as e,openToolsOverlay as t}from"../tui/toolsOverlay.mjs";export{e as ToolsOverlayComponent,t as openToolsOverlay};
package/dist/config.cjs CHANGED
@@ -1,2 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./_virtual/_rolldown/runtime.cjs");var t=e.__exportAll({});e.__reExport(t,require("@agimon-ai/doompi-extension-contracts/config")),Object.defineProperty(exports,"config_exports",{enumerable:!0,get:function(){return t}});var n=require("@agimon-ai/doompi-extension-contracts/config");Object.keys(n).forEach(function(e){e!=="default"&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:function(){return n[e]}})});
2
- //# sourceMappingURL=config.cjs.map
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@agimon-ai/doompi-extension-contracts/config");Object.defineProperty(exports,"CONFIG_ACTION",{enumerable:!0,get:function(){return e.CONFIG_ACTION}}),Object.defineProperty(exports,"ConfigActionSchema",{enumerable:!0,get:function(){return e.ConfigActionSchema}}),Object.defineProperty(exports,"ConfigChanged",{enumerable:!0,get:function(){return e.ConfigChanged}}),Object.defineProperty(exports,"ConfigChoiceSchema",{enumerable:!0,get:function(){return e.ConfigChoiceSchema}}),Object.defineProperty(exports,"ConfigDiscovery",{enumerable:!0,get:function(){return e.ConfigDiscovery}}),Object.defineProperty(exports,"ConfigFieldKindSchema",{enumerable:!0,get:function(){return e.ConfigFieldKindSchema}}),Object.defineProperty(exports,"ConfigFieldSchema",{enumerable:!0,get:function(){return e.ConfigFieldSchema}}),Object.defineProperty(exports,"ConfigInvoked",{enumerable:!0,get:function(){return e.ConfigInvoked}}),Object.defineProperty(exports,"ConfigProgressSchema",{enumerable:!0,get:function(){return e.ConfigProgressSchema}}),Object.defineProperty(exports,"ConfigRegistration",{enumerable:!0,get:function(){return e.ConfigRegistration}}),Object.defineProperty(exports,"ConfigSectionSchema",{enumerable:!0,get:function(){return e.ConfigSectionSchema}}),Object.defineProperty(exports,"ConfigSourceSchema",{enumerable:!0,get:function(){return e.ConfigSourceSchema}}),Object.defineProperty(exports,"ConfigStatusSchema",{enumerable:!0,get:function(){return e.ConfigStatusSchema}}),Object.defineProperty(exports,"ConfigStepSchema",{enumerable:!0,get:function(){return e.ConfigStepSchema}}),Object.defineProperty(exports,"ConfigUnregistration",{enumerable:!0,get:function(){return e.ConfigUnregistration}}),Object.defineProperty(exports,"DoomConfigRegistry",{enumerable:!0,get:function(){return e.DoomConfigRegistry}}),Object.defineProperty(exports,"registerConfigProvider",{enumerable:!0,get:function(){return e.registerConfigProvider}}),Object.defineProperty(exports,"registerDoomConfigContribution",{enumerable:!0,get:function(){return e.registerDoomConfigContribution}});
package/dist/config.d.cts CHANGED
@@ -1,5 +1,2 @@
1
- export * from "@agimon-ai/doompi-extension-contracts/config";
2
- import * as import__agimon_ai_doompi_extension_contracts_config from "@agimon-ai/doompi-extension-contracts/config";
3
- //#endregion
4
- export { import__agimon_ai_doompi_extension_contracts_config as config_d_exports };
5
- //# sourceMappingURL=config.d.cts.map
1
+ import { CONFIG_ACTION, ConfigAction, ConfigActionSchema, ConfigChanged, ConfigChoice, ConfigChoiceSchema, ConfigDiscovery, ConfigField, ConfigFieldKind, ConfigFieldKindSchema, ConfigFieldSchema, ConfigInvoked, ConfigProgress, ConfigProgressSchema, ConfigProvider, ConfigProviderHandle, ConfigRegistration, ConfigSection, ConfigSectionSchema, ConfigSnapshot, ConfigSourceRef, ConfigSourceSchema, ConfigStatus, ConfigStatusSchema, ConfigStep, ConfigStepSchema, ConfigUnregistration, DoomConfigActionInput, DoomConfigContributionHandle, DoomConfigContributionOptions, DoomConfigInvocation, DoomConfigRegistry, DoomConfigSectionView, DoomExtensionContext, DoomExtensionHost, registerConfigProvider, registerDoomConfigContribution } from "@agimon-ai/doompi-extension-contracts/config";
2
+ export { CONFIG_ACTION, type ConfigAction, ConfigActionSchema, ConfigChanged, type ConfigChoice, ConfigChoiceSchema, ConfigDiscovery, type ConfigField, type ConfigFieldKind, ConfigFieldKindSchema, ConfigFieldSchema, ConfigInvoked, type ConfigProgress, ConfigProgressSchema, type ConfigProvider, type ConfigProviderHandle, ConfigRegistration, type ConfigSection, ConfigSectionSchema, type ConfigSnapshot, type ConfigSourceRef, ConfigSourceSchema, type ConfigStatus, ConfigStatusSchema, type ConfigStep, ConfigStepSchema, ConfigUnregistration, type DoomConfigActionInput, type DoomConfigContributionHandle, type DoomConfigContributionOptions, type DoomConfigInvocation, DoomConfigRegistry, type DoomConfigSectionView, type DoomExtensionContext, type DoomExtensionHost, registerConfigProvider, registerDoomConfigContribution };
package/dist/config.d.mts CHANGED
@@ -1,5 +1,2 @@
1
- export * from "@agimon-ai/doompi-extension-contracts/config";
2
- import * as import__agimon_ai_doompi_extension_contracts_config from "@agimon-ai/doompi-extension-contracts/config";
3
- //#endregion
4
- export { import__agimon_ai_doompi_extension_contracts_config as config_d_exports };
5
- //# sourceMappingURL=config.d.mts.map
1
+ import { CONFIG_ACTION, ConfigAction, ConfigActionSchema, ConfigChanged, ConfigChoice, ConfigChoiceSchema, ConfigDiscovery, ConfigField, ConfigFieldKind, ConfigFieldKindSchema, ConfigFieldSchema, ConfigInvoked, ConfigProgress, ConfigProgressSchema, ConfigProvider, ConfigProviderHandle, ConfigRegistration, ConfigSection, ConfigSectionSchema, ConfigSnapshot, ConfigSourceRef, ConfigSourceSchema, ConfigStatus, ConfigStatusSchema, ConfigStep, ConfigStepSchema, ConfigUnregistration, DoomConfigActionInput, DoomConfigContributionHandle, DoomConfigContributionOptions, DoomConfigInvocation, DoomConfigRegistry, DoomConfigSectionView, DoomExtensionContext, DoomExtensionHost, registerConfigProvider, registerDoomConfigContribution } from "@agimon-ai/doompi-extension-contracts/config";
2
+ export { CONFIG_ACTION, type ConfigAction, ConfigActionSchema, ConfigChanged, type ConfigChoice, ConfigChoiceSchema, ConfigDiscovery, type ConfigField, type ConfigFieldKind, ConfigFieldKindSchema, ConfigFieldSchema, ConfigInvoked, type ConfigProgress, ConfigProgressSchema, type ConfigProvider, type ConfigProviderHandle, ConfigRegistration, type ConfigSection, ConfigSectionSchema, type ConfigSnapshot, type ConfigSourceRef, ConfigSourceSchema, type ConfigStatus, ConfigStatusSchema, type ConfigStep, ConfigStepSchema, ConfigUnregistration, type DoomConfigActionInput, type DoomConfigContributionHandle, type DoomConfigContributionOptions, type DoomConfigInvocation, DoomConfigRegistry, type DoomConfigSectionView, type DoomExtensionContext, type DoomExtensionHost, registerConfigProvider, registerDoomConfigContribution };
package/dist/config.mjs CHANGED
@@ -1,2 +1 @@
1
- import{__exportAll as e,__reExport as t}from"./_virtual/_rolldown/runtime.mjs";export*from"@agimon-ai/doompi-extension-contracts/config";var n=e({});import*as r from"@agimon-ai/doompi-extension-contracts/config";t(n,r);export{n as config_exports};
2
- //# sourceMappingURL=config.mjs.map
1
+ import{CONFIG_ACTION as e,ConfigActionSchema as t,ConfigChanged as n,ConfigChoiceSchema as r,ConfigDiscovery as i,ConfigFieldKindSchema as a,ConfigFieldSchema as o,ConfigInvoked as s,ConfigProgressSchema as c,ConfigRegistration as l,ConfigSectionSchema as u,ConfigSourceSchema as d,ConfigStatusSchema as f,ConfigStepSchema as p,ConfigUnregistration as m,DoomConfigRegistry as h,registerConfigProvider as g,registerDoomConfigContribution as _}from"@agimon-ai/doompi-extension-contracts/config";export{e as CONFIG_ACTION,t as ConfigActionSchema,n as ConfigChanged,r as ConfigChoiceSchema,i as ConfigDiscovery,a as ConfigFieldKindSchema,o as ConfigFieldSchema,s as ConfigInvoked,c as ConfigProgressSchema,l as ConfigRegistration,u as ConfigSectionSchema,d as ConfigSourceSchema,f as ConfigStatusSchema,p as ConfigStepSchema,m as ConfigUnregistration,h as DoomConfigRegistry,g as registerConfigProvider,_ as registerDoomConfigContribution};
@@ -1,2 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./_virtual/_rolldown/runtime.cjs"),t=require("./leaderRegistry.cjs"),n=require("./components/doomEditor.cjs"),r=require("./components/doomFooter.cjs"),i=require("./components/doomHeader.cjs"),a=require("./components/leaderHints.cjs"),o=require("./config.cjs"),s=require("./footer.cjs"),c=require("./logSinkTelemetry.cjs");require("./theme.cjs");const l=require("./uiState.cjs"),u=require("./components/configOverlay.cjs"),d=require("./components/toolsOverlay.cjs"),f=require("./mode.cjs"),p=require("./toolInventory.cjs");let m=require("node:path");m=e.__toESM(m,1);let h=require("@agimon-ai/doompi-extension-contracts/leader"),g=require("@agimon-ai/doompi-extension-contracts/mcp-status"),_=require("@agimon-ai/doompi-extension-contracts/protocol");const v=`doom-pi-leader`,y=`belowEditor`,b=`warning`,x=`doom-pi`,S=new Set([`hotkeys`]);function C(e,t){let n=e.trim().replace(/\s+/g,` `);if(!n)return;let r=n.slice(0,64).trimEnd();return`${x} · ${r} · ${m.default.basename(t)||t}`}function w(e,w=c.createUiTelemetry()){let T=new l.DoomUiState,E=new s.footer_exports.DoomFooterStatusRegistry,D=new f.mode_exports.DoomModeStatusRegistry,O=new o.config_exports.DoomConfigRegistry,k=new t.DoomLeaderRegistry,A=new Set,j=new Map,M,N,P,F,I,L,R,z,B=new Map,V=0,H=0,U=!1,W,G,K=async()=>{if(W)try{return(await W.request(g.McpStatusQueryProtocol,{},{timeoutMs:250})).servers}catch{return}};e.registerCommand(`tools`,{description:`Browse the tools available in this session`,handler:async(t,n)=>{let r=await K(),i=p.buildToolSources({tools:e.getAllTools(),activeTools:e.getActiveTools(),...r?{mcpServers:r}:{}});await d.openToolsOverlay(n,i)}}),e.registerCommand(`config`,{description:`Browse and change the settings extensions contribute`,handler:async(e,t)=>{await u.openConfigOverlay(t,O)}});let q=e=>{for(let t of e){let e=t.bindingId?` (${t.bindingId})`:``,n=`Leader contribution from ${t.source}${e}: ${t.message}`;A.has(n)||(A.add(n),w.recordWarning(c.UI_EVENT.leaderContributionRejected,t.message,{"leader.source":t.source,...t.bindingId?{"leader.binding.id":t.bindingId}:{}}),N?.mode===`tui`&&N.ui.notify(n,b))}},J=(e,t)=>{let n=Symbol(e.source),r=t?e=>k.registerDeferred(e):e=>k.register(e),i=r(e);if(q(i.diagnostics),!i.accepted)return{update:()=>void 0,dispose:()=>void 0};j.set(e.source,n);let a=!1;return{update(t){a||j.get(e.source)!==n||q(r({source:e.source,bindings:t}).diagnostics)},dispose(){a||(a=!0,j.get(e.source)===n&&(j.delete(e.source),r({source:e.source,bindings:[]})))}}},Y=Object.freeze({register(e){let t=J(e,!1);return()=>t.dispose()}});G=(0,h.installDoomLeaderBootstrapHost)({register:e=>J(e,!0)}),e.on(`session_start`,(t,o)=>{N=o;let s=++H,l=(0,_.createProtocolRuntime)({bus:e.events,source:`@agimon-ai/doompi-ui`,sessionId:o.sessionManager.getSessionId()});if(W=l,q(k.flush()),P?.(),E.reset(),P=E.bind(l),F?.(),D.reset(),F=D.bind(l),L?.(),O.reset(),L=O.bind(l),R?.(),z?.(),R=l.provide(h.LeaderRegistrationProtocol,({contribution:e,generation:t},n)=>{if(n.source!==e.source)throw Error(`Leader contribution source does not match the registration envelope source.`);let r=`${n.source}:${t}:${++V}`,i={source:e.source,bindings:e.bindings.map(e=>{let[t,...n]=e.path;if(!t)throw Error(`Leader binding '${e.id}' has no path.`);return{...e,path:[t,...n]}})};return B.set(r,Y.register(i)),{handleId:r}}),z=l.provide(h.LeaderUnregistrationProtocol,({handleId:e})=>{let t=B.get(e);return t?(B.delete(e),t(),{removed:!0}):{removed:!1}}),U=o.sessionManager.getEntries().some(e=>e.type===`message`),o.mode!==`tui`)return;for(let e of A)o.ui.notify(e,b);let u=process.env.DOOMPI_THEME||`doom-pi-dark`,d=o.ui.setTheme(u);d.success||(o.ui.notify(`Could not apply Doom Pi theme: ${d.error}`,b),w.recordWarning(c.UI_EVENT.themeApplyFailed,d.error??`Unknown theme error`,{"ui.theme":u})),I?.(),I=D.subscribe(()=>T.setModes(D.getStatuses())),T.setModes(D.getStatuses()),o.ui.setTitle(`${x} · ${m.default.basename(o.cwd)||o.cwd} · pi/coding`),o.ui.setHeader((e,t)=>new i.DoomHeader(t,o.cwd,void 0,o,()=>e.terminal.rows)),o.ui.setFooter((e,t,n)=>(M=n,new r.DoomFooter(e,t,o,n,E,T))),o.ui.setEditorComponent((t,r,i)=>new n.DoomEditor(t,r,i,T,e=>{if(!e.active){o.ui.setWidget(v,void 0,{placement:y});return}o.ui.setWidget(v,(t,n)=>new a.LeaderHints(n,e,o,M,T.getModes()),{placement:y})},void 0,o.ui.theme,{registry:k,isCommandAvailable:t=>S.has(t)||e.getCommands().some(e=>e.name===t),onLeaderAction:(e,t)=>{if(N!==o||H!==s){o.ui.notify(`Leader action ${t} is unavailable.`,b);return}l.notify(h.LeaderActionInvoked,{source:e,action:t})},onUnavailableCommand:e=>{w.recordWarning(c.UI_EVENT.leaderCommandUnavailable,`Leader command /${e} is unavailable.`,{"ui.kind":`command`}),o.ui.notify(`Leader command /${e} is unavailable.`,b)},onUnavailableAction:e=>{w.recordWarning(c.UI_EVENT.leaderActionUnavailable,`Leader action ${e} is unavailable.`,{"ui.kind":`action`}),o.ui.notify(`Leader action ${e} is unavailable.`,b)}})),w.recordEvent(c.UI_EVENT.shellInstalled,{"ui.theme":u,"ui.theme.applied":d.success,"ui.leader.group.count":k.getGroup([])?.options.length??0})}),e.on(`input`,(e,t)=>{if(t.mode!==`tui`||e.source!==`interactive`||U)return;U=!0;let n=C(e.text,t.cwd);n&&t.ui.setTitle(n)}),e.on(`session_shutdown`,async(e,t)=>{++H,G?.(),G=void 0;for(let e of B.values())e();B.clear(),N=void 0,M=void 0,P?.(),P=void 0,E.reset(),F?.(),F=void 0,I?.(),I=void 0,D.reset(),L?.(),L=void 0,R?.(),R=void 0,z?.(),z=void 0,O.reset(),T.reset(),W=void 0,t.mode===`tui`&&t.ui.setWidget(v,void 0,{placement:y}),await w.shutdown()})}exports.doomPiUiExtension=w;
2
- //# sourceMappingURL=extension.cjs.map
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./adapters/pi/extension.cjs");exports.doomPiUiExtension=e.doomPiUiExtension;
@@ -1,7 +1,2 @@
1
- import { UiTelemetry } from "./logSinkTelemetry.cjs";
2
- import { ExtensionAPI } from "@earendil-works/pi-coding-agent";
3
- //#region src/extension.d.ts
4
- declare function doomPiUiExtension(pi: ExtensionAPI, telemetry?: UiTelemetry): void;
5
- //#endregion
6
- export { doomPiUiExtension };
7
- //# sourceMappingURL=extension.d.cts.map
1
+ import { doomPiUiExtension } from "./adapters/pi/extension.cjs";
2
+ export { doomPiUiExtension };
@@ -1,7 +1,2 @@
1
- import { UiTelemetry } from "./logSinkTelemetry.mjs";
2
- import { ExtensionAPI } from "@earendil-works/pi-coding-agent";
3
- //#region src/extension.d.ts
4
- declare function doomPiUiExtension(pi: ExtensionAPI, telemetry?: UiTelemetry): void;
5
- //#endregion
6
- export { doomPiUiExtension };
7
- //# sourceMappingURL=extension.d.mts.map
1
+ import { doomPiUiExtension } from "./adapters/pi/extension.mjs";
2
+ export { doomPiUiExtension };
@@ -1,2 +1 @@
1
- import{DoomLeaderRegistry as e}from"./leaderRegistry.mjs";import{DoomEditor as t}from"./components/doomEditor.mjs";import{DoomFooter as n}from"./components/doomFooter.mjs";import{DoomHeader as r}from"./components/doomHeader.mjs";import{LeaderHints as i}from"./components/leaderHints.mjs";import{config_exports as a}from"./config.mjs";import{footer_exports as o}from"./footer.mjs";import{UI_EVENT as s,createUiTelemetry as c}from"./logSinkTelemetry.mjs";import"./theme.mjs";import{DoomUiState as l}from"./uiState.mjs";import{openConfigOverlay as u}from"./components/configOverlay.mjs";import{openToolsOverlay as d}from"./components/toolsOverlay.mjs";import{mode_exports as f}from"./mode.mjs";import{buildToolSources as p}from"./toolInventory.mjs";import m from"node:path";import{LeaderActionInvoked as h,LeaderRegistrationProtocol as g,LeaderUnregistrationProtocol as _,installDoomLeaderBootstrapHost as v}from"@agimon-ai/doompi-extension-contracts/leader";import{McpStatusQueryProtocol as y}from"@agimon-ai/doompi-extension-contracts/mcp-status";import{createProtocolRuntime as b}from"@agimon-ai/doompi-extension-contracts/protocol";const x=`doom-pi-leader`,S=`belowEditor`,C=`warning`,w=`doom-pi`,T=new Set([`hotkeys`]);function E(e,t){let n=e.trim().replace(/\s+/g,` `);if(!n)return;let r=n.slice(0,64).trimEnd();return`${w} · ${r} · ${m.basename(t)||t}`}function D(D,O=c()){let k=new l,A=new o.DoomFooterStatusRegistry,j=new f.DoomModeStatusRegistry,M=new a.DoomConfigRegistry,N=new e,P=new Set,F=new Map,I,L,R,z,B,V,H,U,W=new Map,G=0,K=0,q=!1,J,Y,X=async()=>{if(J)try{return(await J.request(y,{},{timeoutMs:250})).servers}catch{return}};D.registerCommand(`tools`,{description:`Browse the tools available in this session`,handler:async(e,t)=>{let n=await X(),r=p({tools:D.getAllTools(),activeTools:D.getActiveTools(),...n?{mcpServers:n}:{}});await d(t,r)}}),D.registerCommand(`config`,{description:`Browse and change the settings extensions contribute`,handler:async(e,t)=>{await u(t,M)}});let Z=e=>{for(let t of e){let e=t.bindingId?` (${t.bindingId})`:``,n=`Leader contribution from ${t.source}${e}: ${t.message}`;P.has(n)||(P.add(n),O.recordWarning(s.leaderContributionRejected,t.message,{"leader.source":t.source,...t.bindingId?{"leader.binding.id":t.bindingId}:{}}),L?.mode===`tui`&&L.ui.notify(n,C))}},Q=(e,t)=>{let n=Symbol(e.source),r=t?e=>N.registerDeferred(e):e=>N.register(e),i=r(e);if(Z(i.diagnostics),!i.accepted)return{update:()=>void 0,dispose:()=>void 0};F.set(e.source,n);let a=!1;return{update(t){a||F.get(e.source)!==n||Z(r({source:e.source,bindings:t}).diagnostics)},dispose(){a||(a=!0,F.get(e.source)===n&&(F.delete(e.source),r({source:e.source,bindings:[]})))}}},$=Object.freeze({register(e){let t=Q(e,!1);return()=>t.dispose()}});Y=v({register:e=>Q(e,!0)}),D.on(`session_start`,(e,a)=>{L=a;let o=++K,c=b({bus:D.events,source:`@agimon-ai/doompi-ui`,sessionId:a.sessionManager.getSessionId()});if(J=c,Z(N.flush()),R?.(),A.reset(),R=A.bind(c),z?.(),j.reset(),z=j.bind(c),V?.(),M.reset(),V=M.bind(c),H?.(),U?.(),H=c.provide(g,({contribution:e,generation:t},n)=>{if(n.source!==e.source)throw Error(`Leader contribution source does not match the registration envelope source.`);let r=`${n.source}:${t}:${++G}`,i={source:e.source,bindings:e.bindings.map(e=>{let[t,...n]=e.path;if(!t)throw Error(`Leader binding '${e.id}' has no path.`);return{...e,path:[t,...n]}})};return W.set(r,$.register(i)),{handleId:r}}),U=c.provide(_,({handleId:e})=>{let t=W.get(e);return t?(W.delete(e),t(),{removed:!0}):{removed:!1}}),q=a.sessionManager.getEntries().some(e=>e.type===`message`),a.mode!==`tui`)return;for(let e of P)a.ui.notify(e,C);let l=process.env.DOOMPI_THEME||`doom-pi-dark`,u=a.ui.setTheme(l);u.success||(a.ui.notify(`Could not apply Doom Pi theme: ${u.error}`,C),O.recordWarning(s.themeApplyFailed,u.error??`Unknown theme error`,{"ui.theme":l})),B?.(),B=j.subscribe(()=>k.setModes(j.getStatuses())),k.setModes(j.getStatuses()),a.ui.setTitle(`${w} · ${m.basename(a.cwd)||a.cwd} · pi/coding`),a.ui.setHeader((e,t)=>new r(t,a.cwd,void 0,a,()=>e.terminal.rows)),a.ui.setFooter((e,t,r)=>(I=r,new n(e,t,a,r,A,k))),a.ui.setEditorComponent((e,n,r)=>new t(e,n,r,k,e=>{if(!e.active){a.ui.setWidget(x,void 0,{placement:S});return}a.ui.setWidget(x,(t,n)=>new i(n,e,a,I,k.getModes()),{placement:S})},void 0,a.ui.theme,{registry:N,isCommandAvailable:e=>T.has(e)||D.getCommands().some(t=>t.name===e),onLeaderAction:(e,t)=>{if(L!==a||K!==o){a.ui.notify(`Leader action ${t} is unavailable.`,C);return}c.notify(h,{source:e,action:t})},onUnavailableCommand:e=>{O.recordWarning(s.leaderCommandUnavailable,`Leader command /${e} is unavailable.`,{"ui.kind":`command`}),a.ui.notify(`Leader command /${e} is unavailable.`,C)},onUnavailableAction:e=>{O.recordWarning(s.leaderActionUnavailable,`Leader action ${e} is unavailable.`,{"ui.kind":`action`}),a.ui.notify(`Leader action ${e} is unavailable.`,C)}})),O.recordEvent(s.shellInstalled,{"ui.theme":l,"ui.theme.applied":u.success,"ui.leader.group.count":N.getGroup([])?.options.length??0})}),D.on(`input`,(e,t)=>{if(t.mode!==`tui`||e.source!==`interactive`||q)return;q=!0;let n=E(e.text,t.cwd);n&&t.ui.setTitle(n)}),D.on(`session_shutdown`,async(e,t)=>{++K,Y?.(),Y=void 0;for(let e of W.values())e();W.clear(),L=void 0,I=void 0,R?.(),R=void 0,A.reset(),z?.(),z=void 0,B?.(),B=void 0,j.reset(),V?.(),V=void 0,H?.(),H=void 0,U?.(),U=void 0,M.reset(),k.reset(),J=void 0,t.mode===`tui`&&t.ui.setWidget(x,void 0,{placement:S}),await O.shutdown()})}export{D as doomPiUiExtension};
2
- //# sourceMappingURL=extension.mjs.map
1
+ import{doomPiUiExtension as e}from"./adapters/pi/extension.mjs";export{e as doomPiUiExtension};
@@ -1,2 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./_virtual/_rolldown/runtime.cjs");let t=require("node:path");t=e.__toESM(t,1);let n=require("node:fs");n=e.__toESM(n,1);const r=new Map;function i(e){let r=e;for(;;){try{let e=JSON.parse(n.default.readFileSync(t.default.join(r,`package.json`),`utf8`));if(typeof e.name==`string`&&e.name.length>0)return e.name}catch{}let e=t.default.dirname(r);if(e===r)return;r=e}}function a(e){let n=r.get(e);if(n!==void 0)return n;let a=i(t.default.dirname(e)),o=a?a.split(`/`).pop()??a:t.default.basename(e,t.default.extname(e));return r.set(e,o),o}exports.extensionName=a;
2
- //# sourceMappingURL=extensionName.cjs.map
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./adapters/pi/extensionName.cjs");exports.extensionName=e.extensionName,exports.extensionToolSource=e.extensionToolSource,exports.withExtensionSource=e.withExtensionSource;
@@ -1,5 +1,2 @@
1
- //#region src/extensionName.d.ts
2
- declare function extensionName(entryPath: string): string;
3
- //#endregion
4
- export { extensionName };
5
- //# sourceMappingURL=extensionName.d.cts.map
1
+ import { extensionName, extensionToolSource, withExtensionSource } from "./adapters/pi/extensionName.cjs";
2
+ export { extensionName, extensionToolSource, withExtensionSource };
@@ -1,5 +1,2 @@
1
- //#region src/extensionName.d.ts
2
- declare function extensionName(entryPath: string): string;
3
- //#endregion
4
- export { extensionName };
5
- //# sourceMappingURL=extensionName.d.mts.map
1
+ import { extensionName, extensionToolSource, withExtensionSource } from "./adapters/pi/extensionName.mjs";
2
+ export { extensionName, extensionToolSource, withExtensionSource };
@@ -1,2 +1 @@
1
- import e from"node:path";import t from"node:fs";const n=new Map;function r(n){let r=n;for(;;){try{let n=JSON.parse(t.readFileSync(e.join(r,`package.json`),`utf8`));if(typeof n.name==`string`&&n.name.length>0)return n.name}catch{}let n=e.dirname(r);if(n===r)return;r=n}}function i(t){let i=n.get(t);if(i!==void 0)return i;let a=r(e.dirname(t)),o=a?a.split(`/`).pop()??a:e.basename(t,e.extname(t));return n.set(t,o),o}export{i as extensionName};
2
- //# sourceMappingURL=extensionName.mjs.map
1
+ import{extensionName as e,extensionToolSource as t,withExtensionSource as n}from"./adapters/pi/extensionName.mjs";export{e as extensionName,t as extensionToolSource,n as withExtensionSource};
@@ -1,2 +1,2 @@
1
- var e=require("../extension.cjs").doomPiUiExtension;module.exports=e;
1
+ var e=require("../adapters/pi/extension.cjs").doomPiUiExtension;module.exports=e;
2
2
  //# sourceMappingURL=pi.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"pi.cjs","names":["doomPiUiExtension"],"sources":["../../src/extensions/pi.ts"],"sourcesContent":["import { doomPiUiExtension } from '../extension.ts';\n\nexport default doomPiUiExtension;\n"],"mappings":"AAEA,IAAA,4BAAeA,CAAAA,CAAAA"}
1
+ {"version":3,"file":"pi.cjs","names":["doomPiUiExtension"],"sources":["../../src/exports/extensions/pi.ts"],"sourcesContent":["import { doomPiUiExtension } from '../../adapters/pi/extension.ts';\n\nexport default doomPiUiExtension;\n"],"mappings":"AAEA,IAAA,wCAAeA,CAAAA,CAAAA"}
@@ -1,2 +1,2 @@
1
- import { doomPiUiExtension } from "../extension.cjs";
1
+ import { doomPiUiExtension } from "../adapters/pi/extension.cjs";
2
2
  export = doomPiUiExtension;
@@ -1,2 +1,2 @@
1
- import { doomPiUiExtension } from "../extension.mjs";
1
+ import { doomPiUiExtension } from "../adapters/pi/extension.mjs";
2
2
  export { doomPiUiExtension as default };
@@ -1,2 +1,2 @@
1
- import{doomPiUiExtension as e}from"../extension.mjs";var t=e;export{t as default};
1
+ import{doomPiUiExtension as e}from"../adapters/pi/extension.mjs";var t=e;export{t as default};
2
2
  //# sourceMappingURL=pi.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"pi.mjs","names":[],"sources":["../../src/extensions/pi.ts"],"sourcesContent":["import { doomPiUiExtension } from '../extension.ts';\n\nexport default doomPiUiExtension;\n"],"mappings":"qDAEA,IAAA,EAAe"}
1
+ {"version":3,"file":"pi.mjs","names":[],"sources":["../../src/exports/extensions/pi.ts"],"sourcesContent":["import { doomPiUiExtension } from '../../adapters/pi/extension.ts';\n\nexport default doomPiUiExtension;\n"],"mappings":"iEAEA,IAAA,EAAe"}
package/dist/footer.cjs CHANGED
@@ -1,2 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./_virtual/_rolldown/runtime.cjs");var t=e.__exportAll({});e.__reExport(t,require("@agimon-ai/doompi-extension-contracts/footer")),Object.defineProperty(exports,"footer_exports",{enumerable:!0,get:function(){return t}});var n=require("@agimon-ai/doompi-extension-contracts/footer");Object.keys(n).forEach(function(e){e!=="default"&&!Object.prototype.hasOwnProperty.call(exports,e)&&Object.defineProperty(exports,e,{enumerable:!0,get:function(){return n[e]}})});
2
- //# sourceMappingURL=footer.cjs.map
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@agimon-ai/doompi-extension-contracts/footer");Object.defineProperty(exports,"DoomFooterStatusRegistry",{enumerable:!0,get:function(){return e.DoomFooterStatusRegistry}}),Object.defineProperty(exports,"FooterStatusChanged",{enumerable:!0,get:function(){return e.FooterStatusChanged}}),Object.defineProperty(exports,"FooterStatusDiscovery",{enumerable:!0,get:function(){return e.FooterStatusDiscovery}}),Object.defineProperty(exports,"FooterStatusItemSchema",{enumerable:!0,get:function(){return e.FooterStatusItemSchema}}),Object.defineProperty(exports,"FooterStatusPlacementSchema",{enumerable:!0,get:function(){return e.FooterStatusPlacementSchema}}),Object.defineProperty(exports,"FooterStatusRegistration",{enumerable:!0,get:function(){return e.FooterStatusRegistration}}),Object.defineProperty(exports,"FooterStatusUnregistration",{enumerable:!0,get:function(){return e.FooterStatusUnregistration}}),Object.defineProperty(exports,"FooterTextColorSchema",{enumerable:!0,get:function(){return e.FooterTextColorSchema}}),Object.defineProperty(exports,"FooterTextSegmentSchema",{enumerable:!0,get:function(){return e.FooterTextSegmentSchema}}),Object.defineProperty(exports,"registerDoomFooterContribution",{enumerable:!0,get:function(){return e.registerDoomFooterContribution}}),Object.defineProperty(exports,"registerFooterStatusProvider",{enumerable:!0,get:function(){return e.registerFooterStatusProvider}});
package/dist/footer.d.cts CHANGED
@@ -1,5 +1,2 @@
1
- export * from "@agimon-ai/doompi-extension-contracts/footer";
2
- import * as import__agimon_ai_doompi_extension_contracts_footer from "@agimon-ai/doompi-extension-contracts/footer";
3
- //#endregion
4
- export { import__agimon_ai_doompi_extension_contracts_footer as footer_d_exports };
5
- //# sourceMappingURL=footer.d.cts.map
1
+ import { DoomFooterContributionDefinition, DoomFooterContributionHandle, DoomFooterContributionValue, DoomFooterStatus, DoomFooterStatusRegistry, FooterStatusChanged, FooterStatusDiscovery, FooterStatusItem, FooterStatusItemSchema, FooterStatusPlacement, FooterStatusPlacementSchema, FooterStatusProvider, FooterStatusProviderHandle, FooterStatusRegistration, FooterStatusSnapshot, FooterStatusSource, FooterStatusUnregistration, FooterTextColor, FooterTextColorSchema, FooterTextSegment, FooterTextSegmentSchema, registerDoomFooterContribution, registerFooterStatusProvider } from "@agimon-ai/doompi-extension-contracts/footer";
2
+ export { type DoomFooterContributionDefinition, type DoomFooterContributionHandle, type DoomFooterContributionValue, type DoomFooterStatus, DoomFooterStatusRegistry, FooterStatusChanged, FooterStatusDiscovery, type FooterStatusItem, FooterStatusItemSchema, type FooterStatusPlacement, FooterStatusPlacementSchema, type FooterStatusProvider, type FooterStatusProviderHandle, FooterStatusRegistration, type FooterStatusSnapshot, type FooterStatusSource, FooterStatusUnregistration, type FooterTextColor, FooterTextColorSchema, type FooterTextSegment, FooterTextSegmentSchema, registerDoomFooterContribution, registerFooterStatusProvider };
package/dist/footer.d.mts CHANGED
@@ -1,5 +1,2 @@
1
- export * from "@agimon-ai/doompi-extension-contracts/footer";
2
- import * as import__agimon_ai_doompi_extension_contracts_footer from "@agimon-ai/doompi-extension-contracts/footer";
3
- //#endregion
4
- export { import__agimon_ai_doompi_extension_contracts_footer as footer_d_exports };
5
- //# sourceMappingURL=footer.d.mts.map
1
+ import { DoomFooterContributionDefinition, DoomFooterContributionHandle, DoomFooterContributionValue, DoomFooterStatus, DoomFooterStatusRegistry, FooterStatusChanged, FooterStatusDiscovery, FooterStatusItem, FooterStatusItemSchema, FooterStatusPlacement, FooterStatusPlacementSchema, FooterStatusProvider, FooterStatusProviderHandle, FooterStatusRegistration, FooterStatusSnapshot, FooterStatusSource, FooterStatusUnregistration, FooterTextColor, FooterTextColorSchema, FooterTextSegment, FooterTextSegmentSchema, registerDoomFooterContribution, registerFooterStatusProvider } from "@agimon-ai/doompi-extension-contracts/footer";
2
+ export { type DoomFooterContributionDefinition, type DoomFooterContributionHandle, type DoomFooterContributionValue, type DoomFooterStatus, DoomFooterStatusRegistry, FooterStatusChanged, FooterStatusDiscovery, type FooterStatusItem, FooterStatusItemSchema, type FooterStatusPlacement, FooterStatusPlacementSchema, type FooterStatusProvider, type FooterStatusProviderHandle, FooterStatusRegistration, type FooterStatusSnapshot, type FooterStatusSource, FooterStatusUnregistration, type FooterTextColor, FooterTextColorSchema, type FooterTextSegment, FooterTextSegmentSchema, registerDoomFooterContribution, registerFooterStatusProvider };
package/dist/footer.mjs CHANGED
@@ -1,2 +1 @@
1
- import{__exportAll as e,__reExport as t}from"./_virtual/_rolldown/runtime.mjs";export*from"@agimon-ai/doompi-extension-contracts/footer";var n=e({});import*as r from"@agimon-ai/doompi-extension-contracts/footer";t(n,r);export{n as footer_exports};
2
- //# sourceMappingURL=footer.mjs.map
1
+ import{DoomFooterStatusRegistry as e,FooterStatusChanged as t,FooterStatusDiscovery as n,FooterStatusItemSchema as r,FooterStatusPlacementSchema as i,FooterStatusRegistration as a,FooterStatusUnregistration as o,FooterTextColorSchema as s,FooterTextSegmentSchema as c,registerDoomFooterContribution as l,registerFooterStatusProvider as u}from"@agimon-ai/doompi-extension-contracts/footer";export{e as DoomFooterStatusRegistry,t as FooterStatusChanged,n as FooterStatusDiscovery,r as FooterStatusItemSchema,i as FooterStatusPlacementSchema,a as FooterStatusRegistration,o as FooterStatusUnregistration,s as FooterTextColorSchema,c as FooterTextSegmentSchema,l as registerDoomFooterContribution,u as registerFooterStatusProvider};
@@ -1,2 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});function e(e){return e?e.split(`,`).map(e=>e.trim()).filter(Boolean):[]}function t(t=process.env){return{root:t.DOOMPI_ROOT,majorMode:t.DOOMPI_MAJOR_MODE?.trim()||`copilot`,domains:e(t.DOOMPI_DOMAINS),layers:e(t.DOOMPI_LAYERS),profile:t.DOOMPI_PROFILE?.trim()||void 0}}exports.readDoomHarnessMetadata=t;
2
- //# sourceMappingURL=harnessMetadata.cjs.map
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./types/harnessMetadata.cjs");exports.readDoomHarnessMetadata=e.readDoomHarnessMetadata;
@@ -1,21 +1,2 @@
1
- //#region src/harnessMetadata.d.ts
2
- /**
3
- * The slice of harness state the header renders.
4
- *
5
- * A projection of the store rather than its own reader. This used to
6
- * re-implement five of the state keys with its own list parser and its own
7
- * default mode, which is two definitions of one protocol to keep in step.
8
- */
9
- interface DoomHarnessMetadata {
10
- root?: string;
11
- /** The one named major mode this session runs under. */
12
- majorMode: string;
13
- domains: string[];
14
- /** The layer components the major mode resolved to. */
15
- layers: string[];
16
- profile?: string;
17
- }
18
- declare function readDoomHarnessMetadata(environment?: NodeJS.ProcessEnv): DoomHarnessMetadata;
19
- //#endregion
20
- export { DoomHarnessMetadata, readDoomHarnessMetadata };
21
- //# sourceMappingURL=harnessMetadata.d.cts.map
1
+ import { DoomHarnessMetadata, readDoomHarnessMetadata } from "./types/harnessMetadata.cjs";
2
+ export { type DoomHarnessMetadata, readDoomHarnessMetadata };
@@ -1,21 +1,2 @@
1
- //#region src/harnessMetadata.d.ts
2
- /**
3
- * The slice of harness state the header renders.
4
- *
5
- * A projection of the store rather than its own reader. This used to
6
- * re-implement five of the state keys with its own list parser and its own
7
- * default mode, which is two definitions of one protocol to keep in step.
8
- */
9
- interface DoomHarnessMetadata {
10
- root?: string;
11
- /** The one named major mode this session runs under. */
12
- majorMode: string;
13
- domains: string[];
14
- /** The layer components the major mode resolved to. */
15
- layers: string[];
16
- profile?: string;
17
- }
18
- declare function readDoomHarnessMetadata(environment?: NodeJS.ProcessEnv): DoomHarnessMetadata;
19
- //#endregion
20
- export { DoomHarnessMetadata, readDoomHarnessMetadata };
21
- //# sourceMappingURL=harnessMetadata.d.mts.map
1
+ import { DoomHarnessMetadata, readDoomHarnessMetadata } from "./types/harnessMetadata.mjs";
2
+ export { type DoomHarnessMetadata, readDoomHarnessMetadata };
@@ -1,2 +1 @@
1
- function e(e){return e?e.split(`,`).map(e=>e.trim()).filter(Boolean):[]}function t(t=process.env){return{root:t.DOOMPI_ROOT,majorMode:t.DOOMPI_MAJOR_MODE?.trim()||`copilot`,domains:e(t.DOOMPI_DOMAINS),layers:e(t.DOOMPI_LAYERS),profile:t.DOOMPI_PROFILE?.trim()||void 0}}export{t as readDoomHarnessMetadata};
2
- //# sourceMappingURL=harnessMetadata.mjs.map
1
+ import{readDoomHarnessMetadata as e}from"./types/harnessMetadata.mjs";export{e as readDoomHarnessMetadata};
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./components/doomEditor.cjs"),t=require("./components/doomFooter.cjs"),n=require("./harnessMetadata.cjs"),r=require("./components/doomHeader.cjs"),i=require("./components/doomOverlay.cjs"),a=require("./components/leaderHints.cjs");require("./config.cjs"),require("./footer.cjs"),require("./leader.cjs");const o=require("./logSinkTelemetry.cjs"),s=require("./theme.cjs"),c=require("./uiState.cjs");let l=require("@agimon-ai/doompi-extension-contracts/leader");exports.DEFAULT_THEME=s.DEFAULT_THEME,exports.DEFAULT_THEME_NAME=s.DEFAULT_THEME_NAME,exports.DOOM_FULLSCREEN_UI_OPTIONS=i.DOOM_FULLSCREEN_UI_OPTIONS,exports.DoomEditor=e.DoomEditor,exports.DoomFooter=t.DoomFooter,exports.DoomHeader=r.DoomHeader,exports.DoomOverlay=i.DoomOverlay,exports.DoomUiState=c.DoomUiState,exports.LeaderHints=a.LeaderHints,exports.UI_EVENT=o.UI_EVENT,Object.defineProperty(exports,"createDoomLeaderContribution",{enumerable:!0,get:function(){return l.createDoomLeaderContribution}}),exports.createUiTelemetry=o.createUiTelemetry,exports.readDoomHarnessMetadata=n.readDoomHarnessMetadata,Object.defineProperty(exports,"registerDoomConfigContribution",{enumerable:!0,get:function(){return config_exports.registerDoomConfigContribution}}),Object.defineProperty(exports,"registerDoomFooterContribution",{enumerable:!0,get:function(){return footer_exports.registerDoomFooterContribution}}),Object.defineProperty(exports,"registerDoomLeaderContribution",{enumerable:!0,get:function(){return l.registerDoomLeaderContribution}}),exports.writeDefaultTheme=s.writeDefaultTheme;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./services/state/uiState.cjs"),t=require("./tui/doomOverlay.cjs"),n=require("./types/harnessMetadata.cjs"),r=require("./tui/doomEditor.cjs"),i=require("./tui/doomFooter.cjs"),a=require("./tui/doomHeader.cjs"),o=require("./tui/leaderHints.cjs"),s=require("./tui/theme.cjs"),c=require("./adapters/telemetry/logSinkTelemetry.cjs"),l=require("./tui/toolChrome.cjs");let u=require("@agimon-ai/doompi-extension-contracts/config"),d=require("@agimon-ai/doompi-extension-contracts/footer"),f=require("@agimon-ai/doompi-extension-contracts/leader");exports.DEFAULT_THEME=s.DEFAULT_THEME,exports.DEFAULT_THEME_NAME=s.DEFAULT_THEME_NAME,exports.DOOM_FULLSCREEN_UI_OPTIONS=t.DOOM_FULLSCREEN_UI_OPTIONS,exports.DOOM_NAVIGATION_KEYS=t.DOOM_NAVIGATION_KEYS,exports.DoomEditor=r.DoomEditor,exports.DoomFooter=i.DoomFooter,exports.DoomHeader=a.DoomHeader,exports.DoomOverlay=t.DoomOverlay,exports.DoomToolCall=l.DoomToolCall,exports.DoomToolResult=l.DoomToolResult,exports.DoomUiState=e.DoomUiState,exports.LeaderHints=o.LeaderHints,exports.UI_EVENT=c.UI_EVENT,Object.defineProperty(exports,"createDoomLeaderContribution",{enumerable:!0,get:function(){return f.createDoomLeaderContribution}}),exports.createUiTelemetry=c.createUiTelemetry,exports.readDoomHarnessMetadata=n.readDoomHarnessMetadata,Object.defineProperty(exports,"registerDoomConfigContribution",{enumerable:!0,get:function(){return u.registerDoomConfigContribution}}),Object.defineProperty(exports,"registerDoomFooterContribution",{enumerable:!0,get:function(){return d.registerDoomFooterContribution}}),Object.defineProperty(exports,"registerDoomLeaderContribution",{enumerable:!0,get:function(){return f.registerDoomLeaderContribution}}),exports.renderToolBadge=l.renderToolBadge,exports.renderToolHeading=l.renderToolHeading,exports.writeDefaultTheme=s.writeDefaultTheme;
package/dist/index.d.cts CHANGED
@@ -1,25 +1,14 @@
1
- import { config_d_exports } from "./config.cjs";
2
- import { DOOM_FULLSCREEN_UI_OPTIONS, DoomOverlay, DoomOverlayChrome, DoomOverlayTui } from "./components/doomOverlay.cjs";
3
- import { DoomLeaderBinding, DoomLeaderCommand, DoomLeaderContribution, DoomLeaderContributionHandle, DoomLeaderSegment, createDoomLeaderContribution, registerDoomLeaderContribution } from "./leader.cjs";
4
- import { DoomUiState, LeaderOption, LeaderSnapshot } from "./uiState.cjs";
5
- import { DoomEditor } from "./components/doomEditor.cjs";
6
- import { footer_d_exports } from "./footer.cjs";
7
- import { DoomFooter } from "./components/doomFooter.cjs";
8
- import { DoomHarnessMetadata, readDoomHarnessMetadata } from "./harnessMetadata.cjs";
9
- import { DoomHeader } from "./components/doomHeader.cjs";
10
- import { LeaderHints } from "./components/leaderHints.cjs";
11
- import { UI_EVENT, UiEventAttributes, UiEventName, UiTelemetry, UiTelemetryOptions, createUiTelemetry } from "./logSinkTelemetry.cjs";
12
- import { DEFAULT_THEME, DEFAULT_THEME_NAME, writeDefaultTheme } from "./theme.cjs";
13
- type ConfigChoice = config_d_exports.ConfigChoice;
14
- type ConfigField = config_d_exports.ConfigField;
15
- type ConfigSection = config_d_exports.ConfigSection;
16
- type ConfigStep = config_d_exports.ConfigStep;
17
- type DoomConfigActionInput = config_d_exports.DoomConfigActionInput;
18
- type DoomConfigContributionHandle = config_d_exports.DoomConfigContributionHandle;
19
- type DoomConfigContributionOptions = config_d_exports.DoomConfigContributionOptions;
20
- type DoomFooterContributionDefinition = footer_d_exports.DoomFooterContributionDefinition;
21
- type DoomFooterContributionHandle = footer_d_exports.DoomFooterContributionHandle;
22
- type DoomFooterContributionValue = footer_d_exports.DoomFooterContributionValue;
23
- type registerDoomConfigContribution = config_d_exports.registerDoomConfigContribution;
24
- type registerDoomFooterContribution = footer_d_exports.registerDoomFooterContribution;
25
- export { type ConfigChoice, type ConfigField, type ConfigSection, type ConfigStep, DEFAULT_THEME, DEFAULT_THEME_NAME, DOOM_FULLSCREEN_UI_OPTIONS, type DoomConfigActionInput, type DoomConfigContributionHandle, type DoomConfigContributionOptions, DoomEditor, DoomFooter, type DoomFooterContributionDefinition, type DoomFooterContributionHandle, type DoomFooterContributionValue, type DoomHarnessMetadata, DoomHeader, type DoomLeaderBinding, type DoomLeaderCommand, type DoomLeaderContribution, type DoomLeaderContributionHandle, type DoomLeaderSegment, DoomOverlay, type DoomOverlayChrome, type DoomOverlayTui, DoomUiState, LeaderHints, type LeaderOption, type LeaderSnapshot, UI_EVENT, type UiEventAttributes, type UiEventName, type UiTelemetry, type UiTelemetryOptions, createDoomLeaderContribution, createUiTelemetry, readDoomHarnessMetadata, registerDoomConfigContribution, registerDoomFooterContribution, registerDoomLeaderContribution, writeDefaultTheme };
1
+ import { DOOM_FULLSCREEN_UI_OPTIONS, DOOM_NAVIGATION_KEYS, DoomOverlay, DoomOverlayChrome, DoomOverlayTui } from "./tui/doomOverlay.cjs";
2
+ import { DoomUiState, LeaderOption, LeaderSnapshot } from "./services/state/uiState.cjs";
3
+ import { DoomEditor } from "./tui/doomEditor.cjs";
4
+ import { DoomFooter } from "./tui/doomFooter.cjs";
5
+ import { DoomHarnessMetadata, readDoomHarnessMetadata } from "./types/harnessMetadata.cjs";
6
+ import { DoomHeader } from "./tui/doomHeader.cjs";
7
+ import { LeaderHints } from "./tui/leaderHints.cjs";
8
+ import { UI_EVENT, UiEventAttributes, UiEventName, UiTelemetry, UiTelemetryOptions, createUiTelemetry } from "./adapters/telemetry/logSinkTelemetry.cjs";
9
+ import { DEFAULT_THEME, DEFAULT_THEME_NAME, writeDefaultTheme } from "./tui/theme.cjs";
10
+ import { DoomToolCall, DoomToolResult, DoomToolResultOptions, renderToolBadge, renderToolHeading } from "./tui/toolChrome.cjs";
11
+ import { ConfigChoice, ConfigField, ConfigSection, ConfigStep, DoomConfigActionInput, DoomConfigContributionHandle, DoomConfigContributionOptions, registerDoomConfigContribution } from "@agimon-ai/doompi-extension-contracts/config";
12
+ import { DoomLeaderContributionHandle, LeaderBinding as DoomLeaderBinding, LeaderCommand as DoomLeaderCommand, LeaderContribution as DoomLeaderContribution, LeaderSegment as DoomLeaderSegment, createDoomLeaderContribution, registerDoomLeaderContribution } from "@agimon-ai/doompi-extension-contracts/leader";
13
+ import { DoomFooterContributionDefinition, DoomFooterContributionHandle, DoomFooterContributionValue, registerDoomFooterContribution } from "@agimon-ai/doompi-extension-contracts/footer";
14
+ export { type ConfigChoice, type ConfigField, type ConfigSection, type ConfigStep, DEFAULT_THEME, DEFAULT_THEME_NAME, DOOM_FULLSCREEN_UI_OPTIONS, DOOM_NAVIGATION_KEYS, type DoomConfigActionInput, type DoomConfigContributionHandle, type DoomConfigContributionOptions, DoomEditor, DoomFooter, type DoomFooterContributionDefinition, type DoomFooterContributionHandle, type DoomFooterContributionValue, type DoomHarnessMetadata, DoomHeader, type DoomLeaderBinding, type DoomLeaderCommand, type DoomLeaderContribution, type DoomLeaderContributionHandle, type DoomLeaderSegment, DoomOverlay, type DoomOverlayChrome, type DoomOverlayTui, DoomToolCall, DoomToolResult, type DoomToolResultOptions, DoomUiState, LeaderHints, type LeaderOption, type LeaderSnapshot, UI_EVENT, type UiEventAttributes, type UiEventName, type UiTelemetry, type UiTelemetryOptions, createDoomLeaderContribution, createUiTelemetry, readDoomHarnessMetadata, registerDoomConfigContribution, registerDoomFooterContribution, registerDoomLeaderContribution, renderToolBadge, renderToolHeading, writeDefaultTheme };
package/dist/index.d.mts CHANGED
@@ -1,25 +1,14 @@
1
- import { config_d_exports } from "./config.mjs";
2
- import { DOOM_FULLSCREEN_UI_OPTIONS, DoomOverlay, DoomOverlayChrome, DoomOverlayTui } from "./components/doomOverlay.mjs";
3
- import { DoomLeaderBinding, DoomLeaderCommand, DoomLeaderContribution, DoomLeaderContributionHandle, DoomLeaderSegment, createDoomLeaderContribution, registerDoomLeaderContribution } from "./leader.mjs";
4
- import { DoomUiState, LeaderOption, LeaderSnapshot } from "./uiState.mjs";
5
- import { DoomEditor } from "./components/doomEditor.mjs";
6
- import { footer_d_exports } from "./footer.mjs";
7
- import { DoomFooter } from "./components/doomFooter.mjs";
8
- import { DoomHarnessMetadata, readDoomHarnessMetadata } from "./harnessMetadata.mjs";
9
- import { DoomHeader } from "./components/doomHeader.mjs";
10
- import { LeaderHints } from "./components/leaderHints.mjs";
11
- import { UI_EVENT, UiEventAttributes, UiEventName, UiTelemetry, UiTelemetryOptions, createUiTelemetry } from "./logSinkTelemetry.mjs";
12
- import { DEFAULT_THEME, DEFAULT_THEME_NAME, writeDefaultTheme } from "./theme.mjs";
13
- type ConfigChoice = config_d_exports.ConfigChoice;
14
- type ConfigField = config_d_exports.ConfigField;
15
- type ConfigSection = config_d_exports.ConfigSection;
16
- type ConfigStep = config_d_exports.ConfigStep;
17
- type DoomConfigActionInput = config_d_exports.DoomConfigActionInput;
18
- type DoomConfigContributionHandle = config_d_exports.DoomConfigContributionHandle;
19
- type DoomConfigContributionOptions = config_d_exports.DoomConfigContributionOptions;
20
- type DoomFooterContributionDefinition = footer_d_exports.DoomFooterContributionDefinition;
21
- type DoomFooterContributionHandle = footer_d_exports.DoomFooterContributionHandle;
22
- type DoomFooterContributionValue = footer_d_exports.DoomFooterContributionValue;
23
- type registerDoomConfigContribution = config_d_exports.registerDoomConfigContribution;
24
- type registerDoomFooterContribution = footer_d_exports.registerDoomFooterContribution;
25
- export { type ConfigChoice, type ConfigField, type ConfigSection, type ConfigStep, DEFAULT_THEME, DEFAULT_THEME_NAME, DOOM_FULLSCREEN_UI_OPTIONS, type DoomConfigActionInput, type DoomConfigContributionHandle, type DoomConfigContributionOptions, DoomEditor, DoomFooter, type DoomFooterContributionDefinition, type DoomFooterContributionHandle, type DoomFooterContributionValue, type DoomHarnessMetadata, DoomHeader, type DoomLeaderBinding, type DoomLeaderCommand, type DoomLeaderContribution, type DoomLeaderContributionHandle, type DoomLeaderSegment, DoomOverlay, type DoomOverlayChrome, type DoomOverlayTui, DoomUiState, LeaderHints, type LeaderOption, type LeaderSnapshot, UI_EVENT, type UiEventAttributes, type UiEventName, type UiTelemetry, type UiTelemetryOptions, createDoomLeaderContribution, createUiTelemetry, readDoomHarnessMetadata, registerDoomConfigContribution, registerDoomFooterContribution, registerDoomLeaderContribution, writeDefaultTheme };
1
+ import { DOOM_FULLSCREEN_UI_OPTIONS, DOOM_NAVIGATION_KEYS, DoomOverlay, DoomOverlayChrome, DoomOverlayTui } from "./tui/doomOverlay.mjs";
2
+ import { DoomUiState, LeaderOption, LeaderSnapshot } from "./services/state/uiState.mjs";
3
+ import { DoomEditor } from "./tui/doomEditor.mjs";
4
+ import { DoomFooter } from "./tui/doomFooter.mjs";
5
+ import { DoomHarnessMetadata, readDoomHarnessMetadata } from "./types/harnessMetadata.mjs";
6
+ import { DoomHeader } from "./tui/doomHeader.mjs";
7
+ import { LeaderHints } from "./tui/leaderHints.mjs";
8
+ import { UI_EVENT, UiEventAttributes, UiEventName, UiTelemetry, UiTelemetryOptions, createUiTelemetry } from "./adapters/telemetry/logSinkTelemetry.mjs";
9
+ import { DEFAULT_THEME, DEFAULT_THEME_NAME, writeDefaultTheme } from "./tui/theme.mjs";
10
+ import { DoomToolCall, DoomToolResult, DoomToolResultOptions, renderToolBadge, renderToolHeading } from "./tui/toolChrome.mjs";
11
+ import { ConfigChoice, ConfigField, ConfigSection, ConfigStep, DoomConfigActionInput, DoomConfigContributionHandle, DoomConfigContributionOptions, registerDoomConfigContribution } from "@agimon-ai/doompi-extension-contracts/config";
12
+ import { DoomFooterContributionDefinition, DoomFooterContributionHandle, DoomFooterContributionValue, registerDoomFooterContribution } from "@agimon-ai/doompi-extension-contracts/footer";
13
+ import { DoomLeaderContributionHandle, LeaderBinding as DoomLeaderBinding, LeaderCommand as DoomLeaderCommand, LeaderContribution as DoomLeaderContribution, LeaderSegment as DoomLeaderSegment, createDoomLeaderContribution, registerDoomLeaderContribution } from "@agimon-ai/doompi-extension-contracts/leader";
14
+ export { type ConfigChoice, type ConfigField, type ConfigSection, type ConfigStep, DEFAULT_THEME, DEFAULT_THEME_NAME, DOOM_FULLSCREEN_UI_OPTIONS, DOOM_NAVIGATION_KEYS, type DoomConfigActionInput, type DoomConfigContributionHandle, type DoomConfigContributionOptions, DoomEditor, DoomFooter, type DoomFooterContributionDefinition, type DoomFooterContributionHandle, type DoomFooterContributionValue, type DoomHarnessMetadata, DoomHeader, type DoomLeaderBinding, type DoomLeaderCommand, type DoomLeaderContribution, type DoomLeaderContributionHandle, type DoomLeaderSegment, DoomOverlay, type DoomOverlayChrome, type DoomOverlayTui, DoomToolCall, DoomToolResult, type DoomToolResultOptions, DoomUiState, LeaderHints, type LeaderOption, type LeaderSnapshot, UI_EVENT, type UiEventAttributes, type UiEventName, type UiTelemetry, type UiTelemetryOptions, createDoomLeaderContribution, createUiTelemetry, readDoomHarnessMetadata, registerDoomConfigContribution, registerDoomFooterContribution, registerDoomLeaderContribution, renderToolBadge, renderToolHeading, writeDefaultTheme };
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{DoomEditor as e}from"./components/doomEditor.mjs";import{DoomFooter as t}from"./components/doomFooter.mjs";import{readDoomHarnessMetadata as n}from"./harnessMetadata.mjs";import{DoomHeader as r}from"./components/doomHeader.mjs";import{DOOM_FULLSCREEN_UI_OPTIONS as i,DoomOverlay as a}from"./components/doomOverlay.mjs";import{LeaderHints as o}from"./components/leaderHints.mjs";import{config_exports as s}from"./config.mjs";import{footer_exports as c}from"./footer.mjs";import{createDoomLeaderContribution as l,registerDoomLeaderContribution as u}from"./leader.mjs";import{UI_EVENT as d,createUiTelemetry as f}from"./logSinkTelemetry.mjs";import{DEFAULT_THEME as p,DEFAULT_THEME_NAME as m,writeDefaultTheme as h}from"./theme.mjs";import{DoomUiState as g}from"./uiState.mjs";var _=s.registerDoomConfigContribution,v=c.registerDoomFooterContribution;export{p as DEFAULT_THEME,m as DEFAULT_THEME_NAME,i as DOOM_FULLSCREEN_UI_OPTIONS,e as DoomEditor,t as DoomFooter,r as DoomHeader,a as DoomOverlay,g as DoomUiState,o as LeaderHints,d as UI_EVENT,l as createDoomLeaderContribution,f as createUiTelemetry,n as readDoomHarnessMetadata,_ as registerDoomConfigContribution,v as registerDoomFooterContribution,u as registerDoomLeaderContribution,h as writeDefaultTheme};
1
+ import{DoomUiState as e}from"./services/state/uiState.mjs";import{DOOM_FULLSCREEN_UI_OPTIONS as t,DOOM_NAVIGATION_KEYS as n,DoomOverlay as r}from"./tui/doomOverlay.mjs";import{readDoomHarnessMetadata as i}from"./types/harnessMetadata.mjs";import{DoomEditor as a}from"./tui/doomEditor.mjs";import{DoomFooter as o}from"./tui/doomFooter.mjs";import{DoomHeader as s}from"./tui/doomHeader.mjs";import{LeaderHints as c}from"./tui/leaderHints.mjs";import{DEFAULT_THEME as l,DEFAULT_THEME_NAME as u,writeDefaultTheme as d}from"./tui/theme.mjs";import{UI_EVENT as f,createUiTelemetry as p}from"./adapters/telemetry/logSinkTelemetry.mjs";import{DoomToolCall as m,DoomToolResult as h,renderToolBadge as g,renderToolHeading as _}from"./tui/toolChrome.mjs";import{registerDoomConfigContribution as v}from"@agimon-ai/doompi-extension-contracts/config";import{registerDoomFooterContribution as y}from"@agimon-ai/doompi-extension-contracts/footer";import{createDoomLeaderContribution as b,registerDoomLeaderContribution as x}from"@agimon-ai/doompi-extension-contracts/leader";export{l as DEFAULT_THEME,u as DEFAULT_THEME_NAME,t as DOOM_FULLSCREEN_UI_OPTIONS,n as DOOM_NAVIGATION_KEYS,a as DoomEditor,o as DoomFooter,s as DoomHeader,r as DoomOverlay,m as DoomToolCall,h as DoomToolResult,e as DoomUiState,c as LeaderHints,f as UI_EVENT,b as createDoomLeaderContribution,p as createUiTelemetry,i as readDoomHarnessMetadata,v as registerDoomConfigContribution,y as registerDoomFooterContribution,x as registerDoomLeaderContribution,g as renderToolBadge,_ as renderToolHeading,d as writeDefaultTheme};
@@ -1,2 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=`@agimon-ai/doompi-ui`,t=`unknown`,n=1e3,r=/^[a-z0-9]$/,i=/^[a-z0-9][a-z0-9._:-]*$/,a=/^[A-Za-z0-9@][A-Za-z0-9@/._:-]*$/,o=/^[a-z0-9][a-z0-9:_-]*$/,s={key:`m`,label:`models`,order:10},c={key:`s`,label:`sessions`,order:30},l={key:`e`,label:`extension`,order:50},u={key:`h`,label:`help`,order:70},d={key:`q`,label:`quit`,order:90};function f(t,n,r){return{id:t,source:e,path:n,action:r}}const p=[f(`model.select`,[s,{key:`m`,label:`select`,detail:`choose model`,order:10}],{type:`app`,action:`app.model.select`}),f(`model.next`,[s,{key:`n`,label:`next`,detail:`cycle model`,order:20}],{type:`app`,action:`app.model.cycleForward`}),f(`thinking.cycle`,[s,{key:`t`,label:`thinking`,detail:`cycle level`,order:30}],{type:`app`,action:`app.thinking.cycle`}),f(`tools.open`,[l,{key:`t`,label:`tools`,detail:`browse tools`,order:20}],{type:`command`,command:{name:`tools`}}),f(`config.open`,[l,{key:`c`,label:`config`,detail:`settings`,order:30}],{type:`command`,command:{name:`config`}}),f(`session.new`,[c,{key:`n`,label:`new`,detail:`fresh session`,order:10}],{type:`app`,action:`app.session.new`}),f(`session.resume`,[c,{key:`r`,label:`resume`,detail:`open history`,order:20}],{type:`app`,action:`app.session.resume`}),f(`session.tree`,[c,{key:`t`,label:`tree`,detail:`branch view`,order:30}],{type:`app`,action:`app.session.tree`}),f(`session.fork`,[c,{key:`f`,label:`fork`,detail:`from selection`,order:40}],{type:`app`,action:`app.session.fork`}),f(`editor.external`,[l,{key:`e`,label:`external`,detail:`open editor`,order:10}],{type:`app`,action:`app.editor.external`}),f(`help.hotkeys`,[u,{key:`h`,label:`hotkeys`,detail:`show bindings`}],{type:`command`,command:{name:`hotkeys`}}),f(`app.exit`,[d,{key:`q`,label:`quit`,detail:`exit Pi`}],{type:`app`,action:`app.exit`})];function m(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function h(e,t,n){return{source:e,message:t,...n?{bindingId:n}:{}}}function g(e){for(let t=0;t<e.length;t+=1){let n=e.charCodeAt(t);if(n<=31||n===127)return!0}return!1}function _(e,t,n,r,i,a){if(typeof e!=`string`||!e.trim()){i.push(h(r,`${t} must be a non-empty string.`,a));return}let o=e.trim();if(o.length>n||g(o)){i.push(h(r,`${t} must be at most ${n} characters and contain no control characters.`,a));return}return o}function v(e,t,n,r,i,a){if(e!==void 0)return _(e,t,n,r,i,a)}function y(e,t,i,a,o){if(!m(e)){o.push(h(t,`bindings[].path[${a}] must be an object.`,i));return}let s=_(e.key,`bindings[].path[${a}].key`,1,t,o,i),c=_(e.label,`bindings[].path[${a}].label`,32,t,o,i),l=v(e.detail,`bindings[].path[${a}].detail`,80,t,o,i),u;if(e.order!==void 0&&(!Number.isInteger(e.order)||e.order<0||e.order>n?o.push(h(t,`bindings[].path[${a}].order must be an integer from 0 to ${n}.`,i)):u=e.order),!s||!c||!r.test(s)){s&&!r.test(s)&&o.push(h(t,`bindings[].path[${a}].key must match ${r}.`,i));return}return{key:s,label:c,...l?{detail:l}:{},...u===void 0?{}:{order:u}}}function b(e,t,n,r){if(!m(e)){r.push(h(t,`bindings[].command must be an object.`,n));return}let i=_(e.name,`bindings[].command.name`,64,t,r,n),a=v(e.args,`bindings[].command.args`,256,t,r,n);if(!i||!o.test(i)){i&&!o.test(i)&&r.push(h(t,`bindings[].command.name must match ${o}.`,n));return}return{name:i,...a?{args:a}:{}}}function x(e,t,n,r){if(!m(e)){r.push(h(t,`bindings[].action must be an object.`,n));return}let a=_(e.name,`bindings[].action.name`,128,t,r,n);if(!a||!i.test(a)){a&&!i.test(a)&&r.push(h(t,`bindings[].action.name must match ${i}.`,n));return}return{name:a}}function S(e,t,n){if(!m(e)){n.push(h(t,`bindings[] must be an object.`));return}let r=_(e.id,`bindings[].id`,128,t,n);if(!r)return;if(!i.test(r)){n.push(h(t,`bindings[].id must match ${i}.`,r));return}if(!Array.isArray(e.path)||e.path.length===0||e.path.length>4){n.push(h(t,`bindings[].path must contain between 1 and 4 segments.`,r));return}let a=e.path.map((e,i)=>y(e,t,r,i,n)),o=Object.hasOwn(e,`command`);if(o===Object.hasOwn(e,`action`)){n.push(h(t,`bindings[] must contain exactly one of command or action.`,r));return}let s=o?{command:b(e.command,t,r,n)}:{action:x(e.action,t,r,n)};if(!a.some(e=>e===void 0)){if(`command`in s)return s.command?{id:r,path:a,command:s.command}:void 0;if(s.action)return{id:r,path:a,action:s.action}}}function C(e){let n=[];if(!m(e))return{diagnostics:[h(t,`Leader contribution must be an object.`)]};let r=_(e.source,`source`,128,t,n);if(!r)return{diagnostics:n};if(!a.test(r))return n.push(h(r,`source must match ${a}.`)),{diagnostics:n};if(!Array.isArray(e.bindings))return{diagnostics:[h(r,`bindings must be an array.`)]};let i=e.bindings.map(e=>S(e,r,n)),o=i.flatMap(e=>e?[e.id]:[]).filter((e,t,n)=>n.indexOf(e)!==t);for(let e of new Set(o))n.push(h(r,`Binding id '${e}' is duplicated.`,e));return n.length>0||i.some(e=>e===void 0)?{diagnostics:n}:{contribution:{source:r,bindings:i},diagnostics:n}}function w(e){return e.order??500}function T(e){return e.type===`command`?{type:`command`,command:{...e.command}}:e.type===`app`?{type:`app`,action:e.action}:{type:`extension`,source:e.source,action:{...e.action}}}function E(){return{key:``,label:`leader`,order:0,owner:e,children:new Map}}function D(e){return`SPC ${e.map(e=>e.key).join(` `)}`}function O(e,t){return e.label===t.label&&e.detail===t.detail&&e.order===w(t)}function k(e,t){let n=e,r=-1;for(let[e,i]of t.path.entries()){let a=n.children.get(i.key);if(!a){r=e;break}if(!O(a,i))return h(t.source,`${D(t.path.slice(0,e+1))} conflicts with metadata from ${a.owner}.`,t.id);let o=e===t.path.length-1;if(!o&&a.action||o&&(a.action||a.children.size>0))return h(t.source,`${D(t.path)} conflicts with an existing binding from ${a.owner}.`,t.id);n=a}let i=r===-1?t.path.length:r;for(let e=i;e<t.path.length;e+=1){let r=t.path[e],i={key:r.key,label:r.label,...r.detail?{detail:r.detail}:{},order:w(r),owner:t.source,children:new Map};n.children.set(r.key,i),n=i}n.action=T(t.action),n.bindingId=t.id}var A=class{root=E();contributions=new Map;listeners=new Set;diagnostics=[];dirty=!1;constructor(){this.rebuild()}register(e){let t=this.apply(e);return t.accepted?(this.rebuild(),{accepted:!0,diagnostics:this.getDiagnostics()}):t}registerDeferred(e){return this.apply(e)}apply(e){let t=C(e);return t.contribution?(t.contribution.bindings.length===0?this.contributions.delete(t.contribution.source):this.contributions.set(t.contribution.source,t.contribution.bindings),this.dirty=!0,{accepted:!0,diagnostics:t.diagnostics}):{accepted:!1,diagnostics:t.diagnostics}}flush(){return this.dirty&&this.rebuild(),this.diagnostics.map(e=>({...e}))}getGroup(e){this.flush();let t=this.root;for(let n of e){let e=t.children.get(n);if(!e||e.action)return;t=e}let n=[...t.children.values()].sort((e,t)=>e.key.localeCompare(t.key)).map(e=>({key:e.key,label:e.label,...e.detail?{detail:e.detail}:{},hasChildren:e.children.size>0,...e.action?{action:T(e.action)}:{}}));return{label:t.label,options:n}}getDiagnostics(){return this.flush()}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}rebuild(){let e=E(),t=[];for(let t of p){let n=k(e,t);if(n)throw Error(`Invalid core leader binding: ${n.message}`)}for(let[n,r]of[...this.contributions.entries()].sort(([e],[t])=>e.localeCompare(t)))for(let i of[...r].sort((e,t)=>e.id.localeCompare(t.id))){let r=k(e,{id:i.id,source:n,path:i.path,action:`command`in i?{type:`command`,command:i.command}:{type:`extension`,source:n,action:i.action}});r&&t.push(r)}this.root=e,this.diagnostics=t,this.dirty=!1;for(let e of this.listeners)e()}};exports.DoomLeaderRegistry=A;
2
- //# sourceMappingURL=leaderRegistry.cjs.map
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./services/leader/leaderRegistry.cjs");exports.DoomLeaderRegistry=e.DoomLeaderRegistry;
@@ -1,58 +1,2 @@
1
- import { DoomLeaderCommand, DoomLeaderExtensionAction } from "./leader.cjs";
2
- import { AppKeybinding } from "@earendil-works/pi-coding-agent";
3
- //#region src/leaderRegistry.d.ts
4
- interface AppLeaderAction {
5
- type: 'app';
6
- action: AppKeybinding;
7
- }
8
- interface CommandLeaderAction {
9
- type: 'command';
10
- command: DoomLeaderCommand;
11
- }
12
- interface ExtensionLeaderAction {
13
- type: 'extension';
14
- source: string;
15
- action: DoomLeaderExtensionAction;
16
- }
17
- type DoomLeaderAction = AppLeaderAction | CommandLeaderAction | ExtensionLeaderAction;
18
- interface DoomLeaderResolvedOption {
19
- key: string;
20
- label: string;
21
- detail?: string;
22
- hasChildren: boolean;
23
- action?: DoomLeaderAction;
24
- }
25
- interface DoomLeaderGroup {
26
- label: string;
27
- options: readonly DoomLeaderResolvedOption[];
28
- }
29
- interface DoomLeaderDiagnostic {
30
- source: string;
31
- bindingId?: string;
32
- message: string;
33
- }
34
- interface DoomLeaderRegistrationResult {
35
- accepted: boolean;
36
- diagnostics: readonly DoomLeaderDiagnostic[];
37
- }
38
- declare class DoomLeaderRegistry {
39
- private root;
40
- private readonly contributions;
41
- private readonly listeners;
42
- private diagnostics;
43
- private dirty;
44
- constructor();
45
- register(value: unknown): DoomLeaderRegistrationResult;
46
- /** Records a contribution without rebuilding the whole tree immediately. */
47
- registerDeferred(value: unknown): DoomLeaderRegistrationResult;
48
- private apply;
49
- /** Rebuilds one batch and returns its deterministic conflict diagnostics. */
50
- flush(): DoomLeaderDiagnostic[];
51
- getGroup(path: readonly string[]): DoomLeaderGroup | undefined;
52
- getDiagnostics(): DoomLeaderDiagnostic[];
53
- subscribe(listener: () => void): () => void;
54
- private rebuild;
55
- }
56
- //#endregion
57
- export { DoomLeaderAction, DoomLeaderDiagnostic, DoomLeaderGroup, DoomLeaderRegistrationResult, DoomLeaderRegistry, DoomLeaderResolvedOption };
58
- //# sourceMappingURL=leaderRegistry.d.cts.map
1
+ import { DoomLeaderAction, DoomLeaderDiagnostic, DoomLeaderGroup, DoomLeaderRegistrationResult, DoomLeaderRegistry, DoomLeaderResolvedOption } from "./services/leader/leaderRegistry.cjs";
2
+ export { type DoomLeaderAction, type DoomLeaderDiagnostic, type DoomLeaderGroup, type DoomLeaderRegistrationResult, DoomLeaderRegistry, type DoomLeaderResolvedOption };
@@ -1,58 +1,2 @@
1
- import { DoomLeaderCommand, DoomLeaderExtensionAction } from "./leader.mjs";
2
- import { AppKeybinding } from "@earendil-works/pi-coding-agent";
3
- //#region src/leaderRegistry.d.ts
4
- interface AppLeaderAction {
5
- type: 'app';
6
- action: AppKeybinding;
7
- }
8
- interface CommandLeaderAction {
9
- type: 'command';
10
- command: DoomLeaderCommand;
11
- }
12
- interface ExtensionLeaderAction {
13
- type: 'extension';
14
- source: string;
15
- action: DoomLeaderExtensionAction;
16
- }
17
- type DoomLeaderAction = AppLeaderAction | CommandLeaderAction | ExtensionLeaderAction;
18
- interface DoomLeaderResolvedOption {
19
- key: string;
20
- label: string;
21
- detail?: string;
22
- hasChildren: boolean;
23
- action?: DoomLeaderAction;
24
- }
25
- interface DoomLeaderGroup {
26
- label: string;
27
- options: readonly DoomLeaderResolvedOption[];
28
- }
29
- interface DoomLeaderDiagnostic {
30
- source: string;
31
- bindingId?: string;
32
- message: string;
33
- }
34
- interface DoomLeaderRegistrationResult {
35
- accepted: boolean;
36
- diagnostics: readonly DoomLeaderDiagnostic[];
37
- }
38
- declare class DoomLeaderRegistry {
39
- private root;
40
- private readonly contributions;
41
- private readonly listeners;
42
- private diagnostics;
43
- private dirty;
44
- constructor();
45
- register(value: unknown): DoomLeaderRegistrationResult;
46
- /** Records a contribution without rebuilding the whole tree immediately. */
47
- registerDeferred(value: unknown): DoomLeaderRegistrationResult;
48
- private apply;
49
- /** Rebuilds one batch and returns its deterministic conflict diagnostics. */
50
- flush(): DoomLeaderDiagnostic[];
51
- getGroup(path: readonly string[]): DoomLeaderGroup | undefined;
52
- getDiagnostics(): DoomLeaderDiagnostic[];
53
- subscribe(listener: () => void): () => void;
54
- private rebuild;
55
- }
56
- //#endregion
57
- export { DoomLeaderAction, DoomLeaderDiagnostic, DoomLeaderGroup, DoomLeaderRegistrationResult, DoomLeaderRegistry, DoomLeaderResolvedOption };
58
- //# sourceMappingURL=leaderRegistry.d.mts.map
1
+ import { DoomLeaderAction, DoomLeaderDiagnostic, DoomLeaderGroup, DoomLeaderRegistrationResult, DoomLeaderRegistry, DoomLeaderResolvedOption } from "./services/leader/leaderRegistry.mjs";
2
+ export { type DoomLeaderAction, type DoomLeaderDiagnostic, type DoomLeaderGroup, type DoomLeaderRegistrationResult, DoomLeaderRegistry, type DoomLeaderResolvedOption };