loadouts 0.2.3 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (244) hide show
  1. package/bundled/embedded/opencode/loadouts-runtime.tsx +14461 -0
  2. package/bundled/embedded/pi/loadouts-runtime.ts +14638 -0
  3. package/bundled/extensions/loadouts-runtime/index.ts +14638 -0
  4. package/bundled/extensions/loadouts-runtime/package.json +6 -0
  5. package/bundled/loadouts/opencode-runtime.yaml +7 -0
  6. package/bundled/loadouts/pi-runtime.yaml +5 -0
  7. package/bundled/opencode/commands/loadouts.md +3 -0
  8. package/bundled/opencode/plugins/loadouts-runtime-tui.tsx +14461 -0
  9. package/bundled/opencode/plugins/loadouts-runtime.ts +533 -0
  10. package/bundled/opencode/tui.jsonc +5 -0
  11. package/dist/builtins/agent-transforms.d.ts +9 -0
  12. package/dist/builtins/agent-transforms.d.ts.map +1 -0
  13. package/dist/builtins/agent-transforms.js +232 -0
  14. package/dist/builtins/agent-transforms.js.map +1 -0
  15. package/dist/builtins/index.d.ts.map +1 -1
  16. package/dist/builtins/index.js +13 -0
  17. package/dist/builtins/index.js.map +1 -1
  18. package/dist/builtins/kinds/agent.d.ts +3 -0
  19. package/dist/builtins/kinds/agent.d.ts.map +1 -0
  20. package/dist/builtins/kinds/agent.js +8 -0
  21. package/dist/builtins/kinds/agent.js.map +1 -0
  22. package/dist/builtins/kinds/extension-dir.d.ts +3 -0
  23. package/dist/builtins/kinds/extension-dir.d.ts.map +1 -0
  24. package/dist/builtins/kinds/extension-dir.js +8 -0
  25. package/dist/builtins/kinds/extension-dir.js.map +1 -0
  26. package/dist/builtins/kinds/opencode-command.d.ts +3 -0
  27. package/dist/builtins/kinds/opencode-command.d.ts.map +1 -0
  28. package/dist/builtins/kinds/opencode-command.js +8 -0
  29. package/dist/builtins/kinds/opencode-command.js.map +1 -0
  30. package/dist/builtins/kinds/opencode-plugin.js +1 -1
  31. package/dist/builtins/kinds/opencode-plugin.js.map +1 -1
  32. package/dist/builtins/kinds/opencode-tui-config.d.ts +3 -0
  33. package/dist/builtins/kinds/opencode-tui-config.d.ts.map +1 -0
  34. package/dist/builtins/kinds/opencode-tui-config.js +8 -0
  35. package/dist/builtins/kinds/opencode-tui-config.js.map +1 -0
  36. package/dist/builtins/tools/claude-code.d.ts.map +1 -1
  37. package/dist/builtins/tools/claude-code.js +7 -1
  38. package/dist/builtins/tools/claude-code.js.map +1 -1
  39. package/dist/builtins/tools/codex.d.ts.map +1 -1
  40. package/dist/builtins/tools/codex.js +10 -1
  41. package/dist/builtins/tools/codex.js.map +1 -1
  42. package/dist/builtins/tools/cursor.d.ts.map +1 -1
  43. package/dist/builtins/tools/cursor.js +7 -1
  44. package/dist/builtins/tools/cursor.js.map +1 -1
  45. package/dist/builtins/tools/opencode.d.ts.map +1 -1
  46. package/dist/builtins/tools/opencode.js +16 -0
  47. package/dist/builtins/tools/opencode.js.map +1 -1
  48. package/dist/builtins/tools/pi.d.ts.map +1 -1
  49. package/dist/builtins/tools/pi.js +2 -1
  50. package/dist/builtins/tools/pi.js.map +1 -1
  51. package/dist/cli/commands/activate.d.ts.map +1 -1
  52. package/dist/cli/commands/activate.js +9 -0
  53. package/dist/cli/commands/activate.js.map +1 -1
  54. package/dist/cli/commands/diff.d.ts +10 -0
  55. package/dist/cli/commands/diff.d.ts.map +1 -1
  56. package/dist/cli/commands/diff.js +71 -30
  57. package/dist/cli/commands/diff.js.map +1 -1
  58. package/dist/cli/commands/docs.d.ts.map +1 -1
  59. package/dist/cli/commands/docs.js +2 -1
  60. package/dist/cli/commands/docs.js.map +1 -1
  61. package/dist/cli/commands/doctor.d.ts.map +1 -1
  62. package/dist/cli/commands/doctor.js +10 -0
  63. package/dist/cli/commands/doctor.js.map +1 -1
  64. package/dist/cli/commands/info.d.ts +10 -0
  65. package/dist/cli/commands/info.d.ts.map +1 -1
  66. package/dist/cli/commands/info.js +45 -1
  67. package/dist/cli/commands/info.js.map +1 -1
  68. package/dist/cli/commands/init.d.ts.map +1 -1
  69. package/dist/cli/commands/init.js +5 -0
  70. package/dist/cli/commands/init.js.map +1 -1
  71. package/dist/cli/commands/install.d.ts.map +1 -1
  72. package/dist/cli/commands/install.js +15 -3
  73. package/dist/cli/commands/install.js.map +1 -1
  74. package/dist/cli/commands/list.d.ts +18 -0
  75. package/dist/cli/commands/list.d.ts.map +1 -1
  76. package/dist/cli/commands/list.js +27 -0
  77. package/dist/cli/commands/list.js.map +1 -1
  78. package/dist/cli/commands/migrate.d.ts +31 -0
  79. package/dist/cli/commands/migrate.d.ts.map +1 -0
  80. package/dist/cli/commands/migrate.js +223 -0
  81. package/dist/cli/commands/migrate.js.map +1 -0
  82. package/dist/cli/commands/render-engine.d.ts +1 -0
  83. package/dist/cli/commands/render-engine.d.ts.map +1 -1
  84. package/dist/cli/commands/render-engine.js +10 -35
  85. package/dist/cli/commands/render-engine.js.map +1 -1
  86. package/dist/cli/commands/runtime.d.ts +21 -0
  87. package/dist/cli/commands/runtime.d.ts.map +1 -0
  88. package/dist/cli/commands/runtime.js +100 -0
  89. package/dist/cli/commands/runtime.js.map +1 -0
  90. package/dist/cli/commands/status.d.ts +10 -0
  91. package/dist/cli/commands/status.d.ts.map +1 -1
  92. package/dist/cli/commands/status.js +100 -2
  93. package/dist/cli/commands/status.js.map +1 -1
  94. package/dist/cli/commands/sync.d.ts.map +1 -1
  95. package/dist/cli/commands/sync.js +6 -0
  96. package/dist/cli/commands/sync.js.map +1 -1
  97. package/dist/cli/commands/tui.d.ts +3 -0
  98. package/dist/cli/commands/tui.d.ts.map +1 -0
  99. package/dist/cli/commands/tui.js +20 -0
  100. package/dist/cli/commands/tui.js.map +1 -0
  101. package/dist/cli/index.d.ts.map +1 -1
  102. package/dist/cli/index.js +6 -0
  103. package/dist/cli/index.js.map +1 -1
  104. package/dist/core/agent-migration.d.ts +13 -0
  105. package/dist/core/agent-migration.d.ts.map +1 -0
  106. package/dist/core/agent-migration.js +397 -0
  107. package/dist/core/agent-migration.js.map +1 -0
  108. package/dist/core/import-discovery.d.ts.map +1 -1
  109. package/dist/core/import-discovery.js +27 -0
  110. package/dist/core/import-discovery.js.map +1 -1
  111. package/dist/core/kindLoader.d.ts +10 -4
  112. package/dist/core/kindLoader.d.ts.map +1 -1
  113. package/dist/core/kindLoader.js +22 -10
  114. package/dist/core/kindLoader.js.map +1 -1
  115. package/dist/core/registry.d.ts +4 -2
  116. package/dist/core/registry.d.ts.map +1 -1
  117. package/dist/core/registry.js.map +1 -1
  118. package/dist/core/render.d.ts.map +1 -1
  119. package/dist/core/render.js +62 -13
  120. package/dist/core/render.js.map +1 -1
  121. package/dist/core/resolve.d.ts +18 -2
  122. package/dist/core/resolve.d.ts.map +1 -1
  123. package/dist/core/resolve.js +50 -27
  124. package/dist/core/resolve.js.map +1 -1
  125. package/dist/core/runtime.d.ts +79 -0
  126. package/dist/core/runtime.d.ts.map +1 -0
  127. package/dist/core/runtime.js +345 -0
  128. package/dist/core/runtime.js.map +1 -0
  129. package/dist/core/types.d.ts.map +1 -1
  130. package/dist/integrations/opencode-runtime/bridge.d.ts +17 -0
  131. package/dist/integrations/opencode-runtime/bridge.d.ts.map +1 -0
  132. package/dist/integrations/opencode-runtime/bridge.js +60 -0
  133. package/dist/integrations/opencode-runtime/bridge.js.map +1 -0
  134. package/dist/integrations/opencode-runtime/command.d.ts +4 -0
  135. package/dist/integrations/opencode-runtime/command.d.ts.map +1 -0
  136. package/dist/integrations/opencode-runtime/command.js +200 -0
  137. package/dist/integrations/opencode-runtime/command.js.map +1 -0
  138. package/dist/integrations/opencode-runtime/index.d.ts +6 -0
  139. package/dist/integrations/opencode-runtime/index.d.ts.map +1 -0
  140. package/dist/integrations/opencode-runtime/index.js +5 -0
  141. package/dist/integrations/opencode-runtime/index.js.map +1 -0
  142. package/dist/integrations/opencode-runtime/plugin.d.ts +59 -0
  143. package/dist/integrations/opencode-runtime/plugin.d.ts.map +1 -0
  144. package/dist/integrations/opencode-runtime/plugin.js +238 -0
  145. package/dist/integrations/opencode-runtime/plugin.js.map +1 -0
  146. package/dist/integrations/opencode-runtime/state.d.ts +8 -0
  147. package/dist/integrations/opencode-runtime/state.d.ts.map +1 -0
  148. package/dist/integrations/opencode-runtime/state.js +27 -0
  149. package/dist/integrations/opencode-runtime/state.js.map +1 -0
  150. package/dist/integrations/opencode-runtime/types.d.ts +38 -0
  151. package/dist/integrations/opencode-runtime/types.d.ts.map +1 -0
  152. package/dist/integrations/opencode-runtime/types.js +2 -0
  153. package/dist/integrations/opencode-runtime/types.js.map +1 -0
  154. package/dist/lib/artifact-paths.d.ts.map +1 -1
  155. package/dist/lib/artifact-paths.js +4 -0
  156. package/dist/lib/artifact-paths.js.map +1 -1
  157. package/dist/lib/artifact-table.d.ts.map +1 -1
  158. package/dist/lib/artifact-table.js +13 -1
  159. package/dist/lib/artifact-table.js.map +1 -1
  160. package/dist/lib/gitignore.d.ts.map +1 -1
  161. package/dist/lib/gitignore.js +4 -0
  162. package/dist/lib/gitignore.js.map +1 -1
  163. package/dist/tui/core/actions.d.ts +9 -0
  164. package/dist/tui/core/actions.d.ts.map +1 -0
  165. package/dist/tui/core/actions.js +70 -0
  166. package/dist/tui/core/actions.js.map +1 -0
  167. package/dist/tui/core/data.d.ts +41 -0
  168. package/dist/tui/core/data.d.ts.map +1 -0
  169. package/dist/tui/core/data.js +150 -0
  170. package/dist/tui/core/data.js.map +1 -0
  171. package/dist/tui/core/host.d.ts +21 -0
  172. package/dist/tui/core/host.d.ts.map +1 -0
  173. package/dist/tui/core/host.js +2 -0
  174. package/dist/tui/core/host.js.map +1 -0
  175. package/dist/tui/core/intent.d.ts +80 -0
  176. package/dist/tui/core/intent.d.ts.map +1 -0
  177. package/dist/tui/core/intent.js +2 -0
  178. package/dist/tui/core/intent.js.map +1 -0
  179. package/dist/tui/core/keymap.d.ts +15 -0
  180. package/dist/tui/core/keymap.d.ts.map +1 -0
  181. package/dist/tui/core/keymap.js +36 -0
  182. package/dist/tui/core/keymap.js.map +1 -0
  183. package/dist/tui/core/model.d.ts +53 -0
  184. package/dist/tui/core/model.d.ts.map +1 -0
  185. package/dist/tui/core/model.js +33 -0
  186. package/dist/tui/core/model.js.map +1 -0
  187. package/dist/tui/core/theme.d.ts +15 -0
  188. package/dist/tui/core/theme.d.ts.map +1 -0
  189. package/dist/tui/core/theme.js +11 -0
  190. package/dist/tui/core/theme.js.map +1 -0
  191. package/dist/tui/core/update.d.ts +8 -0
  192. package/dist/tui/core/update.d.ts.map +1 -0
  193. package/dist/tui/core/update.js +192 -0
  194. package/dist/tui/core/update.js.map +1 -0
  195. package/dist/tui/core/view.d.ts +4 -0
  196. package/dist/tui/core/view.d.ts.map +1 -0
  197. package/dist/tui/core/view.js +150 -0
  198. package/dist/tui/core/view.js.map +1 -0
  199. package/dist/tui/core/viewspec.d.ts +44 -0
  200. package/dist/tui/core/viewspec.d.ts.map +1 -0
  201. package/dist/tui/core/viewspec.js +2 -0
  202. package/dist/tui/core/viewspec.js.map +1 -0
  203. package/dist/tui/hosts/_probe/embed-entry.d.ts +5 -0
  204. package/dist/tui/hosts/_probe/embed-entry.d.ts.map +1 -0
  205. package/dist/tui/hosts/_probe/embed-entry.js +8 -0
  206. package/dist/tui/hosts/_probe/embed-entry.js.map +1 -0
  207. package/dist/tui/hosts/pi/embed-entry.d.ts +3 -0
  208. package/dist/tui/hosts/pi/embed-entry.d.ts.map +1 -0
  209. package/dist/tui/hosts/pi/embed-entry.js +219 -0
  210. package/dist/tui/hosts/pi/embed-entry.js.map +1 -0
  211. package/dist/tui/hosts/pi/inject.d.ts +32 -0
  212. package/dist/tui/hosts/pi/inject.d.ts.map +1 -0
  213. package/dist/tui/hosts/pi/inject.js +53 -0
  214. package/dist/tui/hosts/pi/inject.js.map +1 -0
  215. package/dist/tui/hosts/standalone.d.ts +2 -0
  216. package/dist/tui/hosts/standalone.d.ts.map +1 -0
  217. package/dist/tui/hosts/standalone.js +145 -0
  218. package/dist/tui/hosts/standalone.js.map +1 -0
  219. package/dist/tui/skins/pi-tui/input.d.ts +5 -0
  220. package/dist/tui/skins/pi-tui/input.d.ts.map +1 -0
  221. package/dist/tui/skins/pi-tui/input.js +38 -0
  222. package/dist/tui/skins/pi-tui/input.js.map +1 -0
  223. package/dist/tui/skins/pi-tui/pi-theme-adapter.d.ts +4 -0
  224. package/dist/tui/skins/pi-tui/pi-theme-adapter.d.ts.map +1 -0
  225. package/dist/tui/skins/pi-tui/pi-theme-adapter.js +27 -0
  226. package/dist/tui/skins/pi-tui/pi-theme-adapter.js.map +1 -0
  227. package/dist/tui/skins/pi-tui/render.d.ts +35 -0
  228. package/dist/tui/skins/pi-tui/render.d.ts.map +1 -0
  229. package/dist/tui/skins/pi-tui/render.js +154 -0
  230. package/dist/tui/skins/pi-tui/render.js.map +1 -0
  231. package/dist/tui/skins/pi-tui/theme.d.ts +10 -0
  232. package/dist/tui/skins/pi-tui/theme.d.ts.map +1 -0
  233. package/dist/tui/skins/pi-tui/theme.js +58 -0
  234. package/dist/tui/skins/pi-tui/theme.js.map +1 -0
  235. package/docs/authoring.md +119 -2
  236. package/docs/commands.md +34 -0
  237. package/docs/compatibility.md +15 -8
  238. package/docs/concepts.md +10 -7
  239. package/docs/examples/opencode-runtime-plugin.ts +143 -0
  240. package/docs/index.md +1 -0
  241. package/docs/runtime.md +107 -0
  242. package/docs/troubleshooting.md +18 -1
  243. package/docs/tui-architecture.md +501 -0
  244. package/package.json +11 -2
