@akanjs/cli 3.0.0-alpha.102 → 3.0.0-alpha.103

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.
package/.build-stamp CHANGED
@@ -1 +1 @@
1
- f85744854c5059c6127e0a720de471b1722191744441237c6816d7c59ec0fc90
1
+ 708d95c2692df8b7a0bdb905802d48d38352e0305215030af6c3d6aa468a9460
@@ -131,6 +131,11 @@ apps and libs never import it directly (`no-import-external-library`) — everyt
131
131
  `data-agent-zone` container; guides follow the layout cascade (ancestors and own, never a sibling's). Zone
132
132
  membership is positional — there is no per-declaration zone key, so a lib component joins whatever zone the app
133
133
  mounts it in.
134
+ - **Two agents' turns run in parallel; their tool calls take turns.** Tool execution is serialized across the
135
+ whole page, because `AgentAbort` and `AgentProgress` reach the running call through a module slot rather than a
136
+ parameter — two calls in flight restore each other's slot and the second one's progress goes nowhere. Only the
137
+ execution queues: a zone parked on an approval card holds nothing up, since waiting for the user sits outside
138
+ the queue, and a call that is aborted releases it.
134
139
  - **Everything a zone publishes is named `<id>.<name>`,** and that name is what instructions must use. A bare
135
140
  `createVideoProject` inside a zone naming its tool `videoProjectDraft.createVideoProject` is a tool that does
136
141
  not exist: the model calls it, the surface answers `Unknown tool`, and a turn is gone. Build the name from the
@@ -438,16 +443,17 @@ apps and libs never import it directly (`no-import-external-library`) — everyt
438
443
  row, Tab completing its name, and Escape closing the menu and then, pressed again, the panel.
439
444
 
440
445
  ## Built-In Tools
441
- - The framework publishes five built-ins on every store surface: `navigate` (internal paths only, the same
442
- router `Link` rides), `goBack` (this session's history — global, because history is not a control a page owns and
443
- a page that draws no back link is not one you may not leave — a screen that must not be left withholds them
444
- with `builtins`, not with prose), `readScreen` (the rendered DOM as compact text —
445
- headings, links, control values, and `(disabled)` on a control or button that has it; the chat's own UI is
446
- skipped via `data-agent-ui`, and a password value is never read), `readState(key)` (one masked store key), and
447
- `highlight(target)`. Declaring a hook tool under one of those names shadows the built-in, so reuse them only to
448
- mean that. **There is no general-purpose wait**: a built-in one was reachable on every screen and a model spent
449
- it on whatever key it liked, parking turns nobody asked to park. Waiting belongs to the screen that knows what
450
- is worth waiting for — publish an `st.tool` beside the control that starts the work, and let it await the work.
446
+ - The framework publishes five built-ins on every store surface: `navigate` (internal paths only, the same router
447
+ `Link` rides), `goBack` (this session's history — global, because history is not a control a page owns and a page
448
+ that draws no back link is not one you may not leave — a screen that must not be left withholds them with `builtins`,
449
+ not with prose), `readScreen` (the rendered DOM as compact text — headings, links, control values, and `(disabled)`
450
+ on a control or button that has it; the chat's own UI is skipped via `data-agent-ui`, and a password value is never
451
+ read), `readState(key)` (one masked store key — a key that is unknown or that this screen does not read is refused
452
+ *with the keys it can* read, the way `readScreen` names its sections), and `highlight(target)`. Declaring a hook tool
453
+ under one of those names shadows the built-in, so reuse them only to mean that. **There is no general-purpose wait**:
454
+ a built-in one was reachable on every screen and a model spent it on whatever key it liked, parking turns nobody
455
+ asked to park. Waiting belongs to the screen that knows what is worth waiting for — publish an `st.tool` beside the
456
+ control that starts the work, and let it await the work.
451
457
  - **A tool that changes the screen waits for the screen before it answers.** `router.push` returns while the RSC
452
458
  payload is still in flight and a store action that fires `void fetch.*` commits a tick later, so `navigate`
453
459
  awaits `ScreenSettle.wait()` — DOM quiescence, bounded, because the client router hands its promise to nobody —
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akanjs/cli",
3
- "version": "3.0.0-alpha.102",
3
+ "version": "3.0.0-alpha.103",
4
4
  "sourceType": "module",
5
5
  "type": "module",
6
6
  "publishConfig": {
@@ -33,7 +33,7 @@
33
33
  "@langchain/openai": "^1.4.6",
34
34
  "@tailwindcss/node": "^4.3.0",
35
35
  "@trapezedev/project": "^7.1.4",
36
- "akanjs": "3.0.0-alpha.102",
36
+ "akanjs": "3.0.0-alpha.103",
37
37
  "chalk": "^5.6.2",
38
38
  "commander": "^14.0.3",
39
39
  "dayjs": "^1.11.20",