@akanjs/cli 3.0.0-alpha.9 → 3.0.0-alpha.90

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 (135) hide show
  1. package/.build-stamp +1 -1
  2. package/README.ko.md +1 -1
  3. package/README.md +1 -1
  4. package/{abstractCompactor-e5yq60qz.js → abstractCompactor-cefxzggj.js} +3 -5
  5. package/{agent.command-f0gqkfgz.js → agent.command-r93wmq7m.js} +11 -13
  6. package/{application.command-x903m2qq.js → application.command-5nqfqgdn.js} +62 -38
  7. package/{applicationBuildRunner-ha3y8ew8.js → applicationBuildRunner-b21m07fs.js} +23 -20
  8. package/{applicationReleasePackager-gg8ccbeh.js → applicationReleasePackager-3wh58n2m.js} +8 -9
  9. package/buildBatch.proc.js +12 -14
  10. package/capacitorApp-gzcx6txb.js +12 -0
  11. package/{cloud.command-zs6kyf83.js → cloud.command-g0pk0k60.js} +15 -18
  12. package/commandManifest.json +1 -1
  13. package/{context.command-fmepgjzg.js → context.command-qd8kqrnh.js} +19 -23
  14. package/dependencyScanner-shs82ynp.js +8 -0
  15. package/devTui-2xf0meaq.js +552 -0
  16. package/devTuiView-7jy8f30g.js +9 -0
  17. package/getDirname-dr3jz1xg.js +7 -0
  18. package/{guideline.command-n6sw0a0c.js → guideline.command-f38x8jhw.js} +16 -18
  19. package/guidelines/agentRule/agentRule.generate.json +31 -0
  20. package/guidelines/agentRule/agentRule.instruction.md +533 -0
  21. package/guidelines/conventions/conventions.instruction.md +406 -197
  22. package/guidelines/cssRule/cssRule.instruction.md +7 -0
  23. package/guidelines/framework/framework.generate.json +3 -2
  24. package/guidelines/framework/framework.instruction.md +1 -9
  25. package/guidelines/mcpRule/mcpRule.generate.json +25 -0
  26. package/guidelines/mcpRule/mcpRule.instruction.md +217 -0
  27. package/guidelines/modelStore/modelStore.instruction.md +12 -0
  28. package/guidelines/modelTemplate/modelTemplate.instruction.md +5 -0
  29. package/guidelines/queryRule/queryRule.generate.json +31 -0
  30. package/guidelines/queryRule/queryRule.instruction.md +143 -0
  31. package/guidelines/runtimeRule/runtimeRule.generate.json +25 -0
  32. package/guidelines/runtimeRule/runtimeRule.instruction.md +213 -0
  33. package/guidelines/ssrRule/ssrRule.instruction.md +49 -5
  34. package/guidelines/transportRule/transportRule.generate.json +31 -0
  35. package/guidelines/transportRule/transportRule.instruction.md +60 -0
  36. package/guidelines/workspaceOnboarding/workspaceOnboarding.instruction.md +51 -760
  37. package/guidelines/workspaceRecipes/workspaceRecipes.generate.json +33 -0
  38. package/guidelines/workspaceRecipes/workspaceRecipes.instruction.md +402 -0
  39. package/incrementalBuilder.proc.js +26 -25
  40. package/{index-774gcx29.js → index-0emb9eat.js} +41 -34
  41. package/index-3d9y066c.js +76 -0
  42. package/{index-3vta1tqa.js → index-3vvbv974.js} +32 -32
  43. package/{index-76rn3g2c.js → index-47pj3aee.js} +4 -4
  44. package/{index-y4vkyhvv.js → index-5xdqxbn9.js} +14 -14
  45. package/{index-1577bej2.js → index-6wwzs1bc.js} +2 -2
  46. package/{index-wnp7hwq7.js → index-92zztqy1.js} +7 -7
  47. package/{index-jhpa13zj.js → index-9bwhxrqf.js} +57 -57
  48. package/{index-bjpxzr6s.js → index-9wtbw98m.js} +6 -3
  49. package/{index-fgc8r6dj.js → index-a5vmm6x4.js} +3 -1
  50. package/{index-xys926f2.js → index-by5gpp8x.js} +4 -4
  51. package/{index-kdh76j26.js → index-cezy7yb3.js} +100 -32
  52. package/{index-62955kn5.js → index-d61rcfa2.js} +758 -127
  53. package/{index-82jrh4hj.js → index-deekbtkj.js} +13 -13
  54. package/{index-rxkpk7n4.js → index-e82dyeqy.js} +4 -4
  55. package/{index-qzdjd4ct.js → index-h759vjfa.js} +18 -18
  56. package/{index-j37qq1f2.js → index-h7yw2z9n.js} +7 -7
  57. package/{index-qb61h0k7.js → index-jydtyzva.js} +1098 -1360
  58. package/{index-46tjzh6s.js → index-kcxmv48c.js} +29 -29
  59. package/{index-4m0bphac.js → index-kfnr6c19.js} +31 -30
  60. package/{index-xmmzf150.js → index-mpmyqm1y.js} +1 -1
  61. package/{index-xjd3rqzj.js → index-n68jx79w.js} +6 -15
  62. package/{index-0cj2zxbm.js → index-n85fer99.js} +12 -11
  63. package/{index-779ske1y.js → index-pgsswppj.js} +27 -27
  64. package/index-pvb4vdwr.js +159 -0
  65. package/{index-67546d0j.js → index-q0y2jq9j.js} +14 -2
  66. package/{index-z8ptfkzv.js → index-q8sn827n.js} +969 -240
  67. package/{index-5sn5w2mt.js → index-r50qen0z.js} +94 -61
  68. package/{index-eyyf2149.js → index-rntcdss1.js} +36 -37
  69. package/{index-gcv8ncfh.js → index-sjak5v5b.js} +16 -12
  70. package/{index-j9cxndc0.js → index-w8kmx1b6.js} +20 -11
  71. package/{index-jf2ya7r2.js → index-y74k5anj.js} +8 -8
  72. package/{index-d43t8af2.js → index-zkvpaggp.js} +58 -25
  73. package/index.js +22 -25
  74. package/{library.command-cv9gdbmg.js → library.command-em103wtn.js} +11 -10
  75. package/{localRegistry.command-d8fg36zc.js → localRegistry.command-gz8apn4y.js} +20 -23
  76. package/{module.command-qyr1s9cn.js → module.command-451pztkc.js} +13 -16
  77. package/{package.command-wsjx0k47.js → package.command-rfhyf38t.js} +8 -10
  78. package/package.json +5 -7
  79. package/{page.command-rdzg65rm.js → page.command-kt19da5g.js} +7 -9
  80. package/{primitive.command-89g38b53.js → primitive.command-pgy69ere.js} +13 -16
  81. package/{quality.command-0cs2z92d.js → quality.command-gpe2vqb5.js} +226 -105
  82. package/recipeScanner-fpagtgc1.js +11 -0
  83. package/{repair.command-6fphxfwj.js → repair.command-2sbrz187.js} +12 -14
  84. package/{routeSourceValidator-e4jmbfcx.js → routeSourceValidator-ze6x894c.js} +0 -2
  85. package/{scalar.command-xfer69s6.js → scalar.command-jcf4e5sv.js} +11 -14
  86. package/subspace.command-kqzqtk0p.js +755 -0
  87. package/templates/app/env/env.client.debug.ts.template +1 -5
  88. package/templates/app/env/env.client.develop.ts.template +1 -5
  89. package/templates/app/env/env.client.local.ts.template +1 -5
  90. package/templates/app/env/env.client.main.ts.template +1 -5
  91. package/templates/app/env/env.client.testing.ts.template +1 -5
  92. package/templates/app/env/env.client.type.ts +2 -6
  93. package/templates/app/env/env.server.debug.ts.template +1 -5
  94. package/templates/app/env/env.server.develop.ts.template +1 -5
  95. package/templates/app/env/env.server.local.ts.template +1 -5
  96. package/templates/app/env/env.server.main.ts.template +1 -5
  97. package/templates/app/main.ts +3 -1
  98. package/templates/appSample/lib/task/task.signal.ts +11 -6
  99. package/templates/appSample/srvkit/AuthGuard.ts +9 -5
  100. package/templates/appSample/srvkit/SessionInternalArg.ts +4 -3
  101. package/templates/crudPages/[__model__Id]/edit/page.tsx +5 -5
  102. package/templates/crudPages/[__model__Id]/page.tsx +10 -13
  103. package/templates/crudPages/new/page.tsx +5 -5
  104. package/templates/crudPages/page.tsx +9 -9
  105. package/templates/crudSinglePage/page.tsx +11 -7
  106. package/templates/env/_env.server.type.ts +7 -5
  107. package/templates/lib/db.ts +1 -1
  108. package/templates/lib/dict.ts +1 -1
  109. package/templates/lib/sig.ts +1 -1
  110. package/templates/lib/srv.ts +6 -2
  111. package/templates/module/__model__.dictionary.ts +4 -1
  112. package/templates/module/__model__.signal.ts +2 -3
  113. package/templates/module/__model__.store.ts +1 -2
  114. package/templates/workspaceRoot/.gitignore.template +0 -1
  115. package/templates/workspaceRoot/.husky/pre-commit.template +16 -0
  116. package/templates/workspaceRoot/.vscode/settings.json.template +1 -1
  117. package/templates/workspaceRoot/AGENTS.md.template +4 -0
  118. package/templates/workspaceRoot/CLAUDE.md.template +19 -0
  119. package/templates/workspaceRoot/biome.json.template +2 -1
  120. package/templates/workspaceRoot/docs/AI-DEVELOPMENT.md.template +10 -14
  121. package/templates/workspaceRoot/docs/GENERATED.md.template +12 -10
  122. package/templates/workspaceRoot/package.json.template +2 -4
  123. package/typeChecker-3xgrzc2v.js +7 -0
  124. package/typecheck.proc.js +4 -5
  125. package/{workflow.command-2ygfqt4f.js → workflow.command-m4z25a2p.js} +22 -25
  126. package/{workspace.command-88m0zs64.js → workspace.command-dqgj9zbk.js} +96 -81
  127. package/capacitorApp-9xswcgx7.js +0 -61
  128. package/dependencyScanner-f6grrep3.js +0 -9
  129. package/getDirname-m9s0cmhq.js +0 -8
  130. package/index-mxvakhsm.js +0 -66
  131. package/index-r24hmh0q.js +0 -4
  132. package/recipeScanner-tghkzrrt.js +0 -12
  133. package/typeChecker-kravn7ns.js +0 -8
  134. /package/{index-0wae5ebk.js → index-meh558jy.js} +0 -0
  135. /package/{index-ss469dec.js → index-nz8prx9g.js} +0 -0
