@akanjs/cli 3.0.0-beta.15 → 3.0.0-beta.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/.build-stamp +1 -1
  2. package/{CodeAgent-d3wvbq8q.js → CodeAgent-gjqnc2mg.js} +2 -2
  3. package/{CodeTui-6c9a2wtk.js → CodeTui-nd9hqvrw.js} +196 -11
  4. package/{agent.command-9cg8m87z.js → agent.command-n664dtcv.js} +5 -5
  5. package/akanCode.js +9 -9
  6. package/{application.command-x75men32.js → application.command-t5542jte.js} +5 -5
  7. package/{applicationBuildRunner-d3702f1w.js → applicationBuildRunner-x4gbfn7y.js} +2 -2
  8. package/{applicationReleasePackager-2kdyj3te.js → applicationReleasePackager-z61ep017.js} +1 -1
  9. package/buildBatch.proc.js +2 -2
  10. package/{capacitorApp-qk975zyz.js → capacitorApp-shv3ajh5.js} +2 -2
  11. package/{cloud.command-a09wggfq.js → cloud.command-dk5tj39k.js} +8 -8
  12. package/{cloud.script-qd3hpybf.js → cloud.script-ch3xrw3s.js} +8 -8
  13. package/{code.command-ca7rpmez.js → code.command-88sebgnn.js} +7 -7
  14. package/{context.command-9kbm0527.js → context.command-pqsm5jrk.js} +13 -13
  15. package/context.runner-bys6ykcp.js +22 -0
  16. package/{devTui-v19fbnpk.js → devTui-gy6mendg.js} +1 -1
  17. package/{devTuiView-pa63jrjq.js → devTuiView-y1548wy6.js} +1 -1
  18. package/{guideline.command-qvrh5pnx.js → guideline.command-rpc2emw8.js} +2 -2
  19. package/incrementalBuilder.proc.js +1 -1
  20. package/{index-658xafm1.js → index-2pm1j01n.js} +3 -3
  21. package/{index-erzcytap.js → index-2sq06vv0.js} +171 -201
  22. package/{index-1sggq0m8.js → index-3cymrzsb.js} +1 -1
  23. package/{index-ea1smknd.js → index-3mg4h788.js} +2 -2
  24. package/{index-bchkysja.js → index-4cvpzkq6.js} +3 -3
  25. package/{index-egt4vfgb.js → index-4n4821gp.js} +4 -4
  26. package/{index-0qvq9aeb.js → index-57p9p179.js} +3 -3
  27. package/{index-gca9y01h.js → index-6na0sd2b.js} +1 -1
  28. package/{index-sxg87a8f.js → index-bzakk0c2.js} +160 -96
  29. package/{index-bzjnp9ap.js → index-g9zghs4h.js} +10 -10
  30. package/{index-wfwknnje.js → index-jwrpsrg3.js} +8 -6
  31. package/{index-5hy11qaq.js → index-kvzjda3v.js} +3 -3
  32. package/{index-91brpnzb.js → index-n8kt2wh6.js} +5 -5
  33. package/{index-chp5gqmm.js → index-ns128c4q.js} +8 -8
  34. package/{index-va2je2qm.js → index-p0tew3fq.js} +15 -4
  35. package/{index-p1j0cyvd.js → index-p4p9t45x.js} +3 -0
  36. package/{index-f4gpcp98.js → index-qh7brn20.js} +1 -1
  37. package/{index-1p146w4s.js → index-qhtj9y6j.js} +1 -1
  38. package/index-qt8dqgnf.js +250 -0
  39. package/{index-84b080zh.js → index-sn7dnzq4.js} +1 -1
  40. package/{index-d35a8vc0.js → index-te0y1c0m.js} +4 -4
  41. package/{index-3dmebxnk.js → index-v17gj504.js} +2 -2
  42. package/{index-v1y3cx0k.js → index-vpx68e4x.js} +2 -2
  43. package/{index-v156f836.js → index-xjc7gg65.js} +4 -4
  44. package/{index-3hr7cpy1.js → index-zn8qgeqx.js} +1 -1
  45. package/index.js +21 -21
  46. package/{library.command-n89re6cx.js → library.command-m8p2r1dh.js} +3 -3
  47. package/{localRegistry.command-1mmnegph.js → localRegistry.command-yppdqrxv.js} +7 -7
  48. package/{module.command-4m82zgfp.js → module.command-mfzvqt0n.js} +5 -5
  49. package/{package.command-9dv0p6zq.js → package.command-cgp2p2v5.js} +3 -3
  50. package/package.json +8 -3
  51. package/{page.command-q86b0m0z.js → page.command-taenb02b.js} +3 -3
  52. package/{primitive.command-kaneasq6.js → primitive.command-7kpncmkk.js} +6 -6
  53. package/{quality.command-sgapx315.js → quality.command-1ar94hrw.js} +2 -2
  54. package/{repair.command-efc5gdbq.js → repair.command-n08t6j8p.js} +5 -5
  55. package/{scalar.command-e2rpkhqy.js → scalar.command-mq8qfp4t.js} +4 -4
  56. package/{subspace.command-005rz1x6.js → subspace.command-jqv5n79w.js} +4 -4
  57. package/{tunnel.command-66j9estx.js → tunnel.command-ht2es78c.js} +2 -2
  58. package/{workflow.command-z1xcm4c7.js → workflow.command-tvz4nm9n.js} +9 -9
  59. package/{workspace.command-4ahrhp3k.js → workspace.command-txv1yv5e.js} +20 -20
  60. package/context.runner-wtqpw7mh.js +0 -22
  61. package/index-x7g1qzpt.js +0 -121
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  CommandExecutionError
4
- } from "./index-p1j0cyvd.js";
4
+ } from "./index-p4p9t45x.js";
5
5
  import {
6
6
  resolveMobilePath,
7
7
  targetHtmlFilename
@@ -2,10 +2,10 @@
2
2
  import {
3
3
  runner,
4
4
  script
5
- } from "./index-gca9y01h.js";
5
+ } from "./index-6na0sd2b.js";
6
6
  import {
7
7
  LibExecutor
8
- } from "./index-p1j0cyvd.js";
8
+ } from "./index-p4p9t45x.js";
9
9
  import {
10
10
  LibSource,
11
11
  formatLibStatuses
@@ -5,13 +5,13 @@ import {
5
5
  writeGeneratedSyncState,
6
6
  createRepairReport,
7
7
  renderRepairReport
8
- } from "./index-1p146w4s.js";
8
+ } from "./index-qhtj9y6j.js";
9
9
  import {
10
10
  AkanContextAnalyzer
11
- } from "./index-3dmebxnk.js";
11
+ } from "./index-v17gj504.js";
12
12
  import {
13
13
  runner
14
- } from "./index-gca9y01h.js";
14
+ } from "./index-6na0sd2b.js";
15
15
 
