@pouchy_ai/companion-sdk 0.41.0 → 0.43.0
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/CHANGELOG.md +46 -0
- package/README.md +15 -1
- package/dist/a2ui.d.ts +216 -0
- package/dist/a2ui.d.ts.map +1 -0
- package/dist/a2ui.js +622 -0
- package/dist/a2ui.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/protocol.d.ts +18 -0
- package/dist/protocol.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/a2ui.ts +881 -0
- package/src/index.ts +15 -0
- package/src/protocol.ts +18 -0
package/CHANGELOG.md
CHANGED
|
@@ -12,6 +12,52 @@ a protocol bump is always called out explicitly here.
|
|
|
12
12
|
|
|
13
13
|
## [Unreleased]
|
|
14
14
|
|
|
15
|
+
## [0.43.0] - 2026-07-26
|
|
16
|
+
|
|
17
|
+
Additive: a confirmation can now be rendered in the user's own language. No wire-protocol
|
|
18
|
+
bump (`PROTOCOL_VERSION` stays 1); no existing field changed or moved.
|
|
19
|
+
|
|
20
|
+
- **`summaryKey` / `summaryVars`** on `ConfirmRequestPayload` and `PendingConfirm` — the
|
|
21
|
+
same sentence as data (an i18n key `confirmSummary.*` plus its placeholder values)
|
|
22
|
+
alongside the English `summary`, which is unchanged and still always present. A host
|
|
23
|
+
that knows the user's language renders
|
|
24
|
+
`summaryKey ? localize(summaryKey, summaryVars) : summary`; a host that does nothing
|
|
25
|
+
keeps the exact behaviour it has today.
|
|
26
|
+
|
|
27
|
+
The server cannot localize this for you: the turn endpoint (`/input`) carries no
|
|
28
|
+
locale, so the sentence has to travel as data to the one process that knows the
|
|
29
|
+
user's language. Both fields are optional — absent for a tool that ships no keyed
|
|
30
|
+
summary, and on confirmations recorded before this release.
|
|
31
|
+
|
|
32
|
+
Shipped for Pouchy's own hosted confirm page, which was asking users to approve
|
|
33
|
+
payments against an English sentence regardless of the language they run Pouchy in.
|
|
34
|
+
|
|
35
|
+
## [0.42.0] - 2026-07-25
|
|
36
|
+
|
|
37
|
+
Additive: the Instant UI ⇄ Google A2UI v0.9 projection ships in the package.
|
|
38
|
+
No wire-protocol bump (`PROTOCOL_VERSION` stays 1); no existing export moved.
|
|
39
|
+
|
|
40
|
+
- **`toA2UI` / `fromA2UI`** — project an Instant UI panel (the
|
|
41
|
+
`companion.ui_action` `payload.interface`) losslessly to Google's A2UI v0.9
|
|
42
|
+
flat wire format and back, so a renderer built against the A2UI catalog can
|
|
43
|
+
draw Pouchy panels with the adapter in front. Previously the adapter lived
|
|
44
|
+
only in the app repo (`src/lib/genui/a2ui-adapter.ts`) and integrators had
|
|
45
|
+
to vendor the file; that path now delegates to this package. Concepts A2UI
|
|
46
|
+
has no standard slot for (Progress, Accordion, area/pie chart kinds,
|
|
47
|
+
`computed`, `when`, tones, etc.) ride a per-component `_pouchy` extension —
|
|
48
|
+
A2UI renderers ignore it; `fromA2UI` reconstructs the exact panel from it.
|
|
49
|
+
- **Instant UI panel types** — the strict panel/node type family
|
|
50
|
+
(`DynamicInterface`, `GenuiNode`, …) and the `INSTANT_UI_NODE_TYPES`
|
|
51
|
+
catalog (as data, for renderer capability checks) are exported alongside.
|
|
52
|
+
`toA2UI` accepts either the strict panel type or the loose
|
|
53
|
+
`payload.interface` exactly as `onRender` delivers it. Embedded Button /
|
|
54
|
+
table-row actions are typed as an opaque `EmbeddedAction { type }` — hosts
|
|
55
|
+
hand them back, never interpret them.
|
|
56
|
+
- **CDN bundle size** — the projection adds ~1.7KB gzip to the min bundle
|
|
57
|
+
(~15.7KB total) / ~3.2KB to the full one (~32.2KB); the size-gate budgets
|
|
58
|
+
were raised consciously (14→17KB min, 29→35KB full) per the gate's
|
|
59
|
+
contract.
|
|
60
|
+
|
|
15
61
|
## [0.41.0] - 2026-07-25
|
|
16
62
|
|
|
17
63
|
Additive: call-window generation fencing + world-state replay observability.
|
package/README.md
CHANGED
|
@@ -147,7 +147,7 @@ type-checks without a cast; `'*'` keeps the untyped envelope:
|
|
|
147
147
|
| `onRender(fn)` | `companion.ui_action` | **Instant UI** — draw `payload.interface` (platform-neutral genui schema) with your own renderer (web / iOS / Android / CLI). Needs `ui.render` |
|
|
148
148
|
| `onInterfaceUpdate(fn)` | `companion.ui_update` | live `{key,value}` update to an already-rendered panel (no rebuild) |
|
|
149
149
|
| `onSocialMessage(fn)` | `companion.social_message` | inbound A2A friend message, delivered cross-app. Needs `social.message` |
|
|
150
|
-
| `onConfirmRequest(fn)` | `companion.confirm_request` | a sensitive-op approval request. **Platform session tokens** (your end users): show your own confirm card and resolve it with `confirmAction` — this is how confirm-gated custom skills (POST / credentialed) run. First-party user tokens: observe-only — approval stays first-party (where the `stepUp:true` biometric gate lives) |
|
|
150
|
+
| `onConfirmRequest(fn)` | `companion.confirm_request` | a sensitive-op approval request. **Platform session tokens** (your end users): show your own confirm card and resolve it with `confirmAction` — this is how confirm-gated custom skills (POST / credentialed) run. First-party user tokens: observe-only — approval stays first-party (where the `stepUp:true` biometric gate lives). Payload `{ confirmId, scope, summary, summaryKey?, summaryVars?, stepUp? }` — render `summaryKey ? localize(summaryKey, summaryVars) : summary` to show the approval in the user's language (0.43.0) |
|
|
151
151
|
| `onAudio(fn)` | `companion.audio` | TTS clip (non-call modality). _(reserved — not emitted yet)_ |
|
|
152
152
|
| `onExpression(fn)` | `companion.expression` | avatar viseme / expression / gesture. _(reserved — not emitted yet)_ |
|
|
153
153
|
| `onVoiceInject(fn)` | `companion.voice_inject` | `fn({text, speak})` — a `voiceRelevant` world-state line to say aloud during a live call; route `text` to your voice session when `speak` |
|
|
@@ -169,6 +169,20 @@ Reference renderers ship in [`examples/`](../../examples): `web-instant-ui` (van
|
|
|
169
169
|
`native-instant-ui` (SwiftUI + Jetpack Compose), and `cli-skills` (terminal +
|
|
170
170
|
local/device skills).
|
|
171
171
|
|
|
172
|
+
**Already have an [A2UI](https://github.com/google/A2UI)-catalog renderer?**
|
|
173
|
+
(0.42.0) `toA2UI(payload.interface)` projects any panel losslessly to Google's
|
|
174
|
+
A2UI v0.9 flat wire format (standard component/field names; Pouchy-only
|
|
175
|
+
concepts ride a `_pouchy` extension A2UI renderers ignore), and `fromA2UI`
|
|
176
|
+
ingests a surface back. `INSTANT_UI_NODE_TYPES` lists the atom catalog as data
|
|
177
|
+
for capability checks. Embedded Button / table-row actions are opaque
|
|
178
|
+
`EmbeddedAction { type }` values — hand them back to the companion, never
|
|
179
|
+
interpret them.
|
|
180
|
+
|
|
181
|
+
```ts
|
|
182
|
+
import { toA2UI } from '@pouchy_ai/companion-sdk';
|
|
183
|
+
companion.onRender(({ interface: ui }) => myA2uiRenderer.render(toA2UI(ui)));
|
|
184
|
+
```
|
|
185
|
+
|
|
172
186
|
## Client methods (beyond the quickstart)
|
|
173
187
|
|
|
174
188
|
| Method | What it does |
|
package/dist/a2ui.d.ts
ADDED
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import type { RenderInterfacePayload } from './protocol.js';
|
|
2
|
+
export type StateValue = string | number | boolean;
|
|
3
|
+
/** A prop value that is either a literal or a live reference to a state key. */
|
|
4
|
+
export type ValueRef<T extends StateValue> = T | {
|
|
5
|
+
$state: string;
|
|
6
|
+
};
|
|
7
|
+
/** An action embedded in a Button / Table row — carried OPAQUELY through the
|
|
8
|
+
* projection (stuffed into the A2UI event context verbatim, restored on the
|
|
9
|
+
* way back). The app narrows it to its full AgentAction union; hosts treat it
|
|
10
|
+
* as data to hand back, never to interpret. */
|
|
11
|
+
export interface EmbeddedAction {
|
|
12
|
+
type: string;
|
|
13
|
+
}
|
|
14
|
+
export type GenuiTextTone = 'default' | 'muted' | 'strong';
|
|
15
|
+
export type GenuiButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger';
|
|
16
|
+
export type GenuiProgressVariant = 'default' | 'affection' | 'energy' | 'health' | 'tier';
|
|
17
|
+
export interface GenuiTextNode {
|
|
18
|
+
type: 'Text';
|
|
19
|
+
text?: string;
|
|
20
|
+
/** Template with `{key}` placeholders resolved against interface state. */
|
|
21
|
+
template?: string;
|
|
22
|
+
tone?: GenuiTextTone;
|
|
23
|
+
}
|
|
24
|
+
export interface GenuiButtonNode {
|
|
25
|
+
type: 'Button';
|
|
26
|
+
label: string;
|
|
27
|
+
variant?: GenuiButtonVariant;
|
|
28
|
+
action: EmbeddedAction | null;
|
|
29
|
+
}
|
|
30
|
+
export interface GenuiProgressNode {
|
|
31
|
+
type: 'Progress';
|
|
32
|
+
value: ValueRef<number>;
|
|
33
|
+
max?: number;
|
|
34
|
+
variant?: GenuiProgressVariant;
|
|
35
|
+
}
|
|
36
|
+
export interface GenuiIconNode {
|
|
37
|
+
type: 'Icon';
|
|
38
|
+
name: string;
|
|
39
|
+
size?: number;
|
|
40
|
+
}
|
|
41
|
+
export interface GenuiSliderNode {
|
|
42
|
+
type: 'Slider';
|
|
43
|
+
bind: string;
|
|
44
|
+
min?: number;
|
|
45
|
+
max?: number;
|
|
46
|
+
step?: number;
|
|
47
|
+
label?: string;
|
|
48
|
+
}
|
|
49
|
+
export interface GenuiSwitchNode {
|
|
50
|
+
type: 'Switch';
|
|
51
|
+
bind: string;
|
|
52
|
+
label?: string;
|
|
53
|
+
}
|
|
54
|
+
export interface GenuiSelectOption {
|
|
55
|
+
value: string;
|
|
56
|
+
label: string;
|
|
57
|
+
}
|
|
58
|
+
export interface GenuiSelectNode {
|
|
59
|
+
type: 'Select';
|
|
60
|
+
bind: string;
|
|
61
|
+
options: GenuiSelectOption[];
|
|
62
|
+
placeholder?: string;
|
|
63
|
+
}
|
|
64
|
+
export interface GenuiTextInputNode {
|
|
65
|
+
type: 'TextInput';
|
|
66
|
+
bind: string;
|
|
67
|
+
label?: string;
|
|
68
|
+
placeholder?: string;
|
|
69
|
+
multiline?: boolean;
|
|
70
|
+
maxLength?: number;
|
|
71
|
+
}
|
|
72
|
+
export type GenuiGroupDirection = 'row' | 'column';
|
|
73
|
+
export interface GenuiGroupNode {
|
|
74
|
+
type: 'Group';
|
|
75
|
+
direction: GenuiGroupDirection;
|
|
76
|
+
gap?: number;
|
|
77
|
+
wrap?: boolean;
|
|
78
|
+
children: GenuiNode[];
|
|
79
|
+
}
|
|
80
|
+
export interface GenuiImageNode {
|
|
81
|
+
type: 'Image';
|
|
82
|
+
src: string;
|
|
83
|
+
alt?: string;
|
|
84
|
+
ratio?: number;
|
|
85
|
+
}
|
|
86
|
+
export interface GenuiVideoNode {
|
|
87
|
+
type: 'Video';
|
|
88
|
+
src: string;
|
|
89
|
+
ratio?: number;
|
|
90
|
+
}
|
|
91
|
+
export interface GenuiAudioNode {
|
|
92
|
+
type: 'AudioPlayer';
|
|
93
|
+
src: string;
|
|
94
|
+
title?: string;
|
|
95
|
+
}
|
|
96
|
+
export interface GenuiMarkdownNode {
|
|
97
|
+
type: 'Markdown';
|
|
98
|
+
text: string;
|
|
99
|
+
}
|
|
100
|
+
export type GenuiChartKind = 'bar' | 'line' | 'area' | 'pie' | 'donut';
|
|
101
|
+
export interface GenuiChartDatum {
|
|
102
|
+
label?: string;
|
|
103
|
+
value: number;
|
|
104
|
+
}
|
|
105
|
+
export interface GenuiChartNode {
|
|
106
|
+
type: 'Chart';
|
|
107
|
+
chart: GenuiChartKind;
|
|
108
|
+
data: GenuiChartDatum[];
|
|
109
|
+
max?: number;
|
|
110
|
+
title?: string;
|
|
111
|
+
}
|
|
112
|
+
export interface GenuiTableNode {
|
|
113
|
+
type: 'Table';
|
|
114
|
+
columns: string[];
|
|
115
|
+
rows: string[][];
|
|
116
|
+
title?: string;
|
|
117
|
+
rowActions?: (EmbeddedAction | null)[];
|
|
118
|
+
}
|
|
119
|
+
export interface GenuiDatePickerNode {
|
|
120
|
+
type: 'DatePicker';
|
|
121
|
+
bind: string;
|
|
122
|
+
label?: string;
|
|
123
|
+
min?: string;
|
|
124
|
+
max?: string;
|
|
125
|
+
}
|
|
126
|
+
export interface GenuiWhen {
|
|
127
|
+
key: string;
|
|
128
|
+
equals?: StateValue;
|
|
129
|
+
truthy?: boolean;
|
|
130
|
+
}
|
|
131
|
+
export interface GenuiTab {
|
|
132
|
+
label: string;
|
|
133
|
+
children: GenuiNode[];
|
|
134
|
+
}
|
|
135
|
+
export interface GenuiTabsNode {
|
|
136
|
+
type: 'Tabs';
|
|
137
|
+
tabs: GenuiTab[];
|
|
138
|
+
bind?: string;
|
|
139
|
+
}
|
|
140
|
+
export interface GenuiAccordionSection {
|
|
141
|
+
label: string;
|
|
142
|
+
children: GenuiNode[];
|
|
143
|
+
open?: boolean;
|
|
144
|
+
}
|
|
145
|
+
export interface GenuiAccordionNode {
|
|
146
|
+
type: 'Accordion';
|
|
147
|
+
sections: GenuiAccordionSection[];
|
|
148
|
+
multi?: boolean;
|
|
149
|
+
}
|
|
150
|
+
export interface GenuiDividerNode {
|
|
151
|
+
type: 'Divider';
|
|
152
|
+
}
|
|
153
|
+
export interface GenuiCardNode {
|
|
154
|
+
type: 'Card';
|
|
155
|
+
title?: string;
|
|
156
|
+
children: GenuiNode[];
|
|
157
|
+
}
|
|
158
|
+
export type GenuiNode = (GenuiTextNode | GenuiButtonNode | GenuiProgressNode | GenuiIconNode | GenuiSliderNode | GenuiSwitchNode | GenuiSelectNode | GenuiTextInputNode | GenuiGroupNode | GenuiImageNode | GenuiChartNode | GenuiTableNode | GenuiDatePickerNode | GenuiTabsNode | GenuiAccordionNode | GenuiDividerNode | GenuiCardNode | GenuiVideoNode | GenuiAudioNode | GenuiMarkdownNode) & {
|
|
159
|
+
when?: GenuiWhen;
|
|
160
|
+
};
|
|
161
|
+
export interface GenuiComputed {
|
|
162
|
+
op: 'mul' | 'add' | 'sub' | 'div';
|
|
163
|
+
args: (string | number)[];
|
|
164
|
+
round?: number;
|
|
165
|
+
}
|
|
166
|
+
/** The Instant UI panel — what `companion.ui_action` carries in
|
|
167
|
+
* `payload.interface` (typed strictly here; the event payload declares the
|
|
168
|
+
* loose wire shape). */
|
|
169
|
+
export interface DynamicInterface {
|
|
170
|
+
title?: string;
|
|
171
|
+
nodes: GenuiNode[];
|
|
172
|
+
state?: Record<string, StateValue>;
|
|
173
|
+
computed?: Record<string, GenuiComputed>;
|
|
174
|
+
reportChanges?: boolean;
|
|
175
|
+
allowedActions?: string[];
|
|
176
|
+
}
|
|
177
|
+
/** What `toA2UI` accepts: the strict panel type, or the loose
|
|
178
|
+
* `payload.interface` exactly as `onRender` delivers it (already validated
|
|
179
|
+
* and clamped server-side, so the structural cast inside is safe). */
|
|
180
|
+
export type InstantUIInput = DynamicInterface | RenderInterfacePayload['interface'];
|
|
181
|
+
/** The Instant UI node-type catalog, as data — drift-pinned against the app's
|
|
182
|
+
* canonical GENUI_NODE_SET so the mirror can never silently lag a new atom. */
|
|
183
|
+
export declare const INSTANT_UI_NODE_TYPES: readonly ["Text", "Button", "Progress", "Icon", "Slider", "Switch", "Select", "TextInput", "Group", "Image", "Chart", "Table", "DatePicker", "Tabs", "Accordion", "Divider", "Card", "Video", "AudioPlayer", "Markdown"];
|
|
184
|
+
/** A2UI binding: a literal, a JSON-Pointer data binding, or a function call. */
|
|
185
|
+
export type A2UIValue = StateValue | {
|
|
186
|
+
path: string;
|
|
187
|
+
} | {
|
|
188
|
+
call: string;
|
|
189
|
+
args?: unknown;
|
|
190
|
+
};
|
|
191
|
+
export interface A2UIComponent {
|
|
192
|
+
id: string;
|
|
193
|
+
/** A2UI component type, e.g. "Text" / "Button" / "Row" / "pouchy/Progress". */
|
|
194
|
+
component: string;
|
|
195
|
+
/** Standard A2UI property bag (component-specific; see the mapping per type). */
|
|
196
|
+
[key: string]: unknown;
|
|
197
|
+
/** Pouchy-only reconstruction data for concepts A2UI has no standard for.
|
|
198
|
+
* A2UI renderers ignore it; fromA2UI() uses it to rebuild the exact node. */
|
|
199
|
+
_pouchy?: Record<string, unknown>;
|
|
200
|
+
}
|
|
201
|
+
/** An A2UI surface = a flat component map + a root id + the data model. The
|
|
202
|
+
* `pouchy` block carries panel-level extensions A2UI has no slot for. */
|
|
203
|
+
export interface A2UISurface {
|
|
204
|
+
root: string;
|
|
205
|
+
components: Record<string, A2UIComponent>;
|
|
206
|
+
dataModel: Record<string, StateValue>;
|
|
207
|
+
pouchy?: {
|
|
208
|
+
title?: string;
|
|
209
|
+
computed?: Record<string, GenuiComputed>;
|
|
210
|
+
reportChanges?: boolean;
|
|
211
|
+
allowedActions?: string[];
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
export declare function toA2UI(input: InstantUIInput): A2UISurface;
|
|
215
|
+
export declare function fromA2UI(surface: A2UISurface): DynamicInterface;
|
|
216
|
+
//# sourceMappingURL=a2ui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a2ui.d.ts","sourceRoot":"","sources":["../src/a2ui.ts"],"names":[],"mappings":"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"}
|