@@ -1,21 +1,18 @@
1
1
  // @bun
2
2
  import {
3
- AppExecutor,
3
+ FileSys
4
+ } from "./index-q0y2jq9j.js";
5
+ import {
4
6
  Executor,
7
+ WorkspaceExecutor,
8
+ AppExecutor,
5
9
  LibExecutor,
6
- ModuleExecutor,
7
10
  PkgExecutor,
8
- WorkspaceExecutor
9
- } from "./index-z8ptfkzv.js";
10
- import {
11
- getDirname
12
- } from "./index-1577bej2.js";
13
- import {
14
- FileSys
15
- } from "./index-67546d0j.js";
11
+ ModuleExecutor
12
+ } from "./index-q8sn827n.js";
16
13
  import {
17
- __require
18
- } from "./index-r24hmh0q.js";
14
+ getDirname2
15
+ } from "./index-6wwzs1bc.js";
19
16
 
20
17
  // pkgs/@akanjs/devkit/commandDecorators/targetMeta.ts
21
18
  var COMMAND_META = Symbol("akan.command.meta");
@@ -54,6 +51,7 @@ var normalizePrimitiveArgType = (type) => {
54
51
  throw new Error(`Invalid primitive argument type: ${type}`);
55
52
  };
56
53
  var App = createInternalArgToken("App");
