thehood 0.1.0-preview.0

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 (274) hide show
  1. package/CODE_OF_CONDUCT.md +21 -0
  2. package/CONTRIBUTING.md +58 -0
  3. package/LICENSE +21 -0
  4. package/PRIVACY.md +49 -0
  5. package/README.md +264 -0
  6. package/SECURITY.md +31 -0
  7. package/dist/bridges/chatgptWebBridge.d.ts +2 -0
  8. package/dist/bridges/chatgptWebBridge.js +981 -0
  9. package/dist/bridges/chatgptWebBridge.js.map +1 -0
  10. package/dist/cli/args.d.ts +9 -0
  11. package/dist/cli/args.js +82 -0
  12. package/dist/cli/args.js.map +1 -0
  13. package/dist/cli/format.d.ts +56 -0
  14. package/dist/cli/format.js +752 -0
  15. package/dist/cli/format.js.map +1 -0
  16. package/dist/cli/main.d.ts +2 -0
  17. package/dist/cli/main.js +996 -0
  18. package/dist/cli/main.js.map +1 -0
  19. package/dist/cli/mcpConfig.d.ts +36 -0
  20. package/dist/cli/mcpConfig.js +98 -0
  21. package/dist/cli/mcpConfig.js.map +1 -0
  22. package/dist/index.d.ts +37 -0
  23. package/dist/index.js +38 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/mcp/protocol.d.ts +44 -0
  26. package/dist/mcp/protocol.js +33 -0
  27. package/dist/mcp/protocol.js.map +1 -0
  28. package/dist/mcp/server.d.ts +1 -0
  29. package/dist/mcp/server.js +106 -0
  30. package/dist/mcp/server.js.map +1 -0
  31. package/dist/mcp/tools.d.ts +10 -0
  32. package/dist/mcp/tools.js +2200 -0
  33. package/dist/mcp/tools.js.map +1 -0
  34. package/dist/mcp/validation.d.ts +8 -0
  35. package/dist/mcp/validation.js +67 -0
  36. package/dist/mcp/validation.js.map +1 -0
  37. package/dist/providers/chatgptWeb.d.ts +2 -0
  38. package/dist/providers/chatgptWeb.js +26 -0
  39. package/dist/providers/chatgptWeb.js.map +1 -0
  40. package/dist/providers/claudeCode.d.ts +4 -0
  41. package/dist/providers/claudeCode.js +32 -0
  42. package/dist/providers/claudeCode.js.map +1 -0
  43. package/dist/providers/codexCli.d.ts +6 -0
  44. package/dist/providers/codexCli.js +25 -0
  45. package/dist/providers/codexCli.js.map +1 -0
  46. package/dist/providers/codexCliModels.d.ts +23 -0
  47. package/dist/providers/codexCliModels.js +147 -0
  48. package/dist/providers/codexCliModels.js.map +1 -0
  49. package/dist/providers/localCommand.d.ts +26 -0
  50. package/dist/providers/localCommand.js +614 -0
  51. package/dist/providers/localCommand.js.map +1 -0
  52. package/dist/providers/markdownPayload.d.ts +7 -0
  53. package/dist/providers/markdownPayload.js +29 -0
  54. package/dist/providers/markdownPayload.js.map +1 -0
  55. package/dist/providers/responseSchema.d.ts +3 -0
  56. package/dist/providers/responseSchema.js +187 -0
  57. package/dist/providers/responseSchema.js.map +1 -0
  58. package/dist/providers/router.d.ts +3 -0
  59. package/dist/providers/router.js +21 -0
  60. package/dist/providers/router.js.map +1 -0
  61. package/dist/providers/stub.d.ts +2 -0
  62. package/dist/providers/stub.js +177 -0
  63. package/dist/providers/stub.js.map +1 -0
  64. package/dist/providers/types.d.ts +37 -0
  65. package/dist/providers/types.js +2 -0
  66. package/dist/providers/types.js.map +1 -0
  67. package/dist/runtime/agentBoard.d.ts +79 -0
  68. package/dist/runtime/agentBoard.js +166 -0
  69. package/dist/runtime/agentBoard.js.map +1 -0
  70. package/dist/runtime/agentBoardArtifact.d.ts +9 -0
  71. package/dist/runtime/agentBoardArtifact.js +171 -0
  72. package/dist/runtime/agentBoardArtifact.js.map +1 -0
  73. package/dist/runtime/agentRunner.d.ts +17 -0
  74. package/dist/runtime/agentRunner.js +92 -0
  75. package/dist/runtime/agentRunner.js.map +1 -0
  76. package/dist/runtime/approvalInbox.d.ts +54 -0
  77. package/dist/runtime/approvalInbox.js +143 -0
  78. package/dist/runtime/approvalInbox.js.map +1 -0
  79. package/dist/runtime/approvalPolicy.d.ts +11 -0
  80. package/dist/runtime/approvalPolicy.js +58 -0
  81. package/dist/runtime/approvalPolicy.js.map +1 -0
  82. package/dist/runtime/artifacts.d.ts +23 -0
  83. package/dist/runtime/artifacts.js +48 -0
  84. package/dist/runtime/artifacts.js.map +1 -0
  85. package/dist/runtime/browserManager.d.ts +37 -0
  86. package/dist/runtime/browserManager.js +356 -0
  87. package/dist/runtime/browserManager.js.map +1 -0
  88. package/dist/runtime/canonicalMemory.d.ts +23 -0
  89. package/dist/runtime/canonicalMemory.js +134 -0
  90. package/dist/runtime/canonicalMemory.js.map +1 -0
  91. package/dist/runtime/chatGptPageReadiness.d.ts +16 -0
  92. package/dist/runtime/chatGptPageReadiness.js +74 -0
  93. package/dist/runtime/chatGptPageReadiness.js.map +1 -0
  94. package/dist/runtime/commandRunner.d.ts +18 -0
  95. package/dist/runtime/commandRunner.js +115 -0
  96. package/dist/runtime/commandRunner.js.map +1 -0
  97. package/dist/runtime/commandSafety.d.ts +7 -0
  98. package/dist/runtime/commandSafety.js +61 -0
  99. package/dist/runtime/commandSafety.js.map +1 -0
  100. package/dist/runtime/config.d.ts +10 -0
  101. package/dist/runtime/config.js +107 -0
  102. package/dist/runtime/config.js.map +1 -0
  103. package/dist/runtime/crewLanes.d.ts +2 -0
  104. package/dist/runtime/crewLanes.js +123 -0
  105. package/dist/runtime/crewLanes.js.map +1 -0
  106. package/dist/runtime/criticPolicy.d.ts +17 -0
  107. package/dist/runtime/criticPolicy.js +50 -0
  108. package/dist/runtime/criticPolicy.js.map +1 -0
  109. package/dist/runtime/defaults.d.ts +5 -0
  110. package/dist/runtime/defaults.js +100 -0
  111. package/dist/runtime/defaults.js.map +1 -0
  112. package/dist/runtime/directives.d.ts +3 -0
  113. package/dist/runtime/directives.js +218 -0
  114. package/dist/runtime/directives.js.map +1 -0
  115. package/dist/runtime/doctor.d.ts +36 -0
  116. package/dist/runtime/doctor.js +185 -0
  117. package/dist/runtime/doctor.js.map +1 -0
  118. package/dist/runtime/errors.d.ts +20 -0
  119. package/dist/runtime/errors.js +41 -0
  120. package/dist/runtime/errors.js.map +1 -0
  121. package/dist/runtime/externalTransfer.d.ts +20 -0
  122. package/dist/runtime/externalTransfer.js +156 -0
  123. package/dist/runtime/externalTransfer.js.map +1 -0
  124. package/dist/runtime/fanout.d.ts +64 -0
  125. package/dist/runtime/fanout.js +263 -0
  126. package/dist/runtime/fanout.js.map +1 -0
  127. package/dist/runtime/gitEvidence.d.ts +10 -0
  128. package/dist/runtime/gitEvidence.js +80 -0
  129. package/dist/runtime/gitEvidence.js.map +1 -0
  130. package/dist/runtime/handoffs.d.ts +32 -0
  131. package/dist/runtime/handoffs.js +100 -0
  132. package/dist/runtime/handoffs.js.map +1 -0
  133. package/dist/runtime/ids.d.ts +2 -0
  134. package/dist/runtime/ids.js +4 -0
  135. package/dist/runtime/ids.js.map +1 -0
  136. package/dist/runtime/localStateIgnore.d.ts +9 -0
  137. package/dist/runtime/localStateIgnore.js +98 -0
  138. package/dist/runtime/localStateIgnore.js.map +1 -0
  139. package/dist/runtime/loop.d.ts +14 -0
  140. package/dist/runtime/loop.js +1863 -0
  141. package/dist/runtime/loop.js.map +1 -0
  142. package/dist/runtime/loopRecommendation.d.ts +109 -0
  143. package/dist/runtime/loopRecommendation.js +566 -0
  144. package/dist/runtime/loopRecommendation.js.map +1 -0
  145. package/dist/runtime/loopResponsibilities.d.ts +2 -0
  146. package/dist/runtime/loopResponsibilities.js +395 -0
  147. package/dist/runtime/loopResponsibilities.js.map +1 -0
  148. package/dist/runtime/loopRunner.d.ts +28 -0
  149. package/dist/runtime/loopRunner.js +81 -0
  150. package/dist/runtime/loopRunner.js.map +1 -0
  151. package/dist/runtime/operatorNextActions.d.ts +2 -0
  152. package/dist/runtime/operatorNextActions.js +344 -0
  153. package/dist/runtime/operatorNextActions.js.map +1 -0
  154. package/dist/runtime/paths.d.ts +9 -0
  155. package/dist/runtime/paths.js +14 -0
  156. package/dist/runtime/paths.js.map +1 -0
  157. package/dist/runtime/permissions.d.ts +9 -0
  158. package/dist/runtime/permissions.js +73 -0
  159. package/dist/runtime/permissions.js.map +1 -0
  160. package/dist/runtime/progressPacket.d.ts +12 -0
  161. package/dist/runtime/progressPacket.js +512 -0
  162. package/dist/runtime/progressPacket.js.map +1 -0
  163. package/dist/runtime/protectedPaths.d.ts +6 -0
  164. package/dist/runtime/protectedPaths.js +48 -0
  165. package/dist/runtime/protectedPaths.js.map +1 -0
  166. package/dist/runtime/providers.d.ts +13 -0
  167. package/dist/runtime/providers.js +60 -0
  168. package/dist/runtime/providers.js.map +1 -0
  169. package/dist/runtime/reconciliation.d.ts +17 -0
  170. package/dist/runtime/reconciliation.js +283 -0
  171. package/dist/runtime/reconciliation.js.map +1 -0
  172. package/dist/runtime/redaction.d.ts +1 -0
  173. package/dist/runtime/redaction.js +5 -0
  174. package/dist/runtime/redaction.js.map +1 -0
  175. package/dist/runtime/remoteRepoContext.d.ts +77 -0
  176. package/dist/runtime/remoteRepoContext.js +316 -0
  177. package/dist/runtime/remoteRepoContext.js.map +1 -0
  178. package/dist/runtime/repoContext.d.ts +50 -0
  179. package/dist/runtime/repoContext.js +399 -0
  180. package/dist/runtime/repoContext.js.map +1 -0
  181. package/dist/runtime/repoGateway.d.ts +64 -0
  182. package/dist/runtime/repoGateway.js +308 -0
  183. package/dist/runtime/repoGateway.js.map +1 -0
  184. package/dist/runtime/responseContracts.d.ts +3 -0
  185. package/dist/runtime/responseContracts.js +86 -0
  186. package/dist/runtime/responseContracts.js.map +1 -0
  187. package/dist/runtime/reviewLanes.d.ts +2 -0
  188. package/dist/runtime/reviewLanes.js +343 -0
  189. package/dist/runtime/reviewLanes.js.map +1 -0
  190. package/dist/runtime/reviewRouting.d.ts +51 -0
  191. package/dist/runtime/reviewRouting.js +152 -0
  192. package/dist/runtime/reviewRouting.js.map +1 -0
  193. package/dist/runtime/revisionPacket.d.ts +38 -0
  194. package/dist/runtime/revisionPacket.js +144 -0
  195. package/dist/runtime/revisionPacket.js.map +1 -0
  196. package/dist/runtime/revisionTrail.d.ts +2 -0
  197. package/dist/runtime/revisionTrail.js +162 -0
  198. package/dist/runtime/revisionTrail.js.map +1 -0
  199. package/dist/runtime/role-assignment.d.ts +4 -0
  200. package/dist/runtime/role-assignment.js +21 -0
  201. package/dist/runtime/role-assignment.js.map +1 -0
  202. package/dist/runtime/roleRoster.d.ts +28 -0
  203. package/dist/runtime/roleRoster.js +96 -0
  204. package/dist/runtime/roleRoster.js.map +1 -0
  205. package/dist/runtime/runInsights.d.ts +121 -0
  206. package/dist/runtime/runInsights.js +305 -0
  207. package/dist/runtime/runInsights.js.map +1 -0
  208. package/dist/runtime/runMonitor.d.ts +33 -0
  209. package/dist/runtime/runMonitor.js +143 -0
  210. package/dist/runtime/runMonitor.js.map +1 -0
  211. package/dist/runtime/runtime.d.ts +15 -0
  212. package/dist/runtime/runtime.js +199 -0
  213. package/dist/runtime/runtime.js.map +1 -0
  214. package/dist/runtime/runtimeInfo.d.ts +9 -0
  215. package/dist/runtime/runtimeInfo.js +76 -0
  216. package/dist/runtime/runtimeInfo.js.map +1 -0
  217. package/dist/runtime/store.d.ts +4 -0
  218. package/dist/runtime/store.js +48 -0
  219. package/dist/runtime/store.js.map +1 -0
  220. package/dist/runtime/summons.d.ts +25 -0
  221. package/dist/runtime/summons.js +403 -0
  222. package/dist/runtime/summons.js.map +1 -0
  223. package/dist/runtime/teamPresets.d.ts +14 -0
  224. package/dist/runtime/teamPresets.js +153 -0
  225. package/dist/runtime/teamPresets.js.map +1 -0
  226. package/dist/runtime/types.d.ts +505 -0
  227. package/dist/runtime/types.js +28 -0
  228. package/dist/runtime/types.js.map +1 -0
  229. package/dist/runtime/validationCommands.d.ts +18 -0
  230. package/dist/runtime/validationCommands.js +106 -0
  231. package/dist/runtime/validationCommands.js.map +1 -0
  232. package/dist/tui/dashboard.d.ts +41 -0
  233. package/dist/tui/dashboard.js +1115 -0
  234. package/dist/tui/dashboard.js.map +1 -0
  235. package/docs/ARCHITECTURE.md +277 -0
  236. package/docs/CLI_SPEC.md +396 -0
  237. package/docs/CODEX_SETUP.md +288 -0
  238. package/docs/COMPLETION_CONTRACT.md +52 -0
  239. package/docs/CONTRIBUTOR_GUIDE.md +70 -0
  240. package/docs/DEMO.md +62 -0
  241. package/docs/GLOSSARY.md +46 -0
  242. package/docs/GOAL_LOOP_SCHEDULE.md +50 -0
  243. package/docs/KNOWN_LIMITATIONS.md +29 -0
  244. package/docs/LICENSING.md +21 -0
  245. package/docs/LOOP_RECIPES.md +290 -0
  246. package/docs/LOOP_SELECTION_UX.md +118 -0
  247. package/docs/MCP_SPEC.md +689 -0
  248. package/docs/MEMORY_AND_RECONCILIATION.md +222 -0
  249. package/docs/NPM_PUBLISHING.md +51 -0
  250. package/docs/OPEN_DECISIONS.md +81 -0
  251. package/docs/PROMPT_SCHEMAS.md +411 -0
  252. package/docs/PROVIDER_ADAPTERS.md +323 -0
  253. package/docs/PROVIDER_MATRIX.md +21 -0
  254. package/docs/PUBLIC_REPO_READINESS.md +49 -0
  255. package/docs/RESEARCH_NOTES.md +92 -0
  256. package/docs/ROADMAP.md +94 -0
  257. package/docs/ROLE_CONTRACTS.md +252 -0
  258. package/docs/RUNTIME_LOOP.md +240 -0
  259. package/docs/SECURITY_AND_PRIVACY.md +161 -0
  260. package/docs/TESTING_AND_VERIFICATION.md +180 -0
  261. package/docs/TRUST_MODEL.md +65 -0
  262. package/docs/decisions/0001-runtime-first-cli-and-mcp.md +23 -0
  263. package/docs/decisions/0002-provider-neutral-role-mapping.md +43 -0
  264. package/docs/decisions/0003-separate-implementation-and-verification.md +27 -0
  265. package/docs/product/README.md +14 -0
  266. package/docs/product/model-selection.md +88 -0
  267. package/docs/product/positioning.md +37 -0
  268. package/docs/product/pro-usage-modes.md +70 -0
  269. package/docs/product/roadmap.md +57 -0
  270. package/docs/product/role-policy.md +89 -0
  271. package/docs/product/runtime-invariants.md +44 -0
  272. package/docs/release/v0.1.0-preview.0.md +48 -0
  273. package/examples/stub-demo/README.md +25 -0
  274. package/package.json +55 -0
