@akanjs/cli 3.0.0-beta.16 → 3.0.0-beta.18

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 (134) hide show
  1. package/.build-stamp +1 -1
  2. package/{CodeAgent-zgccwajm.js → CodeAgent-0035exh3.js} +2 -2
  3. package/{CodeTui-993tx7gf.js → CodeTui-eweg1hep.js} +384 -28
  4. package/{agent.command-n664dtcv.js → agent.command-65zqfkg0.js} +6 -6
  5. package/akanCode.js +11 -9
  6. package/{application.command-t5542jte.js → application.command-2wcj5da3.js} +18 -11
  7. package/{applicationBuildRunner-x4gbfn7y.js → applicationBuildRunner-m0hhgwsx.js} +6 -5
  8. package/{applicationReleasePackager-z61ep017.js → applicationReleasePackager-vykfzgx3.js} +1 -1
  9. package/buildBatch.proc.js +2 -2
  10. package/{capacitorApp-shv3ajh5.js → capacitorApp-2daqhb5h.js} +2 -2
  11. package/{cloud.command-4x35k1z6.js → cloud.command-960bgbf4.js} +8 -8
  12. package/{cloud.script-3k8nbbpn.js → cloud.script-qhcnqt1n.js} +8 -8
  13. package/{code.command-mrfb7a1g.js → code.command-4feh3ef7.js} +7 -7
  14. package/{context.command-pqsm5jrk.js → context.command-kzehkx48.js} +14 -14
  15. package/context.runner-z0rrcz7b.js +22 -0
  16. package/{devTui-gy6mendg.js → devTui-ffjsarqa.js} +3 -3
  17. package/{devTuiView-y1548wy6.js → devTuiView-1q1mdgrv.js} +1 -1
  18. package/{guideline.command-rpc2emw8.js → guideline.command-3w2g20x4.js} +8 -13
  19. package/guidelines/conventions/conventions.instruction.md +37 -22
  20. package/guidelines/queryRule/queryRule.instruction.md +1 -1
  21. package/guidelines/ssrRule/ssrRule.instruction.md +4 -2
  22. package/guidelines/transportRule/transportRule.instruction.md +10 -8
  23. package/guidelines/workspaceRecipes/workspaceRecipes.instruction.md +4 -3
  24. package/incrementalBuilder.proc.js +1 -1
  25. package/{index-sxg87a8f.js → index-14zrtgfa.js} +164 -98
  26. package/{index-57p9p179.js → index-3hpxeys1.js} +6 -5
  27. package/{index-sn7dnzq4.js → index-4r42ext5.js} +1 -1
  28. package/{index-3mg4h788.js → index-6q589y9t.js} +2 -2
  29. package/index-9dp031by.js +12 -0
  30. package/{index-p4p9t45x.js → index-bwxpk2cj.js} +4 -18
  31. package/{index-g9zghs4h.js → index-cjw1sj1x.js} +12 -12
  32. package/{index-te0y1c0m.js → index-d9fjz06h.js} +12 -7
  33. package/{index-4n4821gp.js → index-dw943k93.js} +4 -4
  34. package/{index-4cvpzkq6.js → index-ef228gzf.js} +3 -3
  35. package/{index-3cymrzsb.js → index-erfc1x40.js} +17 -3
  36. package/{index-ns128c4q.js → index-h94faz96.js} +13 -20
  37. package/index-jd01kj5r.js +656 -0
  38. package/{index-5405kc0x.js → index-jwexzh42.js} +363 -247
  39. package/{index-wfwknnje.js → index-jwrpsrg3.js} +8 -6
  40. package/{index-kvzjda3v.js → index-m41ptvat.js} +5 -5
  41. package/{index-qh7brn20.js → index-mt2154s2.js} +6 -2
  42. package/{index-xjc7gg65.js → index-pn8mhpps.js} +23 -33
  43. package/{index-vpx68e4x.js → index-q9c3c0hy.js} +2 -2
  44. package/{index-v17gj504.js → index-rpgxs245.js} +2 -2
  45. package/{index-twq9p2sp.js → index-s5rhm04y.js} +0 -6
  46. package/{index-018dszb3.js → index-sbfk9daf.js} +10 -3
  47. package/{index-zg0v1zte.js → index-wcg582a8.js} +5 -5
  48. package/{index-6na0sd2b.js → index-ycy302an.js} +5 -2
  49. package/{index-qhtj9y6j.js → index-yw6g3bbv.js} +74 -21
  50. package/{index-2pm1j01n.js → index-zmj143x7.js} +4 -4
  51. package/{index-zn8qgeqx.js → index-zq0mr3hh.js} +1 -1
  52. package/index.js +21 -21
  53. package/{library.command-m8p2r1dh.js → library.command-fp0nhr62.js} +3 -3
  54. package/{localRegistry.command-tt00nwwg.js → localRegistry.command-8y0ecxb9.js} +7 -7
  55. package/{module.command-mfzvqt0n.js → module.command-kqkn48t2.js} +5 -5
  56. package/{package.command-8sy6jjwy.js → package.command-qverjh22.js} +4 -4
  57. package/package.json +8 -6
  58. package/{page.command-taenb02b.js → page.command-94bwhd0g.js} +3 -3
  59. package/{primitive.command-7kpncmkk.js → primitive.command-2ydvtah2.js} +6 -6
  60. package/{prompter-9mn3kp36.js → prompter-1f8d9pcc.js} +1 -1
  61. package/{quality.command-1ar94hrw.js → quality.command-fa0gth4p.js} +3 -4
  62. package/{repair.command-n08t6j8p.js → repair.command-4qng2hpm.js} +5 -5
  63. package/{routeSourceValidator-apyqw7wk.js → routeSourceValidator-7ycnfz0e.js} +0 -6
  64. package/{scalar.command-mq8qfp4t.js → scalar.command-pb2y95sh.js} +4 -4
  65. package/skills/akan-code/SKILL.md +122 -0
  66. package/skills/akan-module/SKILL.md +2 -2
  67. package/skills/akan-store/SKILL.md +6 -2
  68. package/{subspace.command-x9897gj4.js → subspace.command-vkxmwp74.js} +4 -4
  69. package/templates/__scalar/__model__/__model__.abstract.md.template +8 -0
  70. package/templates/appSample/lib/__scalar/workHistory/workHistory.abstract.ts +8 -39
  71. package/templates/appSample/lib/_noti/noti.abstract.ts +6 -29
  72. package/templates/appSample/lib/task/task.abstract.ts +12 -32
  73. package/templates/appSample/lib/task/task.signal.spec.ts +15 -18
  74. package/templates/appSample/lib/task/task.signal.test.ts +14 -0
  75. package/templates/appSample/lib/task/task.signal.ts +1 -1
  76. package/templates/appSample/srvkit/AuthGuard.ts +4 -1
  77. package/templates/appSample/srvkit/SessionInternalArg.ts +3 -1
  78. package/templates/crudPages/[__model__Id]/edit/page.tsx +2 -1
  79. package/templates/crudPages/[__model__Id]/page.tsx +2 -1
  80. package/templates/crudPages/new/page.tsx +2 -1
  81. package/templates/crudPages/page.tsx +2 -1
  82. package/templates/crudSinglePage/page.tsx +2 -1
  83. package/templates/module/__model__.signal.ts +12 -4
  84. package/templates/pkgRoot/tsconfig.json.template +2 -7
  85. package/templates/service/__model__.abstract.md.template +8 -0
  86. package/{tunnel.command-ht2es78c.js → tunnel.command-02cvp9nf.js} +2 -2
  87. package/{workflow.command-tvz4nm9n.js → workflow.command-132txnrh.js} +9 -9
  88. package/{workspace.command-ayqa1rgt.js → workspace.command-d5wkswek.js} +21 -21
  89. package/context.runner-bys6ykcp.js +0 -22
  90. package/guidelines/agentRule/agentRule.generate.json +0 -31
  91. package/guidelines/componentRule/componentRule.generate.json +0 -31
  92. package/guidelines/conventions/conventions.generate.json +0 -25
  93. package/guidelines/cssRule/cssRule.generate.json +0 -31
  94. package/guidelines/docPageRule/docPageRule.generate.json +0 -31
  95. package/guidelines/docPageRule/docPageRule.instruction.md +0 -25
  96. package/guidelines/docSyncRule/docSyncRule.generate.json +0 -31
  97. package/guidelines/docSyncRule/docSyncRule.instruction.md +0 -25
  98. package/guidelines/enumConstant/enumConstant.generate.json +0 -31
  99. package/guidelines/enumConstant/enumConstant.instruction.md +0 -28
  100. package/guidelines/fieldRule/fieldRule.generate.json +0 -31
  101. package/guidelines/framework/framework.generate.json +0 -32
  102. package/guidelines/mcpRule/mcpRule.generate.json +0 -35
  103. package/guidelines/modelConstant/modelConstant.generate.json +0 -32
  104. package/guidelines/modelDictionary/modelDictionary.generate.json +0 -32
  105. package/guidelines/modelDocument/modelDocument.generate.json +0 -31
  106. package/guidelines/modelService/modelService.generate.json +0 -31
  107. package/guidelines/modelSignal/modelSignal.generate.json +0 -31
  108. package/guidelines/modelStore/modelStore.generate.json +0 -31
  109. package/guidelines/modelTemplate/modelTemplate.generate.json +0 -31
  110. package/guidelines/modelUnit/modelUnit.generate.json +0 -31
  111. package/guidelines/modelUtil/modelUtil.generate.json +0 -31
  112. package/guidelines/modelView/modelView.generate.json +0 -31
  113. package/guidelines/modelZone/modelZone.generate.json +0 -31
  114. package/guidelines/moduleCodegen/moduleCodegen.generate.json +0 -31
  115. package/guidelines/moduleCodegen/moduleCodegen.instruction.md +0 -28
  116. package/guidelines/moduleOverview/moduleOverview.generate.json +0 -31
  117. package/guidelines/queryRule/queryRule.generate.json +0 -31
  118. package/guidelines/recipeRule/recipeRule.generate.json +0 -31
  119. package/guidelines/runtimeRule/runtimeRule.generate.json +0 -25
  120. package/guidelines/scalarConstant/scalarConstant.generate.json +0 -32
  121. package/guidelines/scalarDictionary/scalarDictionary.generate.json +0 -32
  122. package/guidelines/scalarModule/scalarModule.generate.json +0 -31
  123. package/guidelines/sharedUiUsage/sharedUiUsage.generate.json +0 -31
  124. package/guidelines/sharedUiUsage/sharedUiUsage.instruction.md +0 -25
  125. package/guidelines/ssrRule/ssrRule.generate.json +0 -31
  126. package/guidelines/transportRule/transportRule.generate.json +0 -31
  127. package/guidelines/utilUiUsage/utilUiUsage.generate.json +0 -31
  128. package/guidelines/utilUiUsage/utilUiUsage.instruction.md +0 -25
  129. package/guidelines/workspaceOnboarding/workspaceOnboarding.generate.json +0 -24
  130. package/guidelines/workspaceRecipes/workspaceRecipes.generate.json +0 -34
  131. package/index-jgrnpt6y.js +0 -121
  132. package/templates/__scalar/__model__/__model__.abstract.md +0 -28
  133. package/templates/module/__model__.abstract.md +0 -28
  134. package/templates/service/__model__.abstract.md +0 -28