54
+ var Apps = createInternalArgToken("Apps");
57
55
  var Lib = createInternalArgToken("Lib");
58
56
  var Sys = createInternalArgToken("Sys");
59
57
  var Exec = createInternalArgToken("Exec");
@@ -62,11 +60,29 @@ var Module = createInternalArgToken("Module");
62
60
  var Workspace = createInternalArgToken("Workspace");
63
61
 
64
62
  // pkgs/@akanjs/devkit/commandDecorators/command.ts
65
- import path from "path";
63
+ import path2 from "path";
66
64
  import { Logger } from "akanjs/common";
67
65
  import chalk2 from "chalk";
68
66
  import { program } from "commander";
69
67
 
68
+ // pkgs/@akanjs/devkit/appSelectionMemory.ts
69
+ import path from "path";
70
+ class AppSelectionMemory {
71
+ static pathIn(workspaceRoot) {
72
+ return path.join(workspaceRoot, "local", ".akan", "lastStart.json");
73
+ }
74
+ static async read(workspaceRoot) {
75
+ const stored = await Bun.file(AppSelectionMemory.pathIn(workspaceRoot)).json().catch(() => null);
76
+ const apps = stored?.apps;
77
+ return Array.isArray(apps) ? apps.filter((name) => typeof name === "string") : [];
78
+ }
79
+ static async write(workspaceRoot, apps) {
80
+ await FileSys.writeJson(AppSelectionMemory.pathIn(workspaceRoot), { apps }).catch(() => {
81
+ return;
82
+ });
83
+ }
84
+ }
85
+
70
86
  // pkgs/@akanjs/devkit/commandDecorators/dependencyBuilder.ts
