@akanjs/cli 3.0.0-beta.10 → 3.0.0-beta.12

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 (58) hide show
  1. package/.build-stamp +1 -1
  2. package/TunnelShare-sbsaggmb.js +9 -0
  3. package/{abstractCompactor-gmkc0z8j.js → abstractCompactor-bqh31fk5.js} +2 -2
  4. package/{agent.command-0q17pnrs.js → agent.command-7357vxd8.js} +5 -5
  5. package/{application.command-18y0s485.js → application.command-pc8mdn3w.js} +10 -10
  6. package/{applicationBuildRunner-kxwbssgn.js → applicationBuildRunner-4f1wrba0.js} +2 -2
  7. package/{applicationReleasePackager-4yasxwv9.js → applicationReleasePackager-jkjmy5ee.js} +1 -1
  8. package/buildBatch.proc.js +2 -2
  9. package/{capacitorApp-36rbr858.js → capacitorApp-hqvsrec4.js} +2 -2
  10. package/{cloud.command-av97ndh6.js → cloud.command-cawrd5nq.js} +10 -10
  11. package/cloud.script-1bmptvw0.js +20 -0
  12. package/commandManifest.json +1 -1
  13. package/{context.command-5v37ef3n.js → context.command-982b6kdp.js} +14 -14
  14. package/{devTui-m1atgkc9.js → devTui-hmteztv3.js} +4 -24
  15. package/{devTuiView-0hc2emhe.js → devTuiView-40jvjnyz.js} +1 -1
  16. package/{guideline.command-4pz9g1rt.js → guideline.command-jn0vwszx.js} +4 -4
  17. package/guidelines/agentRule/agentRule.instruction.md +69 -0
  18. package/incrementalBuilder.proc.js +1 -1
  19. package/{index-ktb5njgy.js → index-15r9a10e.js} +2 -2
  20. package/{index-vxtad5bd.js → index-1nwxbr2y.js} +2 -2
  21. package/{index-y6n8nmny.js → index-3pvkjza8.js} +10 -10
  22. package/{index-2tv3fdx4.js → index-5nyznra1.js} +1 -0
  23. package/{index-wt7qrtd4.js → index-7f4dsf9v.js} +1 -1
  24. package/{index-ffvk10zz.js → index-8pkvrcv1.js} +3 -3
  25. package/{index-rtxxan88.js → index-8tfmh0v6.js} +5 -5
  26. package/{index-2xp0kfkt.js → index-ay8wj00x.js} +7 -7
  27. package/{index-0g7r8xz3.js → index-b3ae16mg.js} +1 -1
  28. package/{index-m0xccmmm.js → index-bw2marpf.js} +9 -0
  29. package/{index-a17x49vg.js → index-ceph7zqj.js} +3 -3
  30. package/{index-04bk599g.js → index-em4swemt.js} +3 -3
  31. package/{index-5ystnsd5.js → index-fr2x3qvv.js} +5 -5
  32. package/index-jcekapz4.js +49 -0
  33. package/{index-gyd220p2.js → index-jwjaf9fy.js} +1 -1
  34. package/{index-d43r08tf.js → index-kbsach1y.js} +4 -4
  35. package/index-p6pbz9n5.js +25 -0
  36. package/{index-sj5vxr8f.js → index-r8bd61d9.js} +46 -11
  37. package/{index-k2j1hc4r.js → index-s3fvrydw.js} +3 -3
  38. package/{index-vyvre9en.js → index-sh88vtye.js} +1 -1
  39. package/{index-9077wzd2.js → index-t8gvwcrx.js} +2 -2
  40. package/{index-a64esmtb.js → index-vrwdx0zx.js} +1 -1
  41. package/{index-te54x9zm.js → index-yc1keaer.js} +2 -2
  42. package/{index-j9yhg404.js → index-ys7dvdb3.js} +1 -1
  43. package/index.js +20 -19
  44. package/{library.command-qzzbj6d8.js → library.command-1f9h2ex6.js} +3 -3
  45. package/{localRegistry.command-vyrgg4xw.js → localRegistry.command-rx758ajg.js} +9 -9
  46. package/{module.command-rq5hq3ax.js → module.command-c2eve036.js} +7 -7
  47. package/{package.command-d9hd6v9n.js → package.command-y2rh4np7.js} +3 -3
  48. package/package.json +2 -2
  49. package/{page.command-126d56te.js → page.command-e5h29fyt.js} +3 -3
  50. package/{primitive.command-taxd1538.js → primitive.command-c44f7z1s.js} +8 -8
  51. package/{quality.command-6gsna0a3.js → quality.command-5evdd263.js} +2 -2
  52. package/{repair.command-tq2dgy72.js → repair.command-c2amvt74.js} +5 -5
  53. package/{scalar.command-3bcmrrkv.js → scalar.command-xyzerygj.js} +6 -6
  54. package/{subspace.command-eddzqpx3.js → subspace.command-ebfwzypw.js} +5 -5
  55. package/tunnel.command-v6a7at16.js +130 -0
  56. package/{workflow.command-gtdnzvbz.js → workflow.command-t174m6sy.js} +11 -11
  57. package/{workspace.command-06wvstgr.js → workspace.command-bg3eveth.js} +21 -21
  58. package/cloud.script-cm11xjdz.js +0 -20
