@akanjs/cli 2.4.1-rc.7 → 2.4.2-rc.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 (55) hide show
  1. package/.build-stamp +1 -1
  2. package/{agent.command-t4346579.js → agent.command-ash7wabs.js} +7 -7
  3. package/{application.command-zkmeemdt.js → application.command-zm47j93m.js} +6 -6
  4. package/{applicationBuildRunner-5w8j9yp7.js → applicationBuildRunner-554a2vnk.js} +8 -2
  5. package/{applicationReleasePackager-brvth6rs.js → applicationReleasePackager-pjbxc793.js} +1 -1
  6. package/buildBatch.proc.js +5 -4
  7. package/{capacitorApp-wnxzrppx.js → capacitorApp-wc75rvfm.js} +3 -3
  8. package/{cloud.command-5ztqxppm.js → cloud.command-vwpzten0.js} +11 -11
  9. package/{context.command-smwxwgwf.js → context.command-j0kq87xa.js} +15 -15
  10. package/{dependencyScanner-m4x5maek.js → dependencyScanner-f6grrep3.js} +2 -2
  11. package/{guideline.command-1r0esdjs.js → guideline.command-1m4jwhv0.js} +5 -5
  12. package/incrementalBuilder.proc.js +25 -17
  13. package/{index-s9yajzkj.js → index-0wgpfp7t.js} +6 -6
  14. package/{index-3sd2vape.js → index-2nb022xv.js} +3 -3
  15. package/{index-n5y2gbf2.js → index-31183bxt.js} +203 -22
  16. package/{index-nv7et4t3.js → index-31e8cwjq.js} +5 -5
  17. package/{index-x53a5nya.js → index-46tjzh6s.js} +1 -1
  18. package/{index-61keag0s.js → index-67546d0j.js} +4 -1
  19. package/{index-pya1h7wx.js → index-79v9jwqe.js} +3 -3
  20. package/index-7k9sj7j5.js +2220 -0
  21. package/{index-0jwvs8vp.js → index-8dsjmcbp.js} +11 -11
  22. package/{index-0fn1r7gg.js → index-bjpxzr6s.js} +31 -4
  23. package/{index-2v10yr8g.js → index-ckywhpvp.js} +1 -1
  24. package/{index-ahpcr9ss.js → index-cp26p7qd.js} +4 -4
  25. package/{index-eqxmxan6.js → index-ehjhzg5y.js} +1 -1
  26. package/{index-qpz4csbs.js → index-en4zpzdm.js} +9 -3
  27. package/{index-y4kg682s.js → index-f1x6fe2e.js} +1 -1
  28. package/{index-2v6a4wd5.js → index-mpj63mbw.js} +4 -4
  29. package/{index-fh990y67.js → index-n08vr4hh.js} +2 -2
  30. package/{index-5vvwc0cz.js → index-nsj2ftxj.js} +1 -1
  31. package/index-rh16j3c7.js +2166 -0
  32. package/{index-0t7pwff2.js → index-s6nk9815.js} +182 -64
  33. package/{index-hk58kr1m.js → index-smt4re0s.js} +1 -1
  34. package/{index-gr4cjv99.js → index-t5rn8q9f.js} +4 -4
  35. package/{index-wh201a76.js → index-tnngmzgf.js} +7 -7
  36. package/{index-eay4t1te.js → index-xdf6rxyt.js} +3 -3
  37. package/{index-jbtn8h1y.js → index-xjkjcbhd.js} +3 -3
  38. package/index.js +19 -19
  39. package/{library.command-jrew04m6.js → library.command-39eq3brk.js} +4 -4
  40. package/{localRegistry.command-m08dkm1b.js → localRegistry.command-34zvgkys.js} +10 -10
  41. package/{module.command-p98t7522.js → module.command-vwahdkzr.js} +8 -8
  42. package/{package.command-57dyrfmn.js → package.command-wkwd5x5p.js} +5 -5
  43. package/package.json +2 -2
  44. package/{page.command-tas6f3na.js → page.command-9w85hrg0.js} +4 -4
  45. package/{primitive.command-bjrbsakw.js → primitive.command-2hnr8h7f.js} +9 -9
  46. package/{quality.command-zavaafbw.js → quality.command-4kerz7mh.js} +3 -3
  47. package/{repair.command-je57wx67.js → repair.command-zmwshmvr.js} +6 -6
  48. package/{routeSourceValidator-wbhmbwpj.js → routeSourceValidator-cncd92fv.js} +39 -0
  49. package/{scalar.command-gqqyy1kr.js → scalar.command-9kanb73t.js} +7 -7
  50. package/templates/workspaceRoot/.cursor/rules/coding-comments.mdc.template +19 -0
  51. package/templates/workspaceRoot/.gitignore.template +1 -0
  52. package/templates/workspaceRoot/AGENTS.md.template +14 -0
  53. package/{workflow.command-d6mrc47s.js → workflow.command-4areq0ex.js} +12 -12
  54. package/{workspace.command-bbg96z8k.js → workspace.command-02x93b10.js} +23 -23
  55. package/index-khzzttv1.js +0 -4274