16
16
  // pkgs/@akanjs/cli/repair/repair.runner.ts
17
17
  var commandForShell = (command) => command.startsWith("akan ") ? `bun run ${command}` : command;
@@ -1,16 +1,16 @@
1
1
  // @bun
2
2
  import {
3
3
  jsonText
4
- } from "./index-1p146w4s.js";
4
+ } from "./index-qhtj9y6j.js";
5
5
  import {
6
6
  akanMcpInstallTargets
7
- } from "./index-3dmebxnk.js";
7
+ } from "./index-v17gj504.js";
8
8
  import {
9
9
  script
10
- } from "./index-gca9y01h.js";
10
+ } from "./index-6na0sd2b.js";
11
11
  import {
12
12
  ContextRunner2
13
- } from "./index-bzjnp9ap.js";
13
+ } from "./index-g9zghs4h.js";
14
14
 
15
15
  // pkgs/@akanjs/cli/context/context.script.ts
16
16
  import { Logger } from "akanjs/common";
@@ -6,14 +6,14 @@ import {
6
6
  } from "./index-myj01w9r.js";
7
7
  import {
8
8
  runner
9
- } from "./index-gca9y01h.js";
9
+ } from "./index-6na0sd2b.js";
10
10
  import {
11
11
  WorkspaceExecutor,
12
12
  AppExecutor
13
- } from "./index-p1j0cyvd.js";
13
+ } from "./index-p4p9t45x.js";
14
14
  import {
15
15
  openBrowser
16
- } from "./index-chp5gqmm.js";
16
+ } from "./index-ns128c4q.js";
17
17
 
18
18
  // pkgs/@akanjs/cli/cloud/cloud.runner.ts
19
19
  import path from "path";