package/.build-stamp CHANGED
@@ -1 +1 @@
1
- 248a5d65f363fd5a27c6caa9355adca9158d40d43304e82483ed913ef597f0ac
1
+ 4495c90d89259871516e9f4f963f83c5e4f03060d6c7d8cd42208e8934ed341d
@@ -0,0 +1,9 @@
1
+ // @bun
2
+ import {
3
+ TunnelShare2
4
+ } from "./index-jcekapz4.js";
5
+ import"./index-bw2marpf.js";
6
+ import"./index-q0y2jq9j.js";
7
+ export {
8
+ TunnelShare2 as TunnelShare
9
+ };
@@ -1,9 +1,9 @@
1
1
  // @bun
2
2
  import"./index-q0y2jq9j.js";
3
- import"./index-m0xccmmm.js";
3
+ import"./index-bw2marpf.js";
4
4
  import {
5
5
  AiSession
6
- } from "./index-te54x9zm.js";
6
+ } from "./index-yc1keaer.js";
7
7
  import {
8
8
  AbstractDoc
9
9
  } from "./index-meh558jy.js";
@@ -2,17 +2,17 @@
2
2
  import {
3
3
  Workspace,
4
4
  command
5
- } from "./index-0g7r8xz3.js";
5
+ } from "./index-b3ae16mg.js";
6
6
  import"./index-q0y2jq9j.js";
7
- import"./index-2tv3fdx4.js";
7
+ import"./index-5nyznra1.js";
8
8
  import"./index-6wwzs1bc.js";
9
9
  import"./index-by5gpp8x.js";
10
- import"./index-gyd220p2.js";
11
- import"./index-ktb5njgy.js";
10
+ import"./index-jwjaf9fy.js";
11
+ import"./index-15r9a10e.js";
12
12
  import"./index-h7yw2z9n.js";
13
13
  import {
14
14
  AgentScript
15
- } from "./index-k2j1hc4r.js";
15
+ } from "./index-s3fvrydw.js";
16
16
 
17
17
  // pkgs/@akanjs/cli/agent/agent.command.ts
