@powerhousedao/ph-clint-app 0.1.0-dev.90 → 0.1.0-dev.92

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 (525) hide show
  1. package/dist/browser/connect-ayTpkZ7D.js.map +1 -1
  2. package/dist/browser/document-models/index.js +1 -1
  3. package/dist/browser/document-models/ph-clint-project/index.js +2 -2
  4. package/dist/browser/{editor-Bp2wUo8R.js → editor-BmNIZjpu.js} +3 -3
  5. package/dist/browser/{editor-Bp2wUo8R.js.map → editor-BmNIZjpu.js.map} +1 -1
  6. package/dist/browser/editors/ph-clint-project-editor/module.js +1 -1
  7. package/dist/browser/factory-6X-atFO0.js.map +1 -1
  8. package/dist/browser/index.js +6 -2
  9. package/dist/browser/index.js.map +1 -1
  10. package/dist/browser/{module-B16ZT36n.js → module-BzVWlfCE.js} +19 -7
  11. package/dist/browser/module-BzVWlfCE.js.map +1 -0
  12. package/dist/browser/{ph-clint-project-CHq59BKL.js → ph-clint-project-1Xn2yUDQ.js} +3 -15
  13. package/dist/browser/ph-clint-project-1Xn2yUDQ.js.map +1 -0
  14. package/dist/browser/subgraphs/index.js +8 -0
  15. package/dist/browser/subgraphs/index.js.map +1 -0
  16. package/dist/browser/switchboard-DyNO-2Mk.js.map +1 -1
  17. package/dist/connect/__react__/chunks/chunk-DV4czemZ.js +1 -0
  18. package/dist/connect/__react__/chunks/{react-DInDUHsR.js → react-6__-7Yi6.js} +1 -1
  19. package/dist/connect/__react__/chunks/{react-dom-QyonbUot.js → react-dom-D8SQgl6v.js} +1 -1
  20. package/dist/connect/__react__/chunks/{react-dom-server-legacy.browser.production-KSpBOUM7.js → react-dom-server-legacy.browser.production-tEo0fxOJ.js} +2 -2
  21. package/dist/connect/__react__/chunks/{react-dom-server.browser.production-NeoI_ldE.js → react-dom-server.browser.production-CWSDDfJ2.js} +2 -2
  22. package/dist/connect/__react__/chunks/{react-dom-server.edge.production-Djx8cQAo.js → react-dom-server.edge.production-K2OjKVH3.js} +2 -2
  23. package/dist/connect/__react__/chunks/{scheduler-CxGS3ZcN.js → scheduler-C_FnfDtC.js} +1 -1
  24. package/dist/connect/__react__/chunks/server.browser-Bu7JkTx-.js +1 -0
  25. package/dist/connect/__react__/chunks/static.browser-C6ypYl2H.js +1 -0
  26. package/dist/connect/__react__/react/compiler-runtime.js +1 -1
  27. package/dist/connect/__react__/react/jsx-dev-runtime.js +1 -1
  28. package/dist/connect/__react__/react/jsx-runtime.js +1 -1
  29. package/dist/connect/__react__/react-dom/client.js +1 -1
  30. package/dist/connect/__react__/react-dom/profiling.js +1 -1
  31. package/dist/connect/__react__/react-dom/server.browser.js +1 -1
  32. package/dist/connect/__react__/react-dom/server.edge.js +1 -1
  33. package/dist/connect/__react__/react-dom/server.js +1 -1
  34. package/dist/connect/__react__/react-dom/static.browser.js +1 -1
  35. package/dist/connect/__react__/react-dom/static.edge.js +1 -1
  36. package/dist/connect/__react__/react-dom/static.js +1 -1
  37. package/dist/connect/__react__/react-dom/test-utils.js +1 -1
  38. package/dist/connect/__react__/react-dom.js +1 -1
  39. package/dist/connect/__react__/react.js +1 -1
  40. package/dist/connect/assets/{ClearStorageModal-CXoNWmRe-D3ifKRm-.js → ClearStorageModal-CXoNWmRe-UB24DImi.js} +2 -2
  41. package/dist/connect/assets/{ClearStorageModal-CXoNWmRe-D3ifKRm-.js.map → ClearStorageModal-CXoNWmRe-UB24DImi.js.map} +1 -1
  42. package/dist/connect/assets/{DebugSettingsModal-5SDhy5gt-DLMPdDQB.js → DebugSettingsModal-5SDhy5gt-D0iQimch.js} +2 -2
  43. package/dist/connect/assets/{DebugSettingsModal-5SDhy5gt-DLMPdDQB.js.map → DebugSettingsModal-5SDhy5gt-D0iQimch.js.map} +1 -1
  44. package/dist/connect/assets/{InspectorModal-BsSihzuc-B0n5gbGB.js → InspectorModal-BsSihzuc-Bavb3r9J.js} +2 -2
  45. package/dist/connect/assets/{InspectorModal-BsSihzuc-B0n5gbGB.js.map → InspectorModal-BsSihzuc-Bavb3r9J.js.map} +1 -1
  46. package/dist/connect/assets/{SettingsModal-S_A5qf95-uzigz0nk.js → SettingsModal-S_A5qf95-q6y3kJdv.js} +2 -2
  47. package/dist/connect/assets/{SettingsModal-S_A5qf95-uzigz0nk.js.map → SettingsModal-S_A5qf95-q6y3kJdv.js.map} +1 -1
  48. package/dist/connect/assets/{components-ByEUkO4U-xPZUVkzr.js → components-ByEUkO4U-BWcOYd4s.js} +4 -4
  49. package/dist/connect/assets/{components-ByEUkO4U-xPZUVkzr.js.map → components-ByEUkO4U-BWcOYd4s.js.map} +1 -1
  50. package/dist/connect/assets/connect-DGfzdELb.js.map +1 -1
  51. package/dist/connect/assets/{connect.config-Bt4pvvWV-Dj3FkjaZ.js → connect.config-Bt4pvvWV-CRF9MQO6.js} +2 -2
  52. package/dist/connect/assets/{connect.config-Bt4pvvWV-Dj3FkjaZ.js.map → connect.config-Bt4pvvWV-CRF9MQO6.js.map} +1 -1
  53. package/dist/connect/assets/editor-Bds50MuL.js +2 -0
  54. package/dist/connect/assets/{editor-BaQ62r3i.js.map → editor-Bds50MuL.js.map} +1 -1
  55. package/dist/connect/assets/hooks-CE3gZpe3.js +2 -0
  56. package/dist/connect/assets/hooks-CE3gZpe3.js.map +1 -0
  57. package/dist/connect/assets/{ph-clint-project-p1zY6e17.js → index-D8arPQE9.js} +4 -3
  58. package/dist/connect/assets/index-D8arPQE9.js.map +1 -0
  59. package/dist/connect/assets/index-Skfhz8KO.css +2 -0
  60. package/dist/connect/assets/{load-BWibkoFV-CDRjWwYQ.js → load-BWibkoFV-CryaAPih.js} +2 -2
  61. package/dist/connect/assets/{load-BWibkoFV-CDRjWwYQ.js.map → load-BWibkoFV-CryaAPih.js.map} +1 -1
  62. package/dist/connect/assets/{module-7zCQE1MC.js → module-BA2WsOHG.js} +2 -2
  63. package/dist/connect/assets/{module-7zCQE1MC.js.map → module-BA2WsOHG.js.map} +1 -1
  64. package/dist/connect/assets/{pglite-seed-BWk7yOwr-b2F0oJiP.js → pglite-seed-BWk7yOwr-CPFa41Bn.js} +2 -2
  65. package/dist/connect/assets/{pglite-seed-BWk7yOwr-b2F0oJiP.js.map → pglite-seed-BWk7yOwr-CPFa41Bn.js.map} +1 -1
  66. package/dist/connect/assets/{reactor-BxNvHOKC-CeMF1M2u.js → reactor-BxNvHOKC-DRYvJVeI.js} +2 -2
  67. package/dist/connect/assets/{reactor-BxNvHOKC-CeMF1M2u.js.map → reactor-BxNvHOKC-DRYvJVeI.js.map} +1 -1
  68. package/dist/connect/assets/{registerServiceWorker-D9l1kja7-DG3DqQna.js → registerServiceWorker-D9l1kja7-BDpTOs18.js} +2 -2
  69. package/dist/connect/assets/{registerServiceWorker-D9l1kja7-DG3DqQna.js.map → registerServiceWorker-D9l1kja7-BDpTOs18.js.map} +1 -1
  70. package/dist/connect/assets/switchboard-CPQzDmSh.js.map +1 -1
  71. package/dist/connect/index.html +6 -9
  72. package/dist/connect/powerhouse.config.json +3 -2
  73. package/dist/node/connect-CIR7GJmj.mjs.map +1 -1
  74. package/dist/node/document-models/index.mjs +1 -1
  75. package/dist/node/document-models/ph-clint-project/index.mjs +2 -2
  76. package/dist/node/{editor-BC9t7D3T.mjs → editor-8cCevQVX.mjs} +3 -3
  77. package/dist/node/{editor-BC9t7D3T.mjs.map → editor-8cCevQVX.mjs.map} +1 -1
  78. package/dist/node/editors/ph-clint-project-editor/module.mjs +1 -1
  79. package/dist/node/factory-BV9KTFaw.mjs.map +1 -1
  80. package/dist/node/index.mjs +6 -2
  81. package/dist/node/index.mjs.map +1 -1
  82. package/dist/node/{module-BPw40Ypp.mjs → module-CJId0WUE.mjs} +19 -7
  83. package/dist/node/module-CJId0WUE.mjs.map +1 -0
  84. package/dist/node/{ph-clint-project-B5IjiXbp.mjs → ph-clint-project-CqqaE1LT.mjs} +3 -15
  85. package/dist/node/ph-clint-project-CqqaE1LT.mjs.map +1 -0
  86. package/dist/node/subgraphs/index.mjs +8 -0
  87. package/dist/node/subgraphs/index.mjs.map +1 -0
  88. package/dist/node/switchboard-kqcv15ax.mjs.map +1 -1
  89. package/dist/powerhouse.manifest.json +26 -26
  90. package/dist/style.css +198 -178
  91. package/dist/tsconfig.tsbuildinfo +1 -1
  92. package/dist/types/document-models/document-models.d.ts +30 -15
  93. package/dist/types/document-models/document-models.d.ts.map +1 -1
  94. package/dist/types/document-models/index.d.ts +1 -1
  95. package/dist/types/document-models/ph-clint-project/gen/schema/types.d.ts.map +1 -0
  96. package/dist/types/document-models/ph-clint-project/gen/schema/zod.d.ts.map +1 -0
  97. package/dist/types/document-models/ph-clint-project/index.d.ts +2 -2
  98. package/dist/types/document-models/ph-clint-project/upgrades/index.d.ts +2 -2
  99. package/dist/types/document-models/ph-clint-project/upgrades/upgrade-manifest.d.ts +2 -2
  100. package/dist/types/document-models/ph-clint-project/upgrades/upgrade-manifest.d.ts.map +1 -1
  101. package/dist/types/document-models/ph-clint-project/v1/actions.d.ts +30 -15
  102. package/dist/types/document-models/ph-clint-project/v1/actions.d.ts.map +1 -1
  103. package/dist/types/document-models/ph-clint-project/v1/gen/actions.d.ts +29 -19
  104. package/dist/types/document-models/ph-clint-project/v1/gen/actions.d.ts.map +1 -1
  105. package/dist/types/document-models/ph-clint-project/v1/gen/controller.d.ts +2 -2
  106. package/dist/types/document-models/ph-clint-project/v1/gen/controller.d.ts.map +1 -1
  107. package/dist/types/document-models/ph-clint-project/v1/gen/creators.d.ts +28 -18
  108. package/dist/types/document-models/ph-clint-project/v1/gen/creators.d.ts.map +1 -1
  109. package/dist/types/document-models/ph-clint-project/v1/gen/deployment/actions.d.ts +10 -6
  110. package/dist/types/document-models/ph-clint-project/v1/gen/deployment/actions.d.ts.map +1 -1
  111. package/dist/types/document-models/ph-clint-project/v1/gen/deployment/creators.d.ts +3 -2
  112. package/dist/types/document-models/ph-clint-project/v1/gen/deployment/creators.d.ts.map +1 -1
  113. package/dist/types/document-models/ph-clint-project/v1/gen/deployment/error.d.ts +1 -1
  114. package/dist/types/document-models/ph-clint-project/v1/gen/deployment/operations.d.ts +4 -3
  115. package/dist/types/document-models/ph-clint-project/v1/gen/deployment/operations.d.ts.map +1 -1
  116. package/dist/types/document-models/ph-clint-project/v1/gen/document-model.d.ts +1 -1
  117. package/dist/types/document-models/ph-clint-project/v1/gen/document-model.d.ts.map +1 -1
  118. package/dist/types/document-models/ph-clint-project/v1/gen/document-schema.d.ts +2 -2
  119. package/dist/types/document-models/ph-clint-project/v1/gen/document-schema.d.ts.map +1 -1
  120. package/dist/types/document-models/ph-clint-project/v1/gen/external-skills/actions.d.ts +6 -6
  121. package/dist/types/document-models/ph-clint-project/v1/gen/external-skills/actions.d.ts.map +1 -1
  122. package/dist/types/document-models/ph-clint-project/v1/gen/external-skills/creators.d.ts +2 -2
  123. package/dist/types/document-models/ph-clint-project/v1/gen/external-skills/creators.d.ts.map +1 -1
  124. package/dist/types/document-models/ph-clint-project/v1/gen/external-skills/error.d.ts +1 -1
  125. package/dist/types/document-models/ph-clint-project/v1/gen/external-skills/error.d.ts.map +1 -1
  126. package/dist/types/document-models/ph-clint-project/v1/gen/external-skills/operations.d.ts +3 -3
  127. package/dist/types/document-models/ph-clint-project/v1/gen/external-skills/operations.d.ts.map +1 -1
  128. package/dist/types/document-models/ph-clint-project/v1/gen/features-mastra/actions.d.ts +6 -54
  129. package/dist/types/document-models/ph-clint-project/v1/gen/features-mastra/actions.d.ts.map +1 -1
  130. package/dist/types/document-models/ph-clint-project/v1/gen/features-mastra/creators.d.ts +2 -14
  131. package/dist/types/document-models/ph-clint-project/v1/gen/features-mastra/creators.d.ts.map +1 -1
  132. package/dist/types/document-models/ph-clint-project/v1/gen/features-mastra/error.d.ts +1 -78
  133. package/dist/types/document-models/ph-clint-project/v1/gen/features-mastra/error.d.ts.map +1 -1
  134. package/dist/types/document-models/ph-clint-project/v1/gen/features-mastra/operations.d.ts +3 -15
  135. package/dist/types/document-models/ph-clint-project/v1/gen/features-mastra/operations.d.ts.map +1 -1
  136. package/dist/types/document-models/ph-clint-project/v1/gen/features-powerhouse/actions.d.ts +3 -3
  137. package/dist/types/document-models/ph-clint-project/v1/gen/features-powerhouse/creators.d.ts +2 -2
  138. package/dist/types/document-models/ph-clint-project/v1/gen/features-powerhouse/creators.d.ts.map +1 -1
  139. package/dist/types/document-models/ph-clint-project/v1/gen/features-powerhouse/error.d.ts +1 -1
  140. package/dist/types/document-models/ph-clint-project/v1/gen/features-powerhouse/operations.d.ts +3 -3
  141. package/dist/types/document-models/ph-clint-project/v1/gen/features-powerhouse/operations.d.ts.map +1 -1
  142. package/dist/types/document-models/ph-clint-project/v1/gen/features-routine/actions.d.ts +4 -4
  143. package/dist/types/document-models/ph-clint-project/v1/gen/features-routine/actions.d.ts.map +1 -1
  144. package/dist/types/document-models/ph-clint-project/v1/gen/features-routine/creators.d.ts +2 -2
  145. package/dist/types/document-models/ph-clint-project/v1/gen/features-routine/creators.d.ts.map +1 -1
  146. package/dist/types/document-models/ph-clint-project/v1/gen/features-routine/operations.d.ts +3 -3
  147. package/dist/types/document-models/ph-clint-project/v1/gen/features-routine/operations.d.ts.map +1 -1
  148. package/dist/types/document-models/ph-clint-project/v1/gen/identity/actions.d.ts +5 -5
  149. package/dist/types/document-models/ph-clint-project/v1/gen/identity/actions.d.ts.map +1 -1
  150. package/dist/types/document-models/ph-clint-project/v1/gen/identity/creators.d.ts +2 -2
  151. package/dist/types/document-models/ph-clint-project/v1/gen/identity/creators.d.ts.map +1 -1
  152. package/dist/types/document-models/ph-clint-project/v1/gen/identity/error.d.ts +1 -1
  153. package/dist/types/document-models/ph-clint-project/v1/gen/identity/error.d.ts.map +1 -1
  154. package/dist/types/document-models/ph-clint-project/v1/gen/identity/operations.d.ts +3 -3
  155. package/dist/types/document-models/ph-clint-project/v1/gen/identity/operations.d.ts.map +1 -1
  156. package/dist/types/document-models/ph-clint-project/v1/gen/index.d.ts +25 -20
  157. package/dist/types/document-models/ph-clint-project/v1/gen/index.d.ts.map +1 -1
  158. package/dist/types/document-models/ph-clint-project/v1/gen/lifecycle/actions.d.ts +3 -3
  159. package/dist/types/document-models/ph-clint-project/v1/gen/lifecycle/creators.d.ts +2 -2
  160. package/dist/types/document-models/ph-clint-project/v1/gen/lifecycle/creators.d.ts.map +1 -1
  161. package/dist/types/document-models/ph-clint-project/v1/gen/lifecycle/operations.d.ts +3 -3
  162. package/dist/types/document-models/ph-clint-project/v1/gen/lifecycle/operations.d.ts.map +1 -1
  163. package/dist/types/document-models/ph-clint-project/v1/gen/mastra-agent-bindings/actions.d.ts.map +1 -0
  164. package/dist/types/document-models/ph-clint-project/v1/gen/mastra-agent-bindings/creators.d.ts.map +1 -0
  165. package/dist/types/document-models/ph-clint-project/v1/gen/mastra-agent-bindings/error.d.ts.map +1 -0
  166. package/dist/types/document-models/ph-clint-project/v1/gen/mastra-agent-bindings/operations.d.ts.map +1 -0
  167. package/dist/types/document-models/ph-clint-project/v1/gen/mastra-main-agent/actions.d.ts.map +1 -0
  168. package/dist/types/document-models/ph-clint-project/v1/gen/mastra-main-agent/creators.d.ts.map +1 -0
  169. package/dist/types/document-models/ph-clint-project/v1/gen/mastra-main-agent/error.d.ts.map +1 -0
  170. package/dist/types/document-models/ph-clint-project/v1/gen/mastra-main-agent/operations.d.ts.map +1 -0
  171. package/dist/types/document-models/ph-clint-project/v1/gen/mastra-models/actions.d.ts.map +1 -0
  172. package/dist/types/document-models/ph-clint-project/v1/gen/mastra-models/creators.d.ts.map +1 -0
  173. package/dist/types/document-models/ph-clint-project/v1/gen/mastra-models/error.d.ts.map +1 -0
  174. package/dist/types/document-models/ph-clint-project/v1/gen/mastra-models/operations.d.ts.map +1 -0
  175. package/dist/types/document-models/ph-clint-project/v1/gen/mastra-profiles/actions.d.ts.map +1 -0
  176. package/dist/types/document-models/ph-clint-project/v1/gen/mastra-profiles/creators.d.ts.map +1 -0
  177. package/dist/types/document-models/ph-clint-project/v1/gen/mastra-profiles/error.d.ts.map +1 -0
  178. package/dist/types/document-models/ph-clint-project/v1/gen/mastra-profiles/operations.d.ts.map +1 -0
  179. package/dist/types/document-models/ph-clint-project/v1/gen/mastra-sub-agents/actions.d.ts.map +1 -0
  180. package/dist/types/document-models/ph-clint-project/v1/gen/mastra-sub-agents/creators.d.ts.map +1 -0
  181. package/dist/types/document-models/ph-clint-project/v1/gen/mastra-sub-agents/error.d.ts.map +1 -0
  182. package/dist/types/document-models/ph-clint-project/v1/gen/mastra-sub-agents/operations.d.ts.map +1 -0
  183. package/dist/types/document-models/ph-clint-project/v1/gen/ph-factories.d.ts +2 -2
  184. package/dist/types/document-models/ph-clint-project/v1/gen/ph-factories.d.ts.map +1 -1
  185. package/dist/types/document-models/ph-clint-project/v1/gen/powerhouse-packages/actions.d.ts +7 -7
  186. package/dist/types/document-models/ph-clint-project/v1/gen/powerhouse-packages/actions.d.ts.map +1 -1
  187. package/dist/types/document-models/ph-clint-project/v1/gen/powerhouse-packages/creators.d.ts +2 -2
  188. package/dist/types/document-models/ph-clint-project/v1/gen/powerhouse-packages/creators.d.ts.map +1 -1
  189. package/dist/types/document-models/ph-clint-project/v1/gen/powerhouse-packages/error.d.ts +1 -1
  190. package/dist/types/document-models/ph-clint-project/v1/gen/powerhouse-packages/error.d.ts.map +1 -1
  191. package/dist/types/document-models/ph-clint-project/v1/gen/powerhouse-packages/operations.d.ts +3 -3
  192. package/dist/types/document-models/ph-clint-project/v1/gen/powerhouse-packages/operations.d.ts.map +1 -1
  193. package/dist/types/document-models/ph-clint-project/v1/gen/publishing/actions.d.ts +7 -7
  194. package/dist/types/document-models/ph-clint-project/v1/gen/publishing/actions.d.ts.map +1 -1
  195. package/dist/types/document-models/ph-clint-project/v1/gen/publishing/creators.d.ts +2 -2
  196. package/dist/types/document-models/ph-clint-project/v1/gen/publishing/creators.d.ts.map +1 -1
  197. package/dist/types/document-models/ph-clint-project/v1/gen/publishing/error.d.ts +1 -1
  198. package/dist/types/document-models/ph-clint-project/v1/gen/publishing/operations.d.ts +3 -3
  199. package/dist/types/document-models/ph-clint-project/v1/gen/publishing/operations.d.ts.map +1 -1
  200. package/dist/types/document-models/ph-clint-project/v1/gen/reducer.d.ts +2 -2
  201. package/dist/types/document-models/ph-clint-project/v1/gen/reducer.d.ts.map +1 -1
  202. package/dist/types/document-models/ph-clint-project/v1/gen/schema/index.d.ts +2 -2
  203. package/dist/types/document-models/ph-clint-project/v1/gen/schema/types.d.ts +215 -131
  204. package/dist/types/document-models/ph-clint-project/v1/gen/schema/types.d.ts.map +1 -1
  205. package/dist/types/document-models/ph-clint-project/v1/gen/schema/zod.d.ts +24 -8
  206. package/dist/types/document-models/ph-clint-project/v1/gen/schema/zod.d.ts.map +1 -1
  207. package/dist/types/document-models/ph-clint-project/v1/gen/types.d.ts +5 -5
  208. package/dist/types/document-models/ph-clint-project/v1/gen/types.d.ts.map +1 -1
  209. package/dist/types/document-models/ph-clint-project/v1/gen/utils.d.ts +2 -2
  210. package/dist/types/document-models/ph-clint-project/v1/gen/utils.d.ts.map +1 -1
  211. package/dist/types/document-models/ph-clint-project/v1/hooks.d.ts +3 -6
  212. package/dist/types/document-models/ph-clint-project/v1/hooks.d.ts.map +1 -1
  213. package/dist/types/document-models/ph-clint-project/v1/index.d.ts +6 -6
  214. package/dist/types/document-models/ph-clint-project/v1/module.d.ts +31 -16
  215. package/dist/types/document-models/ph-clint-project/v1/module.d.ts.map +1 -1
  216. package/dist/types/document-models/ph-clint-project/v1/src/index.d.ts +1 -1
  217. package/dist/types/document-models/ph-clint-project/v1/src/reducers/deployment.d.ts +1 -1
  218. package/dist/types/document-models/ph-clint-project/v1/src/reducers/deployment.d.ts.map +1 -1
  219. package/dist/types/document-models/ph-clint-project/v1/src/reducers/external-skills.d.ts +1 -1
  220. package/dist/types/document-models/ph-clint-project/v1/src/reducers/external-skills.d.ts.map +1 -1
  221. package/dist/types/document-models/ph-clint-project/v1/src/reducers/features-mastra.d.ts +1 -1
  222. package/dist/types/document-models/ph-clint-project/v1/src/reducers/features-mastra.d.ts.map +1 -1
  223. package/dist/types/document-models/ph-clint-project/v1/src/reducers/features-powerhouse.d.ts +1 -1
  224. package/dist/types/document-models/ph-clint-project/v1/src/reducers/features-powerhouse.d.ts.map +1 -1
  225. package/dist/types/document-models/ph-clint-project/v1/src/reducers/features-routine.d.ts +1 -1
  226. package/dist/types/document-models/ph-clint-project/v1/src/reducers/features-routine.d.ts.map +1 -1
  227. package/dist/types/document-models/ph-clint-project/v1/src/reducers/identity.d.ts +1 -1
  228. package/dist/types/document-models/ph-clint-project/v1/src/reducers/identity.d.ts.map +1 -1
  229. package/dist/types/document-models/ph-clint-project/v1/src/reducers/lifecycle.d.ts +1 -1
  230. package/dist/types/document-models/ph-clint-project/v1/src/reducers/lifecycle.d.ts.map +1 -1
  231. package/dist/types/document-models/ph-clint-project/v1/src/reducers/mastra-agent-bindings.d.ts.map +1 -0
  232. package/dist/types/document-models/ph-clint-project/v1/src/reducers/mastra-main-agent.d.ts.map +1 -0
  233. package/dist/types/document-models/ph-clint-project/v1/src/reducers/mastra-models.d.ts.map +1 -0
  234. package/dist/types/document-models/ph-clint-project/v1/src/reducers/mastra-profiles.d.ts.map +1 -0
  235. package/dist/types/document-models/ph-clint-project/v1/src/reducers/mastra-sub-agents.d.ts.map +1 -0
  236. package/dist/types/document-models/ph-clint-project/v1/src/reducers/powerhouse-packages.d.ts +1 -1
  237. package/dist/types/document-models/ph-clint-project/v1/src/reducers/powerhouse-packages.d.ts.map +1 -1
  238. package/dist/types/document-models/ph-clint-project/v1/src/reducers/publishing.d.ts +1 -1
  239. package/dist/types/document-models/ph-clint-project/v1/src/reducers/publishing.d.ts.map +1 -1
  240. package/dist/types/document-models/ph-clint-project/v1/tests/mastra-agent-bindings.test.d.ts.map +1 -0
  241. package/dist/types/document-models/ph-clint-project/v1/tests/mastra-main-agent.test.d.ts.map +1 -0
  242. package/dist/types/document-models/ph-clint-project/v1/tests/mastra-models.test.d.ts.map +1 -0
  243. package/dist/types/document-models/ph-clint-project/v1/tests/mastra-profiles.test.d.ts.map +1 -0
  244. package/dist/types/document-models/ph-clint-project/v1/tests/mastra-sub-agents.test.d.ts.map +1 -0
  245. package/dist/types/document-models/ph-clint-project/v1/utils.d.ts +2 -2
  246. package/dist/types/document-models/upgrade-manifests.d.ts +1 -1
  247. package/dist/types/document-models/upgrade-manifests.d.ts.map +1 -1
  248. package/dist/types/editors/editors.d.ts +1 -5
  249. package/dist/types/editors/editors.d.ts.map +1 -1
  250. package/dist/types/editors/index.d.ts +1 -1
  251. package/dist/types/editors/ph-clint-project-editor/editor.d.ts.map +1 -1
  252. package/dist/types/editors/ph-clint-project-editor/module.d.ts +1 -5
  253. package/dist/types/editors/ph-clint-project-editor/module.d.ts.map +1 -1
  254. package/dist/types/index.d.ts +7 -9
  255. package/dist/types/index.d.ts.map +1 -1
  256. package/dist/types/processors/connect.d.ts +1 -1
  257. package/dist/types/processors/factory.d.ts +2 -2
  258. package/dist/types/processors/factory.d.ts.map +1 -1
  259. package/dist/types/processors/index.d.ts +1 -1
  260. package/dist/types/processors/switchboard.d.ts +1 -1
  261. package/package.json +38 -27
  262. package/dist/browser/module-B16ZT36n.js.map +0 -1
  263. package/dist/browser/ph-clint-project-CHq59BKL.js.map +0 -1
  264. package/dist/connect/__react__/chunks/chunk-BUAv4yFm.js +0 -1
  265. package/dist/connect/__react__/chunks/server.browser-Ds-0IcTb.js +0 -1
  266. package/dist/connect/__react__/chunks/static.browser-CL3g4nOE.js +0 -1
  267. package/dist/connect/assets/editor-BaQ62r3i.js +0 -2
  268. package/dist/connect/assets/index-NB86TKkT.js +0 -3
  269. package/dist/connect/assets/index-NB86TKkT.js.map +0 -1
  270. package/dist/connect/assets/index-vlKMuf0A.css +0 -2
  271. package/dist/connect/assets/ph-clint-project-p1zY6e17.js.map +0 -1
  272. package/dist/document-models/document-models.d.ts +0 -7
  273. package/dist/document-models/document-models.d.ts.map +0 -1
  274. package/dist/document-models/index.d.ts +0 -2
  275. package/dist/document-models/index.d.ts.map +0 -1
  276. package/dist/document-models/ph-clint-project/gen/schema/types.d.ts.map +0 -1
  277. package/dist/document-models/ph-clint-project/gen/schema/zod.d.ts.map +0 -1
  278. package/dist/document-models/ph-clint-project/index.d.ts +0 -3
  279. package/dist/document-models/ph-clint-project/index.d.ts.map +0 -1
  280. package/dist/document-models/ph-clint-project/upgrades/index.d.ts +0 -3
  281. package/dist/document-models/ph-clint-project/upgrades/index.d.ts.map +0 -1
  282. package/dist/document-models/ph-clint-project/upgrades/upgrade-manifest.d.ts +0 -8
  283. package/dist/document-models/ph-clint-project/upgrades/upgrade-manifest.d.ts.map +0 -1
  284. package/dist/document-models/ph-clint-project/upgrades/versions.d.ts +0 -3
  285. package/dist/document-models/ph-clint-project/upgrades/versions.d.ts.map +0 -1
  286. package/dist/document-models/ph-clint-project/v1/actions.d.ts +0 -68
  287. package/dist/document-models/ph-clint-project/v1/actions.d.ts.map +0 -1
  288. package/dist/document-models/ph-clint-project/v1/gen/actions.d.ts +0 -34
  289. package/dist/document-models/ph-clint-project/v1/gen/actions.d.ts.map +0 -1
  290. package/dist/document-models/ph-clint-project/v1/gen/controller.d.ts +0 -8
  291. package/dist/document-models/ph-clint-project/v1/gen/controller.d.ts.map +0 -1
  292. package/dist/document-models/ph-clint-project/v1/gen/creators.d.ts +0 -33
  293. package/dist/document-models/ph-clint-project/v1/gen/creators.d.ts.map +0 -1
  294. package/dist/document-models/ph-clint-project/v1/gen/deployment/actions.d.ts +0 -24
  295. package/dist/document-models/ph-clint-project/v1/gen/deployment/actions.d.ts.map +0 -1
  296. package/dist/document-models/ph-clint-project/v1/gen/deployment/creators.d.ts +0 -7
  297. package/dist/document-models/ph-clint-project/v1/gen/deployment/creators.d.ts.map +0 -1
  298. package/dist/document-models/ph-clint-project/v1/gen/deployment/error.d.ts +0 -21
  299. package/dist/document-models/ph-clint-project/v1/gen/deployment/error.d.ts.map +0 -1
  300. package/dist/document-models/ph-clint-project/v1/gen/deployment/operations.d.ts +0 -14
  301. package/dist/document-models/ph-clint-project/v1/gen/deployment/operations.d.ts.map +0 -1
  302. package/dist/document-models/ph-clint-project/v1/gen/document-model.d.ts +0 -3
  303. package/dist/document-models/ph-clint-project/v1/gen/document-model.d.ts.map +0 -1
  304. package/dist/document-models/ph-clint-project/v1/gen/document-schema.d.ts +0 -68
  305. package/dist/document-models/ph-clint-project/v1/gen/document-schema.d.ts.map +0 -1
  306. package/dist/document-models/ph-clint-project/v1/gen/document-type.d.ts +0 -6
  307. package/dist/document-models/ph-clint-project/v1/gen/document-type.d.ts.map +0 -1
  308. package/dist/document-models/ph-clint-project/v1/gen/external-skills/actions.d.ts +0 -24
  309. package/dist/document-models/ph-clint-project/v1/gen/external-skills/actions.d.ts.map +0 -1
  310. package/dist/document-models/ph-clint-project/v1/gen/external-skills/creators.d.ts +0 -7
  311. package/dist/document-models/ph-clint-project/v1/gen/external-skills/creators.d.ts.map +0 -1
  312. package/dist/document-models/ph-clint-project/v1/gen/external-skills/error.d.ts +0 -34
  313. package/dist/document-models/ph-clint-project/v1/gen/external-skills/error.d.ts.map +0 -1
  314. package/dist/document-models/ph-clint-project/v1/gen/external-skills/operations.d.ts +0 -14
  315. package/dist/document-models/ph-clint-project/v1/gen/external-skills/operations.d.ts.map +0 -1
  316. package/dist/document-models/ph-clint-project/v1/gen/features-mastra/actions.d.ts +0 -20
  317. package/dist/document-models/ph-clint-project/v1/gen/features-mastra/actions.d.ts.map +0 -1
  318. package/dist/document-models/ph-clint-project/v1/gen/features-mastra/creators.d.ts +0 -6
  319. package/dist/document-models/ph-clint-project/v1/gen/features-mastra/creators.d.ts.map +0 -1
  320. package/dist/document-models/ph-clint-project/v1/gen/features-mastra/error.d.ts +0 -31
  321. package/dist/document-models/ph-clint-project/v1/gen/features-mastra/error.d.ts.map +0 -1
  322. package/dist/document-models/ph-clint-project/v1/gen/features-mastra/operations.d.ts +0 -13
  323. package/dist/document-models/ph-clint-project/v1/gen/features-mastra/operations.d.ts.map +0 -1
  324. package/dist/document-models/ph-clint-project/v1/gen/features-powerhouse/actions.d.ts +0 -12
  325. package/dist/document-models/ph-clint-project/v1/gen/features-powerhouse/actions.d.ts.map +0 -1
  326. package/dist/document-models/ph-clint-project/v1/gen/features-powerhouse/creators.d.ts +0 -4
  327. package/dist/document-models/ph-clint-project/v1/gen/features-powerhouse/creators.d.ts.map +0 -1
  328. package/dist/document-models/ph-clint-project/v1/gen/features-powerhouse/error.d.ts +0 -14
  329. package/dist/document-models/ph-clint-project/v1/gen/features-powerhouse/error.d.ts.map +0 -1
  330. package/dist/document-models/ph-clint-project/v1/gen/features-powerhouse/operations.d.ts +0 -11
  331. package/dist/document-models/ph-clint-project/v1/gen/features-powerhouse/operations.d.ts.map +0 -1
  332. package/dist/document-models/ph-clint-project/v1/gen/features-routine/actions.d.ts +0 -16
  333. package/dist/document-models/ph-clint-project/v1/gen/features-routine/actions.d.ts.map +0 -1
  334. package/dist/document-models/ph-clint-project/v1/gen/features-routine/creators.d.ts +0 -5
  335. package/dist/document-models/ph-clint-project/v1/gen/features-routine/creators.d.ts.map +0 -1
  336. package/dist/document-models/ph-clint-project/v1/gen/features-routine/error.d.ts +0 -2
  337. package/dist/document-models/ph-clint-project/v1/gen/features-routine/error.d.ts.map +0 -1
  338. package/dist/document-models/ph-clint-project/v1/gen/features-routine/operations.d.ts +0 -12
  339. package/dist/document-models/ph-clint-project/v1/gen/features-routine/operations.d.ts.map +0 -1
  340. package/dist/document-models/ph-clint-project/v1/gen/identity/actions.d.ts +0 -20
  341. package/dist/document-models/ph-clint-project/v1/gen/identity/actions.d.ts.map +0 -1
  342. package/dist/document-models/ph-clint-project/v1/gen/identity/creators.d.ts +0 -6
  343. package/dist/document-models/ph-clint-project/v1/gen/identity/creators.d.ts.map +0 -1
  344. package/dist/document-models/ph-clint-project/v1/gen/identity/error.d.ts +0 -21
  345. package/dist/document-models/ph-clint-project/v1/gen/identity/error.d.ts.map +0 -1
  346. package/dist/document-models/ph-clint-project/v1/gen/identity/operations.d.ts +0 -13
  347. package/dist/document-models/ph-clint-project/v1/gen/identity/operations.d.ts.map +0 -1
  348. package/dist/document-models/ph-clint-project/v1/gen/index.d.ts +0 -30
  349. package/dist/document-models/ph-clint-project/v1/gen/index.d.ts.map +0 -1
  350. package/dist/document-models/ph-clint-project/v1/gen/lifecycle/actions.d.ts +0 -12
  351. package/dist/document-models/ph-clint-project/v1/gen/lifecycle/actions.d.ts.map +0 -1
  352. package/dist/document-models/ph-clint-project/v1/gen/lifecycle/creators.d.ts +0 -4
  353. package/dist/document-models/ph-clint-project/v1/gen/lifecycle/creators.d.ts.map +0 -1
  354. package/dist/document-models/ph-clint-project/v1/gen/lifecycle/error.d.ts +0 -8
  355. package/dist/document-models/ph-clint-project/v1/gen/lifecycle/error.d.ts.map +0 -1
  356. package/dist/document-models/ph-clint-project/v1/gen/lifecycle/operations.d.ts +0 -11
  357. package/dist/document-models/ph-clint-project/v1/gen/lifecycle/operations.d.ts.map +0 -1
  358. package/dist/document-models/ph-clint-project/v1/gen/mastra-agent-bindings/actions.d.ts.map +0 -1
  359. package/dist/document-models/ph-clint-project/v1/gen/mastra-agent-bindings/creators.d.ts.map +0 -1
  360. package/dist/document-models/ph-clint-project/v1/gen/mastra-agent-bindings/error.d.ts.map +0 -1
  361. package/dist/document-models/ph-clint-project/v1/gen/mastra-agent-bindings/operations.d.ts.map +0 -1
  362. package/dist/document-models/ph-clint-project/v1/gen/mastra-main-agent/actions.d.ts.map +0 -1
  363. package/dist/document-models/ph-clint-project/v1/gen/mastra-main-agent/creators.d.ts.map +0 -1
  364. package/dist/document-models/ph-clint-project/v1/gen/mastra-main-agent/error.d.ts.map +0 -1
  365. package/dist/document-models/ph-clint-project/v1/gen/mastra-main-agent/operations.d.ts.map +0 -1
  366. package/dist/document-models/ph-clint-project/v1/gen/mastra-models/actions.d.ts.map +0 -1
  367. package/dist/document-models/ph-clint-project/v1/gen/mastra-models/creators.d.ts.map +0 -1
  368. package/dist/document-models/ph-clint-project/v1/gen/mastra-models/error.d.ts.map +0 -1
  369. package/dist/document-models/ph-clint-project/v1/gen/mastra-models/operations.d.ts.map +0 -1
  370. package/dist/document-models/ph-clint-project/v1/gen/mastra-profiles/actions.d.ts.map +0 -1
  371. package/dist/document-models/ph-clint-project/v1/gen/mastra-profiles/creators.d.ts.map +0 -1
  372. package/dist/document-models/ph-clint-project/v1/gen/mastra-profiles/error.d.ts.map +0 -1
  373. package/dist/document-models/ph-clint-project/v1/gen/mastra-profiles/operations.d.ts.map +0 -1
  374. package/dist/document-models/ph-clint-project/v1/gen/mastra-sub-agents/actions.d.ts.map +0 -1
  375. package/dist/document-models/ph-clint-project/v1/gen/mastra-sub-agents/creators.d.ts.map +0 -1
  376. package/dist/document-models/ph-clint-project/v1/gen/mastra-sub-agents/error.d.ts.map +0 -1
  377. package/dist/document-models/ph-clint-project/v1/gen/mastra-sub-agents/operations.d.ts.map +0 -1
  378. package/dist/document-models/ph-clint-project/v1/gen/ph-factories.d.ts +0 -25
  379. package/dist/document-models/ph-clint-project/v1/gen/ph-factories.d.ts.map +0 -1
  380. package/dist/document-models/ph-clint-project/v1/gen/powerhouse-packages/actions.d.ts +0 -28
  381. package/dist/document-models/ph-clint-project/v1/gen/powerhouse-packages/actions.d.ts.map +0 -1
  382. package/dist/document-models/ph-clint-project/v1/gen/powerhouse-packages/creators.d.ts +0 -8
  383. package/dist/document-models/ph-clint-project/v1/gen/powerhouse-packages/creators.d.ts.map +0 -1
  384. package/dist/document-models/ph-clint-project/v1/gen/powerhouse-packages/error.d.ts +0 -60
  385. package/dist/document-models/ph-clint-project/v1/gen/powerhouse-packages/error.d.ts.map +0 -1
  386. package/dist/document-models/ph-clint-project/v1/gen/powerhouse-packages/operations.d.ts +0 -15
  387. package/dist/document-models/ph-clint-project/v1/gen/powerhouse-packages/operations.d.ts.map +0 -1
  388. package/dist/document-models/ph-clint-project/v1/gen/publishing/actions.d.ts +0 -28
  389. package/dist/document-models/ph-clint-project/v1/gen/publishing/actions.d.ts.map +0 -1
  390. package/dist/document-models/ph-clint-project/v1/gen/publishing/creators.d.ts +0 -8
  391. package/dist/document-models/ph-clint-project/v1/gen/publishing/creators.d.ts.map +0 -1
  392. package/dist/document-models/ph-clint-project/v1/gen/publishing/error.d.ts +0 -21
  393. package/dist/document-models/ph-clint-project/v1/gen/publishing/error.d.ts.map +0 -1
  394. package/dist/document-models/ph-clint-project/v1/gen/publishing/operations.d.ts +0 -15
  395. package/dist/document-models/ph-clint-project/v1/gen/publishing/operations.d.ts.map +0 -1
  396. package/dist/document-models/ph-clint-project/v1/gen/reducer.d.ts +0 -4
  397. package/dist/document-models/ph-clint-project/v1/gen/reducer.d.ts.map +0 -1
  398. package/dist/document-models/ph-clint-project/v1/gen/schema/index.d.ts +0 -7
  399. package/dist/document-models/ph-clint-project/v1/gen/schema/index.d.ts.map +0 -1
  400. package/dist/document-models/ph-clint-project/v1/gen/schema/types.d.ts +0 -475
  401. package/dist/document-models/ph-clint-project/v1/gen/schema/types.d.ts.map +0 -1
  402. package/dist/document-models/ph-clint-project/v1/gen/schema/zod.d.ts +0 -97
  403. package/dist/document-models/ph-clint-project/v1/gen/schema/zod.d.ts.map +0 -1
  404. package/dist/document-models/ph-clint-project/v1/gen/types.d.ts +0 -16
  405. package/dist/document-models/ph-clint-project/v1/gen/types.d.ts.map +0 -1
  406. package/dist/document-models/ph-clint-project/v1/gen/utils.d.ts +0 -10
  407. package/dist/document-models/ph-clint-project/v1/gen/utils.d.ts.map +0 -1
  408. package/dist/document-models/ph-clint-project/v1/hooks.d.ts +0 -15
  409. package/dist/document-models/ph-clint-project/v1/hooks.d.ts.map +0 -1
  410. package/dist/document-models/ph-clint-project/v1/index.d.ts +0 -11
  411. package/dist/document-models/ph-clint-project/v1/index.d.ts.map +0 -1
  412. package/dist/document-models/ph-clint-project/v1/module.d.ts +0 -75
  413. package/dist/document-models/ph-clint-project/v1/module.d.ts.map +0 -1
  414. package/dist/document-models/ph-clint-project/v1/src/index.d.ts +0 -6
  415. package/dist/document-models/ph-clint-project/v1/src/index.d.ts.map +0 -1
  416. package/dist/document-models/ph-clint-project/v1/src/reducers/deployment.d.ts +0 -3
  417. package/dist/document-models/ph-clint-project/v1/src/reducers/deployment.d.ts.map +0 -1
  418. package/dist/document-models/ph-clint-project/v1/src/reducers/external-skills.d.ts +0 -3
  419. package/dist/document-models/ph-clint-project/v1/src/reducers/external-skills.d.ts.map +0 -1
  420. package/dist/document-models/ph-clint-project/v1/src/reducers/features-mastra.d.ts +0 -3
  421. package/dist/document-models/ph-clint-project/v1/src/reducers/features-mastra.d.ts.map +0 -1
  422. package/dist/document-models/ph-clint-project/v1/src/reducers/features-powerhouse.d.ts +0 -3
  423. package/dist/document-models/ph-clint-project/v1/src/reducers/features-powerhouse.d.ts.map +0 -1
  424. package/dist/document-models/ph-clint-project/v1/src/reducers/features-routine.d.ts +0 -3
  425. package/dist/document-models/ph-clint-project/v1/src/reducers/features-routine.d.ts.map +0 -1
  426. package/dist/document-models/ph-clint-project/v1/src/reducers/identity.d.ts +0 -3
  427. package/dist/document-models/ph-clint-project/v1/src/reducers/identity.d.ts.map +0 -1
  428. package/dist/document-models/ph-clint-project/v1/src/reducers/lifecycle.d.ts +0 -3
  429. package/dist/document-models/ph-clint-project/v1/src/reducers/lifecycle.d.ts.map +0 -1
  430. package/dist/document-models/ph-clint-project/v1/src/reducers/mastra-agent-bindings.d.ts.map +0 -1
  431. package/dist/document-models/ph-clint-project/v1/src/reducers/mastra-main-agent.d.ts.map +0 -1
  432. package/dist/document-models/ph-clint-project/v1/src/reducers/mastra-models.d.ts.map +0 -1
  433. package/dist/document-models/ph-clint-project/v1/src/reducers/mastra-profiles.d.ts.map +0 -1
  434. package/dist/document-models/ph-clint-project/v1/src/reducers/mastra-sub-agents.d.ts.map +0 -1
  435. package/dist/document-models/ph-clint-project/v1/src/reducers/powerhouse-packages.d.ts +0 -3
  436. package/dist/document-models/ph-clint-project/v1/src/reducers/powerhouse-packages.d.ts.map +0 -1
  437. package/dist/document-models/ph-clint-project/v1/src/reducers/publishing.d.ts +0 -3
  438. package/dist/document-models/ph-clint-project/v1/src/reducers/publishing.d.ts.map +0 -1
  439. package/dist/document-models/ph-clint-project/v1/src/utils.d.ts +0 -2
  440. package/dist/document-models/ph-clint-project/v1/src/utils.d.ts.map +0 -1
  441. package/dist/document-models/ph-clint-project/v1/tests/deployment.test.d.ts +0 -2
  442. package/dist/document-models/ph-clint-project/v1/tests/deployment.test.d.ts.map +0 -1
  443. package/dist/document-models/ph-clint-project/v1/tests/document-model.test.d.ts +0 -10
  444. package/dist/document-models/ph-clint-project/v1/tests/document-model.test.d.ts.map +0 -1
  445. package/dist/document-models/ph-clint-project/v1/tests/external-skills.test.d.ts +0 -2
  446. package/dist/document-models/ph-clint-project/v1/tests/external-skills.test.d.ts.map +0 -1
  447. package/dist/document-models/ph-clint-project/v1/tests/features-mastra.test.d.ts +0 -2
  448. package/dist/document-models/ph-clint-project/v1/tests/features-mastra.test.d.ts.map +0 -1
  449. package/dist/document-models/ph-clint-project/v1/tests/features-powerhouse.test.d.ts +0 -2
  450. package/dist/document-models/ph-clint-project/v1/tests/features-powerhouse.test.d.ts.map +0 -1
  451. package/dist/document-models/ph-clint-project/v1/tests/features-routine.test.d.ts +0 -2
  452. package/dist/document-models/ph-clint-project/v1/tests/features-routine.test.d.ts.map +0 -1
  453. package/dist/document-models/ph-clint-project/v1/tests/identity.test.d.ts +0 -2
  454. package/dist/document-models/ph-clint-project/v1/tests/identity.test.d.ts.map +0 -1
  455. package/dist/document-models/ph-clint-project/v1/tests/lifecycle.test.d.ts +0 -2
  456. package/dist/document-models/ph-clint-project/v1/tests/lifecycle.test.d.ts.map +0 -1
  457. package/dist/document-models/ph-clint-project/v1/tests/mastra-agent-bindings.test.d.ts.map +0 -1
  458. package/dist/document-models/ph-clint-project/v1/tests/mastra-main-agent.test.d.ts.map +0 -1
  459. package/dist/document-models/ph-clint-project/v1/tests/mastra-models.test.d.ts.map +0 -1
  460. package/dist/document-models/ph-clint-project/v1/tests/mastra-profiles.test.d.ts.map +0 -1
  461. package/dist/document-models/ph-clint-project/v1/tests/mastra-sub-agents.test.d.ts.map +0 -1
  462. package/dist/document-models/ph-clint-project/v1/tests/powerhouse-packages.test.d.ts +0 -2
  463. package/dist/document-models/ph-clint-project/v1/tests/powerhouse-packages.test.d.ts.map +0 -1
  464. package/dist/document-models/ph-clint-project/v1/tests/publishing.test.d.ts +0 -2
  465. package/dist/document-models/ph-clint-project/v1/tests/publishing.test.d.ts.map +0 -1
  466. package/dist/document-models/ph-clint-project/v1/utils.d.ts +0 -9
  467. package/dist/document-models/ph-clint-project/v1/utils.d.ts.map +0 -1
  468. package/dist/document-models/upgrade-manifests.d.ts +0 -7
  469. package/dist/document-models/upgrade-manifests.d.ts.map +0 -1
  470. package/dist/editors/editors.d.ts +0 -3
  471. package/dist/editors/editors.d.ts.map +0 -1
  472. package/dist/editors/index.d.ts +0 -2
  473. package/dist/editors/index.d.ts.map +0 -1
  474. package/dist/editors/ph-clint-project-editor/editor.d.ts +0 -2
  475. package/dist/editors/ph-clint-project-editor/editor.d.ts.map +0 -1
  476. package/dist/editors/ph-clint-project-editor/module.d.ts +0 -4
  477. package/dist/editors/ph-clint-project-editor/module.d.ts.map +0 -1
  478. package/dist/index.d.ts +0 -9
  479. package/dist/index.d.ts.map +0 -1
  480. package/dist/main.d.ts +0 -2
  481. package/dist/main.d.ts.map +0 -1
  482. package/dist/node/module-BPw40Ypp.mjs.map +0 -1
  483. package/dist/node/ph-clint-project-B5IjiXbp.mjs.map +0 -1
  484. package/dist/processors/connect.d.ts +0 -3
  485. package/dist/processors/connect.d.ts.map +0 -1
  486. package/dist/processors/factory.d.ts +0 -8
  487. package/dist/processors/factory.d.ts.map +0 -1
  488. package/dist/processors/index.d.ts +0 -6
  489. package/dist/processors/index.d.ts.map +0 -1
  490. package/dist/processors/switchboard.d.ts +0 -3
  491. package/dist/processors/switchboard.d.ts.map +0 -1
  492. package/dist/subgraphs/index.d.ts +0 -2
  493. package/dist/subgraphs/index.d.ts.map +0 -1
  494. /package/dist/{document-models → types/document-models}/ph-clint-project/gen/schema/types.d.ts +0 -0
  495. /package/dist/{document-models → types/document-models}/ph-clint-project/gen/schema/zod.d.ts +0 -0
  496. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/gen/mastra-agent-bindings/actions.d.ts +0 -0
  497. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/gen/mastra-agent-bindings/creators.d.ts +0 -0
  498. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/gen/mastra-agent-bindings/error.d.ts +0 -0
  499. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/gen/mastra-agent-bindings/operations.d.ts +0 -0
  500. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/gen/mastra-main-agent/actions.d.ts +0 -0
  501. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/gen/mastra-main-agent/creators.d.ts +0 -0
  502. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/gen/mastra-main-agent/error.d.ts +0 -0
  503. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/gen/mastra-main-agent/operations.d.ts +0 -0
  504. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/gen/mastra-models/actions.d.ts +0 -0
  505. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/gen/mastra-models/creators.d.ts +0 -0
  506. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/gen/mastra-models/error.d.ts +0 -0
  507. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/gen/mastra-models/operations.d.ts +0 -0
  508. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/gen/mastra-profiles/actions.d.ts +0 -0
  509. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/gen/mastra-profiles/creators.d.ts +0 -0
  510. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/gen/mastra-profiles/error.d.ts +0 -0
  511. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/gen/mastra-profiles/operations.d.ts +0 -0
  512. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/gen/mastra-sub-agents/actions.d.ts +0 -0
  513. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/gen/mastra-sub-agents/creators.d.ts +0 -0
  514. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/gen/mastra-sub-agents/error.d.ts +0 -0
  515. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/gen/mastra-sub-agents/operations.d.ts +0 -0
  516. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/src/reducers/mastra-agent-bindings.d.ts +0 -0
  517. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/src/reducers/mastra-main-agent.d.ts +0 -0
  518. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/src/reducers/mastra-models.d.ts +0 -0
  519. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/src/reducers/mastra-profiles.d.ts +0 -0
  520. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/src/reducers/mastra-sub-agents.d.ts +0 -0
  521. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/tests/mastra-agent-bindings.test.d.ts +0 -0
  522. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/tests/mastra-main-agent.test.d.ts +0 -0
  523. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/tests/mastra-models.test.d.ts +0 -0
  524. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/tests/mastra-profiles.test.d.ts +0 -0
  525. /package/dist/{document-models → types/document-models}/ph-clint-project/v1/tests/mastra-sub-agents.test.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"editor-BaQ62r3i.js","names":[],"sources":["../../../editors/ph-clint-project-editor/editor.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { generateId } from 'document-model';\nimport { DocumentToolbar } from '@powerhousedao/design-system/connect';\nimport { createRemoteAttachmentService, type IAttachmentService } from '@powerhousedao/reactor-attachments';\nimport { DEFAULT_SWITCHBOARD_URL, getSwitchboardGatewayUrlFromDriveUrl, useSelectedDrive, usePHToast } from '@powerhousedao/reactor-browser';\nimport { useSelectedPhClintProjectDocument, actions } from 'document-models/ph-clint-project';\nimport type {\n PowerhouseLevel,\n PowerhousePackage,\n ExternalSkill,\n PublishRecord,\n PhClintProjectState,\n PhClintMastraFeature,\n PhClintMainAgent,\n PhClintSubAgent,\n PhClintAgentModel,\n PhClintAgentProfile,\n PhClintDeployment,\n} from '../../document-models/ph-clint-project/v1/gen/types.js';\n\nconst POWERHOUSE_LEVELS: { value: PowerhouseLevel; description: string }[] = [\n { value: 'Disabled', description: 'No Powerhouse integration' },\n { value: 'Reactor', description: 'Document model runtime' },\n { value: 'Switchboard', description: 'API service (GraphQL + MCP)' },\n { value: 'Connect', description: 'Web UI for document management' },\n];\n\n/** Patch-bump a semver-ish version string: 0.0.1 → 0.0.2. Falls back to \"<version>.1\" when unparseable. */\nfunction bumpPatch(version: string): string {\n const m = /^(\\d+)\\.(\\d+)\\.(\\d+)/.exec(version);\n if (!m) return `${version}.1`;\n const [, major, minor, patch] = m;\n return `${major}.${minor}.${Number(patch) + 1}`;\n}\n\nfunction TextField(props: { label: string; value: string; placeholder?: string; readOnly?: boolean; compact?: boolean; onCommit: (value: string) => void }) {\n return (\n <label className={props.compact ? 'my-1 block' : 'my-3 block'}>\n <h3 className={props.compact ? 'text-xs text-gray-600' : 'text-base'}>{props.label}</h3>\n <input\n type=\"text\"\n defaultValue={props.value}\n placeholder={props.placeholder}\n readOnly={props.readOnly}\n onBlur={(e) => {\n const next = e.target.value.trim();\n if (next !== props.value) props.onCommit(next);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') e.currentTarget.blur();\n }}\n className=\"w-full font-mono\"\n />\n </label>\n );\n}\n\nfunction Toggle(props: { label: string; checked: boolean; disabled?: boolean; hint?: string; onChange: (next: boolean) => void }) {\n return (\n <label className=\"my-2 flex items-center gap-3\">\n <input type=\"checkbox\" checked={props.checked} disabled={props.disabled} onChange={(e) => props.onChange(e.target.checked)} />\n <span className=\"font-semibold\">{props.label}</span>\n {props.hint ? <span className=\"text-sm text-gray-600\">{props.hint}</span> : null}\n </label>\n );\n}\n\ntype Tab = 'cli' | 'agents' | 'profiles' | 'skills' | 'powerhouse' | 'publish';\n\nconst TAB_LABELS: { value: Tab; label: string }[] = [\n { value: 'cli', label: 'CLI' },\n { value: 'agents', label: 'Agents' },\n { value: 'profiles', label: 'Profiles' },\n { value: 'skills', label: 'Skills' },\n { value: 'powerhouse', label: 'Powerhouse' },\n { value: 'publish', label: 'Publish' },\n];\n\nexport default function Editor() {\n const [document, dispatch] = useSelectedPhClintProjectDocument();\n const state = document.state.global;\n const { powerhouse, mastra, routine } = state.features;\n const [activeTab, setActiveTab] = useState<Tab>('cli');\n const [drive] = useSelectedDrive();\n const driveRemoteUrl: string | undefined = (drive?.state?.local as { remoteUrl?: string } | undefined)?.remoteUrl;\n const attachmentService = useMemo(\n () =>\n createRemoteAttachmentService({\n remoteUrl: driveRemoteUrl ? getSwitchboardGatewayUrlFromDriveUrl(driveRemoteUrl) : DEFAULT_SWITCHBOARD_URL,\n }),\n [driveRemoteUrl],\n );\n\n // identity dispatchers\n const setPackageIdentifier = (identifier: string) => dispatch(actions.setPackageIdentifier({ identifier }));\n const setVersion = (version: string) => dispatch(actions.setVersion({ version }));\n const setDescription = (description: string) => dispatch(actions.setDescription({ description }));\n\n // feature dispatchers\n const setPowerhouseLevel = (level: PowerhouseLevel) => dispatch(actions.setPowerhouseLevel({ level }));\n const toggleMastra = (enabled: boolean) => {\n if (enabled) {\n const baseName = state.name || 'my-agent';\n const agentId = `${baseName}-agent`;\n const agentName = `${baseName.charAt(0).toUpperCase()}${baseName.slice(1).replace(/-([a-z])/g, (_, c: string) => ` ${c.toUpperCase()}`)} Agent`;\n dispatch(actions.enableMastra({ agentId, agentName }));\n } else {\n dispatch(actions.disableMastra({ _: true }));\n }\n };\n const toggleRoutine = (enabled: boolean) => {\n if (enabled) dispatch(actions.enableRoutine({ _: true }));\n else dispatch(actions.disableRoutine({ _: true }));\n };\n\n // package dispatchers\n const addPackage = (packageName: string) => dispatch(actions.addPowerhousePackage({ id: generateId(), packageName }));\n const removePackage = (id: string) => dispatch(actions.removePowerhousePackage({ id }));\n const addDocType = (packageId: string, documentType: string) => dispatch(actions.addPackageDocumentType({ packageId, documentType }));\n const removeDocType = (packageId: string, documentType: string) => dispatch(actions.removePackageDocumentType({ packageId, documentType }));\n\n // external-skill dispatchers\n const addSkill = (name: string, githubUrl: string) => dispatch(actions.addExternalSkill({ id: generateId(), name, githubUrl }));\n const removeSkill = (id: string) => dispatch(actions.removeExternalSkill({ id }));\n\n // publish dispatchers\n const bumpVersion = (version: string) => dispatch(actions.bumpVersion({ version }));\n const publishDev = () => dispatch(actions.publishDev({ id: generateId(), timestamp: new Date().toISOString() }));\n const publishStaging = () => dispatch(actions.publishStaging({ id: generateId(), timestamp: new Date().toISOString() }));\n const publishProduction = () => dispatch(actions.publishProduction({ id: generateId(), timestamp: new Date().toISOString() }));\n\n // main agent dispatchers\n const setMainAgentName = (name: string) => dispatch(actions.setMainAgentName({ name }));\n const setMainAgentDescription = (description: string) => dispatch(actions.setMainAgentDescription({ description }));\n const clearMainAgentDescription = () => dispatch(actions.clearMainAgentDescription({ _: true }));\n const setMainAgentImage = (attachment: string) => dispatch(actions.setMainAgentImage({ attachment }));\n const clearMainAgentImage = () => dispatch(actions.clearMainAgentImage({ _: true }));\n\n // sub agent dispatchers\n const addSubAgent = (id: string, name: string, description: string, modelId: string) => dispatch(actions.addSubAgent({ id, name, description, modelId }));\n const removeSubAgent = (id: string) => dispatch(actions.removeSubAgent({ id }));\n const setSubAgentName = (id: string, name: string) => dispatch(actions.setSubAgentName({ id, name }));\n const setSubAgentDescription = (id: string, description: string) => dispatch(actions.setSubAgentDescription({ id, description }));\n\n // library dispatchers\n const addModel = (id: string) => dispatch(actions.addModel({ id }));\n const removeModel = (id: string) => dispatch(actions.removeModel({ id }));\n const addProfile = (id: string, title: string, content: string, insertBefore?: string) => dispatch(actions.addProfile({ id, title, content, insertBefore }));\n const updateProfile = (id: string, title?: string, content?: string) => dispatch(actions.updateProfile({ id, title, content }));\n const removeProfile = (id: string) => dispatch(actions.removeProfile({ id }));\n const reorderProfiles = (ids: string[], insertBefore: string | null) => dispatch(actions.reorderProfiles({ ids, insertBefore }));\n\n // per-agent binding dispatchers\n const setAgentModel = (agentId: string, modelId: string) => dispatch(actions.setAgentModel({ agentId, modelId }));\n const addAgentProfileRef = (agentId: string, profileId: string, insertBefore?: string) => dispatch(actions.addAgentProfileRef({ agentId, profileId, insertBefore }));\n const removeAgentProfileRef = (agentId: string, profileId: string) => dispatch(actions.removeAgentProfileRef({ agentId, profileId }));\n const reorderAgentProfileRefs = (agentId: string, ids: string[], insertBefore: string | null) => dispatch(actions.reorderAgentProfileRefs({ agentId, ids, insertBefore }));\n const addAgentSkill = (agentId: string, name: string) => dispatch(actions.addAgentSkill({ agentId, name }));\n const removeAgentSkill = (agentId: string, name: string) => dispatch(actions.removeAgentSkill({ agentId, name }));\n const addAgentToolPattern = (agentId: string, pattern: string) => dispatch(actions.addAgentToolPattern({ agentId, pattern }));\n const removeAgentToolPattern = (agentId: string, pattern: string) => dispatch(actions.removeAgentToolPattern({ agentId, pattern }));\n\n // chat dispatcher\n const setEnableChat = (enabled: boolean) => dispatch(actions.setEnableChat({ enabled }));\n\n // deployment dispatchers\n const setProxyEnabled = (enabled: boolean) => dispatch(actions.setProxyEnabled({ enabled }));\n const setObservabilityEnabled = (enabled: boolean) => dispatch(actions.setObservabilityEnabled({ enabled }));\n const addSupportedResource = (resource: string) => dispatch(actions.addSupportedResource({ resource }));\n const removeSupportedResource = (resource: string) => dispatch(actions.removeSupportedResource({ resource }));\n\n const isAboveDisabled = powerhouse !== 'Disabled';\n\n const tabClasses = (tab: Tab) => `px-4 py-2 text-sm font-medium border-b-2 cursor-pointer ${activeTab === tab ? 'border-blue-500 text-blue-600' : 'border-transparent text-gray-500 hover:text-gray-700'}`;\n\n return (\n <div className=\"mx-auto max-w-4xl bg-gray-50 p-6\">\n <DocumentToolbar />\n\n <div className=\"ph-default-styles\">\n <h2 className=\"mt-4 text-xl font-bold\">ph-clint Project Spec</h2>\n\n <nav className=\"my-4 flex border-b border-gray-200\">\n {TAB_LABELS.map((t) => (\n <button key={t.value} className={tabClasses(t.value)} onClick={() => setActiveTab(t.value)}>\n {t.label}\n </button>\n ))}\n </nav>\n\n {activeTab === 'cli' && (\n <CliTab\n state={state}\n powerhouse={powerhouse}\n mastra={mastra}\n routine={routine}\n isAboveDisabled={isAboveDisabled}\n setPackageIdentifier={setPackageIdentifier}\n setVersion={setVersion}\n setDescription={setDescription}\n setPowerhouseLevel={setPowerhouseLevel}\n toggleMastra={toggleMastra}\n toggleRoutine={toggleRoutine}\n setEnableChat={setEnableChat}\n addModel={addModel}\n removeModel={removeModel}\n />\n )}\n\n {activeTab === 'agents' && (\n <AgentsTab\n mastra={mastra}\n attachments={attachmentService}\n setMainAgentName={setMainAgentName}\n setMainAgentDescription={setMainAgentDescription}\n clearMainAgentDescription={clearMainAgentDescription}\n setMainAgentImage={setMainAgentImage}\n clearMainAgentImage={clearMainAgentImage}\n addSubAgent={addSubAgent}\n removeSubAgent={removeSubAgent}\n setSubAgentName={setSubAgentName}\n setSubAgentDescription={setSubAgentDescription}\n setAgentModel={setAgentModel}\n addAgentProfileRef={addAgentProfileRef}\n removeAgentProfileRef={removeAgentProfileRef}\n reorderAgentProfileRefs={reorderAgentProfileRefs}\n addAgentSkill={addAgentSkill}\n removeAgentSkill={removeAgentSkill}\n addAgentToolPattern={addAgentToolPattern}\n removeAgentToolPattern={removeAgentToolPattern}\n />\n )}\n\n {activeTab === 'profiles' && <ProfilesTab mastra={mastra} addProfile={addProfile} updateProfile={updateProfile} removeProfile={removeProfile} reorderProfiles={reorderProfiles} />}\n\n {activeTab === 'skills' && <SkillsTab skills={state.externalSkills} addSkill={addSkill} removeSkill={removeSkill} />}\n\n {activeTab === 'powerhouse' && <PowerhouseTab packages={state.packages} isAboveDisabled={isAboveDisabled} addPackage={addPackage} removePackage={removePackage} addDocType={addDocType} removeDocType={removeDocType} />}\n\n {activeTab === 'publish' && (\n <PublishTab\n version={state.version}\n publishHistory={state.publishHistory}\n documentHeader={document.header}\n deployment={state.deployment}\n bumpVersion={bumpVersion}\n publishDev={publishDev}\n publishStaging={publishStaging}\n publishProduction={publishProduction}\n setProxyEnabled={setProxyEnabled}\n setObservabilityEnabled={setObservabilityEnabled}\n addSupportedResource={addSupportedResource}\n removeSupportedResource={removeSupportedResource}\n />\n )}\n </div>\n </div>\n );\n}\n\n/* ── CLI Tab ──────────────────────────────────────────────────── */\n\nfunction CliTab(props: {\n state: PhClintProjectState;\n powerhouse: PowerhouseLevel;\n mastra: PhClintMastraFeature;\n routine: { enabled: boolean };\n isAboveDisabled: boolean;\n setPackageIdentifier: (identifier: string) => void;\n setVersion: (version: string) => void;\n setDescription: (description: string) => void;\n setPowerhouseLevel: (level: PowerhouseLevel) => void;\n toggleMastra: (enabled: boolean) => void;\n toggleRoutine: (enabled: boolean) => void;\n setEnableChat: (enabled: boolean) => void;\n addModel: (id: string) => void;\n removeModel: (id: string) => void;\n}) {\n const { state, mastra } = props;\n const packageIdentifier = `${state.scope ? state.scope + '/' : ''}${state.name ?? ''}`;\n\n return (\n <>\n <section className=\"my-6\">\n <h3 className=\"text-lg font-semibold\">Identity</h3>\n <div className=\"grid grid-cols-[3fr_1fr] gap-4\">\n <TextField label=\"Package name\" value={packageIdentifier} placeholder=\"@scope/my-tool-cli\" onCommit={props.setPackageIdentifier} />\n <TextField label=\"Version\" value={state.version} placeholder=\"0.1.0\" onCommit={props.setVersion} />\n </div>\n <TextField label=\"Description\" value={state.description} placeholder=\"What this CLI does\" onCommit={props.setDescription} />\n </section>\n\n <hr />\n\n <section className=\"my-6\">\n <h3 className=\"text-lg font-semibold\">Features</h3>\n\n <div className=\"my-4 rounded border border-gray-200 bg-white p-4\">\n <h4 className=\"text-base font-semibold\">Powerhouse</h4>\n {props.isAboveDisabled && <p className=\"text-sm text-gray-500\">Cannot go back to Disabled once enabled</p>}\n <div className=\"mt-2 space-y-2\">\n {POWERHOUSE_LEVELS.map((level, i) => (\n <label key={level.value} className=\"flex items-start gap-2\">\n {i > 0 && <div className=\"absolute -mt-3 ml-[7px] h-3 border-l border-gray-300\" />}\n <input type=\"radio\" name=\"powerhouse-level\" checked={props.powerhouse === level.value} disabled={props.isAboveDisabled && level.value === 'Disabled'} onChange={() => props.setPowerhouseLevel(level.value)} className=\"mt-0.5\" />\n <div>\n <span className=\"font-medium\">{level.value}</span>\n <span className=\"ml-2 text-sm text-gray-500\">{level.description}</span>\n </div>\n </label>\n ))}\n </div>\n </div>\n\n <div className=\"my-4 rounded border border-gray-200 bg-white p-4\">\n <Toggle label=\"Mastra\" checked={mastra.enabled} hint=\"AI agent framework\" onChange={props.toggleMastra} />\n {mastra.enabled && (\n <div className=\"mt-4 space-y-4 border-t border-gray-100 pt-4\">\n <ModelsSection models={mastra.models} main={mastra.mainAgent} subAgents={mastra.subAgents} addModel={props.addModel} removeModel={props.removeModel} />\n <div>\n <h4 className=\"text-sm font-semibold text-gray-700\">Common</h4>\n <Toggle\n label=\"Enable Chat\"\n checked={mastra.common.enableChat}\n disabled={!props.isAboveDisabled}\n hint={props.isAboveDisabled ? 'Chat session integration via clint-common' : 'Requires Powerhouse to be enabled'}\n onChange={props.setEnableChat}\n />\n </div>\n </div>\n )}\n </div>\n\n <div className=\"my-4 rounded border border-gray-200 bg-white p-4\">\n <Toggle label=\"Routine loop\" checked={props.routine.enabled} hint=\"tick-based execution loop with triggers\" onChange={props.toggleRoutine} />\n </div>\n </section>\n </>\n );\n}\n\n/* ── Agents Tab ───────────────────────────────────────────────── */\n\ninterface AgentsTabProps {\n mastra: PhClintMastraFeature;\n attachments?: IAttachmentService;\n setMainAgentName: (name: string) => void;\n setMainAgentDescription: (description: string) => void;\n clearMainAgentDescription: () => void;\n setMainAgentImage: (image: string) => void;\n clearMainAgentImage: () => void;\n addSubAgent: (id: string, name: string, description: string, modelId: string) => void;\n removeSubAgent: (id: string) => void;\n setSubAgentName: (id: string, name: string) => void;\n setSubAgentDescription: (id: string, description: string) => void;\n setAgentModel: (agentId: string, modelId: string) => void;\n addAgentProfileRef: (agentId: string, profileId: string, insertBefore?: string) => void;\n removeAgentProfileRef: (agentId: string, profileId: string) => void;\n reorderAgentProfileRefs: (agentId: string, ids: string[], insertBefore: string | null) => void;\n addAgentSkill: (agentId: string, name: string) => void;\n removeAgentSkill: (agentId: string, name: string) => void;\n addAgentToolPattern: (agentId: string, pattern: string) => void;\n removeAgentToolPattern: (agentId: string, pattern: string) => void;\n}\n\nfunction AgentsTab(props: AgentsTabProps) {\n const { mastra, attachments } = props;\n const main = mastra.mainAgent;\n const [showAddForm, setShowAddForm] = useState(false);\n\n if (!mastra.enabled || !main) {\n return (\n <section className=\"my-6 rounded border border-dashed border-gray-300 bg-white p-8 text-center text-gray-500\">\n <h3 className=\"text-lg font-semibold\">Agents</h3>\n <p className=\"mt-2\">Enable Mastra in the CLI tab to configure agents.</p>\n </section>\n );\n }\n\n const allAgentIds = [main.id, ...mastra.subAgents.map((s) => s.id)];\n\n return (\n <>\n <MainAgentCard\n main={main}\n models={mastra.models}\n profiles={mastra.profiles}\n attachments={attachments}\n setMainAgentName={props.setMainAgentName}\n setMainAgentDescription={props.setMainAgentDescription}\n clearMainAgentDescription={props.clearMainAgentDescription}\n setMainAgentImage={props.setMainAgentImage}\n clearMainAgentImage={props.clearMainAgentImage}\n setAgentModel={props.setAgentModel}\n addAgentProfileRef={props.addAgentProfileRef}\n removeAgentProfileRef={props.removeAgentProfileRef}\n reorderAgentProfileRefs={props.reorderAgentProfileRefs}\n addAgentSkill={props.addAgentSkill}\n removeAgentSkill={props.removeAgentSkill}\n addAgentToolPattern={props.addAgentToolPattern}\n removeAgentToolPattern={props.removeAgentToolPattern}\n />\n\n {mastra.subAgents.map((sub) => (\n <SubAgentCard\n key={sub.id}\n sub={sub}\n models={mastra.models}\n profiles={mastra.profiles}\n removeSubAgent={props.removeSubAgent}\n setSubAgentName={props.setSubAgentName}\n setSubAgentDescription={props.setSubAgentDescription}\n setAgentModel={props.setAgentModel}\n addAgentProfileRef={props.addAgentProfileRef}\n removeAgentProfileRef={props.removeAgentProfileRef}\n reorderAgentProfileRefs={props.reorderAgentProfileRefs}\n addAgentSkill={props.addAgentSkill}\n removeAgentSkill={props.removeAgentSkill}\n addAgentToolPattern={props.addAgentToolPattern}\n removeAgentToolPattern={props.removeAgentToolPattern}\n />\n ))}\n\n <section className=\"my-6\">\n {showAddForm ? (\n <AddSubAgentForm\n models={mastra.models}\n existingAgentIds={allAgentIds}\n onAdd={(id, name, description, modelId) => {\n props.addSubAgent(id, name, description, modelId);\n setShowAddForm(false);\n }}\n onCancel={() => setShowAddForm(false)}\n />\n ) : (\n <button\n className=\"rounded bg-blue-500 px-3 py-2 text-sm text-white hover:bg-blue-600 disabled:cursor-not-allowed disabled:opacity-50\"\n disabled={mastra.models.length === 0}\n title={mastra.models.length === 0 ? 'Add a model first (CLI tab → Mastra)' : ''}\n onClick={() => setShowAddForm(true)}\n >\n + Add Sub-agent\n </button>\n )}\n </section>\n </>\n );\n}\n\n/* ── Main Agent card (collapsible, sits as a peer of sub-agents) ── */\n\ninterface MainAgentCardProps {\n main: PhClintMainAgent;\n models: PhClintAgentModel[];\n profiles: PhClintAgentProfile[];\n attachments?: IAttachmentService;\n setMainAgentName: (name: string) => void;\n setMainAgentDescription: (description: string) => void;\n clearMainAgentDescription: () => void;\n setMainAgentImage: (image: string) => void;\n clearMainAgentImage: () => void;\n setAgentModel: (agentId: string, modelId: string) => void;\n addAgentProfileRef: (agentId: string, profileId: string, insertBefore?: string) => void;\n removeAgentProfileRef: (agentId: string, profileId: string) => void;\n reorderAgentProfileRefs: (agentId: string, ids: string[], insertBefore: string | null) => void;\n addAgentSkill: (agentId: string, name: string) => void;\n removeAgentSkill: (agentId: string, name: string) => void;\n addAgentToolPattern: (agentId: string, pattern: string) => void;\n removeAgentToolPattern: (agentId: string, pattern: string) => void;\n}\n\nfunction MainAgentCard(props: MainAgentCardProps) {\n const { main } = props;\n const [expanded, setExpanded] = useState(true);\n\n return (\n <div className=\"my-3 rounded border border-gray-200 bg-white p-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <button className=\"text-sm text-gray-400 hover:text-gray-700\" onClick={() => setExpanded(!expanded)} title={expanded ? 'Collapse' : 'Expand'}>\n {expanded ? '▾' : '▸'}\n </button>\n <span className=\"rounded bg-gray-100 px-2 py-0.5 font-mono text-xs text-gray-500\">{main.id}</span>\n <span className=\"font-semibold\">{main.name}</span>\n <span className=\"rounded bg-blue-100 px-2 py-0.5 text-xs font-semibold text-blue-700\">Main</span>\n </div>\n </div>\n {main.description && <p className=\"ml-7 text-sm text-gray-600\">{main.description}</p>}\n\n {expanded && (\n <div className=\"mt-4 space-y-3 border-t border-gray-100 pt-4\">\n <div style={{ display: 'flex', gap: '1.5rem' }}>\n <div style={{ flexShrink: 0, width: '7rem' }}>\n <AgentImageField attachmentRef={main.attachment ?? null} attachments={props.attachments} onSetImage={props.setMainAgentImage} onClearImage={props.clearMainAgentImage} />\n </div>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div className=\"grid grid-cols-[1fr_2fr] gap-4\">\n <TextField compact readOnly label=\"Agent ID\" value={main.id} onCommit={() => {}} />\n <TextField compact label=\"Agent Name\" value={main.name} placeholder=\"My Agent\" onCommit={props.setMainAgentName} />\n </div>\n <DescriptionField value={main.description} placeholder=\"A brief description of what this agent does\" onSet={props.setMainAgentDescription} onClear={props.clearMainAgentDescription} />\n </div>\n </div>\n\n <AgentBindings\n agentId={main.id}\n isMain\n modelId={main.modelId}\n profileIds={main.profileIds}\n skills={main.skills}\n toolPatterns={main.toolPatterns}\n models={props.models}\n profiles={props.profiles}\n setAgentModel={props.setAgentModel}\n addAgentProfileRef={props.addAgentProfileRef}\n removeAgentProfileRef={props.removeAgentProfileRef}\n reorderAgentProfileRefs={props.reorderAgentProfileRefs}\n addAgentSkill={props.addAgentSkill}\n removeAgentSkill={props.removeAgentSkill}\n addAgentToolPattern={props.addAgentToolPattern}\n removeAgentToolPattern={props.removeAgentToolPattern}\n />\n </div>\n )}\n </div>\n );\n}\n\nfunction DescriptionField(props: { value: string | null | undefined; placeholder: string; onSet: (v: string) => void; onClear: () => void }) {\n return (\n <label className=\"my-1 block\">\n <h3 className=\"text-xs text-gray-600\">Description</h3>\n <div className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n defaultValue={props.value ?? ''}\n placeholder={props.placeholder}\n onBlur={(e) => {\n const next = e.target.value.trim();\n if (next && next !== (props.value ?? '')) props.onSet(next);\n else if (!next && props.value !== null) props.onClear();\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') e.currentTarget.blur();\n }}\n className=\"w-full font-mono\"\n />\n </div>\n </label>\n );\n}\n\nfunction AddSubAgentForm(props: { models: PhClintAgentModel[]; existingAgentIds: string[]; onAdd: (id: string, name: string, description: string, modelId: string) => void; onCancel: () => void }) {\n const [id, setId] = useState('');\n const [name, setName] = useState('');\n const [description, setDescription] = useState('');\n const [modelId, setModelId] = useState<string>(props.models[0]?.id ?? '');\n\n const idValid = /^[a-z][a-z0-9-]*$/.test(id) && !props.existingAgentIds.includes(id);\n const canAdd = idValid && name.trim() && description.trim() && modelId;\n\n return (\n <div className=\"my-3 rounded border border-blue-200 bg-blue-50 p-4\">\n <div className=\"grid grid-cols-2 gap-3\">\n <label className=\"block\">\n <span className=\"text-xs text-gray-600\">Sub-agent ID</span>\n <input type=\"text\" value={id} placeholder=\"summarizer\" onChange={(e) => setId(e.target.value.trim())} className=\"w-full rounded border p-2 font-mono text-sm\" />\n </label>\n <label className=\"block\">\n <span className=\"text-xs text-gray-600\">Display name</span>\n <input type=\"text\" value={name} placeholder=\"Summarizer\" onChange={(e) => setName(e.target.value)} className=\"w-full rounded border p-2 text-sm\" />\n </label>\n </div>\n <label className=\"my-2 block\">\n <span className=\"text-xs text-gray-600\">Description (the main agent uses this to decide when to delegate)</span>\n <input type=\"text\" value={description} placeholder=\"Summarizes long documents into bullet points\" onChange={(e) => setDescription(e.target.value)} className=\"w-full rounded border p-2 text-sm\" />\n </label>\n <label className=\"my-2 block\">\n <span className=\"text-xs text-gray-600\">Model</span>\n <select value={modelId} onChange={(e) => setModelId(e.target.value)} className=\"w-full rounded border p-2 font-mono text-sm\">\n {props.models.map((m) => (\n <option key={m.id} value={m.id}>\n {m.id}\n </option>\n ))}\n </select>\n </label>\n <div className=\"mt-2 flex items-center gap-2\">\n <button className=\"rounded bg-blue-500 px-3 py-2 text-sm text-white hover:bg-blue-600 disabled:cursor-not-allowed disabled:opacity-50\" disabled={!canAdd} onClick={() => props.onAdd(id, name.trim(), description.trim(), modelId)}>\n Add\n </button>\n <button className=\"text-sm text-gray-500 hover:text-gray-700\" onClick={props.onCancel}>\n Cancel\n </button>\n </div>\n </div>\n );\n}\n\ninterface SubAgentCardProps {\n sub: PhClintSubAgent;\n models: PhClintAgentModel[];\n profiles: PhClintAgentProfile[];\n removeSubAgent: (id: string) => void;\n setSubAgentName: (id: string, name: string) => void;\n setSubAgentDescription: (id: string, description: string) => void;\n setAgentModel: (agentId: string, modelId: string) => void;\n addAgentProfileRef: (agentId: string, profileId: string, insertBefore?: string) => void;\n removeAgentProfileRef: (agentId: string, profileId: string) => void;\n reorderAgentProfileRefs: (agentId: string, ids: string[], insertBefore: string | null) => void;\n addAgentSkill: (agentId: string, name: string) => void;\n removeAgentSkill: (agentId: string, name: string) => void;\n addAgentToolPattern: (agentId: string, pattern: string) => void;\n removeAgentToolPattern: (agentId: string, pattern: string) => void;\n}\n\nfunction SubAgentCard(props: SubAgentCardProps) {\n const { sub } = props;\n const [expanded, setExpanded] = useState(false);\n\n return (\n <div className=\"my-3 rounded border border-gray-200 bg-white p-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <button className=\"text-sm text-gray-400 hover:text-gray-700\" onClick={() => setExpanded(!expanded)} title={expanded ? 'Collapse' : 'Expand'}>\n {expanded ? '▾' : '▸'}\n </button>\n <span className=\"rounded bg-gray-100 px-2 py-0.5 font-mono text-xs text-gray-500\">{sub.id}</span>\n <span className=\"font-semibold\">{sub.name}</span>\n </div>\n <button className=\"text-sm text-red-500 hover:text-red-700\" onClick={() => props.removeSubAgent(sub.id)}>\n Remove\n </button>\n </div>\n <p className=\"ml-7 text-sm text-gray-600\">{sub.description}</p>\n\n {expanded && (\n <div className=\"mt-4 space-y-3 border-t border-gray-100 pt-4\">\n <div className=\"grid grid-cols-2 gap-3\">\n <TextField compact label=\"Name\" value={sub.name} onCommit={(v) => props.setSubAgentName(sub.id, v)} />\n <TextField compact label=\"Description\" value={sub.description} onCommit={(v) => props.setSubAgentDescription(sub.id, v)} />\n </div>\n <AgentBindings\n agentId={sub.id}\n isMain={false}\n modelId={sub.modelId}\n profileIds={sub.profileIds}\n skills={sub.skills}\n toolPatterns={sub.toolPatterns}\n models={props.models}\n profiles={props.profiles}\n setAgentModel={props.setAgentModel}\n addAgentProfileRef={props.addAgentProfileRef}\n removeAgentProfileRef={props.removeAgentProfileRef}\n reorderAgentProfileRefs={props.reorderAgentProfileRefs}\n addAgentSkill={props.addAgentSkill}\n removeAgentSkill={props.removeAgentSkill}\n addAgentToolPattern={props.addAgentToolPattern}\n removeAgentToolPattern={props.removeAgentToolPattern}\n />\n </div>\n )}\n </div>\n );\n}\n\n/* ── Agent bindings (per-agent model + profiles + skills + tool patterns) ── */\n\ninterface AgentBindingsProps {\n agentId: string;\n isMain: boolean;\n modelId: string;\n profileIds: string[];\n skills: string[];\n toolPatterns: string[];\n models: PhClintAgentModel[];\n profiles: PhClintAgentProfile[];\n setAgentModel: (agentId: string, modelId: string) => void;\n addAgentProfileRef: (agentId: string, profileId: string, insertBefore?: string) => void;\n removeAgentProfileRef: (agentId: string, profileId: string) => void;\n reorderAgentProfileRefs: (agentId: string, ids: string[], insertBefore: string | null) => void;\n addAgentSkill: (agentId: string, name: string) => void;\n removeAgentSkill: (agentId: string, name: string) => void;\n addAgentToolPattern: (agentId: string, pattern: string) => void;\n removeAgentToolPattern: (agentId: string, pattern: string) => void;\n}\n\nfunction AgentBindings(props: AgentBindingsProps) {\n return (\n <div className=\"space-y-3\">\n <label className=\"block\">\n <span className=\"text-xs text-gray-600\">Model</span>\n <select value={props.modelId} onChange={(e) => props.setAgentModel(props.agentId, e.target.value)} className=\"mt-1 w-full rounded border p-2 font-mono text-sm\">\n {props.models.map((m) => (\n <option key={m.id} value={m.id}>\n {m.id}\n </option>\n ))}\n </select>\n </label>\n\n <ProfileRefsEditor\n agentId={props.agentId}\n profileIds={props.profileIds}\n allProfiles={props.profiles}\n onAdd={(profileId) => props.addAgentProfileRef(props.agentId, profileId)}\n onRemove={(profileId) => props.removeAgentProfileRef(props.agentId, profileId)}\n onReorder={(ids, insertBefore) => props.reorderAgentProfileRefs(props.agentId, ids, insertBefore)}\n />\n\n <ChipListEditor\n label=\"Skills\"\n hint=\"Reference skills by name. tpl wins over ext if both exist.\"\n values={props.skills}\n placeholder=\"skill-name\"\n validator={(v) => /^[a-z][a-z0-9-]*$/.test(v)}\n onAdd={(v) => props.addAgentSkill(props.agentId, v)}\n onRemove={(v) => props.removeAgentSkill(props.agentId, v)}\n />\n\n <ChipListEditor\n label=\"Tool patterns\"\n hint={props.isMain ? 'Glob patterns over tool names (e.g. clint-project-*, *-mcp__*). Empty = all tools.' : 'Glob patterns over tool names. Empty = no tools.'}\n values={props.toolPatterns}\n placeholder=\"pattern*\"\n validator={(v) => v.length > 0}\n onAdd={(v) => props.addAgentToolPattern(props.agentId, v)}\n onRemove={(v) => props.removeAgentToolPattern(props.agentId, v)}\n />\n </div>\n );\n}\n\nfunction ProfileRefsEditor(props: {\n agentId: string;\n profileIds: string[];\n allProfiles: PhClintAgentProfile[];\n onAdd: (profileId: string) => void;\n onRemove: (profileId: string) => void;\n onReorder: (ids: string[], insertBefore: string | null) => void;\n}) {\n const available = props.allProfiles.filter((p) => !props.profileIds.includes(p.id));\n\n const moveUp = (index: number) => {\n if (index === 0) return;\n const id = props.profileIds[index];\n const beforeId = props.profileIds[index - 1];\n props.onReorder([id], beforeId);\n };\n\n const moveDown = (index: number) => {\n if (index >= props.profileIds.length - 1) return;\n const id = props.profileIds[index];\n const afterNext = index + 2 < props.profileIds.length ? props.profileIds[index + 2] : null;\n props.onReorder([id], afterNext);\n };\n\n return (\n <div>\n <span className=\"text-xs text-gray-600\">Profiles (instructions, in order)</span>\n <ul className=\"my-1 space-y-1\">\n {props.profileIds.map((profileId, i) => {\n const profile = props.allProfiles.find((p) => p.id === profileId);\n return (\n <li key={profileId} className=\"flex items-center gap-2 rounded bg-gray-50 px-2 py-1\">\n <button className=\"text-gray-400 hover:text-gray-600 disabled:opacity-30\" disabled={i === 0} onClick={() => moveUp(i)} title=\"Move up\">\n ↑\n </button>\n <button className=\"text-gray-400 hover:text-gray-600 disabled:opacity-30\" disabled={i === props.profileIds.length - 1} onClick={() => moveDown(i)} title=\"Move down\">\n ↓\n </button>\n <span className=\"font-mono text-xs text-gray-500\">{profileId}</span>\n <span className=\"flex-1 text-sm\">{profile?.title ?? <em className=\"text-red-500\">(missing in library)</em>}</span>\n <button className=\"text-sm text-red-500 hover:text-red-700\" onClick={() => props.onRemove(profileId)}>\n Remove\n </button>\n </li>\n );\n })}\n {props.profileIds.length === 0 && <li className=\"px-2 py-1 text-sm italic text-gray-400\">No profiles assigned</li>}\n </ul>\n {available.length > 0 && (\n <select\n value=\"\"\n onChange={(e) => {\n if (e.target.value) props.onAdd(e.target.value);\n }}\n className=\"rounded border p-1 text-sm\"\n >\n <option value=\"\">+ Add profile…</option>\n {available.map((p) => (\n <option key={p.id} value={p.id}>\n {p.title} ({p.id})\n </option>\n ))}\n </select>\n )}\n </div>\n );\n}\n\nfunction ChipListEditor(props: { label: string; hint: string; values: string[]; placeholder: string; validator: (v: string) => boolean; onAdd: (v: string) => void; onRemove: (v: string) => void }) {\n const [input, setInput] = useState('');\n const valid = props.validator(input.trim());\n\n return (\n <div>\n <span className=\"text-xs text-gray-600\">{props.label}</span>\n <p className=\"text-xs text-gray-500\">{props.hint}</p>\n <div className=\"my-1 flex flex-wrap items-center gap-1\">\n {props.values.map((v) => (\n <span key={v} className=\"flex items-center gap-1 rounded bg-gray-100 px-2 py-1 font-mono text-xs\">\n {v}\n <button className=\"text-red-500 hover:text-red-700\" onClick={() => props.onRemove(v)} title=\"Remove\">\n ×\n </button>\n </span>\n ))}\n </div>\n <div className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n placeholder={props.placeholder}\n value={input}\n onChange={(e) => setInput(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && valid) {\n props.onAdd(input.trim());\n setInput('');\n }\n }}\n className=\"flex-1 rounded border p-1 font-mono text-sm\"\n />\n <button\n className=\"rounded bg-blue-500 px-2 py-1 text-xs text-white hover:bg-blue-600 disabled:cursor-not-allowed disabled:opacity-50\"\n disabled={!valid}\n onClick={() => {\n props.onAdd(input.trim());\n setInput('');\n }}\n >\n Add\n </button>\n </div>\n </div>\n );\n}\n\n/* ── Agent image (avatar) — main only ────────────────────────── */\n\nfunction AgentImageField(props: { attachmentRef: string | null | undefined; attachments?: IAttachmentService; onSetImage: (ref: string) => void; onClearImage: () => void }) {\n const [isDragOver, setIsDragOver] = useState(false);\n const [objectUrl, setObjectUrl] = useState<string | undefined>(undefined);\n const dragDepthRef = useRef(0);\n const toast = usePHToast();\n\n useEffect(() => {\n if (!props.attachmentRef || !props.attachments) {\n setObjectUrl(undefined);\n return;\n }\n let cancelled = false;\n let createdUrl: string | undefined;\n void (async () => {\n try {\n const { body, header } = await props.attachments!.get(props.attachmentRef as Parameters<NonNullable<typeof props.attachments>['get']>[0]);\n const chunks: Uint8Array[] = [];\n const reader = body.getReader();\n for (;;) {\n const { done, value } = await reader.read();\n if (cancelled) break;\n if (done) break;\n if (value) chunks.push(value);\n }\n if (cancelled) return;\n const blob = new Blob(chunks as BlobPart[], { type: header.mimeType });\n const url = URL.createObjectURL(blob);\n createdUrl = url;\n setObjectUrl(url);\n } catch {\n // attachment not yet available or service error\n }\n })();\n return () => {\n cancelled = true;\n if (createdUrl) URL.revokeObjectURL(createdUrl);\n };\n }, [props.attachmentRef, props.attachments]);\n\n const handleFile = async (file: File) => {\n if (!file.type.startsWith('image/')) return;\n if (!props.attachments) {\n toast?.('Attachment service unavailable — cannot upload image', { type: 'error' });\n return;\n }\n try {\n const upload = await props.attachments.reserve({ mimeType: file.type, fileName: file.name });\n const { ref } = await upload.send(file.stream());\n props.onSetImage(ref);\n } catch (err) {\n toast?.(`Failed to upload image: ${err instanceof Error ? err.message : String(err)}`, { type: 'error' });\n }\n };\n\n const onDragOver = useCallback((e: React.DragEvent) => {\n if (e.dataTransfer.types.includes('Files')) {\n e.preventDefault();\n e.stopPropagation();\n }\n }, []);\n\n const onDragEnter = useCallback((e: React.DragEvent) => {\n if (e.dataTransfer.types.includes('Files')) {\n e.stopPropagation();\n dragDepthRef.current += 1;\n if (dragDepthRef.current === 1) setIsDragOver(true);\n }\n }, []);\n\n const onDragLeave = useCallback((e: React.DragEvent) => {\n if (e.dataTransfer.types.includes('Files')) {\n e.stopPropagation();\n dragDepthRef.current = Math.max(0, dragDepthRef.current - 1);\n if (dragDepthRef.current === 0) setIsDragOver(false);\n }\n }, []);\n\n const onDrop = useCallback((e: React.DragEvent) => {\n if (e.dataTransfer.types.includes('Files')) {\n e.preventDefault();\n e.stopPropagation();\n dragDepthRef.current = 0;\n setIsDragOver(false);\n const file = e.dataTransfer.files[0];\n if (file) void handleFile(file);\n }\n }, []);\n\n const SIZE = '7rem';\n\n return (\n <div style={{ width: SIZE, height: SIZE, flexShrink: 0 }} className=\"relative my-3\">\n {props.attachmentRef ? (\n <>\n {objectUrl && <img src={objectUrl} alt=\"Agent\" style={{ width: SIZE, height: SIZE }} className=\"rounded border border-gray-200 object-cover\" />}\n {!objectUrl && <div style={{ width: SIZE, height: SIZE }} className=\"rounded border border-gray-200 bg-gray-100\" />}\n <div className=\"mt-1 flex justify-center gap-1\">\n <label className=\"cursor-pointer rounded bg-gray-100 px-2 py-0.5 text-xs hover:bg-gray-200\">\n Replace\n <input\n type=\"file\"\n accept=\"image/*\"\n className=\"hidden\"\n onChange={(e) => {\n if (e.target.files?.[0]) void handleFile(e.target.files[0]);\n }}\n />\n </label>\n <button className=\"rounded bg-gray-100 px-2 py-0.5 text-xs text-red-600 hover:bg-gray-200\" onClick={props.onClearImage}>\n Remove\n </button>\n </div>\n </>\n ) : (\n <div\n style={{ width: SIZE, height: SIZE }}\n className={`flex flex-col items-center justify-center rounded border-2 border-dashed text-center ${isDragOver ? 'border-blue-400 bg-blue-50' : 'border-gray-300 bg-white'}`}\n onDragOver={onDragOver}\n onDragEnter={onDragEnter}\n onDragLeave={onDragLeave}\n onDrop={onDrop}\n >\n <label className=\"cursor-pointer p-2 text-xs text-gray-500 hover:text-blue-600\">\n Drop image or click\n <input\n type=\"file\"\n accept=\"image/*\"\n className=\"hidden\"\n onChange={(e) => {\n if (e.target.files?.[0]) void handleFile(e.target.files[0]);\n }}\n />\n </label>\n </div>\n )}\n </div>\n );\n}\n\n/* ── Models library (inlined under CLI > Features > Mastra) ─── */\n\nfunction ModelsSection(props: { models: PhClintAgentModel[]; main: PhClintMainAgent | null | undefined; subAgents: PhClintSubAgent[]; addModel: (id: string) => void; removeModel: (id: string) => void }) {\n const [newModelId, setNewModelId] = useState('');\n\n const usersOf = (modelId: string): string[] => {\n const u: string[] = [];\n if (props.main?.modelId === modelId) u.push(props.main.id);\n for (const s of props.subAgents) if (s.modelId === modelId) u.push(s.id);\n return u;\n };\n\n const handleAdd = () => {\n const id = newModelId.trim();\n if (id) {\n props.addModel(id);\n setNewModelId('');\n }\n };\n\n return (\n <div>\n <h4 className=\"text-sm font-semibold text-gray-700\">Models</h4>\n <p className=\"text-xs text-gray-500\">\n Provider/model format (e.g. <code>anthropic/claude-sonnet-4-5</code>). Each agent picks one from this list.\n </p>\n\n {props.models.length > 0 && (\n <table className=\"mt-2 w-full text-sm\">\n <thead>\n <tr className=\"border-b text-left text-gray-500\">\n <th className=\"py-1\">Model</th>\n <th className=\"py-1\">Used by</th>\n <th className=\"py-1\" />\n </tr>\n </thead>\n <tbody>\n {props.models.map((m) => {\n const users = usersOf(m.id);\n const inUse = users.length > 0;\n return (\n <tr key={m.id} className=\"border-b border-gray-100\">\n <td className=\"py-2 font-mono\">{m.id}</td>\n <td className=\"py-2 text-xs text-gray-500\">{users.length === 0 ? <em>—</em> : users.join(', ')}</td>\n <td className=\"py-2 text-right\">\n <button className=\"text-red-500 hover:text-red-700 disabled:cursor-not-allowed disabled:text-gray-300\" disabled={inUse} title={inUse ? `In use by ${users.join(', ')}` : ''} onClick={() => props.removeModel(m.id)}>\n Remove\n </button>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n )}\n\n <div className=\"mt-2 flex items-center gap-2\">\n <input\n type=\"text\"\n placeholder=\"provider/model-name\"\n value={newModelId}\n onChange={(e) => setNewModelId(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleAdd();\n }}\n className=\"flex-1 rounded border p-2 font-mono text-sm\"\n />\n <button className=\"rounded bg-blue-500 px-3 py-2 text-sm text-white hover:bg-blue-600 disabled:opacity-50\" disabled={!newModelId.trim()} onClick={handleAdd}>\n Add Model\n </button>\n </div>\n </div>\n );\n}\n\n/* ── Profiles Tab ─────────────────────────────────────────────── */\n\nfunction ProfilesTab(props: {\n mastra: PhClintMastraFeature;\n addProfile: (id: string, title: string, content: string, insertBefore?: string) => void;\n updateProfile: (id: string, title?: string, content?: string) => void;\n removeProfile: (id: string) => void;\n reorderProfiles: (ids: string[], insertBefore: string | null) => void;\n}) {\n if (!props.mastra.enabled) {\n return (\n <section className=\"my-6 rounded border border-dashed border-gray-300 bg-white p-8 text-center text-gray-500\">\n <h3 className=\"text-lg font-semibold\">Profiles</h3>\n <p className=\"mt-2\">Enable Mastra in the CLI tab to manage agent profiles.</p>\n </section>\n );\n }\n\n return (\n <ProfilesSection\n profiles={props.mastra.profiles}\n main={props.mastra.mainAgent}\n subAgents={props.mastra.subAgents}\n addProfile={props.addProfile}\n updateProfile={props.updateProfile}\n removeProfile={props.removeProfile}\n reorderProfiles={props.reorderProfiles}\n />\n );\n}\n\nfunction ProfilesSection(props: {\n profiles: PhClintAgentProfile[];\n main: PhClintMainAgent | null | undefined;\n subAgents: PhClintSubAgent[];\n addProfile: (id: string, title: string, content: string, insertBefore?: string) => void;\n updateProfile: (id: string, title?: string, content?: string) => void;\n removeProfile: (id: string) => void;\n reorderProfiles: (ids: string[], insertBefore: string | null) => void;\n}) {\n const [showAddForm, setShowAddForm] = useState(false);\n const [newId, setNewId] = useState('');\n const [newTitle, setNewTitle] = useState('');\n\n const usersOf = (profileId: string): string[] => {\n const u: string[] = [];\n if (props.main?.profileIds.includes(profileId)) u.push(props.main.id);\n for (const s of props.subAgents) if (s.profileIds.includes(profileId)) u.push(s.id);\n return u;\n };\n\n const handleAdd = () => {\n const id = newId.trim();\n const title = newTitle.trim();\n if (id && title) {\n props.addProfile(id, title, '');\n setNewId('');\n setNewTitle('');\n setShowAddForm(false);\n }\n };\n\n const moveUp = (index: number) => {\n if (index === 0) return;\n const id = props.profiles[index].id;\n const beforeId = props.profiles[index - 1].id;\n props.reorderProfiles([id], beforeId);\n };\n\n const moveDown = (index: number) => {\n if (index >= props.profiles.length - 1) return;\n const id = props.profiles[index].id;\n const afterNext = index + 2 < props.profiles.length ? props.profiles[index + 2].id : null;\n props.reorderProfiles([id], afterNext);\n };\n\n return (\n <section className=\"my-6\">\n <h3 className=\"text-lg font-semibold\">Agent Profiles</h3>\n <p className=\"text-sm text-gray-600\">Markdown sections that compose into agents&apos; instructions. Reference these from each agent&apos;s profile list.</p>\n\n {props.profiles.map((profile, i) => {\n const users = usersOf(profile.id);\n const inUse = users.length > 0;\n return (\n <div key={profile.id} className=\"my-3 rounded border border-gray-200 bg-white p-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <span className=\"rounded bg-gray-100 px-2 py-0.5 font-mono text-xs text-gray-500\">{profile.id}</span>\n <input\n type=\"text\"\n defaultValue={profile.title}\n onBlur={(e) => {\n const next = e.target.value.trim();\n if (next && next !== profile.title) props.updateProfile(profile.id, next);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') e.currentTarget.blur();\n }}\n className=\"border-b border-transparent font-semibold hover:border-gray-300 focus:border-blue-500\"\n />\n {users.length > 0 && (\n <span className=\"rounded bg-blue-50 px-2 py-0.5 text-xs text-blue-700\" title={users.join(', ')}>\n used by: {users.join(', ')}\n </span>\n )}\n </div>\n <div className=\"flex items-center gap-1\">\n <button className=\"px-1 text-gray-400 hover:text-gray-600 disabled:opacity-30\" disabled={i === 0} onClick={() => moveUp(i)} title=\"Move up\">\n ↑\n </button>\n <button className=\"px-1 text-gray-400 hover:text-gray-600 disabled:opacity-30\" disabled={i === props.profiles.length - 1} onClick={() => moveDown(i)} title=\"Move down\">\n ↓\n </button>\n <button className=\"ml-2 text-sm text-red-500 hover:text-red-700 disabled:cursor-not-allowed disabled:text-gray-300\" disabled={inUse} title={inUse ? `In use by ${users.join(', ')}` : ''} onClick={() => props.removeProfile(profile.id)}>\n Remove\n </button>\n </div>\n </div>\n <textarea\n defaultValue={profile.content}\n onBlur={(e) => {\n const next = e.target.value;\n if (next !== profile.content) props.updateProfile(profile.id, undefined, next);\n }}\n placeholder=\"Markdown content for this profile section...\"\n rows={4}\n className=\"mt-2 w-full rounded border border-gray-200 p-2 font-mono text-sm\"\n />\n </div>\n );\n })}\n\n {showAddForm ? (\n <div className=\"my-3 rounded border border-blue-200 bg-blue-50 p-4\">\n <div className=\"flex items-center gap-2\">\n <input type=\"text\" placeholder=\"section-id\" value={newId} onChange={(e) => setNewId(e.target.value)} className=\"w-40 rounded border p-2 font-mono text-sm\" />\n <input\n type=\"text\"\n placeholder=\"Section Title\"\n value={newTitle}\n onChange={(e) => setNewTitle(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleAdd();\n }}\n className=\"flex-1 rounded border p-2 text-sm\"\n />\n <button className=\"rounded bg-blue-500 px-3 py-2 text-sm text-white hover:bg-blue-600 disabled:opacity-50\" disabled={!newId.trim() || !newTitle.trim()} onClick={handleAdd}>\n Add\n </button>\n <button\n className=\"text-sm text-gray-500 hover:text-gray-700\"\n onClick={() => {\n setShowAddForm(false);\n setNewId('');\n setNewTitle('');\n }}\n >\n Cancel\n </button>\n </div>\n </div>\n ) : (\n <button className=\"mt-3 rounded bg-blue-500 px-3 py-2 text-sm text-white hover:bg-blue-600\" onClick={() => setShowAddForm(true)}>\n + Add Profile\n </button>\n )}\n </section>\n );\n}\n\n/* ── Skills Tab ───────────────────────────────────────────────── */\n\nfunction SkillsTab(props: { skills: ExternalSkill[]; addSkill: (name: string, githubUrl: string) => void; removeSkill: (id: string) => void }) {\n return (\n <>\n <section className=\"my-6 rounded border border-dashed border-gray-300 bg-white p-8 text-center text-gray-500\">\n <h3 className=\"text-lg font-semibold\">Skill Templates</h3>\n <p className=\"mt-2\">Coming soon</p>\n </section>\n\n <hr />\n\n <ExternalSkillsSection skills={props.skills} addSkill={props.addSkill} removeSkill={props.removeSkill} />\n </>\n );\n}\n\nfunction ExternalSkillsSection(props: { skills: ExternalSkill[]; addSkill: (name: string, githubUrl: string) => void; removeSkill: (id: string) => void }) {\n const [newName, setNewName] = useState('');\n const [newUrl, setNewUrl] = useState('');\n\n const handleAdd = () => {\n if (newName.trim() && newUrl.trim()) {\n props.addSkill(newName.trim(), newUrl.trim());\n setNewName('');\n setNewUrl('');\n }\n };\n\n return (\n <section className=\"my-6\">\n <h3 className=\"text-lg font-semibold\">External Skills</h3>\n <p className=\"text-sm text-gray-600\">Skills from the skills.sh ecosystem, installed via GitHub URL.</p>\n\n {props.skills.length > 0 && (\n <ul className=\"mt-3 space-y-2\">\n {props.skills.map((skill) => (\n <li key={skill.id} className=\"flex items-center justify-between rounded border border-gray-200 bg-white p-3\">\n <div>\n <span className=\"font-mono font-semibold\">{skill.name}</span>\n <span className=\"ml-2 text-sm text-gray-500\">{skill.githubUrl}</span>\n </div>\n <button className=\"text-sm text-red-500 hover:text-red-700\" onClick={() => props.removeSkill(skill.id)}>\n Remove\n </button>\n </li>\n ))}\n </ul>\n )}\n\n <div className=\"mt-3 flex items-center gap-2\">\n <input type=\"text\" placeholder=\"skill-name\" value={newName} onChange={(e) => setNewName(e.target.value)} className=\"w-40 rounded border p-2 font-mono text-sm\" />\n <input\n type=\"text\"\n placeholder=\"https://github.com/org/repo\"\n value={newUrl}\n onChange={(e) => setNewUrl(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleAdd();\n }}\n className=\"flex-1 rounded border p-2 font-mono text-sm\"\n />\n <button className=\"rounded bg-blue-500 px-3 py-2 text-sm text-white hover:bg-blue-600 disabled:opacity-50\" disabled={!newName.trim() || !newUrl.trim()} onClick={handleAdd}>\n Add Skill\n </button>\n </div>\n </section>\n );\n}\n\n/* ── Powerhouse Tab ──────────────────────────────────────────── */\n\nfunction PowerhouseTab(props: {\n packages: PowerhousePackage[];\n isAboveDisabled: boolean;\n addPackage: (packageName: string) => void;\n removePackage: (id: string) => void;\n addDocType: (packageId: string, documentType: string) => void;\n removeDocType: (packageId: string, documentType: string) => void;\n}) {\n if (!props.isAboveDisabled) {\n return (\n <section className=\"my-6 rounded border border-dashed border-gray-300 bg-white p-8 text-center text-gray-500\">\n <h3 className=\"text-lg font-semibold\">Powerhouse</h3>\n <p className=\"mt-2\">Enable Powerhouse in the CLI tab (set level to Reactor or above) to manage packages.</p>\n </section>\n );\n }\n\n return <PackagesSection packages={props.packages} addPackage={props.addPackage} removePackage={props.removePackage} addDocType={props.addDocType} removeDocType={props.removeDocType} />;\n}\n\n/* ── Publish Tab ──────────────────────────────────────────────── */\n\nfunction PublishTab(props: {\n version: string;\n publishHistory: PublishRecord[];\n documentHeader: { id: string; documentType: string };\n deployment: PhClintDeployment;\n bumpVersion: (version: string) => void;\n publishDev: () => void;\n publishStaging: () => void;\n publishProduction: () => void;\n setProxyEnabled: (enabled: boolean) => void;\n setObservabilityEnabled: (enabled: boolean) => void;\n addSupportedResource: (resource: string) => void;\n removeSupportedResource: (resource: string) => void;\n}) {\n const recentHistory = props.publishHistory.slice(-5).reverse();\n const nextPatch = bumpPatch(props.version);\n\n return (\n <>\n <section className=\"my-6\">\n <h3 className=\"text-lg font-semibold\">Publishing</h3>\n\n <div className=\"my-3 rounded border border-gray-200 bg-white p-4\">\n <div className=\"flex items-center gap-4\">\n <span className=\"text-sm text-gray-600\">Current version:</span>\n <span className=\"font-mono font-semibold\">{props.version}</span>\n </div>\n\n <div className=\"mt-3 flex items-center gap-2\">\n <span className=\"text-sm text-gray-600\">Bump version to:</span>\n <input\n type=\"text\"\n placeholder={nextPatch}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n const v = e.currentTarget.value.trim();\n if (v) props.bumpVersion(v);\n e.currentTarget.value = '';\n }\n }}\n className=\"rounded border p-1 font-mono text-sm\"\n />\n </div>\n\n <div className=\"mt-4 flex items-center gap-2\">\n <button className=\"rounded bg-gray-600 px-3 py-2 text-sm text-white hover:bg-gray-700\" onClick={props.publishDev}>\n Publish Dev\n </button>\n <button className=\"rounded bg-amber-600 px-3 py-2 text-sm text-white hover:bg-amber-700\" onClick={props.publishStaging}>\n Publish Staging\n </button>\n <button className=\"rounded bg-green-600 px-3 py-2 text-sm text-white hover:bg-green-700\" onClick={props.publishProduction}>\n Publish Production\n </button>\n </div>\n </div>\n\n {recentHistory.length > 0 && (\n <div className=\"mt-3\">\n <h4 className=\"text-sm font-semibold text-gray-600\">Recent publish history</h4>\n <ul className=\"mt-2 space-y-1\">\n {recentHistory.map((r) => (\n <li key={r.id} className=\"flex items-center gap-3 text-sm\">\n <StatusBadge status={r.status} />\n <span className=\"font-mono\">{r.version}</span>\n <span className=\"text-gray-500\">{r.tag}</span>\n <span className=\"text-gray-400\">{r.timestamp}</span>\n </li>\n ))}\n </ul>\n </div>\n )}\n </section>\n\n <hr />\n\n <DeploymentSection\n deployment={props.deployment}\n setProxyEnabled={props.setProxyEnabled}\n setObservabilityEnabled={props.setObservabilityEnabled}\n addSupportedResource={props.addSupportedResource}\n removeSupportedResource={props.removeSupportedResource}\n />\n\n <hr />\n\n <section className=\"my-6\">\n <h3 className=\"text-lg font-semibold\">Document</h3>\n <div className=\"my-3 rounded border border-gray-200 bg-white p-4\">\n <p className=\"text-sm text-gray-600\">\n Document ID: <span className=\"font-mono\">{props.documentHeader.id}</span>\n </p>\n <p className=\"text-sm text-gray-600\">\n Type: <span className=\"font-mono\">{props.documentHeader.documentType}</span>\n </p>\n </div>\n </section>\n </>\n );\n}\n\nfunction DeploymentSection(props: {\n deployment: PhClintDeployment;\n setProxyEnabled: (enabled: boolean) => void;\n setObservabilityEnabled: (enabled: boolean) => void;\n addSupportedResource: (resource: string) => void;\n removeSupportedResource: (resource: string) => void;\n}) {\n const [newResource, setNewResource] = useState('');\n\n return (\n <section className=\"my-6\">\n <h3 className=\"text-lg font-semibold\">Deployment</h3>\n\n <div className=\"my-3 rounded border border-gray-200 bg-white p-4\">\n <Toggle label=\"Proxy enabled\" checked={props.deployment.proxyEnabled} onChange={props.setProxyEnabled} hint=\"Embedded reverse proxy\" />\n <Toggle label=\"Observability enabled\" checked={props.deployment.observabilityEnabled} onChange={props.setObservabilityEnabled} hint=\"Sentry + OpenTelemetry\" />\n </div>\n\n <div className=\"my-3 rounded border border-gray-200 bg-white p-4\">\n <h4 className=\"text-base font-semibold\">Supported resources</h4>\n <ul className=\"my-2 space-y-1\">\n {props.deployment.supportedResources.map((r) => (\n <li key={r} className=\"flex items-center justify-between text-sm\">\n <span className=\"font-mono\">{r}</span>\n <button className=\"text-red-500 hover:text-red-700\" onClick={() => props.removeSupportedResource(r)}>\n Remove\n </button>\n </li>\n ))}\n </ul>\n <div className=\"mt-2 flex items-center gap-2\">\n <input\n type=\"text\"\n placeholder=\"vetra-agent-...\"\n value={newResource}\n onChange={(e) => setNewResource(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && newResource.trim()) {\n props.addSupportedResource(newResource.trim());\n setNewResource('');\n }\n }}\n className=\"flex-1 rounded border p-1 font-mono text-sm\"\n />\n <button\n className=\"rounded bg-blue-500 px-2 py-1 text-xs text-white hover:bg-blue-600 disabled:opacity-50\"\n disabled={!newResource.trim()}\n onClick={() => {\n props.addSupportedResource(newResource.trim());\n setNewResource('');\n }}\n >\n Add\n </button>\n </div>\n </div>\n </section>\n );\n}\n\n/* ── Powerhouse Packages section ─────────────────────────────── */\n\nfunction PackagesSection(props: {\n packages: PowerhousePackage[];\n addPackage: (packageName: string) => void;\n removePackage: (id: string) => void;\n addDocType: (packageId: string, documentType: string) => void;\n removeDocType: (packageId: string, documentType: string) => void;\n}) {\n const [newPackage, setNewPackage] = useState('');\n\n return (\n <section className=\"my-6\">\n <h3 className=\"text-lg font-semibold\">Reactor Packages</h3>\n\n {props.packages.map((pkg) => (\n <PackageCard key={pkg.id} pkg={pkg} addDocType={props.addDocType} removeDocType={props.removeDocType} removePackage={props.removePackage} />\n ))}\n\n <div className=\"my-3 flex items-center gap-2\">\n <input\n type=\"text\"\n placeholder=\"@scope/package-name\"\n value={newPackage}\n onChange={(e) => setNewPackage(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && newPackage.trim()) {\n props.addPackage(newPackage.trim());\n setNewPackage('');\n }\n }}\n className=\"flex-1 rounded border p-2 font-mono text-sm\"\n />\n <button\n className=\"rounded bg-blue-500 px-3 py-2 text-sm text-white hover:bg-blue-600 disabled:opacity-50\"\n disabled={!newPackage.trim()}\n onClick={() => {\n props.addPackage(newPackage.trim());\n setNewPackage('');\n }}\n >\n Add Package\n </button>\n </div>\n </section>\n );\n}\n\nfunction PackageCard(props: { pkg: PowerhousePackage; addDocType: (packageId: string, documentType: string) => void; removeDocType: (packageId: string, documentType: string) => void; removePackage: (id: string) => void }) {\n const [newDocType, setNewDocType] = useState('');\n\n return (\n <div className=\"my-3 rounded border border-gray-200 bg-white p-4\">\n <div className=\"flex items-center justify-between\">\n <div>\n <span className=\"font-mono font-semibold\">{props.pkg.packageName}</span>\n {props.pkg.managed && <span className=\"ml-2 rounded bg-blue-100 px-2 py-0.5 text-xs text-blue-700\">managed</span>}\n {props.pkg.version && <span className=\"ml-2 text-sm text-gray-500\">v{props.pkg.version}</span>}\n </div>\n {!props.pkg.managed && (\n <button className=\"text-sm text-red-500 hover:text-red-700\" onClick={() => props.removePackage(props.pkg.id)}>\n Remove Package\n </button>\n )}\n </div>\n <ul className=\"my-2 space-y-1\">\n {props.pkg.documentTypes.map((dt) => (\n <li key={dt} className=\"flex items-center justify-between text-sm\">\n <span className=\"font-mono\">{dt}</span>\n <button className=\"text-red-500 hover:text-red-700\" onClick={() => props.removeDocType(props.pkg.id, dt)}>\n ×\n </button>\n </li>\n ))}\n </ul>\n <div className=\"mt-2 flex items-center gap-2\">\n <input\n type=\"text\"\n placeholder=\"org/doc-type or */*\"\n value={newDocType}\n onChange={(e) => setNewDocType(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && newDocType.trim()) {\n props.addDocType(props.pkg.id, newDocType.trim());\n setNewDocType('');\n }\n }}\n className=\"flex-1 rounded border p-1 font-mono text-sm\"\n />\n <button\n className=\"rounded bg-blue-500 px-2 py-1 text-xs text-white hover:bg-blue-600 disabled:opacity-50\"\n disabled={!newDocType.trim()}\n onClick={() => {\n props.addDocType(props.pkg.id, newDocType.trim());\n setNewDocType('');\n }}\n >\n Add Doc Type\n </button>\n </div>\n </div>\n );\n}\n\nfunction StatusBadge(props: { status: string }) {\n const color = props.status === 'Succeeded' ? 'bg-green-100 text-green-700' : props.status === 'Failed' ? 'bg-red-100 text-red-700' : props.status === 'InProgress' ? 'bg-amber-100 text-amber-700' : 'bg-gray-100 text-gray-700';\n return <span className={`rounded px-2 py-0.5 text-xs ${color}`}>{props.status}</span>;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"editor-Bds50MuL.js","names":[],"sources":["../../../editors/ph-clint-project-editor/editor.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { generateId } from 'document-model';\nimport { DocumentToolbar } from '@powerhousedao/design-system/connect';\nimport { createRemoteAttachmentService, type IAttachmentService } from '@powerhousedao/reactor-attachments';\nimport { DEFAULT_SWITCHBOARD_URL, getSwitchboardGatewayUrlFromDriveUrl, useSelectedDrive, usePHToast } from '@powerhousedao/reactor-browser';\nimport { useSelectedPhClintProjectDocument, actions } from 'document-models/ph-clint-project';\nimport type {\n PowerhouseLevel,\n PowerhousePackage,\n ExternalSkill,\n PublishRecord,\n PhClintProjectState,\n PhClintMastraFeature,\n PhClintMainAgent,\n PhClintSubAgent,\n PhClintAgentModel,\n PhClintAgentProfile,\n PhClintDeployment,\n} from '../../document-models/ph-clint-project/v1/gen/types.js';\n\nconst POWERHOUSE_LEVELS: { value: PowerhouseLevel; description: string }[] = [\n { value: 'Disabled', description: 'No Powerhouse integration' },\n { value: 'Reactor', description: 'Document model runtime' },\n { value: 'Switchboard', description: 'API service (GraphQL + MCP)' },\n { value: 'Connect', description: 'Web UI for document management' },\n];\n\n/** Patch-bump a semver-ish version string: 0.0.1 → 0.0.2. Falls back to \"<version>.1\" when unparseable. */\nfunction bumpPatch(version: string): string {\n const m = /^(\\d+)\\.(\\d+)\\.(\\d+)/.exec(version);\n if (!m) return `${version}.1`;\n const [, major, minor, patch] = m;\n return `${major}.${minor}.${Number(patch) + 1}`;\n}\n\nfunction TextField(props: { label: string; value: string; placeholder?: string; readOnly?: boolean; compact?: boolean; onCommit: (value: string) => void }) {\n return (\n <label className={props.compact ? 'my-1 block' : 'my-3 block'}>\n <h3 className={props.compact ? 'text-xs text-gray-600' : 'text-base'}>{props.label}</h3>\n <input\n type=\"text\"\n defaultValue={props.value}\n placeholder={props.placeholder}\n readOnly={props.readOnly}\n onBlur={(e) => {\n const next = e.target.value.trim();\n if (next !== props.value) props.onCommit(next);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') e.currentTarget.blur();\n }}\n className=\"w-full font-mono\"\n />\n </label>\n );\n}\n\nfunction Toggle(props: { label: string; checked: boolean; disabled?: boolean; hint?: string; onChange: (next: boolean) => void }) {\n return (\n <label className=\"my-2 flex items-center gap-3\">\n <input type=\"checkbox\" checked={props.checked} disabled={props.disabled} onChange={(e) => props.onChange(e.target.checked)} />\n <span className=\"font-semibold\">{props.label}</span>\n {props.hint ? <span className=\"text-sm text-gray-600\">{props.hint}</span> : null}\n </label>\n );\n}\n\ntype Tab = 'cli' | 'agents' | 'profiles' | 'skills' | 'powerhouse' | 'publish';\n\nconst TAB_LABELS: { value: Tab; label: string }[] = [\n { value: 'cli', label: 'CLI' },\n { value: 'agents', label: 'Agents' },\n { value: 'profiles', label: 'Profiles' },\n { value: 'skills', label: 'Skills' },\n { value: 'powerhouse', label: 'Powerhouse' },\n { value: 'publish', label: 'Publish' },\n];\n\nexport default function Editor() {\n const [document, dispatch] = useSelectedPhClintProjectDocument();\n const state = document.state.global;\n const { powerhouse, mastra, routine } = state.features;\n const [activeTab, setActiveTab] = useState<Tab>('cli');\n const [drive] = useSelectedDrive();\n const driveRemoteUrl: string | undefined = (drive?.state?.local as { remoteUrl?: string } | undefined)?.remoteUrl;\n const attachmentService = useMemo(\n () =>\n createRemoteAttachmentService({\n remoteUrl: driveRemoteUrl ? getSwitchboardGatewayUrlFromDriveUrl(driveRemoteUrl) : DEFAULT_SWITCHBOARD_URL,\n }),\n [driveRemoteUrl],\n );\n\n // identity dispatchers\n const setPackageIdentifier = (identifier: string) => dispatch(actions.setPackageIdentifier({ identifier }));\n const setVersion = (version: string) => dispatch(actions.setVersion({ version }));\n const setDescription = (description: string) => dispatch(actions.setDescription({ description }));\n\n // feature dispatchers\n const setPowerhouseLevel = (level: PowerhouseLevel) => dispatch(actions.setPowerhouseLevel({ level }));\n const toggleMastra = (enabled: boolean) => {\n if (enabled) {\n const baseName = state.name || 'my-agent';\n const agentId = `${baseName}-agent`;\n const agentName = `${baseName.charAt(0).toUpperCase()}${baseName.slice(1).replace(/-([a-z])/g, (_, c: string) => ` ${c.toUpperCase()}`)} Agent`;\n dispatch(actions.enableMastra({ agentId, agentName }));\n } else {\n dispatch(actions.disableMastra({ _: true }));\n }\n };\n const toggleRoutine = (enabled: boolean) => {\n if (enabled) dispatch(actions.enableRoutine({ _: true }));\n else dispatch(actions.disableRoutine({ _: true }));\n };\n\n // package dispatchers\n const addPackage = (packageName: string) => dispatch(actions.addPowerhousePackage({ id: generateId(), packageName }));\n const removePackage = (id: string) => dispatch(actions.removePowerhousePackage({ id }));\n const addDocType = (packageId: string, documentType: string) => dispatch(actions.addPackageDocumentType({ packageId, documentType }));\n const removeDocType = (packageId: string, documentType: string) => dispatch(actions.removePackageDocumentType({ packageId, documentType }));\n\n // external-skill dispatchers\n const addSkill = (name: string, githubUrl: string) => dispatch(actions.addExternalSkill({ id: generateId(), name, githubUrl }));\n const removeSkill = (id: string) => dispatch(actions.removeExternalSkill({ id }));\n\n // publish dispatchers\n const bumpVersion = (version: string) => dispatch(actions.bumpVersion({ version }));\n const publishDev = () => dispatch(actions.publishDev({ id: generateId(), timestamp: new Date().toISOString() }));\n const publishStaging = () => dispatch(actions.publishStaging({ id: generateId(), timestamp: new Date().toISOString() }));\n const publishProduction = () => dispatch(actions.publishProduction({ id: generateId(), timestamp: new Date().toISOString() }));\n\n // main agent dispatchers\n const setMainAgentName = (name: string) => dispatch(actions.setMainAgentName({ name }));\n const setMainAgentDescription = (description: string) => dispatch(actions.setMainAgentDescription({ description }));\n const clearMainAgentDescription = () => dispatch(actions.clearMainAgentDescription({ _: true }));\n const setMainAgentImage = (attachment: string) => dispatch(actions.setMainAgentImage({ attachment }));\n const clearMainAgentImage = () => dispatch(actions.clearMainAgentImage({ _: true }));\n\n // sub agent dispatchers\n const addSubAgent = (id: string, name: string, description: string, modelId: string) => dispatch(actions.addSubAgent({ id, name, description, modelId }));\n const removeSubAgent = (id: string) => dispatch(actions.removeSubAgent({ id }));\n const setSubAgentName = (id: string, name: string) => dispatch(actions.setSubAgentName({ id, name }));\n const setSubAgentDescription = (id: string, description: string) => dispatch(actions.setSubAgentDescription({ id, description }));\n\n // library dispatchers\n const addModel = (id: string) => dispatch(actions.addModel({ id }));\n const removeModel = (id: string) => dispatch(actions.removeModel({ id }));\n const addProfile = (id: string, title: string, content: string, insertBefore?: string) => dispatch(actions.addProfile({ id, title, content, insertBefore }));\n const updateProfile = (id: string, title?: string, content?: string) => dispatch(actions.updateProfile({ id, title, content }));\n const removeProfile = (id: string) => dispatch(actions.removeProfile({ id }));\n const reorderProfiles = (ids: string[], insertBefore: string | null) => dispatch(actions.reorderProfiles({ ids, insertBefore }));\n\n // per-agent binding dispatchers\n const setAgentModel = (agentId: string, modelId: string) => dispatch(actions.setAgentModel({ agentId, modelId }));\n const addAgentProfileRef = (agentId: string, profileId: string, insertBefore?: string) => dispatch(actions.addAgentProfileRef({ agentId, profileId, insertBefore }));\n const removeAgentProfileRef = (agentId: string, profileId: string) => dispatch(actions.removeAgentProfileRef({ agentId, profileId }));\n const reorderAgentProfileRefs = (agentId: string, ids: string[], insertBefore: string | null) => dispatch(actions.reorderAgentProfileRefs({ agentId, ids, insertBefore }));\n const addAgentSkill = (agentId: string, name: string) => dispatch(actions.addAgentSkill({ agentId, name }));\n const removeAgentSkill = (agentId: string, name: string) => dispatch(actions.removeAgentSkill({ agentId, name }));\n const addAgentToolPattern = (agentId: string, pattern: string) => dispatch(actions.addAgentToolPattern({ agentId, pattern }));\n const removeAgentToolPattern = (agentId: string, pattern: string) => dispatch(actions.removeAgentToolPattern({ agentId, pattern }));\n\n // chat dispatcher\n const setEnableChat = (enabled: boolean) => dispatch(actions.setEnableChat({ enabled }));\n\n // deployment dispatchers\n const setProxyEnabled = (enabled: boolean) => dispatch(actions.setProxyEnabled({ enabled }));\n const setObservabilityEnabled = (enabled: boolean) => dispatch(actions.setObservabilityEnabled({ enabled }));\n const addSupportedResource = (resource: string) => dispatch(actions.addSupportedResource({ resource }));\n const removeSupportedResource = (resource: string) => dispatch(actions.removeSupportedResource({ resource }));\n\n const isAboveDisabled = powerhouse !== 'Disabled';\n\n const tabClasses = (tab: Tab) => `px-4 py-2 text-sm font-medium border-b-2 cursor-pointer ${activeTab === tab ? 'border-blue-500 text-blue-600' : 'border-transparent text-gray-500 hover:text-gray-700'}`;\n\n return (\n <div className=\"mx-auto max-w-4xl bg-gray-50 p-6\">\n <DocumentToolbar />\n\n <div className=\"ph-default-styles\">\n <h2 className=\"mt-4 text-xl font-bold\">ph-clint Project Spec</h2>\n\n <nav className=\"my-4 flex border-b border-gray-200\">\n {TAB_LABELS.map((t) => (\n <button key={t.value} className={tabClasses(t.value)} onClick={() => setActiveTab(t.value)}>\n {t.label}\n </button>\n ))}\n </nav>\n\n {activeTab === 'cli' && (\n <CliTab\n state={state}\n powerhouse={powerhouse}\n mastra={mastra}\n routine={routine}\n isAboveDisabled={isAboveDisabled}\n setPackageIdentifier={setPackageIdentifier}\n setVersion={setVersion}\n setDescription={setDescription}\n setPowerhouseLevel={setPowerhouseLevel}\n toggleMastra={toggleMastra}\n toggleRoutine={toggleRoutine}\n setEnableChat={setEnableChat}\n addModel={addModel}\n removeModel={removeModel}\n />\n )}\n\n {activeTab === 'agents' && (\n <AgentsTab\n mastra={mastra}\n attachments={attachmentService}\n setMainAgentName={setMainAgentName}\n setMainAgentDescription={setMainAgentDescription}\n clearMainAgentDescription={clearMainAgentDescription}\n setMainAgentImage={setMainAgentImage}\n clearMainAgentImage={clearMainAgentImage}\n addSubAgent={addSubAgent}\n removeSubAgent={removeSubAgent}\n setSubAgentName={setSubAgentName}\n setSubAgentDescription={setSubAgentDescription}\n setAgentModel={setAgentModel}\n addAgentProfileRef={addAgentProfileRef}\n removeAgentProfileRef={removeAgentProfileRef}\n reorderAgentProfileRefs={reorderAgentProfileRefs}\n addAgentSkill={addAgentSkill}\n removeAgentSkill={removeAgentSkill}\n addAgentToolPattern={addAgentToolPattern}\n removeAgentToolPattern={removeAgentToolPattern}\n />\n )}\n\n {activeTab === 'profiles' && <ProfilesTab mastra={mastra} addProfile={addProfile} updateProfile={updateProfile} removeProfile={removeProfile} reorderProfiles={reorderProfiles} />}\n\n {activeTab === 'skills' && <SkillsTab skills={state.externalSkills} addSkill={addSkill} removeSkill={removeSkill} />}\n\n {activeTab === 'powerhouse' && <PowerhouseTab packages={state.packages} isAboveDisabled={isAboveDisabled} addPackage={addPackage} removePackage={removePackage} addDocType={addDocType} removeDocType={removeDocType} />}\n\n {activeTab === 'publish' && (\n <PublishTab\n version={state.version}\n publishHistory={state.publishHistory}\n documentHeader={document.header}\n deployment={state.deployment}\n bumpVersion={bumpVersion}\n publishDev={publishDev}\n publishStaging={publishStaging}\n publishProduction={publishProduction}\n setProxyEnabled={setProxyEnabled}\n setObservabilityEnabled={setObservabilityEnabled}\n addSupportedResource={addSupportedResource}\n removeSupportedResource={removeSupportedResource}\n />\n )}\n </div>\n </div>\n );\n}\n\n/* ── CLI Tab ──────────────────────────────────────────────────── */\n\nfunction CliTab(props: {\n state: PhClintProjectState;\n powerhouse: PowerhouseLevel;\n mastra: PhClintMastraFeature;\n routine: { enabled: boolean };\n isAboveDisabled: boolean;\n setPackageIdentifier: (identifier: string) => void;\n setVersion: (version: string) => void;\n setDescription: (description: string) => void;\n setPowerhouseLevel: (level: PowerhouseLevel) => void;\n toggleMastra: (enabled: boolean) => void;\n toggleRoutine: (enabled: boolean) => void;\n setEnableChat: (enabled: boolean) => void;\n addModel: (id: string) => void;\n removeModel: (id: string) => void;\n}) {\n const { state, mastra } = props;\n const packageIdentifier = `${state.scope ? state.scope + '/' : ''}${state.name ?? ''}`;\n\n return (\n <>\n <section className=\"my-6\">\n <h3 className=\"text-lg font-semibold\">Identity</h3>\n <div className=\"grid grid-cols-[3fr_1fr] gap-4\">\n <TextField label=\"Package name\" value={packageIdentifier} placeholder=\"@scope/my-tool-cli\" onCommit={props.setPackageIdentifier} />\n <TextField label=\"Version\" value={state.version} placeholder=\"0.1.0\" onCommit={props.setVersion} />\n </div>\n <TextField label=\"Description\" value={state.description} placeholder=\"What this CLI does\" onCommit={props.setDescription} />\n </section>\n\n <hr />\n\n <section className=\"my-6\">\n <h3 className=\"text-lg font-semibold\">Features</h3>\n\n <div className=\"my-4 rounded border border-gray-200 bg-white p-4\">\n <h4 className=\"text-base font-semibold\">Powerhouse</h4>\n {props.isAboveDisabled && <p className=\"text-sm text-gray-500\">Cannot go back to Disabled once enabled</p>}\n <div className=\"mt-2 space-y-2\">\n {POWERHOUSE_LEVELS.map((level, i) => (\n <label key={level.value} className=\"flex items-start gap-2\">\n {i > 0 && <div className=\"absolute -mt-3 ml-[7px] h-3 border-l border-gray-300\" />}\n <input type=\"radio\" name=\"powerhouse-level\" checked={props.powerhouse === level.value} disabled={props.isAboveDisabled && level.value === 'Disabled'} onChange={() => props.setPowerhouseLevel(level.value)} className=\"mt-0.5\" />\n <div>\n <span className=\"font-medium\">{level.value}</span>\n <span className=\"ml-2 text-sm text-gray-500\">{level.description}</span>\n </div>\n </label>\n ))}\n </div>\n </div>\n\n <div className=\"my-4 rounded border border-gray-200 bg-white p-4\">\n <Toggle label=\"Mastra\" checked={mastra.enabled} hint=\"AI agent framework\" onChange={props.toggleMastra} />\n {mastra.enabled && (\n <div className=\"mt-4 space-y-4 border-t border-gray-100 pt-4\">\n <ModelsSection models={mastra.models} main={mastra.mainAgent} subAgents={mastra.subAgents} addModel={props.addModel} removeModel={props.removeModel} />\n <div>\n <h4 className=\"text-sm font-semibold text-gray-700\">Common</h4>\n <Toggle\n label=\"Enable Chat\"\n checked={mastra.common.enableChat}\n disabled={!props.isAboveDisabled}\n hint={props.isAboveDisabled ? 'Chat session integration via clint-common' : 'Requires Powerhouse to be enabled'}\n onChange={props.setEnableChat}\n />\n </div>\n </div>\n )}\n </div>\n\n <div className=\"my-4 rounded border border-gray-200 bg-white p-4\">\n <Toggle label=\"Routine loop\" checked={props.routine.enabled} hint=\"tick-based execution loop with triggers\" onChange={props.toggleRoutine} />\n </div>\n </section>\n </>\n );\n}\n\n/* ── Agents Tab ───────────────────────────────────────────────── */\n\ninterface AgentsTabProps {\n mastra: PhClintMastraFeature;\n attachments?: IAttachmentService;\n setMainAgentName: (name: string) => void;\n setMainAgentDescription: (description: string) => void;\n clearMainAgentDescription: () => void;\n setMainAgentImage: (image: string) => void;\n clearMainAgentImage: () => void;\n addSubAgent: (id: string, name: string, description: string, modelId: string) => void;\n removeSubAgent: (id: string) => void;\n setSubAgentName: (id: string, name: string) => void;\n setSubAgentDescription: (id: string, description: string) => void;\n setAgentModel: (agentId: string, modelId: string) => void;\n addAgentProfileRef: (agentId: string, profileId: string, insertBefore?: string) => void;\n removeAgentProfileRef: (agentId: string, profileId: string) => void;\n reorderAgentProfileRefs: (agentId: string, ids: string[], insertBefore: string | null) => void;\n addAgentSkill: (agentId: string, name: string) => void;\n removeAgentSkill: (agentId: string, name: string) => void;\n addAgentToolPattern: (agentId: string, pattern: string) => void;\n removeAgentToolPattern: (agentId: string, pattern: string) => void;\n}\n\nfunction AgentsTab(props: AgentsTabProps) {\n const { mastra, attachments } = props;\n const main = mastra.mainAgent;\n const [showAddForm, setShowAddForm] = useState(false);\n\n if (!mastra.enabled || !main) {\n return (\n <section className=\"my-6 rounded border border-dashed border-gray-300 bg-white p-8 text-center text-gray-500\">\n <h3 className=\"text-lg font-semibold\">Agents</h3>\n <p className=\"mt-2\">Enable Mastra in the CLI tab to configure agents.</p>\n </section>\n );\n }\n\n const allAgentIds = [main.id, ...mastra.subAgents.map((s) => s.id)];\n\n return (\n <>\n <MainAgentCard\n main={main}\n models={mastra.models}\n profiles={mastra.profiles}\n attachments={attachments}\n setMainAgentName={props.setMainAgentName}\n setMainAgentDescription={props.setMainAgentDescription}\n clearMainAgentDescription={props.clearMainAgentDescription}\n setMainAgentImage={props.setMainAgentImage}\n clearMainAgentImage={props.clearMainAgentImage}\n setAgentModel={props.setAgentModel}\n addAgentProfileRef={props.addAgentProfileRef}\n removeAgentProfileRef={props.removeAgentProfileRef}\n reorderAgentProfileRefs={props.reorderAgentProfileRefs}\n addAgentSkill={props.addAgentSkill}\n removeAgentSkill={props.removeAgentSkill}\n addAgentToolPattern={props.addAgentToolPattern}\n removeAgentToolPattern={props.removeAgentToolPattern}\n />\n\n {mastra.subAgents.map((sub) => (\n <SubAgentCard\n key={sub.id}\n sub={sub}\n models={mastra.models}\n profiles={mastra.profiles}\n removeSubAgent={props.removeSubAgent}\n setSubAgentName={props.setSubAgentName}\n setSubAgentDescription={props.setSubAgentDescription}\n setAgentModel={props.setAgentModel}\n addAgentProfileRef={props.addAgentProfileRef}\n removeAgentProfileRef={props.removeAgentProfileRef}\n reorderAgentProfileRefs={props.reorderAgentProfileRefs}\n addAgentSkill={props.addAgentSkill}\n removeAgentSkill={props.removeAgentSkill}\n addAgentToolPattern={props.addAgentToolPattern}\n removeAgentToolPattern={props.removeAgentToolPattern}\n />\n ))}\n\n <section className=\"my-6\">\n {showAddForm ? (\n <AddSubAgentForm\n models={mastra.models}\n existingAgentIds={allAgentIds}\n onAdd={(id, name, description, modelId) => {\n props.addSubAgent(id, name, description, modelId);\n setShowAddForm(false);\n }}\n onCancel={() => setShowAddForm(false)}\n />\n ) : (\n <button\n className=\"rounded bg-blue-500 px-3 py-2 text-sm text-white hover:bg-blue-600 disabled:cursor-not-allowed disabled:opacity-50\"\n disabled={mastra.models.length === 0}\n title={mastra.models.length === 0 ? 'Add a model first (CLI tab → Mastra)' : ''}\n onClick={() => setShowAddForm(true)}\n >\n + Add Sub-agent\n </button>\n )}\n </section>\n </>\n );\n}\n\n/* ── Main Agent card (collapsible, sits as a peer of sub-agents) ── */\n\ninterface MainAgentCardProps {\n main: PhClintMainAgent;\n models: PhClintAgentModel[];\n profiles: PhClintAgentProfile[];\n attachments?: IAttachmentService;\n setMainAgentName: (name: string) => void;\n setMainAgentDescription: (description: string) => void;\n clearMainAgentDescription: () => void;\n setMainAgentImage: (image: string) => void;\n clearMainAgentImage: () => void;\n setAgentModel: (agentId: string, modelId: string) => void;\n addAgentProfileRef: (agentId: string, profileId: string, insertBefore?: string) => void;\n removeAgentProfileRef: (agentId: string, profileId: string) => void;\n reorderAgentProfileRefs: (agentId: string, ids: string[], insertBefore: string | null) => void;\n addAgentSkill: (agentId: string, name: string) => void;\n removeAgentSkill: (agentId: string, name: string) => void;\n addAgentToolPattern: (agentId: string, pattern: string) => void;\n removeAgentToolPattern: (agentId: string, pattern: string) => void;\n}\n\nfunction MainAgentCard(props: MainAgentCardProps) {\n const { main } = props;\n const [expanded, setExpanded] = useState(true);\n\n return (\n <div className=\"my-3 rounded border border-gray-200 bg-white p-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <button className=\"text-sm text-gray-400 hover:text-gray-700\" onClick={() => setExpanded(!expanded)} title={expanded ? 'Collapse' : 'Expand'}>\n {expanded ? '▾' : '▸'}\n </button>\n <span className=\"rounded bg-gray-100 px-2 py-0.5 font-mono text-xs text-gray-500\">{main.id}</span>\n <span className=\"font-semibold\">{main.name}</span>\n <span className=\"rounded bg-blue-100 px-2 py-0.5 text-xs font-semibold text-blue-700\">Main</span>\n </div>\n </div>\n {main.description && <p className=\"ml-7 text-sm text-gray-600\">{main.description}</p>}\n\n {expanded && (\n <div className=\"mt-4 space-y-3 border-t border-gray-100 pt-4\">\n <div style={{ display: 'flex', gap: '1.5rem' }}>\n <div style={{ flexShrink: 0, width: '7rem' }}>\n <AgentImageField attachmentRef={main.attachment ?? null} attachments={props.attachments} onSetImage={props.setMainAgentImage} onClearImage={props.clearMainAgentImage} />\n </div>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div className=\"grid grid-cols-[1fr_2fr] gap-4\">\n <TextField compact readOnly label=\"Agent ID\" value={main.id} onCommit={() => {}} />\n <TextField compact label=\"Agent Name\" value={main.name} placeholder=\"My Agent\" onCommit={props.setMainAgentName} />\n </div>\n <DescriptionField value={main.description} placeholder=\"A brief description of what this agent does\" onSet={props.setMainAgentDescription} onClear={props.clearMainAgentDescription} />\n </div>\n </div>\n\n <AgentBindings\n agentId={main.id}\n isMain\n modelId={main.modelId}\n profileIds={main.profileIds}\n skills={main.skills}\n toolPatterns={main.toolPatterns}\n models={props.models}\n profiles={props.profiles}\n setAgentModel={props.setAgentModel}\n addAgentProfileRef={props.addAgentProfileRef}\n removeAgentProfileRef={props.removeAgentProfileRef}\n reorderAgentProfileRefs={props.reorderAgentProfileRefs}\n addAgentSkill={props.addAgentSkill}\n removeAgentSkill={props.removeAgentSkill}\n addAgentToolPattern={props.addAgentToolPattern}\n removeAgentToolPattern={props.removeAgentToolPattern}\n />\n </div>\n )}\n </div>\n );\n}\n\nfunction DescriptionField(props: { value: string | null | undefined; placeholder: string; onSet: (v: string) => void; onClear: () => void }) {\n return (\n <label className=\"my-1 block\">\n <h3 className=\"text-xs text-gray-600\">Description</h3>\n <div className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n defaultValue={props.value ?? ''}\n placeholder={props.placeholder}\n onBlur={(e) => {\n const next = e.target.value.trim();\n if (next && next !== (props.value ?? '')) props.onSet(next);\n else if (!next && props.value !== null) props.onClear();\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') e.currentTarget.blur();\n }}\n className=\"w-full font-mono\"\n />\n </div>\n </label>\n );\n}\n\nfunction AddSubAgentForm(props: { models: PhClintAgentModel[]; existingAgentIds: string[]; onAdd: (id: string, name: string, description: string, modelId: string) => void; onCancel: () => void }) {\n const [id, setId] = useState('');\n const [name, setName] = useState('');\n const [description, setDescription] = useState('');\n const [modelId, setModelId] = useState<string>(props.models[0]?.id ?? '');\n\n const idValid = /^[a-z][a-z0-9-]*$/.test(id) && !props.existingAgentIds.includes(id);\n const canAdd = idValid && name.trim() && description.trim() && modelId;\n\n return (\n <div className=\"my-3 rounded border border-blue-200 bg-blue-50 p-4\">\n <div className=\"grid grid-cols-2 gap-3\">\n <label className=\"block\">\n <span className=\"text-xs text-gray-600\">Sub-agent ID</span>\n <input type=\"text\" value={id} placeholder=\"summarizer\" onChange={(e) => setId(e.target.value.trim())} className=\"w-full rounded border p-2 font-mono text-sm\" />\n </label>\n <label className=\"block\">\n <span className=\"text-xs text-gray-600\">Display name</span>\n <input type=\"text\" value={name} placeholder=\"Summarizer\" onChange={(e) => setName(e.target.value)} className=\"w-full rounded border p-2 text-sm\" />\n </label>\n </div>\n <label className=\"my-2 block\">\n <span className=\"text-xs text-gray-600\">Description (the main agent uses this to decide when to delegate)</span>\n <input type=\"text\" value={description} placeholder=\"Summarizes long documents into bullet points\" onChange={(e) => setDescription(e.target.value)} className=\"w-full rounded border p-2 text-sm\" />\n </label>\n <label className=\"my-2 block\">\n <span className=\"text-xs text-gray-600\">Model</span>\n <select value={modelId} onChange={(e) => setModelId(e.target.value)} className=\"w-full rounded border p-2 font-mono text-sm\">\n {props.models.map((m) => (\n <option key={m.id} value={m.id}>\n {m.id}\n </option>\n ))}\n </select>\n </label>\n <div className=\"mt-2 flex items-center gap-2\">\n <button className=\"rounded bg-blue-500 px-3 py-2 text-sm text-white hover:bg-blue-600 disabled:cursor-not-allowed disabled:opacity-50\" disabled={!canAdd} onClick={() => props.onAdd(id, name.trim(), description.trim(), modelId)}>\n Add\n </button>\n <button className=\"text-sm text-gray-500 hover:text-gray-700\" onClick={props.onCancel}>\n Cancel\n </button>\n </div>\n </div>\n );\n}\n\ninterface SubAgentCardProps {\n sub: PhClintSubAgent;\n models: PhClintAgentModel[];\n profiles: PhClintAgentProfile[];\n removeSubAgent: (id: string) => void;\n setSubAgentName: (id: string, name: string) => void;\n setSubAgentDescription: (id: string, description: string) => void;\n setAgentModel: (agentId: string, modelId: string) => void;\n addAgentProfileRef: (agentId: string, profileId: string, insertBefore?: string) => void;\n removeAgentProfileRef: (agentId: string, profileId: string) => void;\n reorderAgentProfileRefs: (agentId: string, ids: string[], insertBefore: string | null) => void;\n addAgentSkill: (agentId: string, name: string) => void;\n removeAgentSkill: (agentId: string, name: string) => void;\n addAgentToolPattern: (agentId: string, pattern: string) => void;\n removeAgentToolPattern: (agentId: string, pattern: string) => void;\n}\n\nfunction SubAgentCard(props: SubAgentCardProps) {\n const { sub } = props;\n const [expanded, setExpanded] = useState(false);\n\n return (\n <div className=\"my-3 rounded border border-gray-200 bg-white p-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <button className=\"text-sm text-gray-400 hover:text-gray-700\" onClick={() => setExpanded(!expanded)} title={expanded ? 'Collapse' : 'Expand'}>\n {expanded ? '▾' : '▸'}\n </button>\n <span className=\"rounded bg-gray-100 px-2 py-0.5 font-mono text-xs text-gray-500\">{sub.id}</span>\n <span className=\"font-semibold\">{sub.name}</span>\n </div>\n <button className=\"text-sm text-red-500 hover:text-red-700\" onClick={() => props.removeSubAgent(sub.id)}>\n Remove\n </button>\n </div>\n <p className=\"ml-7 text-sm text-gray-600\">{sub.description}</p>\n\n {expanded && (\n <div className=\"mt-4 space-y-3 border-t border-gray-100 pt-4\">\n <div className=\"grid grid-cols-2 gap-3\">\n <TextField compact label=\"Name\" value={sub.name} onCommit={(v) => props.setSubAgentName(sub.id, v)} />\n <TextField compact label=\"Description\" value={sub.description} onCommit={(v) => props.setSubAgentDescription(sub.id, v)} />\n </div>\n <AgentBindings\n agentId={sub.id}\n isMain={false}\n modelId={sub.modelId}\n profileIds={sub.profileIds}\n skills={sub.skills}\n toolPatterns={sub.toolPatterns}\n models={props.models}\n profiles={props.profiles}\n setAgentModel={props.setAgentModel}\n addAgentProfileRef={props.addAgentProfileRef}\n removeAgentProfileRef={props.removeAgentProfileRef}\n reorderAgentProfileRefs={props.reorderAgentProfileRefs}\n addAgentSkill={props.addAgentSkill}\n removeAgentSkill={props.removeAgentSkill}\n addAgentToolPattern={props.addAgentToolPattern}\n removeAgentToolPattern={props.removeAgentToolPattern}\n />\n </div>\n )}\n </div>\n );\n}\n\n/* ── Agent bindings (per-agent model + profiles + skills + tool patterns) ── */\n\ninterface AgentBindingsProps {\n agentId: string;\n isMain: boolean;\n modelId: string;\n profileIds: string[];\n skills: string[];\n toolPatterns: string[];\n models: PhClintAgentModel[];\n profiles: PhClintAgentProfile[];\n setAgentModel: (agentId: string, modelId: string) => void;\n addAgentProfileRef: (agentId: string, profileId: string, insertBefore?: string) => void;\n removeAgentProfileRef: (agentId: string, profileId: string) => void;\n reorderAgentProfileRefs: (agentId: string, ids: string[], insertBefore: string | null) => void;\n addAgentSkill: (agentId: string, name: string) => void;\n removeAgentSkill: (agentId: string, name: string) => void;\n addAgentToolPattern: (agentId: string, pattern: string) => void;\n removeAgentToolPattern: (agentId: string, pattern: string) => void;\n}\n\nfunction AgentBindings(props: AgentBindingsProps) {\n return (\n <div className=\"space-y-3\">\n <label className=\"block\">\n <span className=\"text-xs text-gray-600\">Model</span>\n <select value={props.modelId} onChange={(e) => props.setAgentModel(props.agentId, e.target.value)} className=\"mt-1 w-full rounded border p-2 font-mono text-sm\">\n {props.models.map((m) => (\n <option key={m.id} value={m.id}>\n {m.id}\n </option>\n ))}\n </select>\n </label>\n\n <ProfileRefsEditor\n agentId={props.agentId}\n profileIds={props.profileIds}\n allProfiles={props.profiles}\n onAdd={(profileId) => props.addAgentProfileRef(props.agentId, profileId)}\n onRemove={(profileId) => props.removeAgentProfileRef(props.agentId, profileId)}\n onReorder={(ids, insertBefore) => props.reorderAgentProfileRefs(props.agentId, ids, insertBefore)}\n />\n\n <ChipListEditor\n label=\"Skills\"\n hint=\"Reference skills by name. tpl wins over ext if both exist.\"\n values={props.skills}\n placeholder=\"skill-name\"\n validator={(v) => /^[a-z][a-z0-9-]*$/.test(v)}\n onAdd={(v) => props.addAgentSkill(props.agentId, v)}\n onRemove={(v) => props.removeAgentSkill(props.agentId, v)}\n />\n\n <ChipListEditor\n label=\"Tool patterns\"\n hint={props.isMain ? 'Glob patterns over tool names (e.g. clint-project-*, *-mcp__*). Empty = all tools.' : 'Glob patterns over tool names. Empty = no tools.'}\n values={props.toolPatterns}\n placeholder=\"pattern*\"\n validator={(v) => v.length > 0}\n onAdd={(v) => props.addAgentToolPattern(props.agentId, v)}\n onRemove={(v) => props.removeAgentToolPattern(props.agentId, v)}\n />\n </div>\n );\n}\n\nfunction ProfileRefsEditor(props: {\n agentId: string;\n profileIds: string[];\n allProfiles: PhClintAgentProfile[];\n onAdd: (profileId: string) => void;\n onRemove: (profileId: string) => void;\n onReorder: (ids: string[], insertBefore: string | null) => void;\n}) {\n const available = props.allProfiles.filter((p) => !props.profileIds.includes(p.id));\n\n const moveUp = (index: number) => {\n if (index === 0) return;\n const id = props.profileIds[index];\n const beforeId = props.profileIds[index - 1];\n props.onReorder([id], beforeId);\n };\n\n const moveDown = (index: number) => {\n if (index >= props.profileIds.length - 1) return;\n const id = props.profileIds[index];\n const afterNext = index + 2 < props.profileIds.length ? props.profileIds[index + 2] : null;\n props.onReorder([id], afterNext);\n };\n\n return (\n <div>\n <span className=\"text-xs text-gray-600\">Profiles (instructions, in order)</span>\n <ul className=\"my-1 space-y-1\">\n {props.profileIds.map((profileId, i) => {\n const profile = props.allProfiles.find((p) => p.id === profileId);\n return (\n <li key={profileId} className=\"flex items-center gap-2 rounded bg-gray-50 px-2 py-1\">\n <button className=\"text-gray-400 hover:text-gray-600 disabled:opacity-30\" disabled={i === 0} onClick={() => moveUp(i)} title=\"Move up\">\n ↑\n </button>\n <button className=\"text-gray-400 hover:text-gray-600 disabled:opacity-30\" disabled={i === props.profileIds.length - 1} onClick={() => moveDown(i)} title=\"Move down\">\n ↓\n </button>\n <span className=\"font-mono text-xs text-gray-500\">{profileId}</span>\n <span className=\"flex-1 text-sm\">{profile?.title ?? <em className=\"text-red-500\">(missing in library)</em>}</span>\n <button className=\"text-sm text-red-500 hover:text-red-700\" onClick={() => props.onRemove(profileId)}>\n Remove\n </button>\n </li>\n );\n })}\n {props.profileIds.length === 0 && <li className=\"px-2 py-1 text-sm italic text-gray-400\">No profiles assigned</li>}\n </ul>\n {available.length > 0 && (\n <select\n value=\"\"\n onChange={(e) => {\n if (e.target.value) props.onAdd(e.target.value);\n }}\n className=\"rounded border p-1 text-sm\"\n >\n <option value=\"\">+ Add profile…</option>\n {available.map((p) => (\n <option key={p.id} value={p.id}>\n {p.title} ({p.id})\n </option>\n ))}\n </select>\n )}\n </div>\n );\n}\n\nfunction ChipListEditor(props: { label: string; hint: string; values: string[]; placeholder: string; validator: (v: string) => boolean; onAdd: (v: string) => void; onRemove: (v: string) => void }) {\n const [input, setInput] = useState('');\n const valid = props.validator(input.trim());\n\n return (\n <div>\n <span className=\"text-xs text-gray-600\">{props.label}</span>\n <p className=\"text-xs text-gray-500\">{props.hint}</p>\n <div className=\"my-1 flex flex-wrap items-center gap-1\">\n {props.values.map((v) => (\n <span key={v} className=\"flex items-center gap-1 rounded bg-gray-100 px-2 py-1 font-mono text-xs\">\n {v}\n <button className=\"text-red-500 hover:text-red-700\" onClick={() => props.onRemove(v)} title=\"Remove\">\n ×\n </button>\n </span>\n ))}\n </div>\n <div className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n placeholder={props.placeholder}\n value={input}\n onChange={(e) => setInput(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && valid) {\n props.onAdd(input.trim());\n setInput('');\n }\n }}\n className=\"flex-1 rounded border p-1 font-mono text-sm\"\n />\n <button\n className=\"rounded bg-blue-500 px-2 py-1 text-xs text-white hover:bg-blue-600 disabled:cursor-not-allowed disabled:opacity-50\"\n disabled={!valid}\n onClick={() => {\n props.onAdd(input.trim());\n setInput('');\n }}\n >\n Add\n </button>\n </div>\n </div>\n );\n}\n\n/* ── Agent image (avatar) — main only ────────────────────────── */\n\nfunction AgentImageField(props: { attachmentRef: string | null | undefined; attachments?: IAttachmentService; onSetImage: (ref: string) => void; onClearImage: () => void }) {\n const [isDragOver, setIsDragOver] = useState(false);\n const [objectUrl, setObjectUrl] = useState<string | undefined>(undefined);\n const dragDepthRef = useRef(0);\n const toast = usePHToast();\n\n useEffect(() => {\n if (!props.attachmentRef || !props.attachments) {\n setObjectUrl(undefined);\n return;\n }\n let cancelled = false;\n let createdUrl: string | undefined;\n void (async () => {\n try {\n const { body, header } = await props.attachments!.get(props.attachmentRef as Parameters<NonNullable<typeof props.attachments>['get']>[0]);\n const chunks: Uint8Array[] = [];\n const reader = body.getReader();\n for (;;) {\n const { done, value } = await reader.read();\n if (cancelled) break;\n if (done) break;\n if (value) chunks.push(value);\n }\n if (cancelled) return;\n const blob = new Blob(chunks as BlobPart[], { type: header.mimeType });\n const url = URL.createObjectURL(blob);\n createdUrl = url;\n setObjectUrl(url);\n } catch {\n // attachment not yet available or service error\n }\n })();\n return () => {\n cancelled = true;\n if (createdUrl) URL.revokeObjectURL(createdUrl);\n };\n }, [props.attachmentRef, props.attachments]);\n\n const handleFile = async (file: File) => {\n if (!file.type.startsWith('image/')) return;\n if (!props.attachments) {\n toast?.('Attachment service unavailable — cannot upload image', { type: 'error' });\n return;\n }\n try {\n const upload = await props.attachments.reserve({ mimeType: file.type, fileName: file.name });\n const { ref } = await upload.send(file.stream());\n props.onSetImage(ref);\n } catch (err) {\n toast?.(`Failed to upload image: ${err instanceof Error ? err.message : String(err)}`, { type: 'error' });\n }\n };\n\n const onDragOver = useCallback((e: React.DragEvent) => {\n if (e.dataTransfer.types.includes('Files')) {\n e.preventDefault();\n e.stopPropagation();\n }\n }, []);\n\n const onDragEnter = useCallback((e: React.DragEvent) => {\n if (e.dataTransfer.types.includes('Files')) {\n e.stopPropagation();\n dragDepthRef.current += 1;\n if (dragDepthRef.current === 1) setIsDragOver(true);\n }\n }, []);\n\n const onDragLeave = useCallback((e: React.DragEvent) => {\n if (e.dataTransfer.types.includes('Files')) {\n e.stopPropagation();\n dragDepthRef.current = Math.max(0, dragDepthRef.current - 1);\n if (dragDepthRef.current === 0) setIsDragOver(false);\n }\n }, []);\n\n const onDrop = useCallback((e: React.DragEvent) => {\n if (e.dataTransfer.types.includes('Files')) {\n e.preventDefault();\n e.stopPropagation();\n dragDepthRef.current = 0;\n setIsDragOver(false);\n const file = e.dataTransfer.files[0];\n if (file) void handleFile(file);\n }\n }, []);\n\n const SIZE = '7rem';\n\n return (\n <div style={{ width: SIZE, height: SIZE, flexShrink: 0 }} className=\"relative my-3\">\n {props.attachmentRef ? (\n <>\n {objectUrl && <img src={objectUrl} alt=\"Agent\" style={{ width: SIZE, height: SIZE }} className=\"rounded border border-gray-200 object-cover\" />}\n {!objectUrl && <div style={{ width: SIZE, height: SIZE }} className=\"rounded border border-gray-200 bg-gray-100\" />}\n <div className=\"mt-1 flex justify-center gap-1\">\n <label className=\"cursor-pointer rounded bg-gray-100 px-2 py-0.5 text-xs hover:bg-gray-200\">\n Replace\n <input\n type=\"file\"\n accept=\"image/*\"\n className=\"hidden\"\n onChange={(e) => {\n if (e.target.files?.[0]) void handleFile(e.target.files[0]);\n }}\n />\n </label>\n <button className=\"rounded bg-gray-100 px-2 py-0.5 text-xs text-red-600 hover:bg-gray-200\" onClick={props.onClearImage}>\n Remove\n </button>\n </div>\n </>\n ) : (\n <div\n style={{ width: SIZE, height: SIZE }}\n className={`flex flex-col items-center justify-center rounded border-2 border-dashed text-center ${isDragOver ? 'border-blue-400 bg-blue-50' : 'border-gray-300 bg-white'}`}\n onDragOver={onDragOver}\n onDragEnter={onDragEnter}\n onDragLeave={onDragLeave}\n onDrop={onDrop}\n >\n <label className=\"cursor-pointer p-2 text-xs text-gray-500 hover:text-blue-600\">\n Drop image or click\n <input\n type=\"file\"\n accept=\"image/*\"\n className=\"hidden\"\n onChange={(e) => {\n if (e.target.files?.[0]) void handleFile(e.target.files[0]);\n }}\n />\n </label>\n </div>\n )}\n </div>\n );\n}\n\n/* ── Models library (inlined under CLI > Features > Mastra) ─── */\n\nfunction ModelsSection(props: { models: PhClintAgentModel[]; main: PhClintMainAgent | null | undefined; subAgents: PhClintSubAgent[]; addModel: (id: string) => void; removeModel: (id: string) => void }) {\n const [newModelId, setNewModelId] = useState('');\n\n const usersOf = (modelId: string): string[] => {\n const u: string[] = [];\n if (props.main?.modelId === modelId) u.push(props.main.id);\n for (const s of props.subAgents) if (s.modelId === modelId) u.push(s.id);\n return u;\n };\n\n const handleAdd = () => {\n const id = newModelId.trim();\n if (id) {\n props.addModel(id);\n setNewModelId('');\n }\n };\n\n return (\n <div>\n <h4 className=\"text-sm font-semibold text-gray-700\">Models</h4>\n <p className=\"text-xs text-gray-500\">\n Provider/model format (e.g. <code>anthropic/claude-sonnet-4-5</code>). Each agent picks one from this list.\n </p>\n\n {props.models.length > 0 && (\n <table className=\"mt-2 w-full text-sm\">\n <thead>\n <tr className=\"border-b text-left text-gray-500\">\n <th className=\"py-1\">Model</th>\n <th className=\"py-1\">Used by</th>\n <th className=\"py-1\" />\n </tr>\n </thead>\n <tbody>\n {props.models.map((m) => {\n const users = usersOf(m.id);\n const inUse = users.length > 0;\n return (\n <tr key={m.id} className=\"border-b border-gray-100\">\n <td className=\"py-2 font-mono\">{m.id}</td>\n <td className=\"py-2 text-xs text-gray-500\">{users.length === 0 ? <em>—</em> : users.join(', ')}</td>\n <td className=\"py-2 text-right\">\n <button className=\"text-red-500 hover:text-red-700 disabled:cursor-not-allowed disabled:text-gray-300\" disabled={inUse} title={inUse ? `In use by ${users.join(', ')}` : ''} onClick={() => props.removeModel(m.id)}>\n Remove\n </button>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n )}\n\n <div className=\"mt-2 flex items-center gap-2\">\n <input\n type=\"text\"\n placeholder=\"provider/model-name\"\n value={newModelId}\n onChange={(e) => setNewModelId(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleAdd();\n }}\n className=\"flex-1 rounded border p-2 font-mono text-sm\"\n />\n <button className=\"rounded bg-blue-500 px-3 py-2 text-sm text-white hover:bg-blue-600 disabled:opacity-50\" disabled={!newModelId.trim()} onClick={handleAdd}>\n Add Model\n </button>\n </div>\n </div>\n );\n}\n\n/* ── Profiles Tab ─────────────────────────────────────────────── */\n\nfunction ProfilesTab(props: {\n mastra: PhClintMastraFeature;\n addProfile: (id: string, title: string, content: string, insertBefore?: string) => void;\n updateProfile: (id: string, title?: string, content?: string) => void;\n removeProfile: (id: string) => void;\n reorderProfiles: (ids: string[], insertBefore: string | null) => void;\n}) {\n if (!props.mastra.enabled) {\n return (\n <section className=\"my-6 rounded border border-dashed border-gray-300 bg-white p-8 text-center text-gray-500\">\n <h3 className=\"text-lg font-semibold\">Profiles</h3>\n <p className=\"mt-2\">Enable Mastra in the CLI tab to manage agent profiles.</p>\n </section>\n );\n }\n\n return (\n <ProfilesSection\n profiles={props.mastra.profiles}\n main={props.mastra.mainAgent}\n subAgents={props.mastra.subAgents}\n addProfile={props.addProfile}\n updateProfile={props.updateProfile}\n removeProfile={props.removeProfile}\n reorderProfiles={props.reorderProfiles}\n />\n );\n}\n\nfunction ProfilesSection(props: {\n profiles: PhClintAgentProfile[];\n main: PhClintMainAgent | null | undefined;\n subAgents: PhClintSubAgent[];\n addProfile: (id: string, title: string, content: string, insertBefore?: string) => void;\n updateProfile: (id: string, title?: string, content?: string) => void;\n removeProfile: (id: string) => void;\n reorderProfiles: (ids: string[], insertBefore: string | null) => void;\n}) {\n const [showAddForm, setShowAddForm] = useState(false);\n const [newId, setNewId] = useState('');\n const [newTitle, setNewTitle] = useState('');\n\n const usersOf = (profileId: string): string[] => {\n const u: string[] = [];\n if (props.main?.profileIds.includes(profileId)) u.push(props.main.id);\n for (const s of props.subAgents) if (s.profileIds.includes(profileId)) u.push(s.id);\n return u;\n };\n\n const handleAdd = () => {\n const id = newId.trim();\n const title = newTitle.trim();\n if (id && title) {\n props.addProfile(id, title, '');\n setNewId('');\n setNewTitle('');\n setShowAddForm(false);\n }\n };\n\n const moveUp = (index: number) => {\n if (index === 0) return;\n const id = props.profiles[index].id;\n const beforeId = props.profiles[index - 1].id;\n props.reorderProfiles([id], beforeId);\n };\n\n const moveDown = (index: number) => {\n if (index >= props.profiles.length - 1) return;\n const id = props.profiles[index].id;\n const afterNext = index + 2 < props.profiles.length ? props.profiles[index + 2].id : null;\n props.reorderProfiles([id], afterNext);\n };\n\n return (\n <section className=\"my-6\">\n <h3 className=\"text-lg font-semibold\">Agent Profiles</h3>\n <p className=\"text-sm text-gray-600\">Markdown sections that compose into agents&apos; instructions. Reference these from each agent&apos;s profile list.</p>\n\n {props.profiles.map((profile, i) => {\n const users = usersOf(profile.id);\n const inUse = users.length > 0;\n return (\n <div key={profile.id} className=\"my-3 rounded border border-gray-200 bg-white p-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <span className=\"rounded bg-gray-100 px-2 py-0.5 font-mono text-xs text-gray-500\">{profile.id}</span>\n <input\n type=\"text\"\n defaultValue={profile.title}\n onBlur={(e) => {\n const next = e.target.value.trim();\n if (next && next !== profile.title) props.updateProfile(profile.id, next);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') e.currentTarget.blur();\n }}\n className=\"border-b border-transparent font-semibold hover:border-gray-300 focus:border-blue-500\"\n />\n {users.length > 0 && (\n <span className=\"rounded bg-blue-50 px-2 py-0.5 text-xs text-blue-700\" title={users.join(', ')}>\n used by: {users.join(', ')}\n </span>\n )}\n </div>\n <div className=\"flex items-center gap-1\">\n <button className=\"px-1 text-gray-400 hover:text-gray-600 disabled:opacity-30\" disabled={i === 0} onClick={() => moveUp(i)} title=\"Move up\">\n ↑\n </button>\n <button className=\"px-1 text-gray-400 hover:text-gray-600 disabled:opacity-30\" disabled={i === props.profiles.length - 1} onClick={() => moveDown(i)} title=\"Move down\">\n ↓\n </button>\n <button className=\"ml-2 text-sm text-red-500 hover:text-red-700 disabled:cursor-not-allowed disabled:text-gray-300\" disabled={inUse} title={inUse ? `In use by ${users.join(', ')}` : ''} onClick={() => props.removeProfile(profile.id)}>\n Remove\n </button>\n </div>\n </div>\n <textarea\n defaultValue={profile.content}\n onBlur={(e) => {\n const next = e.target.value;\n if (next !== profile.content) props.updateProfile(profile.id, undefined, next);\n }}\n placeholder=\"Markdown content for this profile section...\"\n rows={4}\n className=\"mt-2 w-full rounded border border-gray-200 p-2 font-mono text-sm\"\n />\n </div>\n );\n })}\n\n {showAddForm ? (\n <div className=\"my-3 rounded border border-blue-200 bg-blue-50 p-4\">\n <div className=\"flex items-center gap-2\">\n <input type=\"text\" placeholder=\"section-id\" value={newId} onChange={(e) => setNewId(e.target.value)} className=\"w-40 rounded border p-2 font-mono text-sm\" />\n <input\n type=\"text\"\n placeholder=\"Section Title\"\n value={newTitle}\n onChange={(e) => setNewTitle(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleAdd();\n }}\n className=\"flex-1 rounded border p-2 text-sm\"\n />\n <button className=\"rounded bg-blue-500 px-3 py-2 text-sm text-white hover:bg-blue-600 disabled:opacity-50\" disabled={!newId.trim() || !newTitle.trim()} onClick={handleAdd}>\n Add\n </button>\n <button\n className=\"text-sm text-gray-500 hover:text-gray-700\"\n onClick={() => {\n setShowAddForm(false);\n setNewId('');\n setNewTitle('');\n }}\n >\n Cancel\n </button>\n </div>\n </div>\n ) : (\n <button className=\"mt-3 rounded bg-blue-500 px-3 py-2 text-sm text-white hover:bg-blue-600\" onClick={() => setShowAddForm(true)}>\n + Add Profile\n </button>\n )}\n </section>\n );\n}\n\n/* ── Skills Tab ───────────────────────────────────────────────── */\n\nfunction SkillsTab(props: { skills: ExternalSkill[]; addSkill: (name: string, githubUrl: string) => void; removeSkill: (id: string) => void }) {\n return (\n <>\n <section className=\"my-6 rounded border border-dashed border-gray-300 bg-white p-8 text-center text-gray-500\">\n <h3 className=\"text-lg font-semibold\">Skill Templates</h3>\n <p className=\"mt-2\">Coming soon</p>\n </section>\n\n <hr />\n\n <ExternalSkillsSection skills={props.skills} addSkill={props.addSkill} removeSkill={props.removeSkill} />\n </>\n );\n}\n\nfunction ExternalSkillsSection(props: { skills: ExternalSkill[]; addSkill: (name: string, githubUrl: string) => void; removeSkill: (id: string) => void }) {\n const [newName, setNewName] = useState('');\n const [newUrl, setNewUrl] = useState('');\n\n const handleAdd = () => {\n if (newName.trim() && newUrl.trim()) {\n props.addSkill(newName.trim(), newUrl.trim());\n setNewName('');\n setNewUrl('');\n }\n };\n\n return (\n <section className=\"my-6\">\n <h3 className=\"text-lg font-semibold\">External Skills</h3>\n <p className=\"text-sm text-gray-600\">Skills from the skills.sh ecosystem, installed via GitHub URL.</p>\n\n {props.skills.length > 0 && (\n <ul className=\"mt-3 space-y-2\">\n {props.skills.map((skill) => (\n <li key={skill.id} className=\"flex items-center justify-between rounded border border-gray-200 bg-white p-3\">\n <div>\n <span className=\"font-mono font-semibold\">{skill.name}</span>\n <span className=\"ml-2 text-sm text-gray-500\">{skill.githubUrl}</span>\n </div>\n <button className=\"text-sm text-red-500 hover:text-red-700\" onClick={() => props.removeSkill(skill.id)}>\n Remove\n </button>\n </li>\n ))}\n </ul>\n )}\n\n <div className=\"mt-3 flex items-center gap-2\">\n <input type=\"text\" placeholder=\"skill-name\" value={newName} onChange={(e) => setNewName(e.target.value)} className=\"w-40 rounded border p-2 font-mono text-sm\" />\n <input\n type=\"text\"\n placeholder=\"https://github.com/org/repo\"\n value={newUrl}\n onChange={(e) => setNewUrl(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleAdd();\n }}\n className=\"flex-1 rounded border p-2 font-mono text-sm\"\n />\n <button className=\"rounded bg-blue-500 px-3 py-2 text-sm text-white hover:bg-blue-600 disabled:opacity-50\" disabled={!newName.trim() || !newUrl.trim()} onClick={handleAdd}>\n Add Skill\n </button>\n </div>\n </section>\n );\n}\n\n/* ── Powerhouse Tab ──────────────────────────────────────────── */\n\nfunction PowerhouseTab(props: {\n packages: PowerhousePackage[];\n isAboveDisabled: boolean;\n addPackage: (packageName: string) => void;\n removePackage: (id: string) => void;\n addDocType: (packageId: string, documentType: string) => void;\n removeDocType: (packageId: string, documentType: string) => void;\n}) {\n if (!props.isAboveDisabled) {\n return (\n <section className=\"my-6 rounded border border-dashed border-gray-300 bg-white p-8 text-center text-gray-500\">\n <h3 className=\"text-lg font-semibold\">Powerhouse</h3>\n <p className=\"mt-2\">Enable Powerhouse in the CLI tab (set level to Reactor or above) to manage packages.</p>\n </section>\n );\n }\n\n return <PackagesSection packages={props.packages} addPackage={props.addPackage} removePackage={props.removePackage} addDocType={props.addDocType} removeDocType={props.removeDocType} />;\n}\n\n/* ── Publish Tab ──────────────────────────────────────────────── */\n\nfunction PublishTab(props: {\n version: string;\n publishHistory: PublishRecord[];\n documentHeader: { id: string; documentType: string };\n deployment: PhClintDeployment;\n bumpVersion: (version: string) => void;\n publishDev: () => void;\n publishStaging: () => void;\n publishProduction: () => void;\n setProxyEnabled: (enabled: boolean) => void;\n setObservabilityEnabled: (enabled: boolean) => void;\n addSupportedResource: (resource: string) => void;\n removeSupportedResource: (resource: string) => void;\n}) {\n const recentHistory = props.publishHistory.slice(-5).reverse();\n const nextPatch = bumpPatch(props.version);\n\n return (\n <>\n <section className=\"my-6\">\n <h3 className=\"text-lg font-semibold\">Publishing</h3>\n\n <div className=\"my-3 rounded border border-gray-200 bg-white p-4\">\n <div className=\"flex items-center gap-4\">\n <span className=\"text-sm text-gray-600\">Current version:</span>\n <span className=\"font-mono font-semibold\">{props.version}</span>\n </div>\n\n <div className=\"mt-3 flex items-center gap-2\">\n <span className=\"text-sm text-gray-600\">Bump version to:</span>\n <input\n type=\"text\"\n placeholder={nextPatch}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n const v = e.currentTarget.value.trim();\n if (v) props.bumpVersion(v);\n e.currentTarget.value = '';\n }\n }}\n className=\"rounded border p-1 font-mono text-sm\"\n />\n </div>\n\n <div className=\"mt-4 flex items-center gap-2\">\n <button className=\"rounded bg-gray-600 px-3 py-2 text-sm text-white hover:bg-gray-700\" onClick={props.publishDev}>\n Publish Dev\n </button>\n <button className=\"rounded bg-amber-600 px-3 py-2 text-sm text-white hover:bg-amber-700\" onClick={props.publishStaging}>\n Publish Staging\n </button>\n <button className=\"rounded bg-green-600 px-3 py-2 text-sm text-white hover:bg-green-700\" onClick={props.publishProduction}>\n Publish Production\n </button>\n </div>\n </div>\n\n {recentHistory.length > 0 && (\n <div className=\"mt-3\">\n <h4 className=\"text-sm font-semibold text-gray-600\">Recent publish history</h4>\n <ul className=\"mt-2 space-y-1\">\n {recentHistory.map((r) => (\n <li key={r.id} className=\"flex items-center gap-3 text-sm\">\n <StatusBadge status={r.status} />\n <span className=\"font-mono\">{r.version}</span>\n <span className=\"text-gray-500\">{r.tag}</span>\n <span className=\"text-gray-400\">{r.timestamp}</span>\n </li>\n ))}\n </ul>\n </div>\n )}\n </section>\n\n <hr />\n\n <DeploymentSection\n deployment={props.deployment}\n setProxyEnabled={props.setProxyEnabled}\n setObservabilityEnabled={props.setObservabilityEnabled}\n addSupportedResource={props.addSupportedResource}\n removeSupportedResource={props.removeSupportedResource}\n />\n\n <hr />\n\n <section className=\"my-6\">\n <h3 className=\"text-lg font-semibold\">Document</h3>\n <div className=\"my-3 rounded border border-gray-200 bg-white p-4\">\n <p className=\"text-sm text-gray-600\">\n Document ID: <span className=\"font-mono\">{props.documentHeader.id}</span>\n </p>\n <p className=\"text-sm text-gray-600\">\n Type: <span className=\"font-mono\">{props.documentHeader.documentType}</span>\n </p>\n </div>\n </section>\n </>\n );\n}\n\nfunction DeploymentSection(props: {\n deployment: PhClintDeployment;\n setProxyEnabled: (enabled: boolean) => void;\n setObservabilityEnabled: (enabled: boolean) => void;\n addSupportedResource: (resource: string) => void;\n removeSupportedResource: (resource: string) => void;\n}) {\n const [newResource, setNewResource] = useState('');\n\n return (\n <section className=\"my-6\">\n <h3 className=\"text-lg font-semibold\">Deployment</h3>\n\n <div className=\"my-3 rounded border border-gray-200 bg-white p-4\">\n <Toggle label=\"Proxy enabled\" checked={props.deployment.proxyEnabled} onChange={props.setProxyEnabled} hint=\"Embedded reverse proxy\" />\n <Toggle label=\"Observability enabled\" checked={props.deployment.observabilityEnabled} onChange={props.setObservabilityEnabled} hint=\"Sentry + OpenTelemetry\" />\n </div>\n\n <div className=\"my-3 rounded border border-gray-200 bg-white p-4\">\n <h4 className=\"text-base font-semibold\">Supported resources</h4>\n <ul className=\"my-2 space-y-1\">\n {props.deployment.supportedResources.map((r) => (\n <li key={r} className=\"flex items-center justify-between text-sm\">\n <span className=\"font-mono\">{r}</span>\n <button className=\"text-red-500 hover:text-red-700\" onClick={() => props.removeSupportedResource(r)}>\n Remove\n </button>\n </li>\n ))}\n </ul>\n <div className=\"mt-2 flex items-center gap-2\">\n <input\n type=\"text\"\n placeholder=\"vetra-agent-...\"\n value={newResource}\n onChange={(e) => setNewResource(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && newResource.trim()) {\n props.addSupportedResource(newResource.trim());\n setNewResource('');\n }\n }}\n className=\"flex-1 rounded border p-1 font-mono text-sm\"\n />\n <button\n className=\"rounded bg-blue-500 px-2 py-1 text-xs text-white hover:bg-blue-600 disabled:opacity-50\"\n disabled={!newResource.trim()}\n onClick={() => {\n props.addSupportedResource(newResource.trim());\n setNewResource('');\n }}\n >\n Add\n </button>\n </div>\n </div>\n </section>\n );\n}\n\n/* ── Powerhouse Packages section ─────────────────────────────── */\n\nfunction PackagesSection(props: {\n packages: PowerhousePackage[];\n addPackage: (packageName: string) => void;\n removePackage: (id: string) => void;\n addDocType: (packageId: string, documentType: string) => void;\n removeDocType: (packageId: string, documentType: string) => void;\n}) {\n const [newPackage, setNewPackage] = useState('');\n\n return (\n <section className=\"my-6\">\n <h3 className=\"text-lg font-semibold\">Reactor Packages</h3>\n\n {props.packages.map((pkg) => (\n <PackageCard key={pkg.id} pkg={pkg} addDocType={props.addDocType} removeDocType={props.removeDocType} removePackage={props.removePackage} />\n ))}\n\n <div className=\"my-3 flex items-center gap-2\">\n <input\n type=\"text\"\n placeholder=\"@scope/package-name\"\n value={newPackage}\n onChange={(e) => setNewPackage(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && newPackage.trim()) {\n props.addPackage(newPackage.trim());\n setNewPackage('');\n }\n }}\n className=\"flex-1 rounded border p-2 font-mono text-sm\"\n />\n <button\n className=\"rounded bg-blue-500 px-3 py-2 text-sm text-white hover:bg-blue-600 disabled:opacity-50\"\n disabled={!newPackage.trim()}\n onClick={() => {\n props.addPackage(newPackage.trim());\n setNewPackage('');\n }}\n >\n Add Package\n </button>\n </div>\n </section>\n );\n}\n\nfunction PackageCard(props: { pkg: PowerhousePackage; addDocType: (packageId: string, documentType: string) => void; removeDocType: (packageId: string, documentType: string) => void; removePackage: (id: string) => void }) {\n const [newDocType, setNewDocType] = useState('');\n\n return (\n <div className=\"my-3 rounded border border-gray-200 bg-white p-4\">\n <div className=\"flex items-center justify-between\">\n <div>\n <span className=\"font-mono font-semibold\">{props.pkg.packageName}</span>\n {props.pkg.managed && <span className=\"ml-2 rounded bg-blue-100 px-2 py-0.5 text-xs text-blue-700\">managed</span>}\n {props.pkg.version && <span className=\"ml-2 text-sm text-gray-500\">v{props.pkg.version}</span>}\n </div>\n {!props.pkg.managed && (\n <button className=\"text-sm text-red-500 hover:text-red-700\" onClick={() => props.removePackage(props.pkg.id)}>\n Remove Package\n </button>\n )}\n </div>\n <ul className=\"my-2 space-y-1\">\n {props.pkg.documentTypes.map((dt) => (\n <li key={dt} className=\"flex items-center justify-between text-sm\">\n <span className=\"font-mono\">{dt}</span>\n <button className=\"text-red-500 hover:text-red-700\" onClick={() => props.removeDocType(props.pkg.id, dt)}>\n ×\n </button>\n </li>\n ))}\n </ul>\n <div className=\"mt-2 flex items-center gap-2\">\n <input\n type=\"text\"\n placeholder=\"org/doc-type or */*\"\n value={newDocType}\n onChange={(e) => setNewDocType(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && newDocType.trim()) {\n props.addDocType(props.pkg.id, newDocType.trim());\n setNewDocType('');\n }\n }}\n className=\"flex-1 rounded border p-1 font-mono text-sm\"\n />\n <button\n className=\"rounded bg-blue-500 px-2 py-1 text-xs text-white hover:bg-blue-600 disabled:opacity-50\"\n disabled={!newDocType.trim()}\n onClick={() => {\n props.addDocType(props.pkg.id, newDocType.trim());\n setNewDocType('');\n }}\n >\n Add Doc Type\n </button>\n </div>\n </div>\n );\n}\n\nfunction StatusBadge(props: { status: string }) {\n const color = props.status === 'Succeeded' ? 'bg-green-100 text-green-700' : props.status === 'Failed' ? 'bg-red-100 text-red-700' : props.status === 'InProgress' ? 'bg-amber-100 text-amber-700' : 'bg-gray-100 text-gray-700';\n return <span className={`rounded px-2 py-0.5 text-xs ${color}`}>{props.status}</span>;\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{r as e}from"./chunk-BNv3lrIs.js";import{Ct as t,et as n,on as ee,tt as te}from"./dist-t-ezfpxv.js";import{$ as r,Q as ne,Z as i,_ as a,d as re,et as o,i as ie,it as s,nt as c,ot as l,r as ae,rt as u,st as d,tt as f}from"./types-CxSpmNGK-BaNo7EHQ.js";var oe=e=>e!=null,se=ne().refine(e=>oe(e)),p=i([`Connect`,`Disabled`,`Reactor`,`Switchboard`]),m=i([`Failed`,`InProgress`,`Pending`,`Succeeded`]),h=i([`Dev`,`Production`,`Staging`]);function g(){return u({agentId:s(),insertBefore:s().nullish(),profileId:s()})}function _(){return u({agentId:s(),name:s()})}function v(){return u({agentId:s(),pattern:s()})}function y(){return u({githubUrl:l(),id:s(),name:s()})}function b(){return u({id:s()})}function x(){return u({documentType:s(),packageId:s()})}function S(){return u({id:s(),packageName:s()})}function C(){return u({content:s(),id:s(),insertBefore:s().nullish(),title:s()})}function w(){return u({description:s(),id:s(),modelId:s(),name:s()})}function T(){return u({resource:s()})}function E(){return u({version:s()})}function D(){return u({_:o().nullish()})}function O(){return u({_:o().nullish()})}function k(){return u({_:o().nullish()})}function A(){return u({_:o().nullish()})}function j(){return u({agentId:s(),agentName:s()})}function M(){return u({_:o().nullish()})}function N(){return u({__typename:c(`ExternalSkill`).optional(),githubUrl:l(),id:s(),name:s()})}function P(){return u({attachment:s().nullish(),description:s().nullish(),id:s(),modelId:s(),name:s(),profileIds:r(s()),skills:r(s()),toolPatterns:r(s())})}function F(){return u({id:s()})}function I(){return u({documentTypes:r(s()),id:s(),packageName:s(),version:s().nullish()})}function L(){return u({content:s(),id:s(),title:s()})}function R(){return u({githubUrl:l(),id:s(),name:s()})}function z(){return u({description:s(),enableChat:o().nullish(),externalSkills:r(f(()=>R())),mainAgent:f(()=>P().nullish()),mastraEnabled:o(),models:r(f(()=>F())),name:s(),observabilityEnabled:o().nullish(),packages:r(f(()=>I())),powerhouse:p,profiles:r(f(()=>L())),proxyEnabled:o().nullish(),routineEnabled:o(),scope:s().nullish(),subAgents:r(f(()=>B())),supportedResources:r(s()).nullish(),version:s()})}function B(){return u({description:s(),id:s(),modelId:s(),name:s(),profileIds:r(s()),skills:r(s()),toolPatterns:r(s())})}function V(){return u({__typename:c(`PhClintAgentModel`).optional(),id:s()})}function H(){return u({__typename:c(`PhClintAgentProfile`).optional(),content:s(),id:s(),title:s()})}function U(){return u({__typename:c(`PhClintDeployment`).optional(),observabilityEnabled:o(),proxyEnabled:o(),supportedResources:r(s())})}function W(){return u({__typename:c(`PhClintFeatures`).optional(),mastra:f(()=>q()),powerhouse:p,routine:f(()=>ce())})}function G(){return u({__typename:c(`PhClintMainAgent`).optional(),attachment:s().nullish(),description:s().nullish(),id:s(),modelId:s(),name:s(),profileIds:r(s()),skills:r(s()),toolPatterns:r(s())})}function K(){return u({__typename:c(`PhClintMastraCommon`).optional(),enableChat:o()})}function q(){return u({__typename:c(`PhClintMastraFeature`).optional(),common:f(()=>K()),enabled:o(),mainAgent:f(()=>G().nullish()),models:r(f(()=>V())),profiles:r(f(()=>H())),subAgents:r(f(()=>le()))})}function J(){return u({__typename:c(`PhClintProjectState`).optional(),deployment:f(()=>U()),description:s(),externalSkills:r(f(()=>N())),features:f(()=>W()),name:s().nullish(),packages:r(f(()=>ue())),publishHistory:r(f(()=>pe())),scope:s().nullish(),version:s()})}function ce(){return u({__typename:c(`PhClintRoutineFeature`).optional(),enabled:o()})}function le(){return u({__typename:c(`PhClintSubAgent`).optional(),description:s(),id:s(),modelId:s(),name:s(),profileIds:r(s()),skills:r(s()),toolPatterns:r(s())})}function ue(){return u({__typename:c(`PowerhousePackage`).optional(),documentTypes:r(s()),id:s(),managed:o(),packageName:s(),version:s().nullish()})}function de(){return u({id:s(),timestamp:d()})}function fe(){return u({id:s(),timestamp:d()})}function pe(){return u({__typename:c(`PublishRecord`).optional(),id:s(),status:m,tag:h,timestamp:d(),version:s()})}function me(){return u({id:s(),timestamp:d()})}function he(){return u({agentId:s(),profileId:s()})}function ge(){return u({agentId:s(),name:s()})}function _e(){return u({agentId:s(),pattern:s()})}function ve(){return u({id:s()})}function ye(){return u({id:s()})}function be(){return u({documentType:s(),packageId:s()})}function xe(){return u({id:s()})}function Se(){return u({id:s()})}function Ce(){return u({id:s()})}function we(){return u({resource:s()})}function Te(){return u({agentId:s(),ids:r(s()),insertBefore:s().nullish()})}function Ee(){return u({ids:r(s()),insertBefore:s().nullish()})}function De(){return u({agentId:s(),modelId:s()})}function Oe(){return u({description:s()})}function ke(){return u({enabled:o()})}function Ae(){return u({githubUrl:l(),id:s()})}function je(){return u({id:s(),name:s()})}function Me(){return u({description:s()})}function Ne(){return u({attachment:s()})}function Pe(){return u({name:s()})}function Fe(){return u({enabled:o()})}function Ie(){return u({identifier:s()})}function Le(){return u({packageId:s(),version:s().nullish()})}function Re(){return u({level:p,skipAutoProxy:o().nullish()})}function ze(){return u({enabled:o()})}function Be(){return u({id:s(),status:m})}function Ve(){return u({description:s(),id:s()})}function He(){return u({id:s(),name:s()})}function Ue(){return u({version:s()})}function We(){return u({content:s().nullish(),id:s(),title:s().nullish()})}var Ge=e({addSupportedResource:()=>Ke,removeSupportedResource:()=>qe,setObservabilityEnabled:()=>Ye,setProxyEnabled:()=>Je}),Ke=e=>a(`ADD_SUPPORTED_RESOURCE`,{...e},void 0,T,`global`),qe=e=>a(`REMOVE_SUPPORTED_RESOURCE`,{...e},void 0,we,`global`),Je=e=>a(`SET_PROXY_ENABLED`,{...e},void 0,ze,`global`),Ye=e=>a(`SET_OBSERVABILITY_ENABLED`,{...e},void 0,Fe,`global`),Xe=e({addExternalSkill:()=>Ze,removeExternalSkill:()=>Qe,setExternalSkillGithubUrl:()=>et,setExternalSkillName:()=>$e}),Ze=e=>a(`ADD_EXTERNAL_SKILL`,{...e},void 0,y,`global`),Qe=e=>a(`REMOVE_EXTERNAL_SKILL`,{...e},void 0,ve,`global`),$e=e=>a(`SET_EXTERNAL_SKILL_NAME`,{...e},void 0,je,`global`),et=e=>a(`SET_EXTERNAL_SKILL_GITHUB_URL`,{...e},void 0,Ae,`global`),tt=e({disableMastra:()=>rt,enableMastra:()=>nt,setEnableChat:()=>it}),nt=e=>a(`ENABLE_MASTRA`,{...e},void 0,j,`global`),rt=e=>a(`DISABLE_MASTRA`,{...e},void 0,k,`global`),it=e=>a(`SET_ENABLE_CHAT`,{...e},void 0,ke,`global`),at=e({setPowerhouseLevel:()=>ot}),ot=e=>a(`SET_POWERHOUSE_LEVEL`,{...e},void 0,Re,`global`),st=e({disableRoutine:()=>lt,enableRoutine:()=>ct}),ct=e=>a(`ENABLE_ROUTINE`,{...e},void 0,M,`global`),lt=e=>a(`DISABLE_ROUTINE`,{...e},void 0,A,`global`),ut=e({setDescription:()=>dt,setPackageIdentifier:()=>pt,setVersion:()=>ft}),dt=e=>a(`SET_DESCRIPTION`,{...e},void 0,Oe,`global`),ft=e=>a(`SET_VERSION`,{...e},void 0,Ue,`global`),pt=e=>a(`SET_PACKAGE_IDENTIFIER`,{...e},void 0,Ie,`global`),mt=e({importSpec:()=>ht}),ht=e=>a(`IMPORT_SPEC`,{...e},void 0,z,`global`),gt=e({addAgentProfileRef:()=>vt,addAgentSkill:()=>xt,addAgentToolPattern:()=>Ct,removeAgentProfileRef:()=>yt,removeAgentSkill:()=>St,removeAgentToolPattern:()=>wt,reorderAgentProfileRefs:()=>bt,setAgentModel:()=>_t}),_t=e=>a(`SET_AGENT_MODEL`,{...e},void 0,De,`global`),vt=e=>a(`ADD_AGENT_PROFILE_REF`,{...e},void 0,g,`global`),yt=e=>a(`REMOVE_AGENT_PROFILE_REF`,{...e},void 0,he,`global`),bt=e=>a(`REORDER_AGENT_PROFILE_REFS`,{...e},void 0,Te,`global`),xt=e=>a(`ADD_AGENT_SKILL`,{...e},void 0,_,`global`),St=e=>a(`REMOVE_AGENT_SKILL`,{...e},void 0,ge,`global`),Ct=e=>a(`ADD_AGENT_TOOL_PATTERN`,{...e},void 0,v,`global`),wt=e=>a(`REMOVE_AGENT_TOOL_PATTERN`,{...e},void 0,_e,`global`),Tt=e({clearMainAgentDescription:()=>Ot,clearMainAgentImage:()=>At,setMainAgentDescription:()=>Dt,setMainAgentImage:()=>kt,setMainAgentName:()=>Et}),Et=e=>a(`SET_MAIN_AGENT_NAME`,{...e},void 0,Pe,`global`),Dt=e=>a(`SET_MAIN_AGENT_DESCRIPTION`,{...e},void 0,Me,`global`),Ot=e=>a(`CLEAR_MAIN_AGENT_DESCRIPTION`,{...e},void 0,D,`global`),kt=e=>a(`SET_MAIN_AGENT_IMAGE`,{...e},void 0,Ne,`global`),At=e=>a(`CLEAR_MAIN_AGENT_IMAGE`,{...e},void 0,O,`global`),jt=e({addModel:()=>Mt,removeModel:()=>Nt}),Mt=e=>a(`ADD_MODEL`,{...e},void 0,b,`global`),Nt=e=>a(`REMOVE_MODEL`,{...e},void 0,ye,`global`),Pt=e({addProfile:()=>Ft,removeProfile:()=>Lt,reorderProfiles:()=>Rt,updateProfile:()=>It}),Ft=e=>a(`ADD_PROFILE`,{...e},void 0,C,`global`),It=e=>a(`UPDATE_PROFILE`,{...e},void 0,We,`global`),Lt=e=>a(`REMOVE_PROFILE`,{...e},void 0,Se,`global`),Rt=e=>a(`REORDER_PROFILES`,{...e},void 0,Ee,`global`),zt=e({addSubAgent:()=>Bt,removeSubAgent:()=>Vt,setSubAgentDescription:()=>Ut,setSubAgentName:()=>Ht}),Bt=e=>a(`ADD_SUB_AGENT`,{...e},void 0,w,`global`),Vt=e=>a(`REMOVE_SUB_AGENT`,{...e},void 0,Ce,`global`),Ht=e=>a(`SET_SUB_AGENT_NAME`,{...e},void 0,He,`global`),Ut=e=>a(`SET_SUB_AGENT_DESCRIPTION`,{...e},void 0,Ve,`global`),Wt=e({addPackageDocumentType:()=>qt,addPowerhousePackage:()=>Gt,removePackageDocumentType:()=>Jt,removePowerhousePackage:()=>Kt,setPackageVersion:()=>Yt}),Gt=e=>a(`ADD_POWERHOUSE_PACKAGE`,{...e},void 0,S,`global`),Kt=e=>a(`REMOVE_POWERHOUSE_PACKAGE`,{...e},void 0,xe,`global`),qt=e=>a(`ADD_PACKAGE_DOCUMENT_TYPE`,{...e},void 0,x,`global`),Jt=e=>a(`REMOVE_PACKAGE_DOCUMENT_TYPE`,{...e},void 0,be,`global`),Yt=e=>a(`SET_PACKAGE_VERSION`,{...e},void 0,Le,`global`),Xt=e({bumpVersion:()=>Zt,publishDev:()=>Y,publishProduction:()=>$t,publishStaging:()=>Qt,setPublishStatus:()=>en}),Zt=e=>a(`BUMP_VERSION`,{...e},void 0,E,`global`),Y=e=>a(`PUBLISH_DEV`,{...e},void 0,de,`global`),Qt=e=>a(`PUBLISH_STAGING`,{...e},void 0,me,`global`),$t=e=>a(`PUBLISH_PRODUCTION`,{...e},void 0,fe,`global`),en=e=>a(`SET_PUBLISH_STATUS`,{...e},void 0,Be,`global`),tn={...re,...ut,...at,...st,...Wt,...Xe,...Xt,...mt,...Ge,...tt,...jt,...Pt,...Tt,...zt,...gt},nn=`powerhouse/ph-clint-project`,rn=ae.extend({documentType:c(nn)}),X=ie.extend({global:J()}),Z=u({header:rn,state:X,initialState:X});function an(e){return X.safeParse(e).success}function on(e){X.parse(e)}function Q(e){return Z.safeParse(e).success}function $(e){Z.parse(e)}function sn(e){let[t,n]=ee(e);return Q(t)?[t,n]:[void 0,void 0]}function cn(){let[e,n]=t();return $(e),[e,n]}function ln(){return n()?.filter(Q)}function un(){return te()?.filter(Q)}export{_t as $,W as $t,Ht as A,je as An,x as At,At as B,Ve as Bn,j as Bt,Jt as C,we as Cn,Ye as Ct,zt as D,Oe as Dn,v as Dt,Bt as E,De as En,_ as Et,It as F,Ie as Fn,E as Ft,vt as G,oe as Gn,I as Gt,Dt as H,Ue as Hn,N as Ht,Mt as I,Le as In,D as It,gt as J,z as Jt,xt as K,L as Kt,jt as L,Re as Ln,O as Lt,Pt as M,Ne as Mn,C as Mt,Lt as N,Pe as Nn,w as Nt,Vt as O,ke as On,y as Ot,Rt as P,Fe as Pn,T as Pt,bt as Q,U as Qt,Nt as R,ze as Rn,k as Rt,Wt as S,Ce as Sn,qe as St,Yt as T,Ee as Tn,g as Tt,kt as U,We as Un,P as Ut,Tt as V,He as Vn,M as Vt,Et as W,se as Wn,F as Wt,St as X,V as Xt,yt as Y,B as Yt,wt as Z,H as Zt,$t as _,ve as _n,Qe as _t,rn as a,le as an,ft as at,qt as b,xe as bn,Ke as bt,$ as c,de as cn,ct,an as d,me as dn,tt as dt,G as en,mt as et,nn as f,m as fn,rt as ft,Y as g,_e as gn,Xe as gt,Xt as h,ge as hn,Ze as ht,cn as i,ce as in,pt as it,Ft as j,Me as jn,S as jt,Ut as k,Ae as kn,b as kt,on as l,fe as ln,at as lt,Zt as m,he as mn,it as mt,ln as n,q as nn,ut as nt,Z as o,p as on,st as ot,tn as p,h as pn,nt as pt,Ct as q,R as qt,un as r,J as rn,dt as rt,X as s,ue as sn,lt as st,sn as t,K as tn,ht as tt,Q as u,pe as un,ot as ut,Qt as v,ye as vn,et as vt,Kt as w,Te as wn,Je as wt,Gt as x,Se as xn,Ge as xt,en as y,be as yn,$e as yt,Ot as z,Be as zn,A as zt};
2
+ //# sourceMappingURL=hooks-CE3gZpe3.js.map