@fungi.computer/agar 0.4.0 → 0.6.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.
@@ -24,6 +24,11 @@ export declare const FungiDelegationReplySchema: z.ZodLazy<z.ZodObject<{
24
24
  outcome_unknown: "outcome_unknown";
25
25
  }>;
26
26
  diagnostic: z.ZodOptional<z.ZodString>;
27
+ waitingOnYou: z.ZodOptional<z.ZodArray<z.ZodObject<{
28
+ itemId: z.ZodLazy<z.ZodString>;
29
+ kind: z.ZodString;
30
+ summary: z.ZodString;
31
+ }, z.core.$strict>>>;
27
32
  }, z.core.$strict>>;
28
33
  /** A delegated Agent's reply as the admitting host authenticated it. */
29
34
  export type FungiDelegationReply = z.infer<typeof FungiDelegationReplySchema>;
@@ -41,6 +46,8 @@ export declare const FungiMessageMetaSchema: z.ZodObject<{
41
46
  delegation: z.ZodOptional<z.ZodObject<{
42
47
  ancestors: z.ZodArray<z.ZodLazy<z.ZodString>>;
43
48
  maxDepth: z.ZodNumber;
49
+ steer: z.ZodOptional<z.ZodLiteral<true>>;
50
+ goal: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodLiteral<false>]>>;
44
51
  reply: z.ZodOptional<z.ZodLazy<z.ZodObject<{
45
52
  agentId: z.ZodLazy<z.ZodString>;
46
53
  sessionId: z.ZodLazy<z.ZodString>;
@@ -53,6 +60,11 @@ export declare const FungiMessageMetaSchema: z.ZodObject<{
53
60
  outcome_unknown: "outcome_unknown";
54
61
  }>;
55
62
  diagnostic: z.ZodOptional<z.ZodString>;
63
+ waitingOnYou: z.ZodOptional<z.ZodArray<z.ZodObject<{
64
+ itemId: z.ZodLazy<z.ZodString>;
65
+ kind: z.ZodString;
66
+ summary: z.ZodString;
67
+ }, z.core.$strict>>>;
56
68
  }, z.core.$strict>>>;
57
69
  }, z.core.$strict>>;
58
70
  }, z.core.$strict>;
@@ -30,6 +30,16 @@ export const FungiDelegationReplySchema = z.lazy(() => z.strictObject({
30
30
  ]),
31
31
  /** Bounded, single-line terminal diagnostic for work that did not complete. */
32
32
  diagnostic: z.string().min(1).max(200).optional(),
33
+ /** Open items of the replying Session that now wait on the recipient. */
34
+ waitingOnYou: z
35
+ .array(z.strictObject({
36
+ itemId: identifier,
37
+ kind: z.string().min(1).max(64),
38
+ summary: z.string().min(1).max(200),
39
+ }))
40
+ .min(1)
41
+ .max(8)
42
+ .optional(),
33
43
  }));
34
44
  /**
35
45
  * The metadata the host attaches to every prompt and operator line it admits.
@@ -44,6 +54,12 @@ export const FungiMessageMetaSchema = z.strictObject({
44
54
  .strictObject({
45
55
  ancestors: z.array(identifier).max(8),
46
56
  maxDepth: z.number().int().min(1).max(8),
57
+ /** The sender asked to steer the recipient's running turn, not queue behind it. */
58
+ steer: z.literal(true).optional(),
59
+ /** A new recipient Session's objective; false opts out of an automatic goal. */
60
+ goal: z
61
+ .union([z.string().min(1).max(4_000), z.literal(false)])
62
+ .optional(),
47
63
  /**
48
64
  * Present only on a line the host admitted as an authenticated reply;
49
65
  * a line's text never sets it.
package/dist/agents.js CHANGED
@@ -150,13 +150,22 @@ async function openOperationHandles(openRead, openWrite) {
150
150
  return {
151
151
  fetch: async (request) => {
152
152
  ensureOpen();
153
+ request.signal.throwIfAborted();
153
154
  const handle = request.method === "GET" ||
154
155
  request.method === "HEAD" ||
155
156
  openRead === openWrite
156
157
  ? read
157
158
  : await (write ??= openWrite());
158
159
  ensureOpen();
159
- return decodeResponse(await handle.fetch(request));
160
+ request.signal.throwIfAborted();
161
+ const response = decodeResponse(await handle.fetch(request));
162
+ if (response.body === null)
163
+ return response;
164
+ // Request signals do not cross Cap'n Web. Cancelling the local response
165
+ // pipeline cancels its remote body, including EventSource's locked reader.
166
+ return new Response(response.body.pipeThrough(new TransformStream(), {
167
+ signal: request.signal,
168
+ }), response);
160
169
  },
161
170
  close: () => {
162
171
  if (!closing) {
@@ -3,7 +3,7 @@ import * as Schema from "effect/Schema";
3
3
  import { appApiSchema, appDeclarationSchema, } from "@fungi.computer/puffball/app";
4
4
  /** Build-only API projection from the schemas used by runtime calls. */
