@akanjs/cli 3.0.2 → 3.1.0-rc.1

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 (87) hide show
  1. package/.build-stamp +1 -1
  2. package/{CodeAgent-szbjv4gv.js → CodeAgent-kyprmy06.js} +2 -2
  3. package/{CodeTui-5nw86ab6.js → CodeTui-21mtze3j.js} +1 -1
  4. package/{TunnelShare-cwh9ezsm.js → TunnelShare-q4jq08qg.js} +2 -2
  5. package/{agent.command-np1dffkb.js → agent.command-f3gsc1gd.js} +5 -5
  6. package/akanCode.js +2 -2
  7. package/{application.command-gk69v1xs.js → application.command-5s780vnz.js} +37 -15
  8. package/{applicationBuildRunner-wx09n9g6.js → applicationBuildRunner-1yaqsrdq.js} +115 -103
  9. package/buildBatch.proc.js +16 -5
  10. package/cloud.command-yj6xb2a7.js +192 -0
  11. package/cloud.script-h6pvcpa2.js +20 -0
  12. package/{code.command-hmtx14b2.js → code.command-3wkn4ja5.js} +6 -6
  13. package/commandManifest.json +1 -1
  14. package/{context.command-6aqvdx43.js → context.command-9jjn3gcw.js} +13 -13
  15. package/context.runner-atcrzz5b.js +21 -0
  16. package/{guideline.command-axvf68gc.js → guideline.command-dtczrqpf.js} +2 -2
  17. package/guidelines/agentRule/agentRule.instruction.md +10 -2
  18. package/guidelines/conventions/conventions.instruction.md +70 -25
  19. package/guidelines/cssRule/cssRule.instruction.md +19 -0
  20. package/guidelines/mcpRule/mcpRule.instruction.md +72 -12
  21. package/guidelines/queryRule/queryRule.instruction.md +11 -1
  22. package/guidelines/runtimeRule/runtimeRule.instruction.md +97 -16
  23. package/guidelines/ssrRule/ssrRule.instruction.md +10 -7
  24. package/guidelines/transportRule/transportRule.instruction.md +19 -0
  25. package/guidelines/workspaceRecipes/workspaceRecipes.instruction.md +6 -6
  26. package/incrementalBuilder.proc.js +24 -3
  27. package/{index-h9ht6s60.js → index-05g3jayg.js} +1 -1
  28. package/{index-jk9xnck6.js → index-1w2qaee2.js} +240 -133
  29. package/{index-g38nhv87.js → index-2etcv0sc.js} +1 -1
  30. package/{index-zyw622y1.js → index-2mx692qq.js} +3 -3
  31. package/{index-50wb2a26.js → index-55mynnqs.js} +354 -129
  32. package/{index-2wc41k5w.js → index-56d2g8ms.js} +2 -2
  33. package/{index-q6ft9fkc.js → index-6jjtnhkw.js} +8 -3
  34. package/index-6w0rbr9d.js +68 -0
  35. package/{index-hxnnfy57.js → index-8ggztp8k.js} +204 -8
  36. package/{index-zwd84m0w.js → index-8r4d7cmt.js} +4 -4
  37. package/{index-j38qkvkk.js → index-ae5pwhgs.js} +12 -10
  38. package/{index-gtjgnv36.js → index-aprt7pkz.js} +6 -9
  39. package/{index-1bjkfvm9.js → index-c1x0be5j.js} +2 -2
  40. package/{index-z750gk1j.js → index-c2yrsxdh.js} +13 -7
  41. package/{index-cb6yc5mb.js → index-c76k723e.js} +2 -2
  42. package/{index-6keyf4sg.js → index-ctanya41.js} +4 -4
  43. package/{index-f4e08ptp.js → index-e0cvze1s.js} +4 -4
  44. package/{index-hp3stk1m.js → index-fm46xrf1.js} +3 -3
  45. package/{index-3xmzr1p1.js → index-gnyf1fqy.js} +2 -2
  46. package/{index-nwd6qzvv.js → index-jx4bzvwg.js} +138 -55
  47. package/{index-jb0hmt3k.js → index-krq7btbt.js} +3 -3
  48. package/{index-94s080qm.js → index-pgj2rt78.js} +139 -1
  49. package/index-q958tqqg.js +77 -0
  50. package/{index-50jjwg8y.js → index-qt22xstj.js} +1 -1
  51. package/index-rc5rwyps.js +201 -0
  52. package/{index-xwprn9nr.js → index-rtct7d43.js} +1 -1
  53. package/{index-bsv901fd.js → index-rwq3ekqc.js} +7 -7
  54. package/{index-1gs9g12n.js → index-v29746vb.js} +4 -4
  55. package/index-ww9bhp67.js +62 -0
  56. package/index.js +22 -21
  57. package/{library.command-9m2rdwwz.js → library.command-gaga5bmq.js} +3 -3
  58. package/{localRegistry.command-kda81jyk.js → localRegistry.command-vsreyy42.js} +9 -9
  59. package/{module.command-q63dffya.js → module.command-7vpf6db4.js} +5 -5
  60. package/{package.command-y2jh0m99.js → package.command-twmvvf69.js} +3 -3
  61. package/package.json +2 -2
  62. package/{page.command-f3e4cwhh.js → page.command-5asq7fdf.js} +3 -3
  63. package/pipeline.command-d0v38572.js +1334 -0
  64. package/{primitive.command-r4kq75qj.js → primitive.command-dyrs2fm8.js} +6 -6
  65. package/projectTypecheck-cvtkrzp2.js +7 -0
  66. package/{quality.command-f7gzh26z.js → quality.command-6emsqpbg.js} +5 -4
  67. package/{repair.command-0qmyr6qa.js → repair.command-8t6aegv5.js} +5 -5
  68. package/{scalar.command-kddn7av4.js → scalar.command-bnggy1x7.js} +4 -4
  69. package/{subspace.command-ft65qvc4.js → subspace.command-md2teygq.js} +158 -91
  70. package/templates/app/env/env.client.type.ts +2 -3
  71. package/templates/app/page/styles.css.template +8 -0
  72. package/templates/appSample/page/task/[taskId]/_index.tsx +2 -2
  73. package/templates/appSample/page/task/[taskId]/edit.tsx +2 -2
  74. package/templates/appSample/page/task/_index.tsx +2 -2
  75. package/templates/crudPages/[__model__Id]/edit/page.tsx +2 -2
  76. package/templates/crudPages/[__model__Id]/page.tsx +3 -3
  77. package/templates/crudPages/page.tsx +2 -2
  78. package/templates/crudSinglePage/page.tsx +3 -3
  79. package/templates/lib/cnst.ts +2 -2
  80. package/templates/lib/sig.ts +3 -3
  81. package/{tunnel.command-b3ymdk4f.js → tunnel.command-jx3tdm2d.js} +16 -13
  82. package/{workflow.command-z1srcdfw.js → workflow.command-jx0wag5r.js} +10 -10
  83. package/{workspace.command-vp6vmx3z.js → workspace.command-yxd7rr7g.js} +57 -27
  84. package/cloud.command-tw06613r.js +0 -95
  85. package/cloud.script-64gzba8r.js +0 -20
  86. package/context.runner-hnkvv3z3.js +0 -21
  87. package/index-t91a7339.js +0 -104
