@fungi.computer/trellis 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.
package/README.md CHANGED
@@ -25,6 +25,13 @@ Workflows, and its steps call the same App methods your agents use.
25
25
  - Arm a published version in **Triggers** to start on a schedule, on an App
26
26
  event such as a Bonsai push or merge, or from a webhook, and have it report
27
27
  its ending to one of your chats.
28
+ - Open **Schedules** from the scope picker without selecting a workflow or
29
+ granting Git access. It shows this installation's Workflow registrations and
30
+ the Almanac reminders and Session Loops of Agents visible to Trellis. Pause
31
+ and Delete call the original owners and retain accepted work and history.
32
+ Agent read and management approval are independent. Missing or refused owners,
33
+ incomplete pages and unavailable private Local coverage are labelled, not
34
+ counted as empty schedules. Publication-context arming stays in Triggers.
28
35
  - Start from **Templates**: Bonsai checks (run `npm test` on each Change and
29
36
  report the result), Build on merge, Review a result, Storyboard (panels from
30
37
  Prints with a review per beat) and Storyboard + Save to git.
@@ -0,0 +1,59 @@
1
+ import { defineAppMethod } from "@fungi.computer/agar/backend-definition";
2
+ import {
3
+ listAgentSchedulesInputSchema,
4
+ agentScheduleTargetSchema,
5
+ agentSchedulesReplySchema,
6
+ agentScheduleControlReplySchema,
7
+ decodeAgentSchedulePage,
8
+ decodeAgentScheduleControl,
9
+ } from "../shared/agent-schedules.js";
10
+ import type { WorkflowMethodContext } from "./methods.js";
11
+
12
+ const granted = (context: WorkflowMethodContext) => {
13
+ if (!context.env.AGENTS)
14
+ throw new Error("Agent schedules are unavailable from this host");
15
+ return context.env.AGENTS;
16
+ };
17
+
18
+ export const agentScheduleMethods = {
19
+ listAgentSchedules: defineAppMethod({
20
+ description:
21
+ "Read one bounded native schedule page for an authorized Agent.",
22
+ effect: "read",
23
+ requires: ["agent.read"],
24
+ input: listAgentSchedulesInputSchema,
25
+ output: agentSchedulesReplySchema,
26
+ handler: async (input, context: WorkflowMethodContext) =>
27
+ decodeAgentSchedulePage(await granted(context).schedules(input)),
28
+ }),
29
+ pauseAgentSchedule: defineAppMethod({
30
+ description:
31
+ "Pause future occurrences of the exact listed Agent schedule, retaining accepted work.",
32
+ effect: "write",
33
+ requires: ["agent.manage"],
34
+ input: agentScheduleTargetSchema,
35
+ output: agentScheduleControlReplySchema,
36
+ handler: async (input, context: WorkflowMethodContext) =>
37
+ decodeAgentScheduleControl(await granted(context).pauseSchedule(input)),
38
+ }),
39
+ resumeAgentSchedule: defineAppMethod({
40
+ description:
41
+ "Resume future occurrences of the exact listed Agent schedule, retaining accepted work.",
42
+ effect: "write",
43
+ requires: ["agent.manage"],
44
+ input: agentScheduleTargetSchema,
45
+ output: agentScheduleControlReplySchema,
46
+ handler: async (input, context: WorkflowMethodContext) =>
47
+ decodeAgentScheduleControl(await granted(context).resumeSchedule(input)),
48
+ }),
49
+ deleteAgentSchedule: defineAppMethod({
50
+ description:
51
+ "Cancel future occurrences of the exact listed Agent schedule, retaining accepted work and history.",
52
+ effect: "write",
53
+ requires: ["agent.manage"],
54
+ input: agentScheduleTargetSchema,
55
+ output: agentScheduleControlReplySchema,
56
+ handler: async (input, context: WorkflowMethodContext) =>
57
+ decodeAgentScheduleControl(await granted(context).deleteSchedule(input)),
58
+ }),
59
+ };
@@ -197,6 +197,7 @@ export const libraryMethods = {
197
197
  "workflow.arm",
198
198
  "media.generation",
199
199
  "computer.writeFile",
200
+ "agent.manage",
200
201
  ],
201
202
  input: z.strictObject({}),
202
203
  output: z.strictObject({ more: z.boolean() }),