@@ -1,22 +1,22 @@
1
1
  // @bun
2
2
  import {
3
3
  RepairRunner
4
- } from "./index-jbtn8h1y.js";
4
+ } from "./index-xjkjcbhd.js";
5
5
  import {
6
6
  WorkflowRunner
7
- } from "./index-3sd2vape.js";
7
+ } from "./index-2nb022xv.js";
8
8
  import {
9
9
  ScalarScript
10
- } from "./index-ahpcr9ss.js";
10
+ } from "./index-cp26p7qd.js";
11
11
  import {
12
12
  PrimitiveScript
13
- } from "./index-2v6a4wd5.js";
13
+ } from "./index-mpj63mbw.js";
14
14
  import {
15
15
  ModuleScript
16
- } from "./index-wh201a76.js";
16
+ } from "./index-tnngmzgf.js";
17
17
  import {
18
18
  isPlaceholderAppId
19
- } from "./index-hk58kr1m.js";
19
+ } from "./index-smt4re0s.js";
20
20
  import {
21
21
  AkanContextAnalyzer,
22
22
  akanMcpInstallConfigPaths,
@@ -27,17 +27,17 @@ import {
27
27
  renderDoctorText,
28
28
  resourceList,
29
29
  upsertCodexMcpServerBlock
30
- } from "./index-eay4t1te.js";
30
+ } from "./index-xdf6rxyt.js";
31
31
  import {
32
32
  buildAkanModuleContextIndex,
33
33
  createWorkflowBaselineSummary,
34
34
  createWorkflowStepRegistry,
35
35
  jsonText,
36
36
  toolingRolloutGate
37
- } from "./index-2v10yr8g.js";
37
+ } from "./index-ckywhpvp.js";
38
38
  import {
39
39
  Prompter
40
- } from "./index-eqxmxan6.js";
40
+ } from "./index-ehjhzg5y.js";
41
41
  import {
42
42
  getMobileTargets
43
43
  } from "./index-76rn3g2c.js";
@@ -45,10 +45,10 @@ import {
45
45
  CommandContainer,
46
46
  runner,
47
47
  script
48
- } from "./index-qpz4csbs.js";
48
+ } from "./index-en4zpzdm.js";
49
49
  import {
50
50
  AppExecutor
51
- } from "./index-0t7pwff2.js";
51
+ } from "./index-s6nk9815.js";
52
52
 
53
53
  // pkgs/@akanjs/cli/context/context.script.ts
54
54
  import { Logger } from "akanjs/common";
@@ -45,16 +45,20 @@ import path2 from "path";
45
45
  var UNREADABLE = Number.NaN;
46
46
 