@@ -0,0 +1,80 @@
1
+ import type { ActivationMode, ScopeFilter } from "./model.js";
2
+ export type Intent = {
3
+ t: "move";
4
+ delta: number;
5
+ } | {
6
+ t: "section";
7
+ dir: 1 | -1;
8
+ } | {
9
+ t: "toggle";
10
+ } | {
11
+ t: "activate";
12
+ } | {
13
+ t: "deactivate";
14
+ } | {
15
+ t: "sync";
16
+ } | {
17
+ t: "clear";
18
+ } | {
19
+ t: "diffPreview";
20
+ } | {
21
+ t: "edit";
22
+ } | {
23
+ t: "enter";
24
+ } | {
25
+ t: "filterStart";
26
+ } | {
27
+ t: "filterInput";
28
+ text: string;
29
+ } | {
30
+ t: "filterChar";
31
+ char: string;
32
+ } | {
33
+ t: "filterBackspace";
34
+ } | {
35
+ t: "filterCommit";
36
+ } | {
37
+ t: "filterCancel";
38
+ } | {
39
+ t: "cycleScope";
40
+ } | {
41
+ t: "cycleTool";
42
+ } | {
43
+ t: "cycleMode";
44
+ } | {
45
+ t: "undo";
46
+ } | {
47
+ t: "refresh";
48
+ } | {
49
+ t: "openHelp";
50
+ } | {
51
+ t: "closeOverlay";
52
+ } | {
53
+ t: "quit";
54
+ } | {
55
+ t: "effectDone";
56
+ effect: Effect["t"];
57
+ ok: boolean;
58
+ message?: string;
59
+ data?: string[];
60
+ };
61
+ export type Effect = {
62
+ t: "apply";
63
+ targetSet: string[];
64
+ mode: ActivationMode;
65
+ scope: ScopeFilter;
66
+ } | {
67
+ t: "clear";
68
+ mode: ActivationMode;
69
+ scope: ScopeFilter;
70
+ } | {
71
+ t: "plan";
72
+ targetSet: string[];
73
+ scope: ScopeFilter;
74
+ } | {
75
+ t: "reload";
76
+ } | {
77
+ t: "editFile";
78
+ path: string;
79
+ };
80
+ //# sourceMappingURL=intent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent.d.ts","sourceRoot":"","sources":["../../../src/tui/core/intent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9D,MAAM,MAAM,MAAM,GACd;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC5B;IAAE,CAAC,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;CAAE,GAC7B;IAAE,CAAC,EAAE,QAAQ,CAAA;CAAE,GACf;IAAE,CAAC,EAAE,UAAU,CAAA;CAAE,GACjB;IAAE,CAAC,EAAE,YAAY,CAAA;CAAE,GACnB;IAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GACb;IAAE,CAAC,EAAE,OAAO,CAAA;CAAE,GACd;IAAE,CAAC,EAAE,aAAa,CAAA;CAAE,GACpB;IAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GACb;IAAE,CAAC,EAAE,OAAO,CAAA;CAAE,GACd;IAAE,CAAC,EAAE,aAAa,CAAA;CAAE,GACpB;IAAE,CAAC,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,CAAC,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,CAAC,EAAE,iBAAiB,CAAA;CAAE,GACxB;IAAE,CAAC,EAAE,cAAc,CAAA;CAAE,GACrB;IAAE,CAAC,EAAE,cAAc,CAAA;CAAE,GACrB;IAAE,CAAC,EAAE,YAAY,CAAA;CAAE,GACnB;IAAE,CAAC,EAAE,WAAW,CAAA;CAAE,GAClB;IAAE,CAAC,EAAE,WAAW,CAAA;CAAE,GAClB;IAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GACb;IAAE,CAAC,EAAE,SAAS,CAAA;CAAE,GAChB;IAAE,CAAC,EAAE,UAAU,CAAA;CAAE,GACjB;IAAE,CAAC,EAAE,cAAc,CAAA;CAAE,GACrB;IAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GACb;IACE,CAAC,EAAE,YAAY,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IACpB,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEN,MAAM,MAAM,MAAM,GACd;IAAE,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GAC7E;IAAE,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GACxD;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GACtD;IAAE,CAAC,EAAE,QAAQ,CAAA;CAAE,GACf;IAAE,CAAC,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=intent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent.js","sourceRoot":"","sources":["../../../src/tui/core/intent.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import type { Intent } from "./intent.js";
2
+ export interface KeyBinding {
3
+ keys: string[];
4
+ label: string;
5
+ intent: Intent;
6
+ hint?: boolean;
7
+ mode?: "normal" | "filter";
8
+ }
9
+ export declare const keymap: KeyBinding[];
10
+ export declare function intentForKey(key: string): Intent | undefined;
11
+ export declare function footerKeyHints(): {
12
+ key: string;
13
+ label: string;
14
+ }[];
15
+ //# sourceMappingURL=keymap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keymap.d.ts","sourceRoot":"","sources":["../../../src/tui/core/keymap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC5B;AAED,eAAO,MAAM,MAAM,EAAE,UAAU,EA0B9B,CAAC;AAEF,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE5D;AAED,wBAAgB,cAAc,IAAI;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAIjE"}
@@ -0,0 +1,36 @@
1
+ export const keymap = [
2
+ { keys: ["j", "down"], label: "move down", intent: { t: "move", delta: 1 } },
3
+ { keys: ["k", "up"], label: "move up", intent: { t: "move", delta: -1 } },
4
+ { keys: ["tab"], label: "next section", intent: { t: "section", dir: 1 } },
5
+ { keys: ["shift+tab"], label: "prev section", intent: { t: "section", dir: -1 } },
6
+ { keys: ["space"], label: "toggle", intent: { t: "toggle" }, hint: true },
7
+ { keys: ["a"], label: "activate", intent: { t: "activate" }, hint: true },
8
+ { keys: ["d"], label: "deactivate", intent: { t: "deactivate" }, hint: true },
9
+ { keys: ["s"], label: "sync", intent: { t: "sync" }, hint: true },
10
+ { keys: ["x"], label: "clear", intent: { t: "clear" }, hint: true },
11
+ { keys: ["enter"], label: "details", intent: { t: "enter" } },
12
+ { keys: ["D"], label: "diff", intent: { t: "diffPreview" }, hint: true },
13
+ { keys: ["e"], label: "edit", intent: { t: "edit" }, hint: true },
14
+ { keys: ["m"], label: "mode", intent: { t: "cycleMode" } },
15
+ { keys: ["g"], label: "scope", intent: { t: "cycleScope" } },
16
+ { keys: ["t"], label: "tool", intent: { t: "cycleTool" } },
17
+ { keys: ["/"], label: "find", intent: { t: "filterStart" }, hint: true },
18
+ { keys: ["u"], label: "undo", intent: { t: "undo" }, hint: true },
19
+ { keys: ["r"], label: "refresh", intent: { t: "refresh" } },
20
+ { keys: ["?"], label: "help", intent: { t: "openHelp" }, hint: true },
21
+ { keys: ["esc"], label: "close/cancel", intent: { t: "closeOverlay" } },
22
+ { keys: ["q"], label: "quit", intent: { t: "quit" } },
23
+ { keys: ["printable"], label: "filter text", intent: { t: "filterChar", char: "" }, mode: "filter" },
24
+ { keys: ["backspace"], label: "delete filter char", intent: { t: "filterBackspace" }, mode: "filter" },
25
+ { keys: ["enter"], label: "commit filter", intent: { t: "filterCommit" }, mode: "filter" },
26
+ { keys: ["esc"], label: "cancel filter", intent: { t: "filterCancel" }, mode: "filter" },
27
+ ];
28
+ export function intentForKey(key) {
29
+ return keymap.find((binding) => binding.mode !== "filter" && binding.keys.includes(key))?.intent;
30
+ }
31
+ export function footerKeyHints() {
32
+ return keymap
33
+ .filter((binding) => binding.mode !== "filter" && binding.hint)
34
+ .map((binding) => ({ key: binding.keys[0], label: binding.label }));
35
+ }
36
+ //# sourceMappingURL=keymap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keymap.js","sourceRoot":"","sources":["../../../src/tui/core/keymap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import type { DashboardData, LoadoutRow } from "./data.js";
2
+ export type Section = "active" | "available" | "issues";
3
+ export type ActivationMode = "filesystem" | "runtime";
4
+ export type ScopeFilter = "global" | "project";
5
+ export interface DetailModel {
6
+ rowId: string;
7
+ }
8
+ export interface UndoSnapshot {
9
+ rows: LoadoutRow[];
10
+ sections: Record<Section, string[]>;
11
+ cursor: {
12
+ section: Section;
13
+ index: number;
14
+ };
15
+ targetSet: string[];
16
+ scope: ScopeFilter;
17
+ }
18
+ export interface Model {
19
+ rows: LoadoutRow[];
20
+ sections: Record<Section, string[]>;
21
+ cursor: {
22
+ section: Section;
23
+ index: number;
24
+ };
25
+ filter: {
26
+ text: string;
27
+ scope?: ScopeFilter;
28
+ tool?: string;
29
+ };
30
+ filtering: boolean;
31
+ mode: ActivationMode;
32
+ scope: ScopeFilter;
33
+ staged?: Set<string>;
34
+ undo?: UndoSnapshot;
35
+ detail?: DetailModel;
36
+ overlay?: "help" | "diff" | "confirm" | null;
37
+ busy?: {
38
+ label: string;
39
+ } | null;
40
+ lastResult?: {
41
+ text: string;
42
+ variant: "info" | "success" | "error";
43
+ };
44
+ diffLines?: string[];
45
+ quitRequested?: boolean;
46
+ }
47
+ export declare function createInitialModel(data: DashboardData, options?: {
48
+ mode?: ActivationMode;
49
+ scope?: ScopeFilter;
50
+ }): Model;
51
+ export declare function buildSections(rows: LoadoutRow[]): Record<Section, string[]>;
52
+ export declare function firstCursor(sections: Record<Section, string[]>): Model["cursor"];
53
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/tui/core/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE3D,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;AACxD,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,SAAS,CAAC;AACtD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE/C,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IACpC,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IACpC,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,WAAW,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAC7C,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAChC,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAA;KAAE,CAAC;IACrE,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,aAAa,EACnB,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,cAAc,CAAC;IAAC,KAAK,CAAC,EAAE,WAAW,CAAA;CAAO,GAC3D,KAAK,CAiBP;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAM3E;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAKhF"}
@@ -0,0 +1,33 @@
1
+ export function createInitialModel(data, options = {}) {
2
+ const sections = buildSections(data.rows);
3
+ return {
4
+ rows: data.rows,
5
+ sections,
6
+ cursor: firstCursor(sections),
7
+ filter: { text: "" },
8
+ filtering: false,
9
+ mode: options.mode ?? "filesystem",
10
+ scope: options.scope ?? "project",
11
+ staged: new Set(),
12
+ overlay: null,
13
+ busy: null,
14
+ lastResult: data.issues.length
15
+ ? { text: `${data.issues.length} issue(s) detected`, variant: "error" }
16
+ : undefined,
17
+ };
18
+ }
19
+ export function buildSections(rows) {
20
+ return {
21
+ active: rows.filter((r) => r.status === "active" || r.status === "drift").map((r) => r.id),
22
+ available: rows.filter((r) => r.status === "available").map((r) => r.id),
23
+ issues: rows.filter((r) => r.status === "broken").map((r) => r.id),
24
+ };
25
+ }
26
+ export function firstCursor(sections) {
27
+ for (const section of ["active", "available", "issues"]) {
28
+ if (sections[section].length > 0)
29
+ return { section, index: 0 };
30
+ }
31
+ return { section: "active", index: 0 };
32
+ }
33
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/tui/core/model.ts"],"names":[],"mappings":"AAoCA,MAAM,UAAU,kBAAkB,CAChC,IAAmB,EACnB,UAA0D,EAAE;IAE5D,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,QAAQ;QACR,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC;QAC7B,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACpB,SAAS,EAAE,KAAK;QAChB,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,YAAY;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,SAAS;QACjC,MAAM,EAAE,IAAI,GAAG,EAAE;QACjB,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,IAAI;QACV,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;YAC5B,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,oBAAoB,EAAE,OAAO,EAAE,OAAO,EAAE;YACvE,CAAC,CAAC,SAAS;KACd,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAkB;IAC9C,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1F,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAmC;IAC7D,KAAK,MAAM,OAAO,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAU,EAAE,CAAC;QACjE,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACjE,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AACzC,CAAC"}
@@ -0,0 +1,15 @@
1
+ export type StyleToken = "text" | "muted" | "dim" | "accent" | "success" | "error" | "warning" | "border";
2
+ export interface ThemeTokens {
3
+ text: string;
4
+ muted: string;
5
+ dim: string;
6
+ accent: string;
7
+ success: string;
8
+ error: string;
9
+ warning: string;
10
+ border: string;
11
+ background?: string;
12
+ selectedBackground?: string;
13
+ }
14
+ export declare const defaultThemeTokens: ThemeTokens;
15
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/tui/core/theme.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,OAAO,GACP,KAAK,GACL,QAAQ,GACR,SAAS,GACT,OAAO,GACP,SAAS,GACT,QAAQ,CAAC;AAEb,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,kBAAkB,EAAE,WAShC,CAAC"}
@@ -0,0 +1,11 @@
1
+ export const defaultThemeTokens = {
2
+ text: "text",
3
+ muted: "muted",
4
+ dim: "dim",
5
+ accent: "accent",
6
+ success: "success",
7
+ error: "error",
8
+ warning: "warning",
9
+ border: "border",
10
+ };
11
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../src/tui/core/theme.ts"],"names":[],"mappings":"AAuBA,MAAM,CAAC,MAAM,kBAAkB,GAAgB;IAC7C,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;CACjB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { type Model } from "./model.js";
2
+ import type { Effect, Intent } from "./intent.js";
3
+ export interface UpdateResult {
4
+ model: Model;
5
+ effect?: Effect;
6
+ }
7
+ export declare function update(model: Model, intent: Intent): UpdateResult;
8
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/tui/core/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,KAAK,EAAkC,MAAM,YAAY,CAAC;AACpG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGlD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID,wBAAgB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,CA0BjE"}
@@ -0,0 +1,192 @@
1
+ import { buildSections, firstCursor } from "./model.js";
2
+ const SECTIONS = ["active", "available", "issues"];
3
+ export function update(model, intent) {
4
+ if (intent.t === "closeOverlay")
5
+ return model.filtering ? cancelFilter(model) : { model: { ...model, overlay: null, diffLines: undefined } };
6
+ if (intent.t === "filterStart")
7
+ return withCursor({ ...model, filtering: true });
8
+ if (intent.t === "filterInput")
9
+ return withCursor({ ...model, filter: { ...model.filter, text: intent.text } });
10
+ if (intent.t === "filterChar")
11
+ return withCursor({ ...model, filter: { ...model.filter, text: model.filter.text + intent.char } });
12
+ if (intent.t === "filterBackspace")
13
+ return withCursor({ ...model, filter: { ...model.filter, text: model.filter.text.slice(0, -1) } });
14
+ if (intent.t === "filterCommit")
15
+ return { model: { ...model, filtering: false } };
16
+ if (intent.t === "filterCancel")
17
+ return cancelFilter(model);
18
+ if (intent.t === "effectDone")
19
+ return effectDone(model, intent);
20
+ if (model.filtering)
21
+ return { model };
22
+ if (intent.t === "openHelp")
23
+ return { model: { ...model, overlay: "help" } };
24
+ if (intent.t === "quit")
25
+ return { model: { ...model, quitRequested: true } };
26
+ if (intent.t === "cycleScope")
27
+ return withCursor({ ...model, filter: { ...model.filter, scope: nextScope(model.filter.scope) } });
28
+ if (intent.t === "cycleTool")
29
+ return withCursor({ ...model, filter: { ...model.filter, tool: nextTool(model) } });
30
+ if (intent.t === "cycleMode")
31
+ return { model: { ...model, mode: model.mode === "filesystem" ? "runtime" : "filesystem" } };
32
+ if (intent.t === "move")
33
+ return { model: move(model, intent.delta) };
34
+ if (intent.t === "section")
35
+ return { model: moveSection(model, intent.dir) };
36
+ if (intent.t === "enter")
37
+ return { model: toggleDetail(model) };
38
+ if (intent.t === "refresh")
39
+ return { model: { ...model, busy: { label: "Refreshing" } }, effect: { t: "reload" } };
40
+ if (intent.t === "edit")
41
+ return edit(model);
42
+ if (intent.t === "diffPreview")
43
+ return plan(model);
44
+ if (intent.t === "sync")
45
+ return apply(model, activeNames(model, model.scope), "Syncing");
46
+ if (intent.t === "clear")
47
+ return clear(model);
48
+ if (intent.t === "undo")
49
+ return undo(model);
50
+ if (intent.t === "activate" || intent.t === "deactivate" || intent.t === "toggle")
51
+ return toggle(model, intent.t);
52
+ return { model };
53
+ }
54
+ function cancelFilter(model) {
55
+ return withCursor({ ...model, filtering: false, filter: { ...model.filter, text: "" } });
56
+ }
57
+ function toggle(model, action) {
58
+ const row = cursorRow(model);
59
+ if (!row || row.status === "broken")
60
+ return { model };
61
+ const shouldActivate = action === "activate" || (action === "toggle" && !row.activation);
62
+ if ((shouldActivate && row.activation) || (!shouldActivate && !row.activation))
63
+ return { model };
64
+ const nextRows = model.rows.map((candidate) => candidate.id === row.id
65
+ ? { ...candidate, status: shouldActivate ? "active" : "available", activation: shouldActivate ? model.mode : null, issue: undefined }
66
+ : candidate);
67
+ const sections = buildSections(nextRows);
68
+ const targetSet = activeNames({ ...model, rows: nextRows }, row.scope);
69
+ return {
70
+ model: {
71
+ ...model,
72
+ rows: nextRows,
73
+ sections,
74
+ cursor: cursorForId(sections, row.id),
75
+ undo: snapshot(model),
76
+ busy: { label: shouldActivate ? "Activating" : "Deactivating" },
77
+ lastResult: undefined,
78
+ },
79
+ effect: { t: "apply", targetSet, mode: model.mode, scope: row.scope },
80
+ };
81
+ }
82
+ function undo(model) {
83
+ if (!model.undo)
84
+ return { model };
85
+ return {
86
+ model: { ...model, rows: model.undo.rows, sections: model.undo.sections, cursor: model.undo.cursor, undo: undefined, busy: { label: "Undoing" } },
87
+ effect: { t: "apply", targetSet: model.undo.targetSet, mode: model.mode, scope: model.undo.scope },
88
+ };
89
+ }
90
+ function clear(model) {
91
+ const nextRows = model.rows.map((row) => row.activation && row.scope === model.scope ? { ...row, status: "available", activation: null, issue: undefined } : row);
92
+ return {
93
+ model: { ...model, rows: nextRows, sections: buildSections(nextRows), cursor: firstCursor(buildSections(nextRows)), undo: snapshot(model), busy: { label: "Clearing" } },
94
+ effect: { t: "clear", mode: model.mode, scope: model.scope },
95
+ };
96
+ }
97
+ function apply(model, targetSet, label) {
98
+ return { model: { ...model, busy: { label }, undo: snapshot(model) }, effect: { t: "apply", targetSet, mode: model.mode, scope: model.scope } };
99
+ }
100
+ function plan(model) {
101
+ const targetSet = activeNames(model, model.scope);
102
+ return { model: { ...model, busy: { label: "Planning diff" }, overlay: "diff" }, effect: { t: "plan", targetSet, scope: model.scope } };
103
+ }
104
+ function edit(model) {
105
+ const row = cursorRow(model);
106
+ if (!row?.filePath)
107
+ return { model };
108
+ return { model, effect: { t: "editFile", path: row.filePath } };
109
+ }
110
+ function effectDone(model, intent) {
111
+ return {
112
+ model: {
113
+ ...model,
114
+ busy: null,
115
+ diffLines: intent.effect === "plan" ? intent.data ?? [intent.message ?? "No changes"] : model.diffLines,
116
+ lastResult: intent.message ? { text: intent.message, variant: intent.ok ? "success" : "error" } : model.lastResult,
117
+ },
118
+ };
119
+ }
120
+ function move(model, delta) {
121
+ const ids = visibleIds(model, model.cursor.section);
122
+ if (ids.length === 0)
123
+ return model;
124
+ const index = clamp(model.cursor.index + delta, 0, ids.length - 1);
125
+ return { ...model, cursor: { ...model.cursor, index } };
126
+ }
127
+ function moveSection(model, dir) {
128
+ const current = SECTIONS.indexOf(model.cursor.section);
129
+ for (let step = 1; step <= SECTIONS.length; step++) {
130
+ const section = SECTIONS[(current + step * dir + SECTIONS.length) % SECTIONS.length];
131
+ if (visibleIds(model, section).length > 0)
132
+ return { ...model, cursor: { section, index: 0 } };
133
+ }
134
+ return model;
135
+ }
136
+ function toggleDetail(model) {
137
+ const row = cursorRow(model);
138
+ if (!row)
139
+ return model;
140
+ return { ...model, detail: model.detail?.rowId === row.id ? undefined : { rowId: row.id } };
141
+ }
142
+ function withCursor(model) {
143
+ const ids = visibleIds(model, model.cursor.section);
144
+ if (ids.length > 0)
145
+ return { model: { ...model, cursor: { ...model.cursor, index: clamp(model.cursor.index, 0, ids.length - 1) } } };
146
+ return { model: moveSection({ ...model, cursor: firstCursor(model.sections) }, 1) };
147
+ }
148
+ function cursorRow(model) {
149
+ const id = visibleIds(model, model.cursor.section)[model.cursor.index];
150
+ return model.rows.find((row) => row.id === id);
151
+ }
152
+ function visibleIds(model, section) {
153
+ return model.sections[section].filter((id) => {
154
+ const row = model.rows.find((candidate) => candidate.id === id);
155
+ if (!row)
156
+ return false;
157
+ if (model.filter.scope && row.scope !== model.filter.scope)
158
+ return false;
159
+ if (model.filter.tool && !row.tools.includes(model.filter.tool))
160
+ return false;
161
+ const text = model.filter.text.trim().toLowerCase();
162
+ return !text || `${row.name} ${row.description ?? ""}`.toLowerCase().includes(text);
163
+ });
164
+ }
165
+ function cursorForId(sections, id) {
166
+ for (const section of SECTIONS) {
167
+ const index = sections[section].indexOf(id);
168
+ if (index >= 0)
169
+ return { section, index };
170
+ }
171
+ return firstCursor(sections);
172
+ }
173
+ function snapshot(model) {
174
+ return { rows: model.rows, sections: model.sections, cursor: model.cursor, targetSet: activeNames(model, model.scope), scope: model.scope };
175
+ }
176
+ function activeNames(model, scope) {
177
+ return model.rows.filter((row) => row.activation && (!scope || row.scope === scope)).map((row) => row.name);
178
+ }
179
+ function nextScope(scope) {
180
+ return scope === undefined ? "project" : scope === "project" ? "global" : undefined;
181
+ }
182
+ function nextTool(model) {
183
+ const tools = Array.from(new Set(model.rows.flatMap((row) => row.tools))).sort();
184
+ if (tools.length === 0)
185
+ return undefined;
186
+ const index = model.filter.tool ? tools.indexOf(model.filter.tool) : -1;
187
+ return index < 0 ? tools[0] : index === tools.length - 1 ? undefined : tools[index + 1];
188
+ }
189
+ function clamp(value, min, max) {
190
+ return Math.max(min, Math.min(max, value));
191
+ }
192
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/tui/core/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Model } from "./model.js";
2
+ import type { ViewSpec } from "./viewspec.js";
3
+ export declare function view(model: Model): ViewSpec;
4
+ //# sourceMappingURL=view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/tui/core/view.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAW,MAAM,YAAY,CAAC;AAEjD,OAAO,KAAK,EAAsB,QAAQ,EAAE,MAAM,eAAe,CAAC;AASlE,wBAAgB,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,CAS3C"}