@@ -7,6 +7,11 @@ import type { BackgroundBinding } from "@fungi.computer/puffball/background-repl
7
7
  import type { GitBinding } from "@fungi.computer/agar/git";
8
8
  import type { WorkflowIndexes } from "./indexes.js";
9
9
  import { scheduleMethods } from "./schedule-methods.js";
10
+ import { agentScheduleMethods } from "./agent-schedule-methods.js";
11
+ import type {
12
+ listAgentSchedulesInputSchema,
13
+ agentScheduleTargetSchema,
14
+ } from "../shared/agent-schedules.js";
10
15
  import { toolFamilyMethods } from "./tool-family.js";
11
16
  import { libraryMethods } from "./library-methods.js";
12
17
  import * as Schema from "effect/Schema";
@@ -18,6 +23,7 @@ import {
18
23
  import {
19
24
  chatsReplySchema,
20
25
  type WorkflowTriggerArmTarget,
26
+ type ScheduleListInput,
21
27
  answerReviewReply,
22
28
  cancelReplySchema,
23
29
  catalogInputSchema,
@@ -33,6 +39,20 @@ const inboxPage = z.object({ items: z.array(z.json()).max(200) });
33
39
  export type WorkflowMethodContext = Readonly<{
34
40
  indexes?: WorkflowIndexes;
35
41
  env: Readonly<{
42
+ AGENTS?: Readonly<{
43
+ schedules(
44
+ input: z.output<typeof listAgentSchedulesInputSchema>,
45
+ ): Promise<typeof Schema.Json.Type>;
46
+ pauseSchedule(
47
+ input: z.output<typeof agentScheduleTargetSchema>,
48
+ ): Promise<typeof Schema.Json.Type>;
49
+ resumeSchedule(
50
+ input: z.output<typeof agentScheduleTargetSchema>,
51
+ ): Promise<typeof Schema.Json.Type>;
52
+ deleteSchedule(
53
+ input: z.output<typeof agentScheduleTargetSchema>,
54
+ ): Promise<typeof Schema.Json.Type>;
55
+ }>;
36
56
  GIT?: GitBinding;
37
57
  /** The member's Inbox, read only to offer chats for run reports. */
38
58
  INBOX?: Readonly<{
@@ -55,7 +75,13 @@ export type WorkflowMethodContext = Readonly<{
55
75
  disarmSchedule(input: {
56
76
  scheduleId: string;
57
77
  }): Promise<typeof Schema.Json.Type>;
58
- schedules(input: Record<string, never>): Promise<typeof Schema.Json.Type>;
78
+ pauseSchedule(input: {
79
+ scheduleId: string;
80
+ }): Promise<typeof Schema.Json.Type>;
81
+ resumeSchedule(input: {
82
+ scheduleId: string;
83
+ }): Promise<typeof Schema.Json.Type>;
84
+ schedules(input: ScheduleListInput): Promise<typeof Schema.Json.Type>;
59
85
  catalog(input: {
60
86
  installationId?: string | undefined;
61
87
  }): Promise<typeof Schema.Json.Type>;
@@ -133,6 +159,7 @@ export const appBackend = defineAppBackend<WorkflowMethodContext>({
133
159
  : { error: "not_granted" },
134
160
  }),
135
161
  ...scheduleMethods,
162
+ ...agentScheduleMethods,
136
163
  listChats: defineAppMethod({
137
164
  description:
138
165
  "List your existing chats (Agent Sessions) that a run or trigger may report its result to.",
@@ -1,9 +1,14 @@
1
1
  import {
2
2
  triggerTargetSchema,
3
3
  scheduleArmReplySchema,
4
+ schedulePauseInputSchema,
5
+ schedulePauseReplySchema,
6
+ scheduleResumeInputSchema,
7
+ scheduleResumeReplySchema,
4
8
  triggerDisarmReplySchema,
5
9
  schedulesReplySchema,
6
10
  scheduleDisarmInputSchema,
11
+ scheduleListInputSchema,
7
12
  eventDisarmInputSchema,
8
13
  triggerListInputSchema,
9
14
  eventArmReplySchema,
@@ -59,6 +64,28 @@ export const scheduleMethods = {
59
64
  );
60
65
  },
61
66
  }),
67
+ pause: defineAppMethod({
68
+ description: "Pause future occurrences of an armed Workflow schedule.",
69
+ effect: "write",
70
+ requires: ["workflow.run", "workflow.arm"],
71
+ input: schedulePauseInputSchema,
72
+ output: schedulePauseReplySchema,
73
+ handler: async (input, context: WorkflowMethodContext) =>
74
+ schedulePauseReplySchema.parse(
75
+ await granted(context).pauseSchedule(input),
76
+ ),
77
+ }),
78
+ resume: defineAppMethod({
79
+ description: "Resume future occurrences of a paused Workflow schedule.",
80
+ effect: "write",
81
+ requires: ["workflow.run", "workflow.arm"],
82
+ input: scheduleResumeInputSchema,
83
+ output: scheduleResumeReplySchema,
84
+ handler: async (input, context: WorkflowMethodContext) =>
85
+ scheduleResumeReplySchema.parse(
86
+ await granted(context).resumeSchedule(input),
87
+ ),
88
+ }),
62
89
  disarm: defineAppMethod({
63
90
  description: "Cancel an armed Workflow schedule.",
64
91
  effect: "write",
@@ -72,13 +99,13 @@ export const scheduleMethods = {
72
99
  }),
73
100
  listTriggers: defineAppMethod({
74
101
  description:
75
- "List this installation's schedules, next run times and paused reasons.",
102
+ "Read one bounded page of this installation's schedules, next run times and paused reasons.",
76
103
  effect: "read",
77
104
  requires: ["workflow.run"],
78
- input: triggerListInputSchema,
105
+ input: scheduleListInputSchema,
79
106
  output: schedulesReplySchema,
80
- handler: async (_input, context: WorkflowMethodContext) =>
81
- schedulesReplySchema.parse(await granted(context).schedules({})),
107
+ handler: async (input, context: WorkflowMethodContext) =>
108
+ schedulesReplySchema.parse(await granted(context).schedules(input)),
82
109
  }),
83
110
  armEventTrigger: defineAppMethod({
84
111
  description:
@@ -0,0 +1,41 @@
1
+ import { defineAppMethod } from "@fungi.computer/agar/backend-definition";
2
+ import { listAgentSchedulesInputSchema, agentScheduleTargetSchema, agentSchedulesReplySchema, agentScheduleControlReplySchema, decodeAgentSchedulePage, decodeAgentScheduleControl, } from "../shared/agent-schedules.js";
3
+ const granted = (context) => {
4
+ if (!context.env.AGENTS)
5
+ throw new Error("Agent schedules are unavailable from this host");
6
+ return context.env.AGENTS;
7
+ };
8
+ export const agentScheduleMethods = {
9
+ listAgentSchedules: defineAppMethod({
10
+ description: "Read one bounded native schedule page for an authorized Agent.",
11
+ effect: "read",
12
+ requires: ["agent.read"],
13
+ input: listAgentSchedulesInputSchema,
14
+ output: agentSchedulesReplySchema,
15
+ handler: async (input, context) => decodeAgentSchedulePage(await granted(context).schedules(input)),
16
+ }),
17
+ pauseAgentSchedule: defineAppMethod({
18
+ description: "Pause future occurrences of the exact listed Agent schedule, retaining accepted work.",
19
+ effect: "write",
20
+ requires: ["agent.manage"],
21
+ input: agentScheduleTargetSchema,
22
+ output: agentScheduleControlReplySchema,
23
+ handler: async (input, context) => decodeAgentScheduleControl(await granted(context).pauseSchedule(input)),
24
+ }),
25
+ resumeAgentSchedule: defineAppMethod({
26
+ description: "Resume future occurrences of the exact listed Agent schedule, retaining accepted work.",
27
+ effect: "write",
28
+ requires: ["agent.manage"],
29
+ input: agentScheduleTargetSchema,
30
+ output: agentScheduleControlReplySchema,
31
+ handler: async (input, context) => decodeAgentScheduleControl(await granted(context).resumeSchedule(input)),
32
+ }),
33
+ deleteAgentSchedule: defineAppMethod({
34
+ description: "Cancel future occurrences of the exact listed Agent schedule, retaining accepted work and history.",
35
+ effect: "write",
36
+ requires: ["agent.manage"],
37
+ input: agentScheduleTargetSchema,
38
+ output: agentScheduleControlReplySchema,
39
+ handler: async (input, context) => decodeAgentScheduleControl(await granted(context).deleteSchedule(input)),
40
+ }),
41
+ };
@@ -145,6 +145,7 @@ export const libraryMethods = {
145
145
  "workflow.arm",
146
146
  "media.generation",
147
147
  "computer.writeFile",
148
+ "agent.manage",
148
149
  ],
149
150
  input: z.strictObject({}),
150
151
  output: z.strictObject({ more: z.boolean() }),
@@ -3,6 +3,7 @@ import * as z from "zod";
3
3
  import { memberInboxItemSchema } from "@fungi.computer/agar/inbox";
4
4
  import { catalogReplySchema as catalogReply } from "./catalog.js";
5
5
  import { scheduleMethods } from "./schedule-methods.js";
6
+ import { agentScheduleMethods } from "./agent-schedule-methods.js";
6
7
  import { toolFamilyMethods } from "./tool-family.js";
7
8
  import { libraryMethods } from "./library-methods.js";
8
9
  import * as Schema from "effect/Schema";
@@ -65,6 +66,7 @@ export const appBackend = defineAppBackend({
65
66
  : { error: "not_granted" },
66
67
  }),
67
68
  ...scheduleMethods,
69
+ ...agentScheduleMethods,
68
70
  listChats: defineAppMethod({
69
71
  description: "List your existing chats (Agent Sessions) that a run or trigger may report its result to.",
70
72
  effect: "read",
@@ -1,4 +1,4 @@
1
- import { triggerTargetSchema, scheduleArmReplySchema, triggerDisarmReplySchema, schedulesReplySchema, scheduleDisarmInputSchema, eventDisarmInputSchema, triggerListInputSchema, eventArmReplySchema, eventTriggersReplySchema, } from "@fungi.computer/workflows-wire";
1
+ import { triggerTargetSchema, scheduleArmReplySchema, schedulePauseInputSchema, schedulePauseReplySchema, scheduleResumeInputSchema, scheduleResumeReplySchema, triggerDisarmReplySchema, schedulesReplySchema, scheduleDisarmInputSchema, scheduleListInputSchema, eventDisarmInputSchema, triggerListInputSchema, eventArmReplySchema, eventTriggersReplySchema, } from "@fungi.computer/workflows-wire";
2
2
  import { defineAppMethod } from "@fungi.computer/agar/backend-definition";
3
3
  import { createWorkflowLibrary } from "./library.js";
4
4
  import { readWorkflowCatalog } from "./catalog.js";
@@ -41,6 +41,22 @@ export const scheduleMethods = {
41
41
  return scheduleArmReplySchema.parse(await workflows.armSchedule({ ...input, digest: stored.digest }));
42
42
  },
43
43
  }),
44
+ pause: defineAppMethod({
45
+ description: "Pause future occurrences of an armed Workflow schedule.",
46
+ effect: "write",
47
+ requires: ["workflow.run", "workflow.arm"],
48
+ input: schedulePauseInputSchema,
49
+ output: schedulePauseReplySchema,
50
+ handler: async (input, context) => schedulePauseReplySchema.parse(await granted(context).pauseSchedule(input)),
51
+ }),
52
+ resume: defineAppMethod({
53
+ description: "Resume future occurrences of a paused Workflow schedule.",
54
+ effect: "write",
55
+ requires: ["workflow.run", "workflow.arm"],
56
+ input: scheduleResumeInputSchema,
57
+ output: scheduleResumeReplySchema,
58
+ handler: async (input, context) => scheduleResumeReplySchema.parse(await granted(context).resumeSchedule(input)),
59
+ }),
44
60
  disarm: defineAppMethod({
45
61
  description: "Cancel an armed Workflow schedule.",
46
62
  effect: "write",
@@ -50,12 +66,12 @@ export const scheduleMethods = {
50
66
  handler: async (input, context) => triggerDisarmReplySchema.parse(await granted(context).disarmSchedule(input)),
51
67
  }),
52
68
  listTriggers: defineAppMethod({
53
- description: "List this installation's schedules, next run times and paused reasons.",
69
+ description: "Read one bounded page of this installation's schedules, next run times and paused reasons.",
54
70
  effect: "read",
55
71
  requires: ["workflow.run"],
56
- input: triggerListInputSchema,
72
+ input: scheduleListInputSchema,
57
73
  output: schedulesReplySchema,
58
- handler: async (_input, context) => schedulesReplySchema.parse(await granted(context).schedules({})),
74
+ handler: async (input, context) => schedulesReplySchema.parse(await granted(context).schedules(input)),
59
75
  }),
60
76
  armEventTrigger: defineAppMethod({
61
77
  description: "Arm a published Workflow App-event trigger as you on the pinned Computer. An optional delivery chat receives every run's ending.",
@@ -0,0 +1,12 @@
1
+ import * as S from "effect/Schema";
2
+ import * as z from "zod";
3
+ import { agentScheduleListInputSchema, agentScheduleTargetSchema, agentSchedulePageSchema, agentScheduleControlReceiptSchema, } from "@fungi.computer/shiitake-extensions/schedules";
4
+ /** App-method arguments retain the native owner's page and identity grammar. */
5
+ export const listAgentSchedulesInputSchema = agentScheduleListInputSchema.extend({
6
+ agentId: agentScheduleTargetSchema.options[0].shape.agentId,
7
+ });
8
+ export { agentScheduleTargetSchema };
9
+ export const agentSchedulesReplySchema = z.fromJSONSchema(S.toJsonSchemaDocument(agentSchedulePageSchema).schema);
10
+ export const agentScheduleControlReplySchema = z.fromJSONSchema(S.toJsonSchemaDocument(agentScheduleControlReceiptSchema).schema);
11
+ export const decodeAgentSchedulePage = S.decodeUnknownSync(agentSchedulePageSchema, { onExcessProperty: "error" });
12
+ export const decodeAgentScheduleControl = S.decodeUnknownSync(agentScheduleControlReceiptSchema, { onExcessProperty: "error" });
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@fungi.computer/trellis",
3
3
  "description": "Trellis: build and run workflows of App methods, an App for Oyster",
4
- "version": "0.4.0",
4
+ "version": "0.6.0",
5
5
  "author": "Levi <levi@technomancy.dev>",
6
6
  "type": "module",
7
7
  "exports": {
@@ -14,25 +14,27 @@
14
14
  "./run-timeline": "./src/runs/public.ts"
15
15
  },
16
16
  "dependencies": {
17
- "@fungi.computer/puffball": "0.2.0",
17
+ "@fungi.computer/puffball": "0.4.0",
18
+ "@fungi.computer/shiitake-extensions": "0.6.0",
18
19
  "@cfworker/json-schema": "4.1.1",
19
- "@fungi.computer/agar": "0.5.0",
20
- "@fungi.computer/caps": "0.4.0",
20
+ "@fungi.computer/agar": "0.6.1",
21
+ "@fungi.computer/caps": "0.6.0",
21
22
  "@fungi.computer/stipe": "0.1.0",
22
23
  "@xyflow/react": "12.12.0",
23
24
  "react": "18.3.1",
24
25
  "react-dom": "18.3.1",
25
- "@fungi.computer/braid": "0.2.4",
26
+ "@fungi.computer/braid": "0.4.0",
26
27
  "effect": "4.0.2",
27
- "@fungi.computer/sigils": "0.2.0",
28
+ "@fungi.computer/sigils": "0.2.1",
28
29
  "lucide-react": "0.460.0",
29
30
  "zod": "4.4.3",
30
- "@fungi.computer/workflows-wire": "0.2.4",
31
+ "@fungi.computer/workflows-wire": "0.4.0",
31
32
  "@fungi.computer/cairn": "0.1.0",
32
33
  "@fungi.computer/watchdog": "0.1.0",
33
34
  "@fungi.computer/maosaico": "0.1.0"
34
35
  },
35
36
  "devDependencies": {
37
+ "@fungi.computer/sprite": "0.2.0",
36
38
  "@cloudflare/workers-types": "5.20260828.1",
37
39
  "@ladle/react": "5.1.1",
38
40
  "@tailwindcss/vite": "4.2.1",
@@ -94,6 +96,8 @@
94
96
  "workflow.arm",
95
97
  "git.repository",
96
98
  "agent.read",
99
+ "agent.list",
100
+ "agent.manage",
97
101
  "apps.open"
98
102
  ],
99
103
  "handlers": [],
@@ -118,6 +122,8 @@
118
122
  "cancel",
119
123
  "answerReview",
120
124
  "armSchedule",
125
+ "pauseSchedule",
126
+ "resumeSchedule",
121
127
  "disarmSchedule",
122
128
  "schedules",
123
129
  "armEventTrigger",
@@ -131,6 +137,15 @@
131
137
  "operations": [
132
138
  "page"
133
139
  ]
140
+ },
141
+ {
142
+ "name": "AGENTS",
143
+ "operations": [
144
+ "schedules",
145
+ "pauseSchedule",
146
+ "resumeSchedule",
147
+ "deleteSchedule"
148
+ ]
134
149
  }
135
150
  ]
136
151
  }
@@ -169,14 +184,15 @@
169
184
  "typecheck": "tsc -p tsconfig.json --noEmit && tsc -p backend/tsconfig.json --noEmit",
170
185
  "lint": "eslint src test backend --max-warnings=0",
171
186
  "rebuild-copies": "node --import tsx scripts/rebuild-copies.mjs",
172
- "test": "node --import tsx --test test/*.test.ts test/storyboard-method-pins.test.mjs && vitest run --config vitest.config.mjs test/main.test.tsx test/inspector.test.tsx test/use-draft.test.tsx test/review-dock.test.tsx test/runs.test.tsx test/runs-list.test.tsx test/timeline-items.test.tsx test/version-history.test.tsx test/portable-share.test.tsx test/review-output.test.tsx test/publish-controls.test.tsx",
187
+ "test": "node --import tsx --test test/*.test.ts test/storyboard-method-pins.test.mjs test/schedule-pages.test.mjs && vitest run --config vitest.config.mjs test/main.test.tsx test/inspector.test.tsx test/use-draft.test.tsx test/review-dock.test.tsx test/runs.test.tsx test/runs-list.test.tsx test/timeline-items.test.tsx test/version-history.test.tsx test/portable-share.test.tsx test/review-output.test.tsx test/publish-controls.test.tsx test/schedules.test.tsx",
173
188
  "test:readiness:browser": "node test/editor-w4.browser.mjs && node test/readiness.browser.mjs",
174
189
  "test:browser": "node test/workflows.browser.mjs",
190
+ "test:schedules:browser": "node test/schedules.browser.mjs",
175
191
  "test:storyboard:browser": "node test/storyboard.browser.mjs",
176
192
  "test:timeline:browser": "node test/run-timeline.browser.mjs",
177
193
  "format:check": "node ../../tooling/repository/scripts/format-package-check.mjs",
178
194
  "lint:anti-slop": "node ../../tooling/repository/scripts/lint-package-anti-slop.mjs",
179
- "test:nightly": "WORKFLOW_EVIDENCE=.botanical/workflows bash ../../.agents/skills/orchestrate-multi-lane-work/scripts/run-proof.sh node test/workflows.browser.mjs && pnpm run test:history:browser",
195
+ "test:nightly": "WORKFLOW_EVIDENCE=.botanical/workflows bash ../../tooling/proof-runner/run-proof.sh node test/workflows.browser.mjs && pnpm run test:history:browser",
180
196
  "test:editor:browser": "node test/editor.browser.mjs && node test/editor-w4.browser.mjs",
181
197
  "test:generic:browser": "node test/workflows-generic.browser.mjs",
182
198
  "test:nested:browser": "node test/nested-fields.browser.mjs",
@@ -0,0 +1,30 @@
1
+ import * as S from "effect/Schema";
2
+ import * as z from "zod";
3
+ import {
4
+ agentScheduleListInputSchema,
5
+ agentScheduleTargetSchema,
6
+ agentSchedulePageSchema,
7
+ agentScheduleControlReceiptSchema,
8
+ } from "@fungi.computer/shiitake-extensions/schedules";
9
+
10
+ /** App-method arguments retain the native owner's page and identity grammar. */
11
+ export const listAgentSchedulesInputSchema =
12
+ agentScheduleListInputSchema.extend({
13
+ agentId: agentScheduleTargetSchema.options[0].shape.agentId,
14
+ });
15
+ export { agentScheduleTargetSchema };
16
+
17
+ export const agentSchedulesReplySchema = z.fromJSONSchema(
18
+ S.toJsonSchemaDocument(agentSchedulePageSchema).schema,
19
+ );
20
+ export const agentScheduleControlReplySchema = z.fromJSONSchema(
21
+ S.toJsonSchemaDocument(agentScheduleControlReceiptSchema).schema,
22
+ );
23
+ export const decodeAgentSchedulePage = S.decodeUnknownSync(
24
+ agentSchedulePageSchema,
25
+ { onExcessProperty: "error" },
26
+ );
27
+ export const decodeAgentScheduleControl = S.decodeUnknownSync(
28
+ agentScheduleControlReceiptSchema,
29
+ { onExcessProperty: "error" },
30
+ );