@@ -0,0 +1,192 @@
1
+ // @bun
2
+ import {
3
+ App,
4
+ Workspace,
5
+ command
6
+ } from "./index-6jjtnhkw.js";
7
+ import"./index-52w0fvh8.js";
8
+ import"./index-55mynnqs.js";
9
+ import"./index-1w2qaee2.js";
10
+ import"./index-pgj2rt78.js";
11
+ import {
12
+ PlatformTestRun
13
+ } from "./index-8ggztp8k.js";
14
+ import"./index-k9rrten6.js";
15
+ import"./index-c1x0be5j.js";
16
+ import"./index-jx4bzvwg.js";
17
+ import"./index-7md2g9vw.js";
18
+ import"./index-2ahj896a.js";
19
+ import"./index-gnyf1fqy.js";
20
+ import {
21
+ CloudScript2
22
+ } from "./index-rc5rwyps.js";
23
+ import"./index-qt22xstj.js";
24
+ import {
25
+ getMobileTargetChoices
26
+ } from "./index-q958tqqg.js";
27
+
28
+ // pkgs/@akanjs/cli/cloud/cloud.command.ts
29
+ var localRegistryUrl = () => process.env.AKAN_NPM_REGISTRY ?? "http://127.0.0.1:4873";
30
+ var hostOption = {
31
+ desc: "host of the cloud to target (default: cloud.host of the root akan.config.ts, else Akan Cloud)",
32
+ nullable: true
33
+ };
34
+ var targetOption = {
35
+ desc: "native target name (a key of native.targets)",
36
+ ask: "Select native target",
37
+ enum: async ({ app }) => await getMobileTargetChoices(app)
38
+ };
39
+ var envOption = {
40
+ enum: ["debug", "develop", "main", "local"],
41
+ desc: "backend environment",
42
+ default: "main"
43
+ };
44
+ var resolveRegistryUrl = (registry) => registry === "local" ? localRegistryUrl() : undefined;
45
+
46
+ class CloudCommand extends command("cloud", [CloudScript2], ({ public: target }) => ({
47
+ login: target({ desc: "Login to Akan Cloud services" }).option("host", String, {
48
+ desc: "host of the cloud (default: cloud.host of the root akan.config.ts, else Akan Cloud)",
49
+ nullable: true
50
+ }).with(Workspace).exec(async function(host, workspace) {
51
+ await this.cloudScript.login(workspace, host);
52
+ }),
53
+ logout: target({ desc: "Logout from Akan Cloud services" }).option("host", String, {
54
+ desc: "host of the cloud (default: cloud.host of the root akan.config.ts, else Akan Cloud)",
55
+ nullable: true
56
+ }).with(Workspace).exec(async function(host, workspace) {
57
+ await this.cloudScript.logout(workspace, host);
58
+ }),
59
+ deployAkan: target({ devOnly: true, desc: "Deploy Akan.js framework to cloud (internal use)" }).option("test", Boolean, { desc: "test the deployment", default: true }).option("registry", String, {
60
+ desc: "registry target for publishing Akan packages",
61
+ ask: "Select a registry target",
62
+ enum: [
63
+ { label: "local", value: "local" },
64
+ { label: "npm", value: "npm" }
65
+ ]
66
+ }).option("platforms", String, {
67
+ desc: "platforms to test on besides this machine, comma-separated: linux, windows (none to skip)",
68
+ default: "linux,windows"
69
+ }).with(Workspace).exec(async function(test, registry, platforms, workspace) {
70
+ await this.cloudScript.deployAkan(workspace, {
71
+ test,
72
+ registryUrl: resolveRegistryUrl(registry),
73
+ platforms: PlatformTestRun.parsePlatforms(platforms)
74
+ });
75
+ }),
76
+ testPlatforms: target({
77
+ devOnly: true,
78
+ desc: "Run the Akan package suites on Linux (Docker) and Windows (SSH) against a snapshot of this tree"
79
+ }).option("platforms", String, {
80
+ desc: "platforms to test on, comma-separated: linux, windows",
81
+ default: "linux,windows"
82
+ }).option("pkgs", String, {
83
+ flag: "k",
84
+ desc: "packages to test, comma-separated (default: every Akan package)",
85
+ nullable: true
86
+ }).with(Workspace).exec(async function(platforms, pkgs, workspace) {
87
+ await this.cloudScript.testPlatforms(workspace, {
88
+ platforms: PlatformTestRun.parsePlatforms(platforms),
89
+ pkgs: pkgs?.split(",").map((pkg) => pkg.trim()).filter(Boolean)
90
+ });
91
+ }),
92
+ update: target({ desc: "Update Akan.js framework to the latest version" }).with(Workspace).option("tag", String, {
93
+ desc: "tag of the update",
94
+ default: "latest",
95
+ enum: ["latest", "dev", "canary", "beta", "rc", "alpha"]
96
+ }).option("registry", String, {
97
+ desc: "registry target for resolving Akan packages",
98
+ ask: "Select a registry target",
99
+ enum: [
100
+ { label: "npm", value: "npm" },
101
+ { label: "local", value: "local" }
102
+ ],
103
+ default: process.env.USE_AKANJS_PKGS === "true" ? undefined : "npm"
104
+ }).exec(async function(workspace, tag, registry) {
105
+ await this.cloudScript.update(workspace, tag, { registryUrl: resolveRegistryUrl(registry) });
106
+ }),
107
+ pushUpdate: target({
108
+ desc: "Pack an over-the-air update of a phone's web bundle and upload it to the akasys project, which signs and publishes it"
109
+ }).with(App).option("platform", String, { enum: ["ios", "android"], desc: "the app it updates" }).option("target", String, targetOption).option("env", String, envOption).option("channel", String, { desc: "the channel (default: the target's updates.channel)", nullable: true }).option("notes", String, { desc: "release notes shown in the project", nullable: true }).option("subspace", String, { desc: "the subspace whose project gets it", nullable: true }).option("host", String, hostOption).option("write", Boolean, { desc: "write code generation", default: true }).option("allowLocalRelease", Boolean, { flag: "l", desc: "allow packing with --env local", default: false }).option("pack", String, {
110
+ flag: "d",
111
+ desc: "a folder `akan pack-update` wrote, uploaded instead of packing",
112
+ nullable: true
113
+ }).with(Workspace).exec(async function(app, platform, target, env, channel, notes, subspace, host, write, allowLocalRelease, pack, workspace) {
114
+ await this.cloudScript.pushUpdate(workspace, app, {
115
+ platform,
116
+ target,
117
+ env,
118
+ channel,
119
+ notes,
120
+ subspace,
121
+ host,
122
+ write,
123
+ allowLocalRelease,
124
+ pack
125
+ });
126
+ }),
127
+ registerBinary: target({
128
+ desc: "Register the store build of a phone app with the akasys project, with a pack of the same commit as its embedded bundle"
129
+ }).with(App).option("platform", String, { enum: ["ios", "android"], desc: "the store build to register" }).option("distribution", String, {
130
+ enum: ["appStore", "testFlight", "playStore", "playTesting", "direct"],
131
+ desc: "where the binary ships"
132
+ }).option("target", String, targetOption).option("env", String, envOption).option("subspace", String, { desc: "the subspace whose project gets it", nullable: true }).option("host", String, hostOption).option("write", Boolean, { desc: "write code generation", default: true }).option("allowLocalRelease", Boolean, { flag: "l", desc: "allow packing with --env local", default: false }).with(Workspace).exec(async function(app, platform, distribution, target, env, subspace, host, write, allowLocalRelease, workspace) {
133
+ await this.cloudScript.registerBinary(workspace, app, {
134
+ platform,
135
+ distribution,
136
+ target,
137
+ env,
138
+ subspace,
139
+ host,
140
+ write,
141
+ allowLocalRelease
142
+ });
143
+ }),
144
+ uploadSecret: target({
145
+ desc: "Upload a named pipeline secret to the akasys project; write-only, it can never be read back"
146
+ }).arg("name", String, { desc: "secret name, e.g. DISCORD_WEBHOOK" }).option("branch", String, {
147
+ desc: "only builds of this branch use it: debug, develop or main (default: every branch)",
148
+ nullable: true
149
+ }).option("file", String, {
150
+ desc: "read the value from this file instead of stdin or a hidden prompt",
151
+ nullable: true
152
+ }).option("subspace", String, { desc: "the subspace whose project gets it", nullable: true }).option("host", String, {
153
+ desc: "host of the cloud to target (default: cloud.host of the root akan.config.ts, else Akan Cloud)",
154
+ nullable: true
155
+ }).with(Workspace).exec(async function(name, branch, file, subspace, host, workspace) {
156
+ await this.cloudScript.uploadSecret(workspace, { name, branch, file, subspace, host });
157
+ }),
158
+ listSecrets: target({ desc: "List the pipeline secrets of the akasys project: names and scopes, never values" }).option("branch", String, {
159
+ desc: "only the secrets builds of this branch use: debug, develop or main",
160
+ nullable: true
161
+ }).option("subspace", String, { desc: "the subspace whose project to list", nullable: true }).option("host", String, {
162
+ desc: "host of the cloud to target (default: cloud.host of the root akan.config.ts, else Akan Cloud)",
163
+ nullable: true
164
+ }).with(Workspace).exec(async function(branch, subspace, host, workspace) {
165
+ await this.cloudScript.listSecrets(workspace, { branch, subspace, host });
166
+ }),
167
+ removeSecret: target({ desc: "Remove a named pipeline secret from the akasys project" }).arg("name", String, { desc: "secret name" }).option("branch", String, {
168
+ desc: "the branch override to remove: debug, develop or main (default: the every-branch value)",
169
+ nullable: true
170
+ }).option("subspace", String, { desc: "the subspace whose project holds it", nullable: true }).option("host", String, {
171
+ desc: "host of the cloud to target (default: cloud.host of the root akan.config.ts, else Akan Cloud)",
172
+ nullable: true
173
+ }).with(Workspace).exec(async function(name, branch, subspace, host, workspace) {
174
+ await this.cloudScript.removeSecret(workspace, { name, branch, subspace, host });
175
+ }),
176
+ downloadEnv: target({ desc: "Download environment variables from cloud or SCP server" }).option("host", String, {
177
+ desc: "host of the cloud to target (default: cloud.host of the root akan.config.ts, else Akan Cloud)",
178
+ nullable: true
179
+ }).with(Workspace).exec(async function(host, workspace) {
180
+ await this.cloudScript.downloadEnv(workspace, undefined, { host });
181
+ }),
182
+ uploadEnv: target({ desc: "Upload environment variables to cloud or SCP server" }).option("host", String, {
183
+ desc: "host of the cloud to target (default: cloud.host of the root akan.config.ts, else Akan Cloud)",
184
+ nullable: true
185
+ }).with(Workspace).exec(async function(host, workspace) {
186
+ await this.cloudScript.uploadEnv(workspace, { host });
187
+ })
188
+ })) {
189
+ }
190
+ export {
191
+ CloudCommand
192
+ };
@@ -0,0 +1,20 @@
1
+ // @bun
2
+ import {
3
+ CloudScript2
4
+ } from "./index-rc5rwyps.js";
5
+ import"./index-8ggztp8k.js";
6
+ import"./index-jx4bzvwg.js";
7
+ import"./index-qt22xstj.js";
8
+ import"./index-c1x0be5j.js";
9
+ import"./index-gnyf1fqy.js";
10
+ import"./index-1w2qaee2.js";
11
+ import"./index-pgj2rt78.js";
12
+ import"./index-6jjtnhkw.js";
13
+ import"./index-7md2g9vw.js";
14
+ import"./index-k9rrten6.js";
15
+ import"./index-55mynnqs.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-q6ft9fkc.js";
7
+ } from "./index-6jjtnhkw.js";
8
8
  import"./index-52w0fvh8.js";
