Skip to content

Commit 79d67c6

Browse files
feat(protocol): reconcile schemas with factory-mono-alpha source of truth
Adds missing fields/enum members detected by mono's verify-sdk-parity audit so the SDK is bit-equivalent to mono's wire schemas: - enums.ts: add ModelID entries ORIEL_0601, OXIDE_0601, OXBOW_0601, OCELOT_0601 (Olympus families released after the previous port). - general-settings.ts: add McpAutonomyUrlOverrideSchema + mcpAutonomyUrlOverrides on ManagedSettingsBaseSchema, and dismissedNewModels on GeneralSettingsSchema. - daemon/droid.ts: - DaemonGetGitDiffDataSchema: add committedDiff / committedFiles / committedTotalAdditions / committedTotalDeletions for the committed-only diff section the frontend renders. - DaemonGetGitDiffRequestParamsSchema: add statsOnly. - DaemonGetWorkspaceFileContentRequestParamsSchema: add encoding (utf8|base64) for binary file previews. - DaemonGetWorkspaceFileContentResultSchema: add encoding, mimeType, isBinary so the frontend can guard binary content properly. After this change factory-mono-alpha reports 265/265 schema MATCH and 0 MISMATCH against @factory/droid-sdk/protocol. Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
1 parent ef8bb8b commit 79d67c6

3 files changed

Lines changed: 37 additions & 0 deletions

File tree

src/protocol/daemon/droid.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -566,6 +566,7 @@ export const DaemonRenameSessionResponseSchema =
566566
export const DaemonGetGitDiffRequestParamsSchema = z.object({
567567
sessionId: z.string(),
568568
baseBranch: z.string().optional(),
569+
statsOnly: z.boolean().optional(),
569570
});
570571

571572
export const DaemonGetGitDiffFileSchema = z.object({
@@ -593,6 +594,10 @@ export const DaemonGetGitDiffDataSchema = z.object({
593594
totalDeletions: z.number(),
594595
remoteUrl: z.string().nullable(),
595596
commits: z.array(DaemonGetGitDiffCommitSchema),
597+
committedDiff: z.string().default(''),
598+
committedFiles: z.array(DaemonGetGitDiffFileSchema).default([]),
599+
committedTotalAdditions: z.number().default(0),
600+
committedTotalDeletions: z.number().default(0),
596601
unstagedDiff: z.string().default(''),
597602
unstagedFiles: z.array(DaemonGetGitDiffFileSchema).default([]),
598603
unstagedTotalAdditions: z.number().default(0),
@@ -832,11 +837,32 @@ export const DaemonGetProxyTokenResponseSchema = z.union([
832837
const DaemonGetWorkspaceFileContentRequestParamsSchema = z.object({
833838
sessionId: z.string(),
834839
filePath: z.string(),
840+
/**
841+
* How the file bytes should be encoded in the response. `utf8` (default)
842+
* returns decoded text for source/markdown previews; `base64` returns the
843+
* raw bytes for binary previews (PDF, images) that the client turns into a
844+
* blob URL.
845+
*/
846+
encoding: z.enum(['utf8', 'base64']).optional(),
835847
});
836848

837849
export const DaemonGetWorkspaceFileContentResultSchema = z.object({
838850
content: z.string(),
839851
byteLength: z.number(),
852+
/**
853+
* Encoding of `content`: decoded text (`utf8`) or raw bytes (`base64`).
854+
* Optional for protocol back-compat; absent responses are treated as
855+
* `utf8` by the client.
856+
*/
857+
encoding: z.enum(['utf8', 'base64']).optional(),
858+
/** Best-effort MIME type derived from the file extension, when known. */
859+
mimeType: z.string().optional(),
860+
/**
861+
* Set when a `utf8` request targeted a file whose bytes are not valid text
862+
* (e.g. a binary file opened by the generic code renderer). The client
863+
* shows a "binary file" guard instead of rendering garbage.
864+
*/
865+
isBinary: z.boolean().optional(),
840866
});
841867

842868
export const DaemonGetWorkspaceFileContentRequestSchema =

src/protocol/enums.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -571,6 +571,10 @@ export enum ModelID {
571571
OLM_0305 = 'olm-03-05',
572572
ORBIT_0409 = 'orbit-04-09',
573573
OLIVE_0522 = 'olive-05-22',
574+
ORIEL_0601 = 'oriel-06-01',
575+
OXIDE_0601 = 'oxide-06-01',
576+
OXBOW_0601 = 'oxbow-06-01',
577+
OCELOT_0601 = 'ocelot-06-01',
574578

575579
// Google models
576580
GEMINI_2_5_FLASH = 'gemini-2.5-flash',

src/protocol/general-settings.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,11 @@ const McpAutonomyLevelSchema = z.enum([
171171
AutonomyLevel.High,
172172
]);
173173

174+
const McpAutonomyUrlOverrideSchema = z.object({
175+
urlPattern: z.string().trim().min(1),
176+
defaultLevel: McpAutonomyLevelSchema,
177+
});
178+
174179
const StatusLineConfigSchema = z.object({
175180
type: z.literal('command').optional(),
176181
command: z.string(),
@@ -192,6 +197,7 @@ export const ManagedSettingsBaseSchema = z.object({
192197
})
193198
)
194199
.optional(),
200+
mcpAutonomyUrlOverrides: z.array(McpAutonomyUrlOverrideSchema).optional(),
195201
cloudSessionSync: z.boolean().optional(),
196202
wikiCloudSync: z.boolean().optional(),
197203
includeCoAuthoredByDroid: z.boolean().optional(),
@@ -255,6 +261,7 @@ export const GeneralSettingsSchema = ManagedSettingsBaseSchema.extend({
255261
missionOrchestratorModel: z.string().optional(),
256262
missionOrchestratorReasoningEffort: ReasoningEffortSchema.optional(),
257263
modelFavorites: z.array(z.string()).optional(),
264+
dismissedNewModels: z.array(z.string()).optional(),
258265
logoAnimation: z.nativeEnum(LogoAnimationMode).optional(),
259266
missionModelSettings: MissionModelSettingsSchema.optional(),
260267
subagentModelSettings: SubagentModelSettingsSchema.optional(),

0 commit comments

Comments
 (0)