agent-mockingbird 0.0.1

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 (227) hide show
  1. package/.agents/skills/btca-cli/SKILL.md +64 -0
  2. package/.agents/skills/btca-cli/agents/openai.yaml +3 -0
  3. package/.agents/skills/frontend-design/SKILL.md +42 -0
  4. package/.agents/skills/frontend-design/agents/openai.yaml +3 -0
  5. package/.env.example +36 -0
  6. package/.githooks/pre-commit +33 -0
  7. package/.github/workflows/ci.yml +309 -0
  8. package/.opencode/bun.lock +18 -0
  9. package/.opencode/package.json +5 -0
  10. package/.opencode/tools/agent_type_manager.ts +100 -0
  11. package/.opencode/tools/config_manager.ts +87 -0
  12. package/.opencode/tools/cron_manager.ts +145 -0
  13. package/.opencode/tools/memory_get.ts +43 -0
  14. package/.opencode/tools/memory_remember.ts +53 -0
  15. package/.opencode/tools/memory_search.ts +48 -0
  16. package/AGENTS.md +126 -0
  17. package/MEMORY.md +2 -0
  18. package/README.md +451 -0
  19. package/THIRD_PARTY_NOTICES.md +11 -0
  20. package/agent-mockingbird.config.example.json +135 -0
  21. package/apps/server/package.json +32 -0
  22. package/apps/server/src/backend/agents/bootstrapContext.ts +362 -0
  23. package/apps/server/src/backend/agents/openclawImport.test.ts +133 -0
  24. package/apps/server/src/backend/agents/openclawImport.ts +797 -0
  25. package/apps/server/src/backend/agents/opencodeConfig.ts +428 -0
  26. package/apps/server/src/backend/agents/service.ts +10 -0
  27. package/apps/server/src/backend/config/example-config.test.ts +20 -0
  28. package/apps/server/src/backend/config/orchestration.ts +243 -0
  29. package/apps/server/src/backend/config/policy.ts +158 -0
  30. package/apps/server/src/backend/config/schema.test.ts +15 -0
  31. package/apps/server/src/backend/config/schema.ts +391 -0
  32. package/apps/server/src/backend/config/semantic.test.ts +34 -0
  33. package/apps/server/src/backend/config/semantic.ts +149 -0
  34. package/apps/server/src/backend/config/service.test.ts +75 -0
  35. package/apps/server/src/backend/config/service.ts +207 -0
  36. package/apps/server/src/backend/config/smoke.ts +77 -0
  37. package/apps/server/src/backend/config/store.test.ts +123 -0
  38. package/apps/server/src/backend/config/store.ts +581 -0
  39. package/apps/server/src/backend/config/testFixtures.ts +5 -0
  40. package/apps/server/src/backend/config/types.ts +56 -0
  41. package/apps/server/src/backend/contracts/events.ts +320 -0
  42. package/apps/server/src/backend/contracts/runtime.ts +111 -0
  43. package/apps/server/src/backend/cron/executor.ts +435 -0
  44. package/apps/server/src/backend/cron/repository.ts +170 -0
  45. package/apps/server/src/backend/cron/service.ts +660 -0
  46. package/apps/server/src/backend/cron/storage.ts +92 -0
  47. package/apps/server/src/backend/cron/types.ts +138 -0
  48. package/apps/server/src/backend/cron/utils.ts +351 -0
  49. package/apps/server/src/backend/db/client.ts +20 -0
  50. package/apps/server/src/backend/db/migrate.ts +40 -0
  51. package/apps/server/src/backend/db/repository.ts +1762 -0
  52. package/apps/server/src/backend/db/schema.ts +113 -0
  53. package/apps/server/src/backend/db/usageDashboard.test.ts +102 -0
  54. package/apps/server/src/backend/db/wipe.ts +13 -0
  55. package/apps/server/src/backend/defaults.ts +32 -0
  56. package/apps/server/src/backend/env.ts +48 -0
  57. package/apps/server/src/backend/heartbeat/activeHours.ts +45 -0
  58. package/apps/server/src/backend/heartbeat/defaultJob.ts +88 -0
  59. package/apps/server/src/backend/heartbeat/heartbeat.test.ts +110 -0
  60. package/apps/server/src/backend/heartbeat/runtimeService.ts +190 -0
  61. package/apps/server/src/backend/heartbeat/service.ts +176 -0
  62. package/apps/server/src/backend/heartbeat/state.test.ts +63 -0
  63. package/apps/server/src/backend/heartbeat/state.ts +167 -0
  64. package/apps/server/src/backend/heartbeat/types.ts +54 -0
  65. package/apps/server/src/backend/http/boundedQueue.test.ts +49 -0
  66. package/apps/server/src/backend/http/boundedQueue.ts +92 -0
  67. package/apps/server/src/backend/http/parsers.ts +40 -0
  68. package/apps/server/src/backend/http/router.ts +61 -0
  69. package/apps/server/src/backend/http/routes/agentRoutes.ts +67 -0
  70. package/apps/server/src/backend/http/routes/backgroundRoutes.ts +203 -0
  71. package/apps/server/src/backend/http/routes/chatRoutes.ts +107 -0
  72. package/apps/server/src/backend/http/routes/configRoutes.ts +602 -0
  73. package/apps/server/src/backend/http/routes/cronRoutes.ts +221 -0
  74. package/apps/server/src/backend/http/routes/dashboardRoutes.ts +308 -0
  75. package/apps/server/src/backend/http/routes/eventRoutes.ts +7 -0
  76. package/apps/server/src/backend/http/routes/heartbeatRoutes.test.ts +41 -0
  77. package/apps/server/src/backend/http/routes/heartbeatRoutes.ts +28 -0
  78. package/apps/server/src/backend/http/routes/index.ts +101 -0
  79. package/apps/server/src/backend/http/routes/mcpRoutes.ts +213 -0
  80. package/apps/server/src/backend/http/routes/memoryRoutes.ts +154 -0
  81. package/apps/server/src/backend/http/routes/runRoutes.ts +310 -0
  82. package/apps/server/src/backend/http/routes/runtimeRoutes.ts +197 -0
  83. package/apps/server/src/backend/http/routes/skillRoutes.ts +112 -0
  84. package/apps/server/src/backend/http/routes/uiRoutes.test.ts +161 -0
  85. package/apps/server/src/backend/http/routes/uiRoutes.ts +177 -0
  86. package/apps/server/src/backend/http/routes/usageRoutes.test.ts +104 -0
  87. package/apps/server/src/backend/http/routes/usageRoutes.ts +767 -0
  88. package/apps/server/src/backend/http/schemas.ts +64 -0
  89. package/apps/server/src/backend/http/sse.ts +144 -0
  90. package/apps/server/src/backend/integration/backend-core.test.ts +2316 -0
  91. package/apps/server/src/backend/logging/logger.ts +64 -0
  92. package/apps/server/src/backend/mcp/service.ts +326 -0
  93. package/apps/server/src/backend/memory/cli.ts +170 -0
  94. package/apps/server/src/backend/memory/conceptExpansion.test.ts +28 -0
  95. package/apps/server/src/backend/memory/conceptExpansion.ts +80 -0
  96. package/apps/server/src/backend/memory/qmdPort.test.ts +54 -0
  97. package/apps/server/src/backend/memory/qmdPort.ts +61 -0
  98. package/apps/server/src/backend/memory/records.test.ts +66 -0
  99. package/apps/server/src/backend/memory/records.ts +229 -0
  100. package/apps/server/src/backend/memory/service.ts +2012 -0
  101. package/apps/server/src/backend/memory/sqliteVec.ts +58 -0
  102. package/apps/server/src/backend/memory/types.ts +104 -0
  103. package/apps/server/src/backend/opencode/agentMockingbirdPlugin.test.ts +396 -0
  104. package/apps/server/src/backend/opencode/client.ts +98 -0
  105. package/apps/server/src/backend/opencode/models.ts +41 -0
  106. package/apps/server/src/backend/opencode/systemPrompt.test.ts +146 -0
  107. package/apps/server/src/backend/opencode/systemPrompt.ts +284 -0
  108. package/apps/server/src/backend/paths.ts +57 -0
  109. package/apps/server/src/backend/prompts/service.ts +100 -0
  110. package/apps/server/src/backend/queue/queue.test.ts +189 -0
  111. package/apps/server/src/backend/queue/service.ts +177 -0
  112. package/apps/server/src/backend/queue/types.ts +39 -0
  113. package/apps/server/src/backend/run/service.ts +576 -0
  114. package/apps/server/src/backend/run/storage.ts +47 -0
  115. package/apps/server/src/backend/run/types.ts +44 -0
  116. package/apps/server/src/backend/runtime/errors.ts +61 -0
  117. package/apps/server/src/backend/runtime/index.ts +72 -0
  118. package/apps/server/src/backend/runtime/memoryPromptDedup.test.ts +153 -0
  119. package/apps/server/src/backend/runtime/memoryPromptDedup.ts +76 -0
  120. package/apps/server/src/backend/runtime/opencodeRuntime/backgroundMethods.ts +765 -0
  121. package/apps/server/src/backend/runtime/opencodeRuntime/coreMethods.ts +705 -0
  122. package/apps/server/src/backend/runtime/opencodeRuntime/eventMethods.ts +503 -0
  123. package/apps/server/src/backend/runtime/opencodeRuntime/memoryMethods.ts +462 -0
  124. package/apps/server/src/backend/runtime/opencodeRuntime/promptMethods.ts +1167 -0
  125. package/apps/server/src/backend/runtime/opencodeRuntime/shared.ts +254 -0
  126. package/apps/server/src/backend/runtime/opencodeRuntime.test.ts +2899 -0
  127. package/apps/server/src/backend/runtime/opencodeRuntime.ts +135 -0
  128. package/apps/server/src/backend/runtime/sessionScope.ts +45 -0
  129. package/apps/server/src/backend/skills/service.ts +442 -0
  130. package/apps/server/src/backend/workspace/resolve.ts +27 -0
  131. package/apps/server/src/cli/agent-mockingbird.mjs +2522 -0
  132. package/apps/server/src/cli/agent-mockingbird.test.ts +68 -0
  133. package/apps/server/src/cli/runtime-assets.mjs +269 -0
  134. package/apps/server/src/cli/runtime-assets.test.ts +52 -0
  135. package/apps/server/src/cli/runtime-layout.mjs +75 -0
  136. package/apps/server/src/cli/standaloneBuild.test.ts +19 -0
  137. package/apps/server/src/cli/standaloneBuild.ts +19 -0
  138. package/apps/server/src/cli/standaloneCronBinary.test.ts +187 -0
  139. package/apps/server/src/index.ts +178 -0
  140. package/apps/server/tsconfig.json +12 -0
  141. package/backlog.md +5 -0
  142. package/bin/agent-mockingbird +2522 -0
  143. package/bin/runtime-layout.mjs +75 -0
  144. package/build-bin.ts +34 -0
  145. package/build-cli.mjs +37 -0
  146. package/build.ts +40 -0
  147. package/bun-env.d.ts +11 -0
  148. package/bun.lock +888 -0
  149. package/bunfig.toml +2 -0
  150. package/components.json +21 -0
  151. package/config.json +130 -0
  152. package/deploy/RELEASE_INSTALL.md +112 -0
  153. package/deploy/docker-compose.yml +42 -0
  154. package/deploy/systemd/README.md +46 -0
  155. package/deploy/systemd/agent-mockingbird.service +28 -0
  156. package/deploy/systemd/opencode.service +25 -0
  157. package/docs/legacy-config-ui-reference.md +51 -0
  158. package/docs/memory-e2e-trace-2026-03-04.md +63 -0
  159. package/docs/memory-ops.md +96 -0
  160. package/docs/memory-runtime-contract.md +42 -0
  161. package/docs/memory-tuning-remote-2026-03-04.md +59 -0
  162. package/docs/opencode-rebase-workflow-plan.md +614 -0
  163. package/docs/opencode-startup-sync-plan.md +94 -0
  164. package/docs/vendor-opencode.md +41 -0
  165. package/drizzle/0000_famous_turbo.sql +49 -0
  166. package/drizzle/0001_cron_memory_aux.sql +160 -0
  167. package/drizzle/0002_runtime_session_bindings.sql +28 -0
  168. package/drizzle/0003_background_runs.sql +27 -0
  169. package/drizzle/0004_memory_open_write.sql +63 -0
  170. package/drizzle/0005_signal_channel.sql +47 -0
  171. package/drizzle/0006_usage_event_dimensions.sql +7 -0
  172. package/drizzle/meta/0000_snapshot.json +341 -0
  173. package/drizzle/meta/_journal.json +55 -0
  174. package/drizzle.config.ts +14 -0
  175. package/eslint.config.mjs +77 -0
  176. package/knip.json +18 -0
  177. package/memory/2026-03-04.md +4 -0
  178. package/opencode.lock.json +16 -0
  179. package/package.json +67 -0
  180. package/packages/agent-mockingbird-installer/README.md +31 -0
  181. package/packages/agent-mockingbird-installer/bin/agent-mockingbird-installer.mjs +44 -0
  182. package/packages/agent-mockingbird-installer/opencode.lock.json +16 -0
  183. package/packages/agent-mockingbird-installer/package.json +23 -0
  184. package/packages/contracts/package.json +19 -0
  185. package/packages/contracts/src/agentTypes.ts +122 -0
  186. package/packages/contracts/src/cron.ts +146 -0
  187. package/packages/contracts/src/dashboard.ts +378 -0
  188. package/packages/contracts/src/index.ts +3 -0
  189. package/packages/contracts/tsconfig.json +4 -0
  190. package/patches/opencode/0001-Wafflebot-OpenCode-baseline.patch +2341 -0
  191. package/patches/opencode/0002-Fix-OpenCode-web-entry-and-settings-icons.patch +104 -0
  192. package/patches/opencode/0003-fix-app-remove-duplicate-sidebar-mount.patch +32 -0
  193. package/patches/opencode/0004-Add-heartbeat-settings-and-usage-nav.patch +506 -0
  194. package/patches/opencode/0005-Use-chart-icon-for-usage-nav.patch +38 -0
  195. package/patches/opencode/0006-Modernize-cron-settings.patch +399 -0
  196. package/patches/opencode/0007-Rename-waffle-namespaces-to-mockingbird.patch +1110 -0
  197. package/patches/opencode/0008-Remove-cron-contract-section.patch +178 -0
  198. package/patches/opencode/0009-Rework-cron-tab-as-operations-console.patch +414 -0
  199. package/patches/opencode/0010-Refine-heartbeat-settings-controls.patch +208 -0
  200. package/runtime-assets/opencode-config/opencode.jsonc +25 -0
  201. package/runtime-assets/opencode-config/package.json +5 -0
  202. package/runtime-assets/opencode-config/plugins/agent-mockingbird.ts +715 -0
  203. package/runtime-assets/workspace/.agents/skills/config-auditor/SKILL.md +25 -0
  204. package/runtime-assets/workspace/.agents/skills/config-editor/SKILL.md +24 -0
  205. package/runtime-assets/workspace/.agents/skills/cron-manager/SKILL.md +57 -0
  206. package/runtime-assets/workspace/.agents/skills/memory-ops/SKILL.md +120 -0
  207. package/runtime-assets/workspace/.agents/skills/runtime-diagnose/SKILL.md +25 -0
  208. package/runtime-assets/workspace/AGENTS.md +56 -0
  209. package/runtime-assets/workspace/MEMORY.md +4 -0
  210. package/scripts/build-release-bundle.sh +66 -0
  211. package/scripts/check-ship.ts +383 -0
  212. package/scripts/dev-opencode.sh +17 -0
  213. package/scripts/dev-stack-opencode.sh +15 -0
  214. package/scripts/dev-stack.sh +61 -0
  215. package/scripts/install-systemd.sh +87 -0
  216. package/scripts/memory-e2e.sh +76 -0
  217. package/scripts/memory-trace-e2e.sh +141 -0
  218. package/scripts/migrate-opencode-env.ts +108 -0
  219. package/scripts/onboard/bootstrap.sh +32 -0
  220. package/scripts/opencode-swap.ts +78 -0
  221. package/scripts/opencode-sync.ts +715 -0
  222. package/scripts/runtime-assets-sync.mjs +83 -0
  223. package/scripts/setup-git-hooks.ts +39 -0
  224. package/tsconfig.json +45 -0
  225. package/tui.json +98 -0
  226. package/turbo.json +36 -0
  227. package/vendor/OPENCODE_VENDOR.md +13 -0
