@akanjs/cli 3.0.0-beta.29 → 3.0.0-beta.30

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-86q8d13j.js → CodeAgent-xnfyyz8h.js} +2 -2
  3. package/{CodeTui-r8tgxsyb.js → CodeTui-h66xb1fh.js} +1 -1
  4. package/README.ko.md +72 -0
  5. package/README.md +88 -0
  6. package/{agent.command-q9bmqrag.js → agent.command-c4v7kjff.js} +5 -5
  7. package/akanCode.js +2 -2
  8. package/{application.command-712jd2z8.js → application.command-yzsswrz6.js} +9 -9
  9. package/{applicationBuildRunner-ez37p161.js → applicationBuildRunner-qkt6spd5.js} +3 -3
  10. package/buildBatch.proc.js +3 -3
  11. package/{cloud.command-8eegwcsc.js → cloud.command-v8h688jc.js} +9 -9
  12. package/cloud.script-yct1sk4k.js +20 -0
  13. package/{code.command-n0c2tyzx.js → code.command-jff3tw7y.js} +6 -6
  14. package/{context.command-vxf6d7q2.js → context.command-y5sevk3c.js} +14 -14
  15. package/context.runner-90hsmacr.js +21 -0
  16. package/{guideline.command-ene55fkr.js → guideline.command-11cndccb.js} +2 -2
  17. package/guidelines/conventions/conventions.instruction.md +27 -14
  18. package/guidelines/runtimeRule/runtimeRule.instruction.md +90 -17
  19. package/guidelines/workspaceOnboarding/workspaceOnboarding.instruction.md +20 -0
  20. package/incrementalBuilder.proc.js +2 -2
  21. package/{index-2z30v4k5.js → index-0ncc0mbk.js} +3 -3
  22. package/{index-2yvy9ztj.js → index-167c77aq.js} +4 -4
  23. package/{index-nbg9bfnr.js → index-35mmm9ca.js} +1 -1
  24. package/{index-fy42hyb9.js → index-376gpdds.js} +5 -5
  25. package/{index-n9gxx7bp.js → index-3rh7thcx.js} +13 -13
  26. package/{index-rrt9pnb4.js → index-5rp0h6na.js} +2 -2
  27. package/{index-ttn00pr3.js → index-6x9p8dpb.js} +1 -1
  28. package/{index-8ej6r02m.js → index-8tv7356t.js} +1 -1
  29. package/{index-k7809wmg.js → index-a4s954kq.js} +2 -2
  30. package/{index-rbeahw6j.js → index-bxmejydw.js} +3 -3
  31. package/{index-qtz88kh0.js → index-gxamdf18.js} +2 -2
  32. package/{index-20r2g1t3.js → index-hf6f4xnb.js} +4 -4
  33. package/{index-2s2e5qnd.js → index-hmdq5pqm.js} +1 -1
  34. package/{index-16k7m3cs.js → index-hqd0h1pb.js} +10 -10
  35. package/{index-1hs6jrys.js → index-kb16nzyt.js} +36 -33
  36. package/{index-krwz9ek9.js → index-mk3b9rk1.js} +3 -3
  37. package/{index-r8gp8zk3.js → index-n3jk2501.js} +155 -152
  38. package/{index-g44da4r2.js → index-qcejqgts.js} +5 -5
  39. package/{index-h9ed99ax.js → index-rtwhw4aq.js} +7 -7
  40. package/{index-ss828r32.js → index-se643zvp.js} +1 -1
  41. package/{index-2ctqegdm.js → index-tsb0f8ya.js} +2 -2
  42. package/{index-0pqzrbpr.js → index-tzc1gtrg.js} +2 -2
  43. package/{index-genegfnt.js → index-wfwgcnyc.js} +4 -4
  44. package/{index-b68zfsvz.js → index-xb7qhxa8.js} +1 -1
  45. package/index.js +21 -21
  46. package/{library.command-tz7vnwea.js → library.command-n9kp7yms.js} +3 -3
  47. package/{localRegistry.command-7dd85czz.js → localRegistry.command-jx6kxt2x.js} +8 -8
  48. package/{module.command-qhc9ns0s.js → module.command-q2xjf6cx.js} +5 -5
  49. package/{package.command-z3epnvas.js → package.command-q5a3nsw5.js} +3 -3
  50. package/package.json +3 -3
  51. package/{page.command-exd2vakz.js → page.command-ppenrxjn.js} +3 -3
  52. package/{primitive.command-0w6cha4j.js → primitive.command-dvgg8nem.js} +6 -6
  53. package/{quality.command-je4kc9yv.js → quality.command-pz7kg3pc.js} +2 -2
  54. package/{repair.command-knvwfgtg.js → repair.command-a6py9xvz.js} +5 -5
  55. package/{scalar.command-60nxfchc.js → scalar.command-7f3xfpen.js} +4 -4
  56. package/{subspace.command-683qxcw9.js → subspace.command-z7nqs508.js} +4 -4
  57. package/{tunnel.command-7m2kxtat.js → tunnel.command-zy4wbcgt.js} +2 -2
  58. package/{workflow.command-j5tk13ds.js → workflow.command-f142t17s.js} +10 -10
  59. package/{workspace.command-jxdm0wrb.js → workspace.command-gpk1149x.js} +20 -20
  60. package/cloud.script-55s1cmz9.js +0 -20
  61. package/context.runner-70r2fmty.js +0 -21
