pi-amq 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/LICENSE +21 -0
  3. package/README.md +92 -0
  4. package/THIRD_PARTY_NOTICES.md +33 -0
  5. package/dist/extension/guidance.d.ts +25 -0
  6. package/dist/extension/guidance.d.ts.map +1 -0
  7. package/dist/extension/guidance.js +121 -0
  8. package/dist/extension/guidance.js.map +1 -0
  9. package/dist/extension/guide.d.ts +30 -0
  10. package/dist/extension/guide.d.ts.map +1 -0
  11. package/dist/extension/guide.js +128 -0
  12. package/dist/extension/guide.js.map +1 -0
  13. package/dist/extension/index.d.ts +4 -0
  14. package/dist/extension/index.d.ts.map +1 -0
  15. package/dist/extension/index.js +6 -0
  16. package/dist/extension/index.js.map +1 -0
  17. package/dist/extension/runtime.d.ts +48 -0
  18. package/dist/extension/runtime.d.ts.map +1 -0
  19. package/dist/extension/runtime.js +1095 -0
  20. package/dist/extension/runtime.js.map +1 -0
  21. package/dist/extension/tools.d.ts +12 -0
  22. package/dist/extension/tools.d.ts.map +1 -0
  23. package/dist/extension/tools.js +198 -0
  24. package/dist/extension/tools.js.map +1 -0
  25. package/dist/extension/worker-runtime.d.ts +34 -0
  26. package/dist/extension/worker-runtime.d.ts.map +1 -0
  27. package/dist/extension/worker-runtime.js +974 -0
  28. package/dist/extension/worker-runtime.js.map +1 -0
  29. package/dist/extension/worker-tools.d.ts +140 -0
  30. package/dist/extension/worker-tools.d.ts.map +1 -0
  31. package/dist/extension/worker-tools.js +217 -0
  32. package/dist/extension/worker-tools.js.map +1 -0
  33. package/dist/integration/confirmed-bind-onboarding.d.ts +44 -0
  34. package/dist/integration/confirmed-bind-onboarding.d.ts.map +1 -0
  35. package/dist/integration/confirmed-bind-onboarding.js +199 -0
  36. package/dist/integration/confirmed-bind-onboarding.js.map +1 -0
  37. package/dist/integration/fleet-view.d.ts +66 -0
  38. package/dist/integration/fleet-view.d.ts.map +1 -0
  39. package/dist/integration/fleet-view.js +238 -0
  40. package/dist/integration/fleet-view.js.map +1 -0
  41. package/dist/integration/fresh-session-dispatcher.d.ts +66 -0
  42. package/dist/integration/fresh-session-dispatcher.d.ts.map +1 -0
  43. package/dist/integration/fresh-session-dispatcher.js +103 -0
  44. package/dist/integration/fresh-session-dispatcher.js.map +1 -0
  45. package/dist/integration/launch-preview.d.ts +31 -0
  46. package/dist/integration/launch-preview.d.ts.map +1 -0
  47. package/dist/integration/launch-preview.js +325 -0
  48. package/dist/integration/launch-preview.js.map +1 -0
  49. package/dist/integration/transport-port.d.ts +39 -0
  50. package/dist/integration/transport-port.d.ts.map +1 -0
  51. package/dist/integration/transport-port.js +2 -0
  52. package/dist/integration/transport-port.js.map +1 -0
  53. package/dist/integration/worker-completion-notifier.d.ts +22 -0
  54. package/dist/integration/worker-completion-notifier.d.ts.map +1 -0
  55. package/dist/integration/worker-completion-notifier.js +81 -0
  56. package/dist/integration/worker-completion-notifier.js.map +1 -0
  57. package/dist/transport/amq-cli-adapter.d.ts +41 -0
  58. package/dist/transport/amq-cli-adapter.d.ts.map +1 -0
  59. package/dist/transport/amq-cli-adapter.js +291 -0
  60. package/dist/transport/amq-cli-adapter.js.map +1 -0
  61. package/dist/transport/amq-message.d.ts +47 -0
  62. package/dist/transport/amq-message.d.ts.map +1 -0
  63. package/dist/transport/amq-message.js +173 -0
  64. package/dist/transport/amq-message.js.map +1 -0
  65. package/dist/transport/amq-operations.d.ts +105 -0
  66. package/dist/transport/amq-operations.d.ts.map +1 -0
  67. package/dist/transport/amq-operations.js +320 -0
  68. package/dist/transport/amq-operations.js.map +1 -0
  69. package/dist/transport/atomic-json.d.ts +18 -0
  70. package/dist/transport/atomic-json.d.ts.map +1 -0
  71. package/dist/transport/atomic-json.js +90 -0
  72. package/dist/transport/atomic-json.js.map +1 -0
  73. package/dist/transport/binding-resolver.d.ts +46 -0
  74. package/dist/transport/binding-resolver.d.ts.map +1 -0
  75. package/dist/transport/binding-resolver.js +389 -0
  76. package/dist/transport/binding-resolver.js.map +1 -0
  77. package/dist/transport/bridge-journal.d.ts +100 -0
  78. package/dist/transport/bridge-journal.d.ts.map +1 -0
  79. package/dist/transport/bridge-journal.js +459 -0
  80. package/dist/transport/bridge-journal.js.map +1 -0
  81. package/dist/transport/dlq-retry-audit.d.ts +28 -0
  82. package/dist/transport/dlq-retry-audit.d.ts.map +1 -0
  83. package/dist/transport/dlq-retry-audit.js +66 -0
  84. package/dist/transport/dlq-retry-audit.js.map +1 -0
  85. package/dist/transport/inbox-pump.d.ts +81 -0
  86. package/dist/transport/inbox-pump.d.ts.map +1 -0
  87. package/dist/transport/inbox-pump.js +558 -0
  88. package/dist/transport/inbox-pump.js.map +1 -0
  89. package/dist/transport/index.d.ts +12 -0
  90. package/dist/transport/index.d.ts.map +1 -0
  91. package/dist/transport/index.js +12 -0
  92. package/dist/transport/index.js.map +1 -0
  93. package/dist/transport/presence-projector.d.ts +29 -0
  94. package/dist/transport/presence-projector.d.ts.map +1 -0
  95. package/dist/transport/presence-projector.js +73 -0
  96. package/dist/transport/presence-projector.js.map +1 -0
  97. package/dist/transport/priority-delivery-scheduler.d.ts +85 -0
  98. package/dist/transport/priority-delivery-scheduler.d.ts.map +1 -0
  99. package/dist/transport/priority-delivery-scheduler.js +210 -0
  100. package/dist/transport/priority-delivery-scheduler.js.map +1 -0
  101. package/dist/transport/receiver-lease.d.ts +102 -0
  102. package/dist/transport/receiver-lease.d.ts.map +1 -0
  103. package/dist/transport/receiver-lease.js +778 -0
  104. package/dist/transport/receiver-lease.js.map +1 -0
  105. package/dist/transport/runtime-status.d.ts +48 -0
  106. package/dist/transport/runtime-status.d.ts.map +1 -0
  107. package/dist/transport/runtime-status.js +71 -0
  108. package/dist/transport/runtime-status.js.map +1 -0
  109. package/dist/workflow/atomic-storage.d.ts +12 -0
  110. package/dist/workflow/atomic-storage.d.ts.map +1 -0
  111. package/dist/workflow/atomic-storage.js +104 -0
  112. package/dist/workflow/atomic-storage.js.map +1 -0
  113. package/dist/workflow/budget.d.ts +18 -0
  114. package/dist/workflow/budget.d.ts.map +1 -0
  115. package/dist/workflow/budget.js +74 -0
  116. package/dist/workflow/budget.js.map +1 -0
  117. package/dist/workflow/index.d.ts +17 -0
  118. package/dist/workflow/index.d.ts.map +1 -0
  119. package/dist/workflow/index.js +17 -0
  120. package/dist/workflow/index.js.map +1 -0
  121. package/dist/workflow/lifecycle-projection.d.ts +18 -0
  122. package/dist/workflow/lifecycle-projection.d.ts.map +1 -0
  123. package/dist/workflow/lifecycle-projection.js +22 -0
  124. package/dist/workflow/lifecycle-projection.js.map +1 -0
  125. package/dist/workflow/model-fallback.d.ts +2 -0
  126. package/dist/workflow/model-fallback.d.ts.map +1 -0
  127. package/dist/workflow/model-fallback.js +17 -0
  128. package/dist/workflow/model-fallback.js.map +1 -0
  129. package/dist/workflow/pi-session-fork.d.ts +18 -0
  130. package/dist/workflow/pi-session-fork.d.ts.map +1 -0
  131. package/dist/workflow/pi-session-fork.js +80 -0
  132. package/dist/workflow/pi-session-fork.js.map +1 -0
  133. package/dist/workflow/run-artifacts.d.ts +5 -0
  134. package/dist/workflow/run-artifacts.d.ts.map +1 -0
  135. package/dist/workflow/run-artifacts.js +25 -0
  136. package/dist/workflow/run-artifacts.js.map +1 -0
  137. package/dist/workflow/run-cleanup.d.ts +70 -0
  138. package/dist/workflow/run-cleanup.d.ts.map +1 -0
  139. package/dist/workflow/run-cleanup.js +222 -0
  140. package/dist/workflow/run-cleanup.js.map +1 -0
  141. package/dist/workflow/run-gate.d.ts +43 -0
  142. package/dist/workflow/run-gate.d.ts.map +1 -0
  143. package/dist/workflow/run-gate.js +70 -0
  144. package/dist/workflow/run-gate.js.map +1 -0
  145. package/dist/workflow/run-store.d.ts +208 -0
  146. package/dist/workflow/run-store.d.ts.map +1 -0
  147. package/dist/workflow/run-store.js +2965 -0
  148. package/dist/workflow/run-store.js.map +1 -0
  149. package/dist/workflow/spawn-confirmation.d.ts +44 -0
  150. package/dist/workflow/spawn-confirmation.d.ts.map +1 -0
  151. package/dist/workflow/spawn-confirmation.js +228 -0
  152. package/dist/workflow/spawn-confirmation.js.map +1 -0
  153. package/dist/workflow/system-process-inspector.d.ts +9 -0
  154. package/dist/workflow/system-process-inspector.d.ts.map +1 -0
  155. package/dist/workflow/system-process-inspector.js +129 -0
  156. package/dist/workflow/system-process-inspector.js.map +1 -0
  157. package/dist/workflow/worker-child-extension.d.ts +3 -0
  158. package/dist/workflow/worker-child-extension.d.ts.map +1 -0
  159. package/dist/workflow/worker-child-extension.js +182 -0
  160. package/dist/workflow/worker-child-extension.js.map +1 -0
  161. package/dist/workflow/worker-gate.d.ts +74 -0
  162. package/dist/workflow/worker-gate.d.ts.map +1 -0
  163. package/dist/workflow/worker-gate.js +165 -0
  164. package/dist/workflow/worker-gate.js.map +1 -0
  165. package/dist/workflow/worker-launch.d.ts +65 -0
  166. package/dist/workflow/worker-launch.d.ts.map +1 -0
  167. package/dist/workflow/worker-launch.js +338 -0
  168. package/dist/workflow/worker-launch.js.map +1 -0
  169. package/dist/workflow/worker-model-catalog.d.ts +36 -0
  170. package/dist/workflow/worker-model-catalog.d.ts.map +1 -0
  171. package/dist/workflow/worker-model-catalog.js +105 -0
  172. package/dist/workflow/worker-model-catalog.js.map +1 -0
  173. package/dist/workflow/worker-process-supervisor.d.ts +110 -0
  174. package/dist/workflow/worker-process-supervisor.d.ts.map +1 -0
  175. package/dist/workflow/worker-process-supervisor.js +1188 -0
  176. package/dist/workflow/worker-process-supervisor.js.map +1 -0
  177. package/dist/workflow/worker-prompt-capsule.d.ts +32 -0
  178. package/dist/workflow/worker-prompt-capsule.d.ts.map +1 -0
  179. package/dist/workflow/worker-prompt-capsule.js +52 -0
  180. package/dist/workflow/worker-prompt-capsule.js.map +1 -0
  181. package/dist/workflow/worker-role-presets.d.ts +38 -0
  182. package/dist/workflow/worker-role-presets.d.ts.map +1 -0
  183. package/dist/workflow/worker-role-presets.js +201 -0
  184. package/dist/workflow/worker-role-presets.js.map +1 -0
  185. package/dist/workflow/workflow-doctor.d.ts +57 -0
  186. package/dist/workflow/workflow-doctor.d.ts.map +1 -0
  187. package/dist/workflow/workflow-doctor.js +289 -0
  188. package/dist/workflow/workflow-doctor.js.map +1 -0
  189. package/dist/workflow/workflow-lease.d.ts +125 -0
  190. package/dist/workflow/workflow-lease.d.ts.map +1 -0
  191. package/dist/workflow/workflow-lease.js +689 -0
  192. package/dist/workflow/workflow-lease.js.map +1 -0
  193. package/dist/workflow/workflow-types.d.ts +335 -0
  194. package/dist/workflow/workflow-types.d.ts.map +1 -0
  195. package/dist/workflow/workflow-types.js +11 -0
  196. package/dist/workflow/workflow-types.js.map +1 -0
  197. package/dist/workflow/workspace-paths.d.ts +4 -0
  198. package/dist/workflow/workspace-paths.d.ts.map +1 -0
  199. package/dist/workflow/workspace-paths.js +22 -0
  200. package/dist/workflow/workspace-paths.js.map +1 -0
  201. package/docs/conformance.md +116 -0
  202. package/docs/demo-transcript.md +34 -0
  203. package/docs/design.md +1481 -0
  204. package/docs/operator-guide.md +100 -0
  205. package/extension/guidance.ts +162 -0
  206. package/extension/guide.ts +155 -0
  207. package/extension/index.ts +8 -0
  208. package/extension/runtime.ts +1224 -0
  209. package/extension/tools.ts +221 -0
  210. package/extension/worker-runtime.ts +1150 -0
  211. package/extension/worker-tools.ts +276 -0
  212. package/integration/confirmed-bind-onboarding.ts +296 -0
  213. package/integration/fleet-view.ts +286 -0
  214. package/integration/fresh-session-dispatcher.ts +166 -0
  215. package/integration/launch-preview.ts +396 -0
  216. package/integration/transport-port.ts +29 -0
  217. package/integration/worker-completion-notifier.ts +98 -0
  218. package/package.json +55 -0
  219. package/roles/oracle.md +9 -0
  220. package/roles/researcher.md +8 -0
  221. package/roles/reviewer.md +9 -0
  222. package/roles/scout.md +8 -0
  223. package/roles/worker.md +10 -0
  224. package/scripts/demo-two-terminal.sh +59 -0
  225. package/skills/coordination-patterns/SKILL.md +41 -0
  226. package/skills/coordination-patterns/references/supervised-worker-fan-out.md +12 -0
  227. package/skills/coordination-patterns/references/today-mail-team.md +36 -0
  228. package/transport/amq-cli-adapter.ts +381 -0
  229. package/transport/amq-message.ts +218 -0
  230. package/transport/amq-operations.ts +482 -0
  231. package/transport/atomic-json.ts +115 -0
  232. package/transport/binding-resolver.ts +565 -0
  233. package/transport/bridge-journal.ts +588 -0
  234. package/transport/dlq-retry-audit.ts +97 -0
  235. package/transport/inbox-pump.ts +729 -0
  236. package/transport/index.ts +11 -0
  237. package/transport/presence-projector.ts +104 -0
  238. package/transport/priority-delivery-scheduler.ts +328 -0
  239. package/transport/receiver-lease.ts +945 -0
  240. package/transport/runtime-status.ts +112 -0
  241. package/workflow/.gitkeep +1 -0
  242. package/workflow/atomic-storage.ts +120 -0
  243. package/workflow/budget.ts +90 -0
  244. package/workflow/index.ts +16 -0
  245. package/workflow/lifecycle-projection.ts +37 -0
  246. package/workflow/model-fallback.ts +17 -0
  247. package/workflow/pi-session-fork.ts +96 -0
  248. package/workflow/run-artifacts.ts +36 -0
  249. package/workflow/run-cleanup.ts +315 -0
  250. package/workflow/run-gate.ts +122 -0
  251. package/workflow/run-store.ts +3890 -0
  252. package/workflow/spawn-confirmation.ts +305 -0
  253. package/workflow/system-process-inspector.ts +142 -0
  254. package/workflow/worker-child-extension.ts +193 -0
  255. package/workflow/worker-gate.ts +238 -0
  256. package/workflow/worker-launch.ts +485 -0
  257. package/workflow/worker-model-catalog.ts +165 -0
  258. package/workflow/worker-process-supervisor.ts +1504 -0
  259. package/workflow/worker-prompt-capsule.ts +81 -0
  260. package/workflow/worker-role-presets.ts +241 -0
  261. package/workflow/workflow-doctor.ts +400 -0
  262. package/workflow/workflow-lease.ts +905 -0
  263. package/workflow/workflow-types.ts +367 -0
  264. package/workflow/workspace-paths.ts +32 -0
