@motebit/protocol 1.1.0 → 1.3.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.
Files changed (49) hide show
  1. package/dist/artifact-type.d.ts +118 -0
  2. package/dist/artifact-type.d.ts.map +1 -0
  3. package/dist/artifact-type.js +97 -0
  4. package/dist/artifact-type.js.map +1 -0
  5. package/dist/audience.d.ts +108 -0
  6. package/dist/audience.d.ts.map +1 -0
  7. package/dist/audience.js +104 -0
  8. package/dist/audience.js.map +1 -0
  9. package/dist/co-browse.d.ts +369 -0
  10. package/dist/co-browse.d.ts.map +1 -0
  11. package/dist/co-browse.js +64 -0
  12. package/dist/co-browse.js.map +1 -0
  13. package/dist/computer-use.d.ts +463 -3
  14. package/dist/computer-use.d.ts.map +1 -1
  15. package/dist/computer-use.js +40 -0
  16. package/dist/computer-use.js.map +1 -1
  17. package/dist/dispute.d.ts +150 -4
  18. package/dist/dispute.d.ts.map +1 -1
  19. package/dist/index.d.ts +311 -7
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +73 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/memory-events.d.ts +1 -1
  24. package/dist/memory-events.js +1 -1
  25. package/dist/money.d.ts +33 -0
  26. package/dist/money.d.ts.map +1 -0
  27. package/dist/money.js +41 -0
  28. package/dist/money.js.map +1 -0
  29. package/dist/perception.d.ts +308 -0
  30. package/dist/perception.d.ts.map +1 -0
  31. package/dist/perception.js +9 -0
  32. package/dist/perception.js.map +1 -0
  33. package/dist/retention-policy.d.ts +464 -0
  34. package/dist/retention-policy.d.ts.map +1 -0
  35. package/dist/retention-policy.js +128 -0
  36. package/dist/retention-policy.js.map +1 -0
  37. package/dist/sensitivity.d.ts +73 -0
  38. package/dist/sensitivity.d.ts.map +1 -0
  39. package/dist/sensitivity.js +97 -0
  40. package/dist/sensitivity.js.map +1 -0
  41. package/dist/skills.d.ts +334 -0
  42. package/dist/skills.d.ts.map +1 -0
  43. package/dist/skills.js +44 -0
  44. package/dist/skills.js.map +1 -0
  45. package/dist/transparency.d.ts +116 -0
  46. package/dist/transparency.d.ts.map +1 -0
  47. package/dist/transparency.js +67 -0
  48. package/dist/transparency.js.map +1 -0
  49. package/package.json +1 -1