@@ -9,7 +9,7 @@ import {
9
9
  LibExecutor,
10
10
  PkgExecutor,
11
11
  ModuleExecutor
12
- } from "./index-p1j0cyvd.js";
12
+ } from "./index-p4p9t45x.js";
13
13
  import {
14
14
  getDirname2
15
15
  } from "./index-6wwzs1bc.js";
@@ -1,4 +1,160 @@
1
1
  // @bun
2
+ // pkgs/@akanjs/cli/code/CodeTuiLines.ts
3
+ import stringWidth from "string-width";
4
+
5
+ class CodeTuiLines2 {
6
+ static width(text) {
7
+ return stringWidth(text);
8
+ }
9
+ static rows(rows, width, keyBase) {
10
+ const lines = [];
11
+ rows.forEach((row, idx) => {
12
+ for (const line of CodeTuiLines2.#row(row, Math.max(8, width), `${keyBase}:${idx}`))
13
+ lines.push(line);
14
+ });
15
+ return lines;
16
+ }
17
+ static #row(row, width, key) {
18
+ const prefix = row.prefix;
19
+ const head = prefix ? CodeTuiLines2.width(prefix.text) : 0;
20
+ const hang = row.hang ?? " ".repeat(head);
21
+ const body = width - Math.max(head, CodeTuiLines2.width(hang));
22
+ const wrapped = CodeTuiLines2.#wrap(row.spans, Math.max(4, body));
23
+ if (!wrapped.length)
24
+ wrapped.push([]);
25
+ return wrapped.map((spans, at) => ({
26
+ key: `${key}:${at}`,
27
+ spans: [...at === 0 ? prefix ? [prefix] : [] : hang ? [{ text: hang }] : [], ...spans]
28
+ }));
29
+ }
30
+ static #wrap(spans, width) {
31
+ const lines = [];
32
+ let line = [];
33
+ let used = 0;
34
+ let soft = false;
35
+ const push = (fromWrap) => {
36
+ lines.push(line);
37
+ line = [];
38
+ used = 0;
39
+ soft = fromWrap;
40
+ };
41
+ for (const span of spans) {
42
+ const { text, ...style } = span;
43
+ for (const piece of text.split(`
44
+ `).flatMap((part, at) => at ? [null, part] : [part])) {
45
+ if (piece === null) {
46
+ push(false);
47
+ continue;
48
+ }
49
+ for (const word of CodeTuiLines2.#words(piece)) {
50
+ const size = CodeTuiLines2.width(word);
51
+ if (!word.trim() && !used && soft)
52
+ continue;
53
+ if (used && used + size > width)
54
+ push(true);
55
+ if (size > width) {
56
+ for (const chunk of CodeTuiLines2.#chunks(word, width)) {
57
+ if (used)
58
+ push(true);
59
+ line.push({ ...style, text: chunk });
60
+ used = CodeTuiLines2.width(chunk);
61
+ if (used >= width)
62
+ push(true);
63
+ }
64
+ continue;
65
+ }
66
+ line.push({ ...style, text: word });
67
+ used += size;
68
+ }
69
+ }
70
+ }
71
+ if (line.length)
72
+ lines.push(line);
73
+ return lines;
74
+ }
75
+ static #words(text) {
76
+ return text.match(/\S+\s*|\s+/g) ?? [];
77
+ }
78
+ static #chunks(word, width) {
79
+ const chunks = [];
80
+ let chunk = "";
81
+ for (const char of word) {
82
+ if (CodeTuiLines2.width(chunk + char) > width) {
83
+ chunks.push(chunk);
84
+ chunk = char;
85
+ } else
86
+ chunk += char;
87
+ }
88
+ if (chunk)
89
+ chunks.push(chunk);
90
+ return chunks;
91
+ }
92
+ static text(line) {
93
+ return line.spans.map((span) => span.text).join("");
94
+ }
95
+ }
96
+
97
+ // pkgs/@akanjs/cli/code/CodeTuiAgents.ts
98
+ class CodeTuiAgents2 {
99
+ static markWidth = 4;
100
+ static minDescription = 12;
101
+ static rows(agents, session, width, now = Date.now()) {
102
+ if (!agents.length)
103
+ return [];
104
+ const kindColumn = Math.max(...agents.map((agent) => CodeTuiLines2.width(agent.kind))) + 2;
105
+ return [
106
+ {
107
+ key: "agents:self",
108
+ spans: [{ text: "\u276F ", color: "cyan" }, { text: "\u23FA ", color: "green" }, { text: session }]
109
+ },
110
+ ...agents.map((agent, at) => ({
111
+ key: `agents:${agent.id || at}`,
112
+ spans: CodeTuiAgents2.#row(agent, kindColumn, width, now)
113
+ }))
114
+ ];
115
+ }
116
+ static #row(agent, kindColumn, width, now) {
117
+ const meta = `${CodeTuiAgents2.elapsed(now - agent.startedAt)} \xB7 \u2193 ${CodeTuiAgents2.tokens(agent.tokens)} tokens`;
118
+ const head = CodeTuiAgents2.markWidth + kindColumn;
119
+ const room = width - head - CodeTuiLines2.width(meta) - 2;
120
+ const spans = [{ text: " \u25EF ", color: "yellow" }, { text: agent.kind.padEnd(kindColumn) }];
121
+ if (room < CodeTuiAgents2.minDescription)
122
+ return [...spans, { text: CodeTuiAgents2.#clip(agent.description, Math.max(1, width - head)) }];
123
+ const description = CodeTuiAgents2.#clip(agent.description, room);
124
+ const pad = " ".repeat(Math.max(0, room - CodeTuiLines2.width(description)));
125
+ return [...spans, { text: `${description}${pad}` }, { text: ` ${meta}`, dim: true }];
126
+ }
127
+ static elapsed(ms) {
128
+ const total = Math.max(0, Math.round(ms / 1000));
129
+ const hours = Math.floor(total / 3600);
130
+ const minutes = Math.floor(total % 3600 / 60);
131
+ const seconds = total % 60;
132
+ if (hours)
133
+ return `${hours}h ${minutes}m`;
134
+ if (minutes)
135
+ return `${minutes}m ${seconds}s`;
136
+ return `${seconds}s`;
137
+ }
138
+ static tokens(count) {
139
+ if (count < 1000)
140
+ return `${Math.max(0, Math.round(count))}`;
141
+ if (count < 1e6)
142
+ return `${(count / 1000).toFixed(1)}k`;
143
+ return `${(count / 1e6).toFixed(1)}M`;
144
+ }
145
+ static #clip(text, width) {
146
+ if (CodeTuiLines2.width(text) <= width)
147
+ return text;
148
+ let clipped = "";
149
+ for (const char of text) {
150
+ if (CodeTuiLines2.width(clipped + char) > width - 1)
151
+ break;
152
+ clipped += char;
153
+ }
154
+ return `${clipped}\u2026`;
155
+ }
156
+ }
157
+
2
158
  // pkgs/@akanjs/cli/code/CodeTuiClipboard.ts