@@ -0,0 +1,65 @@
1
+ import type { AttemptId, ModelSpec, WorkerContract, WorkerLaunchContractV1 } from "./workflow-types.js";
2
+ export interface WorkerLaunchAuthority {
3
+ readonly piExecutable: string;
4
+ readonly childExtensionPath: string;
5
+ readonly grantedCapabilities: readonly string[];
6
+ readonly capabilityTools: Readonly<Record<string, readonly string[]>>;
7
+ readonly availableModels: readonly {
8
+ readonly provider: string;
9
+ readonly id: string;
10
+ readonly thinkingLevels: readonly string[];
11
+ readonly defaultThinkingLevel?: string;
12
+ }[];
13
+ readonly projectTrust: "trusted" | "untrusted" | "unresolved";
14
+ readonly requiresProjectResources: boolean;
15
+ readonly inheritedEnvironment: Readonly<Record<string, string | undefined>>;
16
+ }
17
+ export interface WorkerLaunchAttemptIdentity {
18
+ readonly attemptId: AttemptId;
19
+ readonly workerAttemptGeneration: string;
20
+ readonly supervisorGeneration: string;
21
+ }
22
+ export interface PiProcessLaunchCommand {
23
+ readonly executable: string;
24
+ readonly args: readonly string[];
25
+ readonly cwd: string;
26
+ readonly env: Readonly<Record<string, string>>;
27
+ readonly parentLivenessFd: 3;
28
+ readonly launchContract: WorkerLaunchContractV1;
29
+ readonly launchContractPath: string;
30
+ }
31
+ export interface ResolvedWorkerLaunch {
32
+ readonly contract: WorkerLaunchContractV1;
33
+ readonly command: PiProcessLaunchCommand;
34
+ }
35
+ export interface WorkerChildContext {
36
+ readonly mode: "tui" | "rpc" | "json" | "print";
37
+ readonly cwd: string;
38
+ readonly model: {
39
+ readonly provider: string;
40
+ readonly id: string;
41
+ } | undefined;
42
+ readonly thinkingLevel: string | undefined;
43
+ readonly projectTrusted: boolean;
44
+ readonly tools?: readonly string[];
45
+ readonly environmentKeys: readonly string[];
46
+ }
47
+ export declare class WorkerLaunchValidationError extends Error {
48
+ constructor(message: string);
49
+ }
50
+ export declare function parseWorkerLaunchContractV1(value: unknown): WorkerLaunchContractV1;
51
+ export declare function resolveWorkerLaunch(input: {
52
+ readonly contract: WorkerContract;
53
+ readonly attempt: WorkerLaunchAttemptIdentity;
54
+ readonly depth: number;
55
+ readonly prompt: string;
56
+ readonly sessionDirectory: string;
57
+ readonly launchContractPath: string;
58
+ readonly continuedSessionFile?: string;
59
+ readonly forkedSessionFile?: string;
60
+ readonly modelOverride?: ModelSpec;
61
+ readonly authority: WorkerLaunchAuthority;
62
+ }): ResolvedWorkerLaunch;
63
+ export declare function validateWorkerChildContext(contract: WorkerLaunchContractV1, context: WorkerChildContext): void;
64
+ export declare function isReceiverAuthorityEnvironmentKey(key: string): boolean;
65
+ //# sourceMappingURL=worker-launch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-launch.d.ts","sourceRoot":"","sources":["../../workflow/worker-launch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACT,cAAc,EACd,sBAAsB,EACvB,MAAM,qBAAqB,CAAC;AAW7B,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IAChD,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;IACtE,QAAQ,CAAC,eAAe,EAAE,SAAS;QACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;QAC3C,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;KACxC,EAAE,CAAC;IACJ,QAAQ,CAAC,YAAY,EAAE,SAAS,GAAG,WAAW,GAAG,YAAY,CAAC;IAC9D,QAAQ,CAAC,wBAAwB,EAAE,OAAO,CAAC;IAC3C,QAAQ,CAAC,oBAAoB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;CAC7E;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;CACvC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/C,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,sBAAsB,CAAC;IAChD,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC;CAC1C;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;IAChD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IAC/E,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7C;AAED,qBAAa,2BAA4B,SAAQ,KAAK;gBACxC,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,sBAAsB,CAmGlF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,2BAA2B,CAAC;IAC9C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;CAC3C,GAAG,oBAAoB,CA6HvB;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,sBAAsB,EAChC,OAAO,EAAE,kBAAkB,GAC1B,IAAI,CA+BN;AAED,wBAAgB,iCAAiC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAItE"}
@@ -0,0 +1,338 @@
1
+ import { isAbsolute, normalize, relative, sep } from "node:path";
2
+ import { parseBudgetLimit } from "./budget.js";
3
+ const FORBIDDEN_EXACT_ENVIRONMENT_KEYS = new Set([
4
+ "PI_SESSION_ID",
5
+ "PI_SESSION_FILE",
6
+ "PI_PROVIDER",
7
+ "PI_MODEL",
8
+ "PI_REASONING_LEVEL",
9
+ ]);
10
+ export class WorkerLaunchValidationError extends Error {
11
+ constructor(message) {
12
+ super(message);
13
+ this.name = "WorkerLaunchValidationError";
14
+ }
15
+ }
16
+ export function parseWorkerLaunchContractV1(value) {
17
+ const object = strictObject(value, [
18
+ "schema", "runId", "workerId", "attemptId", "workerAttemptGeneration",
19
+ "supervisorGeneration", "transportMode", "channel", "depth", "model", "capabilities",
20
+ "tools", "workspace", "sessionDirectory", "projectTrust", "parentLivenessFd", "budget",
21
+ "sideEffectPolicy", "continuedSessionFile", "forkedSessionFile",
22
+ ], "worker launch contract");
23
+ if (object["schema"] !== 1)
24
+ throw new WorkerLaunchValidationError("Worker launch schema must be 1");
25
+ if (object["transportMode"] !== "send-only") {
26
+ throw new WorkerLaunchValidationError("Worker launch transport mode must be send-only");
27
+ }
28
+ if (object["parentLivenessFd"] !== 3) {
29
+ throw new WorkerLaunchValidationError("Worker parent-liveness descriptor must be 3");
30
+ }
31
+ const model = strictObject(object["model"], ["provider", "id", "thinkingLevel"], "worker model");
32
+ const workspace = strictObject(object["workspace"], ["path", "mode", "worktreePath"], "worker workspace");
33
+ const budget = strictObject(object["budget"], ["maxAttempts", "maxWallClockMs", "maxTokens", "maxCostUsd", "maxOutputBytes"], "worker budget");
34
+ const thinkingLevel = requiredString(model["thinkingLevel"], "worker thinking level");
35
+ const worktreePath = workspace["worktreePath"] === undefined
36
+ ? undefined
37
+ : absolutePath(String(workspace["worktreePath"]), "worker worktree path");
38
+ const continuedSessionFile = object["continuedSessionFile"] === undefined
39
+ ? undefined
40
+ : absolutePath(String(object["continuedSessionFile"]), "continued worker session file");
41
+ const forkedSessionFile = object["forkedSessionFile"] === undefined
42
+ ? undefined
43
+ : absolutePath(String(object["forkedSessionFile"]), "forked worker session file");
44
+ const sessionDirectory = absolutePath(String(object["sessionDirectory"]), "worker session directory");
45
+ if (continuedSessionFile !== undefined && !pathIsInside(sessionDirectory, continuedSessionFile)) {
46
+ throw new WorkerLaunchValidationError("Continued worker session file must be inside the leased session directory");
47
+ }
48
+ if (forkedSessionFile !== undefined && !pathIsInside(sessionDirectory, forkedSessionFile)) {
49
+ throw new WorkerLaunchValidationError("Forked worker session file must be inside the leased session directory");
50
+ }
51
+ if (continuedSessionFile !== undefined && forkedSessionFile !== undefined) {
52
+ throw new WorkerLaunchValidationError("Worker launch cannot continue and fork a session together");
53
+ }
54
+ return {
55
+ schema: 1,
56
+ runId: prefixedString(object["runId"], "run", "run ID"),
57
+ workerId: prefixedString(object["workerId"], "worker", "worker ID"),
58
+ attemptId: prefixedString(object["attemptId"], "attempt", "attempt ID"),
59
+ workerAttemptGeneration: requiredString(object["workerAttemptGeneration"], "worker attempt generation"),
60
+ supervisorGeneration: requiredString(object["supervisorGeneration"], "supervisor generation"),
61
+ transportMode: "send-only",
62
+ channel: exactString(object["channel"], ["json-result", "rpc"], "worker channel"),
63
+ depth: positiveIntegerValue(object["depth"], "worker depth"),
64
+ model: {
65
+ provider: requiredString(model["provider"], "worker model provider"),
66
+ id: requiredString(model["id"], "worker model ID"),
67
+ thinkingLevel,
68
+ },
69
+ capabilities: stringArray(object["capabilities"], "worker capabilities"),
70
+ tools: stringArray(object["tools"], "worker tools"),
71
+ workspace: {
72
+ path: absolutePath(String(workspace["path"]), "worker workspace path"),
73
+ mode: exactString(workspace["mode"], ["read-only", "mutating"], "workspace mode"),
74
+ ...(worktreePath ? { worktreePath } : {}),
75
+ },
76
+ sessionDirectory,
77
+ ...(continuedSessionFile ? { continuedSessionFile } : {}),
78
+ ...(forkedSessionFile ? { forkedSessionFile } : {}),
79
+ projectTrust: exactString(object["projectTrust"], ["trusted", "untrusted"], "worker project trust"),
80
+ parentLivenessFd: 3,
81
+ budget: {
82
+ maxAttempts: parseBudgetLimit(budget["maxAttempts"], "worker maxAttempts", { integer: true, allowLegacyNumber: true }),
83
+ maxWallClockMs: parseBudgetLimit(budget["maxWallClockMs"], "worker maxWallClockMs", { integer: true, allowLegacyNumber: true }),
84
+ maxTokens: parseBudgetLimit(budget["maxTokens"], "worker maxTokens", { integer: true, allowLegacyNumber: true }),
85
+ maxCostUsd: budget["maxCostUsd"] === undefined
86
+ ? { kind: "unlimited" }
87
+ : parseBudgetLimit(budget["maxCostUsd"], "worker maxCostUsd", { integer: false, allowLegacyNumber: true }),
88
+ maxOutputBytes: budget["maxOutputBytes"] === undefined
89
+ ? { kind: "unlimited" }
90
+ : parseBudgetLimit(budget["maxOutputBytes"], "worker maxOutputBytes", { integer: true, allowLegacyNumber: true }),
91
+ },
92
+ sideEffectPolicy: exactString(object["sideEffectPolicy"], ["none", "idempotent", "reconcilable", "external"], "worker side-effect policy"),
93
+ };
94
+ }
95
+ export function resolveWorkerLaunch(input) {
96
+ const { contract, attempt, authority } = input;
97
+ const prompt = requireNonEmpty(input.prompt, "worker prompt");
98
+ const depth = positiveInteger(input.depth, "worker depth");
99
+ const sessionDirectory = absolutePath(input.sessionDirectory, "worker session directory");
100
+ const launchContractPath = absolutePath(input.launchContractPath, "worker launch-contract path");
101
+ const continuedSessionFile = input.continuedSessionFile === undefined
102
+ ? undefined
103
+ : absolutePath(input.continuedSessionFile, "continued worker session file");
104
+ const forkedSessionFile = input.forkedSessionFile === undefined
105
+ ? undefined
106
+ : absolutePath(input.forkedSessionFile, "forked worker session file");
107
+ if (continuedSessionFile !== undefined
108
+ && !pathIsInside(sessionDirectory, continuedSessionFile)) {
109
+ throw new WorkerLaunchValidationError("Continued worker session file must be inside the leased session directory");
110
+ }
111
+ if (forkedSessionFile !== undefined && !pathIsInside(sessionDirectory, forkedSessionFile)) {
112
+ throw new WorkerLaunchValidationError("Forked worker session file must be inside the leased session directory");
113
+ }
114
+ if (continuedSessionFile !== undefined && forkedSessionFile !== undefined) {
115
+ throw new WorkerLaunchValidationError("Worker launch cannot continue and fork a session together");
116
+ }
117
+ const executable = absolutePath(authority.piExecutable, "pi executable");
118
+ const childExtensionPath = absolutePath(authority.childExtensionPath, "worker child extension");
119
+ const granted = new Set(authority.grantedCapabilities);
120
+ for (const capability of contract.capabilities) {
121
+ const authorityCapability = capability.startsWith("message_worker:")
122
+ ? "message_worker"
123
+ : capability;
124
+ if (!granted.has(authorityCapability)) {
125
+ throw new WorkerLaunchValidationError(`Worker capability is not granted: ${capability}`);
126
+ }
127
+ if (!(authorityCapability in authority.capabilityTools)) {
128
+ throw new WorkerLaunchValidationError(`Worker capability has no tool projection: ${capability}`);
129
+ }
130
+ }
131
+ if (contract.channel === "json-result"
132
+ && contract.capabilities.some((capability) => capability === "worker.steer"
133
+ || capability === "driver-inbox.forward"
134
+ || capability.startsWith("message_worker:"))) {
135
+ throw new WorkerLaunchValidationError("Live steering and inbound forwarding require the RPC channel");
136
+ }
137
+ const requestedModel = input.modelOverride ?? contract.model;
138
+ const selectedModel = authority.availableModels.find((model) => model.provider === requestedModel.provider && model.id === requestedModel.id);
139
+ if (!selectedModel) {
140
+ throw new WorkerLaunchValidationError(`Worker model is not available: ${requestedModel.provider}/${requestedModel.id}`);
141
+ }
142
+ const thinkingLevel = requestedModel.thinkingLevel ?? selectedModel.defaultThinkingLevel;
143
+ if (thinkingLevel === undefined || !selectedModel.thinkingLevels.includes(thinkingLevel)) {
144
+ throw new WorkerLaunchValidationError(`Worker thinking level is unavailable or unresolved for ${requestedModel.provider}/${requestedModel.id}`);
145
+ }
146
+ if (authority.requiresProjectResources && authority.projectTrust !== "trusted") {
147
+ throw new WorkerLaunchValidationError("Required project resources cannot be loaded because project trust is unresolved or denied");
148
+ }
149
+ const projectTrust = authority.requiresProjectResources ? "trusted" : "untrusted";
150
+ const tools = [...new Set([
151
+ ...contract.capabilities.flatMap((capability) => authority.capabilityTools[capability.startsWith("message_worker:") ? "message_worker" : capability] ?? []),
152
+ ...(contract.channel === "rpc" ? ["wait_for_input"] : []),
153
+ ])].sort();
154
+ const launchContract = {
155
+ schema: 1,
156
+ runId: contract.runId,
157
+ workerId: contract.workerId,
158
+ attemptId: attempt.attemptId,
159
+ workerAttemptGeneration: requireNonEmpty(attempt.workerAttemptGeneration, "worker attempt generation"),
160
+ supervisorGeneration: requireNonEmpty(attempt.supervisorGeneration, "supervisor generation"),
161
+ transportMode: "send-only",
162
+ channel: contract.channel,
163
+ depth,
164
+ model: {
165
+ provider: requestedModel.provider,
166
+ id: requestedModel.id,
167
+ thinkingLevel,
168
+ },
169
+ capabilities: [...contract.capabilities],
170
+ tools,
171
+ workspace: contract.workspace,
172
+ sessionDirectory,
173
+ ...(continuedSessionFile ? { continuedSessionFile } : {}),
174
+ ...(forkedSessionFile ? { forkedSessionFile } : {}),
175
+ projectTrust,
176
+ parentLivenessFd: 3,
177
+ budget: contract.budget,
178
+ sideEffectPolicy: contract.sideEffectPolicy,
179
+ };
180
+ const args = buildPiArguments(launchContract, childExtensionPath, authority.requiresProjectResources, prompt);
181
+ return {
182
+ contract: launchContract,
183
+ command: {
184
+ executable,
185
+ args,
186
+ cwd: absolutePath(contract.workspace.worktreePath ?? contract.workspace.path, "worker cwd"),
187
+ env: childEnvironment(authority.inheritedEnvironment, launchContractPath),
188
+ parentLivenessFd: 3,
189
+ launchContract,
190
+ launchContractPath,
191
+ },
192
+ };
193
+ }
194
+ export function validateWorkerChildContext(contract, context) {
195
+ const expectedMode = contract.channel === "json-result" ? "json" : "rpc";
196
+ if (context.mode !== expectedMode) {
197
+ throw new WorkerLaunchValidationError(`Worker mode parity mismatch: expected ${expectedMode}, observed ${context.mode}`);
198
+ }
199
+ if (normalize(context.cwd) !== normalize(contract.workspace.worktreePath ?? contract.workspace.path)) {
200
+ throw new WorkerLaunchValidationError("Worker cwd parity mismatch");
201
+ }
202
+ if (!context.model
203
+ || context.model.provider !== contract.model.provider
204
+ || context.model.id !== contract.model.id) {
205
+ throw new WorkerLaunchValidationError("Worker model parity mismatch");
206
+ }
207
+ if (context.thinkingLevel !== contract.model.thinkingLevel) {
208
+ throw new WorkerLaunchValidationError("Worker thinking-level parity mismatch");
209
+ }
210
+ if (context.projectTrusted !== (contract.projectTrust === "trusted")) {
211
+ throw new WorkerLaunchValidationError("Worker project-trust parity mismatch");
212
+ }
213
+ const forbidden = context.environmentKeys.filter(isReceiverAuthorityEnvironmentKey);
214
+ if (forbidden.length > 0) {
215
+ throw new WorkerLaunchValidationError(`Worker inherited receiver authority: ${forbidden.sort().join(", ")}`);
216
+ }
217
+ if (context.tools !== undefined
218
+ && canonicalStrings(context.tools) !== canonicalStrings(contract.tools)) {
219
+ throw new WorkerLaunchValidationError("Worker tool parity mismatch");
220
+ }
221
+ }
222
+ export function isReceiverAuthorityEnvironmentKey(key) {
223
+ return key.startsWith("AM_")
224
+ || key.startsWith("ORCH_")
225
+ || FORBIDDEN_EXACT_ENVIRONMENT_KEYS.has(key);
226
+ }
227
+ function buildPiArguments(contract, childExtensionPath, requiresProjectResources, prompt) {
228
+ const args = [
229
+ "--provider", contract.model.provider,
230
+ "--model", contract.model.id,
231
+ "--thinking", contract.model.thinkingLevel,
232
+ "--session-dir", contract.sessionDirectory,
233
+ ...((contract.continuedSessionFile ?? contract.forkedSessionFile)
234
+ ? ["--session", (contract.continuedSessionFile ?? contract.forkedSessionFile)]
235
+ : []),
236
+ "--name", `pi-amq:${contract.workerId}`,
237
+ requiresProjectResources ? "--approve" : "--no-approve",
238
+ "--no-extensions",
239
+ "-e", childExtensionPath,
240
+ ];
241
+ if (!requiresProjectResources) {
242
+ args.push("--no-skills", "--no-prompt-templates", "--no-context-files");
243
+ }
244
+ if (contract.tools.length === 0)
245
+ args.push("--no-tools");
246
+ else
247
+ args.push("--tools", contract.tools.join(","));
248
+ args.push("--mode", contract.channel === "json-result" ? "json" : "rpc");
249
+ if (contract.channel === "json-result")
250
+ args.push(prompt);
251
+ return args;
252
+ }
253
+ function pathIsInside(directory, candidate) {
254
+ const child = relative(directory, candidate);
255
+ return child.length > 0
256
+ && child !== ".."
257
+ && !child.startsWith(`..${sep}`)
258
+ && !isAbsolute(child);
259
+ }
260
+ function childEnvironment(inherited, launchContractPath) {
261
+ const env = {};
262
+ for (const [key, value] of Object.entries(inherited)) {
263
+ if (value !== undefined
264
+ && !isReceiverAuthorityEnvironmentKey(key)
265
+ && !key.startsWith("PI_AMQ_"))
266
+ env[key] = value;
267
+ }
268
+ env["PI_AMQ_WORKER_LAUNCH_CONTRACT"] = launchContractPath;
269
+ env["PI_AMQ_PARENT_LIVENESS_FD"] = "3";
270
+ return env;
271
+ }
272
+ function canonicalStrings(values) {
273
+ return JSON.stringify([...values].sort());
274
+ }
275
+ function strictObject(value, allowedKeys, name) {
276
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
277
+ throw new WorkerLaunchValidationError(`${name} must be an object`);
278
+ }
279
+ const object = value;
280
+ const unknown = Object.keys(object).filter((key) => !allowedKeys.includes(key));
281
+ if (unknown.length > 0) {
282
+ throw new WorkerLaunchValidationError(`${name} contains unknown fields: ${unknown.join(", ")}`);
283
+ }
284
+ return object;
285
+ }
286
+ function requiredString(value, name) {
287
+ if (typeof value !== "string" || value.length === 0) {
288
+ throw new WorkerLaunchValidationError(`${name} must be a non-empty string`);
289
+ }
290
+ return value;
291
+ }
292
+ function prefixedString(value, prefix, name) {
293
+ const parsed = requiredString(value, name);
294
+ if (!parsed.startsWith(`${prefix}_`)) {
295
+ throw new WorkerLaunchValidationError(`${name} must start with ${prefix}_`);
296
+ }
297
+ return parsed;
298
+ }
299
+ function exactString(value, allowed, name) {
300
+ const parsed = requiredString(value, name);
301
+ if (!allowed.includes(parsed))
302
+ throw new WorkerLaunchValidationError(`${name} is invalid`);
303
+ return parsed;
304
+ }
305
+ function stringArray(value, name) {
306
+ if (!Array.isArray(value))
307
+ throw new WorkerLaunchValidationError(`${name} must be an array`);
308
+ return value.map((item) => requiredString(item, `${name} entry`));
309
+ }
310
+ function positiveIntegerValue(value, name) {
311
+ if (typeof value !== "number" || !Number.isSafeInteger(value) || value <= 0) {
312
+ throw new WorkerLaunchValidationError(`${name} must be a positive integer`);
313
+ }
314
+ return value;
315
+ }
316
+ function positiveFiniteNumber(value, name) {
317
+ if (typeof value !== "number" || !Number.isFinite(value) || value <= 0) {
318
+ throw new WorkerLaunchValidationError(`${name} must be positive`);
319
+ }
320
+ return value;
321
+ }
322
+ function absolutePath(value, name) {
323
+ if (!isAbsolute(value))
324
+ throw new WorkerLaunchValidationError(`${name} must be absolute`);
325
+ return normalize(value);
326
+ }
327
+ function requireNonEmpty(value, name) {
328
+ if (value.length === 0)
329
+ throw new WorkerLaunchValidationError(`${name} is required`);
330
+ return value;
331
+ }
332
+ function positiveInteger(value, name) {
333
+ if (!Number.isSafeInteger(value) || value <= 0) {
334
+ throw new WorkerLaunchValidationError(`${name} must be a positive integer`);
335
+ }
336
+ return value;
337
+ }
338
+ //# sourceMappingURL=worker-launch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-launch.js","sourceRoot":"","sources":["../../workflow/worker-launch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ export interface LiveWorkerModel {
2
+ readonly provider: string;
3
+ readonly id: string;
4
+ readonly name: string;
5
+ readonly cost: number;
6
+ readonly contextWindow: number;
7
+ readonly maxTokens: number;
8
+ readonly reasoning: boolean;
9
+ readonly thinkingLevel?: string;
10
+ }
11
+ interface ModelSelectionInput {
12
+ readonly difficulty: "easy" | "medium" | "hard" | undefined;
13
+ readonly available: readonly LiveWorkerModel[];
14
+ readonly scoped?: readonly LiveWorkerModel[];
15
+ readonly current: LiveWorkerModel;
16
+ }
17
+ export interface WorkerModelSelection {
18
+ readonly model: LiveWorkerModel;
19
+ readonly reason: "difficulty-tier" | "current-model-fallback";
20
+ }
21
+ export declare function selectWorkerModel(input: ModelSelectionInput): WorkerModelSelection;
22
+ export declare function floorAuditorModel(selected: LiveWorkerModel, implementer: LiveWorkerModel): LiveWorkerModel;
23
+ interface ModelGuidanceInput {
24
+ readonly available: readonly LiveWorkerModel[];
25
+ readonly current: LiveWorkerModel;
26
+ readonly globalNotesPath: string;
27
+ readonly projectNotesPath: string;
28
+ readonly projectTrusted: boolean;
29
+ }
30
+ export interface WorkerModelGuidance {
31
+ readonly text: string;
32
+ readonly notices: readonly string[];
33
+ }
34
+ export declare function buildWorkerModelGuidance(input: ModelGuidanceInput): Promise<WorkerModelGuidance>;
35
+ export {};
36
+ //# sourceMappingURL=worker-model-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-model-catalog.d.ts","sourceRoot":"","sources":["../../workflow/worker-model-catalog.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;IAC5D,QAAQ,CAAC,SAAS,EAAE,SAAS,eAAe,EAAE,CAAC;IAC/C,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;CACnC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG,wBAAwB,CAAC;CAC/D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,GAAG,oBAAoB,CAelF;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,eAAe,EACzB,WAAW,EAAE,eAAe,GAC3B,eAAe,CAEjB;AAED,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,SAAS,EAAE,SAAS,eAAe,EAAE,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,mBAAmB,CAAC,CA0B9B"}
@@ -0,0 +1,105 @@
1
+ import { readFile } from "node:fs/promises";
2
+ export function selectWorkerModel(input) {
3
+ const candidates = input.scoped && input.scoped.length > 0 ? input.scoped : input.available;
4
+ if (!input.difficulty || candidates.length === 0) {
5
+ return { model: input.current, reason: "current-model-fallback" };
6
+ }
7
+ const ordered = [...candidates].sort(input.difficulty === "easy" ? compareEconomyTier : compareCapabilityTier);
8
+ const index = input.difficulty === "hard"
9
+ ? ordered.length - 1
10
+ : input.difficulty === "medium"
11
+ ? Math.floor((ordered.length - 1) / 2)
12
+ : 0;
13
+ return { model: ordered[index], reason: "difficulty-tier" };
14
+ }
15
+ export function floorAuditorModel(selected, implementer) {
16
+ return compareCapabilityTier(selected, implementer) < 0 ? implementer : selected;
17
+ }
18
+ export async function buildWorkerModelGuidance(input) {
19
+ const malformed = [];
20
+ const globalRules = await readNoteRules(input.globalNotesPath, malformed);
21
+ const projectRules = input.projectTrusted
22
+ ? await readNoteRules(input.projectNotesPath, malformed)
23
+ : [];
24
+ const rows = input.available.map((model) => {
25
+ const key = modelKey(model);
26
+ const globalNote = lastMatchingNote(globalRules, key);
27
+ const projectNote = lastMatchingNote(projectRules, key);
28
+ const note = projectNote ?? globalNote;
29
+ return `- ${key}: ${model.name}; context=${model.contextWindow}; max_output=${model.maxTokens}; reasoning=${model.reasoning ? "yes" : "no"}; cost=${model.cost}${note ? `; note=${note}` : ""}`;
30
+ });
31
+ const currentKey = modelKey(input.current);
32
+ return {
33
+ text: [
34
+ "Live worker model catalog:",
35
+ ...rows,
36
+ `Current model fallback: ${currentKey}`,
37
+ "Choose easy, medium, or hard mechanically; role labels do not select a model family.",
38
+ ].join("\n"),
39
+ notices: malformed.length > 0
40
+ ? [`Ignored ${malformed.length} malformed model note line(s).`]
41
+ : [],
42
+ };
43
+ }
44
+ async function readNoteRules(path, malformed) {
45
+ let content;
46
+ try {
47
+ content = await readFile(path, "utf8");
48
+ }
49
+ catch (error) {
50
+ if (isNotFound(error))
51
+ return [];
52
+ throw error;
53
+ }
54
+ const rules = [];
55
+ for (const rawLine of content.split(/\r?\n/u)) {
56
+ const line = rawLine.trim();
57
+ if (!line || line.startsWith("#"))
58
+ continue;
59
+ const separator = line.indexOf("->");
60
+ if (separator <= 0 || separator === line.length - 2) {
61
+ malformed.push(line);
62
+ continue;
63
+ }
64
+ const pattern = line.slice(0, separator).trim();
65
+ const note = line.slice(separator + 2).trim();
66
+ if (!pattern || !note || /\s/u.test(pattern)) {
67
+ malformed.push(line);
68
+ continue;
69
+ }
70
+ rules.push({ pattern, note });
71
+ }
72
+ return rules;
73
+ }
74
+ function lastMatchingNote(rules, key) {
75
+ let found;
76
+ for (const rule of rules) {
77
+ if (matchesPattern(rule.pattern, key))
78
+ found = rule.note;
79
+ }
80
+ return found;
81
+ }
82
+ function matchesPattern(pattern, key) {
83
+ const escaped = pattern.replace(/[.+?^${}()|[\]\\]/gu, "\\$&").replaceAll("*", ".*");
84
+ return new RegExp(`^${escaped}$`, "u").test(key);
85
+ }
86
+ function modelKey(model) {
87
+ return `${model.provider}/${model.id}`;
88
+ }
89
+ function compareCapabilityTier(left, right) {
90
+ return (Number(left.reasoning) - Number(right.reasoning) ||
91
+ left.contextWindow - right.contextWindow ||
92
+ left.maxTokens - right.maxTokens ||
93
+ left.cost - right.cost ||
94
+ modelKey(left).localeCompare(modelKey(right)));
95
+ }
96
+ function compareEconomyTier(left, right) {
97
+ return left.cost - right.cost || compareCapabilityTier(left, right);
98
+ }
99
+ function isNotFound(error) {
100
+ return (typeof error === "object" &&
101
+ error !== null &&
102
+ "code" in error &&
103
+ error.code === "ENOENT");
104
+ }
105
+ //# sourceMappingURL=worker-model-catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-model-catalog.js","sourceRoot":"","sources":["../../workflow/worker-model-catalog.ts"],"names":[],"mappings":"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"}