@fungi.computer/oyster 0.7.0 → 0.8.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.
@@ -135,7 +135,7 @@ export declare abstract class StandaloneAgentBase<Env extends StandaloneAgentEnv
135
135
  /** One admitted Agent's bounded native schedule page; this is not a directory scan. */
136
136
  readSchedules(directory: typeof policyDirectorySchema.Type, input: AppAgentScheduleListInput): Promise<AgentSchedulePage>;
137
137
  /** Manage authority returns native identity/state only, never schedule content. */
138
- controlSchedule(directory: typeof policyDirectorySchema.Type, input: AgentScheduleTarget, action: "pause" | "delete"): Promise<AgentScheduleControlReceipt>;
138
+ controlSchedule(directory: typeof policyDirectorySchema.Type, input: AgentScheduleTarget, action: "pause" | "resume" | "delete"): Promise<AgentScheduleControlReceipt>;
139
139
  /** Listeners from live codemode acquisitions, told when the server list changes. */
140
140
  private readonly mcpInvalidations;
141
141
  private storedMcpServers;
@@ -421,6 +421,35 @@ export declare const agentFrameMethods: {
421
421
  id: string;
422
422
  };
423
423
  };
424
+ resumeSchedule: {
425
+ decodeArgs: (raw: readonly unknown[]) => [{
426
+ kind: "almanac";
427
+ agentId: string;
428
+ scheduleId: string;
429
+ } | {
430
+ kind: "loop";
431
+ agentId: string;
432
+ sessionId: string;
433
+ loopId: string;
434
+ }];
435
+ decodeResult: (input: unknown, options?: import("effect/SchemaAST").ParseOptions) => {
436
+ readonly agentId: string;
437
+ readonly kind: "almanac";
438
+ readonly scheduleId: string;
439
+ readonly state: "active" | "paused" | "cancelled" | "finished";
440
+ } | {
441
+ readonly agentId: string;
442
+ readonly kind: "loop";
443
+ readonly sessionId: string;
444
+ readonly loopId: string;
445
+ readonly state: "active" | "failed" | "paused" | "cancelled" | "finished";
446
+ };
447
+ requiredOperations: () => string[];
448
+ requestedResource: (raw: readonly unknown[]) => {
449
+ kind: string;
450
+ id: string;
451
+ };
452
+ };
424
453
  deleteSchedule: {
425
454
  decodeArgs: (raw: readonly unknown[]) => [{
426
455
  kind: "almanac";
@@ -40,7 +40,8 @@ import { z } from "zod";
40
40
  import {} from "../cloudflare.js";
41
41
  import { AppInstanceError } from "../index.js";
42
42
  import { agentScheduleBindingArgs, appAgentScheduleListInputSchema, agentSchedulePageSchema, agentScheduleControlReceiptSchema, } from "../agent-schedules.js";
43
- import { readAgentSchedulePage, controlAgentSchedule, agentScheduleTargetSchema, } from "@fungi.computer/shiitake-extensions/schedules";
43
+ import { readAgentSchedulePage, controlAgentSchedule, } from "@fungi.computer/shiitake-extensions/schedules/client";
44
+ import { agentScheduleTargetSchema } from "@fungi.computer/shiitake-extensions/schedules";
44
45
  import { createAgentAvatarStore, } from "../agent-avatars.js";
45
46
  import { defineIdFamily } from "@fungi.computer/cairn";
46
47
  import { agentIds, createAgentDirectory, createFleetSessions, commandSettlementSchema, DirectoryError, } from "@fungi.computer/shiitake/fleet";
@@ -1782,6 +1783,17 @@ export const agentFrameMethods = {
1782
1783
  id: agentScheduleBindingArgs.pauseSchedule.parse(raw)[0].agentId,
1783
1784
  }),
1784
1785
  },
1786
+ resumeSchedule: {
1787
+ decodeArgs: (raw) => agentScheduleBindingArgs.resumeSchedule.parse(raw),
1788
+ decodeResult: Schema.decodeUnknownSync(agentScheduleControlReceiptSchema, {
1789
+ onExcessProperty: "error",
1790
+ }),
1791
+ requiredOperations: () => ["resumeSchedule"],
1792
+ requestedResource: (raw) => ({
1793
+ kind: "agent",
1794
+ id: agentScheduleBindingArgs.resumeSchedule.parse(raw)[0].agentId,
1795
+ }),
1796
+ },
1785
1797
  deleteSchedule: {
1786
1798
  decodeArgs: (raw) => agentScheduleBindingArgs.deleteSchedule.parse(raw),
1787
1799
  decodeResult: Schema.decodeUnknownSync(agentScheduleControlReceiptSchema, {
@@ -1845,6 +1857,7 @@ export async function dispatchAgentBinding(env, scope, frame, props, method, arg
1845
1857
  else if (props.binding === "AGENTS" &&
1846
1858
  (method === "schedules" ||
1847
1859
  method === "pauseSchedule" ||
1860
+ method === "resumeSchedule" ||
1848
1861
  method === "deleteSchedule")) {
1849
1862
  const [input] = agentScheduleBindingArgs[method].parse(args);
1850
1863
  if (!(await directory.has(input.agentId)))
@@ -1864,7 +1877,11 @@ export async function dispatchAgentBinding(env, scope, frame, props, method, arg
1864
1877
  result = await agent.readSchedules(pin, agentScheduleBindingArgs.schedules.parse(args)[0]);
1865
1878
  }
1866
1879
  else {
1867
- result = await agent.controlSchedule(pin, agentScheduleBindingArgs[method].parse(args)[0], method === "pauseSchedule" ? "pause" : "delete");
1880
+ result = await agent.controlSchedule(pin, agentScheduleBindingArgs[method].parse(args)[0], method === "pauseSchedule"
1881
+ ? "pause"
1882
+ : method === "resumeSchedule"
1883
+ ? "resume"
1884
+ : "delete");
1868
1885
  }
1869
1886
  }
1870
1887
  else {
@@ -48,7 +48,7 @@ export type TriggerArmTarget = z.output<typeof triggerArmTargetSchema>;
48
48
  export type ScheduleDisarmInput = z.output<typeof scheduleDisarmInputSchema>;
49
49
  export type EventDisarmInput = z.output<typeof eventDisarmInputSchema>;
50
50
  /** The frame gate needs only these run-owner calls; it re-decodes each reply with the method's owner schema. */
51
- export type WorkflowRunCalls = Pick<StandaloneWorkflowRunsBase, "admitWorkflowGit" | "catalog" | "start" | "status" | "cancel" | "answerReview" | "armSchedule" | "pauseSchedule" | "disarmSchedule" | "schedules" | "armEventTrigger" | "disarmEventTrigger" | "eventTriggers" | "runs">;
51
+ export type WorkflowRunCalls = Pick<StandaloneWorkflowRunsBase, "admitWorkflowGit" | "catalog" | "start" | "status" | "cancel" | "answerReview" | "armSchedule" | "pauseSchedule" | "resumeSchedule" | "disarmSchedule" | "schedules" | "armEventTrigger" | "disarmEventTrigger" | "eventTriggers" | "runs">;
52
52
  export type WorkflowBindingEnv = Readonly<{
53
53
  WORKFLOW_RUNS: Readonly<{
54
54
  getByName(installationId: string): WorkflowRunCalls;
@@ -132,6 +132,8 @@ export declare const workflowFrameMethods: {
132
132
  scheduleId: string;
133
133
  }]) | ((args: unknown) => [{
134
134
  scheduleId: string;
135
+ }]) | ((args: unknown) => [{
136
+ scheduleId: string;
135
137
  }]) | ((args: unknown) => [{
136
138
  limit: number;
137
139
  after?: string | undefined;
@@ -155,7 +157,7 @@ export declare const workflowFrameMethods: {
155
157
  workflowId?: string | undefined;
156
158
  }]);
157
159
  decodeResult: (value: unknown) => z.core.util.JSONType;
158
- requiredOperations: () => ("catalog" | "runGraph" | "armSchedule" | "disarmSchedule" | "pauseSchedule" | "schedules" | "armEventTrigger" | "disarmEventTrigger" | "eventTriggers" | "cancel" | "answerReview" | "graphStatus" | "runs")[];
160
+ requiredOperations: () => ("catalog" | "runGraph" | "armSchedule" | "disarmSchedule" | "pauseSchedule" | "resumeSchedule" | "schedules" | "armEventTrigger" | "disarmEventTrigger" | "eventTriggers" | "cancel" | "answerReview" | "graphStatus" | "runs")[];
159
161
  };
160
162
  };
161
163
  };
@@ -2,7 +2,7 @@ import * as S from "effect/Schema";
2
2
  import { z } from "zod";
3
3
  import { graphReviewSchema, reviewAnswerSchema } from "@fungi.computer/braid";
4
4
  import { graphStartRequestSchema, workflowTriggerTargetSchema, } from "@fungi.computer/braid/runtime";
5
- import { runReply, answerReviewReply, catalogReplySchema, statusReply, cancelReplySchema, runsReplySchema, runsInputSchema, eventArmReplySchema, eventDisarmInputSchema, eventTriggersReplySchema, scheduleArmReplySchema, scheduleDisarmInputSchema, schedulePauseInputSchema, schedulePauseReplySchema, scheduleListInputSchema, schedulesReplySchema, triggerDisarmReplySchema, triggerListInputSchema, } from "@fungi.computer/workflows-wire";
5
+ import { runReply, answerReviewReply, catalogReplySchema, statusReply, cancelReplySchema, runsReplySchema, runsInputSchema, eventArmReplySchema, eventDisarmInputSchema, eventTriggersReplySchema, scheduleArmReplySchema, scheduleDisarmInputSchema, schedulePauseInputSchema, schedulePauseReplySchema, scheduleResumeInputSchema, scheduleResumeReplySchema, scheduleListInputSchema, schedulesReplySchema, triggerDisarmReplySchema, triggerListInputSchema, } from "@fungi.computer/workflows-wire";
6
6
  import { workflowAttestationSchema } from "@fungi.computer/puffball/app-method-runtime";
7
7
  import { appEventFactSchema, } from "@fungi.computer/puffball/app-event-facts";
8
8
  import { AppInstanceError } from "../index.js";
@@ -27,6 +27,7 @@ const workflowArgs = {
27
27
  armSchedule: (args) => z.tuple([triggerArmTargetSchema]).parse(args),
28
28
  disarmSchedule: (args) => z.tuple([scheduleDisarmInputSchema]).parse(args),
29
29
  pauseSchedule: (args) => z.tuple([schedulePauseInputSchema]).parse(args),
30
+ resumeSchedule: (args) => z.tuple([scheduleResumeInputSchema]).parse(args),
30
31
  schedules: (args) => z.tuple([scheduleListInputSchema]).parse(args),
31
32
  armEventTrigger: (args) => z.tuple([triggerArmTargetSchema]).parse(args),
32
33
  disarmEventTrigger: (args) => z.tuple([eventDisarmInputSchema]).parse(args),
@@ -42,6 +43,7 @@ const workflowResults = {
42
43
  armSchedule: scheduleArmReplySchema,
43
44
  disarmSchedule: triggerDisarmReplySchema,
44
45
  pauseSchedule: schedulePauseReplySchema,
46
+ resumeSchedule: scheduleResumeReplySchema,
45
47
  schedules: schedulesReplySchema,
46
48
  armEventTrigger: eventArmReplySchema,
47
49
  disarmEventTrigger: triggerDisarmReplySchema,
@@ -56,6 +58,7 @@ const workflowMethod = z.enum([
56
58
  "answerReview",
57
59
  "armSchedule",
58
60
  "pauseSchedule",
61
+ "resumeSchedule",
59
62
  "disarmSchedule",
60
63
  "schedules",
61
64
  "armEventTrigger",
@@ -192,6 +195,11 @@ export async function dispatchWorkflowBinding(env, frame, props, method, args) {
192
195
  result = await runs.pauseSchedule(frame.facts, input);
193
196
  break;
194
197
  }
198
+ case "resumeSchedule": {
199
+ const [input] = workflowArgs.resumeSchedule(args);
200
+ result = await runs.resumeSchedule(frame.facts, input);
201
+ break;
202
+ }
195
203
  case "schedules": {
196
204
  const [input] = workflowArgs.schedules(args);
197
205
  result = await runs.schedules(frame.facts, input);
@@ -11,7 +11,7 @@ export type TriggerAdmission = Readonly<{
11
11
  /** The admitted frame's selection and verified artifact, pinned on arm. */
12
12
  installationAuthority: WorkflowInstallationAuthority;
13
13
  }>;
14
- export type ScheduleOperation = "armSchedule" | "pauseSchedule" | "disarmSchedule" | "schedules";
14
+ export type ScheduleOperation = "armSchedule" | "pauseSchedule" | "resumeSchedule" | "disarmSchedule" | "schedules";
15
15
  /** Host controls and alarm delivery compose the shared schedule owner unchanged. */
16
16
  export declare function createStandaloneWorkflowSchedules<Frame>(options: Parameters<typeof createWorkflowSchedules>[0] & {
17
17
  admitInvocation(frame: Frame, operation: ScheduleOperation): Promise<TriggerAdmission>;
@@ -47,12 +47,30 @@ export declare function createStandaloneWorkflowSchedules<Frame>(options: Parame
47
47
  } | {
48
48
  error: string;
49
49
  }>;
50
+ resume(frame: Frame, raw: {
51
+ scheduleId: string;
52
+ }): Promise<{
53
+ kind: "not_found";
54
+ reason?: never;
55
+ } | {
56
+ kind: "refused";
57
+ reason: string;
58
+ } | {
59
+ kind: "resumed";
60
+ reason?: never;
61
+ } | {
62
+ error: string;
63
+ }>;
50
64
  list(frame: Frame, raw: ScheduleListInput): Promise<{
51
65
  schedules: {
52
66
  scheduleId: string;
53
67
  installationId: string;
54
68
  workflowId: string;
55
69
  triggerId: string;
70
+ cron: {
71
+ expression: string;
72
+ timeZone: string;
73
+ };
56
74
  nextDueAt: number;
57
75
  state: "active" | "finished" | "paused" | "cancelled";
58
76
  lastError: string | null;
@@ -1,5 +1,5 @@
1
1
  import { createWorkflowSchedules, } from "@fungi.computer/braid/runtime";
2
- import { scheduleDisarmInputSchema, schedulePauseInputSchema, scheduleListInputSchema, } from "@fungi.computer/workflows-wire";
2
+ import { scheduleDisarmInputSchema, schedulePauseInputSchema, scheduleResumeInputSchema, scheduleListInputSchema, } from "@fungi.computer/workflows-wire";
3
3
  import { triggerArmTargetSchema, } from "./workflow-binding.js";
4
4
  /** Host controls and alarm delivery compose the shared schedule owner unchanged. */
5
5
  export function createStandaloneWorkflowSchedules(options) {
@@ -34,6 +34,13 @@ export function createStandaloneWorkflowSchedules(options) {
34
34
  return { error: "not_granted" };
35
35
  return schedules.pause(authority.principal, libraryId, scheduleId);
36
36
  },
37
+ async resume(frame, raw) {
38
+ const { scheduleId } = scheduleResumeInputSchema.parse(raw);
39
+ const { libraryId, authority } = await options.admitInvocation(frame, "resumeSchedule");
40
+ if (authority === null)
41
+ return { error: "not_granted" };
42
+ return schedules.resume(authority.principal, libraryId, scheduleId);
43
+ },
37
44
  async list(frame, raw) {
38
45
  const input = scheduleListInputSchema.parse(raw);
39
46
  const { libraryId, authority } = await options.admitInvocation(frame, "schedules");
@@ -95,12 +95,30 @@ export declare abstract class StandaloneWorkflowRunsBase<Env extends StandaloneW
95
95
  } | {
96
96
  error: string;
97
97
  }>;
98
+ resumeSchedule(facts: InvocationFacts, input: {
99
+ scheduleId: string;
100
+ }): Promise<{
101
+ kind: "not_found";
102
+ reason?: never;
103
+ } | {
104
+ kind: "refused";
105
+ reason: string;
106
+ } | {
107
+ kind: "resumed";
108
+ reason?: never;
109
+ } | {
110
+ error: string;
111
+ }>;
98
112
  schedules(facts: InvocationFacts, input: ScheduleListInput): Promise<{
99
113
  schedules: {
100
114
  scheduleId: string;
101
115
  installationId: string;
102
116
  workflowId: string;
103
117
  triggerId: string;
118
+ cron: {
119
+ expression: string;
120
+ timeZone: string;
121
+ };
104
122
  nextDueAt: number;
105
123
  state: "active" | "finished" | "paused" | "cancelled";
106
124
  lastError: string | null;
@@ -406,6 +406,9 @@ export class StandaloneWorkflowRunsBase extends DurableObject {
406
406
  async pauseSchedule(facts, input) {
407
407
  return (await this.library(facts, "pauseSchedule")).schedules.pause(facts, input);
408
408
  }
409
+ async resumeSchedule(facts, input) {
410
+ return (await this.library(facts, "resumeSchedule")).schedules.resume(facts, input);
411
+ }
409
412
  async schedules(facts, input) {
410
413
  return (await this.library(facts, "schedules")).schedules.list(facts, input);
411
414
  }
@@ -11,6 +11,7 @@ export declare const agentWorkflowOperationSchema: z.ZodEnum<{
11
11
  armSchedule: "armSchedule";
12
12
  disarmSchedule: "disarmSchedule";
13
13
  pauseSchedule: "pauseSchedule";
14
+ resumeSchedule: "resumeSchedule";
14
15
  schedules: "schedules";
15
16
  armEventTrigger: "armEventTrigger";
16
17
  disarmEventTrigger: "disarmEventTrigger";
@@ -28,6 +29,7 @@ export declare const agentAppWorkflowRequestSchema: z.ZodObject<{
28
29
  armSchedule: "armSchedule";
29
30
  disarmSchedule: "disarmSchedule";
30
31
  pauseSchedule: "pauseSchedule";
32
+ resumeSchedule: "resumeSchedule";
31
33
  schedules: "schedules";
32
34
  armEventTrigger: "armEventTrigger";
33
35
  disarmEventTrigger: "disarmEventTrigger";
package/dist/workflows.js CHANGED
@@ -12,6 +12,7 @@ export const agentWorkflowOperationSchema = z.enum([
12
12
  "schedules",
13
13
  "armSchedule",
14
14
  "pauseSchedule",
15
+ "resumeSchedule",
15
16
  "disarmSchedule",
16
17
  "eventTriggers",
17
18
  "armEventTrigger",
@@ -93,6 +93,7 @@ Both hosts decode the ordinary AGENTS packet with the native owner's grammar.
93
93
  | ----------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
94
94
  | <a id="property-schedules"></a> `schedules` | `ZodTuple`\<\[`ZodObject`\<\{ `agentId`: `ZodString`; `after`: `ZodOptional`\<`ZodObject`\<\{ `agentId`: `ZodString`; `kind`: `ZodUnion`\<readonly \[`ZodLiteral`\<...\>, `ZodLiteral`\<...\>\]\>; `after`: `ZodOptional`\<`ZodString`\>; \}, `$strict`\>\>; `limit`: `ZodDefault`\<`ZodNumber`\>; \}, `$strict`\>\], `null`\> | One bounded content-bearing read, admitted independently of manage. |
95
95
  | <a id="property-pauseschedule"></a> `pauseSchedule` | `ZodTuple`\<\[`ZodDiscriminatedUnion`\<\[`ZodObject`\<\{ `kind`: `ZodLiteral`\<`"almanac"`\>; `agentId`: `ZodString`; `scheduleId`: `ZodString` & `ZodType`\<`string`, `string`, `$ZodTypeInternals`\<`string`, `string`\>\>; \}, `$strict`\>, `ZodObject`\<\{ `kind`: `ZodLiteral`\<`"loop"`\>; `agentId`: `ZodString`; `sessionId`: `ZodString` & `ZodType`\<`string`, `string`, `$ZodTypeInternals`\<`string`, `string`\>\>; `loopId`: `ZodString` & `ZodType`\<`string`, `string`, `$ZodTypeInternals`\<`string`, `string`\>\>; \}, `$strict`\>\], `"kind"`\>\], `null`\> | Pause the exact listed schedule, retaining future resume and accepted work. |
96
+ | <a id="property-resumeschedule"></a> `resumeSchedule` | `ZodTuple`\<\[`ZodDiscriminatedUnion`\<\[`ZodObject`\<\{ `kind`: `ZodLiteral`\<`"almanac"`\>; `agentId`: `ZodString`; `scheduleId`: `ZodString` & `ZodType`\<`string`, `string`, `$ZodTypeInternals`\<`string`, `string`\>\>; \}, `$strict`\>, `ZodObject`\<\{ `kind`: `ZodLiteral`\<`"loop"`\>; `agentId`: `ZodString`; `sessionId`: `ZodString` & `ZodType`\<`string`, `string`, `$ZodTypeInternals`\<`string`, `string`\>\>; `loopId`: `ZodString` & `ZodType`\<`string`, `string`, `$ZodTypeInternals`\<`string`, `string`\>\>; \}, `$strict`\>\], `"kind"`\>\], `null`\> | Resume the exact listed schedule through its native owner. |
96
97
  | <a id="property-deleteschedule"></a> `deleteSchedule` | `ZodTuple`\<\[`ZodDiscriminatedUnion`\<\[`ZodObject`\<\{ `kind`: `ZodLiteral`\<`"almanac"`\>; `agentId`: `ZodString`; `scheduleId`: `ZodString` & `ZodType`\<`string`, `string`, `$ZodTypeInternals`\<`string`, `string`\>\>; \}, `$strict`\>, `ZodObject`\<\{ `kind`: `ZodLiteral`\<`"loop"`\>; `agentId`: `ZodString`; `sessionId`: `ZodString` & `ZodType`\<`string`, `string`, `$ZodTypeInternals`\<`string`, `string`\>\>; `loopId`: `ZodString` & `ZodType`\<`string`, `string`, `$ZodTypeInternals`\<`string`, `string`\>\>; \}, `$strict`\>\], `"kind"`\>\], `null`\> | Cancel future occurrences of the exact identity without erasing history. |
97
98
 
98
99
  ---
package/docs/api/build.md CHANGED
@@ -584,9 +584,10 @@ type LocalBuildExecutorOptions = Readonly<{
584
584
  }>;
585
585
  ```
586
586
 
587
- How one build executor is composed; never part of a recipe or request.
588
- Build-log stdout/stderr are interleaved in arrival order and unlabelled.
589
- The job log is credential-bearing by design; it must never flow to diagnostics, Releases, agent surfaces, or support bundles without a recorded decision.
587
+ How one build executor is composed; never part of a recipe or request. Build-log
588
+ stdout/stderr are interleaved in arrival order and unlabelled. The job log is
589
+ credential-bearing by design; it must never flow to diagnostics, Releases, agent
590
+ surfaces, or support bundles without a recorded decision.
590
591
 
591
592
  ---
592
593
 
@@ -241,13 +241,13 @@ approvalGet(
241
241
  | null;
242
242
  reason: | "pending"
243
243
  | "expired"
244
- | "not-granted"
245
244
  | "not-found"
246
245
  | "not-eligible"
247
246
  | "already-answered"
248
247
  | "stale-revision"
249
248
  | "declined"
250
249
  | "fenced"
250
+ | "not-granted"
251
251
  | "read-only"
252
252
  | "in-flight"
253
253
  | "outcome-unknown"
@@ -287,8 +287,8 @@ Read one member-scoped view; the native home resolves membership again.
287
287
  \| `"applied"` \| `"requested"` \| `"approved"` \| `"claimed"` \|
288
288
  `"outcome_unknown"`; `by`: \| \{ `kind`: `"human"`; `memberId`: `string`; \} \|
289
289
  \{ `kind`: `"policy"`; \} \| `null`; `reason`: \| `"pending"` \| `"expired"` \|
290
- `"not-granted"` \| `"not-found"` \| `"not-eligible"` \| `"already-answered"` \|
291
- `"stale-revision"` \| `"declined"` \| `"fenced"` \| `"read-only"` \|
290
+ `"not-found"` \| `"not-eligible"` \| `"already-answered"` \| `"stale-revision"`
291
+ \| `"declined"` \| `"fenced"` \| `"not-granted"` \| `"read-only"` \|
292
292
  `"in-flight"` \| `"outcome-unknown"` \| `"identity-conflict"` \| `null`;
293
293
  `denialNote?`: `string`; `requestedAt`: `number`; `expiresAt`: `number`;
294
294
  `updatedAt`: `number`; `revision`: `number`; \}; `canAnswer`: `boolean`;
@@ -342,13 +342,13 @@ approvalAnswer(
342
342
  | null;
343
343
  reason: | "pending"
344
344
  | "expired"
345
- | "not-granted"
346
345
  | "not-found"
347
346
  | "not-eligible"
348
347
  | "already-answered"
349
348
  | "stale-revision"
350
349
  | "declined"
351
350
  | "fenced"
351
+ | "not-granted"
352
352
  | "read-only"
353
353
  | "in-flight"
354
354
  | "outcome-unknown"
@@ -368,13 +368,13 @@ approvalAnswer(
368
368
  kind: "refused";
369
369
  reason: | "pending"
370
370
  | "expired"
371
- | "not-granted"
372
371
  | "not-found"
373
372
  | "not-eligible"
374
373
  | "already-answered"
375
374
  | "stale-revision"
376
375
  | "declined"
377
376
  | "fenced"
377
+ | "not-granted"
378
378
  | "read-only"
379
379
  | "in-flight"
380
380
  | "outcome-unknown"
@@ -409,15 +409,15 @@ Persist an eligible answer and attempt its native decision work once.
409
409
  \| `"pending"` \| `"expired"` \| `"denied"` \| `"applied"` \| `"requested"` \|
410
410
  `"approved"` \| `"claimed"` \| `"outcome_unknown"`; `by`: \| \{ `kind`:
411
411
  `"human"`; `memberId`: `string`; \} \| \{ `kind`: `"policy"`; \} \| `null`;
412
- `reason`: \| `"pending"` \| `"expired"` \| `"not-granted"` \| `"not-found"` \|
413
- `"not-eligible"` \| `"already-answered"` \| `"stale-revision"` \| `"declined"`
414
- \| `"fenced"` \| `"read-only"` \| `"in-flight"` \| `"outcome-unknown"` \|
412
+ `reason`: \| `"pending"` \| `"expired"` \| `"not-found"` \| `"not-eligible"` \|
413
+ `"already-answered"` \| `"stale-revision"` \| `"declined"` \| `"fenced"` \|
414
+ `"not-granted"` \| `"read-only"` \| `"in-flight"` \| `"outcome-unknown"` \|
415
415
  `"identity-conflict"` \| `null`; `denialNote?`: `string`; `requestedAt`:
416
416
  `number`; `expiresAt`: `number`; `updatedAt`: `number`; `revision`: `number`;
417
417
  \}; `canAnswer`: `boolean`; `canSetAutoApprove`: `boolean`; \}; \}\> \|
418
418
  `Readonly`\<\{ `kind`: `"refused"`; `reason`: \| `"pending"` \| `"expired"` \|
419
- `"not-granted"` \| `"not-found"` \| `"not-eligible"` \| `"already-answered"` \|
420
- `"stale-revision"` \| `"declined"` \| `"fenced"` \| `"read-only"` \|
419
+ `"not-found"` \| `"not-eligible"` \| `"already-answered"` \| `"stale-revision"`
420
+ \| `"declined"` \| `"fenced"` \| `"not-granted"` \| `"read-only"` \|
421
421
  `"in-flight"` \| `"outcome-unknown"` \| `"identity-conflict"`; `denialNote?`:
422
422
  `string`; \}\>\>
423
423
 
@@ -433,13 +433,13 @@ approvalSetAutoApprove(
433
433
  kind: "refused";
434
434
  reason: | "pending"
435
435
  | "expired"
436
- | "not-granted"
437
436
  | "not-found"
438
437
  | "not-eligible"
439
438
  | "already-answered"
440
439
  | "stale-revision"
441
440
  | "declined"
442
441
  | "fenced"
442
+ | "not-granted"
443
443
  | "read-only"
444
444
  | "in-flight"
445
445
  | "outcome-unknown"
@@ -481,8 +481,8 @@ it.
481
481
  ###### Returns
482
482
 
483
483
  `Promise`\< \| `Readonly`\<\{ `kind`: `"refused"`; `reason`: \| `"pending"` \|
484
- `"expired"` \| `"not-granted"` \| `"not-found"` \| `"not-eligible"` \|
485
- `"already-answered"` \| `"stale-revision"` \| `"declined"` \| `"fenced"` \|
484
+ `"expired"` \| `"not-found"` \| `"not-eligible"` \| `"already-answered"` \|
485
+ `"stale-revision"` \| `"declined"` \| `"fenced"` \| `"not-granted"` \|
486
486
  `"read-only"` \| `"in-flight"` \| `"outcome-unknown"` \| `"identity-conflict"`;
487
487
  `denialNote?`: `string`; \}\> \| `Readonly`\<\{ `kind`: `"updated"`; `rule`: \{
488
488
  `scope`: \{ `agentId`: `string` \| `null`; \}; `family`: \{ `module`: `string`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fungi.computer/oyster",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "author": "Levi <levi@technomancy.dev>",
5
5
  "description": "Run your own Apps on Cloudflare Workers or celld: installable App Releases, each with its own Durable Object, SQLite database and declared bindings",
6
6
  "type": "module",
@@ -308,35 +308,35 @@
308
308
  "dependencies": {
309
309
  "@cfworker/json-schema": "4.1.1",
310
310
  "@earendil-works/pi-ai": "1.3.0",
311
- "@fungi.computer/agar": "0.6.0",
311
+ "@fungi.computer/agar": "0.6.1",
312
312
  "@fungi.computer/bird-dog": "0.3.1",
313
- "@fungi.computer/braid": "0.3.0",
313
+ "@fungi.computer/braid": "0.4.0",
314
314
  "@fungi.computer/burrow": "0.2.0",
315
315
  "@fungi.computer/cairn": "0.1.0",
316
316
  "@fungi.computer/capnweb": "0.12.0",
317
- "@fungi.computer/caps": "0.5.0",
317
+ "@fungi.computer/caps": "0.6.0",
318
318
  "@fungi.computer/carrier": "0.2.0",
319
- "@fungi.computer/computer": "0.4.0",
320
- "@fungi.computer/computer-contract": "0.0.6",
321
- "@fungi.computer/darkroom": "0.4.0",
319
+ "@fungi.computer/computer": "0.4.1",
320
+ "@fungi.computer/computer-contract": "0.0.7",
321
+ "@fungi.computer/darkroom": "0.4.1",
322
322
  "@fungi.computer/ear-tag": "0.1.0",
323
- "@fungi.computer/forage": "0.2.1",
323
+ "@fungi.computer/forage": "0.2.2",
324
324
  "@fungi.computer/gills": "0.2.0",
325
- "@fungi.computer/knapsack": "0.4.1",
326
- "@fungi.computer/mycelium": "0.3.0",
327
- "@fungi.computer/nacre": "0.1.1",
328
- "@fungi.computer/puffball": "0.3.0",
325
+ "@fungi.computer/knapsack": "0.4.2",
326
+ "@fungi.computer/mycelium": "0.3.1",
327
+ "@fungi.computer/nacre": "0.1.2",
328
+ "@fungi.computer/puffball": "0.4.0",
329
329
  "@fungi.computer/seam": "0.2.0",
330
- "@fungi.computer/shiitake": "0.7.0",
331
- "@fungi.computer/shiitake-extensions": "0.5.0",
332
- "@fungi.computer/sigils": "0.2.0",
330
+ "@fungi.computer/shiitake": "0.8.0",
331
+ "@fungi.computer/shiitake-extensions": "0.6.0",
332
+ "@fungi.computer/sigils": "0.2.1",
333
333
  "@fungi.computer/sprite": "0.2.0",
334
334
  "@fungi.computer/sprite-zdog": "0.3.0",
335
- "@fungi.computer/veil": "0.2.1",
335
+ "@fungi.computer/veil": "0.3.0",
336
336
  "@fungi.computer/watchdog": "0.1.0",
337
337
  "@fungi.computer/whistle": "0.3.0",
338
- "@fungi.computer/workflows-wire": "0.3.0",
339
- "@fungi.computer/zookeeper": "0.0.6",
338
+ "@fungi.computer/workflows-wire": "0.4.0",
339
+ "@fungi.computer/zookeeper": "0.0.7",
340
340
  "@modelcontextprotocol/server": "2.0.0",
341
341
  "@pnpm/lockfile.fs": "1100.2.13",
342
342
  "@pnpm/lockfile.pruner": "1100.0.27",