mixdog 1.3.4 → 1.3.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.
Files changed (197) hide show
  1. package/LICENSES/oh-my-pi-MIT.txt +23 -0
  2. package/NOTICE.md +15 -0
  3. package/README.md +11 -0
  4. package/package.json +2 -1
  5. package/scripts/embed-google-oauth-client.mjs +49 -0
  6. package/scripts/lib/test-spawn-ledger.mjs +46 -1
  7. package/scripts/test.mjs +5 -0
  8. package/src/defaults/shipped-history.json +8 -0
  9. package/src/defaults/skills/browser-use/SKILL.md +21 -9
  10. package/src/defaults/skills/setup/SKILL.md +7 -2
  11. package/src/defaults/skills/setup/references/actions.md +82 -27
  12. package/src/defaults/skills/setup/references/surfaces.md +67 -34
  13. package/src/defaults/skills/setup-guide/SKILL.md +3 -3
  14. package/src/lib/keychain-cjs.cjs +359 -29
  15. package/src/rules/agent-mode/AGENT_MODE.md +10 -2
  16. package/src/rules/agent-mode/MIXY.md +12 -0
  17. package/src/runtime/agent/orchestrator/agent-runtime/heartbeat-completion.mjs +193 -0
  18. package/src/runtime/agent/orchestrator/config.mjs +18 -0
  19. package/src/runtime/agent/orchestrator/mcp/client-transport.mjs +2 -2
  20. package/src/runtime/agent/orchestrator/mcp/client.mjs +6 -2
  21. package/src/runtime/agent/orchestrator/mcp/oauth-callback.mjs +31 -2
  22. package/src/runtime/agent/orchestrator/mcp/oauth-client.mjs +16 -3
  23. package/src/runtime/agent/orchestrator/mcp/oauth-login.mjs +42 -7
  24. package/src/runtime/agent/orchestrator/mcp/oauth-provider.mjs +21 -2
  25. package/src/runtime/agent/orchestrator/mcp/oauth-shared.mjs +23 -0
  26. package/src/runtime/agent/orchestrator/mcp/oauth.mjs +11 -1
  27. package/src/runtime/agent/orchestrator/providers/account-pool.mjs +68 -23
  28. package/src/runtime/agent/orchestrator/providers/admission-scheduler.mjs +22 -1
  29. package/src/runtime/agent/orchestrator/providers/anthropic-api-request.mjs +18 -5
  30. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-client-version.mjs +1 -1
  31. package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +15 -3
  32. package/src/runtime/agent/orchestrator/providers/antigravity-oauth-catalog.mjs +52 -8
  33. package/src/runtime/agent/orchestrator/providers/antigravity-oauth.mjs +10 -1
  34. package/src/runtime/agent/orchestrator/providers/antigravity-request.mjs +22 -6
  35. package/src/runtime/agent/orchestrator/providers/antigravity-response.mjs +15 -4
  36. package/src/runtime/agent/orchestrator/providers/antigravity-stream.mjs +17 -2
  37. package/src/runtime/agent/orchestrator/providers/antigravity-transport.mjs +19 -2
  38. package/src/runtime/agent/orchestrator/providers/codex-client-meta.mjs +1 -1
  39. package/src/runtime/agent/orchestrator/providers/cursor-wire-normalization.mjs +10 -4
  40. package/src/runtime/agent/orchestrator/providers/cursor-wire-protobuf.mjs +10 -217
  41. package/src/runtime/agent/orchestrator/providers/cursor.mjs +7 -0
  42. package/src/runtime/agent/orchestrator/providers/devin-auth.mjs +409 -0
  43. package/src/runtime/agent/orchestrator/providers/devin-wire-families.mjs +187 -0
  44. package/src/runtime/agent/orchestrator/providers/devin-wire-identity.mjs +342 -0
  45. package/src/runtime/agent/orchestrator/providers/devin-wire-models.mjs +541 -0
  46. package/src/runtime/agent/orchestrator/providers/devin-wire-protobuf.mjs +305 -0
  47. package/src/runtime/agent/orchestrator/providers/devin-wire-request.mjs +558 -0
  48. package/src/runtime/agent/orchestrator/providers/devin-wire-schema.mjs +880 -0
  49. package/src/runtime/agent/orchestrator/providers/devin-wire-session.mjs +190 -0
  50. package/src/runtime/agent/orchestrator/providers/devin-wire-tool-args.mjs +351 -0
  51. package/src/runtime/agent/orchestrator/providers/devin-wire-transport.mjs +560 -0
  52. package/src/runtime/agent/orchestrator/providers/devin.mjs +491 -0
  53. package/src/runtime/agent/orchestrator/providers/effort-configuration.mjs +3 -0
  54. package/src/runtime/agent/orchestrator/providers/gemini-output-limit.mjs +46 -0
  55. package/src/runtime/agent/orchestrator/providers/gemini-reasoning-relay.mjs +30 -0
  56. package/src/runtime/agent/orchestrator/providers/gemini-request-body.mjs +7 -11
  57. package/src/runtime/agent/orchestrator/providers/gemini-retry-policy.mjs +61 -22
  58. package/src/runtime/agent/orchestrator/providers/gemini-sdk-request.mjs +1 -0
  59. package/src/runtime/agent/orchestrator/providers/gemini-stream.mjs +71 -4
  60. package/src/runtime/agent/orchestrator/providers/gemini.mjs +25 -2
  61. package/src/runtime/agent/orchestrator/providers/grok-client-version.mjs +1 -1
  62. package/src/runtime/agent/orchestrator/providers/lib/anthropic-request-utils.mjs +96 -5
  63. package/src/runtime/agent/orchestrator/providers/lib/tail-reminder-split.mjs +23 -5
  64. package/src/runtime/agent/orchestrator/providers/oauth-credential-probes.mjs +17 -0
  65. package/src/runtime/agent/orchestrator/providers/oauth-usage.mjs +39 -3
  66. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/stream-state.mjs +3 -1
  67. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream.mjs +2 -0
  68. package/src/runtime/agent/orchestrator/providers/openai-error-contract.mjs +6 -1
  69. package/src/runtime/agent/orchestrator/providers/opencode-go-gemini.mjs +1 -0
  70. package/src/runtime/agent/orchestrator/providers/provider-availability.mjs +19 -0
  71. package/src/runtime/agent/orchestrator/providers/registry.mjs +17 -3
  72. package/src/runtime/agent/orchestrator/providers/wire-protobuf-codec.mjs +368 -0
  73. package/src/runtime/agent/orchestrator/runtime-core/builtin-features.mjs +2 -0
  74. package/src/runtime/agent/orchestrator/runtime-core/orchestration.mjs +1 -1
  75. package/src/runtime/agent/orchestrator/runtime-core/reaction-tool-defs.mjs +133 -0
  76. package/src/runtime/agent/orchestrator/runtime-core/tool-catalog-data.mjs +3 -0
  77. package/src/runtime/agent/orchestrator/runtime-core/tool-defs.mjs +23 -5
  78. package/src/runtime/agent/orchestrator/runtime-core/tool-profile.mjs +35 -10
  79. package/src/runtime/agent/orchestrator/runtime-core/workflow/agents.mjs +57 -10
  80. package/src/runtime/agent/orchestrator/runtime-core/workflow/context.mjs +9 -6
  81. package/src/runtime/agent/orchestrator/runtime-core/workflow-ids.mjs +1 -1
  82. package/src/runtime/agent/orchestrator/session/agent-loop.mjs +18 -0
  83. package/src/runtime/agent/orchestrator/session/agent-room.d.mts +0 -3
  84. package/src/runtime/agent/orchestrator/session/agent-room.mjs +10 -4
  85. package/src/runtime/agent/orchestrator/session/compact/runner.mjs +15 -3
  86. package/src/runtime/agent/orchestrator/session/eager-dispatch.mjs +5 -0
  87. package/src/runtime/agent/orchestrator/session/human-gate/gate.mjs +36 -4
  88. package/src/runtime/agent/orchestrator/session/human-gate/outbound-policy.mjs +6 -0
  89. package/src/runtime/agent/orchestrator/session/human-gate/store.mjs +15 -3
  90. package/src/runtime/agent/orchestrator/session/loop/assistant-commit.mjs +8 -0
  91. package/src/runtime/agent/orchestrator/session/loop/loop-state.mjs +8 -1
  92. package/src/runtime/agent/orchestrator/session/loop/no-tool-turn/segments.mjs +4 -1
  93. package/src/runtime/agent/orchestrator/session/loop/no-tool-turn.mjs +50 -2
  94. package/src/runtime/agent/orchestrator/session/loop/send-phase.mjs +3 -0
  95. package/src/runtime/agent/orchestrator/session/loop/tool-exec/before-hook.mjs +11 -2
  96. package/src/runtime/agent/orchestrator/session/loop/tool-phase.mjs +11 -2
  97. package/src/runtime/agent/orchestrator/session/loop/turn-limits.mjs +60 -0
  98. package/src/runtime/agent/orchestrator/session/manager/ask-turn-commit.mjs +2 -0
  99. package/src/runtime/agent/orchestrator/session/manager/ask-turn-loop-options.mjs +14 -0
  100. package/src/runtime/agent/orchestrator/session/manager/ask-turn-settle.mjs +2 -1
  101. package/src/runtime/agent/orchestrator/session/manager/session-tool-surface.mjs +13 -0
  102. package/src/runtime/agent/orchestrator/session/message-ids.mjs +5 -3
  103. package/src/runtime/agent/orchestrator/session/message-reactions.mjs +89 -0
  104. package/src/runtime/agent/orchestrator/session/message-reactions.test-support.mjs +75 -0
  105. package/src/runtime/agent/orchestrator/session/routine-result.d.mts +0 -2
  106. package/src/runtime/agent/orchestrator/session/routine-result.mjs +11 -2
  107. package/src/runtime/agent/orchestrator/session/send-with-recovery.mjs +20 -2
  108. package/src/runtime/agent/orchestrator/session/store-agent-worker-header-cache.mjs +85 -0
  109. package/src/runtime/agent/orchestrator/session/store-agent-worker-rows.mjs +125 -12
  110. package/src/runtime/agent/orchestrator/session/tail-reminder-rules.mjs +11 -5
  111. package/src/runtime/agent/orchestrator/session/tool-batch/state.mjs +4 -0
  112. package/src/runtime/agent/orchestrator/session/tool-batch.mjs +5 -0
  113. package/src/runtime/agent/orchestrator/session/transcript-restore/restore.mjs +7 -1
  114. package/src/runtime/channels/lib/schedule-errors.mjs +51 -0
  115. package/src/runtime/channels/lib/scheduler.mjs +109 -14
  116. package/src/runtime/channels/lib/schedules-db.mjs +49 -0
  117. package/src/runtime/channels/lib/tool-dispatch.mjs +13 -0
  118. package/src/runtime/channels/lib/worker-main.mjs +9 -0
  119. package/src/runtime/office/com/com-adapter.mjs +17 -1
  120. package/src/runtime/office/com/office-com-host.ps1 +51 -1
  121. package/src/runtime/office/pdf/cfb-fixture.mjs +328 -0
  122. package/src/runtime/office/pdf/cfb-protection.mjs +311 -0
  123. package/src/runtime/office/pdf/document-preview.mjs +326 -8
  124. package/src/runtime/office/pdf/ooxml-crypto.mjs +469 -0
  125. package/src/runtime/office/pdf/ooxml-key-worker.mjs +14 -0
  126. package/src/runtime/office/portable/portable-soffice.mjs +45 -5
  127. package/src/runtime/shared/bot-hops.mjs +62 -2
  128. package/src/runtime/shared/config.mjs +49 -22
  129. package/src/runtime/shared/connector-catalog.d.mts +4 -2
  130. package/src/runtime/shared/connector-catalog.mjs +16 -8
  131. package/src/runtime/shared/developer-options.mjs +32 -1
  132. package/src/runtime/shared/google-oauth-client.generated.json +4 -0
  133. package/src/runtime/shared/google-oauth-client.mjs +34 -9
  134. package/src/runtime/shared/llm/anthropic-betas.mjs +7 -0
  135. package/src/runtime/shared/llm/anthropic-thinking-contract.mjs +12 -0
  136. package/src/runtime/shared/llm/provider-catalog-registry.mjs +1 -0
  137. package/src/runtime/shared/llm/well-formed.mjs +66 -0
  138. package/src/runtime/shared/provider-accounts.mjs +224 -58
  139. package/src/runtime/shared/provider-api-key.mjs +19 -8
  140. package/src/runtime/shared/routine-trigger.mjs +42 -0
  141. package/src/runtime/shared/tool-execution-contract.mjs +2 -0
  142. package/src/runtime/shared/transcript-metadata.mjs +38 -0
  143. package/src/runtime/shared/user-data-guard.mjs +30 -2
  144. package/src/runtime/shared/worktrees/activity-gate.mjs +12 -5
  145. package/src/session-runtime/agent-home-delivery.mjs +57 -13
  146. package/src/session-runtime/agent-room-delivery.mjs +28 -1
  147. package/src/session-runtime/agent-task-sessions.mjs +292 -79
  148. package/src/session-runtime/boot/begin.mjs +3 -2
  149. package/src/session-runtime/boot/tools.mjs +2 -0
  150. package/src/session-runtime/bot-chain.mjs +32 -0
  151. package/src/session-runtime/bot-status.mjs +7 -4
  152. package/src/session-runtime/channel-config-api.mjs +63 -17
  153. package/src/session-runtime/internal-tool-executor/reaction-tool.mjs +45 -0
  154. package/src/session-runtime/internal-tool-executor/workspace-tools.mjs +72 -5
  155. package/src/session-runtime/internal-tool-executor.mjs +4 -0
  156. package/src/session-runtime/mcp-glue/server-catalog.mjs +7 -1
  157. package/src/session-runtime/mixy-heartbeat.mjs +807 -0
  158. package/src/session-runtime/model-route/route-tuning.mjs +10 -6
  159. package/src/session-runtime/owned-automation-run.mjs +33 -12
  160. package/src/session-runtime/provider-auth/login.mjs +7 -0
  161. package/src/session-runtime/provider-models/row-hydration.mjs +13 -2
  162. package/src/session-runtime/routine-home-turn.mjs +33 -6
  163. package/src/session-runtime/schedule-session-run.mjs +7 -3
  164. package/src/session-runtime/services/agent-tool/spawn-flow/spawn-plan.mjs +8 -12
  165. package/src/session-runtime/services/channel-admin.mjs +66 -18
  166. package/src/session-runtime/services/channel-worker.mjs +1 -1
  167. package/src/session-runtime/services/provider-admin.mjs +128 -25
  168. package/src/session-runtime/services/schedule-access.mjs +14 -0
  169. package/src/session-runtime/services/usage-dashboard-model.mjs +1 -0
  170. package/src/session-runtime/session-create/session-options.mjs +7 -4
  171. package/src/session-runtime/settings-system-api.mjs +16 -1
  172. package/src/session-runtime/setup-tool/executor.mjs +49 -14
  173. package/src/session-runtime/setup-tool/extended-actions.mjs +29 -3
  174. package/src/session-runtime/setup-tool/settings-contract.mjs +65 -4
  175. package/src/session-runtime/setup-tool/tool-defs.mjs +30 -3
  176. package/src/session-runtime/task-session-route.mjs +99 -0
  177. package/src/session-runtime/tool-policy/policy-stage.mjs +5 -2
  178. package/src/session-runtime/tool-policy/surface-helpers.mjs +2 -3
  179. package/src/session-runtime/tool-surface.mjs +4 -0
  180. package/src/session-runtime/workflow-agents-api/agent-editor.mjs +98 -21
  181. package/src/session-runtime/workflow-agents-api/workflow-packs.mjs +6 -1
  182. package/src/session-runtime/workspace/transitions.mjs +10 -2
  183. package/src/standalone/daemon-session-control.mjs +88 -20
  184. package/src/standalone/daemon.mjs +8 -0
  185. package/src/standalone/session-protocol.mjs +5 -0
  186. package/src/standalone/session-service/agent-tree/agent-cancel.mjs +6 -2
  187. package/src/standalone/session-service/session-calls/session-turns.mjs +6 -0
  188. package/src/standalone/session-service.mjs +13 -0
  189. package/src/standalone/session-tool-output.mjs +8 -5
  190. package/src/tui/app/model-options.mjs +2 -0
  191. package/src/tui/dist/index.mjs +24 -2
  192. package/src/tui/session/notice-surface.mjs +17 -1
  193. package/src/tui/session/session-api/integrations.mjs +1 -0
  194. package/src/tui/session/session-api/lifecycle.mjs +8 -0
  195. package/src/tui/session/session-api/settings.mjs +14 -2
  196. package/src/tui/session/turn-stream.mjs +17 -1
  197. package/src/tui/session/turn.mjs +22 -2