18
18
  class AgentCommand extends command("agent", [AgentScript], ({ public: target }) => ({
@@ -6,22 +6,22 @@ import {
6
6
  Exec,
7
7
  Workspace,
8
8
  command
9
- } from "./index-0g7r8xz3.js";
9
+ } from "./index-b3ae16mg.js";
10
10
  import"./index-q0y2jq9j.js";
11
- import"./index-2tv3fdx4.js";
11
+ import"./index-5nyznra1.js";
12
12
  import"./index-6wwzs1bc.js";
13
13
  import {
14
14
  ApplicationScript
15
- } from "./index-sj5vxr8f.js";
16
- import"./index-vxtad5bd.js";
15
+ } from "./index-r8bd61d9.js";
16
+ import"./index-1nwxbr2y.js";
17
17
  import"./index-hwkygn9s.js";
18
- import {
19
- AbstractDoc
20
- } from "./index-meh558jy.js";
21
- import"./index-j9yhg404.js";
18
+ import"./index-ys7dvdb3.js";
22
19
  import {
23
20
  getMobileTargetChoices
24
21
  } from "./index-47pj3aee.js";
22
+ import {
23
+ AbstractDoc
24
+ } from "./index-meh558jy.js";
25
25
 
26
26
  // pkgs/@akanjs/cli/application/application.command.ts
27
27
  import { select } from "@inquirer/prompts";
@@ -106,8 +106,8 @@ class ApplicationCommand extends command("application", [ApplicationScript], ({
106
106
  start: target({ short: true, desc: "Start development server(s) (frontend SSR + backend)" }).with(Apps).option("plain", Boolean, { desc: "print prefixed lines instead of the full-screen view", default: false }).option("kill", Boolean, { flag: "k", desc: "free the dev ports first, whoever is holding them", default: false }).option("concurrency", Number, {
107
107
  desc: "apps to boot at a time (default: what this machine's memory and cores allow)",
108
108
  nullable: true
109
- }).option("dbup", Boolean, { desc: "start the local database first", default: true }).option("open", Boolean, { desc: "open web browser?", default: false }).option("write", Boolean, { desc: "write code generation", default: true }).exec(async function(apps, plain, kill, concurrency, dbup, open, write) {
110
- await this.applicationScript.start(apps, { plain, kill, concurrency, dbup, open, write });
109
+ }).option("dbup", Boolean, { desc: "start the local database first", default: true }).option("open", Boolean, { desc: "open web browser?", default: false }).option("share", Boolean, { desc: "also share each app on a public URL through an akan tunnel", default: false }).option("write", Boolean, { desc: "write code generation", default: true }).exec(async function(apps, plain, kill, concurrency, dbup, open, share, write) {
110
+ await this.applicationScript.start(apps, { plain, kill, concurrency, dbup, open, share, write });
111
111
  }),
112
112
  startIos: target({ short: true, desc: "Start iOS app in simulator or device" }).with(App).option("target", String, mobileTargetOption).option("env", String, {
113
113
  enum: ["local", "debug", "develop", "main"],
@@ -1,14 +1,14 @@
1
1
  // @bun
2
2
  import {
3
3
  Spinner
4
- } from "./index-2tv3fdx4.js";
4
+ } from "./index-5nyznra1.js";
5
5
  import {
6
6
  AllRoutesBuilder,
7
7
  CsrArtifactBuilder,
8
8
  FontPruner,
9
9
  precompressArtifacts,
10
10
  SsrBaseArtifactBuilder
11
- } from "./index-a64esmtb.js";
11
+ } from "./index-vrwdx0zx.js";
12
12
  import"./index-w8kmx1b6.js";
13
13
  import"./index-q0y2jq9j.js";
14
14
  import"./index-hwkygn9s.js";
@@ -4,7 +4,7 @@ import {
4
4
  } from "./index-q0y2jq9j.js";
5
5
  import {
6
6
  Spinner
7
- } from "./index-2tv3fdx4.js";
7
+ } from "./index-5nyznra1.js";
8
8
 
9
9
  // pkgs/@akanjs/devkit/applicationReleasePackager.ts
10
10
  import { cp, mkdir, rm } from "fs/promises";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  WorkspaceExecutor,
4
4
  AppExecutor
5
- } from "./index-2tv3fdx4.js";
5
+ } from "./index-5nyznra1.js";
6
6
  import"./index-q0y2jq9j.js";
7
7
  import"./index-6wwzs1bc.js";
8
8
  import {
@@ -11,7 +11,7 @@ import {
11
11
  CsrArtifactBuilder,
12
12
  FontOptimizer,
13
13
  SsrBaseArtifactBuilder
14
- } from "./index-a64esmtb.js";
14
+ } from "./index-vrwdx0zx.js";
15
15
  import"./index-w8kmx1b6.js";
16
16
  import"./index-hwkygn9s.js";
17
17
  import"./index-n68jx79w.js";
@@ -2,8 +2,8 @@
2
2
  import {
3
3
  isPlaceholderAppId2,
4
4
  CapacitorApp2
5
- } from "./index-wt7qrtd4.js";
6
- import"./index-2tv3fdx4.js";
5
+ } from "./index-7f4dsf9v.js";
6
+ import"./index-5nyznra1.js";
7
7
  import"./index-6wwzs1bc.js";
8
8
  import"./index-q0y2jq9j.js";
9
9
  export {
@@ -2,24 +2,24 @@
2
2
  import"./index-q0y2jq9j.js";
3
3
  import {
4
4
  GlobalConfig
5
- } from "./index-m0xccmmm.js";
5
+ } from "./index-bw2marpf.js";
6
6
  import {
7
7
  Workspace,
8
8
  command
9
- } from "./index-0g7r8xz3.js";
10
- import"./index-2tv3fdx4.js";
9
+ } from "./index-b3ae16mg.js";
10
+ import"./index-5nyznra1.js";
11
11
  import"./index-6wwzs1bc.js";
12
- import"./index-te54x9zm.js";
13
- import"./index-sj5vxr8f.js";
14
- import"./index-vxtad5bd.js";
12
+ import"./index-yc1keaer.js";
13
+ import"./index-r8bd61d9.js";
14
+ import"./index-1nwxbr2y.js";
15
15
  import"./index-hwkygn9s.js";
16
16
  import"./index-kcxmv48c.js";
