@getforgeai/protocol 0.1.0-beta.3 → 0.1.0-beta.5

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.
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Generic reasoning-effort scale shared by all agent engines.
3
+ * Each engine maps it onto its native knob at spawn time (CLI side):
4
+ * - Claude Code: --effort low|medium|high|max
5
+ * - Codex: model_reasoning_effort (max -> xhigh)
6
+ * - OpenCode/Kilo: --variant, clamped per model vendor
7
+ * "Thinking" is deliberately not a separate toggle: on modern models the
8
+ * effort level IS the reasoning control.
9
+ */
10
+ export declare const EFFORT_LEVELS: readonly ["low", "medium", "high", "max"];
11
+ export type EffortLevel = (typeof EFFORT_LEVELS)[number];
12
+ export declare const EFFORT_LEVEL_LABELS: Record<EffortLevel, string>;
13
+ //# sourceMappingURL=effort-level.d.ts.map
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Generic reasoning-effort scale shared by all agent engines.
3
+ * Each engine maps it onto its native knob at spawn time (CLI side):
4
+ * - Claude Code: --effort low|medium|high|max
5
+ * - Codex: model_reasoning_effort (max -> xhigh)
6
+ * - OpenCode/Kilo: --variant, clamped per model vendor
7
+ * "Thinking" is deliberately not a separate toggle: on modern models the
8
+ * effort level IS the reasoning control.
9
+ */
10
+ export const EFFORT_LEVELS = ["low", "medium", "high", "max"];
11
+ export const EFFORT_LEVEL_LABELS = {
12
+ low: "Low",
13
+ medium: "Medium",
14
+ high: "High",
15
+ max: "Max",
16
+ };
17
+ //# sourceMappingURL=effort-level.js.map
@@ -0,0 +1,25 @@
1
+ import type { AgentType } from "./agent-type.js";
2
+ export type KnownModelSuggestion = {
3
+ /** The id to declare (what the engine's model flag/config accepts). */
4
+ id: string;
5
+ /** Short human label for UI chips. */
6
+ label: string;
7
+ /** Optional availability caveat shown as a hint. */
8
+ note?: string;
9
+ };
10
+ /**
11
+ * Curated model suggestions for engines with NO headless listing command
12
+ * (Claude Code and Codex). OpenCode and Kilo have live catalogs
13
+ * (`opencode models` / `kilo models`) fetched from the device instead —
14
+ * see the models:catalog:request socket event.
15
+ *
16
+ * Claude Code ids are ALIASES on purpose: they resolve server-side to the
17
+ * current best version, so declared lists do not go stale, and demand/supply
18
+ * string-matching stays coherent when everyone uses the same spelling.
19
+ *
20
+ * Curated as of 2026-07; revisit when vendors ship new lineups.
21
+ */
22
+ export declare const KNOWN_MODEL_SUGGESTIONS: Partial<Record<AgentType, KnownModelSuggestion[]>>;
23
+ /** Engines whose catalog can be listed live from the device. */
24
+ export declare const LIVE_CATALOG_ENGINES: readonly AgentType[];
25
+ //# sourceMappingURL=known-models.d.ts.map
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Curated model suggestions for engines with NO headless listing command
3
+ * (Claude Code and Codex). OpenCode and Kilo have live catalogs
4
+ * (`opencode models` / `kilo models`) fetched from the device instead —
5
+ * see the models:catalog:request socket event.
6
+ *
7
+ * Claude Code ids are ALIASES on purpose: they resolve server-side to the
8
+ * current best version, so declared lists do not go stale, and demand/supply
9
+ * string-matching stays coherent when everyone uses the same spelling.
10
+ *
11
+ * Curated as of 2026-07; revisit when vendors ship new lineups.
12
+ */
13
+ export const KNOWN_MODEL_SUGGESTIONS = {
14
+ CLAUDE_CODE: [
15
+ { id: "sonnet", label: "Sonnet" },
16
+ { id: "opus", label: "Opus", note: "Not available on the Pro plan" },
17
+ { id: "haiku", label: "Haiku" },
18
+ {
19
+ id: "fable",
20
+ label: "Fable",
21
+ note: "Requires organization access (server-gated)",
22
+ },
23
+ {
24
+ id: "sonnet[1m]",
25
+ label: "Sonnet 1M",
26
+ note: "1M context; usage credits on Pro",
27
+ },
28
+ ],
29
+ CODEX: [
30
+ { id: "gpt-5.5", label: "GPT-5.5", note: "Recommended default" },
31
+ { id: "gpt-5.4", label: "GPT-5.4" },
32
+ { id: "gpt-5.4-mini", label: "GPT-5.4 mini" },
33
+ { id: "gpt-5.6-sol", label: "GPT-5.6 Sol", note: "Entitlement-gated" },
34
+ { id: "gpt-5.6-terra", label: "GPT-5.6 Terra" },
35
+ ],
36
+ };
37
+ /** Engines whose catalog can be listed live from the device. */
38
+ export const LIVE_CATALOG_ENGINES = [
39
+ "OPENCODE",
40
+ "KILO",
41
+ ];
42
+ //# sourceMappingURL=known-models.js.map
@@ -47,6 +47,8 @@ export type TaskUpdatePayload = SocketEventEnvelope & {
47
47
  cliDeviceId?: string | null;
48
48
  taskGroupId?: string | null;
49
49
  taskGroupName?: string | null;
50
+ /** Task.metadata Json — carries dispatchBlocked ("MODEL_MISMATCH") among app data */
51
+ metadata?: Record<string, unknown> | null;
50
52
  startedAt?: string | null;
51
53
  taskBranch?: string | null;
52
54
  prUrl?: string | null;
@@ -72,6 +74,14 @@ export type TaskDispatchPayload = SocketEventEnvelope & {
72
74
  taskSlug?: string;
73
75
  projectSlug?: string;
74
76
  repoUrl?: string;
77
+ /**
78
+ * Resolved model/effort for the target device's engine
79
+ * (column -> project -> org demand chain; see ResolvedModelConfigSchema).
80
+ */
81
+ modelConfig?: {
82
+ model?: string;
83
+ effort?: string;
84
+ };
75
85
  };
76
86
  export type CliHeartbeatPayload = SocketEventEnvelope & {
77
87
  cliId: string;
@@ -333,6 +343,11 @@ export type WorkflowStepDispatchPayload = SocketEventEnvelope & {
333
343
  projectSlug: string;
334
344
  conversationHistory?: string;
335
345
  hasSnapshot?: boolean;
346
+ /** Resolved model/effort for the target device (project -> org demand). */
347
+ modelConfig?: {
348
+ model?: string;
349
+ effort?: string;
350
+ };
336
351
  };
337
352
  export type WorkflowAgentIdlePayload = SocketEventEnvelope & {
338
353
  workflowId: string;
@@ -380,6 +395,11 @@ export type TaskResumePayload = SocketEventEnvelope & {
380
395
  projectSlug?: string;
381
396
  taskBranch?: string;
382
397
  repoUrl?: string;
398
+ /** Resolved model/effort for the target device (column -> project -> org). */
399
+ modelConfig?: {
400
+ model?: string;
401
+ effort?: string;
402
+ };
383
403
  };
384
404
  export type ProjectKanbanConfigPayload = SocketEventEnvelope & {
385
405
  columns: {
@@ -399,6 +419,16 @@ export type CliConfigUpdatedPayload = {
399
419
  * subsequent agent spawns.
400
420
  */
401
421
  agentType?: string;
422
+ /**
423
+ * Server-owned available-models list per engine, present when the cockpit
424
+ * edited it. The CLI persists it as its declared model list.
425
+ */
426
+ availableModels?: Record<string, string[]>;
427
+ /**
428
+ * When true, the org locked the device's model list: the server ignores
429
+ * CLI-sent lists and `forge config set models` must refuse locally.
430
+ */
431
+ modelsLocked?: boolean;
402
432
  };
403
433
  export type SocketErrorPayload = {
404
434
  message: string;
@@ -445,6 +475,18 @@ export type ServerToClientEvents = {
445
475
  "workflow:tool-activity": (payload: WorkflowToolActivityPayload) => void;
446
476
  "workflow:token-usage": (payload: WorkflowTokenUsagePayload) => void;
447
477
  "cli:config:updated": (payload: CliConfigUpdatedPayload) => void;
478
+ /**
479
+ * Cockpit → CLI: list the models the device can actually run for an engine
480
+ * (OpenCode/Kilo run their own catalog command in the agent image; other
481
+ * engines answer from the curated KNOWN_MODEL_SUGGESTIONS). Ack-based with
482
+ * a server-side timeout — the container run can take tens of seconds.
483
+ */
484
+ "models:catalog:request": (payload: {
485
+ engine: string;
486
+ }, callback: (data: {
487
+ models: string[];
488
+ error?: string;
489
+ } | null) => void) => void;
448
490
  error: (payload: SocketErrorPayload) => void;
449
491
  };
450
492
  export type ClientToServerEvents = {
package/dist/index.d.ts CHANGED
@@ -3,6 +3,10 @@ export type { KanbanColumnConfig } from "./constants/task-status.js";
3
3
  export { AGENT_STATUS } from "./constants/agent-status.js";
4
4
  export { AGENT_TYPE, AGENT_TYPE_LABELS, DEFAULT_AGENT_TYPE, isAgentType, } from "./constants/agent-type.js";
5
5
  export type { AgentType } from "./constants/agent-type.js";
6
+ export { EFFORT_LEVELS, EFFORT_LEVEL_LABELS, } from "./constants/effort-level.js";
7
+ export type { EffortLevel } from "./constants/effort-level.js";
8
+ export { KNOWN_MODEL_SUGGESTIONS, LIVE_CATALOG_ENGINES, } from "./constants/known-models.js";
9
+ export type { KnownModelSuggestion } from "./constants/known-models.js";
6
10
  export { CLI_STATUS } from "./constants/cli-status.js";
7
11
  export { WORKFLOW_TYPE } from "./constants/workflow-type.js";
8
12
  export type { WorkflowType } from "./constants/workflow-type.js";
package/dist/index.js CHANGED
@@ -2,6 +2,8 @@
2
2
  export { KANBAN_SUB_STATUS, DEFAULT_KANBAN_COLUMNS, KANBAN_COLUMN_COLORS, DEFAULT_MAX_REQUEUE, } from "./constants/task-status.js";
3
3
  export { AGENT_STATUS } from "./constants/agent-status.js";
4
4
  export { AGENT_TYPE, AGENT_TYPE_LABELS, DEFAULT_AGENT_TYPE, isAgentType, } from "./constants/agent-type.js";
5
+ export { EFFORT_LEVELS, EFFORT_LEVEL_LABELS, } from "./constants/effort-level.js";
6
+ export { KNOWN_MODEL_SUGGESTIONS, LIVE_CATALOG_ENGINES, } from "./constants/known-models.js";
5
7
  export { CLI_STATUS } from "./constants/cli-status.js";
6
8
  export { WORKFLOW_TYPE } from "./constants/workflow-type.js";
7
9
  export { WORKFLOW_SCOPE } from "./constants/workflow-scope.js";
@@ -89,6 +89,15 @@ export declare const TaskResumePayloadSchema: z.ZodObject<{
89
89
  projectSlug: z.ZodOptional<z.ZodString>;
90
90
  taskBranch: z.ZodOptional<z.ZodString>;
91
91
  repoUrl: z.ZodOptional<z.ZodString>;
92
+ modelConfig: z.ZodOptional<z.ZodObject<{
93
+ model: z.ZodOptional<z.ZodString>;
94
+ effort: z.ZodOptional<z.ZodEnum<{
95
+ low: "low";
96
+ medium: "medium";
97
+ high: "high";
98
+ max: "max";
99
+ }>>;
100
+ }, z.core.$strip>>;
92
101
  }, z.core.$strip>;
93
102
  export type TaskResumePayload = z.infer<typeof TaskResumePayloadSchema>;
94
103
  //# sourceMappingURL=cli-api.schema.d.ts.map
@@ -1,4 +1,5 @@
1
1
  import { z } from "zod";
2
+ import { ResolvedModelConfigSchema } from "./model-config.schema.js";
2
3
  // --- Heartbeat ---
3
4
  export const HeartbeatRequestSchema = z.object({
4
5
  cliId: z.string(),
@@ -69,5 +70,6 @@ export const TaskResumePayloadSchema = z.object({
69
70
  projectSlug: z.string().optional(),
70
71
  taskBranch: z.string().optional(),
71
72
  repoUrl: z.string().optional(),
73
+ modelConfig: ResolvedModelConfigSchema.optional(),
72
74
  });
73
75
  //# sourceMappingURL=cli-api.schema.js.map
@@ -16,4 +16,6 @@ export { CreateReleaseSchema, UpdateReleaseStatusSchema, ReleaseMergeProgressSch
16
16
  export type { CreateRelease, UpdateReleaseStatus, ReleaseMergeProgress, ReleaseReady, ReleaseFinalized, } from "./release.schema.js";
17
17
  export { ForgeGetTaskInputSchema, ForgeGetTaskOutputSchema, ForgeUpdateStatusInputSchema, ForgeUpdateStatusOutputSchema, ForgeAskHumanInputSchema, ForgeAskHumanOutputSchema, ForgeRequeueInputSchema, TaskRequeueResponseSchema, TaskAskHumanPayloadSchema, AgentStatusPayloadSchema, AgentStreamPayloadSchema, AgentToolActivityPayloadSchema, ForgeCompleteStepDeliverableSchema, ForgeCompleteStepInputSchema, ForgeCompleteStepPayloadSchema, ForgeCreateTaskGroupInputSchema, ForgeCreateTaskGroupPayloadSchema, ForgeAddGroupDependencyInputSchema, ForgeAddGroupDependencyPayloadSchema, ForgeCreateTaskInputSchema, ForgeCreateTaskPayloadSchema, ForgeAddTaskDependencyInputSchema, ForgeAddTaskDependencyPayloadSchema, ForgeUpdateTaskInputSchema, ForgeUpdateTaskPayloadSchema, ForgeDeleteTaskInputSchema, ForgeDeleteTaskPayloadSchema, ForgeUpdateTaskGroupInputSchema, ForgeUpdateTaskGroupPayloadSchema, ForgeDeleteTaskGroupInputSchema, ForgeDeleteTaskGroupPayloadSchema, ForgeRemoveTaskDependencyInputSchema, ForgeRemoveTaskDependencyPayloadSchema, ForgeRemoveGroupDependencyInputSchema, ForgeRemoveGroupDependencyPayloadSchema, } from "./mcp-tools.schema.js";
18
18
  export type { ForgeGetTaskInput, ForgeGetTaskOutput, ForgeUpdateStatusInput, ForgeUpdateStatusOutput, ForgeAskHumanInput, ForgeAskHumanOutput, ForgeRequeueInput, TaskRequeueResponse, TaskAskHumanPayload, AgentStatusPayloadValidated, AgentStreamPayloadValidated, AgentToolActivityPayloadValidated, ForgeCompleteStepDeliverable, ForgeCompleteStepInput, ForgeCompleteStepPayload, ForgeCreateTaskGroupInput, ForgeCreateTaskGroupPayload, ForgeAddGroupDependencyInput, ForgeAddGroupDependencyPayload, ForgeCreateTaskInput, ForgeCreateTaskPayload, ForgeAddTaskDependencyInput, ForgeAddTaskDependencyPayload, ForgeUpdateTaskInput, ForgeUpdateTaskPayload, ForgeDeleteTaskInput, ForgeDeleteTaskPayload, ForgeUpdateTaskGroupInput, ForgeUpdateTaskGroupPayload, ForgeDeleteTaskGroupInput, ForgeDeleteTaskGroupPayload, ForgeRemoveTaskDependencyInput, ForgeRemoveTaskDependencyPayload, ForgeRemoveGroupDependencyInput, ForgeRemoveGroupDependencyPayload, } from "./mcp-tools.schema.js";
19
+ export { EffortLevelSchema, ModelConfigSchema, AvailableModelsSchema, ResolvedModelConfigSchema, } from "./model-config.schema.js";
20
+ export type { ModelConfig, AvailableModels, ResolvedModelConfig, } from "./model-config.schema.js";
19
21
  //# sourceMappingURL=index.d.ts.map
@@ -16,4 +16,5 @@ export { WorkflowStreamPayloadSchema, WorkflowStreamEndPayloadSchema, WorkflowMe
16
16
  export { CreateReleaseSchema, UpdateReleaseStatusSchema, ReleaseMergeProgressSchema, ReleaseReadySchema, ReleaseFinalizedSchema, } from "./release.schema.js";
17
17
  // MCP tool schemas (Story 6.1 + 6.4b + 6.5)
18
18
  export { ForgeGetTaskInputSchema, ForgeGetTaskOutputSchema, ForgeUpdateStatusInputSchema, ForgeUpdateStatusOutputSchema, ForgeAskHumanInputSchema, ForgeAskHumanOutputSchema, ForgeRequeueInputSchema, TaskRequeueResponseSchema, TaskAskHumanPayloadSchema, AgentStatusPayloadSchema, AgentStreamPayloadSchema, AgentToolActivityPayloadSchema, ForgeCompleteStepDeliverableSchema, ForgeCompleteStepInputSchema, ForgeCompleteStepPayloadSchema, ForgeCreateTaskGroupInputSchema, ForgeCreateTaskGroupPayloadSchema, ForgeAddGroupDependencyInputSchema, ForgeAddGroupDependencyPayloadSchema, ForgeCreateTaskInputSchema, ForgeCreateTaskPayloadSchema, ForgeAddTaskDependencyInputSchema, ForgeAddTaskDependencyPayloadSchema, ForgeUpdateTaskInputSchema, ForgeUpdateTaskPayloadSchema, ForgeDeleteTaskInputSchema, ForgeDeleteTaskPayloadSchema, ForgeUpdateTaskGroupInputSchema, ForgeUpdateTaskGroupPayloadSchema, ForgeDeleteTaskGroupInputSchema, ForgeDeleteTaskGroupPayloadSchema, ForgeRemoveTaskDependencyInputSchema, ForgeRemoveTaskDependencyPayloadSchema, ForgeRemoveGroupDependencyInputSchema, ForgeRemoveGroupDependencyPayloadSchema, } from "./mcp-tools.schema.js";
19
+ export { EffortLevelSchema, ModelConfigSchema, AvailableModelsSchema, ResolvedModelConfigSchema, } from "./model-config.schema.js";
19
20
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,59 @@
1
+ import { z } from "zod";
2
+ export declare const EffortLevelSchema: z.ZodEnum<{
3
+ low: "low";
4
+ medium: "medium";
5
+ high: "high";
6
+ max: "max";
7
+ }>;
8
+ /**
9
+ * Demand-side settings stored on Organization.modelConfig and
10
+ * Project.modelConfig: the model wanted per engine (ids are engine-specific)
11
+ * plus a default effort. All fields optional — absent means "inherit"
12
+ * (project -> org -> device default).
13
+ */
14
+ export declare const ModelConfigSchema: z.ZodObject<{
15
+ models: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
16
+ CLAUDE_CODE: "CLAUDE_CODE";
17
+ CODEX: "CODEX";
18
+ OPENCODE: "OPENCODE";
19
+ KILO: "KILO";
20
+ }> & z.core.$partial, z.ZodString>>;
21
+ effort: z.ZodOptional<z.ZodEnum<{
22
+ low: "low";
23
+ medium: "medium";
24
+ high: "high";
25
+ max: "max";
26
+ }>>;
27
+ }, z.core.$strip>;
28
+ export type ModelConfig = z.infer<typeof ModelConfigSchema>;
29
+ /**
30
+ * Supply-side declaration stored on CliDevice.availableModels: the models the
31
+ * device owner has made usable per engine. First entry = the device's default
32
+ * for that engine. Editable from the CLI unless the org locked it
33
+ * (CliDevice.modelsLocked), in which case the cockpit owns the list.
34
+ */
35
+ export declare const AvailableModelsSchema: z.ZodRecord<z.ZodEnum<{
36
+ CLAUDE_CODE: "CLAUDE_CODE";
37
+ CODEX: "CODEX";
38
+ OPENCODE: "OPENCODE";
39
+ KILO: "KILO";
40
+ }> & z.core.$partial, z.ZodArray<z.ZodString>>;
41
+ export type AvailableModels = z.infer<typeof AvailableModelsSchema>;
42
+ /**
43
+ * The RESOLVED config riding dispatch payloads (task:dispatch,
44
+ * workflow:step:dispatch): a single model string for the target device's
45
+ * engine, plus the effort. Resolution chain (cloud side):
46
+ * column -> project -> org; a device not declaring the demanded model is
47
+ * ineligible for the task.
48
+ */
49
+ export declare const ResolvedModelConfigSchema: z.ZodObject<{
50
+ model: z.ZodOptional<z.ZodString>;
51
+ effort: z.ZodOptional<z.ZodEnum<{
52
+ low: "low";
53
+ medium: "medium";
54
+ high: "high";
55
+ max: "max";
56
+ }>>;
57
+ }, z.core.$strip>;
58
+ export type ResolvedModelConfig = z.infer<typeof ResolvedModelConfigSchema>;
59
+ //# sourceMappingURL=model-config.schema.d.ts.map
@@ -0,0 +1,35 @@
1
+ import { z } from "zod";
2
+ import { AGENT_TYPE } from "../constants/agent-type.js";
3
+ import { EFFORT_LEVELS } from "../constants/effort-level.js";
4
+ export const EffortLevelSchema = z.enum(EFFORT_LEVELS);
5
+ /**
6
+ * Demand-side settings stored on Organization.modelConfig and
7
+ * Project.modelConfig: the model wanted per engine (ids are engine-specific)
8
+ * plus a default effort. All fields optional — absent means "inherit"
9
+ * (project -> org -> device default).
10
+ */
11
+ export const ModelConfigSchema = z.object({
12
+ models: z
13
+ .partialRecord(z.enum(AGENT_TYPE), z.string().trim().min(1).max(120))
14
+ .optional(),
15
+ effort: EffortLevelSchema.optional(),
16
+ });
17
+ /**
18
+ * Supply-side declaration stored on CliDevice.availableModels: the models the
19
+ * device owner has made usable per engine. First entry = the device's default
20
+ * for that engine. Editable from the CLI unless the org locked it
21
+ * (CliDevice.modelsLocked), in which case the cockpit owns the list.
22
+ */
23
+ export const AvailableModelsSchema = z.partialRecord(z.enum(AGENT_TYPE), z.array(z.string().trim().min(1).max(120)).max(20));
24
+ /**
25
+ * The RESOLVED config riding dispatch payloads (task:dispatch,
26
+ * workflow:step:dispatch): a single model string for the target device's
27
+ * engine, plus the effort. Resolution chain (cloud side):
28
+ * column -> project -> org; a device not declaring the demanded model is
29
+ * ineligible for the task.
30
+ */
31
+ export const ResolvedModelConfigSchema = z.object({
32
+ model: z.string().trim().min(1).max(120).optional(),
33
+ effort: EffortLevelSchema.optional(),
34
+ });
35
+ //# sourceMappingURL=model-config.schema.js.map
@@ -16,6 +16,15 @@ export declare const WorkflowStepDispatchPayloadSchema: z.ZodObject<{
16
16
  conversationHistory: z.ZodOptional<z.ZodString>;
17
17
  skillSlug: z.ZodOptional<z.ZodString>;
18
18
  hasSnapshot: z.ZodOptional<z.ZodBoolean>;
19
+ modelConfig: z.ZodOptional<z.ZodObject<{
20
+ model: z.ZodOptional<z.ZodString>;
21
+ effort: z.ZodOptional<z.ZodEnum<{
22
+ low: "low";
23
+ medium: "medium";
24
+ high: "high";
25
+ max: "max";
26
+ }>>;
27
+ }, z.core.$strip>>;
19
28
  timestamp: z.ZodString;
20
29
  }, z.core.$strip>;
21
30
  export type WorkflowStepDispatchPayload = z.infer<typeof WorkflowStepDispatchPayloadSchema>;
@@ -1,4 +1,5 @@
1
1
  import { z } from "zod";
2
+ import { ResolvedModelConfigSchema } from "./model-config.schema.js";
2
3
  // --- workflow:step:dispatch payload validation (Story 6b.7) ---
3
4
  export const WorkflowStepDispatchPayloadSchema = z.object({
4
5
  orgId: z.string(),
@@ -17,6 +18,8 @@ export const WorkflowStepDispatchPayloadSchema = z.object({
17
18
  conversationHistory: z.string().optional(),
18
19
  skillSlug: z.string().optional(),
19
20
  hasSnapshot: z.boolean().optional(),
21
+ /** Resolved model/effort for the target device (column -> project -> org). */
22
+ modelConfig: ResolvedModelConfigSchema.optional(),
20
23
  timestamp: z.string(),
21
24
  });
22
25
  //# sourceMappingURL=workflow-dispatch.schema.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getforgeai/protocol",
3
- "version": "0.1.0-beta.3",
3
+ "version": "0.1.0-beta.5",
4
4
  "description": "Shared types, constants, Socket.io event definitions and Zod schemas for the ForgeAI CLI/Cloud contract.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",