@@ -0,0 +1,29 @@
1
+ export const agentMarkdownField = "markdown";
2
+ export const agentMarkdownTruncatedField = "markdownTruncated";
3
+ export const agentMarkdownCharLengthField = "markdownCharLength";
4
+ export const agentMarkdownFieldDescription = "Human-facing markdown for plans, reports, reviews, rationale, or other narrative content. Keep mechanical control fields outside this markdown.";
5
+ export const extractAgentMarkdown = (payload) => {
6
+ const value = payload?.[agentMarkdownField];
7
+ return typeof value === "string" && value.trim().length > 0 ? value : undefined;
8
+ };
9
+ const isJsonObject = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
10
+ const boundMarkdownField = (payload, maxChars) => {
11
+ const markdown = payload[agentMarkdownField];
12
+ if (typeof markdown !== "string" || markdown.length <= maxChars) {
13
+ return;
14
+ }
15
+ payload[agentMarkdownField] = markdown.slice(0, maxChars);
16
+ payload[agentMarkdownTruncatedField] = true;
17
+ payload[agentMarkdownCharLengthField] = markdown.length;
18
+ };
19
+ export const boundAgentMarkdownPayloads = (data, maxChars) => {
20
+ const bounded = JSON.parse(JSON.stringify(data));
21
+ boundMarkdownField(bounded, maxChars);
22
+ for (const value of Object.values(bounded)) {
23
+ if (isJsonObject(value)) {
24
+ boundMarkdownField(value, maxChars);
25
+ }
26
+ }
27
+ return bounded;
28
+ };
29
+ //# sourceMappingURL=markdownPayload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdownPayload.js","sourceRoot":"","sources":["../../src/providers/markdownPayload.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAC;AAC7C,MAAM,CAAC,MAAM,2BAA2B,GAAG,mBAAmB,CAAC;AAC/D,MAAM,CAAC,MAAM,4BAA4B,GAAG,oBAAoB,CAAC;AAEjE,MAAM,CAAC,MAAM,6BAA6B,GACxC,iJAAiJ,CAAC;AAEpJ,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,OAA+B,EAAsB,EAAE;IAC1F,MAAM,KAAK,GAAG,OAAO,EAAE,CAAC,kBAAkB,CAAC,CAAC;IAE5C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAClF,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,KAAc,EAAuB,EAAE,CAC3D,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAEvE,MAAM,kBAAkB,GAAG,CAAC,OAAmB,EAAE,QAAgB,EAAQ,EAAE;IACzE,MAAM,QAAQ,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAE7C,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;QAChE,OAAO;IACT,CAAC;IAED,OAAO,CAAC,kBAAkB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC1D,OAAO,CAAC,2BAA2B,CAAC,GAAG,IAAI,CAAC;IAC5C,OAAO,CAAC,4BAA4B,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,IAAgB,EAAE,QAAgB,EAAc,EAAE;IAC3F,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAe,CAAC;IAE/D,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAEtC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3C,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { AgentRequest } from "./types.js";
2
+ import type { JsonObject } from "../runtime/types.js";
3
+ export declare const buildAgentResponseSchema: (request: AgentRequest) => JsonObject;
@@ -0,0 +1,187 @@
1
+ import { agentMarkdownField, agentMarkdownFieldDescription } from "./markdownPayload.js";
2
+ const nullableStringSchema = () => ({
3
+ type: ["string", "null"]
4
+ });
5
+ const nullableBooleanSchema = () => ({
6
+ type: ["boolean", "null"]
7
+ });
8
+ const nullableStringArraySchema = () => ({
9
+ type: ["array", "null"],
10
+ items: {
11
+ type: "string"
12
+ }
13
+ });
14
+ const basePayloadSchema = () => ({
15
+ type: "object",
16
+ additionalProperties: false
17
+ });
18
+ const withDirectiveAckSchema = (request, schema) => {
19
+ const required = Array.isArray(schema.required) ? schema.required.filter((value) => typeof value === "string") : [];
20
+ const properties = schema.properties !== null && typeof schema.properties === "object" && !Array.isArray(schema.properties)
21
+ ? schema.properties
22
+ : {};
23
+ const finalProperties = {
24
+ ...properties,
25
+ [agentMarkdownField]: {
26
+ type: ["string", "null"],
27
+ description: agentMarkdownFieldDescription
28
+ },
29
+ [request.directive.directiveAck.responseField]: {
30
+ type: "object",
31
+ additionalProperties: false,
32
+ required: ["runId", "nonce", "responseField"],
33
+ properties: {
34
+ runId: {
35
+ type: "string",
36
+ enum: [request.directive.directiveAck.runId]
37
+ },
38
+ nonce: {
39
+ type: "string",
40
+ enum: [request.directive.directiveAck.nonce]
41
+ },
42
+ responseField: {
43
+ type: "string",
44
+ enum: [request.directive.directiveAck.responseField]
45
+ }
46
+ }
47
+ }
48
+ };
49
+ return {
50
+ ...schema,
51
+ required: [...new Set([...required, ...Object.keys(finalProperties)])],
52
+ properties: finalProperties
53
+ };
54
+ };
55
+ const payloadSchemaForRole = (request) => {
56
+ const schema = (() => {
57
+ switch (request.role) {
58
+ case "orchestrator":
59
+ case "planner":
60
+ return {
61
+ ...basePayloadSchema(),
62
+ required: ["action", "reason"],
63
+ properties: {
64
+ action: {
65
+ type: "string",
66
+ enum: ["delegate", "verify", "critique", "request_approval", "revise_plan", "complete", "abort"]
67
+ },
68
+ reason: {
69
+ type: "string"
70
+ },
71
+ delegateTo: {
72
+ type: ["string", "null"],
73
+ enum: ["orchestrator", "planner", "implementer", "qa", "verifier", "critic", null]
74
+ },
75
+ nextRole: {
76
+ type: ["string", "null"],
77
+ enum: ["orchestrator", "planner", "implementer", "qa", "verifier", "critic", null]
78
+ },
79
+ requiresMoreEvidence: nullableBooleanSchema(),
80
+ sliceName: nullableStringSchema(),
81
+ targetPaths: nullableStringArraySchema(),
82
+ requestedPaths: nullableStringArraySchema(),
83
+ evidenceRefs: nullableStringArraySchema(),
84
+ artifactRefs: nullableStringArraySchema(),
85
+ callCritic: nullableBooleanSchema(),
86
+ reasonCode: nullableStringSchema(),
87
+ sourceRoles: nullableStringArraySchema(),
88
+ acceptanceCriteria: nullableStringArraySchema()
89
+ }
90
+ };
91
+ case "implementer":
92
+ return {
93
+ ...basePayloadSchema(),
94
+ required: ["status"],
95
+ properties: {
96
+ status: {
97
+ type: "string",
98
+ enum: ["changed", "no_change", "blocked", "failed"]
99
+ },
100
+ changedFiles: nullableStringArraySchema(),
101
+ commandsRun: nullableStringArraySchema(),
102
+ unresolvedRisks: nullableStringArraySchema(),
103
+ evidenceRefs: nullableStringArraySchema()
104
+ }
105
+ };
106
+ case "qa":
107
+ return {
108
+ ...basePayloadSchema(),
109
+ required: ["verdict", "summary"],
110
+ properties: {
111
+ verdict: {
112
+ type: "string",
113
+ enum: ["pass", "needs_revision", "needs_more_evidence", "blocked"]
114
+ },
115
+ summary: {
116
+ type: "string"
117
+ },
118
+ suggestedCommands: nullableStringArraySchema(),
119
+ risks: nullableStringArraySchema(),
120
+ evidenceRefs: nullableStringArraySchema()
121
+ }
122
+ };
123
+ case "verifier":
124
+ return {
125
+ ...basePayloadSchema(),
126
+ required: ["verdict", "summary"],
127
+ properties: {
128
+ verdict: {
129
+ type: "string",
130
+ enum: ["approve", "revise", "abort", "ask_user"]
131
+ },
132
+ summary: {
133
+ type: "string"
134
+ },
135
+ failedCriteria: nullableStringArraySchema(),
136
+ risks: nullableStringArraySchema(),
137
+ nextAction: nullableStringSchema(),
138
+ evidenceRefs: nullableStringArraySchema()
139
+ }
140
+ };
141
+ case "critic":
142
+ return {
143
+ ...basePayloadSchema(),
144
+ required: ["verdict"],
145
+ properties: {
146
+ verdict: {
147
+ type: "string",
148
+ enum: ["acceptable", "needs_revision", "unsafe", "unclear"]
149
+ },
150
+ blockingConcerns: nullableStringArraySchema(),
151
+ nonBlockingConcerns: nullableStringArraySchema(),
152
+ risks: nullableStringArraySchema(),
153
+ evidenceRefs: nullableStringArraySchema()
154
+ }
155
+ };
156
+ default:
157
+ return basePayloadSchema();
158
+ }
159
+ })();
160
+ return withDirectiveAckSchema(request, schema);
161
+ };
162
+ export const buildAgentResponseSchema = (request) => {
163
+ const requiredDataKey = request.directive.outputContract.requiredDataKey;
164
+ return {
165
+ type: "object",
166
+ additionalProperties: false,
167
+ required: ["status", "summary", "data"],
168
+ properties: {
169
+ status: {
170
+ type: "string",
171
+ enum: ["ok", "blocked", "failed"]
172
+ },
173
+ summary: {
174
+ type: "string"
175
+ },
176
+ data: {
177
+ type: "object",
178
+ additionalProperties: false,
179
+ required: [requiredDataKey],
180
+ properties: {
181
+ [requiredDataKey]: payloadSchemaForRole(request)
182
+ }
183
+ }
184
+ }
185
+ };
186
+ };
187
+ //# sourceMappingURL=responseSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responseSchema.js","sourceRoot":"","sources":["../../src/providers/responseSchema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { RoleAssignment } from "../runtime/types.js";
2
+ import type { ProviderAdapter } from "./types.js";
3
+ export declare const getProviderAdapter: (assignment: RoleAssignment) => ProviderAdapter;
@@ -0,0 +1,21 @@
1
+ import { ProviderUnavailableError } from "../runtime/errors.js";
2
+ import { chatGptWebProvider } from "./chatgptWeb.js";
3
+ import { claudeCodeProvider } from "./claudeCode.js";
4
+ import { codexCliProvider } from "./codexCli.js";
5
+ import { stubProvider } from "./stub.js";
6
+ export const getProviderAdapter = (assignment) => {
7
+ if (assignment.provider === stubProvider.id) {
8
+ return stubProvider;
9
+ }
10
+ if (assignment.provider === chatGptWebProvider.id) {
11
+ return chatGptWebProvider;
12
+ }
13
+ if (assignment.provider === codexCliProvider.id) {
14
+ return codexCliProvider;
15
+ }
16
+ if (assignment.provider === claudeCodeProvider.id) {
17
+ return claudeCodeProvider;
18
+ }
19
+ throw new ProviderUnavailableError(`Provider "${assignment.provider}" is not implemented yet. Use stub:<role>, chatgpt-web:chatgpt-pro, codex-cli:<model>, or claude-code:<model>.`);
20
+ };
21
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/providers/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGzC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,UAA0B,EAAmB,EAAE;IAChF,IAAI,UAAU,CAAC,QAAQ,KAAK,YAAY,CAAC,EAAE,EAAE,CAAC;QAC5C,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,IAAI,UAAU,CAAC,QAAQ,KAAK,kBAAkB,CAAC,EAAE,EAAE,CAAC;QAClD,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,IAAI,UAAU,CAAC,QAAQ,KAAK,gBAAgB,CAAC,EAAE,EAAE,CAAC;QAChD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,IAAI,UAAU,CAAC,QAAQ,KAAK,kBAAkB,CAAC,EAAE,EAAE,CAAC;QAClD,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,MAAM,IAAI,wBAAwB,CAChC,aAAa,UAAU,CAAC,QAAQ,gHAAgH,CACjJ,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ProviderAdapter } from "./types.js";
2
+ export declare const stubProvider: ProviderAdapter;
@@ -0,0 +1,177 @@
1
+ const response = (summary, data) => ({
2
+ status: "ok",
3
+ summary,
4
+ data
5
+ });
6
+ const hasRepoContext = (request) => request.context.repoContext !== undefined || request.context.repoContextArtifact !== undefined;
7
+ const shouldExerciseRepoContext = (request) => request.run.mode === "plan" && request.run.userGoal.includes("repo-context-smoke");
8
+ const shouldExerciseRoleDelegate = (request) => request.run.mode === "plan" && request.run.userGoal.includes("role-delegate-smoke");
9
+ const shouldExercisePlannerDelegate = (request) => request.run.mode === "plan" && request.run.userGoal.includes("planner-delegate-smoke");
10
+ const isJsonObject = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
11
+ const hasRevisionPacket = (request) => isJsonObject(request.context.latestRevisionPacket);
12
+ const shouldExerciseQaRevisionLoop = (request) => request.run.mode === "implement" && request.run.userGoal.includes("qa-revision-loop-smoke");
13
+ const shouldExerciseVerifierRevisionLoop = (request) => request.run.mode === "implement" && request.run.userGoal.includes("verifier-revision-loop-smoke");
14
+ const orchestratorResponse = (request) => {
15
+ if (shouldExerciseRepoContext(request) && !hasRepoContext(request)) {
16
+ return response("Stub orchestrator requested deterministic repo context.", {
17
+ decision: {
18
+ action: "delegate",
19
+ reason: "Stub provider is exercising repo context capture before planning.",
20
+ delegate: {
21
+ role: "repo_reader",
22
+ task: "Capture bounded repository context for planning."
23
+ }
24
+ }
25
+ });
26
+ }
27
+ if (shouldExerciseRoleDelegate(request)) {
28
+ return response("Stub orchestrator delegated a ready implementation slice.", {
29
+ decision: {
30
+ action: "delegate",
31
+ reason: "Planning is complete; this slice is ready for implementation.",
32
+ delegateTo: "implementer",
33
+ sliceName: "role-delegate-smoke-ready-slice",
34
+ requiresMoreEvidence: false,
35
+ requiresUserApproval: false
36
+ },
37
+ acceptanceCriteria: [
38
+ "Plan runs complete after a ready implementer handoff.",
39
+ "Repo context is not recaptured for implementation handoffs."
40
+ ]
41
+ });
42
+ }
43
+ if (request.role === "orchestrator" && shouldExercisePlannerDelegate(request)) {
44
+ return response("Stub orchestrator delegated a ready planning pass.", {
45
+ decision: {
46
+ action: "delegate",
47
+ reason: "Planner should synthesize the roadmap from existing repo context.",
48
+ delegateTo: "planner",
49
+ sliceName: "planner-delegate-smoke-ready-slice",
50
+ requiresMoreEvidence: false,
51
+ requiresUserApproval: false
52
+ },
53
+ acceptanceCriteria: [
54
+ "Read-only planner handoffs invoke the configured planner role.",
55
+ "Planner handoffs are not treated as repeated repo-context delegation."
56
+ ]
57
+ });
58
+ }
59
+ return response("Stub orchestrator created a deterministic delegation plan.", {
60
+ decision: {
61
+ action: request.run.mode === "implement" ? "delegate" : "complete",
62
+ reason: hasRepoContext(request)
63
+ ? "Stub provider received runtime repo context and completed planning."
64
+ : "Stub provider is exercising the loop without external model calls.",
65
+ nextRole: request.run.mode === "implement" ? "implementer" : null
66
+ },
67
+ plan: [
68
+ "Capture baseline evidence.",
69
+ "Run scoped implementer.",
70
+ "Capture post-work evidence.",
71
+ "Ask independent verifier for a verdict."
72
+ ],
73
+ acceptanceCriteria: [
74
+ "Runtime state advances without bypassing approval gates.",
75
+ "Verifier remains separate from implementer.",
76
+ "Evidence artifacts are available for inspection."
77
+ ]
78
+ });
79
+ };
80
+ const researcherResponse = () => response("Stub researcher returned deterministic findings.", {
81
+ researchResult: {
82
+ summary: "Stub research completed without external calls.",
83
+ findings: [
84
+ "Runtime can dispatch a read-only research role.",
85
+ "Research output is schema-bound before state advances."
86
+ ],
87
+ openQuestions: []
88
+ }
89
+ });
90
+ const implementerResponse = (request) => response(hasRevisionPacket(request)
91
+ ? "Stub implementer handled the runtime revision packet."
92
+ : "Stub implementer performed no file edits.", {
93
+ implementationResult: {
94
+ status: "no_change",
95
+ changedFiles: [],
96
+ commandsRun: [],
97
+ unresolvedRisks: []
98
+ }
99
+ });
100
+ const qaResponse = (request) => {
101
+ if (shouldExerciseQaRevisionLoop(request) && !hasRevisionPacket(request)) {
102
+ return response("Stub QA tester requested a repair loop.", {
103
+ qaResult: {
104
+ verdict: "needs_revision",
105
+ summary: "QA found a deterministic missed-case marker for the repair loop smoke.",
106
+ suggestedCommands: ["npm run smoke:runtime"],
107
+ risks: ["The first pass intentionally needs a repair delegation."]
108
+ }
109
+ });
110
+ }
111
+ return response("Stub QA tester found no missing validation concerns.", {
112
+ qaResult: {
113
+ verdict: "pass",
114
+ summary: "Stub QA tester reviewed available evidence and found no extra concerns.",
115
+ suggestedCommands: [],
116
+ risks: []
117
+ }
118
+ });
119
+ };
120
+ const verifierResponse = (request) => {
121
+ const protectedChangeCount = Number(request.context.protectedChangeCount ?? 0);
122
+ const validationFailureCount = Number(request.context.validationFailureCount ?? 0);
123
+ const exerciseVerifierRevision = shouldExerciseVerifierRevisionLoop(request) && !hasRevisionPacket(request);
124
+ const verdict = exerciseVerifierRevision
125
+ ? "revise"
126
+ : protectedChangeCount > 0 || validationFailureCount > 0 ? "ask_user" : "approve";
127
+ return response(`Stub verifier returned ${verdict}.`, {
128
+ verificationResult: {
129
+ verdict,
130
+ summary: exerciseVerifierRevision
131
+ ? "Verifier found a deterministic repair-loop marker."
132
+ : protectedChangeCount > 0
133
+ ? "Protected files changed; user approval is required."
134
+ : validationFailureCount > 0
135
+ ? "Runtime validation commands failed; user review is required."
136
+ : "No protected changes were detected in runtime evidence.",
137
+ failedCriteria: exerciseVerifierRevision ? ["Repair-loop verifier criterion was not satisfied on first pass."] : [],
138
+ risks: [
139
+ ...(exerciseVerifierRevision ? ["The first verifier pass intentionally needs a repair delegation."] : []),
140
+ ...(protectedChangeCount > 0 ? ["Protected path changes need explicit review."] : []),
141
+ ...(validationFailureCount > 0 ? ["Runtime validation command failures need review."] : [])
142
+ ],
143
+ nextAction: verdict === "approve" ? "complete" : "ask_user"
144
+ }
145
+ });
146
+ };
147
+ export const stubProvider = {
148
+ id: "stub",
149
+ async runAgent(request) {
150
+ switch (request.role) {
151
+ case "orchestrator":
152
+ case "planner":
153
+ return orchestratorResponse(request);
154
+ case "researcher":
155
+ return researcherResponse();
156
+ case "implementer":
157
+ return implementerResponse(request);
158
+ case "qa":
159
+ return qaResponse(request);
160
+ case "verifier":
161
+ return verifierResponse(request);
162
+ case "critic":
163
+ return response("Stub critic found no blocking concerns.", {
164
+ critiqueResult: {
165
+ verdict: "acceptable",
166
+ blockingConcerns: [],
167
+ nonBlockingConcerns: []
168
+ }
169
+ });
170
+ default:
171
+ return response(`Stub ${request.role} completed.`, {
172
+ role: request.role
173
+ });
174
+ }
175
+ }
176
+ };
177
+ //# sourceMappingURL=stub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stub.js","sourceRoot":"","sources":["../../src/providers/stub.ts"],"names":[],"mappings":"AAEA,MAAM,QAAQ,GAAG,CAAC,OAAe,EAAE,IAA2B,EAAiB,EAAE,CAAC,CAAC;IACjF,MAAM,EAAE,IAAI;IACZ,OAAO;IACP,IAAI;CACL,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,CAAC,OAAqB,EAAW,EAAE,CACxD,OAAO,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,mBAAmB,KAAK,SAAS,CAAC;AAEjG,MAAM,yBAAyB,GAAG,CAAC,OAAqB,EAAW,EAAE,CACnE,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;AAErF,MAAM,0BAA0B,GAAG,CAAC,OAAqB,EAAW,EAAE,CACpE,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;AAEtF,MAAM,6BAA6B,GAAG,CAAC,OAAqB,EAAW,EAAE,CACvE,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;AAEzF,MAAM,YAAY,GAAG,CAAC,KAAc,EAAoC,EAAE,CACxE,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAEvE,MAAM,iBAAiB,GAAG,CAAC,OAAqB,EAAW,EAAE,CAC3D,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAErD,MAAM,4BAA4B,GAAG,CAAC,OAAqB,EAAW,EAAE,CACtE,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;AAE9F,MAAM,kCAAkC,GAAG,CAAC,OAAqB,EAAW,EAAE,CAC5E,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC;AAEpG,MAAM,oBAAoB,GAAG,CAAC,OAAqB,EAAiB,EAAE;IACpE,IAAI,yBAAyB,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;QACnE,OAAO,QAAQ,CAAC,yDAAyD,EAAE;YACzE,QAAQ,EAAE;gBACR,MAAM,EAAE,UAAU;gBAClB,MAAM,EAAE,mEAAmE;gBAC3E,QAAQ,EAAE;oBACR,IAAI,EAAE,aAAa;oBACnB,IAAI,EAAE,kDAAkD;iBACzD;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,0BAA0B,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,OAAO,QAAQ,CAAC,2DAA2D,EAAE;YAC3E,QAAQ,EAAE;gBACR,MAAM,EAAE,UAAU;gBAClB,MAAM,EAAE,+DAA+D;gBACvE,UAAU,EAAE,aAAa;gBACzB,SAAS,EAAE,iCAAiC;gBAC5C,oBAAoB,EAAE,KAAK;gBAC3B,oBAAoB,EAAE,KAAK;aAC5B;YACD,kBAAkB,EAAE;gBAClB,uDAAuD;gBACvD,6DAA6D;aAC9D;SACF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,cAAc,IAAI,6BAA6B,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9E,OAAO,QAAQ,CAAC,oDAAoD,EAAE;YACpE,QAAQ,EAAE;gBACR,MAAM,EAAE,UAAU;gBAClB,MAAM,EAAE,mEAAmE;gBAC3E,UAAU,EAAE,SAAS;gBACrB,SAAS,EAAE,oCAAoC;gBAC/C,oBAAoB,EAAE,KAAK;gBAC3B,oBAAoB,EAAE,KAAK;aAC5B;YACD,kBAAkB,EAAE;gBAClB,gEAAgE;gBAChE,uEAAuE;aACxE;SACF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC,4DAA4D,EAAE;QAC5E,QAAQ,EAAE;YACR,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;YAClE,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC;gBAC7B,CAAC,CAAC,qEAAqE;gBACvE,CAAC,CAAC,oEAAoE;YACxE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI;SAClE;QACD,IAAI,EAAE;YACJ,4BAA4B;YAC5B,yBAAyB;YACzB,6BAA6B;YAC7B,yCAAyC;SAC1C;QACD,kBAAkB,EAAE;YAClB,0DAA0D;YAC1D,6CAA6C;YAC7C,kDAAkD;SACnD;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,GAAkB,EAAE,CAC7C,QAAQ,CAAC,kDAAkD,EAAE;IAC3D,cAAc,EAAE;QACd,OAAO,EAAE,iDAAiD;QAC1D,QAAQ,EAAE;YACR,iDAAiD;YACjD,wDAAwD;SACzD;QACD,aAAa,EAAE,EAAE;KAClB;CACF,CAAC,CAAC;AAEL,MAAM,mBAAmB,GAAG,CAAC,OAAqB,EAAiB,EAAE,CACnE,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC;IACjC,CAAC,CAAC,uDAAuD;IACzD,CAAC,CAAC,2CAA2C,EAAE;IAC/C,oBAAoB,EAAE;QACpB,MAAM,EAAE,WAAW;QACnB,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,EAAE;QACf,eAAe,EAAE,EAAE;KACpB;CACF,CAAC,CAAC;AAEL,MAAM,UAAU,GAAG,CAAC,OAAqB,EAAiB,EAAE;IAC1D,IAAI,4BAA4B,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;QACzE,OAAO,QAAQ,CAAC,yCAAyC,EAAE;YACzD,QAAQ,EAAE;gBACR,OAAO,EAAE,gBAAgB;gBACzB,OAAO,EAAE,wEAAwE;gBACjF,iBAAiB,EAAE,CAAC,uBAAuB,CAAC;gBAC5C,KAAK,EAAE,CAAC,yDAAyD,CAAC;aACnE;SACF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC,sDAAsD,EAAE;QACtE,QAAQ,EAAE;YACR,OAAO,EAAE,MAAM;YACf,OAAO,EAAE,yEAAyE;YAClF,iBAAiB,EAAE,EAAE;YACrB,KAAK,EAAE,EAAE;SACV;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,OAAqB,EAAiB,EAAE;IAChE,MAAM,oBAAoB,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAoB,IAAI,CAAC,CAAC,CAAC;IAC/E,MAAM,sBAAsB,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,sBAAsB,IAAI,CAAC,CAAC,CAAC;IACnF,MAAM,wBAAwB,GAAG,kCAAkC,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC5G,MAAM,OAAO,GAAG,wBAAwB;QACtC,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,oBAAoB,GAAG,CAAC,IAAI,sBAAsB,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAEpF,OAAO,QAAQ,CAAC,0BAA0B,OAAO,GAAG,EAAE;QACpD,kBAAkB,EAAE;YAClB,OAAO;YACP,OAAO,EACL,wBAAwB;gBACtB,CAAC,CAAC,oDAAoD;gBACtD,CAAC,CAAC,oBAAoB,GAAG,CAAC;oBAC1B,CAAC,CAAC,qDAAqD;oBACvD,CAAC,CAAC,sBAAsB,GAAG,CAAC;wBAC1B,CAAC,CAAC,8DAA8D;wBAClE,CAAC,CAAC,yDAAyD;YAC/D,cAAc,EAAE,wBAAwB,CAAC,CAAC,CAAC,CAAC,iEAAiE,CAAC,CAAC,CAAC,CAAC,EAAE;YACnH,KAAK,EAAE;gBACL,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,kEAAkE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzG,GAAG,CAAC,oBAAoB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,8CAA8C,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrF,GAAG,CAAC,sBAAsB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,kDAAkD,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5F;YACD,UAAU,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;SAC5D;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AACF,MAAM,CAAC,MAAM,YAAY,GAAoB;IAC3C,EAAE,EAAE,MAAM;IACV,KAAK,CAAC,QAAQ,CAAC,OAAO;QACpB,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;YACrB,KAAK,cAAc,CAAC;YACpB,KAAK,SAAS;gBACZ,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;YACvC,KAAK,YAAY;gBACf,OAAO,kBAAkB,EAAE,CAAC;YAC9B,KAAK,aAAa;gBAChB,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;YACtC,KAAK,IAAI;gBACP,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;YAC7B,KAAK,UAAU;gBACb,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACnC,KAAK,QAAQ;gBACX,OAAO,QAAQ,CAAC,yCAAyC,EAAE;oBACzD,cAAc,EAAE;wBACd,OAAO,EAAE,YAAY;wBACrB,gBAAgB,EAAE,EAAE;wBACpB,mBAAmB,EAAE,EAAE;qBACxB;iBACF,CAAC,CAAC;YACL;gBACE,OAAO,QAAQ,CAAC,QAAQ,OAAO,CAAC,IAAI,aAAa,EAAE;oBACjD,IAAI,EAAE,OAAO,CAAC,IAAI;iBACnB,CAAC,CAAC;QACP,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,37 @@
1
+ import type { JsonObject, RoleAssignment, RunRecord, RuntimeRole } from "../runtime/types.js";
2
+ import type { RolePermissionProfile } from "../runtime/permissions.js";
3
+ export interface AgentOutputContract {
4
+ schemaVersion: 1;
5
+ name: string;
6
+ requiredDataKey: string;
7
+ }
8
+ export interface AgentDirectiveAck {
9
+ runId: string;
10
+ nonce: string;
11
+ responseField: "thehoodDirectiveAck";
12
+ }
13
+ export interface AgentDirective {
14
+ role: RuntimeRole;
15
+ objective: string;
16
+ instructions: string[];
17
+ toolPermissions: RolePermissionProfile;
18
+ outputContract: AgentOutputContract;
19
+ directiveAck: AgentDirectiveAck;
20
+ variables: JsonObject;
21
+ }
22
+ export interface AgentRequest {
23
+ run: RunRecord;
24
+ role: RuntimeRole;
25
+ assignment: RoleAssignment;
26
+ context: JsonObject;
27
+ directive: AgentDirective;
28
+ }
29
+ export interface AgentResponse {
30
+ status: "ok" | "blocked" | "failed";
31
+ summary: string;
32
+ data: JsonObject;
33
+ }
34
+ export interface ProviderAdapter {
35
+ id: string;
36
+ runAgent(request: AgentRequest): Promise<AgentResponse>;
37
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,79 @@
1
+ import type { RoleRosterItem } from "./roleRoster.js";
2
+ import type { RunInsights } from "./runInsights.js";
3
+ import type { OperatorNextAction, RuntimeRole, RunRecord } from "./types.js";
4
+ export type AgentBoardScope = "repo" | "run";
5
+ export type AgentBoardCardStatus = "active" | "blocked" | "ready" | "satisfied" | "pending" | "skipped" | "advisory" | "unassigned" | "needs_attention";
6
+ export interface AgentBoardCard {
7
+ id: string;
8
+ role: RuntimeRole;
9
+ laneLabel: string;
10
+ title: string;
11
+ assignmentLabel: string;
12
+ assignmentSource: RoleRosterItem["assignmentSource"];
13
+ readiness: RoleRosterItem["state"];
14
+ status: AgentBoardCardStatus;
15
+ authority: RoleRosterItem["authority"];
16
+ readOnly: boolean;
17
+ permissions: RoleRosterItem["permissions"];
18
+ responsibility: string;
19
+ issues: string[];
20
+ provider?: string;
21
+ model?: string;
22
+ run?: {
23
+ runId: string;
24
+ state: RunRecord["state"];
25
+ mode: RunRecord["mode"];
26
+ currentLane?: string;
27
+ laneStatus?: string;
28
+ laneSummary?: string;
29
+ required?: boolean;
30
+ blocking?: boolean;
31
+ canSatisfyGate?: boolean;
32
+ satisfiesRequired?: boolean;
33
+ sidecarOnly?: boolean;
34
+ artifactRefs: string[];
35
+ eventRefs: string[];
36
+ handoffRefs: string[];
37
+ };
38
+ }
39
+ export interface AgentBoardAction {
40
+ action: OperatorNextAction["action"];
41
+ label: string;
42
+ ownerLabel: string;
43
+ role?: RuntimeRole;
44
+ blocking: boolean;
45
+ required: boolean;
46
+ state: string;
47
+ description: string;
48
+ commandHint?: string;
49
+ mcpToolHint?: string;
50
+ tool?: string;
51
+ artifactRefs: string[];
52
+ eventRefs: string[];
53
+ }
54
+ export interface AgentBoard {
55
+ schemaVersion: 1;
56
+ kind: "agent_board";
57
+ scope: AgentBoardScope;
58
+ repoPath: string;
59
+ runId?: string;
60
+ runState?: RunRecord["state"];
61
+ runMode?: RunRecord["mode"];
62
+ summary: {
63
+ total: number;
64
+ ready: number;
65
+ active: number;
66
+ blocked: number;
67
+ unassigned: number;
68
+ needsAttention: number;
69
+ };
70
+ cards: AgentBoardCard[];
71
+ actions: AgentBoardAction[];
72
+ notes: string[];
73
+ }
74
+ export declare const buildAgentBoard: (input: {
75
+ repoPath: string;
76
+ roster: RoleRosterItem[];
77
+ run?: RunRecord;
78
+ insights?: RunInsights;
79
+ }) => AgentBoard;