17
- import"./index-9077wzd2.js";
18
- import"./index-rtxxan88.js";
17
+ import"./index-t8gvwcrx.js";
18
+ import"./index-8tfmh0v6.js";
19
19
  import {
20
20
  CloudScript2
21
- } from "./index-2xp0kfkt.js";
22
- import"./index-j9yhg404.js";
21
+ } from "./index-ay8wj00x.js";
22
+ import"./index-ys7dvdb3.js";
23
23
 
24
24
  // pkgs/@akanjs/cli/cloud/cloud.command.ts
25
25
  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-ay8wj00x.js";
5
+ import"./index-8tfmh0v6.js";
6
+ import"./index-r8bd61d9.js";
7
+ import"./index-ys7dvdb3.js";
8
+ import"./index-1nwxbr2y.js";
9
+ import"./index-t8gvwcrx.js";
10
+ import"./index-yc1keaer.js";
11
+ import"./index-bw2marpf.js";
12
+ import"./index-b3ae16mg.js";
13
+ import"./index-hwkygn9s.js";
14
+ import"./index-5nyznra1.js";
15
+ import"./index-6wwzs1bc.js";
16
+ import"./index-kcxmv48c.js";
17
+ import"./index-q0y2jq9j.js";
18
+ export {
19
+ CloudScript2 as CloudScript
20
+ };
@@ -1 +1 @@
1
- {"byCommand":{"create-workspace":"workspace","generate-agent-rules":"workspace","lint":"workspace","lint-all":"workspace","sync-all":"workspace","init":"workspace","agent":"agent","create-application":"application","remove-application":"application","plan-slice":"application","sync":"application","compact":"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","start":"application","s":"application","start-ios":"application","si":"application","start-android":"application","sa":"application","release-ios":"application","release-android":"application","release-source":"application","codepush":"application","dbup":"application","dbdown":"application","configure-app":"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","set-llm":"cloud","reset-llm":"cloud","ask":"cloud","deploy-akan":"cloud","update":"cloud","download-env":"cloud","upload-env":"cloud","subspace":"subspace","guideline":"guideline","generate-instruction":"guideline","update-instruction":"guideline","generate-document":"guideline","reapply-instruction":"guideline","create-scalar":"scalar","remove-scalar":"scalar","create-ui":"primitive","add-field":"primitive","add-enum-field":"primitive","quality":"quality","repair":"repair","workflow":"workflow"}}
1
+ {"byCommand":{"create-workspace":"workspace","generate-agent-rules":"workspace","lint":"workspace","lint-all":"workspace","sync-all":"workspace","init":"workspace","agent":"agent","create-application":"application","remove-application":"application","plan-slice":"application","sync":"application","compact":"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","start":"application","s":"application","start-ios":"application","si":"application","start-android":"application","sa":"application","release-ios":"application","release-android":"application","release-source":"application","codepush":"application","dbup":"application","dbdown":"application","configure-app":"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","set-llm":"cloud","reset-llm":"cloud","ask":"cloud","deploy-akan":"cloud","update":"cloud","download-env":"cloud","upload-env":"cloud","subspace":"subspace","guideline":"guideline","generate-instruction":"guideline","update-instruction":"guideline","generate-document":"guideline","reapply-instruction":"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"}}
@@ -2,26 +2,26 @@
2
2
  import {
3
3
  Workspace,
4
4
  command
5
- } from "./index-0g7r8xz3.js";
5
+ } from "./index-b3ae16mg.js";
6
6
  import"./index-q0y2jq9j.js";
7
- import"./index-2tv3fdx4.js";
7
+ import"./index-5nyznra1.js";
8
8
  import"./index-6wwzs1bc.js";
9
9
  import"./index-by5gpp8x.js";
10
- import"./index-gyd220p2.js";
11
- import"./index-ktb5njgy.js";
10
+ import"./index-jwjaf9fy.js";
11
+ import"./index-15r9a10e.js";
12
12
  import {
13
13
  ContextScript
14
- } from "./index-y6n8nmny.js";
15
- import"./index-wt7qrtd4.js";
14
+ } from "./index-3pvkjza8.js";
15
+ import"./index-7f4dsf9v.js";
16
16
  import"./index-h7yw2z9n.js";