3
159
  import { existsSync } from "fs";
4
160
  import { tmpdir } from "os";
@@ -102,6 +258,7 @@ class CodeTuiCommands2 {
102
258
  { name: "name", desc: "name this session", arg: "<text>" },
103
259
  { name: "fork", desc: "continue this conversation twice; the copy takes over here", arg: "[name]" },
104
260
  { name: "agents", desc: "what a sub-agent may be, and what one may spend" },
261
+ { name: "mcp", desc: "the MCP servers this session reached", arg: "[add|remove|reload]" },
105
262
  { name: "peers", desc: "the other akan code sessions running here" },
106
263
  { name: "msg", desc: "hand a message to another session", arg: "<peer> <text>" },
107
264
  { name: "quit", desc: "leave the session" }
@@ -131,6 +288,8 @@ class CodeTuiCommands2 {
131
288
  "esc interrupt \xB7 pgup/pgdn scroll \xB7 ^c quit",
132
289
  "@ completes a file in this repo \xB7 \u2190 at the start of the prompt lists past sessions",
133
290
  "",
291
+ "Scroll: the wheel scrolls this transcript \xB7 hold shift to select text with the mouse instead",
292
+ "",
134
293
  "Images: cmd+v attaches what is on the clipboard \xB7 ^v does too, without the terminal in the way",
135
294
  "",
136
295
  'shift+enter needs a terminal that reports it \u2014 in VS Code bind it to send "\\u001b\\r".'
@@ -139,101 +298,6 @@ class CodeTuiCommands2 {
139
298
  }
140
299
  }
141
300
 
142
- // pkgs/@akanjs/cli/code/CodeTuiLines.ts
143
- import stringWidth from "string-width";
144
-
145
- class CodeTuiLines2 {
146
- static width(text) {
147
- return stringWidth(text);
148
- }
149
- static rows(rows, width, keyBase) {
150
- const lines = [];
151
- rows.forEach((row, idx) => {
152
- for (const line of CodeTuiLines2.#row(row, Math.max(8, width), `${keyBase}:${idx}`))
153
- lines.push(line);
154
- });
155
- return lines;
156
- }
157
- static #row(row, width, key) {
158
- const prefix = row.prefix;
159
- const head = prefix ? CodeTuiLines2.width(prefix.text) : 0;
160
- const hang = row.hang ?? " ".repeat(head);
161
- const body = width - Math.max(head, CodeTuiLines2.width(hang));
162
- const wrapped = CodeTuiLines2.#wrap(row.spans, Math.max(4, body));
163
- if (!wrapped.length)
164
- wrapped.push([]);
165
- return wrapped.map((spans, at) => ({
166
- key: `${key}:${at}`,
167
- spans: [...at === 0 ? prefix ? [prefix] : [] : hang ? [{ text: hang }] : [], ...spans]
168
- }));
169
- }
170
- static #wrap(spans, width) {
171
- const lines = [];
172
- let line = [];
173
- let used = 0;
174
- let soft = false;
175
- const push = (fromWrap) => {
176
- lines.push(line);
177
- line = [];
178
- used = 0;
179
- soft = fromWrap;
180
- };
181
- for (const span of spans) {
182
- const { text, ...style } = span;
183
- for (const piece of text.split(`
184
- `).flatMap((part, at) => at ? [null, part] : [part])) {
185
- if (piece === null) {
186
- push(false);
187
- continue;
188
- }
189
- for (const word of CodeTuiLines2.#words(piece)) {
190
- const size = CodeTuiLines2.width(word);
191
- if (!word.trim() && !used && soft)
192
- continue;
193
- if (used && used + size > width)
194
- push(true);
195
- if (size > width) {
196
- for (const chunk of CodeTuiLines2.#chunks(word, width)) {
197
- if (used)
198
- push(true);
199
- line.push({ ...style, text: chunk });
200
- used = CodeTuiLines2.width(chunk);
201
- if (used >= width)
202
- push(true);
203
- }
204
- continue;
205
- }
206
- line.push({ ...style, text: word });
207
- used += size;
208
- }
209
- }
210
- }
211
- if (line.length)
212
- lines.push(line);
213
- return lines;
214
- }
215
- static #words(text) {
216
- return text.match(/\S+\s*|\s+/g) ?? [];
217
- }
218
- static #chunks(word, width) {
219
- const chunks = [];
220
- let chunk = "";
221
- for (const char of word) {
222
- if (CodeTuiLines2.width(chunk + char) > width) {
223
- chunks.push(chunk);
224
- chunk = char;
225
- } else
226
- chunk += char;
227
- }
228
- if (chunk)
229
- chunks.push(chunk);
230
- return chunks;
231
- }
232
- static text(line) {
233
- return line.spans.map((span) => span.text).join("");
234
- }
235
- }
236
-
237
301
  // pkgs/@akanjs/cli/code/CodeTuiEditor.ts