9
- import"./index-50wb2a26.js";
9
+ import"./index-55mynnqs.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-szbjv4gv.js"),
22
+ import("./CodeAgent-kyprmy06.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-szbjv4gv.js"),
38
- import("./CodeTui-5nw86ab6.js")
37
+ import("./CodeAgent-kyprmy06.js"),
38
+ import("./CodeTui-21mtze3j.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-szbjv4gv.js");
63
+ const { CodeAgent } = await import("./CodeAgent-kyprmy06.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));
@@ -1 +1 @@
1
- {"byCommand":{"create-workspace":"workspace","generate-agent-rules":"workspace","lint":"workspace","lint-all":"workspace","sync-all":"workspace","init":"workspace","agent":"agent","code":"code","create-application":"application","remove-application":"application","plan-slice":"application","sync":"application","script":"application","console":"application","logs":"application","build":"application","b":"application","typecheck":"application","t":"application","test":"application","build-ios":"application","bi":"application","build-android":"application","ba":"application","build-desktop":"application","bd":"application","start":"application","s":"application","start-ios":"application","si":"application","start-android":"application","sa":"application","start-desktop":"application","sd":"application","release-ios":"application","release-android":"application","pack-update":"application","update-keygen":"application","publish-update":"application","dbup":"application","db-export":"application","db-import":"application","dbdown":"application","create-library":"library","remove-library":"library","sync-library":"library","library-status":"library","install-library":"library","start-registry":"localRegistry","reset-registry":"localRegistry","smoke-registry":"localRegistry","version":"package","create-package":"package","remove-package":"package","sync-package":"package","build-package":"package","verify-dist-package":"package","verify-akan-publish-packages":"package","create-module":"module","remove-module":"module","create-service":"module","create-view":"module","create-unit":"module","create-template":"module","create-crud-page":"page","context":"context","doctor":"context","mcp-install":"context","mcp":"context","mcp-call":"context","login":"cloud","logout":"cloud","deploy-akan":"cloud","test-platforms":"cloud","update":"cloud","download-env":"cloud","upload-env":"cloud","subspace":"subspace","guideline":"guideline","create-scalar":"scalar","remove-scalar":"scalar","create-ui":"primitive","add-field":"primitive","add-enum-field":"primitive","quality":"quality","repair":"repair","workflow":"workflow","tunnel":"tunnel"}}
1
+ {"byCommand":{"create-workspace":"workspace","generate-agent-rules":"workspace","lint":"workspace","lint-all":"workspace","machine-keygen":"workspace","sync-all":"workspace","init":"workspace","agent":"agent","code":"code","create-application":"application","remove-application":"application","plan-slice":"application","sync":"application","script":"application","console":"application","logs":"application","build":"application","b":"application","typecheck":"application","t":"application","test":"application","build-ios":"application","bi":"application","build-android":"application","ba":"application","build-desktop":"application","bd":"application","start":"application","s":"application","start-ios":"application","si":"application","start-android":"application","sa":"application","start-desktop":"application","sd":"application","release-ios":"application","release-android":"application","pack-update":"application","update-keygen":"application","publish-update":"application","dbup":"application","db-export":"application","db-import":"application","dbdown":"application","create-library":"library","remove-library":"library","sync-library":"library","library-status":"library","install-library":"library","start-registry":"localRegistry","reset-registry":"localRegistry","smoke-registry":"localRegistry","version":"package","create-package":"package","remove-package":"package","sync-package":"package","build-package":"package","verify-dist-package":"package","verify-akan-publish-packages":"package","create-module":"module","remove-module":"module","create-service":"module","create-view":"module","create-unit":"module","create-template":"module","create-crud-page":"page","context":"context","doctor":"context","mcp-install":"context","mcp":"context","mcp-call":"context","login":"cloud","logout":"cloud","deploy-akan":"cloud","test-platforms":"cloud","update":"cloud","push-update":"cloud","register-binary":"cloud","upload-secret":"cloud","list-secrets":"cloud","remove-secret":"cloud","download-env":"cloud","upload-env":"cloud","subspace":"subspace","guideline":"guideline","create-scalar":"scalar","remove-scalar":"scalar","create-ui":"primitive","add-field":"primitive","add-enum-field":"primitive","quality":"quality","repair":"repair","workflow":"workflow","pipeline":"pipeline","tunnel":"tunnel"}}
@@ -2,24 +2,24 @@
2
2
  import {
3
3
  Workspace,
4
4
  command
5
- } from "./index-q6ft9fkc.js";
5
+ } from "./index-6jjtnhkw.js";
6
6
  import"./index-52w0fvh8.js";