17
- import"./index-04bk599g.js";
18
- import"./index-ffvk10zz.js";
19
- import"./index-m0xccmmm.js";
20
- import"./index-te54x9zm.js";
21
- import"./index-5ystnsd5.js";
22
- import"./index-vyvre9en.js";
23
- import"./index-d43r08tf.js";
24
- import"./index-a17x49vg.js";
17
+ import"./index-em4swemt.js";
18
+ import"./index-8pkvrcv1.js";
19
+ import"./index-bw2marpf.js";
20
+ import"./index-yc1keaer.js";
21
+ import"./index-fr2x3qvv.js";
22
+ import"./index-sh88vtye.js";
23
+ import"./index-kbsach1y.js";
24
+ import"./index-ceph7zqj.js";
25
25
 
26
26
  // pkgs/@akanjs/cli/context/context.command.ts
27
27
  class ContextCommand extends command("context", [ContextScript], ({ public: target }) => ({
@@ -4,34 +4,14 @@ import {
4
4
  plainTextOf,
5
5
  HOST_SOURCE,
6
6
  DevLogBuffer
7
- } from "./index-sj5vxr8f.js";
7
+ } from "./index-r8bd61d9.js";
8
+ import {
9
+ writeClipboard
10
+ } from "./index-p6pbz9n5.js";
8
11
 
9
12
  // pkgs/@akanjs/cli/application/devTui.tsx
10
13
  import { render } from "ink";
11
14
 
12
- // pkgs/@akanjs/cli/clipboard.ts
13
- var clipboardCommands = () => {
14
- if (process.platform === "darwin")
15
- return [["pbcopy"]];
16
- if (process.platform === "win32")
17
- return [["clip"]];
18
- return [["wl-copy"], ["xclip", "-selection", "clipboard"], ["xsel", "--clipboard", "--input"]];
19
- };
20
- var writeClipboard = async (text) => {
21
- for (const command of clipboardCommands()) {
22
- try {
23
- const proc = Bun.spawn(command, {
24
- stdin: new TextEncoder().encode(text),
25
- stdout: "ignore",
26
- stderr: "ignore"
27
- });
28
- if (await proc.exited === 0)
29
- return true;
30
- } catch {}
31
- }
32
- return false;
33
- };
34
-
35
15
  // pkgs/@akanjs/cli/ui/DevTuiApp.tsx
36
16
  import { Box, Text, useInput } from "ink";
37
17
  import { useEffect, useState } from "react";
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  // pkgs/@akanjs/cli/application/devTuiView.ts
3
3
  var createDevTuiView = async (supervisor) => {
4
- const { DevTui } = await import("./devTui-m1atgkc9.js");
4
+ const { DevTui } = await import("./devTui-hmteztv3.js");
5
5
  return new DevTui(supervisor);
6
6
  };
7
7
  export {
@@ -4,21 +4,21 @@ import {
4
4
  runner,
5
5
  script,
6
6
  command
7
- } from "./index-0g7r8xz3.js";
7
+ } from "./index-b3ae16mg.js";
8
8
  import {
9
9
  FileSys
10
10
  } from "./index-q0y2jq9j.js";
11
- import"./index-2tv3fdx4.js";
11
+ import"./index-5nyznra1.js";
12
12
  import {
13
13
  getDirname2
14
14
  } from "./index-6wwzs1bc.js";
15
15
  import {
16
16
  Prompter
17
17
  } from "./index-h7yw2z9n.js";
18
- import"./index-m0xccmmm.js";
18
+ import"./index-bw2marpf.js";
19
19
  import {
20
20
  AiSession
21
- } from "./index-te54x9zm.js";
21
+ } from "./index-yc1keaer.js";
22
22
 
23
23
  // pkgs/@akanjs/cli/guideline/guideline.script.ts
24
24
  import { Logger } from "akanjs/common";
@@ -675,3 +675,72 @@ apps and libs never import it directly (`no-import-external-library`) — everyt
675
675
  error result rather than a silent empty answer, and the settled exchange renders as question-and-answer instead
676
676
  of a tool row. **Never re-implement it per screen** — a `st.tool("askAboutX")` that opens a modal is the same
677
677
  thing with a worse transcript — and a hook tool named `askUser` shadows it like any other built-in.
678
+
679
+ ## What The Page Draws
680
+ - **The page shows the agent's work, not just the transcript.** A chat panel is closed as often as it is open, and
681
+ a form that fills itself or a tab that switches on its own is a change the user watches happen with nothing
682
+ anywhere attributing it. So **the control a call was published from is ringed** where it stands, scrolled to
683
+ first when it is off screen, and **a pointer travels to it and presses it** — both on by default, and both
684
+ driven from the tool call itself rather than from a store action, which cannot tell the agent's write from the
685
+ user's.
686
+ - **It costs an app nothing, for the same reason `data-akan-action` does.** `onChange={st.do.setTitleOnTask}` by
687
+ reference is what annotates the control, and the annotation is what makes it findable — so the fields and verbs
688
+ that matter light up with no code. An inline arrow publishes no tool, carries no annotation, and therefore
689
+ draws nothing: one wrapper silently costs three things at once.
690
+ - **For a control the framework did not render, spread `agentAttrs`** from `akanjs/ui`:
691
+ `<button {...agentAttrs(run)} onClick={run}>`, where `run` is what `st.tool(…).exec(…)` returned. It reads the
692
+ name off the callable, so there is nothing to keep in sync and no `ref` to thread — and it earns the same E2E
693
+ selector and accessibility name an `akanjs/ui` control has. Never hand-write `data-akan-*`.
694
+ - **A control that shares its handler with its siblings takes a key**: `agentAttrs(switchTab, menu)`, in the same
695
+ vocabulary the call's argument uses. One tool serves a whole tab strip or a whole list, so without it every
696
+ namesake is interchangeable in the DOM and the page can say *what* the agent did but never *where* — which the
697
+ no-guessing rule then turns into drawing nothing. `Tab.Menu` passes its `menu` key; do the same for a row verb
698
+ whose id the call names.
699
+ - **Almost nothing is waited on.** The call starts the moment the effect is handed its event; a ring that lands a
700
+ frame later costs the turn nothing, and an animation that held a call would make the agent slower for a
701
+ decoration. A turn past four scrolls stops scrolling and keeps ringing — eight scrolls across a page is motion
702
+ sickness rather than attribution. **The one exception is `navigate`**, whose press has to land before the router
703
+ replaces the tree the link is in; it is capped at 600ms and the call goes either way.
704
+ - **What it refuses to draw is the point.** A name several rows answer to rings nothing rather than guessing a row,
705
+ a call an approval or a guard turned back is never drawn at all, a tool no control carries draws nothing, and a
706
+ backgrounded tab draws nothing. A ring on the wrong element is worse than no ring: it is the screen telling the
707
+ user something untrue about what just happened. **A control the screen is not actually showing is not pointed at
708
+ either, and the pointer goes rather than travelling to it**: `checkVisibility` answers about an element alone, so
709
+ one under a modal's backdrop, inside a drawer that has slid off, or faded to nothing all pass it while being
710
+ invisible, and a pointer sent there lands on a blank patch of overlay. The test is `elementFromPoint` at the
711
+ control's own centre, taken after the reveal has settled. **`navigate` is mostly in that last class** — the router is not
712
+ an element, so it draws nothing. A bar across the top of the page was tried for it and removed: it read as
713
+ chrome the page had grown rather than as the agent doing something, which is the opposite of attribution. What
714
+ it does draw is the **link already on screen that goes where it is going**, when exactly one does and the user
715
+ can already see it: that one is an element, and the pointer presses it before the route moves. Addresses are
716
+ compared as routes (`router.routeOf`), since the locale and base-path segments are on the `<a>` and never on the
717
+ tool argument. An off-screen link is left alone — scrolling to a link and then leaving the page it is on is two
718
+ motions for one act. **Link presence is a drawing condition, never a permission one**: the agent may navigate
719
+ anywhere the user could type, and a zone that must not leave one screen drops `navigate` through `builtins`.
720
+ - **Turn it off with `visual`** on `Agent.Chat` / `Agent.Zone` — `false` for all of it, `{ cursor: false }` or
721
+ `{ reveal: false }` for one effect. The pointer is chrome (`data-agent-ui`, `aria-hidden`,
722
+ `pointer-events: none`), so `readScreen` never reads it back and `highlight` can never aim at it.
723
+ - **`ToolActivity` is the channel underneath**, a `ToolRunner` host option and an `AgentSession.onActivity`, firing
724
+ `start` / `end` around the execution alone. It is deliberately not `progress`: that one fires only for a tool
725
+ that chose to report, and a tool that says nothing about itself is exactly the one whose effect arrives
726
+ unexplained. The `start` may answer a promise, and the call waits for it — the whole of what makes drawing a
727
+ click on a link possible.
728
+ - **`AgentSession.onTurn(running)` is the other half**, and the unit the pointer's life is measured in. A model's
729
+ calls arrive with its own writing between them, seconds each, so a pointer that lived for the length of a *call*
730
+ spent every turn vanishing and coming back. Only the conversation loop reports there — `compact` runs under the
731
+ same internal flag and drives nothing on screen.
732
+ - **The pointer presses on arrival, never on departure** — a press fired as it leaves is a click on whatever it
733
+ was still over. It glides only when the hop is far enough to be worth following (a third of a second to cross
734
+ fifty pixels reads as lag, not motion), and teleports otherwise. It appears at the first control it presses,
735
+ **drifts clear of what it pressed** and waits out the gap between calls there as a spinner — a person clicks and
736
+ takes the hand away, and a spinner left sitting on the button covers the change it just caused — and fades when
737
+ the turn ends; **a turn that
738
+ drove no control draws no pointer at all**, since parking one in a corner for a turn that only answered a
739
+ question claims something that did not happen. While a reveal scrolls, it holds still — as a person's does — and
740
+ carries a chevron pointing the way the view is travelling, because stillness over a sliding page otherwise reads
741
+ as a pointer that has come loose rather than as the one doing the scrolling. The ring answers *where* and the
742
+ pointer answers *who*, which is why they are one default rather than two.
743
+ - **A form patch fans out over the fields it named.** `fill<Model>Form` is published by the form rather than by any
744
+ one control, so it rings one control per field in the arguments — resolved through the same
745
+ `data-akan-state="<model>Form.<field>"` the setter annotates — capped at five. `writeOn<Model>(path, value)`
746
+ draws nothing, for the same reason it carries no annotation: there is no control to put one on.
@@ -3,7 +3,7 @@ import {
3
3
  CodegenLock,
4
4
  WorkspaceExecutor,
5
5
  AppExecutor
6
- } from "./index-2tv3fdx4.js";
6
+ } from "./index-5nyznra1.js";
7
7
  import"./index-q0y2jq9j.js";