@@ -0,0 +1,308 @@
1
+ import type { SensitivityLevel } from "./index.js";
2
+ /**
3
+ * Perception input — the typed surface for content the user delivers
4
+ * to a motebit by direct gesture (drag-drop on web/desktop, pinch-throw
5
+ * on spatial, share-sheet on mobile). Same shape the doctrine
6
+ * `motebit-computer.md` §"Supervised agency / minimum gesture set"
7
+ * names ("Drag a file / URL / snippet onto the slab → feed perception")
8
+ * but typed at the protocol layer so every surface produces and the
9
+ * runtime consumes a single shape.
10
+ *
11
+ * Two-level pattern. Categorical kinds are closed (the protocol-layer
12
+ * commitment); within-kind handlers are open (registered in-runtime
13
+ * per surface). Closure here makes the role bounded — adding a new
14
+ * categorical drop kind is a protocol bump (additive, registry append),
15
+ * not an open-ended free-for-all. Same shape as `SuiteId` /
16
+ * `GuestRail` / `ToolMode` (the agility-as-role pattern in
17
+ * `docs/doctrine/agility-as-role.md`).
18
+ *
19
+ * Drop-out provenance — when a motebit-produced artifact leaves the
20
+ * slab toward another destination — uses `ExecutionReceipt` (already
21
+ * in the protocol). This file covers only the in-direction substrate.
22
+ */
23
+ /**
24
+ * Categorical drop kinds the protocol commits to. Closed string-literal
25
+ * union; adding a new kind is a protocol-version bump.
26
+ *
27
+ * - `url` — a hyperlink, route resolves through the runtime's
28
+ * fetch-shaped tool path. Highest-frequency desktop/web intent
29
+ * ("show motebit this page"). Source frame optional.
30
+ * - `text` — a snippet of text, MIME-tagged when known
31
+ * (`text/plain`, `text/markdown`). Drag-from-selection, paste-as-
32
+ * drop, or programmatic "here's context."
33
+ * - `image` — raster bytes with a known MIME (`image/png`,
34
+ * `image/jpeg`, `image/webp`). The multimodal moment — "what is
35
+ * this?" Routes through whatever vision-capable provider is
36
+ * configured.
37
+ * - `file` — opaque bytes with filename + MIME. Deferred for v1.1
38
+ * because file-format proliferation is unbounded; ships when a
39
+ * concrete handler-extension consumer drives the registry shape.
40
+ * - `artifact` — a motebit-produced signed artifact (the bytes plus
41
+ * its `ExecutionReceipt`). Drag motebit-to-motebit. Deferred for
42
+ * v1.1 because multi-motebit UX isn't shipped.
43
+ *
44
+ * Future kind worth naming for review-time consideration but NOT in
45
+ * the v1 union (waits on `EmbodimentMode` protocol promotion):
46
+ *
47
+ * - `mode-grant` — drag a permission token onto the slab. e.g.
48
+ * "you may drive my desktop for this session." Add when
49
+ * `EmbodimentMode` lifts from `@motebit/render-engine` to
50
+ * `@motebit/protocol`.
51
+ */
52
+ export type DropPayloadKind = "url" | "text" | "image" | "file" | "artifact";
53
+ /**
54
+ * Where in the scene the drop is intended to land. Three physically-
55
+ * distinct targets in spatial; on 2D surfaces they collapse to "slab"
56
+ * by default since the user can't aim at a non-slab target without
57
+ * spatial separation.
58
+ *
59
+ * **The targets are NOT equivalent drop zones with different visual
60
+ * effects.** Each has meaningfully different persistence and
61
+ * governance scopes — implementing them with a uniform governance
62
+ * posture is the silent-persistent-mutation failure mode this
63
+ * doctrine exists to prevent.
64
+ *
65
+ * - `slab` — perception input ("the motebit sees this for this
66
+ * turn"). Turn/session-scoped persistence; the sensitivity
67
+ * classifier inspects the payload at the next AI call;
68
+ * `tier-bounded-by-source` per the `EmbodimentSensitivityRouting`
69
+ * of `shared_gaze` mode. v1 default for every surface that
70
+ * doesn't yet distinguish targets.
71
+ *
72
+ * - `creature` — body-bound carry ("this travels with the motebit
73
+ * across sessions"). Identity-adjacent state mutation: the
74
+ * payload is destined for the motebit's interior (memory graph,
75
+ * trust graph, capability bindings, persona preferences) rather
76
+ * than the workstation's turn context. **Stronger governance
77
+ * than slab is required:** explicit confirmation / signed user
78
+ * intent before any persistent state mutation. Closer to
79
+ * changing the agent's body than feeding task context.
80
+ * Spatial-first; deferred until the gesture surface (drag toward
81
+ * floating creature droplet) lands AND the per-target governance
82
+ * UX ships. Do NOT implement creature-drop with slab-drop's
83
+ * governance posture.
84
+ *
85
+ * - `ambient` — environmental context ("background reference for
86
+ * this session, not turn-perception"). Workspace-scoped
87
+ * persistence with source-consent + expiration. **Invariant:
88
+ * ambient references are consultable context, not automatic
89
+ * prompt context.** The motebit can reach for them when a turn
90
+ * calls for it, but ambient drops never auto-fill the prompt.
91
+ * Future implementations will be tempted to dump ambient bytes
92
+ * into every turn's context pack; that's the failure mode this
93
+ * invariant exists to prevent. Spatial-first; in glasses,
94
+ * dropping a reference into the user's physical workspace is the
95
+ * natural gesture.
96
+ *
97
+ * Field is optional; absent ≡ `slab`. Surfaces may set non-default
98
+ * targets once they implement BOTH the gesture detection (e.g.,
99
+ * Three.js raycast pick on 2D web; 3D hand-path pick on spatial)
100
+ * AND the per-target governance UX that makes elevation safe.
101
+ *
102
+ * **Dimensionality is not the gate; governance is.** A 2D web surface
103
+ * CAN distinguish the three targets via raycast at drop time
104
+ * (creature mesh hit / slab plane hit / no hit ≡ ambient). What
105
+ * actually defers `creature` and `ambient` is the per-target
106
+ * governance UX (creature: confirmation modal + chosen mutation
107
+ * semantic; ambient: workspace-scoped consultable store +
108
+ * retrieval-shaped API). Until those exist, `MotebitRuntime.feedPerception`
109
+ * fails closed on non-slab targets — surfaces that send `creature` or
110
+ * `ambient` payloads receive a clear error naming the missing
111
+ * consumer.
112
+ */
113
+ export type DropTarget = "slab" | "creature" | "ambient";
114
+ /**
115
+ * Attestation of **intentional delivery** — not content authenticity.
116
+ *
117
+ * The user's gesture proves they meant to deliver the payload to the
118
+ * motebit. It does NOT prove the payload is authentic, unforged, or
119
+ * what it claims to be: a user can drag a forged PDF, a misleading
120
+ * URL, or a tampered file, and the gesture still attests only that
121
+ * delivery was intentional. Authenticity of the content itself
122
+ * requires separate provenance — a source URL the runtime fetched,
123
+ * a cryptographic signature on the bytes, an `ExecutionReceipt`
124
+ * carried with the artifact, or a content hash the user-trusted
125
+ * source previously published. Keep the two distinct in audit logs
126
+ * and any prose-level claim about what a drop "vouches for."
127
+ *
128
+ * `surface` names which motebit surface produced the event so audit
129
+ * logs can reconstruct the gesture's physical context (DOM drop,
130
+ * WebXR pinch-release, share-sheet receive). For high-sensitivity
131
+ * tiers the runtime may cosign the attestation with the user's
132
+ * identity key; that path is deferred until per-tier signing UX
133
+ * lands.
134
+ *
135
+ * Discriminated union of attestation kinds:
136
+ *
137
+ * - `user-drag` — physical drag gesture delivered a payload to the
138
+ * surface. Carries optional `contentHashSha256` for binary kinds
139
+ * (`image`, `file`, `artifact`) where a hash gives the audit
140
+ * trail something to bind against.
141
+ *
142
+ * - `user-typed-intent` — user submitted a chat message. The
143
+ * gesture is the typing-and-send itself; consent flows through
144
+ * the same channel as the request. Used by the runtime to
145
+ * auto-grant control handoffs that originate inside the same
146
+ * turn as the typed message — re-confirming a typed instruction
147
+ * would violate the doctrine "do not confirm what the user can
148
+ * already see." Proactive idle work has no typed-intent
149
+ * attestation, so it always falls back to the explicit prompt
150
+ * band — fail-closed by default.
151
+ *
152
+ * `contentHashSha256` is optional and only meaningful on `user-drag`
153
+ * (typed text isn't byte-bound). The hash binds delivery to a
154
+ * specific byte sequence; it does not, on its own, attest to content
155
+ * authenticity.
156
+ */
157
+ export type UserActionAttestation = {
158
+ readonly kind: "user-drag";
159
+ readonly timestamp: number;
160
+ readonly surface: "web" | "desktop" | "mobile" | "spatial" | "cli";
161
+ readonly contentHashSha256?: string;
162
+ } | {
163
+ readonly kind: "user-typed-intent";
164
+ readonly timestamp: number;
165
+ readonly surface: "web" | "desktop" | "mobile" | "spatial" | "cli";
166
+ };
167
+ /**
168
+ * Discriminated union over the categorical kinds. Every surface produces
169
+ * one of these; the runtime's `feedPerception` consumes one of these.
170
+ * The `target` field is the spatial endpoint hint (defaults to `slab`).
171
+ *
172
+ * Bytes are carried inline as `Uint8Array` for `image` (and future
173
+ * `file`). On surfaces where the source content is referenced rather
174
+ * than embedded (e.g. a URL pointing at a remote image), the producing
175
+ * surface MAY pass the reference instead and let the runtime fetch
176
+ * with provider context — but the typed payload always names the kind
177
+ * so the runtime can branch.
178
+ */
179
+ export type DropPayload = {
180
+ kind: "url";
181
+ url: string;
182
+ sourceFrame?: string;
183
+ target?: DropTarget;
184
+ attestation: UserActionAttestation;
185
+ } | {
186
+ kind: "text";
187
+ text: string;
188
+ mimeType?: string;
189
+ target?: DropTarget;
190
+ attestation: UserActionAttestation;
191
+ } | {
192
+ kind: "image";
193
+ bytes: Uint8Array;
194
+ mimeType: string;
195
+ target?: DropTarget;
196
+ attestation: UserActionAttestation;
197
+ } | {
198
+ kind: "file";
199
+ bytes: Uint8Array;
200
+ filename: string;
201
+ mimeType: string;
202
+ target?: DropTarget;
203
+ attestation: UserActionAttestation;
204
+ } | {
205
+ kind: "artifact";
206
+ receiptHash: string;
207
+ payloadJson: string;
208
+ target?: DropTarget;
209
+ attestation: UserActionAttestation;
210
+ };
211
+ /**
212
+ * Resolve a `DropPayload`'s effective target with the v1 default
213
+ * applied. Surfaces that don't yet distinguish creature / ambient
214
+ * (everything pre-spatial-Phase-1B) land at `slab`.
215
+ */
216
+ export declare function resolveDropTarget(payload: DropPayload): DropTarget;
217
+ /**
218
+ * Which AI-call entry the runtime blocked. The runtime gates fire at
219
+ * five distinct sites today; the audit event names the site so log
220
+ * consumers can group / branch by entry without parsing free text.
221
+ */
222
+ export type SensitivityGateEntry = "sendMessage" | "sendMessageStreaming" | "generateActivation" | "generateCompletion" | "outbound_tool";
223
+ /**
224
+ * What elevated effective sensitivity above the explicit session
225
+ * tier. `session` means the user explicitly elevated via
226
+ * `setSessionSensitivity`; `slab_item` means a `tier-bounded-by-source`
227
+ * or `tier-bounded-by-tool` slab item contributed the higher tier
228
+ * (drops, classified tool outputs). Exhaustive: future elevation
229
+ * sources extend this union.
230
+ */
231
+ export type SensitivityElevationSource = "session" | "slab_item";
232
+ /**
233
+ * Payload for `EventType.SensitivityGateFired`. Emitted by the
234
+ * runtime's `assertSensitivityPermitsAiCall` BEFORE throwing
235
+ * `SovereignTierRequiredError`, so every blocked egress crossing
236
+ * leaves an inspectable trail.
237
+ *
238
+ * **Strictly metadata.** No raw drop content, no tool result bytes,
239
+ * no slab item payloads, no prompt strings. The audit trail names
240
+ * the decision (which gate / which tier / which provider) without
241
+ * carrying the sensitive data that triggered the gate. Logging the
242
+ * payload that caused the block would itself be a leak surface —
243
+ * the same kind of leak the gate exists to prevent.
244
+ *
245
+ * `slab_item_id` is optional and carries the slab item's ID when
246
+ * elevation came from a slab item; the ID is a content-free
247
+ * identifier (UUID-shape) that lets a forensic consumer correlate
248
+ * the audit event against the slab state at fire time without
249
+ * including the item's content.
250
+ *
251
+ * Doctrine: `motebit-computer.md` §"Mode contract — six declarations
252
+ * per mode." The audit-trail pivot converts the shipped fail-closed
253
+ * gate from invisible-but-correct into observable-and-provable.
254
+ */
255
+ export interface SensitivityGateFiredPayload {
256
+ /** Which AI-call entry was blocked. */
257
+ readonly entry: SensitivityGateEntry;
258
+ /** Explicit session tier at fire time (set via `setSessionSensitivity`). */
259
+ readonly session_sensitivity: SensitivityLevel;
260
+ /**
261
+ * Effective tier the gate decided on — `max(session,
262
+ * tier-bounded-slab-items)`. Equals `session_sensitivity` when no
263
+ * slab item elevated.
264
+ */
265
+ readonly effective_sensitivity: SensitivityLevel;
266
+ /** Provider mode at fire time. `unset` when surface didn't declare. */
267
+ /**
268
+ * Inline string-literal union of `ProviderMode` (declared in
269
+ * `@motebit/sdk::provider-mode.ts`) plus the `unset` sentinel.
270
+ * Inlined here rather than imported because @motebit/protocol sits
271
+ * below @motebit/sdk in the layer graph; if ProviderMode promotes
272
+ * to protocol later, this union narrows to `ProviderMode | "unset"`.
273
+ */
274
+ readonly provider_mode: "on-device" | "motebit-cloud" | "byok" | "unset";
275
+ /**
276
+ * What contributed the effective tier when it exceeds the explicit
277
+ * session tier. Absent when `effective_sensitivity ===
278
+ * session_sensitivity` (session itself was the source — no
279
+ * elevation beyond the explicit setter to attribute).
280
+ *
281
+ * Field-name choice: `via` not `source`. The closed
282
+ * `EmbodimentSourceCategory` union (`interior`, `sandboxed-tool`,
283
+ * `user-source`, etc.) lives on the mode contract and is matched by
284
+ * `check-mode-contract-readers` via `.source` / `{ source }` regex.
285
+ * Naming the audit field `source` would false-positive that gate
286
+ * (the gate's destructure detection can't distinguish object-literal
287
+ * write from destructure read), staling its `source` ALLOWLIST entry
288
+ * without an actual consumer. `via` reads naturally
289
+ * ("elevated via session" / "elevated via slab_item") and avoids
290
+ * the collision.
291
+ */
292
+ readonly elevated_by?: {
293
+ readonly via: SensitivityElevationSource;
294
+ /**
295
+ * Slab item ID that contributed the elevated tier — present when
296
+ * `via === "slab_item"`. Content-free identifier; useful for
297
+ * forensic correlation with slab state at fire time.
298
+ */
299
+ readonly slab_item_id?: string;
300
+ };
301
+ /**
302
+ * Tool name when `entry === "outbound_tool"`. Names the tool whose
303
+ * outbound dispatch was blocked. Tool-name strings are NOT
304
+ * sensitive (they're public capability names, not user content).
305
+ */
306
+ readonly tool_name?: string;
307
+ }
308
+ //# sourceMappingURL=perception.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perception.d.ts","sourceRoot":"","sources":["../src/perception.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Resolve a `DropPayload`'s effective target with the v1 default
3
+ * applied. Surfaces that don't yet distinguish creature / ambient
4
+ * (everything pre-spatial-Phase-1B) land at `slab`.
5
+ */
6
+ export function resolveDropTarget(payload) {
7
+ return payload.target ?? "slab";
8
+ }
9
+ //# sourceMappingURL=perception.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perception.js","sourceRoot":"","sources":["../src/perception.ts"],"names":[],"mappings":"AA+NA;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAoB;IACpD,OAAO,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC;AAClC,CAAC"}