@cat-factory/agents 0.6.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 (226) hide show
  1. package/LICENSE +21 -0
  2. package/dist/agents/AiAgentExecutor.d.ts +72 -0
  3. package/dist/agents/AiAgentExecutor.d.ts.map +1 -0
  4. package/dist/agents/AiAgentExecutor.js +125 -0
  5. package/dist/agents/AiAgentExecutor.js.map +1 -0
  6. package/dist/agents/acceptance-prompts.d.ts +29 -0
  7. package/dist/agents/acceptance-prompts.d.ts.map +1 -0
  8. package/dist/agents/acceptance-prompts.js +112 -0
  9. package/dist/agents/acceptance-prompts.js.map +1 -0
  10. package/dist/agents/agent-catalog.d.ts +6 -0
  11. package/dist/agents/agent-catalog.d.ts.map +1 -0
  12. package/dist/agents/agent-catalog.js +197 -0
  13. package/dist/agents/agent-catalog.js.map +1 -0
  14. package/dist/agents/agent-configs.d.ts +17 -0
  15. package/dist/agents/agent-configs.d.ts.map +1 -0
  16. package/dist/agents/agent-configs.js +66 -0
  17. package/dist/agents/agent-configs.js.map +1 -0
  18. package/dist/agents/agent-routing.d.ts +57 -0
  19. package/dist/agents/agent-routing.d.ts.map +1 -0
  20. package/dist/agents/agent-routing.js +41 -0
  21. package/dist/agents/agent-routing.js.map +1 -0
  22. package/dist/agents/business-logic-prompts.d.ts +28 -0
  23. package/dist/agents/business-logic-prompts.d.ts.map +1 -0
  24. package/dist/agents/business-logic-prompts.js +96 -0
  25. package/dist/agents/business-logic-prompts.js.map +1 -0
  26. package/dist/agents/catalog.d.ts +6 -0
  27. package/dist/agents/catalog.d.ts.map +1 -0
  28. package/dist/agents/catalog.js +168 -0
  29. package/dist/agents/catalog.js.map +1 -0
  30. package/dist/agents/ci-gate.d.ts +2 -0
  31. package/dist/agents/ci-gate.d.ts.map +1 -0
  32. package/dist/agents/ci-gate.js +33 -0
  33. package/dist/agents/ci-gate.js.map +1 -0
  34. package/dist/agents/companion-prompts.d.ts +4 -0
  35. package/dist/agents/companion-prompts.d.ts.map +1 -0
  36. package/dist/agents/companion-prompts.js +27 -0
  37. package/dist/agents/companion-prompts.js.map +1 -0
  38. package/dist/agents/companions.d.ts +20 -0
  39. package/dist/agents/companions.d.ts.map +1 -0
  40. package/dist/agents/companions.js +38 -0
  41. package/dist/agents/companions.js.map +1 -0
  42. package/dist/agents/kinds/companions.d.ts +20 -0
  43. package/dist/agents/kinds/companions.d.ts.map +1 -0
  44. package/dist/agents/kinds/companions.js +39 -0
  45. package/dist/agents/kinds/companions.js.map +1 -0
  46. package/dist/agents/kinds/configs.d.ts +17 -0
  47. package/dist/agents/kinds/configs.d.ts.map +1 -0
  48. package/dist/agents/kinds/configs.js +66 -0
  49. package/dist/agents/kinds/configs.js.map +1 -0
  50. package/dist/agents/kinds/read-only.d.ts +13 -0
  51. package/dist/agents/kinds/read-only.d.ts.map +1 -0
  52. package/dist/agents/kinds/read-only.js +32 -0
  53. package/dist/agents/kinds/read-only.js.map +1 -0
  54. package/dist/agents/kinds/registry.d.ts +70 -0
  55. package/dist/agents/kinds/registry.d.ts.map +1 -0
  56. package/dist/agents/kinds/registry.js +51 -0
  57. package/dist/agents/kinds/registry.js.map +1 -0
  58. package/dist/agents/kinds/traits.d.ts +60 -0
  59. package/dist/agents/kinds/traits.d.ts.map +1 -0
  60. package/dist/agents/kinds/traits.js +123 -0
  61. package/dist/agents/kinds/traits.js.map +1 -0
  62. package/dist/agents/kinds/versions.d.ts +46 -0
  63. package/dist/agents/kinds/versions.d.ts.map +1 -0
  64. package/dist/agents/kinds/versions.js +22 -0
  65. package/dist/agents/kinds/versions.js.map +1 -0
  66. package/dist/agents/mock-prompts.d.ts +12 -0
  67. package/dist/agents/mock-prompts.d.ts.map +1 -0
  68. package/dist/agents/mock-prompts.js +61 -0
  69. package/dist/agents/mock-prompts.js.map +1 -0
  70. package/dist/agents/prompt-fragments.d.ts +17 -0
  71. package/dist/agents/prompt-fragments.d.ts.map +1 -0
  72. package/dist/agents/prompt-fragments.js +33 -0
  73. package/dist/agents/prompt-fragments.js.map +1 -0
  74. package/dist/agents/prompt-shared.d.ts +7 -0
  75. package/dist/agents/prompt-shared.d.ts.map +1 -0
  76. package/dist/agents/prompt-shared.js +10 -0
  77. package/dist/agents/prompt-shared.js.map +1 -0
  78. package/dist/agents/prompt-versions.d.ts +48 -0
  79. package/dist/agents/prompt-versions.d.ts.map +1 -0
  80. package/dist/agents/prompt-versions.js +55 -0
  81. package/dist/agents/prompt-versions.js.map +1 -0
  82. package/dist/agents/prompts/acceptance.d.ts +29 -0
  83. package/dist/agents/prompts/acceptance.d.ts.map +1 -0
  84. package/dist/agents/prompts/acceptance.js +112 -0
  85. package/dist/agents/prompts/acceptance.js.map +1 -0
  86. package/dist/agents/prompts/business-logic.d.ts +28 -0
  87. package/dist/agents/prompts/business-logic.d.ts.map +1 -0
  88. package/dist/agents/prompts/business-logic.js +98 -0
  89. package/dist/agents/prompts/business-logic.js.map +1 -0
  90. package/dist/agents/prompts/clarity.d.ts +10 -0
  91. package/dist/agents/prompts/clarity.d.ts.map +1 -0
  92. package/dist/agents/prompts/clarity.js +40 -0
  93. package/dist/agents/prompts/clarity.js.map +1 -0
  94. package/dist/agents/prompts/companion.d.ts +4 -0
  95. package/dist/agents/prompts/companion.d.ts.map +1 -0
  96. package/dist/agents/prompts/companion.js +61 -0
  97. package/dist/agents/prompts/companion.js.map +1 -0
  98. package/dist/agents/prompts/delivery-contract.d.ts +2 -0
  99. package/dist/agents/prompts/delivery-contract.d.ts.map +1 -0
  100. package/dist/agents/prompts/delivery-contract.js +33 -0
  101. package/dist/agents/prompts/delivery-contract.js.map +1 -0
  102. package/dist/agents/prompts/mock.d.ts +12 -0
  103. package/dist/agents/prompts/mock.d.ts.map +1 -0
  104. package/dist/agents/prompts/mock.js +61 -0
  105. package/dist/agents/prompts/mock.js.map +1 -0
  106. package/dist/agents/prompts/requirements.d.ts +13 -0
  107. package/dist/agents/prompts/requirements.d.ts.map +1 -0
  108. package/dist/agents/prompts/requirements.js +45 -0
  109. package/dist/agents/prompts/requirements.js.map +1 -0
  110. package/dist/agents/prompts/roles.d.ts +16 -0
  111. package/dist/agents/prompts/roles.d.ts.map +1 -0
  112. package/dist/agents/prompts/roles.js +74 -0
  113. package/dist/agents/prompts/roles.js.map +1 -0
  114. package/dist/agents/prompts/shared.d.ts +19 -0
  115. package/dist/agents/prompts/shared.d.ts.map +1 -0
  116. package/dist/agents/prompts/shared.js +25 -0
  117. package/dist/agents/prompts/shared.js.map +1 -0
  118. package/dist/agents/prompts/standard-templates.generated.d.ts +36 -0
  119. package/dist/agents/prompts/standard-templates.generated.d.ts.map +1 -0
  120. package/dist/agents/prompts/standard-templates.generated.js +122 -0
  121. package/dist/agents/prompts/standard-templates.generated.js.map +1 -0
  122. package/dist/agents/prompts/standard.d.ts +36 -0
  123. package/dist/agents/prompts/standard.d.ts.map +1 -0
  124. package/dist/agents/prompts/standard.js +208 -0
  125. package/dist/agents/prompts/standard.js.map +1 -0
  126. package/dist/agents/prompts/testing.d.ts +12 -0
  127. package/dist/agents/prompts/testing.d.ts.map +1 -0
  128. package/dist/agents/prompts/testing.js +94 -0
  129. package/dist/agents/prompts/testing.js.map +1 -0
  130. package/dist/agents/read-only.d.ts +13 -0
  131. package/dist/agents/read-only.d.ts.map +1 -0
  132. package/dist/agents/read-only.js +29 -0
  133. package/dist/agents/read-only.js.map +1 -0
  134. package/dist/agents/registry.d.ts +70 -0
  135. package/dist/agents/registry.d.ts.map +1 -0
  136. package/dist/agents/registry.js +51 -0
  137. package/dist/agents/registry.js.map +1 -0
  138. package/dist/agents/runtime/executor.d.ts +72 -0
  139. package/dist/agents/runtime/executor.d.ts.map +1 -0
  140. package/dist/agents/runtime/executor.js +125 -0
  141. package/dist/agents/runtime/executor.js.map +1 -0
  142. package/dist/agents/runtime/fragments.d.ts +17 -0
  143. package/dist/agents/runtime/fragments.d.ts.map +1 -0
  144. package/dist/agents/runtime/fragments.js +33 -0
  145. package/dist/agents/runtime/fragments.js.map +1 -0
  146. package/dist/agents/runtime/routing.d.ts +57 -0
  147. package/dist/agents/runtime/routing.d.ts.map +1 -0
  148. package/dist/agents/runtime/routing.js +41 -0
  149. package/dist/agents/runtime/routing.js.map +1 -0
  150. package/dist/agents/runtime/web-search.d.ts +43 -0
  151. package/dist/agents/runtime/web-search.d.ts.map +1 -0
  152. package/dist/agents/runtime/web-search.js +102 -0
  153. package/dist/agents/runtime/web-search.js.map +1 -0
  154. package/dist/agents/standard-prompt-templates.generated.d.ts +36 -0
  155. package/dist/agents/standard-prompt-templates.generated.d.ts.map +1 -0
  156. package/dist/agents/standard-prompt-templates.generated.js +122 -0
  157. package/dist/agents/standard-prompt-templates.generated.js.map +1 -0
  158. package/dist/agents/standard-prompts.d.ts +36 -0
  159. package/dist/agents/standard-prompts.d.ts.map +1 -0
  160. package/dist/agents/standard-prompts.js +202 -0
  161. package/dist/agents/standard-prompts.js.map +1 -0
  162. package/dist/agents/test-prompts.d.ts +12 -0
  163. package/dist/agents/test-prompts.d.ts.map +1 -0
  164. package/dist/agents/test-prompts.js +92 -0
  165. package/dist/agents/test-prompts.js.map +1 -0
  166. package/dist/agents/traits.d.ts +56 -0
  167. package/dist/agents/traits.d.ts.map +1 -0
  168. package/dist/agents/traits.js +100 -0
  169. package/dist/agents/traits.js.map +1 -0
  170. package/dist/agents/web-search.d.ts +43 -0
  171. package/dist/agents/web-search.d.ts.map +1 -0
  172. package/dist/agents/web-search.js +102 -0
  173. package/dist/agents/web-search.js.map +1 -0
  174. package/dist/fragmentLibrary/DeterministicFragmentSelector.d.ts +10 -0
  175. package/dist/fragmentLibrary/DeterministicFragmentSelector.d.ts.map +1 -0
  176. package/dist/fragmentLibrary/DeterministicFragmentSelector.js +12 -0
  177. package/dist/fragmentLibrary/DeterministicFragmentSelector.js.map +1 -0
  178. package/dist/fragmentLibrary/FragmentLibraryService.d.ts +55 -0
  179. package/dist/fragmentLibrary/FragmentLibraryService.d.ts.map +1 -0
  180. package/dist/fragmentLibrary/FragmentLibraryService.js +203 -0
  181. package/dist/fragmentLibrary/FragmentLibraryService.js.map +1 -0
  182. package/dist/fragmentLibrary/FragmentSourceService.d.ts +51 -0
  183. package/dist/fragmentLibrary/FragmentSourceService.d.ts.map +1 -0
  184. package/dist/fragmentLibrary/FragmentSourceService.js +181 -0
  185. package/dist/fragmentLibrary/FragmentSourceService.js.map +1 -0
  186. package/dist/fragmentLibrary/LlmFragmentSelector.d.ts +21 -0
  187. package/dist/fragmentLibrary/LlmFragmentSelector.d.ts.map +1 -0
  188. package/dist/fragmentLibrary/LlmFragmentSelector.js +87 -0
  189. package/dist/fragmentLibrary/LlmFragmentSelector.js.map +1 -0
  190. package/dist/fragmentLibrary/fragment-catalog.d.ts +43 -0
  191. package/dist/fragmentLibrary/fragment-catalog.d.ts.map +1 -0
  192. package/dist/fragmentLibrary/fragment-catalog.js +129 -0
  193. package/dist/fragmentLibrary/fragment-catalog.js.map +1 -0
  194. package/dist/fragmentLibrary/fragment-source.logic.d.ts +34 -0
  195. package/dist/fragmentLibrary/fragment-source.logic.d.ts.map +1 -0
  196. package/dist/fragmentLibrary/fragment-source.logic.js +172 -0
  197. package/dist/fragmentLibrary/fragment-source.logic.js.map +1 -0
  198. package/dist/index.d.ts +30 -0
  199. package/dist/index.d.ts.map +1 -0
  200. package/dist/index.js +43 -0
  201. package/dist/index.js.map +1 -0
  202. package/dist/providers/cache.d.ts +22 -0
  203. package/dist/providers/cache.d.ts.map +1 -0
  204. package/dist/providers/cache.js +64 -0
  205. package/dist/providers/cache.js.map +1 -0
  206. package/dist/providers/endpoints.d.ts +8 -0
  207. package/dist/providers/endpoints.d.ts.map +1 -0
  208. package/dist/providers/endpoints.js +23 -0
  209. package/dist/providers/endpoints.js.map +1 -0
  210. package/dist/providers/index.d.ts +6 -0
  211. package/dist/providers/index.d.ts.map +1 -0
  212. package/dist/providers/index.js +6 -0
  213. package/dist/providers/index.js.map +1 -0
  214. package/dist/providers/instrumented.d.ts +28 -0
  215. package/dist/providers/instrumented.d.ts.map +1 -0
  216. package/dist/providers/instrumented.js +147 -0
  217. package/dist/providers/instrumented.js.map +1 -0
  218. package/dist/providers/registry.d.ts +26 -0
  219. package/dist/providers/registry.d.ts.map +1 -0
  220. package/dist/providers/registry.js +32 -0
  221. package/dist/providers/registry.js.map +1 -0
  222. package/dist/providers/resolvers.d.ts +58 -0
  223. package/dist/providers/resolvers.d.ts.map +1 -0
  224. package/dist/providers/resolvers.js +78 -0
  225. package/dist/providers/resolvers.js.map +1 -0
  226. package/package.json +39 -0