8
8
  import"./index-6wwzs1bc.js";
9
9
  import {
@@ -7,7 +7,7 @@ import {
7
7
  isScannedRootEntry,
8
8
  AppExecutor,
9
9
  LibExecutor
10
- } from "./index-2tv3fdx4.js";
10
+ } from "./index-5nyznra1.js";
11
11
  import {
12
12
  FileSys
13
13
  } from "./index-q0y2jq9j.js";
@@ -19,7 +19,7 @@ import {
19
19
  import {
20
20
  workflowRunArtifactPath,
21
21
  workflowSyncDir
22
- } from "./index-gyd220p2.js";
22
+ } from "./index-jwjaf9fy.js";
23
23
 
24
24
  // pkgs/@akanjs/devkit/akanContext.ts
25
25
  import { readdir } from "fs/promises";
@@ -2,10 +2,10 @@
2
2
  import {
3
3
  runner,
4
4
  script
5
- } from "./index-0g7r8xz3.js";
5
+ } from "./index-b3ae16mg.js";
6
6
  import {
7
7
  LibExecutor
8
- } from "./index-2tv3fdx4.js";
8
+ } from "./index-5nyznra1.js";
9
9
  import {
10
10
  LibSource,
11
11
  formatLibStatuses
@@ -1,14 +1,14 @@
1
1
  // @bun
2
2
  import {
3
3
  AppExecutor
4
- } from "./index-2tv3fdx4.js";
4
+ } from "./index-5nyznra1.js";
5
5
  import {
6
6
  jsonText,
7
7
  createWorkflowBaselineSummary,
8
8
  buildAkanModuleContextIndex,
9
9
  createWorkflowStepRegistry,
10
10
  toolingRolloutGate
11
- } from "./index-gyd220p2.js";
11
+ } from "./index-jwjaf9fy.js";
12
12
  import {
13
13
  buildResourceList,
14
14
  codexMcpConfigPath,
@@ -19,33 +19,33 @@ import {
19
19
  upsertCodexMcpServerBlock,
20
20
  renderDoctorText,
21
21
  AkanContextAnalyzer
22
- } from "./index-ktb5njgy.js";
22
+ } from "./index-15r9a10e.js";
23
23
  import {
24
24
  CommandContainer,
25
25
  runner,
26
26
  script
27
- } from "./index-0g7r8xz3.js";
27
+ } from "./index-b3ae16mg.js";
28
28
  import {
29
29
  isPlaceholderAppId2
30
- } from "./index-wt7qrtd4.js";
30
+ } from "./index-7f4dsf9v.js";
31
31
  import {
32
32
  Prompter
33
33
  } from "./index-h7yw2z9n.js";