238
302
  class CodeTuiEditor2 {
239
303
  #text = "";
@@ -724,4 +788,4 @@ class CodeTuiParts2 {
724
788
  }
725
789
  }
726
790
 
727
- export { CodeTuiClipboard2, CodeTuiCommands2, CodeTuiLines2, CodeTuiEditor2, CodeTuiFiles2, CodeTuiMarkdown2, CodeTuiParts2 };
791
+ export { CodeTuiLines2, CodeTuiAgents2, CodeTuiClipboard2, CodeTuiCommands2, CodeTuiEditor2, CodeTuiFiles2, CodeTuiMarkdown2, CodeTuiParts2 };
@@ -1,14 +1,14 @@
1
1
  // @bun
2
2
  import {
3
3
  AppExecutor
4
- } from "./index-p1j0cyvd.js";
4
+ } from "./index-p4p9t45x.js";
5
5
  import {
6
6
  jsonText,
7
7
  createWorkflowBaselineSummary,
8
8
  buildAkanModuleContextIndex,
9
9
  createWorkflowStepRegistry,
10
10
  toolingRolloutGate
11
- } from "./index-1p146w4s.js";
11
+ } from "./index-qhtj9y6j.js";
12
12
  import {
13
13
  buildResourceList,
14
14
  codexMcpConfigPath,
@@ -18,32 +18,32 @@ import {
18
18
  upsertCodexMcpServerBlock,
19
19
  renderDoctorText,
20
20
  AkanContextAnalyzer
21
- } from "./index-3dmebxnk.js";
21
+ } from "./index-v17gj504.js";
22
22
  import {
23
23
  isPlaceholderAppId2
24
- } from "./index-1sggq0m8.js";
24
+ } from "./index-3cymrzsb.js";
25
25
  import {
26
26
  CommandContainer,
27
27
  runner
28
- } from "./index-gca9y01h.js";
28
+ } from "./index-6na0sd2b.js";
29
29
  import {
30
30
  Prompter2
31
31
  } from "./index-twq9p2sp.js";
