@elizaos/plugin-agent-orchestrator 2.0.3-beta.2 → 2.0.3-beta.3

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 (176) hide show
  1. package/dist/cjs/index.d.ts +2 -0
  2. package/dist/cjs/index.node.cjs +20962 -0
  3. package/dist/cjs/index.node.js.map +82 -0
  4. package/dist/index.d.ts +2 -0
  5. package/dist/node/index.d.ts +2 -0
  6. package/dist/node/index.d.ts.map +1 -0
  7. package/dist/node/index.node.d.ts +4 -0
  8. package/dist/node/index.node.d.ts.map +1 -0
  9. package/dist/node/index.node.js +20946 -0
  10. package/dist/node/index.node.js.map +82 -0
  11. package/dist/node/src/actions/common.d.ts +114 -0
  12. package/dist/node/src/actions/common.d.ts.map +1 -0
  13. package/dist/node/src/actions/elizaos-capability.d.ts +3 -0
  14. package/dist/node/src/actions/elizaos-capability.d.ts.map +1 -0
  15. package/dist/node/src/actions/sandbox-stub.d.ts +25 -0
  16. package/dist/node/src/actions/sandbox-stub.d.ts.map +1 -0
  17. package/dist/node/src/actions/tasks.d.ts +108 -0
  18. package/dist/node/src/actions/tasks.d.ts.map +1 -0
  19. package/dist/node/src/api/agent-routes.d.ts +18 -0
  20. package/dist/node/src/api/agent-routes.d.ts.map +1 -0
  21. package/dist/node/src/api/bridge-routes.d.ts +70 -0
  22. package/dist/node/src/api/bridge-routes.d.ts.map +1 -0
  23. package/dist/node/src/api/credential-prompt.d.ts +38 -0
  24. package/dist/node/src/api/credential-prompt.d.ts.map +1 -0
  25. package/dist/node/src/api/issue-routes.d.ts +17 -0
  26. package/dist/node/src/api/issue-routes.d.ts.map +1 -0
  27. package/dist/node/src/api/orchestrator-routes.d.ts +25 -0
  28. package/dist/node/src/api/orchestrator-routes.d.ts.map +1 -0
  29. package/dist/node/src/api/parent-context-routes.d.ts +17 -0
  30. package/dist/node/src/api/parent-context-routes.d.ts.map +1 -0
  31. package/dist/node/src/api/route-utils.d.ts +34 -0
  32. package/dist/node/src/api/route-utils.d.ts.map +1 -0
  33. package/dist/node/src/api/routes.d.ts +22 -0
  34. package/dist/node/src/api/routes.d.ts.map +1 -0
  35. package/dist/node/src/api/workspace-routes.d.ts +17 -0
  36. package/dist/node/src/api/workspace-routes.d.ts.map +1 -0
  37. package/dist/node/src/evaluators/sub-agent-completion.d.ts +3 -0
  38. package/dist/node/src/evaluators/sub-agent-completion.d.ts.map +1 -0
  39. package/dist/node/src/index.d.ts +57 -0
  40. package/dist/node/src/index.d.ts.map +1 -0
  41. package/dist/node/src/providers/action-examples.d.ts +14 -0
  42. package/dist/node/src/providers/action-examples.d.ts.map +1 -0
  43. package/dist/node/src/providers/active-sub-agents.d.ts +15 -0
  44. package/dist/node/src/providers/active-sub-agents.d.ts.map +1 -0
  45. package/dist/node/src/providers/active-workspace-context.d.ts +13 -0
  46. package/dist/node/src/providers/active-workspace-context.d.ts.map +1 -0
  47. package/dist/node/src/providers/available-agents.d.ts +4 -0
  48. package/dist/node/src/providers/available-agents.d.ts.map +1 -0
  49. package/dist/node/src/providers/coding-session-changes.d.ts +17 -0
  50. package/dist/node/src/providers/coding-session-changes.d.ts.map +1 -0
  51. package/dist/node/src/register-routes.d.ts +31 -0
  52. package/dist/node/src/register-routes.d.ts.map +1 -0
  53. package/dist/node/src/services/acceptance-criteria.d.ts +84 -0
  54. package/dist/node/src/services/acceptance-criteria.d.ts.map +1 -0
  55. package/dist/node/src/services/acp-native-transport.d.ts +111 -0
  56. package/dist/node/src/services/acp-native-transport.d.ts.map +1 -0
  57. package/dist/node/src/services/acp-service.d.ts +226 -0
  58. package/dist/node/src/services/acp-service.d.ts.map +1 -0
  59. package/dist/node/src/services/active-session-forward.d.ts +31 -0
  60. package/dist/node/src/services/active-session-forward.d.ts.map +1 -0
  61. package/dist/node/src/services/agent-name-assignment.d.ts +50 -0
  62. package/dist/node/src/services/agent-name-assignment.d.ts.map +1 -0
  63. package/dist/node/src/services/ansi-utils.d.ts +64 -0
  64. package/dist/node/src/services/ansi-utils.d.ts.map +1 -0
  65. package/dist/node/src/services/app-deploy-guidance.d.ts +52 -0
  66. package/dist/node/src/services/app-deploy-guidance.d.ts.map +1 -0
  67. package/dist/node/src/services/audit.d.ts +18 -0
  68. package/dist/node/src/services/audit.d.ts.map +1 -0
  69. package/dist/node/src/services/coding-account-selection.d.ts +79 -0
  70. package/dist/node/src/services/coding-account-selection.d.ts.map +1 -0
  71. package/dist/node/src/services/completion-envelope.d.ts +63 -0
  72. package/dist/node/src/services/completion-envelope.d.ts.map +1 -0
  73. package/dist/node/src/services/completion-evidence.d.ts +144 -0
  74. package/dist/node/src/services/completion-evidence.d.ts.map +1 -0
  75. package/dist/node/src/services/config-env.d.ts +27 -0
  76. package/dist/node/src/services/config-env.d.ts.map +1 -0
  77. package/dist/node/src/services/goal-contract.d.ts +25 -0
  78. package/dist/node/src/services/goal-contract.d.ts.map +1 -0
  79. package/dist/node/src/services/goal-llm-verifier.d.ts +157 -0
  80. package/dist/node/src/services/goal-llm-verifier.d.ts.map +1 -0
  81. package/dist/node/src/services/goal-prompt.d.ts +82 -0
  82. package/dist/node/src/services/goal-prompt.d.ts.map +1 -0
  83. package/dist/node/src/services/independent-verifier.d.ts +58 -0
  84. package/dist/node/src/services/independent-verifier.d.ts.map +1 -0
  85. package/dist/node/src/services/interruption-decider.d.ts +43 -0
  86. package/dist/node/src/services/interruption-decider.d.ts.map +1 -0
  87. package/dist/node/src/services/json-model-output.d.ts +2 -0
  88. package/dist/node/src/services/json-model-output.d.ts.map +1 -0
  89. package/dist/node/src/services/opencode-config.d.ts +21 -0
  90. package/dist/node/src/services/opencode-config.d.ts.map +1 -0
  91. package/dist/node/src/services/orchestrator-device-support-matrix.d.ts +46 -0
  92. package/dist/node/src/services/orchestrator-device-support-matrix.d.ts.map +1 -0
  93. package/dist/node/src/services/orchestrator-task-mapper.d.ts +192 -0
  94. package/dist/node/src/services/orchestrator-task-mapper.d.ts.map +1 -0
  95. package/dist/node/src/services/orchestrator-task-service.d.ts +370 -0
  96. package/dist/node/src/services/orchestrator-task-service.d.ts.map +1 -0
  97. package/dist/node/src/services/orchestrator-task-store.d.ts +156 -0
  98. package/dist/node/src/services/orchestrator-task-store.d.ts.map +1 -0
  99. package/dist/node/src/services/orchestrator-task-types.d.ts +334 -0
  100. package/dist/node/src/services/orchestrator-task-types.d.ts.map +1 -0
  101. package/dist/node/src/services/parent-agent-broker.d.ts +23 -0
  102. package/dist/node/src/services/parent-agent-broker.d.ts.map +1 -0
  103. package/dist/node/src/services/parent-agent-dispatch.d.ts +62 -0
  104. package/dist/node/src/services/parent-agent-dispatch.d.ts.map +1 -0
  105. package/dist/node/src/services/repo-input.d.ts +16 -0
  106. package/dist/node/src/services/repo-input.d.ts.map +1 -0
  107. package/dist/node/src/services/screenshot-delivery.d.ts +38 -0
  108. package/dist/node/src/services/screenshot-delivery.d.ts.map +1 -0
  109. package/dist/node/src/services/session-event-queue.d.ts +18 -0
  110. package/dist/node/src/services/session-event-queue.d.ts.map +1 -0
  111. package/dist/node/src/services/session-store.d.ts +108 -0
  112. package/dist/node/src/services/session-store.d.ts.map +1 -0
  113. package/dist/node/src/services/skill-lifeops-context-broker.d.ts +20 -0
  114. package/dist/node/src/services/skill-lifeops-context-broker.d.ts.map +1 -0
  115. package/dist/node/src/services/skill-manifest.d.ts +48 -0
  116. package/dist/node/src/services/skill-manifest.d.ts.map +1 -0
  117. package/dist/node/src/services/skill-recommender.d.ts +53 -0
  118. package/dist/node/src/services/skill-recommender.d.ts.map +1 -0
  119. package/dist/node/src/services/smithers-task-executor.d.ts +73 -0
  120. package/dist/node/src/services/smithers-task-executor.d.ts.map +1 -0
  121. package/dist/node/src/services/smithers-task-integration.d.ts +52 -0
  122. package/dist/node/src/services/smithers-task-integration.d.ts.map +1 -0
  123. package/dist/node/src/services/smithers-task-runner.d.ts +27 -0
  124. package/dist/node/src/services/smithers-task-runner.d.ts.map +1 -0
  125. package/dist/node/src/services/smithers-task-types.d.ts +96 -0
  126. package/dist/node/src/services/smithers-task-types.d.ts.map +1 -0
  127. package/dist/node/src/services/spawn-trajectory.d.ts +23 -0
  128. package/dist/node/src/services/spawn-trajectory.d.ts.map +1 -0
  129. package/dist/node/src/services/spend-allowance.d.ts +143 -0
  130. package/dist/node/src/services/spend-allowance.d.ts.map +1 -0
  131. package/dist/node/src/services/ssrf-guard.d.ts +66 -0
  132. package/dist/node/src/services/ssrf-guard.d.ts.map +1 -0
  133. package/dist/node/src/services/sub-agent-identity.d.ts +27 -0
  134. package/dist/node/src/services/sub-agent-identity.d.ts.map +1 -0
  135. package/dist/node/src/services/sub-agent-inbox.d.ts +26 -0
  136. package/dist/node/src/services/sub-agent-inbox.d.ts.map +1 -0
  137. package/dist/node/src/services/sub-agent-router.d.ts +178 -0
  138. package/dist/node/src/services/sub-agent-router.d.ts.map +1 -0
  139. package/dist/node/src/services/task-agent-frameworks.d.ts +103 -0
  140. package/dist/node/src/services/task-agent-frameworks.d.ts.map +1 -0
  141. package/dist/node/src/services/task-agent-routing.d.ts +33 -0
  142. package/dist/node/src/services/task-agent-routing.d.ts.map +1 -0
  143. package/dist/node/src/services/task-policy.d.ts +17 -0
  144. package/dist/node/src/services/task-policy.d.ts.map +1 -0
  145. package/dist/node/src/services/task-supervisor-service.d.ts +65 -0
  146. package/dist/node/src/services/task-supervisor-service.d.ts.map +1 -0
  147. package/dist/node/src/services/task-watchdog-service.d.ts +50 -0
  148. package/dist/node/src/services/task-watchdog-service.d.ts.map +1 -0
  149. package/dist/node/src/services/terminal-capabilities.d.ts +48 -0
  150. package/dist/node/src/services/terminal-capabilities.d.ts.map +1 -0
  151. package/dist/node/src/services/trajectory-context.d.ts +69 -0
  152. package/dist/node/src/services/trajectory-context.d.ts.map +1 -0
  153. package/dist/node/src/services/trajectory-feedback.d.ts +53 -0
  154. package/dist/node/src/services/trajectory-feedback.d.ts.map +1 -0
  155. package/dist/node/src/services/types.d.ts +188 -0
  156. package/dist/node/src/services/types.d.ts.map +1 -0
  157. package/dist/node/src/services/view-deploy-guidance.d.ts +14 -0
  158. package/dist/node/src/services/view-deploy-guidance.d.ts.map +1 -0
  159. package/dist/node/src/services/workdir-validation.d.ts +10 -0
  160. package/dist/node/src/services/workdir-validation.d.ts.map +1 -0
  161. package/dist/node/src/services/workspace-diff.d.ts +50 -0
  162. package/dist/node/src/services/workspace-diff.d.ts.map +1 -0
  163. package/dist/node/src/services/workspace-git-ops.d.ts +28 -0
  164. package/dist/node/src/services/workspace-git-ops.d.ts.map +1 -0
  165. package/dist/node/src/services/workspace-github.d.ts +60 -0
  166. package/dist/node/src/services/workspace-github.d.ts.map +1 -0
  167. package/dist/node/src/services/workspace-lifecycle.d.ts +5 -0
  168. package/dist/node/src/services/workspace-lifecycle.d.ts.map +1 -0
  169. package/dist/node/src/services/workspace-service.d.ts +126 -0
  170. package/dist/node/src/services/workspace-service.d.ts.map +1 -0
  171. package/dist/node/src/services/workspace-types.d.ts +81 -0
  172. package/dist/node/src/services/workspace-types.d.ts.map +1 -0
  173. package/dist/node/src/setup-routes.d.ts +9 -0
  174. package/dist/node/src/setup-routes.d.ts.map +1 -0
  175. package/docs/multi-account-orchestration.md +1 -1
  176. package/package.json +7 -4