@@ -0,0 +1,320 @@
1
+ import type {
2
+ ChatMessage,
3
+ ChatMessagePart,
4
+ HeartbeatSnapshot,
5
+ SessionMessagePartPhase,
6
+ SessionSummary,
7
+ UsageSnapshot,
8
+ } from "@agent-mockingbird/contracts/dashboard";
9
+
10
+ type RuntimeEventSource = "api" | "runtime" | "scheduler" | "system";
11
+
12
+ interface RuntimeEventBase<TType extends string, TPayload> {
13
+ id: string;
14
+ type: TType;
15
+ source: RuntimeEventSource;
16
+ at: string;
17
+ payload: TPayload;
18
+ }
19
+
20
+ export type HeartbeatUpdatedEvent = RuntimeEventBase<"heartbeat.updated", HeartbeatSnapshot>;
21
+ export type UsageUpdatedEvent = RuntimeEventBase<"usage.updated", UsageSnapshot>;
22
+ export type SessionStateUpdatedEvent = RuntimeEventBase<"session.state.updated", SessionSummary>;
23
+
24
+ interface SessionMessageCreatedPayload {
25
+ sessionId: string;
26
+ message: ChatMessage;
27
+ }
28
+ export type SessionMessageCreatedEvent = RuntimeEventBase<"session.message.created", SessionMessageCreatedPayload>;
29
+
30
+ interface SessionMessagePartUpdatedPayload {
31
+ sessionId: string;
32
+ messageId: string;
33
+ part: ChatMessagePart;
34
+ phase: SessionMessagePartPhase;
35
+ observedAt: string;
36
+ }
37
+ export type SessionMessagePartUpdatedEvent = RuntimeEventBase<"session.message.part.updated", SessionMessagePartUpdatedPayload>;
38
+
39
+ interface SessionMessageDeltaPayload {
40
+ sessionId: string;
41
+ messageId: string;
42
+ text: string;
43
+ mode: "append" | "replace";
44
+ observedAt: string;
45
+ }
46
+ export type SessionMessageDeltaEvent = RuntimeEventBase<"session.message.delta", SessionMessageDeltaPayload>;
47
+
48
+ interface SessionRunStatusPayload {
49
+ sessionId: string;
50
+ status: "idle" | "busy" | "retry";
51
+ attempt?: number;
52
+ message?: string;
53
+ nextAt?: string;
54
+ }
55
+ export type SessionRunStatusUpdatedEvent = RuntimeEventBase<"session.run.status.updated", SessionRunStatusPayload>;
56
+
57
+ interface SessionCompactedPayload {
58
+ sessionId: string;
59
+ }
60
+ export type SessionCompactedEvent = RuntimeEventBase<"session.compacted", SessionCompactedPayload>;
61
+
62
+ interface SessionRunErrorPayload {
63
+ sessionId: string | null;
64
+ name?: string;
65
+ message: string;
66
+ }
67
+ export type SessionRunErrorEvent = RuntimeEventBase<"session.run.error", SessionRunErrorPayload>;
68
+
69
+ interface SessionPermissionRequestPayload {
70
+ id: string;
71
+ sessionId: string;
72
+ permission: string;
73
+ patterns: string[];
74
+ metadata: Record<string, unknown>;
75
+ always: string[];
76
+ }
77
+ export type SessionPermissionRequestedEvent = RuntimeEventBase<
78
+ "session.permission.requested",
79
+ SessionPermissionRequestPayload
80
+ >;
81
+
82
+ interface SessionPermissionResolvedPayload {
83
+ sessionId: string;
84
+ requestId: string;
85
+ reply: "once" | "always" | "reject";
86
+ }
87
+ export type SessionPermissionResolvedEvent = RuntimeEventBase<
88
+ "session.permission.resolved",
89
+ SessionPermissionResolvedPayload
90
+ >;
91
+
92
+ interface SessionQuestionOption {
93
+ label: string;
94
+ description: string;
95
+ }
96
+
97
+ interface SessionQuestionInfo {
98
+ question: string;
99
+ header: string;
100
+ options: SessionQuestionOption[];
101
+ multiple?: boolean;
102
+ custom?: boolean;
103
+ }
104
+
105
+ interface SessionQuestionRequestPayload {
106
+ id: string;
107
+ sessionId: string;
108
+ questions: SessionQuestionInfo[];
109
+ }
110
+ export type SessionQuestionRequestedEvent = RuntimeEventBase<
111
+ "session.question.requested",
112
+ SessionQuestionRequestPayload
113
+ >;
114
+
115
+ interface SessionQuestionResolvedPayload {
116
+ sessionId: string;
117
+ requestId: string;
118
+ outcome: "replied" | "rejected";
119
+ }
120
+ export type SessionQuestionResolvedEvent = RuntimeEventBase<
121
+ "session.question.resolved",
122
+ SessionQuestionResolvedPayload
123
+ >;
124
+
125
+ interface BackgroundRunUpdatedPayload {
126
+ runId: string;
127
+ parentSessionId: string;
128
+ parentExternalSessionId: string;
129
+ childExternalSessionId: string;
130
+ childSessionId: string | null;
131
+ requestedBy: string;
132
+ prompt: string;
133
+ status: "created" | "running" | "retrying" | "idle" | "completed" | "failed" | "aborted";
134
+ resultSummary: string | null;
135
+ error: string | null;
136
+ createdAt: string;
137
+ updatedAt: string;
138
+ startedAt: string | null;
139
+ completedAt: string | null;
140
+ }
141
+ export type BackgroundRunUpdatedEvent = RuntimeEventBase<"background.run.updated", BackgroundRunUpdatedPayload>;
142
+
143
+ interface ConfigUpdatedPayload {
144
+ hash: string;
145
+ path: string;
146
+ providerCount: number;
147
+ modelCount: number;
148
+ smokeTestSessionId: string | null;
149
+ smokeTestResponse: string | null;
150
+ }
151
+ export type ConfigUpdatedEvent = RuntimeEventBase<"config.updated", ConfigUpdatedPayload>;
152
+
153
+ interface ConfigUpdateFailedPayload {
154
+ stage: string;
155
+ message: string;
156
+ }
157
+ export type ConfigUpdateFailedEvent = RuntimeEventBase<"config.update.failed", ConfigUpdateFailedPayload>;
158
+
159
+ interface ConfigRolledBackPayload {
160
+ attemptedHash: string | null;
161
+ restoredHash: string | null;
162
+ message: string;
163
+ }
164
+ export type ConfigRolledBackEvent = RuntimeEventBase<"config.update.rolled_back", ConfigRolledBackPayload>;
165
+
166
+ interface SkillsCatalogUpdatedPayload {
167
+ revision: string;
168
+ }
169
+ export type SkillsCatalogUpdatedEvent = RuntimeEventBase<"skills.catalog.updated", SkillsCatalogUpdatedPayload>;
170
+
171
+ export type RuntimeEvent =
172
+ | HeartbeatUpdatedEvent
173
+ | UsageUpdatedEvent
174
+ | SessionStateUpdatedEvent
175
+ | SessionMessageCreatedEvent
176
+ | SessionMessagePartUpdatedEvent
177
+ | SessionMessageDeltaEvent
178
+ | SessionRunStatusUpdatedEvent
179
+ | SessionCompactedEvent
180
+ | SessionRunErrorEvent
181
+ | SessionPermissionRequestedEvent
182
+ | SessionPermissionResolvedEvent
183
+ | SessionQuestionRequestedEvent
184
+ | SessionQuestionResolvedEvent
185
+ | BackgroundRunUpdatedEvent
186
+ | ConfigUpdatedEvent
187
+ | ConfigUpdateFailedEvent
188
+ | ConfigRolledBackEvent
189
+ | SkillsCatalogUpdatedEvent;
190
+
191
+ function baseRuntimeEvent<TType extends RuntimeEvent["type"], TPayload>(
192
+ type: TType,
193
+ payload: TPayload,
194
+ source: RuntimeEventSource,
195
+ ): RuntimeEventBase<TType, TPayload> {
196
+ return {
197
+ id: crypto.randomUUID(),
198
+ type,
199
+ source,
200
+ at: new Date().toISOString(),
201
+ payload,
202
+ };
203
+ }
204
+
205
+ export function createHeartbeatUpdatedEvent(payload: HeartbeatSnapshot, source: RuntimeEventSource): HeartbeatUpdatedEvent {
206
+ return baseRuntimeEvent("heartbeat.updated", payload, source);
207
+ }
208
+
209
+ export function createUsageUpdatedEvent(payload: UsageSnapshot, source: RuntimeEventSource): UsageUpdatedEvent {
210
+ return baseRuntimeEvent("usage.updated", payload, source);
211
+ }
212
+
213
+ export function createSessionStateUpdatedEvent(payload: SessionSummary, source: RuntimeEventSource): SessionStateUpdatedEvent {
214
+ return baseRuntimeEvent("session.state.updated", payload, source);
215
+ }
216
+
217
+ export function createSessionMessageCreatedEvent(
218
+ payload: SessionMessageCreatedPayload,
219
+ source: RuntimeEventSource,
220
+ ): SessionMessageCreatedEvent {
221
+ return baseRuntimeEvent("session.message.created", payload, source);
222
+ }
223
+
224
+ export function createSessionMessagePartUpdatedEvent(
225
+ payload: SessionMessagePartUpdatedPayload,
226
+ source: RuntimeEventSource,
227
+ ): SessionMessagePartUpdatedEvent {
228
+ return baseRuntimeEvent("session.message.part.updated", payload, source);
229
+ }
230
+
231
+ export function createSessionMessageDeltaEvent(
232
+ payload: SessionMessageDeltaPayload,
233
+ source: RuntimeEventSource,
234
+ ): SessionMessageDeltaEvent {
235
+ return baseRuntimeEvent("session.message.delta", payload, source);
236
+ }
237
+
238
+ export function createSessionRunStatusUpdatedEvent(
239
+ payload: SessionRunStatusPayload,
240
+ source: RuntimeEventSource,
241
+ ): SessionRunStatusUpdatedEvent {
242
+ return baseRuntimeEvent("session.run.status.updated", payload, source);
243
+ }
244
+
245
+ export function createSessionCompactedEvent(
246
+ payload: SessionCompactedPayload,
247
+ source: RuntimeEventSource,
248
+ ): SessionCompactedEvent {
249
+ return baseRuntimeEvent("session.compacted", payload, source);
250
+ }
251
+
252
+ export function createSessionRunErrorEvent(
253
+ payload: SessionRunErrorPayload,
254
+ source: RuntimeEventSource,
255
+ ): SessionRunErrorEvent {
256
+ return baseRuntimeEvent("session.run.error", payload, source);
257
+ }
258
+
259
+ export function createSessionPermissionRequestedEvent(
260
+ payload: SessionPermissionRequestPayload,
261
+ source: RuntimeEventSource,
262
+ ): SessionPermissionRequestedEvent {
263
+ return baseRuntimeEvent("session.permission.requested", payload, source);
264
+ }
265
+
266
+ export function createSessionPermissionResolvedEvent(
267
+ payload: SessionPermissionResolvedPayload,
268
+ source: RuntimeEventSource,
269
+ ): SessionPermissionResolvedEvent {
270
+ return baseRuntimeEvent("session.permission.resolved", payload, source);
271
+ }
272
+
273
+ export function createSessionQuestionRequestedEvent(
274
+ payload: SessionQuestionRequestPayload,
275
+ source: RuntimeEventSource,
276
+ ): SessionQuestionRequestedEvent {
277
+ return baseRuntimeEvent("session.question.requested", payload, source);
278
+ }
279
+
280
+ export function createSessionQuestionResolvedEvent(
281
+ payload: SessionQuestionResolvedPayload,
282
+ source: RuntimeEventSource,
283
+ ): SessionQuestionResolvedEvent {
284
+ return baseRuntimeEvent("session.question.resolved", payload, source);
285
+ }
286
+
287
+ export function createBackgroundRunUpdatedEvent(
288
+ payload: BackgroundRunUpdatedPayload,
289
+ source: RuntimeEventSource,
290
+ ): BackgroundRunUpdatedEvent {
291
+ return baseRuntimeEvent("background.run.updated", payload, source);
292
+ }
293
+
294
+ export function createConfigUpdatedEvent(
295
+ payload: ConfigUpdatedPayload,
296
+ source: RuntimeEventSource,
297
+ ): ConfigUpdatedEvent {
298
+ return baseRuntimeEvent("config.updated", payload, source);
299
+ }
300
+
301
+ export function createConfigUpdateFailedEvent(
302
+ payload: ConfigUpdateFailedPayload,
303
+ source: RuntimeEventSource,
304
+ ): ConfigUpdateFailedEvent {
305
+ return baseRuntimeEvent("config.update.failed", payload, source);
306
+ }
307
+
308
+ export function createConfigRolledBackEvent(
309
+ payload: ConfigRolledBackPayload,
310
+ source: RuntimeEventSource,
311
+ ): ConfigRolledBackEvent {
312
+ return baseRuntimeEvent("config.update.rolled_back", payload, source);
313
+ }
314
+
315
+ export function createSkillsCatalogUpdatedEvent(
316
+ payload: SkillsCatalogUpdatedPayload,
317
+ source: RuntimeEventSource,
318
+ ): SkillsCatalogUpdatedEvent {
319
+ return baseRuntimeEvent("skills.catalog.updated", payload, source);
320
+ }
@@ -0,0 +1,111 @@
1
+ import type { ChatMessage } from "@agent-mockingbird/contracts/dashboard";
2
+
3
+ import type { RuntimeEvent } from "./events";
4
+
5
+
6
+ export interface RuntimeTextInputPart {
7
+ type: "text";
8
+ text: string;
9
+ }
10
+
11
+ export interface RuntimeFileInputPart {
12
+ type: "file";
13
+ mime: string;
14
+ filename?: string;
15
+ url: string;
16
+ }
17
+
18
+ export type RuntimeInputPart = RuntimeTextInputPart | RuntimeFileInputPart;
19
+
20
+ export interface SendUserMessageInput {
21
+ sessionId: string;
22
+ content: string;
23
+ parts?: RuntimeInputPart[];
24
+ agent?: string;
25
+ metadata?: Record<string, unknown>;
26
+ }
27
+
28
+ export interface RuntimeMessageAck {
29
+ sessionId: string;
30
+ messages: ChatMessage[];
31
+ }
32
+
33
+ export interface RuntimeHealthCheckInput {
34
+ force?: boolean;
35
+ }
36
+
37
+ export interface RuntimeHealthCheckResult {
38
+ ok: boolean;
39
+ checkedAt: string;
40
+ latencyMs: number | null;
41
+ fromCache: boolean;
42
+ cacheTtlMs: number;
43
+ cacheExpiresAt: string;
44
+ probeSessionId: string | null;
45
+ responseText: string | null;
46
+ error: { name: string; message: string } | null;
47
+ }
48
+
49
+ export type BackgroundRunStatus =
50
+ | "created"
51
+ | "running"
52
+ | "retrying"
53
+ | "idle"
54
+ | "completed"
55
+ | "failed"
56
+ | "aborted";
57
+
58
+ export interface SpawnBackgroundSessionInput {
59
+ parentSessionId: string;
60
+ title?: string;
61
+ requestedBy?: string;
62
+ prompt?: string;
63
+ }
64
+
65
+ export interface BackgroundRunHandle {
66
+ runId: string;
67
+ parentSessionId: string;
68
+ parentExternalSessionId: string;
69
+ childExternalSessionId: string;
70
+ childSessionId: string | null;
71
+ requestedBy: string;
72
+ prompt: string;
73
+ status: BackgroundRunStatus;
74
+ resultSummary: string | null;
75
+ createdAt: string;
76
+ updatedAt: string;
77
+ startedAt: string | null;
78
+ completedAt: string | null;
79
+ error: string | null;
80
+ }
81
+
82
+ export interface PromptBackgroundAsyncInput {
83
+ runId: string;
84
+ content: string;
85
+ parts?: RuntimeInputPart[];
86
+ model?: string;
87
+ system?: string;
88
+ agent?: string;
89
+ noReply?: boolean;
90
+ }
91
+
92
+ export interface ListBackgroundRunsInput {
93
+ parentSessionId?: string;
94
+ limit?: number;
95
+ inFlightOnly?: boolean;
96
+ }
97
+
98
+ export interface RuntimeEngine {
99
+ sendUserMessage(input: SendUserMessageInput): Promise<RuntimeMessageAck>;
100
+ subscribe(onEvent: (event: RuntimeEvent) => void): () => void;
101
+ dispose?(): Promise<void> | void;
102
+ syncSessionMessages?(sessionId: string): Promise<void>;
103
+ checkHealth?(input?: RuntimeHealthCheckInput): Promise<RuntimeHealthCheckResult>;
104
+ abortSession?(sessionId: string): Promise<boolean>;
105
+ compactSession?(sessionId: string): Promise<boolean>;
106
+ spawnBackgroundSession?(input: SpawnBackgroundSessionInput): Promise<BackgroundRunHandle>;
107
+ promptBackgroundAsync?(input: PromptBackgroundAsyncInput): Promise<BackgroundRunHandle>;
108
+ getBackgroundStatus?(runId: string): Promise<BackgroundRunHandle | null>;
109
+ listBackgroundRuns?(input?: ListBackgroundRunsInput): Promise<Array<BackgroundRunHandle>>;
110
+ abortBackground?(runId: string): Promise<boolean>;
111
+ }