32
32
  import {
33
33
  RepairRunner
34
- } from "./index-bchkysja.js";
34
+ } from "./index-4cvpzkq6.js";
35
35
  import {
36
36
  WorkflowRunner
37
- } from "./index-658xafm1.js";
37
+ } from "./index-2pm1j01n.js";
38
38
  import {
39
39
  ModuleScript
40
- } from "./index-v156f836.js";
40
+ } from "./index-xjc7gg65.js";
41
41
  import {
42
42
  PrimitiveScript
43
- } from "./index-d35a8vc0.js";
43
+ } from "./index-te0y1c0m.js";
44
44
  import {
45
45
  ScalarScript
46
- } from "./index-v1y3cx0k.js";
46
+ } from "./index-vpx68e4x.js";
47
47
  import {
48
48
  getMobileTargets
49
49
  } from "./index-47pj3aee.js";
@@ -9,19 +9,19 @@ var correctInputs = (model) => {
9
9
  return model;
10
10
  return { ...model, input: [...model.input, "image"] };
11
11
  };
12
- var akanCodeModel2 = async (registry, ref) => {
12
+ var akanCodeModel2 = async (runtime, ref) => {
13
13
  if (ref) {
14
- const requested = registry.find(ref.provider, ref.id);
14
+ const requested = runtime.getModel(ref.provider, ref.id);
15
15
  if (!requested)
16
16
  throw new Error(`Unknown model: ${ref.provider}/${ref.id}`);
17
- if (!registry.hasConfiguredAuth(requested))
17
+ if (!runtime.hasConfiguredAuth(ref.provider))
18
18
  throw new Error(`No API key configured for ${ref.provider}. Set ${ref.provider.toUpperCase()}_API_KEY.`);
19
19
  return correctInputs(requested);
20
20
  }
21
- const fallback = registry.find(akanCodeDefaultModel2.provider, akanCodeDefaultModel2.id);
22
- if (fallback && registry.hasConfiguredAuth(fallback))
21
+ const fallback = runtime.getModel(akanCodeDefaultModel2.provider, akanCodeDefaultModel2.id);
22
+ if (fallback && runtime.hasConfiguredAuth(fallback.provider))
23
23
  return correctInputs(fallback);
24
- return correctInputs(registry.getAvailable()[0]);
24
+ return correctInputs((await runtime.getAvailable())[0]);
25
25
  };
26
26
  var akanCodeModelSupportsImages2 = (model) => !!model?.input.includes("image");
27
27
  var akanCodeModelWarnings2 = (model, compactionFloor) => {
@@ -78,6 +78,8 @@ class CodeAgentStreamPrinter2 {
78
78
  case "queue":
79
79
  case "context":
80
80
  return;
81
+ case "subagent":
82
+ return;
81
83
  case "question":
82
84
  return this.#line(chalk.yellow(`? ${event.question.prompt}`));
83
85
  case "approval":
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  runner,
4
4
  script
5
- } from "./index-gca9y01h.js";
5
+ } from "./index-6na0sd2b.js";
6
6
  import {
7
7
  AGENT_BLOCK_START,
8
8
  AGENT_BLOCK_END,
@@ -13,14 +13,14 @@ import {
13
13
  CLAUDE_COMMENT_RULE,
14
14
  AppExecutor,
15
15
  LibExecutor
16
- } from "./index-p1j0cyvd.js";
16
+ } from "./index-p4p9t45x.js";
17
17
  import {
18
18
  collectRecipeSources2,
19
19
  scanRecipes2
20
20
  } from "./index-by5gpp8x.js";
21
21
  import {
22
22
  AkanContextAnalyzer
23
- } from "./index-3dmebxnk.js";
23
+ } from "./index-v17gj504.js";
24
24
  import {
25
25
  Prompter2
26
26
  } from "./index-twq9p2sp.js";