7
- import"./index-50wb2a26.js";
7
+ import"./index-55mynnqs.js";
8
8
  import"./index-hj6w4ka1.js";
9
- import"./index-h9ht6s60.js";
10
- import"./index-zyw622y1.js";
11
- import"./index-j38qkvkk.js";
12
- import"./index-jk9xnck6.js";
9
+ import"./index-05g3jayg.js";
10
+ import"./index-2mx692qq.js";
11
+ import"./index-ae5pwhgs.js";
12
+ import"./index-1w2qaee2.js";
13
13
  import"./index-zzvvc845.js";
14
- import"./index-hp3stk1m.js";
15
- import"./index-g38nhv87.js";
16
- import"./index-f4e08ptp.js";
17
- import"./index-6keyf4sg.js";
18
- import"./index-cb6yc5mb.js";
19
- import"./index-bsv901fd.js";
14
+ import"./index-fm46xrf1.js";
15
+ import"./index-2etcv0sc.js";
16
+ import"./index-e0cvze1s.js";
17
+ import"./index-ctanya41.js";
18
+ import"./index-c76k723e.js";
19
+ import"./index-rwq3ekqc.js";
20
20
  import {
21
21
  ContextScript
22
- } from "./index-zwd84m0w.js";
22
+ } from "./index-8r4d7cmt.js";
23
23
 