47
47
  class SourceMtimeIndex {
48
+ static #defaultDirSettleMs = 20;
49
+ #dirSettleMs;
48
50
  #roots;
49
51
  #classifier;
50
52
  #files = new Map;
51
53
  #dirs = new Map;
52
54
  #unreadable = new Map;
55
+ #unsettled = new Set;
53
56
  #primed = false;
54
57
  #queue = Promise.resolve();
55
- constructor({ roots, classifier }) {
58
+ constructor({ roots, classifier, dirSettleMs }) {
56
59
  this.#roots = SourceMtimeIndex.#pruneNestedRoots(roots);
57
60
  this.#classifier = classifier ?? new HmrChangeClassifier;
61
+ this.#dirSettleMs = dirSettleMs ?? SourceMtimeIndex.#defaultDirSettleMs;
58
62
  }
59
63
  get primed() {
60
64
  return this.#primed;
@@ -65,11 +69,15 @@ class SourceMtimeIndex {
65
69
  get coverageGaps() {
66
70
  return [...this.#unreadable].map(([file, code]) => ({ path: file, code }));
67
71
  }
72
+ get hasUnsettledDirs() {
73
+ return this.#unsettled.size > 0;
74
+ }
68
75
  async prime() {
69
76
  await this.#serialize(async () => {
70
77
  this.#files.clear();
71
78
  this.#dirs.clear();
72
79
  this.#unreadable.clear();
80
+ this.#unsettled.clear();
73
81
  await Promise.all(this.#roots.map((root) => this.#walk(root, null)));
74
82
  this.#primed = true;
75
83
  });
@@ -133,7 +141,7 @@ class SourceMtimeIndex {
133
141
  }));
134
142
  }
135
143
  async#collectDirChanges(changed) {
136
- const moved = [];
144
+ const moved = new Set;
137
145
  const gone = [];
138
146
  await Promise.all([...this.#dirs.entries()].map(async ([dir, mtimeMs]) => {
139
147
  const { stats, err } = await SourceMtimeIndex.#statPath(dir);
@@ -146,8 +154,11 @@ class SourceMtimeIndex {
146
154
  return;
147
155
  }
148
156
  if (stats.mtimeMs !== mtimeMs)
149
- moved.push(dir);
157
+ moved.add(dir);
150
158
  }));
159
+ for (const dir of this.#unsettled)
160
+ if (this.#dirs.has(dir))
161
+ moved.add(dir);
151
162
  for (const dir of gone)
152
163
  this.#forget(dir);
153
164
  for (const dir of moved)
@@ -169,6 +180,10 @@ class SourceMtimeIndex {
169
180
  const known = this.#dirs.has(dir);
170
181
  this.#dirs.set(dir, dirStats.mtimeMs);
171
182
  this.#unreadable.delete(dir);
183
+ if (this.#isUnsettled(dirStats.mtimeMs))
184
+ this.#unsettled.add(dir);
185
+ else
186
+ this.#unsettled.delete(dir);
172
187
  const descend = [];
173
188
  const present = new Set;
174
189
  let blind = false;
@@ -208,24 +223,34 @@ class SourceMtimeIndex {
208
223
  changed?.add(abs);
209
224
  }
210
225
  }
211
- if (blind)
226
+ if (blind) {
212
227
  this.#dirs.set(dir, UNREADABLE);
228
+ this.#unsettled.delete(dir);
229
+ }
213
230
  await Promise.all(descend.filter((sub) => !this.#dirs.has(sub)).map((sub) => this.#walk(sub, changed)));
214
231
  }
215
232
  #markUnreadable(dir, err) {
216
233
  this.#dirs.set(dir, UNREADABLE);
217
234
  this.#unreadable.set(dir, err.code ?? "EUNKNOWN");
235
+ this.#unsettled.delete(dir);
218
236
  }
219
237
  #forget(dir) {
220
238
  const prefix = `${dir}${path2.sep}`;
221
239
  this.#dirs.delete(dir);
222
240
  this.#unreadable.delete(dir);
241
+ this.#unsettled.delete(dir);
223
242
  for (const known of [...this.#dirs.keys()])
224
243
  if (known.startsWith(prefix))
225
244
  this.#dirs.delete(known);
226
245
  for (const known of [...this.#unreadable.keys()])
227
246
  if (known.startsWith(prefix))
228
247
  this.#unreadable.delete(known);
248
+ for (const known of [...this.#unsettled])
249
+ if (known.startsWith(prefix))
250
+ this.#unsettled.delete(known);
251
+ }
252
+ #isUnsettled(mtimeMs) {
253
+ return Math.abs(Date.now() - mtimeMs) < this.#dirSettleMs;
229
254
  }
230
255
  static async#statPath(abs) {
231
256
  try {
@@ -431,6 +456,8 @@ class HmrWatcher {
431
456
  await this.#mergeDetectedChanges();
432
457
  if (this.#pending.size > 0)
433
458
  await this.#drain();
459
+ else if (this.#index.hasUnsettledDirs)
460
+ this.#scheduleVerify();
434
461
  }
435
462
  }
436
463
 
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  AppExecutor,
4
4
  LibExecutor
5
- } from "./index-0t7pwff2.js";
5
+ } from "./index-s6nk9815.js";
6
6
 
7
7
  // pkgs/@akanjs/devkit/workflow/utils.ts
8
8
  var jsonText = (value, { trailingNewline = true } = {}) => `${JSON.stringify(value, null, 2)}${trailingNewline ? `
@@ -6,17 +6,17 @@ import {
6
6
  createPassedPrimitiveReport,
7
7
  generatedFilesForSync,
8
8
  scalarChangedFiles
9
- } from "./index-2v10yr8g.js";
9
+ } from "./index-ckywhpvp.js";
10
10
  import {
11
11
  Prompter
12
- } from "./index-eqxmxan6.js";
12
+ } from "./index-ehjhzg5y.js";
13
13
  import {
14
14
  AiSession
15
- } from "./index-5vvwc0cz.js";
15
+ } from "./index-nsj2ftxj.js";
16
16
  import {
17
17
  runner,
18
18
  script
19
- } from "./index-qpz4csbs.js";
19
+ } from "./index-en4zpzdm.js";
20
20
 
21
21
  // pkgs/@akanjs/cli/scalar/scalar.prompt.ts
22
22
  import { input } from "@inquirer/prompts";
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  getDirname
4
- } from "./index-0t7pwff2.js";
4
+ } from "./index-s6nk9815.js";
5
5
 
6
6
  // pkgs/@akanjs/devkit/prompter.ts
7
7
  import fsPromise from "fs/promises";
@@ -7,10 +7,13 @@ import {
7
7
  PkgExecutor,
8
8
  WorkspaceExecutor,
9
9
  getDirname
10
- } from "./index-0t7pwff2.js";
10
+ } from "./index-s6nk9815.js";
11
11
  import {
12
12
  FileSys
13
- } from "./index-61keag0s.js";
13
+ } from "./index-67546d0j.js";
14
+ import {
15
+ __require
16
+ } from "./index-r24hmh0q.js";
14
17
 
