@akanjs/cli 3.0.0-beta.2 → 3.0.0-beta.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/.build-stamp +1 -1
  2. package/CodeAgent-q2m47rqp.js +9 -0
  3. package/CodeAgentRpcHost-p7h6n2hp.js +7 -0
  4. package/CodeAgentRpcListener-7p7z5dd7.js +97 -0
  5. package/CodeTui-pdqhc3sn.js +1457 -0
  6. package/README.md +3 -0
  7. package/TunnelShare-scf4e4pd.js +9 -0
  8. package/{agent.command-d2gfxfck.js → agent.command-ttn09rx3.js} +8 -9
  9. package/akanCode.js +102 -0
  10. package/application.command-7gweenv7.js +179 -0
  11. package/{applicationBuildRunner-kxwbssgn.js → applicationBuildRunner-38exmejd.js} +63 -64
  12. package/buildBatch.proc.js +26 -25
  13. package/cloud.command-bhztw7c2.js +95 -0
  14. package/cloud.script-aabyhgba.js +20 -0
  15. package/code.command-6s8c0k91.js +154 -0
  16. package/commandManifest.json +1 -1
  17. package/consoleToStderr-h5bryj94.js +7 -0
  18. package/context.command-phmgywt2.js +48 -0
  19. package/context.runner-yvyw5g2d.js +21 -0
  20. package/{dependencyScanner-shs82ynp.js → dependencyScanner-ye2e6pdz.js} +2 -2
  21. package/{devTui-40ggmd99.js → devTui-q7k7bakd.js} +122 -40
  22. package/fileSys-5ngz93ga.js +9 -0
  23. package/guideline.command-7jk47fgq.js +42 -0
  24. package/guidelines/agentRule/agentRule.instruction.md +209 -28
  25. package/guidelines/conventions/conventions.instruction.md +96 -29
  26. package/guidelines/fieldRule/fieldRule.instruction.md +1 -0
  27. package/guidelines/mcpRule/mcpRule.instruction.md +7 -5
  28. package/guidelines/queryRule/queryRule.instruction.md +17 -7
  29. package/guidelines/runtimeRule/runtimeRule.instruction.md +77 -3
  30. package/guidelines/ssrRule/ssrRule.instruction.md +4 -2
  31. package/guidelines/transportRule/transportRule.instruction.md +51 -0
  32. package/guidelines/workspaceRecipes/workspaceRecipes.instruction.md +66 -3
  33. package/incrementalBuilder.proc.js +31 -48
  34. package/{index-h7yw2z9n.js → index-0bq14vr1.js} +8 -14
  35. package/{index-259dsnz3.js → index-1db2cw0y.js} +5 -8
  36. package/index-22d57v4c.js +266 -0
  37. package/index-3hx1z96c.js +87 -0
  38. package/{index-kcxmv48c.js → index-3t7g9e4r.js} +45 -79
  39. package/{index-ne2qy0nk.js → index-4dn1p115.js} +12 -12
  40. package/{index-q0y2jq9j.js → index-5b6tavv3.js} +6 -3
  41. package/index-7cqjvraf.js +69 -0
  42. package/index-7md2g9vw.js +6 -0
  43. package/{index-zry5nz81.js → index-8kb5p54p.js} +51 -30
  44. package/{index-ktb5njgy.js → index-9629w7ns.js} +49 -99
  45. package/index-9dp031by.js +12 -0
  46. package/{index-a64esmtb.js → index-aadpbnt2.js} +172 -308
  47. package/{index-3d9y066c.js → index-bjwxs904.js} +9 -8
  48. package/index-c6eggbee.js +123 -0
  49. package/index-d0arnrm8.js +700 -0
  50. package/index-d2242ksy.js +99 -0
  51. package/{index-600zhnve.js → index-dg97qp24.js} +70 -200
  52. package/{index-92zztqy1.js → index-dy0jx9ay.js} +2 -17
  53. package/{index-w8kmx1b6.js → index-fgq75haa.js} +198 -290
  54. package/{index-2tv3fdx4.js → index-ga6hygxr.js} +944 -1333
  55. package/{index-by5gpp8x.js → index-hj6w4ka1.js} +2 -1
  56. package/index-hr5n7t4x.js +465 -0
  57. package/{index-hwkygn9s.js → index-khpfpcsd.js} +302 -33
  58. package/{index-7737gxcp.js → index-m0ms3n1c.js} +107 -241
  59. package/{index-ws5e0j51.js → index-mgfx3mfs.js} +43 -26
  60. package/index-p6pbz9n5.js +25 -0
  61. package/index-pp54p5zk.js +53 -0
  62. package/{index-j9yhg404.js → index-q44jbw48.js} +4 -7
  63. package/{index-mak3cd28.js → index-rmcw8yc8.js} +137 -255
  64. package/{index-pnqbkf5p.js → index-rnt66vym.js} +6 -2
  65. package/index-smme4r47.js +49 -0
  66. package/index-tgjy8xf3.js +187 -0
  67. package/index-v5eayqqw.js +2729 -0
  68. package/index-wa5jbxj1.js +760 -0
  69. package/{index-4edzf1gr.js → index-wp43xrjv.js} +77 -150
  70. package/{index-fz5q3gd7.js → index-ya5qbmyg.js} +10 -17
  71. package/index-yjkte9aj.js +1119 -0
  72. package/{index-gyd220p2.js → index-yy4s1j72.js} +554 -577
  73. package/{index-v0qh106m.js → index-z50k041j.js} +580 -862
  74. package/index.js +23 -22
  75. package/{library.command-nbsky672.js → library.command-ccb1cp92.js} +4 -5
  76. package/{localRegistry.command-yeq57wjr.js → localRegistry.command-ajb9n87j.js} +23 -42
  77. package/{module.command-29vqzrh8.js → module.command-5k6h407d.js} +8 -11
  78. package/{package.command-axv0abmn.js → package.command-e6ntvpez.js} +6 -7
  79. package/package.json +14 -6
  80. package/{page.command-vs9s3zrh.js → page.command-v4f90wb8.js} +4 -5
  81. package/{primitive.command-cbxmqbtc.js → primitive.command-g6km57q5.js} +9 -22
  82. package/prompter-ptaa3nk0.js +8 -0
  83. package/{quality.command-gmbs7nws.js → quality.command-de3p36pz.js} +205 -377
  84. package/{recipeScanner-fpagtgc1.js → recipeScanner-4b69ybe0.js} +1 -1
  85. package/{repair.command-bqsjptsj.js → repair.command-d3x1javq.js} +11 -35
  86. package/{routeSourceValidator-apyqw7wk.js → routeSourceValidator-7ycnfz0e.js} +0 -6
  87. package/{scalar.command-6k1vhe9s.js → scalar.command-7ezrac2b.js} +7 -10
  88. package/skills/akan-code/SKILL.md +130 -0
  89. package/skills/akan-debug/SKILL.md +42 -0
  90. package/skills/akan-deps/SKILL.md +50 -0
  91. package/skills/akan-err/SKILL.md +39 -0
  92. package/skills/akan-module/SKILL.md +45 -0
  93. package/skills/akan-scaffold/SKILL.md +76 -0
  94. package/skills/akan-scalar/SKILL.md +52 -0
  95. package/skills/akan-service/SKILL.md +34 -0
  96. package/skills/akan-store/SKILL.md +67 -0
  97. package/skills/akan-ui/SKILL.md +63 -0
  98. package/skills/akan-validate/SKILL.md +44 -0
  99. package/{subspace.command-fwjfcts7.js → subspace.command-ps71ynp6.js} +138 -67
  100. package/templates/__scalar/__model__/__model__.abstract.md.template +8 -0
  101. package/templates/appSample/lib/__scalar/workHistory/workHistory.abstract.ts +8 -39
  102. package/templates/appSample/lib/_noti/noti.abstract.ts +6 -29
  103. package/templates/appSample/lib/task/task.abstract.ts +12 -32
  104. package/templates/appSample/lib/task/task.signal.spec.ts +15 -18
  105. package/templates/appSample/lib/task/task.signal.test.ts +15 -1
  106. package/templates/appSample/lib/task/task.signal.ts +1 -1
  107. package/templates/appSample/srvkit/{AuthGuard.ts → guards.ts} +7 -4
  108. package/templates/appSample/srvkit/{SessionInternalArg.ts → internalArgs.ts} +6 -4
  109. package/templates/client.ts +7 -30
  110. package/templates/crudPages/[__model__Id]/edit/page.tsx +2 -1
  111. package/templates/crudPages/[__model__Id]/page.tsx +2 -1
  112. package/templates/crudPages/new/page.tsx +2 -1
  113. package/templates/crudPages/page.tsx +2 -1
  114. package/templates/crudSinglePage/page.tsx +2 -1
  115. package/templates/lib/__lib/lib.dictionary.ts +0 -2
  116. package/templates/lib/__lib/lib.document.ts +0 -2
  117. package/templates/lib/sig.ts +8 -30
  118. package/templates/localDev/docker-compose.yaml.template +3 -14
  119. package/templates/module/__model__.signal.ts +12 -4
  120. package/templates/pkgRoot/tsconfig.json.template +2 -7
  121. package/templates/server.ts +0 -2
  122. package/templates/service/__model__.abstract.md.template +8 -0
  123. package/templates/workspaceRoot/.gitignore.template +0 -1
  124. package/tunnel.command-hsrv2mny.js +129 -0
  125. package/{typeChecker-3xgrzc2v.js → typeChecker-px49mezc.js} +1 -1
  126. package/typecheck.proc.js +1 -1
  127. package/workflow.command-z2p32nmf.js +79 -0
  128. package/{workspace.command-8s050m0h.js → workspace.command-tmdqkrh0.js} +77 -109
  129. package/abstractCompactor-mjh5ppsq.js +0 -101
  130. package/application.command-pj2m7584.js +0 -204
  131. package/applicationReleasePackager-4yasxwv9.js +0 -244
  132. package/capacitorApp-36rbr858.js +0 -12
  133. package/cloud.command-jshwdq22.js +0 -93
  134. package/context.command-ez8a0zyz.js +0 -80
  135. package/devTuiView-c08ccbat.js +0 -9
  136. package/getDirname-dr3jz1xg.js +0 -7
  137. package/guideline.command-xmqwx8zm.js +0 -359
  138. package/guidelines/agentRule/agentRule.generate.json +0 -31
  139. package/guidelines/componentRule/componentRule.generate.json +0 -31
  140. package/guidelines/conventions/conventions.generate.json +0 -25
  141. package/guidelines/cssRule/cssRule.generate.json +0 -31
  142. package/guidelines/docPageRule/docPageRule.generate.json +0 -31
  143. package/guidelines/docPageRule/docPageRule.instruction.md +0 -25
  144. package/guidelines/docSyncRule/docSyncRule.generate.json +0 -31
  145. package/guidelines/docSyncRule/docSyncRule.instruction.md +0 -25
  146. package/guidelines/enumConstant/enumConstant.generate.json +0 -31
  147. package/guidelines/enumConstant/enumConstant.instruction.md +0 -28
  148. package/guidelines/fieldRule/fieldRule.generate.json +0 -31
  149. package/guidelines/framework/framework.generate.json +0 -32
  150. package/guidelines/mcpRule/mcpRule.generate.json +0 -35
  151. package/guidelines/modelConstant/modelConstant.generate.json +0 -32
  152. package/guidelines/modelDictionary/modelDictionary.generate.json +0 -32
  153. package/guidelines/modelDocument/modelDocument.generate.json +0 -31
  154. package/guidelines/modelService/modelService.generate.json +0 -31
  155. package/guidelines/modelSignal/modelSignal.generate.json +0 -31
  156. package/guidelines/modelStore/modelStore.generate.json +0 -31
  157. package/guidelines/modelTemplate/modelTemplate.generate.json +0 -31
  158. package/guidelines/modelUnit/modelUnit.generate.json +0 -31
  159. package/guidelines/modelUtil/modelUtil.generate.json +0 -31
  160. package/guidelines/modelView/modelView.generate.json +0 -31
  161. package/guidelines/modelZone/modelZone.generate.json +0 -31
  162. package/guidelines/moduleCodegen/moduleCodegen.generate.json +0 -31
  163. package/guidelines/moduleCodegen/moduleCodegen.instruction.md +0 -28
  164. package/guidelines/moduleOverview/moduleOverview.generate.json +0 -31
  165. package/guidelines/queryRule/queryRule.generate.json +0 -31
  166. package/guidelines/recipeRule/recipeRule.generate.json +0 -31
  167. package/guidelines/runtimeRule/runtimeRule.generate.json +0 -25
  168. package/guidelines/scalarConstant/scalarConstant.generate.json +0 -32
  169. package/guidelines/scalarDictionary/scalarDictionary.generate.json +0 -32
  170. package/guidelines/scalarModule/scalarModule.generate.json +0 -31
  171. package/guidelines/sharedUiUsage/sharedUiUsage.generate.json +0 -31
  172. package/guidelines/sharedUiUsage/sharedUiUsage.instruction.md +0 -25
  173. package/guidelines/ssrRule/ssrRule.generate.json +0 -31
  174. package/guidelines/transportRule/transportRule.generate.json +0 -31
  175. package/guidelines/utilUiUsage/utilUiUsage.generate.json +0 -31
  176. package/guidelines/utilUiUsage/utilUiUsage.instruction.md +0 -25
  177. package/guidelines/workspaceOnboarding/workspaceOnboarding.generate.json +0 -24
  178. package/guidelines/workspaceRecipes/workspaceRecipes.generate.json +0 -33
  179. package/index-2hq52jq3.js +0 -465
  180. package/index-47pj3aee.js +0 -76
  181. package/index-6wwzs1bc.js +0 -7
  182. package/index-8pm30m73.js +0 -841
  183. package/index-kn1h7p1x.js +0 -560
  184. package/index-meh558jy.js +0 -65
  185. package/index-rwg2aa4f.js +0 -229
  186. package/index-wt7qrtd4.js +0 -1516
  187. package/templates/__scalar/__model__/__model__.abstract.md +0 -28
  188. package/templates/module/__model__.abstract.md +0 -28
  189. package/templates/service/__model__.abstract.md +0 -28
  190. package/workflow.command-nwpcdc8p.js +0 -107