24
24
  // pkgs/@akanjs/cli/context/context.command.ts
25
25
  class ContextCommand extends command("context", [ContextScript], ({ public: target }) => ({
@@ -0,0 +1,21 @@
1
+ // @bun
2
+ import {
3
+ ContextRunner2
4
+ } from "./index-ae5pwhgs.js";
5
+ import"./index-rwq3ekqc.js";
6
+ import"./index-c76k723e.js";
7
+ import"./index-ctanya41.js";
8
+ import"./index-fm46xrf1.js";
9
+ import"./index-e0cvze1s.js";
10
+ import"./index-2etcv0sc.js";
11
+ import"./index-1w2qaee2.js";
12
+ import"./index-2mx692qq.js";
13
+ import"./index-05g3jayg.js";
14
+ import"./index-zzvvc845.js";
15
+ import"./index-6jjtnhkw.js";
16
+ import"./index-55mynnqs.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-q6ft9fkc.js";
5
+ } from "./index-6jjtnhkw.js";
6
6
  import"./index-52w0fvh8.js";
7
- import"./index-50wb2a26.js";
7
+ import"./index-55mynnqs.js";
8
8
  import {
9
9
  Prompter2
10
10
  } from "./index-zzvvc845.js";
@@ -47,7 +47,9 @@ pages declaring one name never clash, and a registry kept outside the surface re
47
47
  `AgentProvider` or an `Agent.Zone` belongs to whoever provided it.
48
48
  - **The panel is customized in three widening steps, and most designs stop at the first.** Props first:
49
49
  `open` / `onOpenChange` drive it from the app's own control (`launcher={false}` then draws no launcher of its
50
- own), `launcherClassName` / `panelClassName` reach one surface each where `className` reaches both, `intro`
50
+ own), `launcherPlacement` / `hideLauncherBelow` place the launcher — which sits above the page's bottom chrome
51
+ and under every menu and modal — `launcherClassName` / `panelClassName` reach one surface each where
52
+ `className` reaches both, `intro`
51
53
  replaces the empty-state line — where starter questions go — and `header` adds controls beside the built-in