@@ -5,19 +5,19 @@ import {
5
5
  } from "./index-myj01w9r.js";
6
6
  import {
7
7
  script
8
- } from "./index-gca9y01h.js";
8
+ } from "./index-6na0sd2b.js";
9
9
  import {
10
10
  PkgExecutor
11
- } from "./index-p1j0cyvd.js";
11
+ } from "./index-p4p9t45x.js";
12
12
  import {
13
13
  ApplicationScript
14
- } from "./index-chp5gqmm.js";
14
+ } from "./index-ns128c4q.js";
15
15
  import {
16
16
  PackageScript
17
- } from "./index-va2je2qm.js";
17
+ } from "./index-p0tew3fq.js";
18
18
  import {
19
19
  CloudRunner
20
- } from "./index-0qvq9aeb.js";
20
+ } from "./index-57p9p179.js";
21
21
 
22
22
  // pkgs/@akanjs/cli/cloud/cloud.script.ts
23
23
  import { Logger } from "akanjs/common";
@@ -2,16 +2,16 @@
2
2
  import {
3
3
  runner,
4
4
  script
5
- } from "./index-gca9y01h.js";
5
+ } from "./index-6na0sd2b.js";
6
6
  import {
7
7
  WorkspaceExecutor,
8
8
  AppExecutor,
9
9
  LibExecutor,
10
10
  PkgExecutor
11
- } from "./index-p1j0cyvd.js";
11
+ } from "./index-p4p9t45x.js";
12
12
  import {
13
13
  LibraryScript
14
- } from "./index-ea1smknd.js";
14
+ } from "./index-3mg4h788.js";
15
15
  import {
16
16
  HmrWatcher,
17
17
  WatchRootResolver
@@ -22,7 +22,7 @@ import {
22
22
  import {
23
23
  SlicePlanner,
24
24
  formatSlicePlan
25
- } from "./index-84b080zh.js";
25
+ } from "./index-sn7dnzq4.js";
26
26
  import {
27
27
  resolveMobileTargets
28
28
  } from "./index-47pj3aee.js";
@@ -1966,9 +1966,9 @@ ${uniqueCandidates.map((candidate) => ` - ${candidate}`).join(`
1966
1966
 
1967
1967
  // pkgs/@akanjs/cli/application/application.runner.ts
1968
1968
  import { Logger as Logger4 } from "akanjs/common";
1969
- var loadBuildRunner = async () => (await import("./applicationBuildRunner-d3702f1w.js")).ApplicationBuildRunner;
1970
- var loadReleasePackager = async () => (await import("./applicationReleasePackager-2kdyj3te.js")).ApplicationReleasePackager;
1971
- var loadCapacitorApp = async () => (await import("./capacitorApp-qk975zyz.js")).CapacitorApp;
1969
+ var loadBuildRunner = async () => (await import("./applicationBuildRunner-x4gbfn7y.js")).ApplicationBuildRunner;
1970
+ var loadReleasePackager = async () => (await import("./applicationReleasePackager-z61ep017.js")).ApplicationReleasePackager;
1971
+ var loadCapacitorApp = async () => (await import("./capacitorApp-shv3ajh5.js")).CapacitorApp;
1972
1972
  var loadPrompts = async () => await import("@inquirer/prompts");
1973
1973
 
1974
1974
  class ApplicationRunner extends runner("application") {
@@ -3226,7 +3226,7 @@ class ApplicationScript extends script("application", [ApplicationRunner, Librar
3226
3226
  throw new Error("No app selected to start");
3227
3227
  const startedDatabase = dbup ? await this.#prepareSharedDatabase(apps) : false;
3228
3228
  const supervisor = new DevSupervisor({ apps, mode, concurrency, open, write, shares });
3229
- const view = mode === "tui" ? await (await import("./devTuiView-pa63jrjq.js")).createDevTuiView(supervisor) : new DevStreamView(apps.map((app) => app.name));
3229
+ const view = mode === "tui" ? await (await import("./devTuiView-y1548wy6.js")).createDevTuiView(supervisor) : new DevStreamView(apps.map((app) => app.name));
3230
3230
  await supervisor.run(view);
3231
3231
  if (startedDatabase)
3232
3232
  await this.#stopDatabase(workspace);
@@ -2,13 +2,13 @@
2
2
  import {
3
3
  runner,
4
4
  script
5
- } from "./index-gca9y01h.js";
5
+ } from "./index-6na0sd2b.js";
6
6
  import {
7
7
  FileSys
8
8
  } from "./index-q0y2jq9j.js";
9
9
  import {
10
10
  PkgExecutor
11
- } from "./index-p1j0cyvd.js";
11
+ } from "./index-p4p9t45x.js";
12
12
  import {
13
13
  TypeScriptDependencyScanner2
14
14
  } from "./index-kcxmv48c.js";
@@ -153,7 +153,14 @@ class PackageRunner extends runner("package") {
153
153
  const scanner = await TypeScriptDependencyScanner2.from(pkg);
154
154
  const { npmDeps, npmDevDeps, missingDeps } = await scanner.getPackageBuildDependencies(pkg.name);
155
155
  const packageRuntimeDependencies = {
156
- "@akanjs/devkit": ["tailwind-scrollbar"]
156
+ "@akanjs/devkit": [
157
+ "tailwind-scrollbar",
158
+ "@earendil-works/chord",
159
+ "@earendil-works/pi-agent-core",
160
+ "@earendil-works/pi-ai",
161
+ "@earendil-works/pi-telemetry",
162
+ "@earendil-works/pi-tui"
163
+ ]
157
164
  };
158
165
  const packageRuntimeDevDependencies = { akanjs: ["@biomejs/biome", "@types/bun"] };
159
166
  if (pkg.name === "@akanjs/cli") {
@@ -174,7 +181,11 @@ class PackageRunner extends runner("package") {
174
181
  const optionalPeerDeps = new Set(Object.entries(pkgJson.peerDependenciesMeta ?? {}).filter(([, meta]) => meta.optional).map(([dep]) => dep));
175
182
  const packageRuntimeDeps = [...new Set([...npmDeps, ...forcedRuntimeDeps])].filter((dep) => !optionalPeerDeps.has(dep) && !bundledRuntimeDeps.has(dep));
176
183
  const packageRuntimeDevDeps = [...new Set([...npmDevDeps, ...forcedRuntimeDevDeps])].filter((dep) => !optionalPeerDeps.has(dep) && !bundledRuntimeDeps.has(dep));
177
- const rootDeps = { ...rootPackageJson.dependencies, ...rootPackageJson.devDependencies };
184
+ const rootDeps = {
185
+ ...rootPackageJson.overrides,
186
+ ...rootPackageJson.dependencies,
187
+ ...rootPackageJson.devDependencies
188
+ };
178
189
  const missingForcedDeps = forcedRuntimeDeps.filter((dep) => !rootDeps[dep]);
179
190
  const missingForcedDevDeps = forcedRuntimeDevDeps.filter((dep) => !rootDeps[dep]);
180
191
  const requiredMissingDeps = missingDeps.filter((dep) => !optionalPeerDeps.has(dep));
@@ -3689,6 +3689,9 @@ class PkgExecutor extends Executor {
3689
3689
  const rootVersion = rootDeps[dep];
3690
3690
  if (rootVersion)
3691
3691
  return rootVersion;
3692
+ const overrideVersion = rootPackageJson.overrides?.[dep];
3693
+ if (typeof overrideVersion === "string")
3694
+ return overrideVersion;
3692
3695
  try {
3693
3696
  const packageJsonPath = `pkgs/${dep}/package.json`;
3694
3697
  if (!await Bun.file(path8.join(this.workspace.workspaceRoot, packageJsonPath)).exists())
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  runner,
4
4
  script
5
- } from "./index-gca9y01h.js";
5
+ } from "./index-6na0sd2b.js";
6
6
 
7
7
  // pkgs/@akanjs/cli/page/page.runner.ts
8
8
  class PageRunner extends runner("page") {
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  AppExecutor,
4
4
  LibExecutor
5
- } from "./index-p1j0cyvd.js";
5
+ } from "./index-p4p9t45x.js";
6
6
 
7
7
  // pkgs/@akanjs/devkit/workflow/utils.ts
8
8
  var jsonText = (value, { trailingNewline = true } = {}) => `${JSON.stringify(value, null, 2)}${trailingNewline ? `