@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.
- package/dist/constants/effort-level.d.ts +13 -0
- package/dist/constants/effort-level.js +17 -0
- package/dist/constants/known-models.d.ts +25 -0
- package/dist/constants/known-models.js +42 -0
- package/dist/events/socket-events.d.ts +42 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +2 -0
- package/dist/validation/cli-api.schema.d.ts +9 -0
- package/dist/validation/cli-api.schema.js +2 -0
- package/dist/validation/index.d.ts +2 -0
- package/dist/validation/index.js +1 -0
- package/dist/validation/model-config.schema.d.ts +59 -0
- package/dist/validation/model-config.schema.js +35 -0
- package/dist/validation/workflow-dispatch.schema.d.ts +9 -0
- package/dist/validation/workflow-dispatch.schema.js +3 -0
- package/package.json +1 -1
|
@@ -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
|
package/dist/validation/index.js
CHANGED
|
@@ -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