@@ -0,0 +1,49 @@
1
+ // @bun
2
+ import {
3
+ GlobalConfig,
4
+ CloudApi
5
+ } from "./index-22d57v4c.js";
6
+
7
+ // pkgs/@akanjs/cli/tunnel/TunnelShare.ts
8
+ import { TunnelAgent } from "akanjs/server/tunnel";
9
+
10
+ class TunnelShare2 {
11
+ #api;
12
+ #agent;
13
+ grant;
14
+ #closed = false;
15
+ constructor(api, agent, grant) {
16
+ this.#api = api;
17
+ this.#agent = agent;
18
+ this.grant = grant;
19
+ }
20
+ static async open(app, { workspace, host, port, ttlMinutes, onLost }) {
21
+ const api = await CloudApi.fromHost(workspace, host ?? GlobalConfig.akanCloudHost);
22
+ const grant = await api.requestTunnel({ name: app.name, ...ttlMinutes ? { ttlMinutes } : {} });
23
+ const origin = `http://localhost:${port ?? await app.getDevPort()}`;
24
+ const agent = new TunnelAgent({
25
+ gatewayUrl: grant.gatewayUrl,
26
+ token: grant.token,
27
+ hostnames: [grant.hostname],
28
+ origin,
29
+ name: app.name,
30
+ ...onLost ? { onLost } : {}
31
+ });
32
+ await agent.start();
33
+ return new TunnelShare2(api, agent, grant);
34
+ }
35
+ get url() {
36
+ return this.grant.url;
37
+ }
38
+ async close() {
39
+ if (this.#closed)
40
+ return;
41
+ this.#closed = true;
42
+ await this.#agent.stop("cli exited");
43
+ try {
44
+ await this.#api.revokeTunnel(this.grant.code);
45
+ } catch {}
46
+ }
47
+ }
48
+
49
+ export { TunnelShare2 };
@@ -0,0 +1,187 @@
1
+ // @bun
2
+ import {
3
+ runner,
4
+ script
5
+ } from "./index-rmcw8yc8.js";
6
+ import {
7
+ ModuleExecutor
8
+ } from "./index-ga6hygxr.js";
9
+ import {
10
+ sourceFile,
11
+ moduleSourcePaths,
12
+ generatedFilesForSync,
13
+ createPassedPrimitiveReport,
14
+ bilingualLabelForField,
15
+ bilingualDescriptionForField
16
+ } from "./index-yy4s1j72.js";
17
+ import {
18
+ PageScript
19
+ } from "./index-rnt66vym.js";
20
+ import {
21
+ pluralizeName
22
+ } from "./index-nz8prx9g.js";
23
+
24
+ // pkgs/@akanjs/cli/module/module.script.ts
25
+ import { capitalize as capitalize2 } from "akanjs/common";
26
+
27
+ // pkgs/@akanjs/cli/module/module.runner.ts
28
+ import { capitalize } from "akanjs/common";
29
+ var purposeByModule = {
30
+ budget: "Budget represents planned or actual money allocated inside the app.",
31
+ project: "Project represents a project workspace or business initiative managed by the app.",
32
+ task: "Task represents work items that move through the app workflow."
33
+ };
34
+ var moduleAbstractContent = (moduleName, sharedGuards) => {
35
+ const title = capitalize(moduleName);
36
+ const noun = bilingualLabelForField(moduleName).en.toLowerCase();
37
+ const purpose = purposeByModule[moduleName] ?? `${title} represents ${noun} records managed by the app.`;
38
+ const writeRule = sharedGuards ? `Anyone may read a ${noun}; only an admin creates, updates or removes one.` : `Anyone may read a ${noun}; nobody creates, updates or removes one until the slice names a guard.`;
39
+ return `# ${moduleName} Abstract
40
+ ${purpose}
41
+
42
+ ## Rules
43
+ - ${writeRule}
44
+ - Removal is soft: a removed ${noun} keeps its row with \`removedAt\` set.
45
+ `;
46
+ };
47
+ var moduleFileKeys = [
48
+ "abstract",
49
+ "constant",
50
+ "dictionary",
51
+ "service",
52
+ "store",
53
+ "signal",
54
+ "unit",
55
+ "view",
56
+ "template",
57
+ "zone",
58
+ "util"
59
+ ];
60
+
61
+ class ModuleRunner extends runner("module") {
62
+ async createService(module) {
63
+ const serviceName = module.name.replace(/^_+/, "");
64
+ await module.applyTemplate({
65
+ basePath: `.`,
66
+ template: "service",
67
+ dict: { model: serviceName, sysName: module.sys.name }
68
+ });
69
+ return await this.#readFiles(module, {
70
+ abstract: `${serviceName}.abstract.md`,
71
+ dictionary: `${serviceName}.dictionary.ts`,
72
+ service: `${serviceName}.service.ts`,
73
+ signal: `${serviceName}.signal.ts`,
74
+ store: `${serviceName}.store.ts`
75
+ });
76
+ }
77
+ async#readFiles(module, filenames) {
78
+ const files = await Promise.all(Object.entries(filenames).map(async ([key, filename]) => [
79
+ key,
80
+ { filename, content: await module.readFile(filename) }
81
+ ]));
82
+ return Object.fromEntries(files);
83
+ }
84
+ async removeModule(module) {
85
+ await module.sys.removeDir(`lib/${module.name}`);
86
+ }
87
+ async#hasSharedGuards(module) {
88
+ const { sys } = module;
89
+ if (sys.type === "lib" && sys.name === "shared")
90
+ return true;
91
+ if (!await sys.exists("lib/srv.ts"))
92
+ return false;
93
+ return (await sys.readFile("lib/srv.ts")).includes('"@libs/shared/lib/srv"');
94
+ }
95
+ async createComponentTemplate(module, type) {
96
+ await module.sys.applyTemplate({
97
+ basePath: `./lib/${module.name}`,
98
+ template: `module/__Model__.${capitalize(type)}.tsx`,
99
+ dict: { model: module.name, sysName: module.sys.name, sysType: module.sys.type }
100
+ });
101
+ return {
102
+ component: {
103
+ filename: `${capitalize(module.name)}.${capitalize(type)}.tsx`,
104
+ content: await module.sys.readFile(`lib/${module.name}/${capitalize(module.name)}.${capitalize(type)}.tsx`)
105
+ }
106
+ };
107
+ }
108
+ async createModuleTemplate(module) {
109
+ const names = pluralizeName(module.name);
110
+ const modelLabel = bilingualLabelForField(module.name);
111
+ const modelDescription = bilingualDescriptionForField(module.name);
112
+ const paths = moduleSourcePaths(module.name);
113
+ const filenames = Object.fromEntries(moduleFileKeys.map((key) => [key, paths[key].replace(`lib/${module.name}/`, "")]));
114
+ const sharedGuards = await this.#hasSharedGuards(module);
115
+ await module.applyTemplate({
116
+ basePath: `.`,
117
+ template: "module",
118
+ options: { sharedGuards },
119
+ dict: {
120
+ model: module.name,
121
+ models: names,
122
+ sysName: module.sys.name,
123
+ sysType: module.sys.type,
124
+ modelLabelEn: modelLabel.en,
125
+ modelLabelKo: modelLabel.ko,
126
+ modelDescEn: modelDescription.en,
127
+ modelDescKo: modelDescription.ko
128
+ }
129
+ });
130
+ await module.writeFile(filenames.abstract, moduleAbstractContent(module.name, sharedGuards));
131
+ return await this.#readFiles(module, filenames);
132
+ }
133
+ }
134
+
135
+ // pkgs/@akanjs/cli/module/module.script.ts
136
+ var moduleChangedFiles = (sys, moduleName, files) => Object.values(files).map((file) => sourceFile(sys, `lib/${moduleName}/${file.filename}`, "create", "Module source file was created."));
137
+
138
+ class ModuleScript extends script("module", [ModuleRunner, PageScript]) {
139
+ async createModuleTemplate(sys, name, { page = false } = {}) {
140
+ const mod = ModuleExecutor.from(sys, name);
141
+ const files = await this.moduleRunner.createModuleTemplate(mod);
142
+ if (page && sys.type === "app")
143
+ await this.pageScript.createCrudPage(mod, { app: sys, basePath: null, single: false });
144
+ await sys.scan();
145
+ return createPassedPrimitiveReport({
146
+ command: "create-module",
147
+ changedFiles: moduleChangedFiles(sys, name, files),
148
+ generatedFiles: generatedFilesForSync(sys, "Generated files were refreshed after module creation."),
149
+ target: sys.name
150
+ });
151
+ }
152
+ async removeModule(mod) {
153
+ await this.moduleRunner.removeModule(mod);
154
+ }
155
+ async createService(sys, name) {
156
+ const service = ModuleExecutor.from(sys, `_${name}`);
157
+ const files = await this.moduleRunner.createService(service);
158
+ await sys.scan();
159
+ return createPassedPrimitiveReport({
160
+ command: "create-service",
161
+ changedFiles: moduleChangedFiles(sys, `_${name}`, files),
162
+ generatedFiles: generatedFilesForSync(sys, "Generated files were refreshed after service creation."),
163
+ target: sys.name
164
+ });
165
+ }
166
+ async createTemplate(mod) {
167
+ return await this.#createComponent(mod, "template");
168
+ }
169
+ async createUnit(mod) {
170
+ return await this.#createComponent(mod, "unit");
171
+ }
172
+ async createView(mod) {
173
+ return await this.#createComponent(mod, "view");
174
+ }
175
+ async#createComponent(mod, type) {
176
+ const { component } = await this.moduleRunner.createComponentTemplate(mod, type);
177
+ return createPassedPrimitiveReport({
178
+ command: `create-${type}`,
179
+ changedFiles: [
180
+ sourceFile(mod.sys, `lib/${mod.name}/${component.filename}`, "create", `${capitalize2(type)} UI source was created.`)
181
+ ],
182
+ target: mod.sys.name
183
+ });
184
+ }
185
+ }
186
+
187
+ export { ModuleScript };