34
34
  import {
35
35
  RepairRunner
36
- } from "./index-04bk599g.js";
36
+ } from "./index-em4swemt.js";
37
37
  import {
38
38
  WorkflowRunner
39
- } from "./index-ffvk10zz.js";
39
+ } from "./index-8pkvrcv1.js";
40
40
  import {
41
41
  ModuleScript
42
- } from "./index-5ystnsd5.js";
42
+ } from "./index-fr2x3qvv.js";
43
43
  import {
44
44
  PrimitiveScript
45
- } from "./index-d43r08tf.js";
45
+ } from "./index-kbsach1y.js";
46
46
  import {
47
47
  ScalarScript
48
- } from "./index-a17x49vg.js";
48
+ } from "./index-ceph7zqj.js";
49
49
  import {
50
50
  getMobileTargets
51
51
  } from "./index-47pj3aee.js";
@@ -3576,6 +3576,7 @@ class AppExecutor extends SysExecutor {
3576
3576
  executor: this,
3577
3577
  getPath: (rel) => this.getPath(rel),
3578
3578
  fileExists: (rel) => FileSys.fileExists(this.getPath(rel)),
3579
+ readFile: (rel) => this.readFile(rel),
3579
3580
  writeFile: async (rel, content, opts) => {
3580
3581
  await this.writeFile(rel, content, opts);
3581
3582
  },
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  CommandExecutionError
4
- } from "./index-2tv3fdx4.js";
4
+ } from "./index-5nyznra1.js";
5
5
  import {
6
6
  resolveMobilePath,
7
7
  targetHtmlFilename
@@ -20,13 +20,13 @@ import {
20
20
  renderWorkflowApply,
21
21
  renderWorkflowValidation,
22
22
  renderWorkflowRunArtifact
23
- } from "./index-gyd220p2.js";
23
+ } from "./index-jwjaf9fy.js";
24
24
  import {
25
25
  AkanContextAnalyzer
26
- } from "./index-ktb5njgy.js";
26
+ } from "./index-15r9a10e.js";
27
27
  import {
28
28
  runner
29
- } from "./index-0g7r8xz3.js";
29
+ } from "./index-b3ae16mg.js";
30
30
 