15
18
  // pkgs/@akanjs/devkit/commandDecorators/targetMeta.ts
16
19
  var COMMAND_META = Symbol("akan.command.meta");
@@ -58,7 +61,6 @@ var Workspace = createInternalArgToken("Workspace");
58
61
 
59
62
  // pkgs/@akanjs/devkit/commandDecorators/command.ts
60
63
  import path from "path";
61
- import { confirm, input, select } from "@inquirer/prompts";
62
64
  import { Logger } from "akanjs/common";
63
65
  import chalk2 from "chalk";
64
66
  import { program } from "commander";
@@ -375,6 +377,10 @@ var convertArgValue = (value, type) => {
375
377
  return value === true || value === "true";
376
378
  };
377
379
  var normalizeEnumChoices = (enumChoices) => enumChoices.map((choice) => typeof choice === "object" ? { value: choice.value, name: choice.label } : { value: choice, name: choice.toString() });
380
+ var prompts = async () => await import("@inquirer/prompts");
381
+ var select = (config, context) => prompts().then((m) => m.select(config, context));
382
+ var confirm = (config, context) => prompts().then((m) => m.confirm(config, context));
383
+ var input = (config, context) => prompts().then((m) => m.input(config, context));
378
384
  var resolveEnumChoices = async (argMeta, context) => {
379
385
  const enumChoices = argMeta.argsOption.enum;
380
386
  if (!enumChoices)
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  runner,
4
4
  script
5
- } from "./index-qpz4csbs.js";
5
+ } from "./index-en4zpzdm.js";
6
6
 
7
7
  // pkgs/@akanjs/cli/page/page.runner.ts
8
8
  class PageRunner extends runner("page") {
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  ModuleScript
4
- } from "./index-wh201a76.js";
4
+ } from "./index-tnngmzgf.js";
5
5
  import {
6
6
  addFieldUiPolicyForType,
7
7
  coerceFieldDefault,
@@ -34,15 +34,15 @@ import {
34
34
  sourceFile,
35
35
  validationCommandsForTarget,
36
36
  viaBuilderParameterName
37
- } from "./index-2v10yr8g.js";
37
+ } from "./index-ckywhpvp.js";
38
38
  import {
39
39
  script
40
- } from "./index-qpz4csbs.js";
40
+ } from "./index-en4zpzdm.js";
41
41
  import {
42
42
  AppExecutor,
43
43
  LibExecutor,
44
44
  ModuleExecutor
45
- } from "./index-0t7pwff2.js";
45
+ } from "./index-s6nk9815.js";
46
46
 
47
47
  // pkgs/@akanjs/cli/primitive/primitive.script.ts
48
48
  import { capitalize } from "akanjs/common";
@@ -2,10 +2,10 @@
2
2
  import {
3
3
  runner,
4
4
  script
5
- } from "./index-qpz4csbs.js";
5
+ } from "./index-en4zpzdm.js";
6
6
  import {
7
7
  LibExecutor
8
- } from "./index-0t7pwff2.js";
8
+ } from "./index-s6nk9815.js";
9
9
 
10
10
  // pkgs/@akanjs/cli/semver.ts
11
11
  function parseVersion(version) {
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  FileSys
4
- } from "./index-61keag0s.js";
4
+ } from "./index-67546d0j.js";
5
5
  import {
6
6
  Spinner
7
7
  } from "./index-6pz1j0zj.js";