52
54
  clear and close. `chrome={false}` drops the header bar whole, for an `inline` chat inside a panel the app
53
55
  already titles, and `defaultDraft` opens the composer with text in it without sending it. A panel driven by a
@@ -306,7 +308,9 @@ pages declaring one name never clash, and a registry kept outside the surface re
306
308
  an inline arrow can be clicked by a person and by nobody else. `.desc()` is required and comes first, `.arg()`
307
309
  is an argument the caller must pass and `.opt()` one it may leave out (the `exec` parameter is then `| null`),
308
310
  and `.exec()` is the only hook, so the chain completes in one unconditional statement and the callable carries
309
- `data-akan-action` like a store setter does. A `remove*` name defaults to a confirm gate. Reach a store action
311
+ `data-akan-action` like a store setter does. A `remove*` name defaults to a confirm gate. `st.tool("x", { label:
312
+ l("ticket.archive") })` gives the action a name a person reads — `Agent.useScreenActions()` hands it to a command
313
+ palette, and the model never sees it. Reach a store action
310
314
  from the body — `.exec((id) => st.do.removeX(id))` — which is how an agent gets CRUD; `st.do` on its own
311
315
  reaches nobody.
312
316
  - **`.card()` is the other way the chain ends, for an answer that is the user's to give.** Where `.exec()` runs a
@@ -357,6 +361,10 @@ pages declaring one name never clash, and a registry kept outside the surface re
357
361
  (a different `modal`, a different redirect) cannot honestly share a description, and that pair wants a
358
362
  `namespace` or nothing at all. The ids come from the `<slice>.items` resource `Load.Units` and
359
363
  `Data.ListContainer` already expose.
364
+ - **A command palette lists the same declarations.** `Agent.useScreenActions()` returns the screen's published
365
+ tools that take no required argument, each with a `run` that calls the control's own handler (guard included,
366
+ not logged as an agent call) and `needsConfirm` for the ones a person should confirm — so ⌘K offers exactly
367
+ what the agent can do here, with nothing declared twice.
360
368
 
361
369
  ## What `akanjs/ui` Publishes For You
362
370
  - **`akanjs/ui` publishes its own controls, so an app writes nothing for them.** `Data.ListContainer` (and every