31
31
  // pkgs/@akanjs/cli/workflow/workflow.runner.ts
32
32
  import { mkdir, readFile, writeFile } from "fs/promises";
@@ -3,20 +3,20 @@ import {
3
3
  getDefaultHostConfig,
4
4
  GlobalConfig,
5
5
  CloudApi
6
- } from "./index-m0xccmmm.js";
6
+ } from "./index-bw2marpf.js";
7
7
  import {
8
8
  WorkspaceExecutor,
9
9
  AppExecutor
10
- } from "./index-2tv3fdx4.js";
10
+ } from "./index-5nyznra1.js";
11
11
  import {
12
12
  AiSession
13
- } from "./index-te54x9zm.js";
13
+ } from "./index-yc1keaer.js";
14
14
  import {
15
15
  runner
16
- } from "./index-0g7r8xz3.js";
16
+ } from "./index-b3ae16mg.js";
17
17
  import {
18
18
  openBrowser
19
- } from "./index-sj5vxr8f.js";
19
+ } from "./index-r8bd61d9.js";
20
20
 
21
21
  // pkgs/@akanjs/cli/cloud/cloud.runner.ts
22
22
  import path from "path";
@@ -2,25 +2,25 @@
2
2
  import {
3
3
  GlobalConfig,
4
4
  CloudApi
5
- } from "./index-m0xccmmm.js";
5
+ } from "./index-bw2marpf.js";
6
6
  import {
7
7
  PkgExecutor
8
- } from "./index-2tv3fdx4.js";
8
+ } from "./index-5nyznra1.js";
9
9
  import {
10
10
  AiSession
11
- } from "./index-te54x9zm.js";
11
+ } from "./index-yc1keaer.js";
12
12
  import {
13
13
  script
14
- } from "./index-0g7r8xz3.js";
14
+ } from "./index-b3ae16mg.js";
15
15
  import {
16
16
  ApplicationScript
17
- } from "./index-sj5vxr8f.js";
17
+ } from "./index-r8bd61d9.js";
18
18
  import {
19
19
  PackageScript
20
- } from "./index-9077wzd2.js";
20
+ } from "./index-t8gvwcrx.js";
21
21
  import {
22
22
  CloudRunner
23
- } from "./index-rtxxan88.js";
23
+ } from "./index-8tfmh0v6.js";
24
24
 
25
25
  // pkgs/@akanjs/cli/cloud/cloud.script.ts
26
26
  import { Logger } from "akanjs/common";
@@ -9,7 +9,7 @@ import {
9
9
  LibExecutor,
10
10
  PkgExecutor,
11
11
  ModuleExecutor
12
- } from "./index-2tv3fdx4.js";
12
+ } from "./index-5nyznra1.js";
13
13
  import {
14
14
  getDirname2
15
15
  } from "./index-6wwzs1bc.js";