@akanjs/cli 3.0.0-alpha.34 → 3.0.0-alpha.35
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
|
-
|
|
1
|
+
19d013737b1748d534b589ea7399041a437db6f36d396f7ce0e2617c8883bf31
|
|
@@ -681,6 +681,10 @@ apps and libs never import it directly (`no-import-external-library`) — everyt
|
|
|
681
681
|
providers the way middleware is applied: `option.applyAdaptor(LlmAdaptorRole, ClaudeLlm)`, where the
|
|
682
682
|
implementation is an `adapt()` class in a `srvkit/` implementing `LlmAdaptor.chat(request, onDelta?)` — ignore
|
|
683
683
|
`onDelta` and the chat still answers whole.
|
|
684
|
+
- **A dialog's close is the dialog's own dismissal, not a state flip.** `closeDialogIn<Ns>` (and `Dialog.Close`)
|
|
685
|
+
run through whatever `Dialog.Modal` registered, so the agent takes the exact path the X button takes —
|
|
686
|
+
`confirmClose` still prompts and `onCancel` still fires. A close that only set `open` to false would skip both,
|
|
687
|
+
which is a different action wearing the same name.
|
|
684
688
|
- **`<Agent.Zone id="comments">` runs a second agent over one section, in parallel with the root.** Everything
|
|
685
689
|
mounted inside — `st.use` subscriptions, hook tools, Guides — belongs to that zone's own conversation *and*
|
|
686
690
|
stays visible to the root agent: **zones are views, never walls**, so wrapping a section costs the root nothing.
|
|
@@ -718,17 +722,36 @@ apps and libs never import it directly (`no-import-external-library`) — everyt
|
|
|
718
722
|
callable still drives the click a person makes. It does not throw: a tool schema is built during render, and an
|
|
719
723
|
agent-tooling mistake that aborted the render would cost the route its server rendering. `st.useState`'s `set`
|
|
720
724
|
degrades the same way, to read-only.
|
|
721
|
-
- **A component that renders once per row
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
`
|
|
725
|
+
- **A component that renders once per row never closes over its row's id — it takes the id as an argument.** A
|
|
726
|
+
tool that captured its own row would be fifty registrations of one name, forty-nine of them shadowed, and the
|
|
727
|
+
survivor would remove whichever row happened to mount last. Take the id instead — `removeTask(taskId)`, never
|
|
728
|
+
fifty `removeTask` — and every row's registration is then interchangeable, so a row component may publish after
|
|
729
|
+
all: say so with `shared: true` and the repeats are one declaration rather than a warned-about clash. The ids
|
|
730
|
+
come from the `<slice>.items` resource `Load.Units` and `Data.ListContainer` already expose. `shared` is a claim
|
|
731
|
+
about the *tool*, not a way to quiet a console: two rows whose tools would do different things (a different
|
|
732
|
+
`modal`, a different redirect) are not interchangeable, and that one wants a `namespace` or nothing at all.
|
|
725
733
|
- **`akanjs/ui` publishes its own controls, so an app writes nothing for them.** `Data.ListContainer` (and every
|
|
726
|
-
`Model.AdminPanel`) publishes its toolbar and its row
|
|
727
|
-
`Data.Pagination` publish `setPageOf<Model>`; `Layout.Sider`,
|
|
728
|
-
`System.ThemeToggle` publish the shell. **A component that can render
|
|
729
|
-
`namespace` prop and publishes nothing without it** — `Tab`, `Dialog`,
|
|
730
|
-
(`<Tab namespace="detail">`) and the tool becomes `switchTabInDetail`; leave it off
|
|
731
|
-
the agent, because two tabs answering to `switchTab` would mean the first to mount
|
|
734
|
+
`Model.AdminPanel`) publishes its toolbar and its row verbs; `Model.NewWrapper` (so `Model.New` too) publishes
|
|
735
|
+
`new<Model>`; `Load.Units`, `Load.Pagination` and `Data.Pagination` publish `setPageOf<Model>`; `Layout.Sider`,
|
|
736
|
+
`System.SelectLanguage`, `Link.Back` and `System.ThemeToggle` publish the shell. **A component that can render
|
|
737
|
+
twice on one screen takes a `namespace` prop and publishes nothing without it** — `Tab`, `Dialog`,
|
|
738
|
+
`ScreenNavigator`. Pass one (`<Tab namespace="detail">`) and the tool becomes `switchTabInDetail`; leave it off
|
|
739
|
+
and that tab is invisible to the agent, because two tabs answering to `switchTab` would mean the first to mount
|
|
740
|
+
loses. `Model.NewWrapper` takes the same prop but publishes without one, because its slice already names it —
|
|
741
|
+
a second create trigger for the same slice, opening a form seeded differently, is what needs the suffix.
|
|
742
|
+
- **The `Model.*` row wrappers publish their verb, taking the id.** `Model.EditWrapper`, `Model.ViewWrapper`,
|
|
743
|
+
`Model.RemoveWrapper` and `Model.Remove` publish `edit<Model>` / `view<Model>` / `remove<Model>` with a
|
|
744
|
+
`modelId` argument, so a list built from `Load.Units` and an app's own `Unit` reaches the same verbs an
|
|
745
|
+
`AdminPanel` does. `Model.SureToRemove` publishes the same — except under `typeNameToRemove`, where it
|
|
746
|
+
publishes nothing: that gate makes a person retype the model's name, an approval card is one click, and
|
|
747
|
+
offering the lever at a friction the screen does not have is not the same control.
|
|
748
|
+
- **A modal publishes its verbs while it is open, and only then.** `Model.EditModal` publishes `submit<Model>`
|
|
749
|
+
and `cancelEditOf<Model>`, `Model.ViewModal` publishes `closeViewOf<Model>`, and `Model.ViewEditModal`
|
|
750
|
+
publishes `edit<Model>` / `submit<Model>` / `closeViewOf<Model>` — each from a subtree that mounts with the
|
|
751
|
+
open modal, never from the component that merely holds it. That is what makes a list legal: `Data.CardList`
|
|
752
|
+
renders one editor per row, and at most one of them is ever open, so one name is registered rather than fifty.
|
|
753
|
+
It also means the verb is absent from the catalogue while nothing is open, which is honest — and costs the
|
|
754
|
+
agent nothing, because the catalogue is re-read on the turn that follows the tool call that opened the form.
|
|
732
755
|
- **A form control publishes its own setter, and reading a form publishes one tool that fills several at once.**
|
|
733
756
|
Both are free: an app writes no `st.tool` for a form. A `Field.*` / `Input.*` / `Select` / `Switch` handed
|
|
734
757
|
`onChange={st.do.setTitleOnTask}` **by reference** publishes `setTitleOnTask` while it is on screen — the same
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@akanjs/cli",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.35",
|
|
4
4
|
"sourceType": "module",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"@langchain/openai": "^1.4.6",
|
|
35
35
|
"@tailwindcss/node": "^4.3.0",
|
|
36
36
|
"@trapezedev/project": "^7.1.4",
|
|
37
|
-
"akanjs": "3.0.0-alpha.
|
|
37
|
+
"akanjs": "3.0.0-alpha.35",
|
|
38
38
|
"chalk": "^5.6.2",
|
|
39
39
|
"commander": "^14.0.3",
|
|
40
40
|
"dayjs": "^1.11.20",
|