package/.build-stamp CHANGED
@@ -1 +1 @@
1
- 17c8586a89cd04b60d3d62ff58838eecd420ba14c959958abb0d7baf5bd6628c
1
+ 0e7a5dcd028f8a43952646d4bbd60e5a0917f2ef29d8a7e26e3125a4fe291e06
@@ -1,8 +1,8 @@
1
1
  // @bun
2
2
  import {
3
3
  CodeAgent2
4
- } from "./index-krwz9ek9.js";
5
- import"./index-8ej6r02m.js";
4
+ } from "./index-mk3b9rk1.js";
5
+ import"./index-8tv7356t.js";
6
6
  import"./index-7md2g9vw.js";
7
7
  export {
8
8
  CodeAgent2 as CodeAgent
@@ -4,7 +4,7 @@ import {
4
4
  McpServerConfig,
5
5
  McpTokenStore,
6
6
  McpSignIn
7
- } from "./index-8ej6r02m.js";
7
+ } from "./index-8tv7356t.js";
8
8
  import {
9
9
  CodeTuiLines2,
10
10
  CodeTuiAgents2,
package/README.ko.md ADDED
@@ -0,0 +1,72 @@
1
+ # @akanjs/cli
2
+
3
+ [문서](https://akanjs.com/docs) | [npm](https://www.npmjs.com/package/@akanjs/cli) | [런타임](https://www.npmjs.com/package/akanjs)
4
+
5
+ Akan.js 워크스페이스를 위한 command-line tooling입니다.
6
+
7
+ `@akanjs/cli`는 Akan 애플리케이션, 라이브러리, 프레임워크 패키지를 생성, 빌드, 테스트, 린트,
8
+ 릴리즈, 유지보수하는 데 사용하는 `akan` 실행 파일을 제공합니다. Bun-first CLI 패키지이며 Akan
9
+ 개발 tooling을 내부에 번들링하므로, 애플리케이션 런타임은 더 작은 `akanjs` 패키지에만 의존할 수
10
+ 있습니다.
11
+
12
+ ## 설치
13
+
14
+ 새 워크스페이스를 바로 만들 수 있습니다.
15
+
16
+ ```bash
17
+ bunx create-akan-workspace@latest
18
+ ```
19
+
20
+ 또는 CLI를 전역으로 설치할 수 있습니다.
21
+
22
+ ```bash
23
+ bun install -g @akanjs/cli@latest
24
+ akan --help
25
+ ```
26
+
27
+ ## 자주 쓰는 명령
28
+
29
+ ```bash
30
+ akan create-workspace <workspace-name>
31
+ akan start <app-name>
32
+ akan build <app-name>
33
+ akan test <app-or-lib-or-pkg>
34
+ akan lint <app-or-lib-or-pkg>
35
+ akan create-application <app-name>
36
+ akan create-library <lib-name>
37
+ akan create-module <module-name>
38
+ akan create-scalar <scalar-name>
39
+ ```
40
+
41
+ 패키지 유지보수 명령도 같은 실행 파일에서 제공합니다.
42
+
43
+ ```bash
44
+ akan build-package akanjs
45
+ akan build-package @akanjs/cli
46
+ akan build-package @akanjs/devkit
47
+ akan build-package create-akan-workspace
48
+ akan verify-akan-publish-packages
49
+ akan smoke-registry --test=true --tag=rc
50
+ ```
51
+
52
+ Akan framework 패키지는 반드시 `dist/pkgs/*` 산출물 기준으로 publish합니다. `verify-akan-publish-packages`는
53
+ 빌드된 패키지에 `npm pack --dry-run --json`을 실행하고, `deploy-akan` 또는 local registry smoke 전에 필요한
54
+ metadata를 검증합니다.
55
+ 저장소 릴리즈에서는 root `akan` bootstrap script가 CLI dist를 덮어쓰지 않도록
56
+ `bun run release:build-packages && bun run release:verify-packages`를 우선 사용합니다.
57
+
58
+ ## 패키지 경계
59
+
60
+ - 애플리케이션과 런타임 코드는 `akanjs`를 사용합니다.
61
+ - 사용자-facing 실행 패키지는 `@akanjs/cli`입니다.
62
+ - `@akanjs/devkit`은 published CLI 사용을 위해 CLI 안에 번들링됩니다. 일반 CLI 사용자가 별도의
63
+ runtime dependency로 설치할 필요는 없습니다.
64
+
65
+ ## 요구사항
66
+
67
+ - [Bun](https://bun.sh) `>=1.4.0`
68
+ - TypeScript 기반 Akan 워크스페이스
69
+
70
+ ## 라이선스
71
+
72
+ MIT
package/README.md ADDED
@@ -0,0 +1,88 @@
1
+ # @akanjs/cli
2
+
3
+ [Docs](https://akanjs.com/docs) | [npm](https://www.npmjs.com/package/@akanjs/cli) | [Runtime](https://www.npmjs.com/package/akanjs)
4
+
5
+ Command-line tooling for Akan.js workspaces.
6
+
7
+ `@akanjs/cli` provides the `akan` executable used to create, build, test, lint, release, and maintain Akan
8
+ applications, libraries, and framework packages. It is a Bun-first CLI package and bundles Akan development
9
+ tooling internally so application runtimes can depend on the smaller `akanjs` package.
10
+
11
+ ## Install
12
+
13
+ Create a new workspace:
14
+
15
+ ```bash
16
+ bunx create-akan-workspace@latest
17
+ ```
18
+
19
+ Or install the CLI globally:
20
+
21
+ ```bash
22
+ bun install -g @akanjs/cli@latest
23
+ akan --help
24
+ ```
25
+
26
+ ## Common Commands
27
+
28
+ ```bash
29
+ akan create-workspace <workspace-name>
30
+ akan start <app-name>
31
+ akan build <app-name>
32
+ akan test <app-or-lib-or-pkg>
33
+ akan lint <app-or-lib-or-pkg>
34
+ akan create-application <app-name>
35
+ akan create-library <lib-name>
36
+ akan create-module <module-name>
37
+ akan create-scalar <scalar-name>
38
+ ```
39
+
40
+ ## Agent And MCP Commands
41
+
42
+ ```bash
43
+ akan context --format markdown
44
+ akan context --format json --module <module-name>
45
+ akan doctor --format json
46
+ akan guideline list
47
+ akan guideline show framework
48
+ akan agent install cursor
49
+ akan mcp
50
+ ```
51
+
52
+ These commands expose Akan workspace structure, module abstracts, diagnostics, and guideline instructions for
53
+ coding agents. The MCP server is read-only and is intended to provide context rather than edit files directly.
54
+
55
+ Package maintenance commands are also exposed through the same executable:
56
+
57
+ ```bash
58
+ akan build-package akanjs
59
+ akan build-package @akanjs/cli
60
+ akan build-package @akanjs/devkit
61
+ akan build-package create-akan-workspace
62
+ akan verify-akan-publish-packages
63
+ akan smoke-registry --test=true --tag=rc
64
+ ```
65
+
66
+ Publish Akan framework packages from `dist/pkgs/*` only. `verify-akan-publish-packages` runs `npm pack --dry-run --json`
67
+ against the built packages and checks metadata that must be correct before `deploy-akan` or local registry smoke.
68
+ For repository releases, prefer `bun run release:build-packages && bun run release:verify-packages` so the CLI package
69
+ artifact is built last and is not overwritten by the root `akan` bootstrap script.
70
+
71
+ ## Package Boundary
72
+
73
+ - Use `akanjs` from application and runtime code.
74
+ - Use `@akanjs/cli` as the user-facing executable package.
75
+ - `@akanjs/devkit` is bundled into the CLI for published CLI usage; it is not required as a separate
76
+ runtime dependency for ordinary CLI users.
77
+ - The `akan code` agent follows that same split: its engine, tools and skills are a devkit facet
78
+ (`@akanjs/devkit/codeAgent`), and `@akanjs/cli/code` is the terminal host plus the SDK entry that
79
+ re-exports both.
80
+
81
+ ## Requirements
82
+
83
+ - [Bun](https://bun.sh) `>=1.4.0`
84
+ - A TypeScript Akan workspace
85
+
86
+ ## License
87
+
88
+ MIT
@@ -2,16 +2,16 @@
2
2
  import {
3
3
  Workspace,
4
4
  command
5
- } from "./index-b68zfsvz.js";
5
+ } from "./index-xb7qhxa8.js";
6
6
  import"./index-52w0fvh8.js";
7
- import"./index-r8gp8zk3.js";
7
+ import"./index-n3jk2501.js";
8
8
  import"./index-hj6w4ka1.js";
9
- import"./index-2s2e5qnd.js";
10
- import"./index-0pqzrbpr.js";
9
+ import"./index-hmdq5pqm.js";
10
+ import"./index-tzc1gtrg.js";
11
11
  import"./index-zzvvc845.js";
12
12
  import {
13
13
  AgentScript
14
- } from "./index-rbeahw6j.js";
14
+ } from "./index-bxmejydw.js";
15
15
 
16
16
  // pkgs/@akanjs/cli/agent/agent.command.ts
17
17
  class AgentCommand extends command("agent", [AgentScript], ({ public: target }) => ({
package/akanCode.js CHANGED
@@ -28,7 +28,7 @@ import {
28
28
  CodeMailbox2,
29
29
  CodeSessionFork2,
30
30
  CodeAgent2
31
- } from "./index-krwz9ek9.js";
31
+ } from "./index-mk3b9rk1.js";
32
32
  import {
33
33
  akanCodeDefaultModel2,
34
34
  akanCodeModel2,
@@ -39,7 +39,7 @@ import {
39
39
  import {
40
40
  SubagentPool2,
41
41
  akanCodePaths2
42
- } from "./index-8ej6r02m.js";
42
+ } from "./index-8tv7356t.js";
43
43
  import"./index-7md2g9vw.js";
44
44
  import {
45
45
  CodeAgentRpcHost2
@@ -6,24 +6,24 @@ import {
6
6
  Exec,
7
7
  Workspace,
8
8
  command
9
- } from "./index-b68zfsvz.js";
9
+ } from "./index-xb7qhxa8.js";
10
10
  import"./index-52w0fvh8.js";
11
- import"./index-r8gp8zk3.js";
11
+ import"./index-n3jk2501.js";
12
12
  import {
13
13
  getMobileTargetChoices
14
- } from "./index-1hs6jrys.js";
14
+ } from "./index-kb16nzyt.js";
15
15
  import"./index-48k96p55.js";
16
- import"./index-qtz88kh0.js";
16
+ import"./index-gxamdf18.js";
17
17
  import {
18
18
  ApplicationScript
19
- } from "./index-n9gxx7bp.js";
19
+ } from "./index-3rh7thcx.js";
20
20
  import"./index-7md2g9vw.js";
21
- import"./index-nbg9bfnr.js";
21
+ import"./index-35mmm9ca.js";
22
22
 
23
23
  // pkgs/@akanjs/cli/application/application.command.ts
24
24
  var mobileTargetOption = {
25
- desc: "mobile target name or all",
26
- ask: "Select mobile target",
25
+ desc: "native target name (a key of native.targets) or all",
26
+ ask: "Select native target",
27
27
  enum: async ({ app }) => await getMobileTargetChoices(app)
28
28
  };
29
29
  var deviceOption = {
@@ -180,7 +180,7 @@ class ApplicationCommand extends command("application", [ApplicationScript], ({
180
180
  packUpdate: target({
181
181
  desc: "Pack an unsigned over-the-air update of the mobile web bundle, for the signer to publish"
182
182
  }).with(App).option("platform", String, { enum: ["ios", "android"], desc: "the app it updates" }).option("target", String, mobileTargetOption).option("env", String, releaseEnvOption).option("out", String, {
183
- desc: "output folder (default: .akan/mobile/<target>/updates/<platform>)",
183
+ desc: "output folder (default: .akan/native/<target>/updates/<platform>)",
184
184
  nullable: true
185
185
  }).option("against", String, {
186
186
  desc: "bundle.json of the store build it must run in; fails when it needs a new one",
@@ -1,15 +1,15 @@
1
1
  // @bun
2
2
  import {
3
3
  Spinner
4
- } from "./index-r8gp8zk3.js";
5
- import"./index-ttn00pr3.js";
4
+ } from "./index-n3jk2501.js";
5
+ import"./index-6x9p8dpb.js";
6
6
  import {
7
7
  AllRoutesBuilder,
8
8
  CsrArtifactBuilder,
9
9
  FontPruner,
10
10
  precompressArtifacts,
11
11
  SsrBaseArtifactBuilder
12
- } from "./index-fy42hyb9.js";
12
+ } from "./index-376gpdds.js";
13
13
  import"./index-52w0fvh8.js";
14
14
  import"./index-n68jx79w.js";
15
15
 
@@ -6,7 +6,7 @@ import {
6
6
  resolveSsrPageEntriesForApp,
7
7
  WorkspaceExecutor,
8
8
  AppExecutor
9
- } from "./index-r8gp8zk3.js";
9
+ } from "./index-n3jk2501.js";
10
10
  import {
11
11
  computeRouteSeedIndex,
12
12
  saveRouteSeedIndex,
@@ -14,14 +14,14 @@ import {
14
14
  PagesBundleBuilder,
15
15
  CsrDevBundler,
16
16
  SsrDevBundler
17
- } from "./index-ttn00pr3.js";
17
+ } from "./index-6x9p8dpb.js";
18
18
  import"./index-52w0fvh8.js";
19
19
  import {
20
20
  CsrArtifactBuilder,
21
21
  CssCompiler,
22
22
  FontOptimizer,
23
23
  SsrBaseArtifactBuilder
24
- } from "./index-fy42hyb9.js";
24
+ } from "./index-376gpdds.js";
25
25
  import"./index-n68jx79w.js";
26
26
 
27
27
  // pkgs/@akanjs/devkit/incrementalBuilder/buildBatch.proc.ts
@@ -6,22 +6,22 @@ import {
6
6
  import {
7
7
  Workspace,
8
8
  command
9
- } from "./index-b68zfsvz.js";
10
- import"./index-r8gp8zk3.js";
9
+ } from "./index-xb7qhxa8.js";
10
+ import"./index-n3jk2501.js";
11
11
  import {
12
12
  PlatformTestRun
13
- } from "./index-rrt9pnb4.js";
13
+ } from "./index-5rp0h6na.js";
14
14
  import"./index-48k96p55.js";
15
- import"./index-1hs6jrys.js";
16
- import"./index-qtz88kh0.js";
17
- import"./index-n9gxx7bp.js";
15
+ import"./index-kb16nzyt.js";
16
+ import"./index-gxamdf18.js";
17
+ import"./index-3rh7thcx.js";
18
18
  import"./index-7md2g9vw.js";
19
19
  import"./index-2ahj896a.js";
20
- import"./index-k7809wmg.js";
20
+ import"./index-a4s954kq.js";
21
21
  import {
22
22
  CloudScript2
23
- } from "./index-g44da4r2.js";
24
- import"./index-nbg9bfnr.js";
23
+ } from "./index-qcejqgts.js";
24
+ import"./index-35mmm9ca.js";
25
25
 
26
26
  // pkgs/@akanjs/cli/cloud/cloud.command.ts
27
27
  var localRegistryUrl = () => process.env.AKAN_NPM_REGISTRY ?? "http://127.0.0.1:4873";
@@ -0,0 +1,20 @@
1
+ // @bun
2
+ import {
3
+ CloudScript2
4
+ } from "./index-qcejqgts.js";
5
+ import"./index-5rp0h6na.js";
6
+ import"./index-a4s954kq.js";
7
+ import"./index-3rh7thcx.js";
8
+ import"./index-35mmm9ca.js";
9
+ import"./index-gxamdf18.js";
10
+ import"./index-kb16nzyt.js";
11
+ import"./index-94s080qm.js";
12
+ import"./index-xb7qhxa8.js";
13
+ import"./index-7md2g9vw.js";
14
+ import"./index-48k96p55.js";
15
+ import"./index-n3jk2501.js";
16
+ import"./index-2ahj896a.js";
17
+ import"./index-52w0fvh8.js";
18
+ export {
19
+ CloudScript2 as CloudScript
20
+ };
@@ -4,9 +4,9 @@ import {
4
4
  runner,
5
5
  script,
6
6
  command
7
- } from "./index-b68zfsvz.js";
7
+ } from "./index-xb7qhxa8.js";
8
8
  import"./index-52w0fvh8.js";
9
- import"./index-r8gp8zk3.js";
9
+ import"./index-n3jk2501.js";
10
10
  import {
11
11
  akanCodeDefaultModel2,
12
12
  CodeAgentStreamPrinter2
@@ -19,7 +19,7 @@ class CodeRunner extends runner("code") {
19
19
  async serve(options, listen) {
20
20
  await import("./consoleToStderr-h5bryj94.js");
21
21
  const [{ CodeAgent }, { CodeAgentRpcHost }, { CodeAgentRpcListener }] = await Promise.all([
22
- import("./CodeAgent-86q8d13j.js"),
22
+ import("./CodeAgent-xnfyyz8h.js"),
23
23
  import("./CodeAgentRpcHost-p7h6n2hp.js"),
24
24
  import("./CodeAgentRpcListener-7p7z5dd7.js")
25
25
  ]);
@@ -34,8 +34,8 @@ class CodeRunner extends runner("code") {
34
34
  }
35
35
  async tui(options, seed) {
36
36
  const [{ CodeAgent }, { CodeTui }] = await Promise.all([
37
- import("./CodeAgent-86q8d13j.js"),
38
- import("./CodeTui-r8tgxsyb.js")
37
+ import("./CodeAgent-xnfyyz8h.js"),
38
+ import("./CodeTui-h66xb1fh.js")
39
39
  ]);
40
40
  const agentOptions = await CodeRunner.#agentOptions(options, false);
41
41
  let resume = options.resume;
@@ -60,7 +60,7 @@ class CodeRunner extends runner("code") {
60
60
  }
61
61
  }
62
62
  async run(prompt, options) {
63
- const { CodeAgent } = await import("./CodeAgent-86q8d13j.js");
63
+ const { CodeAgent } = await import("./CodeAgent-xnfyyz8h.js");
64
64
  const agent = await CodeAgent.create(await CodeRunner.#agentOptions(options, false));
65
65
  const printer = new CodeAgentStreamPrinter2({ json: options.json, thinking: options.thinking });
66
66
  agent.on((event) => printer.print(event));
@@ -2,24 +2,24 @@
2
2
  import {
3
3
  Workspace,
4
4
  command
5
- } from "./index-b68zfsvz.js";
5
+ } from "./index-xb7qhxa8.js";
6
6
  import"./index-52w0fvh8.js";
7
- import"./index-r8gp8zk3.js";
7
+ import"./index-n3jk2501.js";
8
8
  import"./index-hj6w4ka1.js";
9
- import"./index-2s2e5qnd.js";
10
- import"./index-0pqzrbpr.js";
11
- import"./index-16k7m3cs.js";
12
- import"./index-1hs6jrys.js";
9
+ import"./index-hmdq5pqm.js";
10
+ import"./index-tzc1gtrg.js";
11
+ import"./index-hqd0h1pb.js";
12
+ import"./index-kb16nzyt.js";
13
13
  import"./index-zzvvc845.js";
14
- import"./index-2z30v4k5.js";
15
- import"./index-ss828r32.js";
16
- import"./index-genegfnt.js";
17
- import"./index-20r2g1t3.js";
18
- import"./index-2ctqegdm.js";
19
- import"./index-h9ed99ax.js";
14
+ import"./index-0ncc0mbk.js";
15
+ import"./index-se643zvp.js";
16
+ import"./index-wfwgcnyc.js";
17
+ import"./index-hf6f4xnb.js";
18
+ import"./index-tsb0f8ya.js";
19
+ import"./index-rtwhw4aq.js";
20
20
  import {
21
21
  ContextScript
22
- } from "./index-2yvy9ztj.js";
22
+ } from "./index-167c77aq.js";
23
23
 
24
24
  // pkgs/@akanjs/cli/context/context.command.ts
25
25
  class ContextCommand extends command("context", [ContextScript], ({ public: target }) => ({
@@ -27,7 +27,7 @@ class ContextCommand extends command("context", [ContextScript], ({ public: targ
27
27
  await this.contextScript.context(workspace, { format, app, module });
28
28
  }),
29
29
  doctor: target({ desc: "Report Akan workspace convention diagnostics" }).option("format", String, { desc: "output format", default: "text", enum: ["text", "json"] }).option("strict", Boolean, { desc: "treat recommended conventions as errors", default: false }).option("ios", Boolean, {
30
- desc: "report iOS/mobile config diagnostics (placeholder bundle ids, etc.)",
30
+ desc: "report iOS/native config diagnostics (placeholder bundle ids, etc.)",
31
31
  default: false
32
32
  }).with(Workspace).exec(async function(format, strict, ios, workspace) {
33
33
  await this.contextScript.doctor(workspace, { format, strict, ios });
@@ -0,0 +1,21 @@
1
+ // @bun
2
+ import {
3
+ ContextRunner2
4
+ } from "./index-hqd0h1pb.js";
5
+ import"./index-rtwhw4aq.js";
6
+ import"./index-tsb0f8ya.js";
7
+ import"./index-hf6f4xnb.js";
8
+ import"./index-0ncc0mbk.js";
9
+ import"./index-wfwgcnyc.js";
10
+ import"./index-se643zvp.js";
11
+ import"./index-kb16nzyt.js";
12
+ import"./index-tzc1gtrg.js";
13
+ import"./index-hmdq5pqm.js";
14
+ import"./index-zzvvc845.js";
15
+ import"./index-xb7qhxa8.js";
16
+ import"./index-n3jk2501.js";
17
+ import"./index-hj6w4ka1.js";
18
+ import"./index-52w0fvh8.js";
19
+ export {
20
+ ContextRunner2 as ContextRunner
21
+ };
@@ -2,9 +2,9 @@
2
2
  import {
3
3
  script,
4
4
  command
5
- } from "./index-b68zfsvz.js";
5
+ } from "./index-xb7qhxa8.js";
6
6
  import"./index-52w0fvh8.js";
7
- import"./index-r8gp8zk3.js";
7
+ import"./index-n3jk2501.js";
8
8
  import {
9
9
  Prompter2
10
10
  } from "./index-zzvvc845.js";
@@ -28,7 +28,7 @@ you fetch on demand — `get_guideline` with the name, or `akan guideline show <
28
28
  | name | covers |
29
29
  |---|---|
30
30
  | `ssrRule` | server-share targets, the `akan.ssr.*` warnings, the client-boundary playbook |
31
- | `runtimeRule` | `web` / `csr` surfaces, gateway vs solo processes, logging, the generated image, a desktop app's server, shipped assets, database modes |
31
+ | `runtimeRule` | `web` / `csr` surfaces, gateway vs solo processes, logging, the generated image, native apps and a desktop app's server, shipped assets, database modes |
32
32
  | `queryRule` | slices and hydration, the generated filter methods, full-text search, cascade removal |
33
33
  | `transportRule` | guards across HTTP and websocket, socket identity and cleanup, binary pubsub, mutation verbs |
34
34
  | `mcpRule` | MCP configuration, wire behaviour, resource URIs, OAuth metadata, protocol revisions |
@@ -309,11 +309,11 @@ What an app serves, how many processes it runs, where its logs go, and what ship
309
309
  declared in `akan.config.ts` and narrowed — never widened — by an env at boot. Domain code reaches none of it.
310
310
  Full contract: `get_guideline` with `runtimeRule`, or `akan guideline show runtimeRule`.
311
311
 
312
- - **Web surfaces are `web: true | false | { csr: boolean }`.** `{ csr: false }` drops the mobile/CSR bundle,
313
- `false` is an API-only build that serves nothing under `page/`. There is no CSR-without-SSR option, by type —
314
- the CSR bundle inlines the stylesheet the SSR base artifact compiles. `AKAN_SSR` / `AKAN_CSR` narrow further at
315
- runtime and can never switch a surface the build left out back on. `akan start` ignores `web` and keeps the
316
- whole dev surface.
312
+ - **Web surfaces are `web: true | false | { csr: boolean }`.** `{ csr: false }` drops the CSR bundle the native
313
+ apps ship, `false` is an API-only build that serves nothing under `page/`. There is no CSR-without-SSR option, by
314
+ type — the CSR bundle inlines the stylesheet the SSR base artifact compiles. `AKAN_SSR` / `AKAN_CSR` narrow
315
+ further at runtime and can never switch a surface the build left out back on. `akan start` ignores `web` and
316
+ keeps the whole dev surface.
317
317
  - **One traffic replica runs in the container's only process.** `AKAN_REPLICA=0,0,1` — the default everywhere —
318
318
  has nothing to balance, so there is no gateway and no unix-socket proxy hop. Two or more replicas, a batch-only
319
319
  replica, `AKAN_SOLO=false`, passing `replica` to `new AkanApp(...)`, or `akan start` all bring the gateway back.
@@ -350,15 +350,28 @@ Full contract: `get_guideline` with `runtimeRule`, or `akan guideline show runti
350
350
  assembles one from; the string form takes no contributions. The generated image installs `ca-certificates` and
351
351
  `tzdata` and nothing else, so an app needing `ffmpeg` or Chromium declares it in `preRuns` / `postRuns`. A lib
352
352
  declares the steps its own runtime needs and every mounting app inherits them.
353
- - **A desktop app's server (`native.desktop.server: true` on its target) gets nothing from `docker`.** An executable the app spawns
353
+ - **Native apps are the `native` section** — iOS, Android and a desktop app (macOS, Windows, Linux), each shipping
354
+ the CSR bundle on the native runtime. Shared fields (`appName`, `appId`, `version`, `indexPath`, `permissions`,
355
+ `plugins`, `deepLinks`, `updates`, …) sit beside one section per platform: `ios`, `android`, `desktop`. Without
356
+ `targets` the app has one target, `default`, and an app with no basePaths leaves `basePath` out; a target takes
357
+ the same shape and overrides the section field by field — objects merge key by key, a list or any other value
358
+ replaces the section's. `akan start-ios` / `start-android` / `start-desktop` run a dev build that loads its pages
359
+ from `akan start`; `build-ios` / `build-android` / `build-desktop` write
360
+ `apps/<app>/.akan/native/<target>/build/<platform>`, a desktop app only for the computer that builds it
361
+ (`--installer true` adds a Windows setup). With `updates: { url, publicKey }` an installed app takes the signed
362
+ releases `akan publish-update` makes; `akan update-keygen` makes the key and prints its `publicKey`.
363
+ - **A desktop app that carries its server (`desktop: { server: true }` in `native`, or in one target) gets nothing
364
+ from `docker`.** That server is API-only, runs in database mode `single`, and listens on a loopback port any
365
+ program on the computer can call, so guard its endpoints as a network server's. An executable the app spawns
354
366
  goes in `bin` — per platform, a download checked against its `sha256` or a file beside the config, put first on
355
367
  the app's PATH so the server's `spawn("ffmpeg")` finds it, and in `ctx.binDir` for a native plugin — and a package
356
- that builds itself at install goes in `trustedDependencies`, which the image honours too. Carry a static LGPL ffmpeg: a `--enable-nonfree` build may
357
- not be redistributed. A file the user picks with `filePicker.pickFiles({ forServer: true })` reaches it as a
358
- grant, never a copy or a path: `NativeFile.resolve(grant, "read")` in `akanjs/server` asks the shell for it.
359
- What it carries is readable on the user's computer — `private/` (each lib's too, under `private/libs/<lib>`), the
360
- one `env.server.<env>.ts` of its `--env` and its libs' server env defaults (`env.server.testing.ts`) — and it has
361
- no `public/`: read runtime files from `AKAN_APP_DIR`, never `process.cwd()`.
368
+ that builds itself at install goes in `trustedDependencies`, which the image honours too. Carry a static LGPL
369
+ ffmpeg: a `--enable-nonfree` build may not be redistributed. A file the user picks with
370
+ `filePicker.pickFiles({ forServer: true })` reaches it as a grant, never a copy or a path:
371
+ `NativeFile.resolve(grant, "read")` in `akanjs/server` asks the shell for it. What it carries is readable on the
372
+ user's computer — `private/` (each lib's too, under `private/libs/<lib>`), the one `env.server.<env>.ts` of its
373
+ `--env` and its libs' server env defaults (`env.server.testing.ts`) — and it has no `public/`: read runtime files
374
+ from `AKAN_APP_DIR`, never `process.cwd()`.
362
375
  - **`assets: { pruneFonts, keepFonts }`** trims from the `dist` copy of `public/` the fonts nothing reads; source
363
376
  trees are never touched. A font with `optimize` on is a build input, not a runtime asset. `keepFonts` belongs to
364
377
  the `akan.config.ts` that owns the font, written against that scope's own `public/`.
@@ -934,7 +947,7 @@ export default page()
934
947
  - `apps/<appName>` root may only contain these files: `AGENTS.md`, `CLAUDE.md`, `akan.app.json`, `akan.config.ts`, `client.ts`, `main.ts`, `package.json`, `server.ts`, `tsconfig.json`, `tsconfig.tsbuildinfo`.
935
948
  - `apps/<appName>` root may only contain these folders: `.akan`, `common`, `env`, `lib`, `native`, `page`, `plugin`, `private`, `public`, `script`, `secrets`, `srvkit`, `ui`, `webkit`.
936
949
  - `libs/<libName>` root may only contain these files: `AGENTS.md`, `CLAUDE.md`, `README.md`, `akan.config.ts`, `akan.lib.json`, `client.ts`, `index.ts`, `package.json`, `server.ts`, `tsconfig.json`, `tsconfig.spec.json`, `tsconfig.tsbuildinfo`.
937
- - `libs/<libName>` root may only contain these folders: `common`, `env`, `lib`, `native`, `page`, `plugin`, `private`, `public`, `srvkit`, `ui`, `webkit`. A library is never booted or packaged as an app, so the run and mobile entries an app carries (`main.ts`, `.akan`, `script`, `secrets`) are rejected there. A Capacitor-era `ios` / `android` / `mobile` folder or `capacitor.config.*` is refused in an app root too, named as a leftover: the native runtime generates its projects under `.akan/mobile/<target>`.
950
+ - `libs/<libName>` root may only contain these folders: `common`, `env`, `lib`, `native`, `page`, `plugin`, `private`, `public`, `srvkit`, `ui`, `webkit`. A library is never booted or packaged as an app, so the run and mobile entries an app carries (`main.ts`, `.akan`, `script`, `secrets`) are rejected there. A Capacitor-era `ios` / `android` / `mobile` folder or `capacitor.config.*` is refused in an app root too, named as a leftover: the native runtime generates its projects under `.akan/native/<target>`.
938
951
  - Both allowlists have one source — `pkgs/@akanjs/devkit/workspaceLayout.ts`. `akan sync` (error), `akan doctor`
939
952
  (diagnostic), and `akan quality scan` (warning) all read it, so add a new root entry there and mirror it into this
940
953
  list, never into one of the three call sites.