@akanjs/cli 3.0.0-alpha.39 → 3.0.0-alpha.40
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
|
+
873ee7e4176e7c5645844f46050d48c225f02463271a6932419b73784565ed10
|
|
@@ -702,6 +702,21 @@ apps and libs never import it directly (`no-import-external-library`) — everyt
|
|
|
702
702
|
reaches the chat as an attachment rather than the literal `[image]` it used to become. Persisting keeps each
|
|
703
703
|
attachment's name and drops its content: web storage is a few megabytes, one screenshot fills a chunk of it, and
|
|
704
704
|
a save that fails is silent — so keeping the bytes would quietly stop keeping the transcript.
|
|
705
|
+
- **Speech is one engine contract and the framework's own policy.** `<Agent.Chat voice={engine} />` takes a
|
|
706
|
+
`VoiceEngine` — `listen(handlers)` and `speak(sentence)`, both cancellable — and the chat decides everything
|
|
707
|
+
else: a press-to-talk microphone whose transcript lands in the composer to be corrected, one utterance per
|
|
708
|
+
press, sentence-at-a-time reading, barge-in on the next press or on Stop, and markdown stripped so `**bold**`
|
|
709
|
+
is not pronounced. **A reply is read aloud only when the ask arrived by voice**, so a typed question never turns
|
|
710
|
+
on the speakers — and it needs no wire field, because how a message was sent is the composer's own business.
|
|
711
|
+
The contract is a subscription rather than `listen(): Promise<string>` on purpose: a promise fits push-to-talk
|
|
712
|
+
and nothing else, so hands-free could then only arrive as a breaking change. `useSpeech` in
|
|
713
|
+
`libs/util/webkit` is the engine — the browser's own recognition and synthesis on the web, the Capacitor
|
|
714
|
+
plugins in a WebView, **which has neither on Android or iOS**, so `speech.plugin.ts` declares the permission and
|
|
715
|
+
the packages the native build needs. An engine answering `available()` false renders no microphone at all,
|
|
716
|
+
the same rule as publishing no tool for a control the screen does not draw.
|
|
717
|
+
- **`attach` and `voice` both carry functions, so a server layout cannot pass either.** A closure does not cross
|
|
718
|
+
the RSC boundary — `non-scalar-props-restricted` says so on `page/**` — so an app that wants either mounts the
|
|
719
|
+
chat from a small client component in `ui/` that calls the hook. `apps/akan/ui/DocsAgentChat.tsx` is the shape.
|
|
705
720
|
- **A dialog's close is the dialog's own dismissal, not a state flip.** `closeDialogIn<Ns>` (and `Dialog.Close`)
|
|
706
721
|
run through whatever `Dialog.Modal` registered, so the agent takes the exact path the X button takes —
|
|
707
722
|
`confirmClose` still prompts and `onCancel` still fires. A close that only set `open` to false would skip both,
|
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.40",
|
|
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.40",
|
|
38
38
|
"chalk": "^5.6.2",
|
|
39
39
|
"commander": "^14.0.3",
|
|
40
40
|
"dayjs": "^1.11.20",
|