71
87
  var capitalize = (value) => value.slice(0, 1).toUpperCase() + value.slice(1);
72
88
  var createDependencyKey = (refName, kind) => `${refName}${capitalize(kind)}`;
@@ -264,6 +280,8 @@ var formatCommandHelp = (command, key) => {
264
280
  return "";
265
281
  if (arg.type === "Module")
266
282
  return "[sys:module]";
283
+ if (arg.type === "Apps")
284
+ return "[apps...]";
267
285
  if (arg.type === "Argument") {
268
286
  return `[${camelToKebabCase2(arg.name)}]`;
269
287
  }
@@ -290,6 +308,9 @@ var formatCommandHelp = (command, key) => {
290
308
  } else if (arg.type === "Module") {
291
309
  argName = "sys:module";
292
310
  argDesc = "Module in format: app-name:module-name or lib-name:module-name";
311
+ } else if (arg.type === "Apps") {
312
+ argName = "apps...";
313
+ argDesc = "App names, space- or comma-separated, or all. Omit to pick them interactively";
293
314
  } else {
294
315
  argName = arg.type.toLowerCase();
295
316
  argDesc = `${arg.type} name in this workspace`;
@@ -383,6 +404,17 @@ var prompts = async () => await import("@inquirer/prompts");
383
404
  var select = (config, context) => prompts().then((m) => m.select(config, context));
384
405
  var confirm = (config, context) => prompts().then((m) => m.confirm(config, context));
385
406
  var input = (config, context) => prompts().then((m) => m.input(config, context));
407
+ var checkbox = (config, context) => prompts().then((m) => m.checkbox(config, context));
408
+ var assertEnumChoice = (argMeta, value) => {
409
+ const enumChoices = argMeta.argsOption.enum;
410
+ if (!enumChoices || typeof enumChoices === "function")
411
+ return;
412
+ const choices = normalizeEnumChoices(enumChoices);
413
+ if (choices.some((choice) => String(choice.value) === String(value)))
414
+ return;
415
+ const label = argMeta.type === "Option" ? `option '--${camelToKebabCase3(argMeta.name)}'` : `argument '${argMeta.name}'`;
416
+ throw new Error(`${label} argument '${String(value)}' is invalid. Allowed choices are ${choices.map((choice) => choice.name).join(", ")}.`);
417
+ };
386
418
  var resolveEnumChoices = async (argMeta, context) => {
387
419
  const enumChoices = argMeta.argsOption.enum;
388
420
  if (!enumChoices)
@@ -396,9 +428,10 @@ var getOptionValue = async (argMeta, opt, context) => {
396
428
  name,
397
429
  argsOption: { enum: enumChoices, default: defaultValue, type, desc, nullable, example, ask }
398
430
  } = argMeta;
399
- if (opt[argMeta.name] !== undefined)
431
+ if (opt[argMeta.name] !== undefined) {
432
+ assertEnumChoice(argMeta, opt[argMeta.name]);
400
433
  return convertArgValue(opt[argMeta.name], type ?? "string");
401
- else if (defaultValue !== undefined)
434
+ } else if (defaultValue !== undefined)
402
435
  return defaultValue;
403
436
  if (enumChoices) {
404
437
  const choices = normalizeEnumChoices(await resolveEnumChoices(argMeta, context) ?? []);
@@ -424,9 +457,10 @@ var getArgumentValue = async (argMeta, value) => {
424
457
  name,
425
458
  argsOption: { default: defaultValue, type, desc, nullable, example, ask }
426
459
  } = argMeta;
427
- if (value !== undefined)
460
+ if (value !== undefined) {
461
+ assertEnumChoice(argMeta, value);
428
462
  return convertArgValue(value, type ?? "string");
429
- else if (defaultValue !== undefined)
463
+ } else if (defaultValue !== undefined)
430
464
  return defaultValue;
431
465
  else if (nullable)
432
466
  return null;
@@ -465,6 +499,31 @@ var assertCurrentDirectoryIsWorkspaceRoot = async () => {
465
499
  ].join(`
466
500
  `));
467
501
  };
502
+ var parseAppNameList = (value) => (Array.isArray(value) ? value : value === undefined ? [] : [value]).flatMap((entry) => entry.split(",")).map((entry) => entry.trim()).filter(Boolean);
503
+ var getAppsArgumentValue = async (value, workspace) => {
504
+ const appNames = await workspace.getApps();
505
+ if (appNames.length === 0)
506
+ throw new Error("No apps found in this workspace (apps/<appName>/akan.config.ts)");
507
+ const requested = parseAppNameList(value);
508
+ if (requested.includes("all"))
509
+ return appNames.map((name) => AppExecutor.from(workspace, name));
510
+ if (requested.length) {
511
+ const unknown = requested.filter((name) => !appNames.includes(name));
512
+ if (unknown.length)
513
+ throw new Error(`Unknown app${unknown.length > 1 ? "s" : ""}: ${unknown.join(", ")}. Available: ${appNames.join(", ")}, all`);
514
+ return [...new Set(requested)].map((name) => AppExecutor.from(workspace, name));
515
+ }
516
+ if (appNames.length === 1 && appNames[0])
517
+ return [AppExecutor.from(workspace, appNames[0])];
518
+ const remembered = new Set(await AppSelectionMemory.read(workspace.workspaceRoot));
519
+ const picked = await checkbox({
520
+ message: "Select the apps to run (space to toggle, enter to confirm)",
521
+ choices: appNames.map((name) => ({ name, value: name, checked: remembered.has(name) })),
522
+ required: true
523
+ });
524
+ await AppSelectionMemory.write(workspace.workspaceRoot, picked);
525
+ return picked.map((name) => AppExecutor.from(workspace, name));
526
+ };
468
527
  var getInternalArgumentValue = async (argMeta, value, workspace) => {
469
528
  if (argMeta.type === "Workspace")
470
529
  return workspace;
@@ -528,36 +587,36 @@ var getInternalArgumentValue = async (argMeta, value, workspace) => {
528
587
  return PkgExecutor.from(workspace, pkgName);
529
588
  } else if (sysType === "module") {
530
589
  if (value) {
531
- const [sysName, moduleName2] = value.split(":");
532
- if (!sysName || !moduleName2)
590
+ const [sysName, moduleName] = value.split(":");
591
+ if (!sysName || !moduleName)
533
592
  throw new Error(`Invalid module name: ${value}`);
534
593
  if (appNames.includes(sysName)) {
535
594
  const app = AppExecutor.from(workspace, sysName);
536
- const modules2 = await app.getModules();
537
- if (modules2.includes(moduleName2))
538
- return ModuleExecutor.from(app, moduleName2);
595
+ const modules = await app.getModules();
596
+ if (modules.includes(moduleName))
597
+ return ModuleExecutor.from(app, moduleName);
539
598
  else
540
- throw new Error(`Invalid module name: ${moduleName2}`);
599
+ throw new Error(`Invalid module name: ${moduleName}`);
541
600
  } else if (libNames.includes(sysName)) {
542
601
  const lib = LibExecutor.from(workspace, sysName);
543
- const modules2 = await lib.getModules();
544
- if (modules2.includes(moduleName2))
545
- return ModuleExecutor.from(lib, moduleName2);
602
+ const modules = await lib.getModules();
603
+ if (modules.includes(moduleName))
604
+ return ModuleExecutor.from(lib, moduleName);
546
605
  } else
547
606
  throw new Error(`Invalid system name: ${sysName}`);
548
607
  }
549
608
  const { type, name } = await select({
550
609
  message: `select the App or Lib name`,
551
610
  choices: [
552
- ...appNames.map((name2) => ({ name: name2, value: { type: "app", name: name2 } })),
553
- ...libNames.map((name2) => ({ name: name2, value: { type: "lib", name: name2 } }))
611
+ ...appNames.map((name) => ({ name, value: { type: "app", name } })),
612
+ ...libNames.map((name) => ({ name, value: { type: "lib", name } }))
554
613
  ]
555
614
  });
556
615
  const executor = type === "app" ? AppExecutor.from(workspace, name) : LibExecutor.from(workspace, name);
557
616
  const modules = await executor.getModules();
558
617
  const moduleName = await select({
559
618
  message: `Select the module name`,
560
- choices: modules.map((name2) => ({ name: `${executor.name}:${name2}`, value: name2 }))
619
+ choices: modules.map((name) => ({ name: `${executor.name}:${name}`, value: name }))
561
620
  });
562
621
  return ModuleExecutor.from(executor, moduleName);
563
622
  } else
@@ -568,8 +627,8 @@ var runCommands = async (...commands) => {
568
627
  printCliError(error);
569
628
  process.exit(1);
570
629
  });
571
- const __dirname2 = getDirname(import.meta.url);
572
- const packageJsonCandidates = [`${path.dirname(Bun.main)}/package.json`, `${__dirname2}/../package.json`];
630
+ const __dirname2 = getDirname2(import.meta.url);
631
+ const packageJsonCandidates = [`${path2.dirname(Bun.main)}/package.json`, `${__dirname2}/../package.json`];
573
632
  let cliPackageJson = null;
574
633
  for (const packageJsonPath of packageJsonCandidates) {
575
634
  if (!await FileSys.fileExists(packageJsonPath))
@@ -616,6 +675,8 @@ It may cause unexpected behavior. Run \`akan update\` to update latest akanjs.`)
616
675
  continue;
617
676
  else if (argMeta.type === "Module") {
618
677
  programCommand = programCommand.argument(`[sys-name:module-name]`, `${argMeta.type} in this workspace (apps|libs)/<sys-name>/lib/<module-name>`);
678
+ } else if (argMeta.type === "Apps") {
679
+ programCommand = programCommand.argument(`[apps...]`, `apps in this workspace apps/<appName>, or all (space- or comma-separated; omit to pick interactively)`);
619
680
  } else {
620
681
  const sysType = argMeta.type.toLowerCase();
621
682
  programCommand = programCommand.argument(`[${sysType}]`, `${sysType} in this workspace ${sysType}s/<${sysType}Name>`);
@@ -640,10 +701,17 @@ It may cause unexpected behavior. Run \`akan update\` to update latest akanjs.`)
640
701
  commandArgs[argMeta.idx] = await getOptionValue(argMeta, opt, commandContext);
641
702
  else if (argMeta.type === "Argument")
642
703
  commandArgs[argMeta.idx] = await getArgumentValue(argMeta, cmdArgs[argMeta.idx]);
704
+ else if (argMeta.type === "Apps")
705
+ commandArgs[argMeta.idx] = await getAppsArgumentValue(cmdArgs[argMeta.idx], workspace);
643
706
  else
644
707
  commandArgs[argMeta.idx] = await getInternalArgumentValue(argMeta, cmdArgs[argMeta.idx], workspace);
645
708
  if (commandArgs[argMeta.idx] instanceof AppExecutor)
646
709
  process.env.AKAN_PUBLIC_APP_NAME = commandArgs[argMeta.idx].name;
710
+ else if (Array.isArray(commandArgs[argMeta.idx])) {
711
+ const apps = commandArgs[argMeta.idx];
712
+ if (apps.length === 1 && apps[0])
713
+ process.env.AKAN_PUBLIC_APP_NAME = apps[0].name;
714
+ }
647
715
  assignCommandContext(commandContext, argMeta, commandArgs[argMeta.idx]);
648
716
  if (opt.verbose)
649
717
  Executor.setVerbose(true);
@@ -763,4 +831,4 @@ function command(refName, depsOrBuilder, builder) {
763
831
  }
764
832
  return CommandBase;
765
833
  }
766
- export { getTargetMetas, getTargetCommandNames, App, Lib, Sys, Exec, Pkg, Module, Workspace, CommandContainer, runner, script, runCommands, command };
834
+ export { getTargetMetas, getTargetCommandNames, App, Apps, Lib, Sys, Exec, Pkg, Module, Workspace, CommandContainer, runner, script, runCommands, command };