@@ -0,0 +1,157 @@
1
+ /**
2
+ * LLM-based goal verifier.
3
+ *
4
+ * On `task_complete` an orchestrator task advances to status `validating`
5
+ * (see {@link OrchestratorTaskService.recordSessionEvent}) and waits for a
6
+ * caller to invoke {@link OrchestratorTaskService.validateTask} with a
7
+ * pass/fail judgment. Historically the only validators were a human
8
+ * pressing a button in the orchestrator UI and the pattern-based
9
+ * sub-agent-completion response evaluator (which only routes back through
10
+ * TASKS when the completion text contains explicit failure markers, not
11
+ * when the work simply doesn't meet the goal).
12
+ *
13
+ * This service is the third validator: a small-model judge that reads the
14
+ * task's `acceptanceCriteria` and the sub-agent's completion evidence and
15
+ * returns a structured `{ passed, summary, missing }` verdict. Callers
16
+ * (HTTP route, orchestrator UI button, future automatic hook) forward the
17
+ * verdict to {@link OrchestratorTaskService.validateTask} using
18
+ * `verifier: "llm-goal-verifier"`.
19
+ *
20
+ * Design constraints:
21
+ *
22
+ * - **No automatic firing.** The verifier is opt-in per task so an LLM
23
+ * call cannot be triggered without an explicit caller — protects users
24
+ * from surprise model spend.
25
+ * - **Small model only.** `ModelType.TEXT_SMALL` is sufficient for a
26
+ * yes/no judgment against a short criteria list and keeps the per-task
27
+ * cost bounded.
28
+ * - **Defensive parse.** A malformed model response always resolves to
29
+ * `passed: false` with an explanatory summary, never crashes the route.
30
+ *
31
+ * Refs: elizaOS/eliza#8124
32
+ *
33
+ * @module services/goal-llm-verifier
34
+ */
35
+ import { type IAgentRuntime } from "@elizaos/core";
36
+ /** Stable identifier the verifier stamps onto the `validateTask` payload so
37
+ * callers can distinguish LLM judgments from human approvals or pattern
38
+ * evaluators in the orchestrator audit log. */
39
+ export declare const LLM_GOAL_VERIFIER_NAME = "llm-goal-verifier";
40
+ /**
41
+ * Whether the orchestrator automatically runs {@link verifyGoalCompletion} when
42
+ * a sub-agent reports a task complete (status → `validating`). Default ON; set
43
+ * `ELIZA_ORCHESTRATOR_AUTO_GOAL_VERIFY=0` to disable, falling back to the
44
+ * manual `POST /tasks/:id/auto-validate` opt-in path. Mirrors the
45
+ * `ELIZA_ORCHESTRATOR_SMITHERS` flag convention.
46
+ *
47
+ * Auto-firing is additionally gated on the task actually having acceptance
48
+ * criteria (see {@link OrchestratorTaskService}), so a flag-on task with no
49
+ * criteria still incurs no model spend.
50
+ */
51
+ export declare function shouldAutoVerifyGoal(): boolean;
52
+ /**
53
+ * Maximum number of automatic corrective re-sends to a failing sub-agent before
54
+ * the orchestrator stops looping and hands the task to a human
55
+ * (`waiting_on_user`). Prevents a perpetually-failing worker from burning model
56
+ * spend in an unbounded verify→correct→verify cycle.
57
+ */
58
+ export declare const MAX_AUTO_VERIFY_ATTEMPTS = 3;
59
+ /**
60
+ * Compose the corrective message body sent back to a sub-agent when automatic
61
+ * verification did not confirm every acceptance criterion. The
62
+ * goal/acceptance-criteria envelope is re-applied by `buildGoalFollowUp`
63
+ * (reason `validation_failed`); this is just the human-readable gap report.
64
+ *
65
+ * Behaves like a demanding manager whose tone ESCALATES per attempt — a
66
+ * manager who has been fobbed off twice does not keep asking nicely:
67
+ *
68
+ * - **Attempt 1** — collegial: "verification didn't confirm X; here's the
69
+ * proof to produce" (the per-criterion proof demands).
70
+ * - **Attempt 2** — pointed/socratic: direct questions per unmet criterion
71
+ * ("which command did you run, and what was its output? Paste it."), and a
72
+ * note that a prior attempt already failed.
73
+ * - **Attempt 3+ (final)** — firm last-chance: this is the final automated
74
+ * attempt before the task is parked for a human; every checklist item must be
75
+ * proven inline or the task is escalated.
76
+ *
77
+ * For EACH unmet criterion it names the specific proof the worker must produce
78
+ * and re-report WITH (a passing build/test line, a screenshot for UI, a
79
+ * scenario trajectory for agent behavior, a reachable URL for a deploy), and
80
+ * appends an explicit {@link buildEvidenceChecklist} the worker must tick with
81
+ * the artifact, so the next completion arrives with verifiable evidence instead
82
+ * of another plausible-but-unproven claim.
83
+ *
84
+ * @param missing unmet acceptance criteria the verifier could not confirm.
85
+ * @param attempt 1-based correction attempt (defaults to 1 so callers that
86
+ * don't track attempts keep the collegial behavior). Clamped to
87
+ * `[1, MAX_AUTO_VERIFY_ATTEMPTS]`; attempt `MAX_AUTO_VERIFY_ATTEMPTS`
88
+ * is the final-chance phrasing before escalation to a human.
89
+ */
90
+ export declare function buildAutoVerifyCorrection(missing: readonly string[], attempt?: number): string;
91
+ export interface GoalVerificationInput {
92
+ /** The durable task goal — the "what" the worker owns. */
93
+ goal: string;
94
+ /** Explicit acceptance criteria from the task record. May be empty when
95
+ * the task was opened without any. */
96
+ acceptanceCriteria: readonly string[];
97
+ /** Concatenated completion evidence: sub-agent final reply, test output,
98
+ * files touched, etc. The caller decides what to include. */
99
+ completionEvidence: string;
100
+ }
101
+ /**
102
+ * Optional recording context for {@link verifyGoalCompletion}. When
103
+ * `recordTrajectory` is supplied AND trajectory recording is enabled
104
+ * (`ELIZA_TRAJECTORY_RECORDING` != 0), the single grill model call is written
105
+ * as a one-stage trajectory under the active trajectory dir
106
+ * (`ELIZA_TRAJECTORY_DIR` → state-dir/trajectories). That stage carries the
107
+ * verifier prompt and the model's verdict — exactly the model-boundary record
108
+ * the scenario native-export converts to an `eliza_native_v1` training row and
109
+ * the production observability stack reads. Pure unit tests pass no context, so
110
+ * they record nothing.
111
+ */
112
+ export interface GoalVerificationOptions {
113
+ recordTrajectory?: {
114
+ /** Durable task room id, used as the trajectory roomId for correlation. */
115
+ roomId?: string;
116
+ /** Durable task id, used to label the recorded root message. */
117
+ taskId?: string;
118
+ /** Reporting sub-agent session id, used to label the recorded root message. */
119
+ sessionId?: string;
120
+ };
121
+ }
122
+ export interface GoalVerificationResult {
123
+ /** True when every acceptance criterion appears to be met AND no stated
124
+ * constraint was violated. */
125
+ passed: boolean;
126
+ /** One-sentence human-readable summary suitable for the
127
+ * `OrchestratorTaskEvent.summary` field. */
128
+ summary: string;
129
+ /** Each criterion the verifier could not confirm from the evidence. Empty
130
+ * when `passed` is true. Used by the orchestrator to compose a
131
+ * corrective follow-up prompt. */
132
+ missing: string[];
133
+ /** Raw model response text, kept for the audit log and for tests. */
134
+ rawResponse: string;
135
+ }
136
+ /** The judge prompt. Kept deliberately small and structured so a small
137
+ * model can produce parseable JSON reliably, but written as a demanding,
138
+ * evidence-first manager: each criterion must be backed by CONCRETE PROOF in
139
+ * the evidence, not a plausible-sounding claim. */
140
+ export declare function buildVerificationPrompt(input: GoalVerificationInput): string;
141
+ interface ParsedJudgeResponse {
142
+ passed: boolean;
143
+ summary: string;
144
+ missing: string[];
145
+ }
146
+ export declare function parseJudgeResponse(raw: string, acceptanceCriteria: readonly string[]): ParsedJudgeResponse;
147
+ /**
148
+ * Ask a small model to judge whether the sub-agent's completion evidence
149
+ * satisfies every acceptance criterion. Returns a structured verdict the
150
+ * caller can forward to {@link OrchestratorTaskService.validateTask}.
151
+ *
152
+ * Pure with respect to filesystem and network state — the only side effect
153
+ * is one `runtime.useModel` call.
154
+ */
155
+ export declare function verifyGoalCompletion(runtime: IAgentRuntime, input: GoalVerificationInput, options?: GoalVerificationOptions): Promise<GoalVerificationResult>;
156
+ export {};
157
+ //# sourceMappingURL=goal-llm-verifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goal-llm-verifier.d.ts","sourceRoot":"","sources":["../../../../src/services/goal-llm-verifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAEL,KAAK,aAAa,EAInB,MAAM,eAAe,CAAC;AAEvB;;gDAEgD;AAChD,eAAO,MAAM,sBAAsB,sBAAsB,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAyD1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,OAAO,SAAI,GACV,MAAM,CAqER;AAED,MAAM,WAAW,qBAAqB;IACpC,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb;2CACuC;IACvC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC;kEAC8D;IAC9D,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,uBAAuB;IACtC,gBAAgB,CAAC,EAAE;QACjB,2EAA2E;QAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,gEAAgE;QAChE,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,+EAA+E;QAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,sBAAsB;IACrC;mCAC+B;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB;iDAC6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB;;uCAEmC;IACnC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,qEAAqE;IACrE,WAAW,EAAE,MAAM,CAAC;CACrB;AAsBD;;;oDAGoD;AACpD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CAmC5E;AAED,UAAU,mBAAmB;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAiBD,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,kBAAkB,EAAE,SAAS,MAAM,EAAE,GACpC,mBAAmB,CA6CrB;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,qBAAqB,EAC5B,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,sBAAsB,CAAC,CAgDjC"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Goal-wrapper prompt builders.
3
+ *
4
+ * Every sub-agent spawn and follow-up — whether it originates from the
5
+ * `TASKS_*` planner action, a direct `/api/coding-agents/*` call, or an
6
+ * `/api/orchestrator/*` route — must pass its raw text through one of these
7
+ * builders. Centralising the envelope is what makes worker behaviour
8
+ * consistent: the same goal, acceptance criteria, room wiring, capability
9
+ * fence, and completion contract reach Claude, Codex, OpenCode, ElizaOS, and
10
+ * Pi Agent regardless of entry point. The wording is the formalised version of
11
+ * the swarm-coordination block that `TASKS_SPAWN_AGENT` already emits.
12
+ *
13
+ * @module services/goal-prompt
14
+ */
15
+ import type { AttemptReflection } from "./orchestrator-task-types.js";
16
+ /** The coding-relevant capability fence applied when a caller does not pass an
17
+ * explicit allow-list. Keeps a worker from reaching for unrelated connectors or
18
+ * broad personal-data tools. */
19
+ export declare const DEFAULT_GOAL_CAPABILITIES: readonly string[];
20
+ /**
21
+ * Capability fence for goal tasks that build and monetize an Eliza Cloud app.
22
+ * Extends the coding capabilities with the parent-agent Cloud command bridge so
23
+ * a `/goal` sub-agent can drive the create-app → deploy → monetize → buy-domain
24
+ * loop. Paid Cloud commands are still gated server-side and by the broker's
25
+ * capped self-spend allowance (see `spend-allowance.ts`).
26
+ */
27
+ export declare const ECONOMICS_GOAL_CAPABILITIES: readonly string[];
28
+ /** Named capability fences a goal task can run under. */
29
+ export type GoalCapabilityProfile = "default" | "economics";
30
+ /** Resolve a capability profile name to its allow-list. Unknown / undefined
31
+ * profiles fall back to the coding-only default fence. */
32
+ export declare function resolveGoalCapabilities(profile?: GoalCapabilityProfile): readonly string[];
33
+ /** Coerce an untyped value (e.g. a task metadata field) to a known profile, or
34
+ * `undefined` when it is not a recognized profile name. */
35
+ export declare function coerceGoalCapabilityProfile(value: unknown): GoalCapabilityProfile | undefined;
36
+ export interface GoalPromptInput {
37
+ /** The distinct person-name this sub-agent is given on spawn, so it knows its
38
+ * own identity within the swarm (the way the main agent is named). */
39
+ agentName: string;
40
+ /** The durable objective the worker owns until it is met or blocked. */
41
+ goal: string;
42
+ /** The concrete first instruction. Defaults to {@link GoalPromptInput.goal}. */
43
+ task?: string;
44
+ acceptanceCriteria?: string[];
45
+ /** Task-wide room for status, final handoff, and questions to the creator. */
46
+ taskRoomId?: string;
47
+ /** Room shared by agents touching the same worktree, when distinct. */
48
+ worktreeRoomId?: string;
49
+ workdir?: string;
50
+ repo?: string;
51
+ /** Named capability fence to apply when `allowedCapabilities` is not given.
52
+ * Defaults to `"default"` (the coding-only fence). */
53
+ capabilityProfile?: GoalCapabilityProfile;
54
+ /** Explicit capability fence; overrides {@link GoalPromptInput.capabilityProfile}
55
+ * and defaults to {@link DEFAULT_GOAL_CAPABILITIES}. */
56
+ allowedCapabilities?: readonly string[];
57
+ /** Reflexion-style post-mortems from prior failed verification attempts of
58
+ * this same task. Injected on re-spawn so the worker doesn't repeat them. */
59
+ attemptReflections?: readonly AttemptReflection[];
60
+ }
61
+ export type GoalFollowUpReason = "user_message" | "orchestrator" | "incomplete_completion" | "validation_failed" | "resume";
62
+ export interface GoalFollowUpInput {
63
+ goal: string;
64
+ /** The raw follow-up text from the user, orchestrator, or planner. */
65
+ message: string;
66
+ acceptanceCriteria?: string[];
67
+ reason?: GoalFollowUpReason;
68
+ taskRoomId?: string;
69
+ }
70
+ /**
71
+ * Build the initial sub-agent prompt. The returned string wraps the concrete
72
+ * task in the durable goal, acceptance criteria, room wiring, capability fence,
73
+ * and completion contract.
74
+ */
75
+ export declare function buildGoalPrompt(input: GoalPromptInput): string;
76
+ /**
77
+ * Build a follow-up prompt for an in-flight session. Re-anchors the worker to
78
+ * the durable goal and completion contract so a stray user message cannot
79
+ * derail it into treating the follow-up as a fresh, unbounded task.
80
+ */
81
+ export declare function buildGoalFollowUp(input: GoalFollowUpInput): string;
82
+ //# sourceMappingURL=goal-prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goal-prompt.d.ts","sourceRoot":"","sources":["../../../../src/services/goal-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEtE;;gCAEgC;AAChC,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EAMtD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,EAAE,SAAS,MAAM,EAYxD,CAAC;AAEF,yDAAyD;AACzD,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,WAAW,CAAC;AAE5D;0DAC0D;AAC1D,wBAAgB,uBAAuB,CACrC,OAAO,CAAC,EAAE,qBAAqB,GAC9B,SAAS,MAAM,EAAE,CAInB;AAED;2DAC2D;AAC3D,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,OAAO,GACb,qBAAqB,GAAG,SAAS,CAMnC;AAED,MAAM,WAAW,eAAe;IAC9B;0EACsE;IACtE,SAAS,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;0DACsD;IACtD,iBAAiB,CAAC,EAAE,qBAAqB,CAAC;IAC1C;4DACwD;IACxD,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC;iFAC6E;IAC7E,kBAAkB,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;CACnD;AAED,MAAM,MAAM,kBAAkB,GAC1B,cAAc,GACd,cAAc,GACd,uBAAuB,GACvB,mBAAmB,GACnB,QAAQ,CAAC;AAEb,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAcD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CA0E9D;AAeD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CA8BlE"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Independent read-only verifier sub-agent (#8898, EPIC #8884).
3
+ *
4
+ * The goal verifier judges only what the coding sub-agent narrated — it can't
5
+ * independently run `bun test`, read a file, or inspect the diff. Best practice
6
+ * (Agent-as-a-Judge / Validation Chain) spawns a SEPARATE read-only agent that
7
+ * verifies by execution. This module builds that verifier's spawn prompt, runs
8
+ * it (via an injected spawn-and-await so it unit-tests without ACP), and turns
9
+ * its CompletionEnvelope into an execution-grounded verdict for `validateTask`.
10
+ *
11
+ * "Read-only" is enforced by the prompt + the spawn's approval preset (the spawn
12
+ * API has no hard tool whitelist): the verifier is told to run/read/inspect only,
13
+ * never edit.
14
+ */
15
+ import { type CompletionEnvelope } from "./completion-envelope.js";
16
+ /** Build the independent verifier's spawn prompt. */
17
+ export declare function buildIndependentVerifierPrompt(input: {
18
+ goal: string;
19
+ acceptanceCriteria: string[];
20
+ diffSummary?: string;
21
+ }): string;
22
+ export interface IndependentVerifierVerdict {
23
+ /** True only when every criterion is met AND every test command exited 0. */
24
+ passed: boolean;
25
+ /** Criteria the verifier marked unmet (or all, when the envelope was unusable). */
26
+ unmet: string[];
27
+ /** Test commands that exited non-zero. */
28
+ failedCommands: string[];
29
+ /** One-line human summary. */
30
+ summary: string;
31
+ /** True when no usable envelope came back (caller should not auto-pass). */
32
+ inconclusive: boolean;
33
+ }
34
+ /** Turn the verifier's parsed envelope into an execution-grounded verdict. */
35
+ export declare function verifierVerdict(completionText: string): IndependentVerifierVerdict;
36
+ /** Verdict directly from a (already-parsed) envelope. */
37
+ export declare function verdictFromEnvelope(env: CompletionEnvelope): IndependentVerifierVerdict;
38
+ /** Default-on for code-change tasks; gated by ELIZA_ORCHESTRATOR_INDEPENDENT_VERIFY. */
39
+ export declare function shouldRunIndependentVerify(getSetting: (key: string) => string | undefined | null, hasCodeChanges: boolean): boolean;
40
+ export interface IndependentVerifyDeps {
41
+ /**
42
+ * Spawn the read-only verifier with `prompt` and resolve its final completion
43
+ * text. The caller wires this to AcpService.spawnSession + awaiting the
44
+ * session's task_complete; tests inject a stub.
45
+ */
46
+ spawnAndAwait: (prompt: string) => Promise<string>;
47
+ }
48
+ /**
49
+ * Run an independent verification pass and return the verdict. A spawn failure
50
+ * is inconclusive (never a false pass) so the caller keeps the task in
51
+ * validating rather than promoting it on a verifier crash.
52
+ */
53
+ export declare function runIndependentVerification(input: {
54
+ goal: string;
55
+ acceptanceCriteria: string[];
56
+ diffSummary?: string;
57
+ }, deps: IndependentVerifyDeps): Promise<IndependentVerifierVerdict>;
58
+ //# sourceMappingURL=independent-verifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"independent-verifier.d.ts","sourceRoot":"","sources":["../../../../src/services/independent-verifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EACL,KAAK,kBAAkB,EAExB,MAAM,0BAA0B,CAAC;AAElC,qDAAqD;AACrD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,MAAM,CAmBT;AAED,MAAM,WAAW,0BAA0B;IACzC,6EAA6E;IAC7E,MAAM,EAAE,OAAO,CAAC;IAChB,mFAAmF;IACnF,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,0CAA0C;IAC1C,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,8EAA8E;AAC9E,wBAAgB,eAAe,CAC7B,cAAc,EAAE,MAAM,GACrB,0BAA0B,CAa5B;AAED,yDAAyD;AACzD,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,kBAAkB,GACtB,0BAA0B,CAiB5B;AAED,wFAAwF;AACxF,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,IAAI,EACtD,cAAc,EAAE,OAAO,GACtB,OAAO,CAMT;AAED,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACpD;AAED;;;;GAIG;AACH,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EAC3E,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,0BAA0B,CAAC,CAiBrC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Interruption decider for sub-agents sharing a task room.
3
+ *
4
+ * When a human posts in a task room while sub-agents are working, we must
5
+ * decide — per participant — whether that message should INTERRUPT the
6
+ * in-flight turn, be QUEUED for after it, be DELIVERED now (idle agent), or be
7
+ * IGNORED (ambient chatter not meant for this agent).
8
+ *
9
+ * Eliza participants already have this faculty: the core `shouldRespond`
10
+ * evaluator (RESPOND / IGNORE / STOP). Coding sub-agents (Claude Code, Codex,
11
+ * OpenCode) have no such gate — left alone, every keystroke in the room is
12
+ * injected into a running turn, derailing it. This module gives them an
13
+ * equivalent structural decision, and threads an Eliza participant's
14
+ * `shouldRespond` verdict through unchanged when one is supplied.
15
+ *
16
+ * Bias: a working sub-agent keeps working. We only INTERRUPT on an explicit
17
+ * stop/redirect; otherwise relevant messages QUEUE and ambient ones are IGNORE.
18
+ */
19
+ export type InterruptionAction = "deliver" | "queue" | "interrupt" | "ignore";
20
+ export interface InterruptionDecision {
21
+ action: InterruptionAction;
22
+ reason: string;
23
+ }
24
+ export interface InterruptionInput {
25
+ /** The incoming user message text. */
26
+ text: string;
27
+ /** Sub-agent framework: claude / codex / opencode / elizaos / … */
28
+ agentType: string;
29
+ /** True when the sub-agent is mid-turn (ACP status `busy`). */
30
+ sessionBusy: boolean;
31
+ /** The sub-agent's person-name label, for addressing detection. */
32
+ agentLabel?: string;
33
+ /** An Eliza participant's core shouldRespond verdict, when available. */
34
+ shouldRespond?: "RESPOND" | "IGNORE" | "STOP";
35
+ /** True when the room has participants beyond the user + this sub-agent. */
36
+ multiParty?: boolean;
37
+ }
38
+ /**
39
+ * Decide what to do with a room message destined for a running sub-agent.
40
+ * Pure and synchronous — the caller supplies the (already known) session state.
41
+ */
42
+ export declare function decideInterruption(input: InterruptionInput): InterruptionDecision;
43
+ //# sourceMappingURL=interruption-decider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interruption-decider.d.ts","sourceRoot":"","sources":["../../../../src/services/interruption-decider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE9E,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,WAAW,EAAE,OAAO,CAAC;IACrB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,aAAa,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC9C,4EAA4E;IAC5E,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AA6BD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,iBAAiB,GACvB,oBAAoB,CAmDtB"}
@@ -0,0 +1,2 @@
1
+ export declare function parseJsonObjectResponse<T = Record<string, unknown>>(raw: string): T | null;
2
+ //# sourceMappingURL=json-model-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-model-output.d.ts","sourceRoot":"","sources":["../../../../src/services/json-model-output.ts"],"names":[],"mappings":"AAAA,wBAAgB,uBAAuB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,GAAG,EAAE,MAAM,GACV,CAAC,GAAG,IAAI,CAgBV"}
@@ -0,0 +1,21 @@
1
+ import type { IAgentRuntime } from "@elizaos/core";
2
+ type RuntimeLike = Pick<IAgentRuntime, "getSetting">;
3
+ export interface OpencodeSpawnConfig {
4
+ configContent: string;
5
+ providerLabel: string;
6
+ providerId: string;
7
+ model: string;
8
+ smallModel?: string;
9
+ }
10
+ export interface OpencodeAcpEnvResult {
11
+ env: Record<string, string>;
12
+ config?: OpencodeSpawnConfig;
13
+ vendoredShimDir?: string;
14
+ }
15
+ export declare function buildOpencodeSpawnConfig(runtime: RuntimeLike | undefined, env?: NodeJS.ProcessEnv | Record<string, string | undefined>, overrideModel?: string): OpencodeSpawnConfig | null;
16
+ export declare function resolveVendoredOpencodeShim(): string | undefined;
17
+ export declare function resolveVendoredOpencodeAcpCommand(): string | undefined;
18
+ export declare function prependPathDir(currentPath: string | undefined, dir: string): string;
19
+ export declare function buildOpencodeAcpEnv(runtime: RuntimeLike | undefined, env?: NodeJS.ProcessEnv | Record<string, string | undefined>, model?: string): OpencodeAcpEnvResult;
20
+ export {};
21
+ //# sourceMappingURL=opencode-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-config.d.ts","sourceRoot":"","sources":["../../../../src/services/opencode-config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAkCnD,KAAK,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;AAErD,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AA6ED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,WAAW,GAAG,SAAS,EAChC,GAAG,GAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,EACzE,aAAa,CAAC,EAAE,MAAM,GACrB,mBAAmB,GAAG,IAAI,CAkF5B;AAqBD,wBAAgB,2BAA2B,IAAI,MAAM,GAAG,SAAS,CAehE;AAMD,wBAAgB,iCAAiC,IAAI,MAAM,GAAG,SAAS,CAKtE;AAED,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,GAAG,EAAE,MAAM,GACV,MAAM,CAMR;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,WAAW,GAAG,SAAS,EAChC,GAAG,GAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,EACzE,KAAK,CAAC,EAAE,MAAM,GACb,oBAAoB,CA4BtB"}
@@ -0,0 +1,46 @@
1
+ import { type OrchestratorTerminalSupport, type TerminalSupportEnv } from "./terminal-capabilities.js";
2
+ /**
3
+ * Static device × backend × auth-mode support matrix for multi-subscription
4
+ * coding-agent orchestration. Single checked-in source of truth that mirrors
5
+ * the live gate (`detectOrchestratorTerminalSupport` /
6
+ * `classifyTerminalSupport` in terminal-capabilities.ts) — see issue #9146.
7
+ *
8
+ * Each row's `support` is computed by the SAME pure classifier the runtime
9
+ * uses, so this object cannot silently drift from the gate: a change to the
10
+ * device gating that affects any documented profile fails this package's tests.
11
+ *
12
+ * Backend → auth-mode reach mirrors AGENT_PROVIDER_CANDIDATES in
13
+ * packages/app-core/src/services/coding-account-bridge.ts (the auth pairing
14
+ * lives there because the plugin depends only on @elizaos/core and reads the
15
+ * selector over a globalThis bridge). When a device supports coding agents,
16
+ * every backend below is reachable on it; when unsupported, none are.
17
+ */
18
+ /** Coding backends with a first-party spawnable CLI (post #9167 cleanup). */
19
+ export declare const ORCHESTRATOR_BACKENDS: readonly ["elizaos", "pi-agent", "claude", "codex", "opencode"];
20
+ export type OrchestratorBackend = (typeof ORCHESTRATOR_BACKENDS)[number];
21
+ /** Ordered auth modes per backend; subscription is preferred over API key. */
22
+ export declare const ORCHESTRATOR_BACKEND_AUTH: Readonly<Record<OrchestratorBackend, readonly string[]>>;
23
+ export interface DeviceSupportProfile {
24
+ /** Stable id for the device/runtime profile. */
25
+ id: string;
26
+ /** Human-readable description for the support-matrix doc. */
27
+ label: string;
28
+ /** The env snapshot that characterizes this profile. */
29
+ env: TerminalSupportEnv;
30
+ /** For Android profiles, whether a staged shell is present. */
31
+ androidShellAvailable?: boolean;
32
+ }
33
+ /** Documented device/runtime profiles, mirroring terminal-capabilities.ts. */
34
+ export declare const ORCHESTRATOR_DEVICE_PROFILES: readonly DeviceSupportProfile[];
35
+ export interface DeviceSupportMatrixRow {
36
+ id: string;
37
+ label: string;
38
+ support: OrchestratorTerminalSupport;
39
+ /** Backends reachable on this device (all when supported, none otherwise). */
40
+ backends: readonly OrchestratorBackend[];
41
+ }
42
+ /** Compute the full matrix through the same pure gate the runtime uses. */
43
+ export declare function buildOrchestratorDeviceSupportMatrix(): DeviceSupportMatrixRow[];
44
+ /** Eagerly-evaluated matrix snapshot for docs/consumers. */
45
+ export declare const ORCHESTRATOR_DEVICE_SUPPORT_MATRIX: readonly DeviceSupportMatrixRow[];
46
+ //# sourceMappingURL=orchestrator-device-support-matrix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator-device-support-matrix.d.ts","sourceRoot":"","sources":["../../../../src/services/orchestrator-device-support-matrix.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,2BAA2B,EAChC,KAAK,kBAAkB,EACxB,MAAM,4BAA4B,CAAC;AAEpC;;;;;;;;;;;;;;;GAeG;AAEH,6EAA6E;AAC7E,eAAO,MAAM,qBAAqB,iEAMxB,CAAC;AACX,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzE,8EAA8E;AAC9E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAC9C,MAAM,CAAC,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC,CAO/C,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,gDAAgD;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,GAAG,EAAE,kBAAkB,CAAC;IACxB,+DAA+D;IAC/D,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,8EAA8E;AAC9E,eAAO,MAAM,4BAA4B,EAAE,SAAS,oBAAoB,EA2BvE,CAAC;AAEF,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,2BAA2B,CAAC;IACrC,8EAA8E;IAC9E,QAAQ,EAAE,SAAS,mBAAmB,EAAE,CAAC;CAC1C;AAED,2EAA2E;AAC3E,wBAAgB,oCAAoC,IAAI,sBAAsB,EAAE,CAY/E;AAED,4DAA4D;AAC5D,eAAO,MAAM,kCAAkC,EAAE,SAAS,sBAAsB,EACxC,CAAC"}
@@ -0,0 +1,192 @@
1
+ /**
2
+ * Maps the durable {@link OrchestratorTaskDocument} into the wire DTOs the
3
+ * `/orchestrator` frontend consumes. These shapes mirror
4
+ * `packages/ui/src/api/client-types-cloud.ts` (`CodingAgentTaskThread` /
5
+ * `CodingAgentTaskThreadDetail`) and extend them with the orchestrator-native
6
+ * fields the research report calls for: priority, pause state, provider policy,
7
+ * the full room-message timeline, and a token/cost usage summary. The plugin
8
+ * and `packages/ui` are separate packages communicating over HTTP, so the
9
+ * structural agreement between these DTOs and the client types is enforced by
10
+ * a contract test rather than a shared import.
11
+ *
12
+ * @module services/orchestrator-task-mapper
13
+ */
14
+ import type { ArtifactVerificationStatus, OrchestratorTaskDocument, OrchestratorTaskPriority, OrchestratorTaskStatus, OrchestratorTaskUsage, TaskMessageDirection, TaskMessageSenderKind, TaskProviderPolicy, TaskUsageSummary, UsageState } from "./orchestrator-task-types.js";
15
+ export interface TaskThreadDto {
16
+ id: string;
17
+ title: string;
18
+ kind: string;
19
+ status: OrchestratorTaskStatus;
20
+ priority: OrchestratorTaskPriority;
21
+ paused: boolean;
22
+ originalRequest: string;
23
+ summary?: string;
24
+ sessionCount: number;
25
+ activeSessionCount: number;
26
+ latestSessionId: string | null;
27
+ latestSessionLabel: string | null;
28
+ latestWorkdir: string | null;
29
+ latestRepo: string | null;
30
+ latestActivityAt: number | null;
31
+ decisionCount: number;
32
+ usage: TaskUsageSummary;
33
+ createdAt: string;
34
+ updatedAt: string;
35
+ closedAt: string | null;
36
+ archivedAt: string | null;
37
+ }
38
+ export interface TaskSessionDto {
39
+ id: string;
40
+ threadId: string;
41
+ sessionId: string;
42
+ framework: string;
43
+ providerSource: string | null;
44
+ model: string | null;
45
+ accountProviderId: string | null;
46
+ accountId: string | null;
47
+ accountLabel: string | null;
48
+ label: string;
49
+ originalTask: string;
50
+ workdir: string;
51
+ repo: string | null;
52
+ status: string;
53
+ activeTool: string | null;
54
+ decisionCount: number;
55
+ autoResolvedCount: number;
56
+ registeredAt: number;
57
+ lastActivityAt: number;
58
+ idleCheckCount: number;
59
+ taskDelivered: boolean;
60
+ completionSummary: string | null;
61
+ lastSeenDecisionIndex: number;
62
+ lastInputSentAt: number | null;
63
+ stoppedAt: number | null;
64
+ inputTokens: number;
65
+ outputTokens: number;
66
+ reasoningTokens: number;
67
+ totalTokens: number;
68
+ cacheTokens: number;
69
+ costUsd: number;
70
+ usageState: UsageState;
71
+ metadata: Record<string, unknown>;
72
+ createdAt: string;
73
+ updatedAt: string;
74
+ }
75
+ export interface TaskDecisionDto {
76
+ id: string;
77
+ threadId: string;
78
+ sessionId: string;
79
+ event: string;
80
+ promptText: string;
81
+ decision: string;
82
+ response: string | null;
83
+ reasoning: string;
84
+ timestamp: number;
85
+ createdAt: string;
86
+ }
87
+ export interface TaskEventDto {
88
+ id: string;
89
+ threadId: string;
90
+ sessionId: string | null;
91
+ eventType: string;
92
+ timestamp: number;
93
+ summary: string;
94
+ data: Record<string, unknown>;
95
+ createdAt: string;
96
+ }
97
+ export interface TaskArtifactDto {
98
+ id: string;
99
+ threadId: string;
100
+ sessionId: string | null;
101
+ artifactType: string;
102
+ title: string;
103
+ path: string | null;
104
+ uri: string | null;
105
+ mimeType: string | null;
106
+ verificationStatus: ArtifactVerificationStatus;
107
+ metadata: Record<string, unknown>;
108
+ createdAt: string;
109
+ }
110
+ export interface TaskMessageDto {
111
+ id: string;
112
+ threadId: string;
113
+ sessionId: string | null;
114
+ senderKind: TaskMessageSenderKind;
115
+ direction: TaskMessageDirection;
116
+ content: string;
117
+ timestamp: number;
118
+ metadata: Record<string, unknown>;
119
+ createdAt: string;
120
+ }
121
+ export type TaskTimelineItemDto = {
122
+ id: string;
123
+ kind: "message";
124
+ threadId: string;
125
+ sessionId: string | null;
126
+ timestamp: number;
127
+ createdAt: string;
128
+ message: TaskMessageDto;
129
+ } | {
130
+ id: string;
131
+ kind: "event";
132
+ threadId: string;
133
+ sessionId: string | null;
134
+ timestamp: number;
135
+ createdAt: string;
136
+ event: TaskEventDto;
137
+ };
138
+ export interface TaskTranscriptDto {
139
+ id: string;
140
+ threadId: string;
141
+ sessionId: string;
142
+ timestamp: number;
143
+ direction: TaskMessageDirection;
144
+ content: string;
145
+ metadata: Record<string, unknown>;
146
+ createdAt: string;
147
+ }
148
+ export interface TaskPlanRevisionDto {
149
+ id: string;
150
+ threadId: string;
151
+ plan: Record<string, unknown>;
152
+ basePlanRevisionId: string | null;
153
+ editSummary: string | null;
154
+ createdBy: string;
155
+ metadata: Record<string, unknown>;
156
+ timestamp: number;
157
+ createdAt: string;
158
+ }
159
+ export interface TaskThreadDetailDto extends TaskThreadDto {
160
+ goal: string;
161
+ roomId: string | null;
162
+ taskRoomId: string | null;
163
+ worldId: string | null;
164
+ ownerUserId: string | null;
165
+ parentTaskId: string | null;
166
+ acceptanceCriteria: string[];
167
+ currentPlan: Record<string, unknown> | null;
168
+ providerPolicy: TaskProviderPolicy | null;
169
+ lastUserTurnAt: string | null;
170
+ lastCoordinatorTurnAt: string | null;
171
+ metadata: Record<string, unknown>;
172
+ sessions: TaskSessionDto[];
173
+ decisions: TaskDecisionDto[];
174
+ events: TaskEventDto[];
175
+ artifacts: TaskArtifactDto[];
176
+ messages: TaskMessageDto[];
177
+ transcripts: TaskTranscriptDto[];
178
+ planRevisions: TaskPlanRevisionDto[];
179
+ }
180
+ export declare function toTaskEventDto(event: OrchestratorTaskDocument["events"][number]): TaskEventDto;
181
+ export declare function toTaskMessageDto(message: OrchestratorTaskDocument["messages"][number]): TaskMessageDto;
182
+ export declare function toTaskTimelineMessageDto(message: OrchestratorTaskDocument["messages"][number]): TaskTimelineItemDto;
183
+ export declare function toTaskTimelineEventDto(event: OrchestratorTaskDocument["events"][number]): TaskTimelineItemDto;
184
+ export declare function toTaskPlanRevisionDto(revision: OrchestratorTaskDocument["planRevisions"][number]): TaskPlanRevisionDto;
185
+ /** Aggregate per-session usage into the by-provider breakdown plus a total. The
186
+ * state is rolled up so the UI can render measured / estimated / unavailable
187
+ * distinctly instead of showing a confident `0`. */
188
+ export declare function summarizeUsageRows(usage: readonly OrchestratorTaskUsage[]): TaskUsageSummary;
189
+ export declare function summarizeUsage(doc: OrchestratorTaskDocument): TaskUsageSummary;
190
+ export declare function toTaskThread(doc: OrchestratorTaskDocument): TaskThreadDto;
191
+ export declare function toTaskThreadDetail(doc: OrchestratorTaskDocument): TaskThreadDetailDto;
192
+ //# sourceMappingURL=orchestrator-task-mapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator-task-mapper.d.ts","sourceRoot":"","sources":["../../../../src/services/orchestrator-task-mapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EACV,0BAA0B,EAC1B,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,UAAU,EACX,MAAM,8BAA8B,CAAC;AAGtC,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,sBAAsB,CAAC;IAC/B,QAAQ,EAAE,wBAAwB,CAAC;IACnC,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,gBAAgB,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,kBAAkB,EAAE,0BAA0B,CAAC;IAC/C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,qBAAqB,CAAC;IAClC,SAAS,EAAE,oBAAoB,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,mBAAmB,GAC3B;IACE,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,cAAc,CAAC;CACzB,GACD;IACE,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,YAAY,CAAC;CACrB,CAAC;AAEN,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,oBAAoB,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5C,cAAc,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC1C,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,aAAa,EAAE,mBAAmB,EAAE,CAAC;CACtC;AAsBD,wBAAgB,cAAc,CAC5B,KAAK,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAChD,YAAY,CAWd;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,wBAAwB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,GACpD,cAAc,CAYhB;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,wBAAwB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,GACpD,mBAAmB,CAWrB;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAChD,mBAAmB,CAWrB;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,wBAAwB,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,GAC1D,mBAAmB,CAYrB;AAED;;oDAEoD;AACpD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,SAAS,qBAAqB,EAAE,GACtC,gBAAgB,CA2DlB;AAED,wBAAgB,cAAc,CAC5B,GAAG,EAAE,wBAAwB,GAC5B,gBAAgB,CAElB;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,wBAAwB,GAAG,aAAa,CA4BzE;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,wBAAwB,GAC5B,mBAAmB,CA8FrB"}