@@ -0,0 +1,305 @@
1
+ // Devin (Cascade API) protobuf messages.
2
+ //
3
+ // Object shape contract for callers:
4
+ // - field names are the descriptor names below (lowerCamelCase);
5
+ // - enums are plain numbers (see DEVIN_ENUMS);
6
+ // - nested messages are plain objects, repeated fields are arrays;
7
+ // - integer widths follow the descriptor type: int32/uint32/enum take and
8
+ // decode to integer numbers (uint32 rejects negatives); int64/uint64 take
9
+ // bigint, integer number or decimal string and decode to bigint (uint64
10
+ // rejects negatives);
11
+ // - every repeated element is written, empty strings and zeros included;
12
+ // - a oneof is written as sibling fields of which exactly one is set
13
+ // (ChatToolChoice.optionName | ChatToolChoice.toolName);
14
+ // - decoded objects carry only fields present on the wire: absent fields are
15
+ // undefined, so read them with a default (`msg.deltaText || ''`).
16
+ // Encoding is canonical proto3: implicit-presence fields holding their type
17
+ // default are omitted; `presence` fields are written whenever set.
18
+ // Only fields this client reads or writes are listed; everything else decodes
19
+ // into `$unknown` and is ignored.
20
+ import { createProtobufCodec, presence, protobufFields as fields, repeated } from './wire-protobuf-codec.mjs';
21
+
22
+ const packedEnumList = { repeated: true, enum: 'DisplayOption' };
23
+ const enumOf = (name) => ({ enum: name });
24
+
25
+ export const DEVIN_ENUMS = Object.freeze({
26
+ ChatMessageSource: Object.freeze({ UNSPECIFIED: 0, USER: 1, SYSTEM: 2, UNKNOWN: 3, TOOL: 4, SYSTEM_PROMPT: 5 }),
27
+ ChatMessageRequestType: Object.freeze({ UNSPECIFIED: 0, GENERAL: 1, CASCADE: 5 }),
28
+ ConversationalPlannerMode: Object.freeze({ UNSPECIFIED: 0, DEFAULT: 1, READ_ONLY: 2, NO_TOOL: 3 }),
29
+ CacheControlType: Object.freeze({ UNSPECIFIED: 0, EPHEMERAL: 1 }),
30
+ StopReason: Object.freeze({
31
+ UNSPECIFIED: 0,
32
+ INCOMPLETE: 1,
33
+ STOP_PATTERN: 2,
34
+ MAX_TOKENS: 3,
35
+ MIN_LOG_PROB: 4,
36
+ MAX_NEWLINES: 5,
37
+ EXIT_SCOPE: 6,
38
+ NONFINITE_LOGIT_OR_PROB: 7,
39
+ FIRST_NON_WHITESPACE_LINE: 8,
40
+ PARTIAL: 9,
41
+ FUNCTION_CALL: 10,
42
+ CONTENT_FILTER: 11,
43
+ NON_INSERTION: 12,
44
+ ERROR: 13,
45
+ }),
46
+ // 6-8 are wire values newer than the published enum names.
47
+ DisplayOption: Object.freeze({
48
+ UNSPECIFIED: 0,
49
+ ARENA: 1,
50
+ BATTLE_GROUP_ONLY: 2,
51
+ MODEL_ROUTER: 3,
52
+ QUICK_REVIEW: 4,
53
+ INTERNAL_DEFAULT: 6,
54
+ UNCLASSIFIED: 7,
55
+ NORMAL: 8,
56
+ }),
57
+ ModelDimensionKind: Object.freeze({ UNSPECIFIED: 0, COST: 1, COST_FUZZY: 2 }),
58
+ });
59
+
60
+ export const DEVIN_SCHEMAS = Object.freeze({
61
+ Metadata: fields([
62
+ ['ideName', 1, 'string'],
63
+ ['extensionVersion', 2, 'string'],
64
+ ['apiKey', 3, 'string'],
65
+ ['locale', 4, 'string'],
66
+ ['os', 5, 'string'],
67
+ ['ideVersion', 7, 'string'],
68
+ ['requestId', 9, 'uint64'],
69
+ ['sessionId', 10, 'string'],
70
+ ['extensionName', 12, 'string'],
71
+ ['userAgent', 13, 'string'],
72
+ ['userJwt', 21, 'string'],
73
+ ['ideType', 28, 'string'],
74
+ ['supportedModelDisplays', 30, 'enum', packedEnumList],
75
+ ]),
76
+
77
+ // exa.auth_pb.AuthService/GetUserJwt
78
+ GetUserJwtRequest: fields([['metadata', 1, 'Metadata']]),
79
+ GetUserJwtResponse: fields([
80
+ ['userJwt', 1, 'string'],
81
+ ['customApiServerUrl', 2, 'string'],
82
+ ]),
83
+
84
+ // exa.api_server_pb.ApiServerService/GetCliModelConfigs
85
+ GetCliModelConfigsRequest: fields([['metadata', 1, 'Metadata']]),
86
+ GetCliModelConfigsResponse: fields([
87
+ ['clientModelConfigs', 1, 'ClientModelConfig', repeated],
88
+ ['defaultOverrideModelConfig', 3, 'DefaultOverrideModelConfig'],
89
+ ]),
90
+ DefaultOverrideModelConfig: fields([
91
+ ['versionId', 2, 'string'],
92
+ ['modelUid', 3, 'string'],
93
+ ]),
94
+ ClientModelConfig: fields([
95
+ ['label', 1, 'string'],
96
+ ['creditMultiplier', 3, 'float'],
97
+ ['disabled', 4, 'bool'],
98
+ ['supportsImages', 5, 'bool'],
99
+ ['isPremium', 7, 'bool'],
100
+ ['isBeta', 9, 'bool'],
101
+ ['isRecommended', 11, 'bool'],
102
+ ['apiProvider', 14, 'enum', enumOf('APIProvider')],
103
+ ['isNew', 15, 'bool'],
104
+ ['maxTokens', 18, 'int32'],
105
+ ['isCapacityLimited', 20, 'bool'],
106
+ ['modelUid', 22, 'string'],
107
+ ['modelInfo', 23, 'ModelInfo'],
108
+ ['description', 27, 'string', presence],
109
+ ['modelFamilyMetadata', 30, 'ModelFamilyMetadata'],
110
+ ['isDefaultModelInFamily', 31, 'bool'],
111
+ ['modelDimensions', 32, 'ModelDimension', repeated],
112
+ ['disabledReason', 33, 'ModelDisabledReason'],
113
+ ]),
114
+ ModelInfo: fields([
115
+ ['maxTokens', 4, 'int32'],
116
+ ['modelFeatures', 6, 'ModelFeatures'],
117
+ ['apiProvider', 7, 'enum', enumOf('APIProvider')],
118
+ ['modelName', 8, 'string'],
119
+ ['chatModelName', 12, 'string'],
120
+ ['maxOutputTokens', 13, 'int32'],
121
+ ['modelUid', 17, 'string'],
122
+ ['harnessUids', 20, 'string', repeated],
123
+ ['displayOption', 22, 'enum', enumOf('DisplayOption')],
124
+ ['modelFamilyUid', 23, 'string'],
125
+ ['isModelRouter', 25, 'bool'],
126
+ ]),
127
+ ModelFeatures: fields([
128
+ ['supportsImages', 11, 'bool'],
129
+ ['supportsToolCalls', 12, 'bool'],
130
+ ['supportsThinking', 15, 'bool'],
131
+ ['supportsParallelToolCalls', 21, 'bool'],
132
+ ['interleaveThinking', 24, 'bool'],
133
+ ['preserveThinking', 25, 'bool'],
134
+ ]),
135
+ ModelDimension: fields([
136
+ ['label', 1, 'string'],
137
+ ['value', 2, 'float'],
138
+ ['denominator', 3, 'string'],
139
+ ['kind', 6, 'enum', enumOf('ModelDimensionKind')],
140
+ ['info', 7, 'string', presence],
141
+ ]),
142
+ ModelFamilyMetadata: fields([
143
+ ['modelFamilyLabel', 1, 'string'],
144
+ ['entries', 2, 'ModelFamilyMetadataEntry', repeated],
145
+ ['isDefaultModelInFamily', 3, 'bool'],
146
+ ]),
147
+ ModelFamilyMetadataEntry: fields([
148
+ ['key', 1, 'string'],
149
+ ['value', 2, 'ModelFamilyMetadataValue'],
150
+ ]),
151
+ ModelFamilyMetadataValue: fields([
152
+ ['order', 1, 'int32'],
153
+ ['name', 2, 'string'],
154
+ ]),
155
+ ModelDisabledReason: fields([
156
+ ['shortReason', 1, 'string'],
157
+ ['description', 2, 'string', presence],
158
+ ]),
159
+
160
+ // exa.api_server_pb.ApiServerService/AssignModel: resolves a router uid into
161
+ // a concrete chat uid plus the JWT the following chat request carries.
162
+ AssignModelRequest: fields([
163
+ ['metadata', 1, 'Metadata'],
164
+ ['modelRouterUid', 2, 'string'],
165
+ ['cascadeId', 3, 'string'],
166
+ ['chatMessagePrompt', 5, 'ChatMessagePrompt'],
167
+ ]),
168
+ AssignModelResponse: fields([['assignment', 1, 'ModelAssignment']]),
169
+ ModelAssignment: fields([
170
+ ['assignmentJwt', 1, 'string'],
171
+ ['modelUid', 2, 'string'],
172
+ ['harnessUids', 3, 'string', repeated],
173
+ ]),
174
+
175
+ // exa.api_server_pb.ApiServerService/GetChatMessage (server-streaming)
176
+ GetChatMessageRequest: fields([
177
+ ['metadata', 1, 'Metadata'],
178
+ ['prompt', 2, 'string'],
179
+ ['chatMessagePrompts', 3, 'ChatMessagePrompt', repeated],
180
+ ['requestType', 7, 'enum', enumOf('ChatMessageRequestType')],
181
+ ['configuration', 8, 'CompletionConfiguration'],
182
+ ['tools', 10, 'ChatToolDefinition', repeated],
183
+ ['disableParallelToolCalls', 11, 'bool'],
184
+ ['toolChoice', 12, 'ChatToolChoice'],
185
+ ['systemPromptCacheOptions', 13, 'PromptCacheOptions'],
186
+ ['chatModelName', 14, 'string'],
187
+ ['cascadeId', 16, 'string'],
188
+ ['promptId', 17, 'string'],
189
+ ['plannerMode', 20, 'enum', enumOf('ConversationalPlannerMode')],
190
+ ['chatModelUid', 21, 'string'],
191
+ ['executionId', 22, 'string'],
192
+ ['modelAssignmentJwt', 26, 'string', presence],
193
+ ]),
194
+ ChatMessagePrompt: fields([
195
+ ['messageId', 1, 'string'],
196
+ ['source', 2, 'enum', enumOf('ChatMessageSource')],
197
+ ['prompt', 3, 'string'],
198
+ ['numTokens', 4, 'uint32'],
199
+ ['safeForCodeTelemetry', 5, 'bool'],
200
+ ['toolCalls', 6, 'ChatToolCall', repeated],
201
+ ['toolCallId', 7, 'string'],
202
+ ['promptCacheOptions', 8, 'PromptCacheOptions'],
203
+ ['toolResultIsError', 9, 'bool'],
204
+ ['images', 10, 'ImageData', repeated],
205
+ ['thinking', 11, 'string'],
206
+ ['signature', 12, 'string'],
207
+ ['thinkingRedacted', 13, 'bool'],
208
+ ['outputId', 15, 'string'],
209
+ ['thinkingId', 16, 'string'],
210
+ ['geminiThoughtSignature', 17, 'bytes'],
211
+ ['signatureType', 18, 'string'],
212
+ ['phase', 19, 'string'],
213
+ ]),
214
+ ChatToolCall: fields([
215
+ ['id', 1, 'string'],
216
+ ['name', 2, 'string'],
217
+ ['argumentsJson', 3, 'string'],
218
+ ['invalidJsonStr', 4, 'string'],
219
+ ['invalidJsonErr', 5, 'string'],
220
+ ['isCustomToolCall', 6, 'bool'],
221
+ ]),
222
+ // oneof choice: set exactly one of optionName ('auto' | 'none' | 'required') or toolName.
223
+ ChatToolChoice: fields([
224
+ ['optionName', 1, 'string', presence],
225
+ ['toolName', 2, 'string', presence],
226
+ ]),
227
+ ChatToolDefinition: fields([
228
+ ['name', 1, 'string'],
229
+ ['description', 2, 'string'],
230
+ ['jsonSchemaString', 3, 'string'],
231
+ ['serverName', 6, 'string'],
232
+ ['readOnlyHint', 7, 'bool', presence],
233
+ ['strict', 12, 'bool'],
234
+ ]),
235
+ ImageData: fields([
236
+ ['base64Data', 1, 'string'],
237
+ ['mimeType', 2, 'string'],
238
+ ['caption', 3, 'string'],
239
+ ]),
240
+ PromptCacheOptions: fields([['type', 1, 'enum', enumOf('CacheControlType')]]),
241
+ CompletionConfiguration: fields([
242
+ ['numCompletions', 1, 'uint64'],
243
+ ['maxTokens', 2, 'uint64'],
244
+ ['maxNewlines', 3, 'uint64'],
245
+ ['minLogProbability', 4, 'double'],
246
+ ['temperature', 5, 'double'],
247
+ ['firstTemperature', 6, 'double'],
248
+ ['topK', 7, 'uint64'],
249
+ ['topP', 8, 'double'],
250
+ ['stopPatterns', 9, 'string', repeated],
251
+ ['seed', 10, 'uint64'],
252
+ ['serviceTier', 17, 'string'],
253
+ ]),
254
+ GetChatMessageResponse: fields([
255
+ ['messageId', 1, 'string'],
256
+ ['deltaText', 3, 'string'],
257
+ ['deltaTokens', 4, 'uint32'],
258
+ ['stopReason', 5, 'enum', enumOf('StopReason')],
259
+ ['deltaToolCalls', 6, 'ChatToolCall', repeated],
260
+ ['usage', 7, 'ModelUsageStats'],
261
+ ['redact', 8, 'bool'],
262
+ ['deltaThinking', 9, 'string'],
263
+ ['deltaSignature', 10, 'string'],
264
+ ['thinkingRedacted', 11, 'bool'],
265
+ ['latency', 12, 'double'],
266
+ ['creditCost', 14, 'int32'],
267
+ ['outputId', 15, 'string'],
268
+ ['thinkingId', 16, 'string'],
269
+ ['requestId', 17, 'string'],
270
+ ['committedCreditCost', 18, 'int32'],
271
+ ['geminiThoughtSignature', 20, 'bytes'],
272
+ ['deltaSignatureType', 21, 'string'],
273
+ ['committedAcuCost', 22, 'double'],
274
+ ['actualModelUid', 23, 'string', presence],
275
+ ['phase', 25, 'string'],
276
+ ['committedQuotaCostBasisPoints', 26, 'int64', presence],
277
+ ['committedOverageCostCents', 27, 'int64', presence],
278
+ ]),
279
+ ModelUsageStats: fields([
280
+ ['inputTokens', 2, 'uint64'],
281
+ ['outputTokens', 3, 'uint64'],
282
+ ['cacheWriteTokens', 4, 'uint64'],
283
+ ['cacheReadTokens', 5, 'uint64'],
284
+ ['apiProvider', 6, 'enum', enumOf('APIProvider')],
285
+ ['messageId', 7, 'string'],
286
+ ['modelUid', 9, 'string'],
287
+ ['billingModelUid', 10, 'string'],
288
+ ['requestedModelUid', 11, 'string'],
289
+ ]),
290
+ });
291
+
292
+ const codec = createProtobufCodec(DEVIN_SCHEMAS, {
293
+ label: 'Devin protobuf',
294
+ strict: true,
295
+ omitDefaults: true,
296
+ packed: true,
297
+ });
298
+
299
+ export function encodeDevinMessage(typeName, object = {}) {
300
+ return codec.encodeMessage(typeName, object);
301
+ }
302
+
303
+ export function decodeDevinMessage(typeName, bytes) {
304
+ return codec.decodeMessage(typeName, bytes);
305
+ }