@@ -1,16 +1,26 @@
1
1
  import type { AppInfo, LibInfo } from "akanjs";
2
2
 
3
- export default function getContent(scanInfo: AppInfo | LibInfo | null, dict: { appName: string }) {
4
- return `import { expect } from "bun:test";
5
- import type { DocumentModel } from "akanjs/constant";
6
- import { getOrSetupSignalTestFetch, sampleOf } from "akanjs/test";
3
+ export default function getContent(
4
+ scanInfo: AppInfo | LibInfo | null,
5
+ dict: { appName: string },
6
+ options: { libs?: string[] } = {},
7
+ ) {
8
+ // Task writes are guarded by SignedIn, so the fixtures sign a user in through libs/shared when it is installed.
9
+ const signsIn = options.libs?.includes("shared") ?? false;
10
+ return `${
11
+ signsIn
12
+ ? `import * as userSpec from "@libs/shared/lib/user/user.signal.spec";
13
+ `
14
+ : ""
15
+ }import type { DocumentModel } from "akanjs/constant";
16
+ import { ${signsIn ? "" : "getOrSetupSignalTestFetch, "}sampleOf } from "akanjs/test";
7
17
 
8
18
  import * as cnst from "../cnst";
9
19
  import type { fetch as appFetch } from "../useServer";
10
20
 
11
21
  type AppFetch = typeof appFetch;
12
22
 
13
- const getFetch = async () => await getOrSetupSignalTestFetch<AppFetch>();
23
+ const getFetch = async () => ${signsIn ? "(await userSpec.getUserAgentWithPassword<AppFetch>()).fetch" : "await getOrSetupSignalTestFetch<AppFetch>()"};
14
24
 
15
25
  export interface TaskAgent {
16
26
  task: cnst.Task;
@@ -27,13 +37,6 @@ export const createTask = async (overrides: Partial<DocumentModel<cnst.TaskInput
27
37
 
28
38
  const task = await fetch.createTask(taskInput);
29
39
 
30
- expect(task).toMatchObject({
31
- title: taskInput.title,
32
- content: taskInput.content,
33
- status: "todo",
34
- });
35
- expect(task.workHistory.map((entry) => entry.action)).toEqual(["created"]);
36
-
37
40
  return {
38
41
  task,
39
42
  fetch,
@@ -45,9 +48,6 @@ export const getStartedTask = async (overrides: Partial<DocumentModel<cnst.TaskI
45
48
  const agent = await createTask(overrides);
46
49
  const task = await agent.fetch.startTask(agent.task.id);
47
50
 
48
- expect(task.status).toBe("inProgress");
49
- expect(task.workHistory.map((entry) => entry.action)).toEqual(["created", "started"]);
50
-
51
51
  return {
52
52
  ...agent,
53
53
  task,
@@ -58,9 +58,6 @@ export const getCompletedTask = async (overrides: Partial<DocumentModel<cnst.Tas
58
58
  const agent = await getStartedTask(overrides);
59
59
  const task = await agent.fetch.completeTask(agent.task.id);
60
60
 
61
- expect(task.status).toBe("completed");
62
- expect(task.workHistory.map((entry) => entry.action)).toEqual(["created", "started", "completed"]);
63
-
64
61
  return {
65
62
  ...agent,
66
63
  task,
@@ -9,6 +9,20 @@ import * as taskSpec from "./task.signal.spec";
9
9
  configureSignalTest({ databaseMode: "memory" });
10
10
 
11
11
  describe("Task signal smoke", () => {
12
+ test("creates a task in todo", async () => {
13
+ const { task, taskInput } = await taskSpec.createTask({ title: "Signal smoke task" });
14
+
15
+ expect(task).toMatchObject({ title: taskInput.title, content: taskInput.content, status: "todo" });
16
+ expect(task.workHistory.map((entry) => entry.action)).toEqual(["created"]);
17
+ });
18
+
19
+ test("starts a task", async () => {
20
+ const { task } = await taskSpec.getStartedTask({ title: "Signal smoke task" });
21
+
22
+ expect(task.status).toBe("inProgress");
23
+ expect(task.workHistory.map((entry) => entry.action)).toEqual(["created", "started"]);
24
+ });
25
+
12
26
  test("exposes custom task mutations over fetch", async () => {
13
27
  const { task } = await taskSpec.getCompletedTask({ title: "Signal smoke task" });
14
28
 
@@ -25,7 +25,7 @@ export class TaskInternal extends internal(srv.task, ({ interval }) => ({})) {}
25
25
  // Guards, per key: root = the generated admin API (runs any filter with caller-supplied args), get = reads,
26
26
  // cru = create/update/remove. root and cru are never Public; None here means "nobody until you name a guard".
27
27
  export class TaskSlice extends slice(srv.task, { guards: { root: None, get: Public, cru: SignedIn } }, (init) => ({
28
- inPublic: init().exec(function () {
28
+ inPublic: init({ guards: [Public] }).exec(function () {
29
29
  return this.taskService.queryAny();
30
30
  }),
31
31
  })) {}
@@ -21,7 +21,10 @@ export class SignedIn implements Guard {
21
21
 
22
22
  canPass(context: SignalContext): boolean {
23
23
  // Reads the account the middleware resolved, so the same guard answers over HTTP, a websocket and MCP alike.
24
- return !!context.get<{ id?: string }>("account");
24
+ // A guest still has an account — libs/shared resolves one to \`{ appName, environment }\` — so only an
25
+ // identity on it proves a sign-in: your own middleware's \`id\`, or libs/shared's \`self\` (user) / \`me\` (admin).
26
+ const account = context.get<{ id?: string; self?: { id?: string }; me?: { id?: string } }>("account");
27
+ return !!(account?.id ?? account?.self?.id ?? account?.me?.id);
25
28
  }
26
29
  }
27
30
 
@@ -17,7 +17,9 @@ export class CurrentUserId implements InternalArg<string | null> {
17
17
  getArg(context: SignalContext): string | null {
18
18
  // \`context.get\` reads what the account middleware resolved, on every transport. Branching on
19
19
  // \`getHttpContext()\` would return null for the same caller arriving over a websocket or MCP.
20
- return context.get<{ id?: string }>("account")?.id ?? null;
20
+ // An app's own middleware may put the id on the account itself; libs/shared puts it on \`self\` or \`me\`.
21
+ const account = context.get<{ id?: string; self?: { id?: string }; me?: { id?: string } }>("account");
22
+ return account?.id ?? account?.self?.id ?? account?.me?.id ?? null;
21
23
  }
22
24
  }
23
25
 
@@ -4,12 +4,13 @@ interface Dict {
4
4
  Model: string;
5
5
  model: string;
6
6
  appName: string;
7
+ clientPath: string;
7
8
  }
8
9
  export default function getContent(scanInfo: AppInfo | LibInfo | null, dict: Dict) {
9
10
  return {
10
11
  filename: "_index.tsx",
11
12
  content: `
12
- import { ${dict.Model}, fetch, usePage } from "@apps/${dict.appName}/client";
13
+ import { ${dict.Model}, fetch, usePage } from "${dict.clientPath}";
13
14
  import { ID } from "akanjs/base";
14
15
  import { page } from "akanjs/client";
15
16
  import { Load } from "akanjs/ui";
@@ -4,12 +4,13 @@ interface Dict {
4
4
  Model: string;
5
5
  model: string;
6
6
  appName: string;
7
+ clientPath: string;
7
8
  }
8
9
  export default function getContent(scanInfo: AppInfo | LibInfo | null, dict: Dict) {
9
10
  return {
10
11
  filename: "_index.tsx",
11
12
  content: `
12
- import { ${dict.Model}, fetch, usePage } from "@apps/${dict.appName}/client";
13
+ import { ${dict.Model}, fetch, usePage } from "${dict.clientPath}";
13
14
  import { ID } from "akanjs/base";
14
15
  import { page } from "akanjs/client";
15
16
  import { buttonRecipe, Link } from "akanjs/ui";
@@ -4,12 +4,13 @@ interface Dict {
4
4
  Model: string;
5
5
  model: string;
6
6
  appName: string;
7
+ clientPath: string;
7
8
  }
8
9
  export default function getContent(scanInfo: AppInfo | LibInfo | null, dict: Dict) {
9
10
  return {
10
11
  filename: "_index.tsx",
11
12
  content: `
12
- import { type cnst, fetch, usePage, ${dict.Model} } from "@apps/${dict.appName}/client";
13
+ import { type cnst, fetch, usePage, ${dict.Model} } from "${dict.clientPath}";
13
14
  import { page } from "akanjs/client";
14
15
  import { Load } from "akanjs/ui";
15
16
 
@@ -4,12 +4,13 @@ interface Dict {
4
4
  Model: string;
5
5
  model: string;
6
6
  appName: string;
7
+ clientPath: string;
7
8
  }
8
9
  export default function getContent(scanInfo: AppInfo | LibInfo | null, dict: Dict) {
9
10
  return {
10
11
  filename: "_index.tsx",
11
12
  content: `
12
- import { ${dict.Model}, fetch, usePage } from "@apps/${dict.appName}/client";
13
+ import { ${dict.Model}, fetch, usePage } from "${dict.clientPath}";
13
14
  import { page } from "akanjs/client";
14
15
  import { buttonRecipe, Link } from "akanjs/ui";
15
16
 
@@ -4,12 +4,13 @@ interface Dict {
4
4
  Model: string;
5
5
  model: string;
6
6
  appName: string;
7
+ clientPath: string;
7
8
  }
8
9
  export default function getContent(scanInfo: AppInfo | LibInfo | null, dict: Dict) {
9
10
  return {
10
11
  filename: "_index.tsx",
11
12
  content: `
12
- import { ${dict.Model}, fetch, usePage } from "@apps/${dict.appName}/client";
13
+ import { ${dict.Model}, fetch, usePage } from "${dict.clientPath}";
13
14
  import { page } from "akanjs/client";
14
15
  import { buttonRecipe, Model } from "akanjs/ui";
15
16
 
@@ -6,16 +6,24 @@ interface Dict {
6
6
  models: string;
7
7
  sysName: string;
8
8
  }
9
- export default function getContent(scanInfo: AppInfo | LibInfo | null, dict: Dict) {
9
+ interface Options {
10
+ sharedGuards?: boolean;
11
+ }
12
+ export default function getContent(scanInfo: AppInfo | LibInfo | null, dict: Dict, options: Options = {}) {
13
+ // Admin lives in libs/shared; without it root and cru stay None, shut until the app names a guard of its own.
14
+ const guardImports = options.sharedGuards
15
+ ? `import { Admin } from "@libs/shared/srvkit";\nimport { endpoint, internal, Public, slice } from "akanjs/signal";`
16
+ : `import { endpoint, internal, None, Public, slice } from "akanjs/signal";`;
17
+ const writeGuard = options.sharedGuards ? "Admin" : "None";
10
18
  return `
11
- import { endpoint, internal, None, Public, slice } from "akanjs/signal";
19
+ ${guardImports}
12
20
 
13
21
  import * as srv from "../srv";
14
22
 
15
23
  export class ${dict.Model}Internal extends internal(srv.${dict.model}, ({ interval }) => ({})) {}
16
24
 
17
- export class ${dict.Model}Slice extends slice(srv.${dict.model}, { guards: { root: None, get: Public, cru: Public } }, (init) => ({
18
- inPublic: init()
25
+ export class ${dict.Model}Slice extends slice(srv.${dict.model}, { guards: { root: ${writeGuard}, get: Public, cru: ${writeGuard} } }, (init) => ({
26
+ inPublic: init({ guards: [Public] })
19
27
  .exec(function () {
20
28
  return this.${dict.model}Service.queryAny();
21
29
  }),
@@ -1,10 +1,5 @@
1
1
  {
2
- "extends": "../../tsconfig.json",
2
+ "extends": "<%= workspaceRootPath %>/tsconfig.json",
3
3
  "files": [],
4
- "include": ["**/*.ts", "**/*.tsx"],
5
- "references": [
6
- {
7
- "path": "./tsconfig.spec.json"
8
- }
9
- ]
4
+ "include": ["**/*.ts", "**/*.tsx"]
10
5
  }
@@ -0,0 +1,8 @@
1
+ # <%= model %> Service Abstract
2
+
3
+ <One sentence: the workflow or integration this service owns, stated as fact.>
4
+
5
+ ## Rules
6
+
7
+ - <An invariant the code obeys but cannot explain: a lifetime, a refusal, an ordering, and its reason.>
8
+ - <Two to five of them. If the service moves something through states, end the file with one arrow line.>
@@ -9,10 +9,10 @@ import {
9
9
  runner,
10
10
  script,
11
11
  command
12
- } from "./index-6na0sd2b.js";
12
+ } from "./index-ycy302an.js";
13
13
  import {
14
14
  AppExecutor
15
- } from "./index-p4p9t45x.js";
15
+ } from "./index-bwxpk2cj.js";
16
16
  import"./index-6wwzs1bc.js";
17
17
  import {
18
18
  TunnelShare2
@@ -3,28 +3,28 @@ import {
3
3
  Workspace,
4
4
  script,
5
5
  command
6
- } from "./index-6na0sd2b.js";
6
+ } from "./index-ycy302an.js";
7
7
  import"./index-q0y2jq9j.js";
8
- import"./index-p4p9t45x.js";
8
+ import"./index-bwxpk2cj.js";
9
9
  import"./index-6wwzs1bc.js";
10
10
  import {
11
11
  createWorkflowStepRegistry
12
- } from "./index-qhtj9y6j.js";
13
- import"./index-qh7brn20.js";
12
+ } from "./index-yw6g3bbv.js";
13
+ import"./index-mt2154s2.js";
14
14
  import {
15
15
  ModuleScript
16
- } from "./index-xjc7gg65.js";
16
+ } from "./index-pn8mhpps.js";
17
17
  import {
18
18
  PrimitiveScript
19
- } from "./index-te0y1c0m.js";
19
+ } from "./index-d9fjz06h.js";
20
20
  import {
21
21
  ScalarScript
22
- } from "./index-vpx68e4x.js";
22
+ } from "./index-q9c3c0hy.js";
23
23
  import"./index-by5gpp8x.js";
24
- import"./index-v17gj504.js";
24
+ import"./index-rpgxs245.js";
25
25
  import {
26
26
  WorkflowRunner
27
- } from "./index-2pm1j01n.js";
27
+ } from "./index-zmj143x7.js";
28
28
 
29
29
  // pkgs/@akanjs/cli/workflow/workflow.script.ts
30
30
  import { Logger } from "akanjs/common";
@@ -11,7 +11,7 @@ import {
11
11
  runner,
12
12
  script,
13
13
  command
14
- } from "./index-6na0sd2b.js";
14
+ } from "./index-ycy302an.js";
15
15
  import {
16
16
  extractAgentBlock,
17
17
  collectScopeRecipeSources,
@@ -21,7 +21,7 @@ import {
21
21
  AppExecutor,
22
22
  LibExecutor,
23
23
  PkgExecutor
24
- } from "./index-p4p9t45x.js";
24
+ } from "./index-bwxpk2cj.js";
25
25
  import"./index-6wwzs1bc.js";
26
26
  import {
27
27
  countBlocking,
@@ -32,43 +32,43 @@ import {
32
32
  collectRecipeSources2,
33
33
  scanRecipes2
34
34
  } from "./index-by5gpp8x.js";
35
- import"./index-qhtj9y6j.js";
36
- import"./index-v17gj504.js";
37
- import"./index-twq9p2sp.js";
35
+ import"./index-yw6g3bbv.js";
36
+ import"./index-rpgxs245.js";
37
+ import"./index-s5rhm04y.js";
38
38
  import {
39
39
  AgentScript
40
- } from "./index-kvzjda3v.js";
40
+ } from "./index-m41ptvat.js";
41
41
  import {
42
42
  ApplicationScript
43
- } from "./index-ns128c4q.js";
43
+ } from "./index-h94faz96.js";
44
44
  import {
45
45
  LibraryScript
46
- } from "./index-3mg4h788.js";
46
+ } from "./index-6q589y9t.js";
47
47
  import"./index-hwkygn9s.js";
48
48
  import"./index-7md2g9vw.js";
49
49
  import"./index-kcxmv48c.js";
50
50
  import {
51
51
  PackageScript
52
- } from "./index-018dszb3.js";
52
+ } from "./index-sbfk9daf.js";
53
53
  import {
54
54
  getNpmRegistryUrl,
55
55
  getLatestPackageVersion
56
- } from "./index-57p9p179.js";
56
+ } from "./index-3hpxeys1.js";
57
57
  import {
58
58
  CloudScript2
59
- } from "./index-zg0v1zte.js";
60
- import"./index-g9zghs4h.js";
61
- import"./index-3cymrzsb.js";
62
- import"./index-4cvpzkq6.js";
63
- import"./index-2pm1j01n.js";
64
- import"./index-qh7brn20.js";
65
- import"./index-xjc7gg65.js";
66
- import"./index-te0y1c0m.js";
67
- import"./index-vpx68e4x.js";
59
+ } from "./index-wcg582a8.js";
60
+ import"./index-cjw1sj1x.js";
61
+ import"./index-erfc1x40.js";
62
+ import"./index-ef228gzf.js";
63
+ import"./index-zmj143x7.js";
64
+ import"./index-mt2154s2.js";
65
+ import"./index-pn8mhpps.js";
66
+ import"./index-d9fjz06h.js";
67
+ import"./index-q9c3c0hy.js";
68
68
  import {
69
69
  ContextScript
70
- } from "./index-4n4821gp.js";
71
- import"./index-sn7dnzq4.js";
70
+ } from "./index-dw943k93.js";
71
+ import"./index-4r42ext5.js";
72
72
 
73
73
  // pkgs/@akanjs/cli/workspace/workspace.runner.ts
74
74
  import path from "path";
@@ -1,22 +0,0 @@
1
- // @bun
2
- import {
3
- ContextRunner2
4
- } from "./index-g9zghs4h.js";
5
- import"./index-2pm1j01n.js";
6
- import"./index-vpx68e4x.js";
7
- import"./index-te0y1c0m.js";
8
- import"./index-4cvpzkq6.js";
9
- import"./index-xjc7gg65.js";
10
- import"./index-qh7brn20.js";
11
- import"./index-v17gj504.js";
12
- import"./index-qhtj9y6j.js";
13
- import"./index-twq9p2sp.js";
14
- import"./index-3cymrzsb.js";
15
- import"./index-6na0sd2b.js";
16
- import"./index-p4p9t45x.js";
17
- import"./index-by5gpp8x.js";
18
- import"./index-6wwzs1bc.js";
19
- import"./index-q0y2jq9j.js";
20
- export {
21
- ContextRunner2 as ContextRunner
22
- };
@@ -1,31 +0,0 @@
1
- {
2
- "title": "In-Page Agent Rule",
3
- "description": "How an akan screen exposes itself to an in-page agent — st.tool, subscribed keys, built-ins, and the chat",
4
- "group": "core",
5
- "codegenPriority": 4,
6
- "deprecated": false,
7
- "scans": [
8
- {
9
- "type": "example",
10
- "description": "Components publishing an agent tool beside the control that already performs the action",
11
- "path": "{apps,libs}/*/**/*.tsx",
12
- "sample": 4
13
- }
14
- ],
15
- "update": {
16
- "filePath": "./agentRule.instruction.md",
17
- "contents": [
18
- "what a declaration publishes",
19
- "mounting the chat",
20
- "publishing a tool",
21
- "forms and reading state",
22
- "built-in tools"
23
- ],
24
- "rules": [
25
- "Use current Akan APIs only",
26
- "State the rule before the reason, and keep the reason to one clause",
27
- "Never describe a store class as an exposure surface — only st.tool and subscribed keys publish",
28
- "Keep it workspace-neutral — no app or repo names"
29
- ]
30
- }
31
- }
@@ -1,31 +0,0 @@
1
- {
2
- "title": "Component Rule",
3
- "description": "Shared component implementation rules",
4
- "group": "core",
5
- "docsSource": "apps/akan/page/(docs)/references/ui/overview.tsx",
6
- "codegenPriority": 3,
7
- "deprecated": false,
8
- "scans": [
9
- {
10
- "type": "docs",
11
- "description": "Current docs source for Component Rule",
12
- "path": "apps/akan/page/(docs)/references/ui/overview.tsx"
13
- },
14
- {
15
- "type": "example",
16
- "description": "Existing Akan implementation examples",
17
- "path": "{apps,libs}/*/lib/**/*.ts",
18
- "sample": 4
19
- }
20
- ],
21
- "update": {
22
- "filePath": "./componentRule.instruction.md",
23
- "contents": ["purpose", "file ownership", "current API patterns", "codegen rules", "validation checklist"],
24
- "rules": [
25
- "Use current Akan APIs only",
26
- "Keep output parseable for codegen",
27
- "Include ownership boundaries and review checklist"
28
- ]
29
- },
30
- "page": "apps/akan/page/(docs)/references/ui/overview.tsx"
31
- }
@@ -1,25 +0,0 @@
1
- {
2
- "title": "Workspace Conventions",
3
- "description": "The tool-neutral Akan convention set rendered into every workspace AGENTS.md managed block",
4
- "group": "core",
5
- "codegenPriority": 1,
6
- "deprecated": false,
7
- "scans": [],
8
- "update": {
9
- "filePath": "./conventions.instruction.md",
10
- "contents": [
11
- "change scope",
12
- "lint-enforced rules",
13
- "coding style and comments",
14
- "client/server boundaries and SSR",
15
- "domain module, service, signal, and scalar conventions",
16
- "page routing, sync layout, and layer placement"
17
- ],
18
- "rules": [
19
- "Use current Akan APIs only",
20
- "State the rule and the reason it exists, never restate a type signature",
21
- "Name the .grit rule that enforces a rule wherever one does",
22
- "Keep it workspace-neutral — no app or repo names, since every workspace renders this file"
23
- ]
24
- }
25
- }
@@ -1,31 +0,0 @@
1
- {
2
- "title": "CSS Rule",
3
- "description": "Tailwind and akanjs/ui (semantic token) styling rules",
4
- "group": "core",
5
- "docsSource": "apps/akan/page/(docs)/docs/arch/css.tsx",
6
- "codegenPriority": 3,
7
- "deprecated": false,
8
- "scans": [
9
- {
10
- "type": "docs",
11
- "description": "Current docs source for CSS Rule",
12
- "path": "apps/akan/page/(docs)/docs/arch/css.tsx"
13
- },
14
- {
15
- "type": "example",
16
- "description": "Existing Akan implementation examples",
17
- "path": "{apps,libs}/*/lib/**/*.ts",
18
- "sample": 4
19
- }
20
- ],
21
- "update": {
22
- "filePath": "./cssRule.instruction.md",
23
- "contents": ["purpose", "file ownership", "current API patterns", "codegen rules", "validation checklist"],
24
- "rules": [
25
- "Use current Akan APIs only",
26
- "Keep output parseable for codegen",
27
- "Include ownership boundaries and review checklist"
28
- ]
29
- },
30
- "page": "apps/akan/page/(docs)/docs/arch/css.tsx"
31
- }
@@ -1,31 +0,0 @@
1
- {
2
- "title": "Docs Page Rule",
3
- "description": "Docs page writing rules",
4
- "group": "core",
5
- "docsSource": "apps/akan/page/(docs)/cheatsheet/dev/docs.tsx",
6
- "codegenPriority": 3,
7
- "deprecated": false,
8
- "scans": [
9
- {
10
- "type": "docs",
11
- "description": "Current docs source for Docs Page Rule",
12
- "path": "apps/akan/page/(docs)/cheatsheet/dev/docs.tsx"
13
- },
14
- {
15
- "type": "example",
16
- "description": "Existing Akan implementation examples",
17
- "path": "{apps,libs}/*/lib/**/*.ts",
18
- "sample": 4
19
- }
20
- ],
21
- "update": {
22
- "filePath": "./docPageRule.instruction.md",
23
- "contents": ["purpose", "file ownership", "current API patterns", "codegen rules", "validation checklist"],
24
- "rules": [
25
- "Use current Akan APIs only",
26
- "Keep output parseable for codegen",
27
- "Include ownership boundaries and review checklist"
28
- ]
29
- },
30
- "page": "apps/akan/page/(docs)/cheatsheet/dev/docs.tsx"
31
- }
@@ -1,25 +0,0 @@
1
- # Docs Page Rule Guideline
2
-
3
- ## Purpose
4
- Use this when generating or updating Akan docs pages under the current docs route tree.
5
-
6
- ## Ownership
7
- - Docs pages live under `apps/akan/page/(docs)`.
8
- - Pages use `Docs`, `Code`, `Scroll`, and app localization helpers used by nearby pages.
9
- - A docs page should teach one concept with examples, alerts, and navigation anchors.
10
-
11
- ## Current Akan Patterns
12
- - Use current route groups: docs, conventions, references, cheatsheet, and plugins.
13
- - Prefer concise sections with code snippets and practical rules.
14
- - Use Mermaid only when it clarifies architecture or flow.
15
-
16
- ## Codegen Rules
17
- - Do not write docs for removed route paths.
18
- - Do not generate placeholder pages when source docs already exist.
19
- - Do not include implementation claims that are not backed by code or nearby docs.
20
-
21
- ## Review Checklist
22
- - The instruction points to current docs pages, not removed docs routes.
23
- - Generated examples use current Akan builder APIs and scanner-friendly filenames.
24
- - The output contract tells the model which file paths to return.
25
- - The guide avoids broad framework essays when a concrete file rule is better.
@@ -1,31 +0,0 @@
1
- {
2
- "title": "Docs Sync Rule",
3
- "description": "Docs to guideline sync rules",
4
- "group": "core",
5
- "docsSource": "apps/akan/page/(docs)/docs/_index.tsx",
6
- "codegenPriority": 3,
7
- "deprecated": false,
8
- "scans": [
9
- {
10
- "type": "docs",
11
- "description": "Current docs source for Docs Sync Rule",
12
- "path": "apps/akan/page/(docs)/docs/_index.tsx"
13
- },
14
- {
15
- "type": "example",
16
- "description": "Existing Akan implementation examples",
17
- "path": "{apps,libs}/*/lib/**/*.ts",
18
- "sample": 4
19
- }
20
- ],
21
- "update": {
22
- "filePath": "./docSyncRule.instruction.md",
23
- "contents": ["purpose", "file ownership", "current API patterns", "codegen rules", "validation checklist"],
24
- "rules": [
25
- "Use current Akan APIs only",
26
- "Keep output parseable for codegen",
27
- "Include ownership boundaries and review checklist"
28
- ]
29
- },
30
- "page": "apps/akan/page/(docs)/docs/_index.tsx"
31
- }
@@ -1,25 +0,0 @@
1
- # Docs To Guideline Sync Rule
2
-
3
- ## Purpose
4
- Use this when applying current docs page information back into guideline instruction files.
5
-
6
- ## Ownership
7
- - Docs pages are the source of truth for product-facing explanations.
8
- - Guideline instructions are compressed operational rules for AI codegen.
9
- - Sync should preserve codegen-specific output contracts and validation rules that docs pages may not mention.
10
-
11
- ## Current Akan Patterns
12
- - Extract ownership boundaries, API names, file paths, examples, and warnings from docs pages.
13
- - Convert long explanatory sections into prompt-friendly bullet rules.
14
- - Keep docs links or source paths in `generate.json` metadata.
15
-
16
- ## Codegen Rules
17
- - Do not copy large TSX page content directly into markdown instructions.
18
- - Do not remove codegen output format requirements during sync.
19
- - Do not let stale instruction examples override newer docs examples.
20
-
21
- ## Review Checklist
22
- - The instruction points to current docs pages, not removed docs routes.
23
- - Generated examples use current Akan builder APIs and scanner-friendly filenames.
24
- - The output contract tells the model which file paths to return.
25
- - The guide avoids broad framework essays when a concrete file rule is better.