5
5
  export function buildAppApi(backend) {
6
- let api = {
6
+ const api = {
7
7
  methods: Object.fromEntries(Object.entries(backend.methods).map(([name, method]) => [
8
8
  name,
9
9
  {
@@ -14,8 +14,7 @@ export function buildAppApi(backend) {
14
14
  ])),
15
15
  };
16
16
  if (backend.events !== undefined)
17
- api = {
18
- ...api,
17
+ Object.assign(api, {
19
18
  events: Object.fromEntries(Object.entries(backend.events).map(([name, event]) => [
20
19
  name,
21
20
  {
@@ -23,9 +22,9 @@ export function buildAppApi(backend) {
23
22
  payload: z.toJSONSchema(event.payload, { io: "output" }),
24
23
  },
25
24
  ])),
26
- };
25
+ });
27
26
  if (backend.toolFamily !== undefined)
28
- api = { ...api, toolFamily: backend.toolFamily };
27
+ Object.assign(api, { toolFamily: backend.toolFamily });
29
28
  return Schema.decodeUnknownSync(appApiSchema)(api);
30
29
  }
31
30
  /** Strict build-only declaration generation; Workers never import this module. */
@@ -23,8 +23,6 @@ export type MethodPolicy = Readonly<{
23
23
  requires: readonly AppCapabilityId[];
24
24
  /** Omit this method from Workflow and tool discovery; direct calls keep their validators. */
25
25
  hidden?: true;
26
- /** Request anonymous read admission; hosts still require explicit installer approval. */
27
- anonymous?: true;
28
26
  /** Allow the shared Pending result while this method is still working. */
29
27
  pending?: true;
30
28
  /** Past tense for timelines ("made", "wrote"); the row itself comes from {@link MethodPresentation}. */
@@ -26,8 +26,6 @@ export function defineAppMethod(method) {
26
26
  policy = { ...policy, pending: true };
27
27
  if (method.hidden === true)
28
28
  policy = { ...policy, hidden: true };
29
- if (method.anonymous === true)
30
- policy = { ...policy, anonymous: true };
31
29
  const call = async (rawInput, context, rawCaller) => {
32
30
  const caller = parseAppMethodCallContext(rawCaller);
33
31
  const parsed = method.input.parse(rawInput);
package/dist/backend.d.ts CHANGED
@@ -10,8 +10,7 @@ export declare const appBackend: CapabilityContract<{
10
10
  /**
11
11
  * Call one of this App's declared, typed methods through its host. Unlike
12
12
  * `appBackend`, the host knows which method is called, so it can apply the
13
- * method's declared effect (for example, allow only `read` methods to a
14
- * visitor of a public App).
13
+ * method's declared effect.
15
14
  */
16
15
  export declare const appMethods: CapabilityContract<{
17
16
  /** Call the named method with JSON-encoded `input`; resolves with its JSON result. */
package/dist/backend.js CHANGED
@@ -9,8 +9,7 @@ export const appBackend = defineCapability("app.backend", 1, z.lazy(() => rpcHan
9
9
  /**
10
10
  * Call one of this App's declared, typed methods through its host. Unlike
11
11
  * `appBackend`, the host knows which method is called, so it can apply the
12
- * method's declared effect (for example, allow only `read` methods to a
13
- * visitor of a public App).
12
+ * method's declared effect.
14
13
  */
15
14
  export const appMethods = defineCapability("app.methods", 1, z.lazy(() => rpcHandleSchema({
16
15
  call: rpcMethod(rpcDataSchema(z.unknown().transform((value) => parseJsonValue(value)))),
package/dist/errors.d.ts CHANGED
@@ -5,6 +5,8 @@ export type MediaProviderDiagnostic = Readonly<{
5
5
  category: "InferenceUpstreamError" | "AiInternalError" | "TypeError" | "AbortError" | "TimeoutError" | "Error";
6
6
  /** Four- or five-digit provider prefix, or null when absent. */
7
7
  code: number | null;
8
+ /** Host-classified provider refusal, independent of public error prose. */
9
+ reason?: "credits_exhausted";
8
10
  }> | Readonly<{
9
11
  /** A completed video result could not be downloaded. */
10
12
  category: "result_download";
@@ -15,25 +17,15 @@ export type MediaProviderDiagnostic = Readonly<{
15
17
  export declare function decodeMediaProviderDiagnostic(input: unknown): MediaProviderDiagnostic;
16
18
  /**
17
19
  * Documentable wire projection of the canonical diagnostic grammar.
18
- * Maintained converters preserve its closed objects and numeric bounds;
19
- * decoding still returns the declaration-safe public diagnostic type.
20
+ * Its owner supplies the native Zod dialect so output declarations remain
21
+ * documentable without transforms, coercions or an unchecked type assertion.
20
22
  */
21
- export declare const mediaProviderDiagnosticWireSchema: z.ZodPipe<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, z.ZodTransform<Readonly<{
22
- /** Allowlisted Workers AI category; never a provider message. */
23
- category: "InferenceUpstreamError" | "AiInternalError" | "TypeError" | "AbortError" | "TimeoutError" | "Error";
24
- /** Four- or five-digit provider prefix, or null when absent. */
25
- code: number | null;
26
- }> | Readonly<{
27
- /** A completed video result could not be downloaded. */
28
- category: "result_download";
29
- /** Native Response status, including zero. */
30
- status: number;
31
- }>, unknown>>;
23
+ export declare const mediaProviderDiagnosticWireSchema: z.ZodType<MediaProviderDiagnostic>;
32
24
  /** Decode an ordinary Error name without retaining arbitrary upstream text. */
33
25
  export declare function decodeMediaProviderErrorCategory(input: string | undefined): Exclude<MediaProviderDiagnostic["category"], "result_download">;
34
26
  /** The closed set of reasons an AppError can state; every SDK and
35
27
  * host-reported failure is tagged with exactly one of these codes. */
36
- export declare const appErrorCodes: readonly ["CANCELLED", "CAPABILITY_DENIED", "CAPABILITY_REVOKED", "COMMAND_NOT_DECLARED", "CONFLICT", "DELIVERY_PENDING", "DISCONNECTED", "FILE_TOO_LARGE", "HOST_FAILURE", "IDENTITY", "INSUFFICIENT_CREDIT", "INVALID_ARGUMENT", "PROTOCOL", "SAFETY_FILTER_REFUSED", "SELECTION_CHANGED", "TIMEOUT"];
28
+ export declare const appErrorCodes: readonly ["CANCELLED", "CAPABILITY_DENIED", "CAPABILITY_REVOKED", "COMMAND_NOT_DECLARED", "CONFLICT", "DELIVERY_PENDING", "DISCONNECTED", "FILE_TOO_LARGE", "HOST_FAILURE", "IDENTITY", "INSUFFICIENT_CREDIT", "INVALID_ARGUMENT", "MEDIA_PROVIDER_FAILURE", "MEDIA_PROVIDER_FAILURE_UNCHARGED", "PROTOCOL", "SAFETY_FILTER_REFUSED", "SELECTION_CHANGED", "TIMEOUT"];
37
29
  /** One closed App error code from `appErrorCodes`. */
38
30
  export type AppErrorCode = (typeof appErrorCodes)[number];
39
31
  /** One pending-delivery refusal shared by admission and the shell. */
package/dist/errors.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as Schema from "effect/Schema";
2
2
  import * as Option from "effect/Option";
3
3
  import * as z from "zod";
4
- import { mediaProviderDiagnosticSchema, mediaProviderErrorCategorySchema, } from "./internal/media-diagnostic.js";
4
+ import { mediaProviderDiagnosticSchema, mediaProviderDiagnosticZodSchema, mediaProviderErrorCategorySchema, } from "./internal/media-diagnostic.js";
5
5
  /** Decode only safe provider facts, rejecting unmodeled private fields. */
6
6
  export function decodeMediaProviderDiagnostic(input) {
7
7
  // Bidirectional projection check, erased from the Promise declaration graph.
@@ -11,14 +11,10 @@ export function decodeMediaProviderDiagnostic(input) {
11
11
  }
12
12
  /**
13
13
  * Documentable wire projection of the canonical diagnostic grammar.
14
- * Maintained converters preserve its closed objects and numeric bounds;
15
- * decoding still returns the declaration-safe public diagnostic type.
14
+ * Its owner supplies the native Zod dialect so output declarations remain
15
+ * documentable without transforms, coercions or an unchecked type assertion.
16
16
  */
17
- export const mediaProviderDiagnosticWireSchema = z
18
- .fromJSONSchema(Schema.toJsonSchemaDocument(mediaProviderDiagnosticSchema, {
19
- onExcessProperty: "error",
20
- }).schema)
21
- .transform(decodeMediaProviderDiagnostic);
17
+ export const mediaProviderDiagnosticWireSchema = mediaProviderDiagnosticZodSchema;
22
18
  /** Decode an ordinary Error name without retaining arbitrary upstream text. */
23
19
  export function decodeMediaProviderErrorCategory(input) {
24
20
  return (Option.getOrUndefined(Schema.decodeUnknownOption(mediaProviderErrorCategorySchema)(input)) ?? "Error");
@@ -38,6 +34,8 @@ export const appErrorCodes = [
38
34
  "IDENTITY",
39
35
  "INSUFFICIENT_CREDIT",
40
36
  "INVALID_ARGUMENT",
37
+ "MEDIA_PROVIDER_FAILURE",
38
+ "MEDIA_PROVIDER_FAILURE_UNCHARGED",
41
39
  "PROTOCOL",
42
40
  "SAFETY_FILTER_REFUSED",
43
41
  "SELECTION_CHANGED",
@@ -116,13 +114,21 @@ const errorCopy = {
116
114
  title: "Request not accepted",
117
115
  message: "The App couldn't use the details in this request.",
118
116
  },
117
+ MEDIA_PROVIDER_FAILURE: {
118
+ title: "Generation failed",
119
+ message: "The model couldn't complete this generation. Change the prompt or model and send again.",
120
+ },
121
+ MEDIA_PROVIDER_FAILURE_UNCHARGED: {
122
+ title: "Generation failed",
123
+ message: "The model couldn't complete this generation. You weren't charged. Change the prompt or model and send again.",
124
+ },
119
125
  PROTOCOL: {
120
126
  title: "Couldn't read the response",
121
127
  message: "The App received a response it couldn't use.",
122
128
  },
123
129
  SAFETY_FILTER_REFUSED: {
124
- title: "Safety filter refused this prompt",
125
- message: "The model's safety filter refused this prompt — try rewording.",
130
+ title: "Generation refused",
131
+ message: "The model refused this generation. Change the prompt or reference image and send again.",
126
132
  },
127
133
  SELECTION_CHANGED: {
128
134
  title: "Selection changed",
@@ -1,11 +1,29 @@
1
1
  import * as Schema from "effect/Schema";
2
+ import * as z from "zod";
2
3
  /** Names emitted by the maintained Workers AI boundary, never arbitrary names. */
3
4
  export declare const mediaProviderErrorCategorySchema: Schema.Literals<readonly ["InferenceUpstreamError", "AiInternalError", "TypeError", "AbortError", "TimeoutError", "Error"]>;
4
5
  /** One canonical grammar for safe provider facts across Media transports. */
5
6
  export declare const mediaProviderDiagnosticSchema: Schema.Union<readonly [Schema.Struct<{
6
7
  readonly category: Schema.Literals<readonly ["InferenceUpstreamError", "AiInternalError", "TypeError", "AbortError", "TimeoutError", "Error"]>;
7
8
  readonly code: Schema.NullOr<Schema.Int>;
9
+ readonly reason: Schema.optionalKey<Schema.Literal<"credits_exhausted">>;
8
10
  }>, Schema.Struct<{
9
11
  readonly category: Schema.Literal<"result_download">;
10
12
  readonly status: Schema.Int;
11
13
  }>]>;
14
+ /** Documentable Promise transport grammar; this module owns both schema dialects. */
15
+ export declare const mediaProviderDiagnosticZodSchema: z.ZodUnion<readonly [z.ZodObject<{
16
+ category: z.ZodEnum<{
17
+ InferenceUpstreamError: "InferenceUpstreamError";
18
+ AiInternalError: "AiInternalError";
19
+ TypeError: "TypeError";
20
+ AbortError: "AbortError";
21
+ TimeoutError: "TimeoutError";
22
+ Error: "Error";
23
+ }>;
24
+ code: z.ZodNullable<z.ZodNumber>;
25
+ reason: z.ZodOptional<z.ZodLiteral<"credits_exhausted">>;
26
+ }, z.core.$strict>, z.ZodObject<{
27
+ category: z.ZodLiteral<"result_download">;
28
+ status: z.ZodNumber;
29
+ }, z.core.$strict>]>;
@@ -1,21 +1,47 @@
1
1
  import * as Schema from "effect/Schema";
2
- /** Names emitted by the maintained Workers AI boundary, never arbitrary names. */
3
- export const mediaProviderErrorCategorySchema = Schema.Literals([
2
+ import * as z from "zod";
3
+ const categories = [
4
4
  "InferenceUpstreamError",
5
5
  "AiInternalError",
6
6
  "TypeError",
7
7
  "AbortError",
8
8
  "TimeoutError",
9
9
  "Error",
10
- ]);
10
+ ];
11
+ const providerCodeBounds = { minimum: 0, maximum: 99_999 };
12
+ const responseStatusBounds = { minimum: 0, maximum: 599 };
13
+ /** Names emitted by the maintained Workers AI boundary, never arbitrary names. */
14
+ export const mediaProviderErrorCategorySchema = Schema.Literals(categories);
11
15
  /** One canonical grammar for safe provider facts across Media transports. */
12
16
  export const mediaProviderDiagnosticSchema = Schema.Union([
13
17
  Schema.Struct({
14
18
  category: mediaProviderErrorCategorySchema,
15
- code: Schema.NullOr(Schema.Int.check(Schema.isBetween({ minimum: 0, maximum: 99_999 }))),
19
+ code: Schema.NullOr(Schema.Int.check(Schema.isBetween(providerCodeBounds))),
20
+ reason: Schema.optionalKey(Schema.Literal("credits_exhausted")),
16
21
  }),
17
22
  Schema.Struct({
18
23
  category: Schema.Literal("result_download"),
19
- status: Schema.Int.check(Schema.isBetween({ minimum: 0, maximum: 599 })),
24
+ status: Schema.Int.check(Schema.isBetween(responseStatusBounds)),
25
+ }),
26
+ ]);
27
+ /** Documentable Promise transport grammar; this module owns both schema dialects. */
28
+ export const mediaProviderDiagnosticZodSchema = z.union([
29
+ z.strictObject({
30
+ category: z.enum(categories),
31
+ code: z
32
+ .number()
33
+ .int()
34
+ .min(providerCodeBounds.minimum)
35
+ .max(providerCodeBounds.maximum)
36
+ .nullable(),
37
+ reason: z.literal("credits_exhausted").optional(),
38
+ }),
39
+ z.strictObject({
40
+ category: z.literal("result_download"),
41
+ status: z
42
+ .number()
43
+ .int()
44
+ .min(responseStatusBounds.minimum)
45
+ .max(responseStatusBounds.maximum),
20
46
  }),
21
47
  ]);
@@ -123,6 +123,8 @@ const statusItemsSchema = Schema.Array(Schema.Union([
123
123
  kind: Schema.Literal("button"),
124
124
  icon: Schema.optionalKey(Schema.Literals(["folder", "ports", "processes", "access"])),
125
125
  count: statusCount,
126
+ tone: Schema.optionalKey(Schema.Literals(["neutral", "success", "warning", "error"])),
127
+ busy: Schema.optionalKey(Schema.Boolean),
126
128
  title: Schema.optionalKey(statusText(1_024)),
127
129
  disabled: Schema.optionalKey(Schema.Boolean),
128
130
  opens: Schema.optionalKey(Schema.Literal("dialog")),
@@ -75,6 +75,7 @@ export declare const mediaGenerationJsonRequestSchema: Schema.Struct<{
75
75
  readonly aspectRatio: Schema.optional<Schema.Literals<readonly ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9", "9:21"]>>;
76
76
  readonly generateAudio: Schema.optional<Schema.Boolean>;
77
77
  readonly references: Schema.optional<Schema.$Array<Schema.Struct<{
78
+ readonly computerId: Schema.optional<Schema.String>;
78
79
  readonly path: Schema.String;
79
80
  readonly role: Schema.optional<Schema.Literals<readonly ["first-frame", "last-frame", "reference"]>>;
80
81
  }>>>;
@@ -115,11 +116,12 @@ export declare const mediaGenerationJsonOutcomeSchema: Schema.Union<readonly [Sc
115
116
  readonly provider: Schema.optional<Schema.Union<readonly [Schema.Struct<{
116
117
  readonly category: Schema.Literals<readonly ["InferenceUpstreamError", "AiInternalError", "TypeError", "AbortError", "TimeoutError", "Error"]>;
117
118
  readonly code: Schema.NullOr<Schema.Int>;
119
+ readonly reason: Schema.optionalKey<Schema.Literal<"credits_exhausted">>;
118
120
  }>, Schema.Struct<{
119
121
  readonly category: Schema.Literal<"result_download">;
120
122
  readonly status: Schema.Int;
121
123
  }>]>>;
122
- readonly code: Schema.Literals<readonly ["CANCELLED", "CAPABILITY_DENIED", "CAPABILITY_REVOKED", "DISCONNECTED", "HOST_FAILURE", "IDENTITY", "INSUFFICIENT_CREDIT", "INVALID_ARGUMENT", "PROTOCOL", "SAFETY_FILTER_REFUSED", "TIMEOUT"]>;
124
+ readonly code: Schema.Literals<readonly ["CANCELLED", "CAPABILITY_DENIED", "CAPABILITY_REVOKED", "DISCONNECTED", "HOST_FAILURE", "IDENTITY", "INSUFFICIENT_CREDIT", "INVALID_ARGUMENT", "MEDIA_PROVIDER_FAILURE", "MEDIA_PROVIDER_FAILURE_UNCHARGED", "PROTOCOL", "SAFETY_FILTER_REFUSED", "TIMEOUT"]>;
123
125
  readonly retryable: Schema.Boolean;
124
126
  }>;
125
127
  }>]>;
@@ -151,11 +153,12 @@ export declare const mediaGenerationJsonReplySchema: Schema.Union<readonly [Sche
151
153
  readonly provider: Schema.optional<Schema.Union<readonly [Schema.Struct<{
152
154
  readonly category: Schema.Literals<readonly ["InferenceUpstreamError", "AiInternalError", "TypeError", "AbortError", "TimeoutError", "Error"]>;
153
155
  readonly code: Schema.NullOr<Schema.Int>;
156
+ readonly reason: Schema.optionalKey<Schema.Literal<"credits_exhausted">>;
154
157
  }>, Schema.Struct<{
155
158
  readonly category: Schema.Literal<"result_download">;
156
159
  readonly status: Schema.Int;
157
160
  }>]>>;
158
- readonly code: Schema.Literals<readonly ["CANCELLED", "CAPABILITY_DENIED", "CAPABILITY_REVOKED", "DISCONNECTED", "HOST_FAILURE", "IDENTITY", "INSUFFICIENT_CREDIT", "INVALID_ARGUMENT", "PROTOCOL", "SAFETY_FILTER_REFUSED", "TIMEOUT"]>;
161
+ readonly code: Schema.Literals<readonly ["CANCELLED", "CAPABILITY_DENIED", "CAPABILITY_REVOKED", "DISCONNECTED", "HOST_FAILURE", "IDENTITY", "INSUFFICIENT_CREDIT", "INVALID_ARGUMENT", "MEDIA_PROVIDER_FAILURE", "MEDIA_PROVIDER_FAILURE_UNCHARGED", "PROTOCOL", "SAFETY_FILTER_REFUSED", "TIMEOUT"]>;
159
162
  readonly retryable: Schema.Boolean;
160
163
  }>;
161
164
  }>]>, Schema.declare<Readonly<{
package/dist/media.d.ts CHANGED
@@ -278,6 +278,8 @@ export declare const mediaGenerationSelectionSchema: Schema.Struct<{
278
278
  readonly aspectRatio: Schema.optional<Schema.Literals<readonly ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9", "9:21"]>>;
279
279
  readonly generateAudio: Schema.optional<Schema.Boolean>;
280
280
  readonly references: Schema.optional<Schema.$Array<Schema.Struct<{
281
+ /** Omit for the selected Computer; a named Computer requires its own authorization. */
282
+ readonly computerId: Schema.optional<Schema.String>;
281
283
  readonly path: Schema.String;
282
284
  readonly role: Schema.optional<Schema.Literals<readonly ["first-frame", "last-frame", "reference"]>>;
283
285
  }>>>;
@@ -357,11 +359,12 @@ export declare const mediaGenerationFailureSchema: Schema.Struct<{
357
359
  readonly provider: Schema.optional<Schema.Union<readonly [Schema.Struct<{
358
360
  readonly category: Schema.Literals<readonly ["InferenceUpstreamError", "AiInternalError", "TypeError", "AbortError", "TimeoutError", "Error"]>;
359
361
  readonly code: Schema.NullOr<Schema.Int>;
362
+ readonly reason: Schema.optionalKey<Schema.Literal<"credits_exhausted">>;
360
363
  }>, Schema.Struct<{
361
364
  readonly category: Schema.Literal<"result_download">;
362
365
  readonly status: Schema.Int;
363
366
  }>]>>;
364
- readonly code: Schema.Literals<readonly ["CANCELLED", "CAPABILITY_DENIED", "CAPABILITY_REVOKED", "DISCONNECTED", "HOST_FAILURE", "IDENTITY", "INSUFFICIENT_CREDIT", "INVALID_ARGUMENT", "PROTOCOL", "SAFETY_FILTER_REFUSED", "TIMEOUT"]>;
367
+ readonly code: Schema.Literals<readonly ["CANCELLED", "CAPABILITY_DENIED", "CAPABILITY_REVOKED", "DISCONNECTED", "HOST_FAILURE", "IDENTITY", "INSUFFICIENT_CREDIT", "INVALID_ARGUMENT", "MEDIA_PROVIDER_FAILURE", "MEDIA_PROVIDER_FAILURE_UNCHARGED", "PROTOCOL", "SAFETY_FILTER_REFUSED", "TIMEOUT"]>;
365
368
  readonly retryable: Schema.Boolean;
366
369
  }>;
367
370
  /** Capability contract for generating Media (images or video). Apps
package/dist/media.js CHANGED
@@ -109,6 +109,8 @@ export const mediaVideoAspectRatioSchema = Schema.Literals([
109
109
  "9:21",
110
110
  ]);
111
111
  const referenceSchema = Schema.Struct({
112
+ /** Omit for the selected Computer; a named Computer requires its own authorization. */
113
+ computerId: Schema.optional(text(256)),
112
114
  path: text(4_096),
113
115
  role: Schema.optional(mediaVideoReferenceRoleSchema),
114
116
  });
@@ -297,6 +299,8 @@ export const mediaGenerationFailureSchema = Schema.Struct({
297
299
  "IDENTITY",
298
300
  "INSUFFICIENT_CREDIT",
299
301
  "INVALID_ARGUMENT",
302
+ "MEDIA_PROVIDER_FAILURE",
303
+ "MEDIA_PROVIDER_FAILURE_UNCHARGED",
300
304
  "PROTOCOL",
301
305
  "SAFETY_FILTER_REFUSED",
302
306
  "TIMEOUT",
package/dist/ui.d.ts CHANGED
@@ -74,6 +74,10 @@ export type AppStatusItem = Readonly<{
74
74
  icon?: AppStatusIcon;
75
75
  /** A positive count after the label; zero is hidden. */
76
76
  count?: number;
77
+ /** A small status light before the label; omitted draws none. */
78
+ tone?: AppStatusTone;
79
+ /** Work is under way: the light pulses (neutral tone when none is set). */
80
+ busy?: boolean;
77
81
  /** A longer description, such as a full folder path. */
78
82
  title?: string;
79
83
  disabled?: boolean;
@@ -28,7 +28,6 @@ type MethodPolicy = Readonly<{
28
28
  effect: "read" | "write" | "external";
29
29
  requires: readonly AppCapabilityId[];
30
30
  hidden?: true;
31
- anonymous?: true;
32
31
  pending?: true;
33
32
  present?: Readonly<{
34
33
  verb: string;
@@ -229,9 +228,9 @@ Define a typed method once; neither discovery nor builds execute its handler.
229
228
 
230
229
  #### Parameters
231
230
 
232
- | Parameter | Type |
233
- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
234
- | `method` | `Omit`\<`Readonly`\<\{ `description`: `string`; `effect`: `"external"` \| `"read"` \| `"write"`; `requires`: readonly ( \| `"agent.list"` \| `"agent.manage"` \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \| `"agent.rename"` \| `"agent.avatar"` \| `"agent.toolPolicy"` \| `"approvals"` \| `"apps.open"` \| `"apps.call"` \| `"llm.generation"` \| `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"app.storage"` \| `"app.events.emit"` \| `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \| `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \| `"channels.read"` \| `"channels.personal.manage"`)[]; `hidden?`: `true`; `anonymous?`: `true`; `pending?`: `true`; `present?`: `Readonly`\<\{ `verb`: `string`; \}\>; \}\>, `"present"`\> & \{ input: I; output: O; present?: Readonly\<\{ verb: string; row: (call: Readonly\<\{ input: output\<I\>; output: output\<O\>; \}\>) =\> \{ readonly id: string; readonly title: string; ... 4 more ...; readonly media?: \{ ...; \} \| undefined; \}; rows: Readonly\<...\>; \}\> \| undefined; \} & (\{ ...; \} \| \{ ...; \}) |
231
+ | Parameter | Type |
232
+ | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
233
+ | `method` | `Omit`\<`Readonly`\<\{ `description`: `string`; `effect`: `"external"` \| `"read"` \| `"write"`; `requires`: readonly ( \| `"agent.list"` \| `"agent.manage"` \| `"agent.read"` \| `"agent.send"` \| `"computer.list"` \| `"computer.readFile"` \| `"computer.writeFile"` \| `"computer.execute"` \| `"agent.rename"` \| `"agent.avatar"` \| `"agent.toolPolicy"` \| `"approvals"` \| `"apps.open"` \| `"apps.call"` \| `"llm.generation"` \| `"media.generation"` \| `"games:servers"` \| `"git.repository"` \| `"app.storage"` \| `"app.events.emit"` \| `"team.workbenchHost"` \| `"marketplace.browse"` \| `"marketplace.purchase"` \| `"workflow.run"` \| `"workflow.publish"` \| `"workflow.arm"` \| `"world"` \| `"channels.read"` \| `"channels.personal.manage"`)[]; `hidden?`: `true`; `pending?`: `true`; `present?`: `Readonly`\<\{ `verb`: `string`; \}\>; \}\>, `"present"`\> & \{ input: I; output: O; present?: Readonly\<\{ verb: string; row: (call: Readonly\<\{ input: output\<I\>; output: output\<O\>; \}\>) =\> \{ readonly id: string; readonly title: string; ... 4 more ...; readonly media?: \{ ...; \} \| undefined; \}; rows: Readonly\<...\>; \}\> \| undefined; \} & (\{ ...; \} \| \{ ...; \}) |
235
234
 
236
235
  #### Returns
237
236
 
@@ -135,8 +135,7 @@ const appMethods: CapabilityContract<{
135
135
 
136
136
  Call one of this App's declared, typed methods through its host. Unlike
137
137
  `appBackend`, the host knows which method is called, so it can apply the
138
- method's declared effect (for example, allow only `read` methods to a visitor of
139
- a public App).
138
+ method's declared effect.
140
139
 
141
140
  ---
142
141
 
@@ -63,6 +63,8 @@ readonly code:
63
63
  | "IDENTITY"
64
64
  | "INSUFFICIENT_CREDIT"
65
65
  | "INVALID_ARGUMENT"
66
+ | "MEDIA_PROVIDER_FAILURE"
67
+ | "MEDIA_PROVIDER_FAILURE_UNCHARGED"
66
68
  | "PROTOCOL"
67
69
  | "SAFETY_FILTER_REFUSED"
68
70
  | "SELECTION_CHANGED"
@@ -90,6 +92,7 @@ type MediaProviderDiagnostic =
90
92
  | "TimeoutError"
91
93
  | "Error";
92
94
  code: number | null;
95
+ reason?: "credits_exhausted";
93
96
  }>
94
97
  | Readonly<{
95
98
  category: "result_download";
@@ -186,31 +189,13 @@ automatically.
186
189
  ### mediaProviderDiagnosticWireSchema
187
190
 
188
191
  ```ts
189
- const mediaProviderDiagnosticWireSchema: ZodPipe<
190
- ZodType<unknown, unknown, $ZodTypeInternals<unknown, unknown>>,
191
- ZodTransform<
192
- | Readonly<{
193
- category:
194
- | "InferenceUpstreamError"
195
- | "AiInternalError"
196
- | "TypeError"
197
- | "AbortError"
198
- | "TimeoutError"
199
- | "Error";
200
- code: number | null;
201
- }>
202
- | Readonly<{
203
- category: "result_download";
204
- status: number;
205
- }>,
206
- unknown
207
- >
208
- >;
192
+ const mediaProviderDiagnosticWireSchema: z.ZodType<MediaProviderDiagnostic> =
193
+ mediaProviderDiagnosticZodSchema;
209
194
  ```
210
195
 
211
- Documentable wire projection of the canonical diagnostic grammar. Maintained
212
- converters preserve its closed objects and numeric bounds; decoding still
213
- returns the declaration-safe public diagnostic type.
196
+ Documentable wire projection of the canonical diagnostic grammar. Its owner
197
+ supplies the native Zod dialect so output declarations remain documentable
198
+ without transforms, coercions or an unchecked type assertion.
214
199
 
215
200
  ---
216
201
 
@@ -230,6 +215,8 @@ const appErrorCodes: readonly [
230
215
  "IDENTITY",
231
216
  "INSUFFICIENT_CREDIT",
232
217
  "INVALID_ARGUMENT",
218
+ "MEDIA_PROVIDER_FAILURE",
219
+ "MEDIA_PROVIDER_FAILURE_UNCHARGED",
233
220
  "PROTOCOL",
234
221
  "SAFETY_FILTER_REFUSED",
235
222
  "SELECTION_CHANGED",
@@ -303,10 +290,10 @@ prerequisites, so they can accompany a non-retryable operation.
303
290
 
304
291
  #### Parameters
305
292
 
306
- | Parameter | Type |
307
- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
308
- | `cause` | `unknown` |
309
- | `overrides?` | `Partial`\<`Record`\< \| `"CANCELLED"` \| `"CAPABILITY_DENIED"` \| `"CAPABILITY_REVOKED"` \| `"COMMAND_NOT_DECLARED"` \| `"CONFLICT"` \| `"DELIVERY_PENDING"` \| `"DISCONNECTED"` \| `"FILE_TOO_LARGE"` \| `"HOST_FAILURE"` \| `"IDENTITY"` \| `"INSUFFICIENT_CREDIT"` \| `"INVALID_ARGUMENT"` \| `"PROTOCOL"` \| `"SAFETY_FILTER_REFUSED"` \| `"SELECTION_CHANGED"` \| `"TIMEOUT"`, `Readonly`\<\{ `title`: `string`; `message`: `string`; \}\>\>\> |
293
+ | Parameter | Type |
294
+ | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
295
+ | `cause` | `unknown` |
296
+ | `overrides?` | `Partial`\<`Record`\< \| `"CANCELLED"` \| `"CAPABILITY_DENIED"` \| `"CAPABILITY_REVOKED"` \| `"COMMAND_NOT_DECLARED"` \| `"CONFLICT"` \| `"DELIVERY_PENDING"` \| `"DISCONNECTED"` \| `"FILE_TOO_LARGE"` \| `"HOST_FAILURE"` \| `"IDENTITY"` \| `"INSUFFICIENT_CREDIT"` \| `"INVALID_ARGUMENT"` \| `"MEDIA_PROVIDER_FAILURE"` \| `"MEDIA_PROVIDER_FAILURE_UNCHARGED"` \| `"PROTOCOL"` \| `"SAFETY_FILTER_REFUSED"` \| `"SELECTION_CHANGED"` \| `"TIMEOUT"`, `Readonly`\<\{ `title`: `string`; `message`: `string`; \}\>\>\> |
310
297
 
311
298
  #### Returns
312
299
 
package/docs/api/index.md CHANGED
@@ -1627,6 +1627,8 @@ type AppStatusItem =
1627
1627
  kind: "button";
1628
1628
  icon?: AppStatusIcon;
1629
1629
  count?: number;
1630
+ tone?: AppStatusTone;
1631
+ busy?: boolean;
1630
1632
  title?: string;
1631
1633
  disabled?: boolean;
1632
1634
  opens?: "dialog";
@@ -2071,6 +2073,18 @@ const FungiDelegationReplySchema: ZodLazy<
2071
2073
  outcome_unknown: "outcome_unknown";
2072
2074
  }>;
2073
2075
  diagnostic: ZodOptional<ZodString>;
2076
+ waitingOnYou: ZodOptional<
2077
+ ZodArray<
2078
+ ZodObject<
2079
+ {
2080
+ itemId: ZodLazy<ZodString>;
2081
+ kind: ZodString;
2082
+ summary: ZodString;
2083
+ },
2084
+ $strict
2085
+ >
2086
+ >
2087
+ >;
2074
2088
  },
2075
2089
  $strict
2076
2090
  >
@@ -2096,6 +2110,8 @@ const FungiMessageMetaSchema: ZodObject<{
2096
2110
  delegation: ZodOptional<ZodObject<{
2097
2111
  ancestors: ZodArray<ZodLazy<ZodString>>;
2098
2112
  maxDepth: ZodNumber;
2113
+ steer: ZodOptional<ZodLiteral<true>>;
2114
+ goal: ZodOptional<ZodUnion<readonly [ZodString, ZodLiteral<false>]>>;
2099
2115
  reply: ZodOptional<ZodLazy<ZodObject<{
2100
2116
  agentId: ZodLazy<ZodString>;
2101
2117
  sessionId: ZodLazy<ZodString>;
@@ -2108,6 +2124,7 @@ const FungiMessageMetaSchema: ZodObject<{
2108
2124
  outcome_unknown: ...;
2109
2125
  }>;
2110
2126
  diagnostic: ZodOptional<ZodString>;
2127
+ waitingOnYou: ZodOptional<ZodArray<...>>;
2111
2128
  }, $strict>>>;
2112
2129
  }, $strict>>;
2113
2130
  }, $strict>;
@@ -2607,6 +2624,7 @@ const mediaModelSchema: Struct<{
2607
2624
  defaultWidth: Number;
2608
2625
  dimensions: Literals<readonly ["none", "own"]>;
2609
2626
  maxDimension: NullOr<Number>;
2627
+ maxDimensionDocumented: Boolean;
2610
2628
  maxReferences: Number;
2611
2629
  maxSteps: NullOr<Number>;
2612
2630
  referenceField: NullOr<String>;
@@ -2644,6 +2662,7 @@ const mediaModelSchema: Struct<{
2644
2662
  defaultAspectRatio: Literals<
2645
2663
  readonly ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9", "9:21"]
2646
2664
  >;
2665
+ supportsAudio: Boolean;
2647
2666
  defaultGenerateAudio: NullOr<Boolean>;
2648
2667
  referenceRoles: $Array<
2649
2668
  Literals<readonly ["first-frame", "last-frame", "reference"]>
@@ -2690,6 +2709,7 @@ const mediaGenerationSelectionSchema: Struct<{
2690
2709
  references: optional<
2691
2710
  $Array<
2692
2711
  Struct<{
2712
+ computerId: optional<String>;
2693
2713
  path: String;
2694
2714
  role: optional<
2695
2715
  Literals<readonly ["first-frame", "last-frame", "reference"]>
@@ -2743,6 +2763,7 @@ const mediaGenerationFailureSchema: Struct<{
2743
2763
  ]
2744
2764
  >;
2745
2765
  code: NullOr<Int>;
2766
+ reason: optionalKey<Literal<"credits_exhausted">>;
2746
2767
  }>,
2747
2768
  Struct<{
2748
2769
  category: Literal<"result_download">;
@@ -2761,6 +2782,8 @@ const mediaGenerationFailureSchema: Struct<{
2761
2782
  "IDENTITY",
2762
2783
  "INSUFFICIENT_CREDIT",
2763
2784
  "INVALID_ARGUMENT",
2785
+ "MEDIA_PROVIDER_FAILURE",
2786
+ "MEDIA_PROVIDER_FAILURE_UNCHARGED",
2764
2787
  "PROTOCOL",
2765
2788
  "SAFETY_FILTER_REFUSED",
2766
2789
  "TIMEOUT",
@@ -3055,6 +3078,7 @@ function messageDelegationReply(meta):
3055
3078
  | "cancelled"
3056
3079
  | "outcome_unknown";
3057
3080
  diagnostic?: string;
3081
+ waitingOnYou?: object[];
3058
3082
  }
3059
3083
  | undefined;
3060
3084
  ```
@@ -3079,16 +3103,18 @@ other line, including text that merely looks like a reply.
3079
3103
  commandId: string;
3080
3104
  outcome: "completed" | "failed" | "interrupted" | "cancelled" | "outcome_unknown";
3081
3105
  diagnostic?: string;
3106
+ waitingOnYou?: object[];
3082
3107
  }
3083
3108
  ```
3084
3109
 
3085
- | Name | Type | Default value | Description |
3086
- | ------------- | -------------------------------------------------------------------------------------- | ------------- | ------------------------------------------------------------------------ |
3087
- | `agentId` | `string` | `identifier` | - |
3088
- | `sessionId` | `string` | `identifier` | - |
3089
- | `commandId` | `string` | `identifier` | - |
3090
- | `outcome` | `"completed"` \| `"failed"` \| `"interrupted"` \| `"cancelled"` \| `"outcome_unknown"` | - | The exact settlement outcome; failures are never collapsed. |
3091
- | `diagnostic?` | `string` | - | Bounded, single-line terminal diagnostic for work that did not complete. |
3110
+ | Name | Type | Default value | Description |
3111
+ | --------------- | -------------------------------------------------------------------------------------- | ------------- | ------------------------------------------------------------------------ |
3112
+ | `agentId` | `string` | `identifier` | - |
3113
+ | `sessionId` | `string` | `identifier` | - |
3114
+ | `commandId` | `string` | `identifier` | - |
3115
+ | `outcome` | `"completed"` \| `"failed"` \| `"interrupted"` \| `"cancelled"` \| `"outcome_unknown"` | - | The exact settlement outcome; failures are never collapsed. |
3116
+ | `diagnostic?` | `string` | - | Bounded, single-line terminal diagnostic for work that did not complete. |
3117
+ | `waitingOnYou?` | `object`[] | - | Open items of the replying Session that now wait on the recipient. |
3092
3118
 
3093
3119
  ---
3094
3120
 
@@ -323,6 +323,7 @@ const mediaGenerationDescriptionSchema: Struct<{
323
323
  defaultWidth: Number;
324
324
  dimensions: Literals<readonly ["none", "own"]>;
325
325
  maxDimension: NullOr<Number>;
326
+ maxDimensionDocumented: Boolean;
326
327
  maxReferences: Number;
327
328
  maxSteps: NullOr<Number>;
328
329
  referenceField: NullOr<String>;
@@ -349,6 +350,7 @@ const mediaGenerationDescriptionSchema: Struct<{
349
350
  }>>;
350
351
  defaultResolution: Literals<readonly ["480p", "720p", "768p", "1080p", "4k"]>;
351
352
  defaultAspectRatio: Literals<readonly ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9", "9:21"]>;
353
+ supportsAudio: Boolean;
352
354
  defaultGenerateAudio: NullOr<Boolean>;
353
355
  referenceRoles: $Array<Literals<readonly [..., ..., ...]>>;
354
356
  maxReferenceImages: Number;
@@ -383,6 +385,7 @@ const mediaGenerationJsonRequestSchema: Struct<{
383
385
  aspectRatio: optional<Literals<readonly ["16:9", "4:3", "1:1", "3:4", "9:16", "21:9", "9:21"]>>;
384
386
  generateAudio: optional<Boolean>;
385
387
  references: optional<$Array<Struct<{
388
+ computerId: optional<String>;
386
389
  path: String;
387
390
  role: optional<Literals<readonly [..., ..., ...]>>;
388
391
  }>>>;
@@ -423,11 +426,12 @@ const mediaGenerationJsonOutcomeSchema: Union<readonly [Struct<{
423
426
  provider: optional<Union<readonly [Struct<{
424
427
  category: ...;
425
428
  code: ...;
429
+ reason: ...;
426
430
  }>, Struct<{
427
431
  category: ...;
428
432
  status: ...;
429
433
  }>]>>;
430
- code: Literals<readonly ["CANCELLED", "CAPABILITY_DENIED", "CAPABILITY_REVOKED", "DISCONNECTED", "HOST_FAILURE", "IDENTITY", "INSUFFICIENT_CREDIT", "INVALID_ARGUMENT", "PROTOCOL", "SAFETY_FILTER_REFUSED", "TIMEOUT"]>;
434
+ code: Literals<readonly ["CANCELLED", "CAPABILITY_DENIED", "CAPABILITY_REVOKED", "DISCONNECTED", "HOST_FAILURE", "IDENTITY", "INSUFFICIENT_CREDIT", "INVALID_ARGUMENT", "MEDIA_PROVIDER_FAILURE", "MEDIA_PROVIDER_FAILURE_UNCHARGED", "PROTOCOL", "SAFETY_FILTER_REFUSED", "TIMEOUT"]>;
431
435
  retryable: Boolean;
432
436
  }>;
433
437
  }>]>;
@@ -461,7 +465,7 @@ const mediaGenerationJsonReplySchema: Union<readonly [Union<readonly [Struct<{
461
465
  message: String;
462
466
  stage: optional<Literals<readonly [..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ...]>>;
463
467
  provider: optional<Union<readonly [..., ...]>>;
464
- code: Literals<readonly ["CANCELLED", "CAPABILITY_DENIED", "CAPABILITY_REVOKED", "DISCONNECTED", "HOST_FAILURE", "IDENTITY", "INSUFFICIENT_CREDIT", "INVALID_ARGUMENT", "PROTOCOL", "SAFETY_FILTER_REFUSED", "TIMEOUT"]>;
468
+ code: Literals<readonly ["CANCELLED", "CAPABILITY_DENIED", "CAPABILITY_REVOKED", "DISCONNECTED", "HOST_FAILURE", "IDENTITY", "INSUFFICIENT_CREDIT", "INVALID_ARGUMENT", "MEDIA_PROVIDER_FAILURE", "MEDIA_PROVIDER_FAILURE_UNCHARGED", "PROTOCOL", "SAFETY_FILTER_REFUSED", "TIMEOUT"]>;
465
469
  retryable: Boolean;
466
470
  }>;
467
471
  }>]>, declare<Readonly<{
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fungi.computer/agar",
3
- "version": "0.4.0",
3
+ "version": "0.6.0",
4
4
  "author": "Levi <levi@technomancy.dev>",
5
5
  "description": "App contract for fungi.computer: typed backend methods, host capabilities and the App frontend connection",
6
6
  "type": "module",
@@ -168,8 +168,8 @@
168
168
  }
169
169
  },
170
170
  "dependencies": {
171
- "@fungi.computer/puffball": "0.2.0",
172
- "@fungi.computer/whistle": "0.2.0",
171
+ "@fungi.computer/puffball": "0.3.0",
172
+ "@fungi.computer/whistle": "0.3.0",
173
173
  "@opentui/keymap": "0.5.10",
174
174
  "@fungi.computer/capnweb": "0.12.0",
175
175
  "effect": "4.0.2",