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

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
@@ -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;
package/dist/index.d.ts CHANGED
@@ -3,6 +3,8 @@ 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";
6
8
  export { CLI_STATUS } from "./constants/cli-status.js";
7
9
  export { WORKFLOW_TYPE } from "./constants/workflow-type.js";
8
10
  export type { WorkflowType } from "./constants/workflow-type.js";
package/dist/index.js CHANGED
@@ -2,6 +2,7 @@
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";
5
6
  export { CLI_STATUS } from "./constants/cli-status.js";
6
7
  export { WORKFLOW_TYPE } from "./constants/workflow-type.js";
7
8
  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.4",
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",