@@ -0,0 +1,20 @@
1
+ import type { AgentKind } from '@cat-factory/kernel';
2
+ export interface CompanionDefinition {
3
+ /** The companion's own agent kind. */
4
+ kind: AgentKind;
5
+ /** Producer kinds this companion may review (allow-list for pipeline placement). */
6
+ targets: AgentKind[];
7
+ /** Default quality bar (0..1) a pipeline step uses when it sets no explicit threshold. */
8
+ defaultThreshold: number;
9
+ /** Short label for the producer being reviewed, woven into the companion's prompt. */
10
+ reviews: string;
11
+ }
12
+ /** The built-in companion catalog. */
13
+ export declare const COMPANIONS: CompanionDefinition[];
14
+ /** Whether `kind` is a companion agent (driven by the engine's companion review loop). */
15
+ export declare function isCompanionKind(kind: AgentKind): boolean;
16
+ /** The companion definition for `kind`, or undefined if it is not a companion. */
17
+ export declare function companionFor(kind: AgentKind): CompanionDefinition | undefined;
18
+ /** The producer kinds a companion may be attached to (empty if not a companion). */
19
+ export declare function companionTargets(kind: AgentKind): AgentKind[];
20
+ //# sourceMappingURL=companions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"companions.d.ts","sourceRoot":"","sources":["../../src/agents/companions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAYpD,MAAM,WAAW,mBAAmB;IAClC,sCAAsC;IACtC,IAAI,EAAE,SAAS,CAAA;IACf,oFAAoF;IACpF,OAAO,EAAE,SAAS,EAAE,CAAA;IACpB,0FAA0F;IAC1F,gBAAgB,EAAE,MAAM,CAAA;IACxB,sFAAsF;IACtF,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,sCAAsC;AACtC,eAAO,MAAM,UAAU,EAAE,mBAAmB,EAqB3C,CAAA;AAID,0FAA0F;AAC1F,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAExD;AAED,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,mBAAmB,GAAG,SAAS,CAE7E;AAED,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,EAAE,CAE7D"}
@@ -0,0 +1,38 @@
1
+ import { DEFAULT_COMPANION_THRESHOLD } from '@cat-factory/contracts';
2
+ /** The built-in companion catalog. */
3
+ export const COMPANIONS = [
4
+ {
5
+ kind: 'architect-companion',
6
+ targets: ['architect'],
7
+ defaultThreshold: DEFAULT_COMPANION_THRESHOLD,
8
+ reviews: 'solution design / architecture proposal',
9
+ },
10
+ {
11
+ kind: 'spec-companion',
12
+ targets: ['spec-writer'],
13
+ defaultThreshold: DEFAULT_COMPANION_THRESHOLD,
14
+ reviews: 'service specification and the completeness of its acceptance-scenario coverage',
15
+ },
16
+ {
17
+ // `reviewer` is the coder's companion: it directly challenges the builder's
18
+ // output and can loop it back for rework. Auto-only by default (no human gate).
19
+ kind: 'reviewer',
20
+ targets: ['coder'],
21
+ defaultThreshold: DEFAULT_COMPANION_THRESHOLD,
22
+ reviews: 'code change for correctness, quality, security and risk',
23
+ },
24
+ ];
25
+ const BY_KIND = new Map(COMPANIONS.map((c) => [c.kind, c]));
26
+ /** Whether `kind` is a companion agent (driven by the engine's companion review loop). */
27
+ export function isCompanionKind(kind) {
28
+ return BY_KIND.has(kind);
29
+ }
30
+ /** The companion definition for `kind`, or undefined if it is not a companion. */
31
+ export function companionFor(kind) {
32
+ return BY_KIND.get(kind);
33
+ }
34
+ /** The producer kinds a companion may be attached to (empty if not a companion). */
35
+ export function companionTargets(kind) {
36
+ return BY_KIND.get(kind)?.targets ?? [];
37
+ }
38
+ //# sourceMappingURL=companions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"companions.js","sourceRoot":"","sources":["../../src/agents/companions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAA;AAsBpE,sCAAsC;AACtC,MAAM,CAAC,MAAM,UAAU,GAA0B;IAC/C;QACE,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,CAAC,WAAW,CAAC;QACtB,gBAAgB,EAAE,2BAA2B;QAC7C,OAAO,EAAE,yCAAyC;KACnD;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,CAAC,aAAa,CAAC;QACxB,gBAAgB,EAAE,2BAA2B;QAC7C,OAAO,EAAE,gFAAgF;KAC1F;IACD;QACE,4EAA4E;QAC5E,gFAAgF;QAChF,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,CAAC,OAAO,CAAC;QAClB,gBAAgB,EAAE,2BAA2B;QAC7C,OAAO,EAAE,yDAAyD;KACnE;CACF,CAAA;AAED,MAAM,OAAO,GAAG,IAAI,GAAG,CAA8B,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;AAExF,0FAA0F;AAC1F,MAAM,UAAU,eAAe,CAAC,IAAe;IAC7C,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AAC1B,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,YAAY,CAAC,IAAe;IAC1C,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AAC1B,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,gBAAgB,CAAC,IAAe;IAC9C,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,IAAI,EAAE,CAAA;AACzC,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { AgentKind } from '@cat-factory/kernel';
2
+ export interface CompanionDefinition {
3
+ /** The companion's own agent kind. */
4
+ kind: AgentKind;
5
+ /** Producer kinds this companion may review (allow-list for pipeline placement). */
6
+ targets: AgentKind[];
7
+ /** Default quality bar (0..1) a pipeline step uses when it sets no explicit threshold. */
8
+ defaultThreshold: number;
9
+ /** Short label for the producer being reviewed, woven into the companion's prompt. */
10
+ reviews: string;
11
+ }
12
+ /** The built-in companion catalog. */
13
+ export declare const COMPANIONS: CompanionDefinition[];
14
+ /** Whether `kind` is a companion agent (driven by the engine's companion review loop). */
15
+ export declare function isCompanionKind(kind: AgentKind): boolean;
16
+ /** The companion definition for `kind`, or undefined if it is not a companion. */
17
+ export declare function companionFor(kind: AgentKind): CompanionDefinition | undefined;
18
+ /** The producer kinds a companion may be attached to (empty if not a companion). */
19
+ export declare function companionTargets(kind: AgentKind): AgentKind[];
20
+ //# sourceMappingURL=companions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"companions.d.ts","sourceRoot":"","sources":["../../../src/agents/kinds/companions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAYpD,MAAM,WAAW,mBAAmB;IAClC,sCAAsC;IACtC,IAAI,EAAE,SAAS,CAAA;IACf,oFAAoF;IACpF,OAAO,EAAE,SAAS,EAAE,CAAA;IACpB,0FAA0F;IAC1F,gBAAgB,EAAE,MAAM,CAAA;IACxB,sFAAsF;IACtF,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,sCAAsC;AACtC,eAAO,MAAM,UAAU,EAAE,mBAAmB,EAuB3C,CAAA;AAID,0FAA0F;AAC1F,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAExD;AAED,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,mBAAmB,GAAG,SAAS,CAE7E;AAED,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,EAAE,CAE7D"}
@@ -0,0 +1,39 @@
1
+ import { DEFAULT_COMPANION_THRESHOLD } from '@cat-factory/contracts';
2
+ /** The built-in companion catalog. */
3
+ export const COMPANIONS = [
4
+ {
5
+ kind: 'architect-companion',
6
+ targets: ['architect'],
7
+ defaultThreshold: DEFAULT_COMPANION_THRESHOLD,
8
+ reviews: 'solution design / architecture proposal',
9
+ },
10
+ {
11
+ kind: 'spec-companion',
12
+ targets: ['spec-writer'],
13
+ defaultThreshold: DEFAULT_COMPANION_THRESHOLD,
14
+ reviews: "specification increment's fidelity to the task requirements it was given and the " +
15
+ 'completeness of its acceptance-scenario coverage',
16
+ },
17
+ {
18
+ // `reviewer` is the coder's companion: it directly challenges the builder's
19
+ // output and can loop it back for rework. Auto-only by default (no human gate).
20
+ kind: 'reviewer',
21
+ targets: ['coder'],
22
+ defaultThreshold: DEFAULT_COMPANION_THRESHOLD,
23
+ reviews: 'code change for correctness, quality, security and risk',
24
+ },
25
+ ];
26
+ const BY_KIND = new Map(COMPANIONS.map((c) => [c.kind, c]));
27
+ /** Whether `kind` is a companion agent (driven by the engine's companion review loop). */
28
+ export function isCompanionKind(kind) {
29
+ return BY_KIND.has(kind);
30
+ }
31
+ /** The companion definition for `kind`, or undefined if it is not a companion. */
32
+ export function companionFor(kind) {
33
+ return BY_KIND.get(kind);
34
+ }
35
+ /** The producer kinds a companion may be attached to (empty if not a companion). */
36
+ export function companionTargets(kind) {
37
+ return BY_KIND.get(kind)?.targets ?? [];
38
+ }
39
+ //# sourceMappingURL=companions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"companions.js","sourceRoot":"","sources":["../../../src/agents/kinds/companions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAA;AAsBpE,sCAAsC;AACtC,MAAM,CAAC,MAAM,UAAU,GAA0B;IAC/C;QACE,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,CAAC,WAAW,CAAC;QACtB,gBAAgB,EAAE,2BAA2B;QAC7C,OAAO,EAAE,yCAAyC;KACnD;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,CAAC,aAAa,CAAC;QACxB,gBAAgB,EAAE,2BAA2B;QAC7C,OAAO,EACL,mFAAmF;YACnF,kDAAkD;KACrD;IACD;QACE,4EAA4E;QAC5E,gFAAgF;QAChF,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,CAAC,OAAO,CAAC;QAClB,gBAAgB,EAAE,2BAA2B;QAC7C,OAAO,EAAE,yDAAyD;KACnE;CACF,CAAA;AAED,MAAM,OAAO,GAAG,IAAI,GAAG,CAA8B,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;AAExF,0FAA0F;AAC1F,MAAM,UAAU,eAAe,CAAC,IAAe;IAC7C,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AAC1B,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,YAAY,CAAC,IAAe;IAC1C,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AAC1B,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,gBAAgB,CAAC,IAAe;IAC9C,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,IAAI,EAAE,CAAA;AACzC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { AgentConfigDescriptor, AgentKind } from '@cat-factory/kernel';
2
+ /** The Tester's environment choice: stand infra up locally, or use the ephemeral env. */
3
+ export declare const TESTER_ENVIRONMENT_CONFIG_ID = "tester.environment";
4
+ /** The acceptance/e2e execution target: project CI, or the ephemeral env. */
5
+ export declare const PLAYWRIGHT_E2E_TARGET_CONFIG_ID = "playwright.e2eTarget";
6
+ /**
7
+ * The config descriptors an agent kind contributes: the built-in ones plus any a
8
+ * deployment registered for the kind. Empty for kinds that contribute none.
9
+ */
10
+ export declare function configContributionsFor(kind: AgentKind): AgentConfigDescriptor[];
11
+ /**
12
+ * The deduplicated catalog of config descriptors contributed across a set of agent
13
+ * kinds (e.g. all the kinds used by a workspace's pipelines), keyed by descriptor
14
+ * id (first contribution wins). This is what the workspace snapshot carries.
15
+ */
16
+ export declare function configContributionCatalog(kinds: Iterable<AgentKind>): AgentConfigDescriptor[];
17
+ //# sourceMappingURL=configs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configs.d.ts","sourceRoot":"","sources":["../../../src/agents/kinds/configs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAQ3E,yFAAyF;AACzF,eAAO,MAAM,4BAA4B,uBAAuB,CAAA;AAChE,6EAA6E;AAC7E,eAAO,MAAM,+BAA+B,yBAAyB,CAAA;AAqCrE;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,SAAS,GAAG,qBAAqB,EAAE,CAI/E;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,qBAAqB,EAAE,CAQ7F"}
@@ -0,0 +1,66 @@
1
+ import { registeredConfigContributions } from './registry.js';
2
+ // Built-in agent config contributions. An agent kind declares the task-level
3
+ // parameters it cares about here; the union over a pipeline's kinds is what the
4
+ // task-creation form and inspector render (and freeze once the owning step runs).
5
+ // Custom kinds contribute the same way via `registerAgentKind({ configContributions })`.
6
+ /** The Tester's environment choice: stand infra up locally, or use the ephemeral env. */
7
+ export const TESTER_ENVIRONMENT_CONFIG_ID = 'tester.environment';
8
+ /** The acceptance/e2e execution target: project CI, or the ephemeral env. */
9
+ export const PLAYWRIGHT_E2E_TARGET_CONFIG_ID = 'playwright.e2eTarget';
10
+ const BUILTIN_CONFIG_CONTRIBUTIONS = {
11
+ tester: [
12
+ {
13
+ id: TESTER_ENVIRONMENT_CONFIG_ID,
14
+ agentKind: 'tester',
15
+ label: 'Test environment',
16
+ description: "Where the Tester runs the suite: with the service's dependencies stood up locally via docker-compose, or against the provisioned ephemeral environment.",
17
+ type: 'select',
18
+ options: [
19
+ { value: 'ephemeral', label: 'Ephemeral environment' },
20
+ { value: 'local', label: 'Local (docker-compose infra)' },
21
+ ],
22
+ // Ephemeral is the zero-config default; local is an opt-in that requires the
23
+ // service's test infra to be configured (a compose path or the no-infra flag).
24
+ default: 'ephemeral',
25
+ },
26
+ ],
27
+ playwright: [
28
+ {
29
+ id: PLAYWRIGHT_E2E_TARGET_CONFIG_ID,
30
+ agentKind: 'playwright',
31
+ label: 'E2E execution target',
32
+ description: 'Where the acceptance / end-to-end tests run: in the project CI (GitHub Actions), or against the provisioned ephemeral environment.',
33
+ type: 'select',
34
+ options: [
35
+ { value: 'ci', label: 'Project CI (GitHub Actions)' },
36
+ { value: 'ephemeral', label: 'Ephemeral environment' },
37
+ ],
38
+ default: 'ci',
39
+ },
40
+ ],
41
+ };
42
+ /**
43
+ * The config descriptors an agent kind contributes: the built-in ones plus any a
44
+ * deployment registered for the kind. Empty for kinds that contribute none.
45
+ */
46
+ export function configContributionsFor(kind) {
47
+ const builtin = BUILTIN_CONFIG_CONTRIBUTIONS[kind] ?? [];
48
+ const registered = registeredConfigContributions(kind);
49
+ return registered.length ? [...builtin, ...registered] : builtin;
50
+ }
51
+ /**
52
+ * The deduplicated catalog of config descriptors contributed across a set of agent
53
+ * kinds (e.g. all the kinds used by a workspace's pipelines), keyed by descriptor
54
+ * id (first contribution wins). This is what the workspace snapshot carries.
55
+ */
56
+ export function configContributionCatalog(kinds) {
57
+ const byId = new Map();
58
+ for (const kind of kinds) {
59
+ for (const descriptor of configContributionsFor(kind)) {
60
+ if (!byId.has(descriptor.id))
61
+ byId.set(descriptor.id, descriptor);
62
+ }
63
+ }
64
+ return [...byId.values()];
65
+ }
66
+ //# sourceMappingURL=configs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configs.js","sourceRoot":"","sources":["../../../src/agents/kinds/configs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAA;AAE7D,6EAA6E;AAC7E,gFAAgF;AAChF,kFAAkF;AAClF,yFAAyF;AAEzF,yFAAyF;AACzF,MAAM,CAAC,MAAM,4BAA4B,GAAG,oBAAoB,CAAA;AAChE,6EAA6E;AAC7E,MAAM,CAAC,MAAM,+BAA+B,GAAG,sBAAsB,CAAA;AAErE,MAAM,4BAA4B,GAAwD;IACxF,MAAM,EAAE;QACN;YACE,EAAE,EAAE,4BAA4B;YAChC,SAAS,EAAE,QAAQ;YACnB,KAAK,EAAE,kBAAkB;YACzB,WAAW,EACT,yJAAyJ;YAC3J,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,uBAAuB,EAAE;gBACtD,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,8BAA8B,EAAE;aAC1D;YACD,6EAA6E;YAC7E,+EAA+E;YAC/E,OAAO,EAAE,WAAW;SACrB;KACF;IACD,UAAU,EAAE;QACV;YACE,EAAE,EAAE,+BAA+B;YACnC,SAAS,EAAE,YAAY;YACvB,KAAK,EAAE,sBAAsB;YAC7B,WAAW,EACT,oIAAoI;YACtI,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,6BAA6B,EAAE;gBACrD,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,uBAAuB,EAAE;aACvD;YACD,OAAO,EAAE,IAAI;SACd;KACF;CACF,CAAA;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAe;IACpD,MAAM,OAAO,GAAG,4BAA4B,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;IACxD,MAAM,UAAU,GAAG,6BAA6B,CAAC,IAAI,CAAC,CAAA;IACtD,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;AAClE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAA0B;IAClE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAiC,CAAA;IACrD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,UAAU,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;YACtD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;QACnE,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;AAC3B,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { AgentKind } from '@cat-factory/kernel';
2
+ /** Container agent kinds that operate read-only (explore + report; no edits/commits/PR). */
3
+ export declare const READ_ONLY_AGENT_KINDS: Set<string>;
4
+ /** Whether `kind` is a read-only container agent (runs the harness `/explore` path). */
5
+ export declare function isReadOnlyAgentKind(kind: AgentKind): boolean;
6
+ /**
7
+ * Appended to a read-only agent's system prompt so it never tries to edit, commit or
8
+ * open a PR — the prose report it returns is its sole deliverable. Centralised here
9
+ * (rather than repeated in each role prompt) so every read-only kind states the same
10
+ * guardrail exactly once.
11
+ */
12
+ export declare const READ_ONLY_GUARDRAIL: string;
13
+ //# sourceMappingURL=read-only.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-only.d.ts","sourceRoot":"","sources":["../../../src/agents/kinds/read-only.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAkBpD,4FAA4F;AAC5F,eAAO,MAAM,qBAAqB,aAAiE,CAAA;AAEnG,wFAAwF;AACxF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAE5D;AAED;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,QAIiB,CAAA"}
@@ -0,0 +1,32 @@
1
+ // Read-only container agents. Some agent kinds need a real checkout to do their
2
+ // work but only ever READ it: they clone the repo, explore it, and return a prose
3
+ // report/proposal — making no edits, no commits and opening no pull request. They
4
+ // run through the harness `/explore` endpoint (not `/run`), where an edit-free run
5
+ // is the expected, correct outcome rather than an "implementation produced no
6
+ // changes" failure, and where no work branch or PR is created.
7
+ //
8
+ // Today that is the `architect` (proposes a design after reading the existing code,
9
+ // whose prose proposal feeds the human gate / architect-companion) and the tech-debt
10
+ // `analysis` agent (audits the repo and emits a prioritized report). Both share the
11
+ // single reusable read-only execution path (see ContainerAgentExecutor's explore
12
+ // body + the harness `handleExplore`).
13
+ // The `bug-investigator` joins this set: it clones the repo, reads the codebase from a
14
+ // raw bug report and returns a prose enriched report (+ an optional, confidence-gated
15
+ // hypothesis), making no edits — the same read-only `/explore` path as architect/analysis.
16
+ /** Container agent kinds that operate read-only (explore + report; no edits/commits/PR). */
17
+ export const READ_ONLY_AGENT_KINDS = new Set(['architect', 'analysis', 'bug-investigator']);
18
+ /** Whether `kind` is a read-only container agent (runs the harness `/explore` path). */
19
+ export function isReadOnlyAgentKind(kind) {
20
+ return READ_ONLY_AGENT_KINDS.has(kind);
21
+ }
22
+ /**
23
+ * Appended to a read-only agent's system prompt so it never tries to edit, commit or
24
+ * open a PR — the prose report it returns is its sole deliverable. Centralised here
25
+ * (rather than repeated in each role prompt) so every read-only kind states the same
26
+ * guardrail exactly once.
27
+ */
28
+ export const READ_ONLY_GUARDRAIL = 'IMPORTANT — this is a READ-ONLY exploration: you may read and inspect any file in ' +
29
+ 'the repository, but you MUST NOT modify, create or delete files, run commands that ' +
30
+ 'change the repository, commit, or open a pull request. Your written report is the ' +
31
+ 'only deliverable; return it as your response.';
32
+ //# sourceMappingURL=read-only.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-only.js","sourceRoot":"","sources":["../../../src/agents/kinds/read-only.ts"],"names":[],"mappings":"AAEA,gFAAgF;AAChF,kFAAkF;AAClF,kFAAkF;AAClF,mFAAmF;AACnF,8EAA8E;AAC9E,+DAA+D;AAC/D,EAAE;AACF,oFAAoF;AACpF,qFAAqF;AACrF,oFAAoF;AACpF,iFAAiF;AACjF,uCAAuC;AAEvC,uFAAuF;AACvF,sFAAsF;AACtF,2FAA2F;AAC3F,4FAA4F;AAC5F,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAS,CAAC,WAAW,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAC,CAAA;AAEnG,wFAAwF;AACxF,MAAM,UAAU,mBAAmB,CAAC,IAAe;IACjD,OAAO,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AACxC,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAC9B,oFAAoF;IACpF,qFAAqF;IACrF,oFAAoF;IACpF,+CAA+C,CAAA"}
@@ -0,0 +1,70 @@
1
+ import type { AgentConfigDescriptor, AgentKind, AgentRunContext } from '@cat-factory/kernel';
2
+ import type { AgentTrait } from './traits.js';
3
+ export interface AgentKindDefinition {
4
+ /** The free-form agent-kind id used in pipelines and steps (e.g. `security-auditor`). */
5
+ kind: AgentKind;
6
+ /**
7
+ * The system prompt (role) for this kind. A function form receives the kind id so a
8
+ * single definition object can serve a family of related kinds.
9
+ */
10
+ systemPrompt: string | ((kind: AgentKind) => string);
11
+ /**
12
+ * Optional custom user-prompt builder. When omitted the kind uses the generic user
13
+ * prompt (block context + prior pipeline outputs), exactly like any other
14
+ * non-standard-phase kind. Human revision feedback is appended automatically.
15
+ */
16
+ userPrompt?: (context: AgentRunContext) => string;
17
+ /**
18
+ * When true this kind needs a real checkout (clone/edit/commit/PR) and must run in a
19
+ * container rather than as a one-shot inline LLM call — see the Worker's
20
+ * `CompositeAgentExecutor`. Defaults to false (an inline LLM agent). NOTE: a container
21
+ * kind ALSO needs harness support for its dispatch endpoint; inline kinds work
22
+ * end-to-end with no harness changes.
23
+ */
24
+ requiresContainer?: boolean;
25
+ /**
26
+ * Optional one-clause reason this kind should reach for web search, phrased to
27
+ * complete "Use it mainly to …" (e.g. "verify the vendor's current API contract
28
+ * before generating a client"). When web search is enabled for the deployment, this
29
+ * is folded into the kind's web-search guidance so a proprietary kind gets a nudge
30
+ * tailored to its job — without the shared library needing to know the kind exists.
31
+ * Omitted ⇒ the generic "verify a fact that changes" hint. See `webResearchGuidanceFor`.
32
+ */
33
+ webResearchHint?: string;
34
+ /**
35
+ * Task-level configuration parameters this kind contributes (see the agent-config
36
+ * contracts). When a pipeline that includes this kind is selected for a task, these
37
+ * descriptors are surfaced on task creation + the inspector, editable until the
38
+ * kind's step starts. Each descriptor's `agentKind` should match this `kind` so the
39
+ * freeze targets the right step. Omitted ⇒ the kind contributes no config.
40
+ */
41
+ configContributions?: AgentConfigDescriptor[];
42
+ /**
43
+ * Capability traits this kind carries (see ./traits). `code-aware` makes the engine
44
+ * fold the running service's selected best-practice fragments into the agent's prompt;
45
+ * `spec-aware` appends the in-repo-spec reading guidance. Deployments can also assign
46
+ * their own traits registered via `registerAgentTrait`. Omitted ⇒ no traits.
47
+ */
48
+ traits?: AgentTrait[];
49
+ }
50
+ /** Register a custom agent kind. A later registration of the same id replaces the earlier one. */
51
+ export declare function registerAgentKind(definition: AgentKindDefinition): void;
52
+ /** Register several custom agent kinds at once. */
53
+ export declare function registerAgentKinds(definitions: Iterable<AgentKindDefinition>): void;
54
+ /** The registered definition for a kind, or undefined for built-in / unregistered kinds. */
55
+ export declare function registeredAgentKind(kind: AgentKind): AgentKindDefinition | undefined;
56
+ /** All registered custom agent kinds (registration order). */
57
+ export declare function registeredAgentKinds(): AgentKindDefinition[];
58
+ /** Whether a registered kind asked to run in a container. False for built-in / unregistered kinds. */
59
+ export declare function registeredKindRequiresContainer(kind: AgentKind): boolean;
60
+ /** Drop all registered kinds. Intended for tests that exercise registration. */
61
+ export declare function clearRegisteredAgentKinds(): void;
62
+ /** A registered kind's system prompt, or undefined when the kind is not registered. */
63
+ export declare function registeredSystemPrompt(kind: AgentKind): string | undefined;
64
+ /** A registered kind's user prompt, or undefined when the kind is not registered / has no builder. */
65
+ export declare function registeredUserPrompt(context: AgentRunContext): string | undefined;
66
+ /** A registered kind's web-research hint, or undefined when unregistered / not supplied. */
67
+ export declare function registeredWebResearchHint(kind: AgentKind): string | undefined;
68
+ /** A registered kind's contributed config descriptors, or an empty array when none. */
69
+ export declare function registeredConfigContributions(kind: AgentKind): AgentConfigDescriptor[];
70
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/agents/kinds/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC5F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAY7C,MAAM,WAAW,mBAAmB;IAClC,yFAAyF;IACzF,IAAI,EAAE,SAAS,CAAA;IACf;;;OAGG;IACH,YAAY,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,KAAK,MAAM,CAAC,CAAA;IACpD;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,MAAM,CAAA;IACjD;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,qBAAqB,EAAE,CAAA;IAC7C;;;;;OAKG;IACH,MAAM,CAAC,EAAE,UAAU,EAAE,CAAA;CACtB;AAOD,kGAAkG;AAClG,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,mBAAmB,GAAG,IAAI,CAEvE;AAED,mDAAmD;AACnD,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,QAAQ,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAEnF;AAED,4FAA4F;AAC5F,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG,mBAAmB,GAAG,SAAS,CAEpF;AAED,8DAA8D;AAC9D,wBAAgB,oBAAoB,IAAI,mBAAmB,EAAE,CAE5D;AAED,sGAAsG;AACtG,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAExE;AAED,gFAAgF;AAChF,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD;AAED,uFAAuF;AACvF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAM1E;AAED,sGAAsG;AACtG,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAEjF;AAED,4FAA4F;AAC5F,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAE7E;AAED,uFAAuF;AACvF,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,SAAS,GAAG,qBAAqB,EAAE,CAEtF"}
@@ -0,0 +1,51 @@
1
+ // Process-wide registry, mirroring the Worker's model-provider registry. Registration
2
+ // is a startup side effect read by every prompt build / routing decision, so the extra
3
+ // kinds reach all paths — HTTP requests, the durable driver and the cron sweeper.
4
+ const registry = new Map();
5
+ /** Register a custom agent kind. A later registration of the same id replaces the earlier one. */
6
+ export function registerAgentKind(definition) {
7
+ registry.set(definition.kind, definition);
8
+ }
9
+ /** Register several custom agent kinds at once. */
10
+ export function registerAgentKinds(definitions) {
11
+ for (const definition of definitions)
12
+ registerAgentKind(definition);
13
+ }
14
+ /** The registered definition for a kind, or undefined for built-in / unregistered kinds. */
15
+ export function registeredAgentKind(kind) {
16
+ return registry.get(kind);
17
+ }
18
+ /** All registered custom agent kinds (registration order). */
19
+ export function registeredAgentKinds() {
20
+ return [...registry.values()];
21
+ }
22
+ /** Whether a registered kind asked to run in a container. False for built-in / unregistered kinds. */
23
+ export function registeredKindRequiresContainer(kind) {
24
+ return registry.get(kind)?.requiresContainer === true;
25
+ }
26
+ /** Drop all registered kinds. Intended for tests that exercise registration. */
27
+ export function clearRegisteredAgentKinds() {
28
+ registry.clear();
29
+ }
30
+ /** A registered kind's system prompt, or undefined when the kind is not registered. */
31
+ export function registeredSystemPrompt(kind) {
32
+ const definition = registry.get(kind);
33
+ if (!definition)
34
+ return undefined;
35
+ return typeof definition.systemPrompt === 'function'
36
+ ? definition.systemPrompt(kind)
37
+ : definition.systemPrompt;
38
+ }
39
+ /** A registered kind's user prompt, or undefined when the kind is not registered / has no builder. */
40
+ export function registeredUserPrompt(context) {
41
+ return registry.get(context.agentKind)?.userPrompt?.(context);
42
+ }
43
+ /** A registered kind's web-research hint, or undefined when unregistered / not supplied. */
44
+ export function registeredWebResearchHint(kind) {
45
+ return registry.get(kind)?.webResearchHint;
46
+ }
47
+ /** A registered kind's contributed config descriptors, or an empty array when none. */
48
+ export function registeredConfigContributions(kind) {
49
+ return registry.get(kind)?.configContributions ?? [];
50
+ }
51
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/agents/kinds/registry.ts"],"names":[],"mappings":"AA6DA,sFAAsF;AACtF,uFAAuF;AACvF,kFAAkF;AAClF,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA+B,CAAA;AAEvD,kGAAkG;AAClG,MAAM,UAAU,iBAAiB,CAAC,UAA+B;IAC/D,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;AAC3C,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,kBAAkB,CAAC,WAA0C;IAC3E,KAAK,MAAM,UAAU,IAAI,WAAW;QAAE,iBAAiB,CAAC,UAAU,CAAC,CAAA;AACrE,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,mBAAmB,CAAC,IAAe;IACjD,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AAC3B,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,oBAAoB;IAClC,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;AAC/B,CAAC;AAED,sGAAsG;AACtG,MAAM,UAAU,+BAA+B,CAAC,IAAe;IAC7D,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,iBAAiB,KAAK,IAAI,CAAA;AACvD,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,yBAAyB;IACvC,QAAQ,CAAC,KAAK,EAAE,CAAA;AAClB,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,sBAAsB,CAAC,IAAe;IACpD,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACrC,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAA;IACjC,OAAO,OAAO,UAAU,CAAC,YAAY,KAAK,UAAU;QAClD,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC;QAC/B,CAAC,CAAC,UAAU,CAAC,YAAY,CAAA;AAC7B,CAAC;AAED,sGAAsG;AACtG,MAAM,UAAU,oBAAoB,CAAC,OAAwB;IAC3D,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,CAAC,OAAO,CAAC,CAAA;AAC/D,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,yBAAyB,CAAC,IAAe;IACvD,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,eAAe,CAAA;AAC5C,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,6BAA6B,CAAC,IAAe;IAC3D,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,mBAAmB,IAAI,EAAE,CAAA;AACtD,CAAC"}
@@ -0,0 +1,60 @@
1
+ import type { AgentKind } from '@cat-factory/kernel';
2
+ /** A trait id. Free-form so deployments can define their own beyond the standard two. */
3
+ export type AgentTrait = string;
4
+ /**
5
+ * Code-aware kinds read and/or change the service's code. The service's selected
6
+ * best-practice / guideline fragments (Node, Fastify, performance, …) are folded into
7
+ * their system prompt by the execution engine.
8
+ */
9
+ export declare const CODE_AWARE_TRAIT: AgentTrait;
10
+ /**
11
+ * Spec-aware kinds are told to read the in-repo `spec/` artifact (the prescriptive
12
+ * service specification) and how to interpret it. The instruction is appended to their
13
+ * system prompt via {@link traitGuidanceFor}.
14
+ */
15
+ export declare const SPEC_AWARE_TRAIT: AgentTrait;
16
+ /** The guidance appended to a spec-aware kind's system prompt — explains the spec format. */
17
+ export declare const SPEC_AWARE_GUIDANCE: string;
18
+ /**
19
+ * Built-in trait assignment per agent kind.
20
+ * - `code-aware`: the kinds that read/modify the service's code, so the service's
21
+ * best-practice fragments are relevant to them.
22
+ * - `spec-aware`: every code-touching kind (anything that clones and reads the repo),
23
+ * so each is pointed at the in-repo spec. The `spec-writer` is intentionally absent —
24
+ * it AUTHORS the spec rather than consuming it.
25
+ */
26
+ export declare const STANDARD_AGENT_TRAITS: Partial<Record<AgentKind, AgentTrait[]>>;
27
+ /** Definition of a (custom) trait: its id and optional system-prompt guidance. */
28
+ export interface AgentTraitDefinition {
29
+ /** The trait id used in `STANDARD_AGENT_TRAITS` / `AgentKindDefinition.traits`. */
30
+ id: AgentTrait;
31
+ /**
32
+ * Guidance folded into the system prompt of every kind carrying this trait. A function
33
+ * form receives the kind id. Omit for a pure marker trait whose effect lives in the
34
+ * engine (like `code-aware`).
35
+ */
36
+ guidance?: string | ((kind: AgentKind) => string);
37
+ }
38
+ /** Assign extra capability traits to an (existing) agent kind. Additive; idempotent per trait. */
39
+ export declare function assignAgentTraits(kind: AgentKind, traits: Iterable<AgentTrait>): void;
40
+ /** Drop all extra trait assignments. Intended for tests that exercise assignment. */
41
+ export declare function clearAssignedAgentTraits(): void;
42
+ /** Register a custom trait definition. A later registration of the same id replaces it. */
43
+ export declare function registerAgentTrait(definition: AgentTraitDefinition): void;
44
+ /** Register several custom trait definitions at once. */
45
+ export declare function registerAgentTraits(definitions: Iterable<AgentTraitDefinition>): void;
46
+ /** The definition for a trait id, or undefined when it is a pure marker / unregistered. */
47
+ export declare function registeredAgentTrait(id: AgentTrait): AgentTraitDefinition | undefined;
48
+ /** Drop all registered (custom) traits. Intended for tests; standard traits re-register below. */
49
+ export declare function clearRegisteredAgentTraits(): void;
50
+ /** The traits a kind carries: its built-in set unioned with a registered custom kind's. */
51
+ export declare function traitsFor(kind: AgentKind): Set<AgentTrait>;
52
+ /** Whether `kind` carries `trait`. */
53
+ export declare function hasTrait(kind: AgentKind, trait: AgentTrait): boolean;
54
+ /**
55
+ * The guidance lines contributed by the traits a kind carries, in trait order. Folded
56
+ * into the kind's system prompt by `systemPromptFor`. Marker traits (no guidance, e.g.
57
+ * `code-aware`) contribute nothing here.
58
+ */
59
+ export declare function traitGuidanceFor(kind: AgentKind): string[];
60
+ //# sourceMappingURL=traits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traits.d.ts","sourceRoot":"","sources":["../../../src/agents/kinds/traits.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAapD,yFAAyF;AACzF,MAAM,MAAM,UAAU,GAAG,MAAM,CAAA;AAE/B;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,UAAyB,CAAA;AAExD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,UAAyB,CAAA;AAExD,6FAA6F;AAC7F,eAAO,MAAM,mBAAmB,QAOpB,CAAA;AAEZ;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,CAkB1E,CAAA;AAED,kFAAkF;AAClF,MAAM,WAAW,oBAAoB;IACnC,mFAAmF;IACnF,EAAE,EAAE,UAAU,CAAA;IACd;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,KAAK,MAAM,CAAC,CAAA;CAClD;AAaD,kGAAkG;AAClG,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI,CAIrF;AAED,qFAAqF;AACrF,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C;AAED,2FAA2F;AAC3F,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,oBAAoB,GAAG,IAAI,CAEzE;AAED,yDAAyD;AACzD,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,QAAQ,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAErF;AAED,2FAA2F;AAC3F,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,UAAU,GAAG,oBAAoB,GAAG,SAAS,CAErF;AAED,kGAAkG;AAClG,wBAAgB,0BAA0B,IAAI,IAAI,CAGjD;AAED,2FAA2F;AAC3F,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC,CAK1D;AAED,sCAAsC;AACtC,wBAAgB,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAEpE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,EAAE,CAQ1D"}
@@ -0,0 +1,123 @@
1
+ import { SPEC_FEATURES_DIR, SPEC_JSON_PATH, SPEC_OVERVIEW_PATH, SPEC_RULES_PATH, } from '@cat-factory/contracts';
2
+ import { registeredAgentKind } from './registry.js';
3
+ /**
4
+ * Code-aware kinds read and/or change the service's code. The service's selected
5
+ * best-practice / guideline fragments (Node, Fastify, performance, …) are folded into
6
+ * their system prompt by the execution engine.
7
+ */
8
+ export const CODE_AWARE_TRAIT = 'code-aware';
9
+ /**
10
+ * Spec-aware kinds are told to read the in-repo `spec/` artifact (the prescriptive
11
+ * service specification) and how to interpret it. The instruction is appended to their
12
+ * system prompt via {@link traitGuidanceFor}.
13
+ */
14
+ export const SPEC_AWARE_TRAIT = 'spec-aware';
15
+ /** The guidance appended to a spec-aware kind's system prompt — explains the spec format. */
16
+ export const SPEC_AWARE_GUIDANCE = [
17
+ `This repository may contain a prescriptive SPECIFICATION for the service under the \`spec/\` directory — the source of truth for what the service must do. When it is present, read it before doing the work:`,
18
+ `- \`${SPEC_OVERVIEW_PATH}\` first, for the high-level product intent.`,
19
+ `- \`${SPEC_RULES_PATH}\` for cross-cutting domain rules, invariants and constraints.`,
20
+ `- \`${SPEC_FEATURES_DIR}/*.feature\` for the Gherkin (Given/When/Then) acceptance scenarios.`,
21
+ `- \`${SPEC_JSON_PATH}\` is the canonical machine-readable tree the markdown/feature files are rendered from; consult it when you need exact detail.`,
22
+ `Treat the spec as authoritative for required behaviour: make your change satisfy it, and if your change conflicts with the spec, follow the spec or call out the discrepancy rather than silently diverging.`,
23
+ ].join('\n');
24
+ /**
25
+ * Built-in trait assignment per agent kind.
26
+ * - `code-aware`: the kinds that read/modify the service's code, so the service's
27
+ * best-practice fragments are relevant to them.
28
+ * - `spec-aware`: every code-touching kind (anything that clones and reads the repo),
29
+ * so each is pointed at the in-repo spec. The `spec-writer` is intentionally absent —
30
+ * it AUTHORS the spec rather than consuming it.
31
+ */
32
+ export const STANDARD_AGENT_TRAITS = {
33
+ architect: [CODE_AWARE_TRAIT, SPEC_AWARE_TRAIT],
34
+ coder: [CODE_AWARE_TRAIT, SPEC_AWARE_TRAIT],
35
+ reviewer: [CODE_AWARE_TRAIT, SPEC_AWARE_TRAIT],
36
+ 'ci-fixer': [CODE_AWARE_TRAIT, SPEC_AWARE_TRAIT],
37
+ fixer: [CODE_AWARE_TRAIT, SPEC_AWARE_TRAIT],
38
+ 'conflict-resolver': [SPEC_AWARE_TRAIT],
39
+ tester: [SPEC_AWARE_TRAIT],
40
+ playwright: [SPEC_AWARE_TRAIT],
41
+ blueprints: [SPEC_AWARE_TRAIT],
42
+ 'business-documenter': [SPEC_AWARE_TRAIT],
43
+ 'business-reviewer': [SPEC_AWARE_TRAIT],
44
+ analysis: [SPEC_AWARE_TRAIT],
45
+ mocker: [SPEC_AWARE_TRAIT],
46
+ merger: [SPEC_AWARE_TRAIT],
47
+ // The on-call agent clones the released change and reads the code to correlate the diff
48
+ // with the regression evidence, so it gets the service's best-practice + spec context.
49
+ 'on-call': [CODE_AWARE_TRAIT, SPEC_AWARE_TRAIT],
50
+ };
51
+ // Process-wide trait registry, mirroring the agent-kind / model-provider registries.
52
+ const traitRegistry = new Map();
53
+ // Extra trait ASSIGNMENTS registered by a deployment/plugin at startup — e.g. the
54
+ // optional `@cat-factory/consensus` package marking which built-in kinds are eligible
55
+ // for a consensus strategy (`specialist-panel-capable`, …). Distinct from a kind's
56
+ // built-in STANDARD_AGENT_TRAITS and from a registered custom kind's own `traits`:
57
+ // this seam adds traits to an EXISTING kind without redefining its prompt. Unioned in
58
+ // {@link traitsFor}. Mirrors the registry seams above.
59
+ const assignedTraits = new Map();
60
+ /** Assign extra capability traits to an (existing) agent kind. Additive; idempotent per trait. */
61
+ export function assignAgentTraits(kind, traits) {
62
+ const set = assignedTraits.get(kind) ?? new Set();
63
+ for (const trait of traits)
64
+ set.add(trait);
65
+ assignedTraits.set(kind, set);
66
+ }
67
+ /** Drop all extra trait assignments. Intended for tests that exercise assignment. */
68
+ export function clearAssignedAgentTraits() {
69
+ assignedTraits.clear();
70
+ }
71
+ /** Register a custom trait definition. A later registration of the same id replaces it. */
72
+ export function registerAgentTrait(definition) {
73
+ traitRegistry.set(definition.id, definition);
74
+ }
75
+ /** Register several custom trait definitions at once. */
76
+ export function registerAgentTraits(definitions) {
77
+ for (const definition of definitions)
78
+ registerAgentTrait(definition);
79
+ }
80
+ /** The definition for a trait id, or undefined when it is a pure marker / unregistered. */
81
+ export function registeredAgentTrait(id) {
82
+ return traitRegistry.get(id);
83
+ }
84
+ /** Drop all registered (custom) traits. Intended for tests; standard traits re-register below. */
85
+ export function clearRegisteredAgentTraits() {
86
+ traitRegistry.clear();
87
+ registerStandardTraits();
88
+ }
89
+ /** The traits a kind carries: its built-in set unioned with a registered custom kind's. */
90
+ export function traitsFor(kind) {
91
+ const traits = new Set(STANDARD_AGENT_TRAITS[kind] ?? []);
92
+ for (const trait of registeredAgentKind(kind)?.traits ?? [])
93
+ traits.add(trait);
94
+ for (const trait of assignedTraits.get(kind) ?? [])
95
+ traits.add(trait);
96
+ return traits;
97
+ }
98
+ /** Whether `kind` carries `trait`. */
99
+ export function hasTrait(kind, trait) {
100
+ return traitsFor(kind).has(trait);
101
+ }
102
+ /**
103
+ * The guidance lines contributed by the traits a kind carries, in trait order. Folded
104
+ * into the kind's system prompt by `systemPromptFor`. Marker traits (no guidance, e.g.
105
+ * `code-aware`) contribute nothing here.
106
+ */
107
+ export function traitGuidanceFor(kind) {
108
+ const lines = [];
109
+ for (const trait of traitsFor(kind)) {
110
+ const guidance = traitRegistry.get(trait)?.guidance;
111
+ if (!guidance)
112
+ continue;
113
+ lines.push(typeof guidance === 'function' ? guidance(kind) : guidance);
114
+ }
115
+ return lines;
116
+ }
117
+ /** Register the two standard traits' definitions (spec-aware carries guidance). */
118
+ function registerStandardTraits() {
119
+ registerAgentTrait({ id: CODE_AWARE_TRAIT });
120
+ registerAgentTrait({ id: SPEC_AWARE_TRAIT, guidance: SPEC_AWARE_GUIDANCE });
121
+ }
122
+ registerStandardTraits();
123
+ //# sourceMappingURL=traits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traits.js","sourceRoot":"","sources":["../../../src/agents/kinds/traits.ts"],"names":[],"mappings":"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"}