@kelpie/ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (704) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +44 -0
  3. package/dist/ServiceStatus.d.ts +6 -0
  4. package/dist/ServiceStatus.d.ts.map +1 -0
  5. package/dist/ServiceStatus.js +35 -0
  6. package/dist/ServiceStatus.js.map +1 -0
  7. package/dist/api/ApiProvider.d.ts +19 -0
  8. package/dist/api/ApiProvider.d.ts.map +1 -0
  9. package/dist/api/ApiProvider.js +18 -0
  10. package/dist/api/ApiProvider.js.map +1 -0
  11. package/dist/api/client.d.ts +83 -0
  12. package/dist/api/client.d.ts.map +1 -0
  13. package/dist/api/client.js +162 -0
  14. package/dist/api/client.js.map +1 -0
  15. package/dist/api/context.d.ts +14 -0
  16. package/dist/api/context.d.ts.map +1 -0
  17. package/dist/api/context.js +20 -0
  18. package/dist/api/context.js.map +1 -0
  19. package/dist/api/errors.d.ts +9 -0
  20. package/dist/api/errors.d.ts.map +1 -0
  21. package/dist/api/errors.js +14 -0
  22. package/dist/api/errors.js.map +1 -0
  23. package/dist/api/health.d.ts +15 -0
  24. package/dist/api/health.d.ts.map +1 -0
  25. package/dist/api/health.js +22 -0
  26. package/dist/api/health.js.map +1 -0
  27. package/dist/api/json.d.ts +3 -0
  28. package/dist/api/json.d.ts.map +1 -0
  29. package/dist/api/json.js +5 -0
  30. package/dist/api/json.js.map +1 -0
  31. package/dist/api/queryClient.d.ts +17 -0
  32. package/dist/api/queryClient.d.ts.map +1 -0
  33. package/dist/api/queryClient.js +33 -0
  34. package/dist/api/queryClient.js.map +1 -0
  35. package/dist/api/resource.d.ts +110 -0
  36. package/dist/api/resource.d.ts.map +1 -0
  37. package/dist/api/resource.js +238 -0
  38. package/dist/api/resource.js.map +1 -0
  39. package/dist/api/resources/account.d.ts +49 -0
  40. package/dist/api/resources/account.d.ts.map +1 -0
  41. package/dist/api/resources/account.js +146 -0
  42. package/dist/api/resources/account.js.map +1 -0
  43. package/dist/api/resources/activities.d.ts +8 -0
  44. package/dist/api/resources/activities.d.ts.map +1 -0
  45. package/dist/api/resources/activities.js +21 -0
  46. package/dist/api/resources/activities.js.map +1 -0
  47. package/dist/api/resources/agentTasks.d.ts +31 -0
  48. package/dist/api/resources/agentTasks.d.ts.map +1 -0
  49. package/dist/api/resources/agentTasks.js +103 -0
  50. package/dist/api/resources/agentTasks.js.map +1 -0
  51. package/dist/api/resources/candidates.d.ts +17 -0
  52. package/dist/api/resources/candidates.d.ts.map +1 -0
  53. package/dist/api/resources/candidates.js +40 -0
  54. package/dist/api/resources/candidates.js.map +1 -0
  55. package/dist/api/resources/companies.d.ts +22 -0
  56. package/dist/api/resources/companies.d.ts.map +1 -0
  57. package/dist/api/resources/companies.js +36 -0
  58. package/dist/api/resources/companies.js.map +1 -0
  59. package/dist/api/resources/dashboard.d.ts +8 -0
  60. package/dist/api/resources/dashboard.d.ts.map +1 -0
  61. package/dist/api/resources/dashboard.js +27 -0
  62. package/dist/api/resources/dashboard.js.map +1 -0
  63. package/dist/api/resources/deals.d.ts +30 -0
  64. package/dist/api/resources/deals.d.ts.map +1 -0
  65. package/dist/api/resources/deals.js +38 -0
  66. package/dist/api/resources/deals.js.map +1 -0
  67. package/dist/api/resources/decisions.d.ts +13 -0
  68. package/dist/api/resources/decisions.d.ts.map +1 -0
  69. package/dist/api/resources/decisions.js +38 -0
  70. package/dist/api/resources/decisions.js.map +1 -0
  71. package/dist/api/resources/forms.d.ts +82 -0
  72. package/dist/api/resources/forms.d.ts.map +1 -0
  73. package/dist/api/resources/forms.js +129 -0
  74. package/dist/api/resources/forms.js.map +1 -0
  75. package/dist/api/resources/handbookPages.d.ts +33 -0
  76. package/dist/api/resources/handbookPages.d.ts.map +1 -0
  77. package/dist/api/resources/handbookPages.js +49 -0
  78. package/dist/api/resources/handbookPages.js.map +1 -0
  79. package/dist/api/resources/importJobs.d.ts +72 -0
  80. package/dist/api/resources/importJobs.d.ts.map +1 -0
  81. package/dist/api/resources/importJobs.js +145 -0
  82. package/dist/api/resources/importJobs.js.map +1 -0
  83. package/dist/api/resources/invites.d.ts +19 -0
  84. package/dist/api/resources/invites.d.ts.map +1 -0
  85. package/dist/api/resources/invites.js +78 -0
  86. package/dist/api/resources/invites.js.map +1 -0
  87. package/dist/api/resources/mcpTools.d.ts +8 -0
  88. package/dist/api/resources/mcpTools.d.ts.map +1 -0
  89. package/dist/api/resources/mcpTools.js +23 -0
  90. package/dist/api/resources/mcpTools.js.map +1 -0
  91. package/dist/api/resources/members.d.ts +40 -0
  92. package/dist/api/resources/members.d.ts.map +1 -0
  93. package/dist/api/resources/members.js +67 -0
  94. package/dist/api/resources/members.js.map +1 -0
  95. package/dist/api/resources/moduleSettings.d.ts +14 -0
  96. package/dist/api/resources/moduleSettings.d.ts.map +1 -0
  97. package/dist/api/resources/moduleSettings.js +43 -0
  98. package/dist/api/resources/moduleSettings.js.map +1 -0
  99. package/dist/api/resources/mutation.d.ts +18 -0
  100. package/dist/api/resources/mutation.d.ts.map +1 -0
  101. package/dist/api/resources/mutation.js +12 -0
  102. package/dist/api/resources/mutation.js.map +1 -0
  103. package/dist/api/resources/notes.d.ts +14 -0
  104. package/dist/api/resources/notes.d.ts.map +1 -0
  105. package/dist/api/resources/notes.js +39 -0
  106. package/dist/api/resources/notes.js.map +1 -0
  107. package/dist/api/resources/opportunities.d.ts +29 -0
  108. package/dist/api/resources/opportunities.d.ts.map +1 -0
  109. package/dist/api/resources/opportunities.js +38 -0
  110. package/dist/api/resources/opportunities.js.map +1 -0
  111. package/dist/api/resources/partnerships.d.ts +33 -0
  112. package/dist/api/resources/partnerships.d.ts.map +1 -0
  113. package/dist/api/resources/partnerships.js +39 -0
  114. package/dist/api/resources/partnerships.js.map +1 -0
  115. package/dist/api/resources/people.d.ts +22 -0
  116. package/dist/api/resources/people.d.ts.map +1 -0
  117. package/dist/api/resources/people.js +36 -0
  118. package/dist/api/resources/people.js.map +1 -0
  119. package/dist/api/resources/pipelineStages.d.ts +22 -0
  120. package/dist/api/resources/pipelineStages.d.ts.map +1 -0
  121. package/dist/api/resources/pipelineStages.js +61 -0
  122. package/dist/api/resources/pipelineStages.js.map +1 -0
  123. package/dist/api/resources/planItems.d.ts +31 -0
  124. package/dist/api/resources/planItems.d.ts.map +1 -0
  125. package/dist/api/resources/planItems.js +60 -0
  126. package/dist/api/resources/planItems.js.map +1 -0
  127. package/dist/api/resources/positions.d.ts +23 -0
  128. package/dist/api/resources/positions.d.ts.map +1 -0
  129. package/dist/api/resources/positions.js +31 -0
  130. package/dist/api/resources/positions.js.map +1 -0
  131. package/dist/api/resources/raises.d.ts +30 -0
  132. package/dist/api/resources/raises.d.ts.map +1 -0
  133. package/dist/api/resources/raises.js +38 -0
  134. package/dist/api/resources/raises.js.map +1 -0
  135. package/dist/api/resources/roles.d.ts +20 -0
  136. package/dist/api/resources/roles.d.ts.map +1 -0
  137. package/dist/api/resources/roles.js +31 -0
  138. package/dist/api/resources/roles.js.map +1 -0
  139. package/dist/api/resources/search.d.ts +12 -0
  140. package/dist/api/resources/search.d.ts.map +1 -0
  141. package/dist/api/resources/search.js +37 -0
  142. package/dist/api/resources/search.js.map +1 -0
  143. package/dist/api/resources/session.d.ts +58 -0
  144. package/dist/api/resources/session.d.ts.map +1 -0
  145. package/dist/api/resources/session.js +157 -0
  146. package/dist/api/resources/session.js.map +1 -0
  147. package/dist/api/resources/webhooks.d.ts +45 -0
  148. package/dist/api/resources/webhooks.d.ts.map +1 -0
  149. package/dist/api/resources/webhooks.js +106 -0
  150. package/dist/api/resources/webhooks.js.map +1 -0
  151. package/dist/api/resources/workspace.d.ts +20 -0
  152. package/dist/api/resources/workspace.d.ts.map +1 -0
  153. package/dist/api/resources/workspace.js +63 -0
  154. package/dist/api/resources/workspace.js.map +1 -0
  155. package/dist/app/KelpieApp.d.ts +18 -0
  156. package/dist/app/KelpieApp.d.ts.map +1 -0
  157. package/dist/app/KelpieApp.js +59 -0
  158. package/dist/app/KelpieApp.js.map +1 -0
  159. package/dist/app/SessionGate.d.ts +14 -0
  160. package/dist/app/SessionGate.d.ts.map +1 -0
  161. package/dist/app/SessionGate.js +33 -0
  162. package/dist/app/SessionGate.js.map +1 -0
  163. package/dist/components/ActivitiesPanel.d.ts +28 -0
  164. package/dist/components/ActivitiesPanel.d.ts.map +1 -0
  165. package/dist/components/ActivitiesPanel.js +75 -0
  166. package/dist/components/ActivitiesPanel.js.map +1 -0
  167. package/dist/components/AgentTasks.d.ts +16 -0
  168. package/dist/components/AgentTasks.d.ts.map +1 -0
  169. package/dist/components/AgentTasks.js +166 -0
  170. package/dist/components/AgentTasks.js.map +1 -0
  171. package/dist/components/Chip.d.ts +10 -0
  172. package/dist/components/Chip.d.ts.map +1 -0
  173. package/dist/components/Chip.js +21 -0
  174. package/dist/components/Chip.js.map +1 -0
  175. package/dist/components/CopyButton.d.ts +7 -0
  176. package/dist/components/CopyButton.d.ts.map +1 -0
  177. package/dist/components/CopyButton.js +30 -0
  178. package/dist/components/CopyButton.js.map +1 -0
  179. package/dist/components/DataTable.d.ts +36 -0
  180. package/dist/components/DataTable.d.ts.map +1 -0
  181. package/dist/components/DataTable.js +43 -0
  182. package/dist/components/DataTable.js.map +1 -0
  183. package/dist/components/DecisionsPanel.d.ts +14 -0
  184. package/dist/components/DecisionsPanel.d.ts.map +1 -0
  185. package/dist/components/DecisionsPanel.js +73 -0
  186. package/dist/components/DecisionsPanel.js.map +1 -0
  187. package/dist/components/DeleteRecord.d.ts +19 -0
  188. package/dist/components/DeleteRecord.d.ts.map +1 -0
  189. package/dist/components/DeleteRecord.js +22 -0
  190. package/dist/components/DeleteRecord.js.map +1 -0
  191. package/dist/components/EntitySearch.d.ts +33 -0
  192. package/dist/components/EntitySearch.d.ts.map +1 -0
  193. package/dist/components/EntitySearch.js +111 -0
  194. package/dist/components/EntitySearch.js.map +1 -0
  195. package/dist/components/ErrorBoundary.d.ts +21 -0
  196. package/dist/components/ErrorBoundary.d.ts.map +1 -0
  197. package/dist/components/ErrorBoundary.js +26 -0
  198. package/dist/components/ErrorBoundary.js.map +1 -0
  199. package/dist/components/InlineEdit.d.ts +37 -0
  200. package/dist/components/InlineEdit.d.ts.map +1 -0
  201. package/dist/components/InlineEdit.js +77 -0
  202. package/dist/components/InlineEdit.js.map +1 -0
  203. package/dist/components/KanbanBoard.d.ts +24 -0
  204. package/dist/components/KanbanBoard.d.ts.map +1 -0
  205. package/dist/components/KanbanBoard.js +92 -0
  206. package/dist/components/KanbanBoard.js.map +1 -0
  207. package/dist/components/MarkdownView.d.ts +4 -0
  208. package/dist/components/MarkdownView.d.ts.map +1 -0
  209. package/dist/components/MarkdownView.js +45 -0
  210. package/dist/components/MarkdownView.js.map +1 -0
  211. package/dist/components/NotesPanel.d.ts +17 -0
  212. package/dist/components/NotesPanel.d.ts.map +1 -0
  213. package/dist/components/NotesPanel.js +53 -0
  214. package/dist/components/NotesPanel.js.map +1 -0
  215. package/dist/components/PageHeader.d.ts +20 -0
  216. package/dist/components/PageHeader.d.ts.map +1 -0
  217. package/dist/components/PageHeader.js +15 -0
  218. package/dist/components/PageHeader.js.map +1 -0
  219. package/dist/components/PhonesField.d.ts +7 -0
  220. package/dist/components/PhonesField.d.ts.map +1 -0
  221. package/dist/components/PhonesField.js +92 -0
  222. package/dist/components/PhonesField.js.map +1 -0
  223. package/dist/components/PlanAttention.d.ts +40 -0
  224. package/dist/components/PlanAttention.d.ts.map +1 -0
  225. package/dist/components/PlanAttention.js +86 -0
  226. package/dist/components/PlanAttention.js.map +1 -0
  227. package/dist/components/PlanPanel.d.ts +18 -0
  228. package/dist/components/PlanPanel.d.ts.map +1 -0
  229. package/dist/components/PlanPanel.js +102 -0
  230. package/dist/components/PlanPanel.js.map +1 -0
  231. package/dist/components/QueryState.d.ts +24 -0
  232. package/dist/components/QueryState.d.ts.map +1 -0
  233. package/dist/components/QueryState.js +34 -0
  234. package/dist/components/QueryState.js.map +1 -0
  235. package/dist/components/RecordTabs.d.ts +16 -0
  236. package/dist/components/RecordTabs.d.ts.map +1 -0
  237. package/dist/components/RecordTabs.js +15 -0
  238. package/dist/components/RecordTabs.js.map +1 -0
  239. package/dist/components/SectionHeader.d.ts +15 -0
  240. package/dist/components/SectionHeader.d.ts.map +1 -0
  241. package/dist/components/SectionHeader.js +14 -0
  242. package/dist/components/SectionHeader.js.map +1 -0
  243. package/dist/components/SegmentedControl.d.ts +13 -0
  244. package/dist/components/SegmentedControl.d.ts.map +1 -0
  245. package/dist/components/SegmentedControl.js +14 -0
  246. package/dist/components/SegmentedControl.js.map +1 -0
  247. package/dist/components/Shell.d.ts +2 -0
  248. package/dist/components/Shell.d.ts.map +1 -0
  249. package/dist/components/Shell.js +143 -0
  250. package/dist/components/Shell.js.map +1 -0
  251. package/dist/components/SidebarField.d.ts +8 -0
  252. package/dist/components/SidebarField.d.ts.map +1 -0
  253. package/dist/components/SidebarField.js +6 -0
  254. package/dist/components/SidebarField.js.map +1 -0
  255. package/dist/components/SocialProfilesField.d.ts +8 -0
  256. package/dist/components/SocialProfilesField.d.ts.map +1 -0
  257. package/dist/components/SocialProfilesField.js +176 -0
  258. package/dist/components/SocialProfilesField.js.map +1 -0
  259. package/dist/components/StageSettings.d.ts +16 -0
  260. package/dist/components/StageSettings.d.ts.map +1 -0
  261. package/dist/components/StageSettings.js +107 -0
  262. package/dist/components/StageSettings.js.map +1 -0
  263. package/dist/components/SummaryBlock.d.ts +12 -0
  264. package/dist/components/SummaryBlock.d.ts.map +1 -0
  265. package/dist/components/SummaryBlock.js +12 -0
  266. package/dist/components/SummaryBlock.js.map +1 -0
  267. package/dist/index.d.ts +90 -0
  268. package/dist/index.d.ts.map +1 -0
  269. package/dist/index.js +55 -0
  270. package/dist/index.js.map +1 -0
  271. package/dist/lib/dates.d.ts +26 -0
  272. package/dist/lib/dates.d.ts.map +1 -0
  273. package/dist/lib/dates.js +71 -0
  274. package/dist/lib/dates.js.map +1 -0
  275. package/dist/lib/money.d.ts +7 -0
  276. package/dist/lib/money.d.ts.map +1 -0
  277. package/dist/lib/money.js +13 -0
  278. package/dist/lib/money.js.map +1 -0
  279. package/dist/lib/names.d.ts +9 -0
  280. package/dist/lib/names.d.ts.map +1 -0
  281. package/dist/lib/names.js +13 -0
  282. package/dist/lib/names.js.map +1 -0
  283. package/dist/lib/plan.d.ts +67 -0
  284. package/dist/lib/plan.d.ts.map +1 -0
  285. package/dist/lib/plan.js +96 -0
  286. package/dist/lib/plan.js.map +1 -0
  287. package/dist/lib/theme.d.ts +19 -0
  288. package/dist/lib/theme.d.ts.map +1 -0
  289. package/dist/lib/theme.js +30 -0
  290. package/dist/lib/theme.js.map +1 -0
  291. package/dist/pages/CompaniesPage.d.ts +2 -0
  292. package/dist/pages/CompaniesPage.d.ts.map +1 -0
  293. package/dist/pages/CompaniesPage.js +77 -0
  294. package/dist/pages/CompaniesPage.js.map +1 -0
  295. package/dist/pages/CompanyDetail.d.ts +2 -0
  296. package/dist/pages/CompanyDetail.d.ts.map +1 -0
  297. package/dist/pages/CompanyDetail.js +177 -0
  298. package/dist/pages/CompanyDetail.js.map +1 -0
  299. package/dist/pages/DealDetail.d.ts +2 -0
  300. package/dist/pages/DealDetail.d.ts.map +1 -0
  301. package/dist/pages/DealDetail.js +192 -0
  302. package/dist/pages/DealDetail.js.map +1 -0
  303. package/dist/pages/DealStageSettingsPage.d.ts +7 -0
  304. package/dist/pages/DealStageSettingsPage.d.ts.map +1 -0
  305. package/dist/pages/DealStageSettingsPage.js +38 -0
  306. package/dist/pages/DealStageSettingsPage.js.map +1 -0
  307. package/dist/pages/DealsPage.d.ts +2 -0
  308. package/dist/pages/DealsPage.d.ts.map +1 -0
  309. package/dist/pages/DealsPage.js +177 -0
  310. package/dist/pages/DealsPage.js.map +1 -0
  311. package/dist/pages/DecisionsPage.d.ts +2 -0
  312. package/dist/pages/DecisionsPage.d.ts.map +1 -0
  313. package/dist/pages/DecisionsPage.js +121 -0
  314. package/dist/pages/DecisionsPage.js.map +1 -0
  315. package/dist/pages/FormDetail.d.ts +2 -0
  316. package/dist/pages/FormDetail.d.ts.map +1 -0
  317. package/dist/pages/FormDetail.js +56 -0
  318. package/dist/pages/FormDetail.js.map +1 -0
  319. package/dist/pages/FormsPage.d.ts +2 -0
  320. package/dist/pages/FormsPage.d.ts.map +1 -0
  321. package/dist/pages/FormsPage.js +67 -0
  322. package/dist/pages/FormsPage.js.map +1 -0
  323. package/dist/pages/FundraisingPage.d.ts +2 -0
  324. package/dist/pages/FundraisingPage.d.ts.map +1 -0
  325. package/dist/pages/FundraisingPage.js +187 -0
  326. package/dist/pages/FundraisingPage.js.map +1 -0
  327. package/dist/pages/HiringPage.d.ts +9 -0
  328. package/dist/pages/HiringPage.d.ts.map +1 -0
  329. package/dist/pages/HiringPage.js +73 -0
  330. package/dist/pages/HiringPage.js.map +1 -0
  331. package/dist/pages/NotFoundPage.d.ts +10 -0
  332. package/dist/pages/NotFoundPage.d.ts.map +1 -0
  333. package/dist/pages/NotFoundPage.js +14 -0
  334. package/dist/pages/NotFoundPage.js.map +1 -0
  335. package/dist/pages/OpportunitiesPage.d.ts +2 -0
  336. package/dist/pages/OpportunitiesPage.d.ts.map +1 -0
  337. package/dist/pages/OpportunitiesPage.js +184 -0
  338. package/dist/pages/OpportunitiesPage.js.map +1 -0
  339. package/dist/pages/OpportunityDetail.d.ts +2 -0
  340. package/dist/pages/OpportunityDetail.d.ts.map +1 -0
  341. package/dist/pages/OpportunityDetail.js +132 -0
  342. package/dist/pages/OpportunityDetail.js.map +1 -0
  343. package/dist/pages/OpportunityStageSettingsPage.d.ts +3 -0
  344. package/dist/pages/OpportunityStageSettingsPage.d.ts.map +1 -0
  345. package/dist/pages/OpportunityStageSettingsPage.js +34 -0
  346. package/dist/pages/OpportunityStageSettingsPage.js.map +1 -0
  347. package/dist/pages/PartnershipDetail.d.ts +2 -0
  348. package/dist/pages/PartnershipDetail.d.ts.map +1 -0
  349. package/dist/pages/PartnershipDetail.js +179 -0
  350. package/dist/pages/PartnershipDetail.js.map +1 -0
  351. package/dist/pages/PartnershipStageSettingsPage.d.ts +3 -0
  352. package/dist/pages/PartnershipStageSettingsPage.d.ts.map +1 -0
  353. package/dist/pages/PartnershipStageSettingsPage.js +34 -0
  354. package/dist/pages/PartnershipStageSettingsPage.js.map +1 -0
  355. package/dist/pages/PartnershipsPage.d.ts +2 -0
  356. package/dist/pages/PartnershipsPage.d.ts.map +1 -0
  357. package/dist/pages/PartnershipsPage.js +182 -0
  358. package/dist/pages/PartnershipsPage.js.map +1 -0
  359. package/dist/pages/PeoplePage.d.ts +10 -0
  360. package/dist/pages/PeoplePage.d.ts.map +1 -0
  361. package/dist/pages/PeoplePage.js +71 -0
  362. package/dist/pages/PeoplePage.js.map +1 -0
  363. package/dist/pages/PersonDetail.d.ts +2 -0
  364. package/dist/pages/PersonDetail.d.ts.map +1 -0
  365. package/dist/pages/PersonDetail.js +193 -0
  366. package/dist/pages/PersonDetail.js.map +1 -0
  367. package/dist/pages/PlanningPage.d.ts +2 -0
  368. package/dist/pages/PlanningPage.d.ts.map +1 -0
  369. package/dist/pages/PlanningPage.js +112 -0
  370. package/dist/pages/PlanningPage.js.map +1 -0
  371. package/dist/pages/RaiseDetail.d.ts +2 -0
  372. package/dist/pages/RaiseDetail.d.ts.map +1 -0
  373. package/dist/pages/RaiseDetail.js +198 -0
  374. package/dist/pages/RaiseDetail.js.map +1 -0
  375. package/dist/pages/RaiseStageSettingsPage.d.ts +3 -0
  376. package/dist/pages/RaiseStageSettingsPage.d.ts.map +1 -0
  377. package/dist/pages/RaiseStageSettingsPage.js +34 -0
  378. package/dist/pages/RaiseStageSettingsPage.js.map +1 -0
  379. package/dist/pages/RoleDetail.d.ts +2 -0
  380. package/dist/pages/RoleDetail.d.ts.map +1 -0
  381. package/dist/pages/RoleDetail.js +177 -0
  382. package/dist/pages/RoleDetail.js.map +1 -0
  383. package/dist/pages/SearchPage.d.ts +2 -0
  384. package/dist/pages/SearchPage.d.ts.map +1 -0
  385. package/dist/pages/SearchPage.js +51 -0
  386. package/dist/pages/SearchPage.js.map +1 -0
  387. package/dist/pages/account/AccountLayout.d.ts +2 -0
  388. package/dist/pages/account/AccountLayout.d.ts.map +1 -0
  389. package/dist/pages/account/AccountLayout.js +25 -0
  390. package/dist/pages/account/AccountLayout.js.map +1 -0
  391. package/dist/pages/account/Field.d.ts +8 -0
  392. package/dist/pages/account/Field.d.ts.map +1 -0
  393. package/dist/pages/account/Field.js +6 -0
  394. package/dist/pages/account/Field.js.map +1 -0
  395. package/dist/pages/account/PreferencesPage.d.ts +2 -0
  396. package/dist/pages/account/PreferencesPage.d.ts.map +1 -0
  397. package/dist/pages/account/PreferencesPage.js +92 -0
  398. package/dist/pages/account/PreferencesPage.js.map +1 -0
  399. package/dist/pages/account/ProfilePage.d.ts +14 -0
  400. package/dist/pages/account/ProfilePage.d.ts.map +1 -0
  401. package/dist/pages/account/ProfilePage.js +71 -0
  402. package/dist/pages/account/ProfilePage.js.map +1 -0
  403. package/dist/pages/account/SecurityPage.d.ts +11 -0
  404. package/dist/pages/account/SecurityPage.d.ts.map +1 -0
  405. package/dist/pages/account/SecurityPage.js +78 -0
  406. package/dist/pages/account/SecurityPage.js.map +1 -0
  407. package/dist/pages/admin/DataPage.d.ts +3 -0
  408. package/dist/pages/admin/DataPage.d.ts.map +1 -0
  409. package/dist/pages/admin/DataPage.js +210 -0
  410. package/dist/pages/admin/DataPage.js.map +1 -0
  411. package/dist/pages/admin/McpPage.d.ts +2 -0
  412. package/dist/pages/admin/McpPage.d.ts.map +1 -0
  413. package/dist/pages/admin/McpPage.js +128 -0
  414. package/dist/pages/admin/McpPage.js.map +1 -0
  415. package/dist/pages/admin/ModulesPage.d.ts +2 -0
  416. package/dist/pages/admin/ModulesPage.d.ts.map +1 -0
  417. package/dist/pages/admin/ModulesPage.js +53 -0
  418. package/dist/pages/admin/ModulesPage.js.map +1 -0
  419. package/dist/pages/admin/TeamPage.d.ts +2 -0
  420. package/dist/pages/admin/TeamPage.d.ts.map +1 -0
  421. package/dist/pages/admin/TeamPage.js +99 -0
  422. package/dist/pages/admin/TeamPage.js.map +1 -0
  423. package/dist/pages/admin/WebhookDeliveries.d.ts +4 -0
  424. package/dist/pages/admin/WebhookDeliveries.d.ts.map +1 -0
  425. package/dist/pages/admin/WebhookDeliveries.js +88 -0
  426. package/dist/pages/admin/WebhookDeliveries.js.map +1 -0
  427. package/dist/pages/admin/WebhooksPage.d.ts +2 -0
  428. package/dist/pages/admin/WebhooksPage.d.ts.map +1 -0
  429. package/dist/pages/admin/WebhooksPage.js +152 -0
  430. package/dist/pages/admin/WebhooksPage.js.map +1 -0
  431. package/dist/pages/admin/WorkspaceSettingsPage.d.ts +2 -0
  432. package/dist/pages/admin/WorkspaceSettingsPage.d.ts.map +1 -0
  433. package/dist/pages/admin/WorkspaceSettingsPage.js +117 -0
  434. package/dist/pages/admin/WorkspaceSettingsPage.js.map +1 -0
  435. package/dist/pages/auth/AuthForm.d.ts +46 -0
  436. package/dist/pages/auth/AuthForm.d.ts.map +1 -0
  437. package/dist/pages/auth/AuthForm.js +32 -0
  438. package/dist/pages/auth/AuthForm.js.map +1 -0
  439. package/dist/pages/auth/AuthLayout.d.ts +24 -0
  440. package/dist/pages/auth/AuthLayout.d.ts.map +1 -0
  441. package/dist/pages/auth/AuthLayout.js +19 -0
  442. package/dist/pages/auth/AuthLayout.js.map +1 -0
  443. package/dist/pages/auth/ForgotPasswordPage.d.ts +13 -0
  444. package/dist/pages/auth/ForgotPasswordPage.d.ts.map +1 -0
  445. package/dist/pages/auth/ForgotPasswordPage.js +39 -0
  446. package/dist/pages/auth/ForgotPasswordPage.js.map +1 -0
  447. package/dist/pages/auth/JoinPage.d.ts +12 -0
  448. package/dist/pages/auth/JoinPage.d.ts.map +1 -0
  449. package/dist/pages/auth/JoinPage.js +43 -0
  450. package/dist/pages/auth/JoinPage.js.map +1 -0
  451. package/dist/pages/auth/ResetPasswordPage.d.ts +13 -0
  452. package/dist/pages/auth/ResetPasswordPage.d.ts.map +1 -0
  453. package/dist/pages/auth/ResetPasswordPage.js +58 -0
  454. package/dist/pages/auth/ResetPasswordPage.js.map +1 -0
  455. package/dist/pages/auth/SignInPage.d.ts +2 -0
  456. package/dist/pages/auth/SignInPage.d.ts.map +1 -0
  457. package/dist/pages/auth/SignInPage.js +38 -0
  458. package/dist/pages/auth/SignInPage.js.map +1 -0
  459. package/dist/pages/auth/SignUpPage.d.ts +13 -0
  460. package/dist/pages/auth/SignUpPage.d.ts.map +1 -0
  461. package/dist/pages/auth/SignUpPage.js +43 -0
  462. package/dist/pages/auth/SignUpPage.js.map +1 -0
  463. package/dist/pages/candidateFields.d.ts +22 -0
  464. package/dist/pages/candidateFields.d.ts.map +1 -0
  465. package/dist/pages/candidateFields.js +82 -0
  466. package/dist/pages/candidateFields.js.map +1 -0
  467. package/dist/pages/dashboard/DashboardPage.d.ts +2 -0
  468. package/dist/pages/dashboard/DashboardPage.d.ts.map +1 -0
  469. package/dist/pages/dashboard/DashboardPage.js +40 -0
  470. package/dist/pages/dashboard/DashboardPage.js.map +1 -0
  471. package/dist/pages/dashboard/attention.d.ts +41 -0
  472. package/dist/pages/dashboard/attention.d.ts.map +1 -0
  473. package/dist/pages/dashboard/attention.js +146 -0
  474. package/dist/pages/dashboard/attention.js.map +1 -0
  475. package/dist/pages/dashboard/sections.d.ts +20 -0
  476. package/dist/pages/dashboard/sections.d.ts.map +1 -0
  477. package/dist/pages/dashboard/sections.js +60 -0
  478. package/dist/pages/dashboard/sections.js.map +1 -0
  479. package/dist/pages/fields.d.ts +11 -0
  480. package/dist/pages/fields.d.ts.map +1 -0
  481. package/dist/pages/fields.js +17 -0
  482. package/dist/pages/fields.js.map +1 -0
  483. package/dist/pages/forms/EmbedPanel.d.ts +14 -0
  484. package/dist/pages/forms/EmbedPanel.d.ts.map +1 -0
  485. package/dist/pages/forms/EmbedPanel.js +19 -0
  486. package/dist/pages/forms/EmbedPanel.js.map +1 -0
  487. package/dist/pages/forms/FieldsEditor.d.ts +6 -0
  488. package/dist/pages/forms/FieldsEditor.d.ts.map +1 -0
  489. package/dist/pages/forms/FieldsEditor.js +115 -0
  490. package/dist/pages/forms/FieldsEditor.js.map +1 -0
  491. package/dist/pages/forms/FormSettings.d.ts +6 -0
  492. package/dist/pages/forms/FormSettings.d.ts.map +1 -0
  493. package/dist/pages/forms/FormSettings.js +47 -0
  494. package/dist/pages/forms/FormSettings.js.map +1 -0
  495. package/dist/pages/forms/SubmissionsTable.d.ts +8 -0
  496. package/dist/pages/forms/SubmissionsTable.d.ts.map +1 -0
  497. package/dist/pages/forms/SubmissionsTable.js +91 -0
  498. package/dist/pages/forms/SubmissionsTable.js.map +1 -0
  499. package/dist/pages/forms/fieldList.d.ts +70 -0
  500. package/dist/pages/forms/fieldList.d.ts.map +1 -0
  501. package/dist/pages/forms/fieldList.js +126 -0
  502. package/dist/pages/forms/fieldList.js.map +1 -0
  503. package/dist/pages/forms/template.d.ts +18 -0
  504. package/dist/pages/forms/template.d.ts.map +1 -0
  505. package/dist/pages/forms/template.js +34 -0
  506. package/dist/pages/forms/template.js.map +1 -0
  507. package/dist/pages/handbook/HandbookPage.d.ts +2 -0
  508. package/dist/pages/handbook/HandbookPage.d.ts.map +1 -0
  509. package/dist/pages/handbook/HandbookPage.js +197 -0
  510. package/dist/pages/handbook/HandbookPage.js.map +1 -0
  511. package/dist/pages/handbook/tree.d.ts +62 -0
  512. package/dist/pages/handbook/tree.d.ts.map +1 -0
  513. package/dist/pages/handbook/tree.js +222 -0
  514. package/dist/pages/handbook/tree.js.map +1 -0
  515. package/dist/pages/hiringDirectory.d.ts +60 -0
  516. package/dist/pages/hiringDirectory.d.ts.map +1 -0
  517. package/dist/pages/hiringDirectory.js +81 -0
  518. package/dist/pages/hiringDirectory.js.map +1 -0
  519. package/dist/pages/onboarding/HandbookStepPage.d.ts +14 -0
  520. package/dist/pages/onboarding/HandbookStepPage.d.ts.map +1 -0
  521. package/dist/pages/onboarding/HandbookStepPage.js +29 -0
  522. package/dist/pages/onboarding/HandbookStepPage.js.map +1 -0
  523. package/dist/pages/onboarding/InvitesStepPage.d.ts +2 -0
  524. package/dist/pages/onboarding/InvitesStepPage.d.ts.map +1 -0
  525. package/dist/pages/onboarding/InvitesStepPage.js +77 -0
  526. package/dist/pages/onboarding/InvitesStepPage.js.map +1 -0
  527. package/dist/pages/onboarding/WorkspaceStepPage.d.ts +2 -0
  528. package/dist/pages/onboarding/WorkspaceStepPage.d.ts.map +1 -0
  529. package/dist/pages/onboarding/WorkspaceStepPage.js +72 -0
  530. package/dist/pages/onboarding/WorkspaceStepPage.js.map +1 -0
  531. package/dist/pages/positionDirectory.d.ts +20 -0
  532. package/dist/pages/positionDirectory.d.ts.map +1 -0
  533. package/dist/pages/positionDirectory.js +58 -0
  534. package/dist/pages/positionDirectory.js.map +1 -0
  535. package/dist/registry/UiExtensionProvider.d.ts +12 -0
  536. package/dist/registry/UiExtensionProvider.d.ts.map +1 -0
  537. package/dist/registry/UiExtensionProvider.js +10 -0
  538. package/dist/registry/UiExtensionProvider.js.map +1 -0
  539. package/dist/registry/context.d.ts +31 -0
  540. package/dist/registry/context.d.ts.map +1 -0
  541. package/dist/registry/context.js +45 -0
  542. package/dist/registry/context.js.map +1 -0
  543. package/dist/registry/contributions.d.ts +71 -0
  544. package/dist/registry/contributions.d.ts.map +1 -0
  545. package/dist/registry/contributions.js +25 -0
  546. package/dist/registry/contributions.js.map +1 -0
  547. package/dist/registry/overridable.d.ts +27 -0
  548. package/dist/registry/overridable.d.ts.map +1 -0
  549. package/dist/registry/overridable.js +29 -0
  550. package/dist/registry/overridable.js.map +1 -0
  551. package/dist/registry/registry.d.ts +68 -0
  552. package/dist/registry/registry.d.ts.map +1 -0
  553. package/dist/registry/registry.js +112 -0
  554. package/dist/registry/registry.js.map +1 -0
  555. package/dist/testing/inputs.d.ts +13 -0
  556. package/dist/testing/inputs.d.ts.map +1 -0
  557. package/dist/testing/inputs.js +16 -0
  558. package/dist/testing/inputs.js.map +1 -0
  559. package/dist/testing/stubClient.d.ts +42 -0
  560. package/dist/testing/stubClient.d.ts.map +1 -0
  561. package/dist/testing/stubClient.js +29 -0
  562. package/dist/testing/stubClient.js.map +1 -0
  563. package/package.json +73 -0
  564. package/src/ServiceStatus.tsx +61 -0
  565. package/src/api/ApiProvider.tsx +40 -0
  566. package/src/api/client.ts +267 -0
  567. package/src/api/context.ts +25 -0
  568. package/src/api/errors.ts +14 -0
  569. package/src/api/health.ts +38 -0
  570. package/src/api/json.ts +4 -0
  571. package/src/api/queryClient.ts +35 -0
  572. package/src/api/resource.ts +412 -0
  573. package/src/api/resources/account.ts +220 -0
  574. package/src/api/resources/activities.ts +31 -0
  575. package/src/api/resources/agentTasks.ts +172 -0
  576. package/src/api/resources/candidates.ts +69 -0
  577. package/src/api/resources/companies.ts +72 -0
  578. package/src/api/resources/dashboard.ts +39 -0
  579. package/src/api/resources/deals.ts +82 -0
  580. package/src/api/resources/decisions.ts +60 -0
  581. package/src/api/resources/forms.ts +218 -0
  582. package/src/api/resources/handbookPages.ts +77 -0
  583. package/src/api/resources/importJobs.ts +229 -0
  584. package/src/api/resources/invites.ts +112 -0
  585. package/src/api/resources/mcpTools.ts +28 -0
  586. package/src/api/resources/members.ts +105 -0
  587. package/src/api/resources/moduleSettings.ts +67 -0
  588. package/src/api/resources/mutation.ts +31 -0
  589. package/src/api/resources/notes.ts +62 -0
  590. package/src/api/resources/opportunities.ts +84 -0
  591. package/src/api/resources/partnerships.ts +89 -0
  592. package/src/api/resources/people.ts +72 -0
  593. package/src/api/resources/pipelineStages.ts +93 -0
  594. package/src/api/resources/planItems.ts +103 -0
  595. package/src/api/resources/positions.ts +70 -0
  596. package/src/api/resources/raises.ts +82 -0
  597. package/src/api/resources/roles.ts +65 -0
  598. package/src/api/resources/search.ts +49 -0
  599. package/src/api/resources/session.ts +220 -0
  600. package/src/api/resources/webhooks.ts +157 -0
  601. package/src/api/resources/workspace.ts +81 -0
  602. package/src/app/KelpieApp.tsx +162 -0
  603. package/src/app/SessionGate.tsx +42 -0
  604. package/src/components/ActivitiesPanel.tsx +235 -0
  605. package/src/components/AgentTasks.tsx +473 -0
  606. package/src/components/Chip.tsx +36 -0
  607. package/src/components/CopyButton.tsx +48 -0
  608. package/src/components/DataTable.tsx +209 -0
  609. package/src/components/DecisionsPanel.tsx +233 -0
  610. package/src/components/DeleteRecord.tsx +73 -0
  611. package/src/components/EntitySearch.tsx +268 -0
  612. package/src/components/ErrorBoundary.tsx +58 -0
  613. package/src/components/InlineEdit.tsx +179 -0
  614. package/src/components/KanbanBoard.tsx +234 -0
  615. package/src/components/MarkdownView.tsx +73 -0
  616. package/src/components/NotesPanel.tsx +169 -0
  617. package/src/components/PageHeader.tsx +61 -0
  618. package/src/components/PhonesField.tsx +204 -0
  619. package/src/components/PlanAttention.tsx +249 -0
  620. package/src/components/PlanPanel.tsx +317 -0
  621. package/src/components/QueryState.tsx +83 -0
  622. package/src/components/RecordTabs.tsx +69 -0
  623. package/src/components/SectionHeader.tsx +63 -0
  624. package/src/components/SegmentedControl.tsx +48 -0
  625. package/src/components/Shell.tsx +300 -0
  626. package/src/components/SidebarField.tsx +18 -0
  627. package/src/components/SocialProfilesField.tsx +356 -0
  628. package/src/components/StageSettings.tsx +319 -0
  629. package/src/components/SummaryBlock.tsx +27 -0
  630. package/src/index.ts +190 -0
  631. package/src/lib/dates.ts +90 -0
  632. package/src/lib/money.ts +12 -0
  633. package/src/lib/names.ts +13 -0
  634. package/src/lib/plan.ts +147 -0
  635. package/src/lib/theme.ts +53 -0
  636. package/src/pages/CompaniesPage.tsx +143 -0
  637. package/src/pages/CompanyDetail.tsx +502 -0
  638. package/src/pages/DealDetail.tsx +512 -0
  639. package/src/pages/DealStageSettingsPage.tsx +67 -0
  640. package/src/pages/DealsPage.tsx +342 -0
  641. package/src/pages/DecisionsPage.tsx +211 -0
  642. package/src/pages/FormDetail.tsx +130 -0
  643. package/src/pages/FormsPage.tsx +151 -0
  644. package/src/pages/FundraisingPage.tsx +354 -0
  645. package/src/pages/HiringPage.tsx +169 -0
  646. package/src/pages/NotFoundPage.tsx +27 -0
  647. package/src/pages/OpportunitiesPage.tsx +349 -0
  648. package/src/pages/OpportunityDetail.tsx +337 -0
  649. package/src/pages/OpportunityStageSettingsPage.tsx +63 -0
  650. package/src/pages/PartnershipDetail.tsx +490 -0
  651. package/src/pages/PartnershipStageSettingsPage.tsx +63 -0
  652. package/src/pages/PartnershipsPage.tsx +353 -0
  653. package/src/pages/PeoplePage.tsx +145 -0
  654. package/src/pages/PersonDetail.tsx +526 -0
  655. package/src/pages/PlanningPage.tsx +318 -0
  656. package/src/pages/RaiseDetail.tsx +498 -0
  657. package/src/pages/RaiseStageSettingsPage.tsx +63 -0
  658. package/src/pages/RoleDetail.tsx +455 -0
  659. package/src/pages/SearchPage.tsx +135 -0
  660. package/src/pages/account/AccountLayout.tsx +38 -0
  661. package/src/pages/account/Field.tsx +20 -0
  662. package/src/pages/account/PreferencesPage.tsx +224 -0
  663. package/src/pages/account/ProfilePage.tsx +147 -0
  664. package/src/pages/account/SecurityPage.tsx +237 -0
  665. package/src/pages/admin/DataPage.tsx +772 -0
  666. package/src/pages/admin/McpPage.tsx +404 -0
  667. package/src/pages/admin/ModulesPage.tsx +113 -0
  668. package/src/pages/admin/TeamPage.tsx +386 -0
  669. package/src/pages/admin/WebhookDeliveries.tsx +184 -0
  670. package/src/pages/admin/WebhooksPage.tsx +443 -0
  671. package/src/pages/admin/WorkspaceSettingsPage.tsx +274 -0
  672. package/src/pages/auth/AuthForm.tsx +118 -0
  673. package/src/pages/auth/AuthLayout.tsx +74 -0
  674. package/src/pages/auth/ForgotPasswordPage.tsx +80 -0
  675. package/src/pages/auth/JoinPage.tsx +85 -0
  676. package/src/pages/auth/ResetPasswordPage.tsx +124 -0
  677. package/src/pages/auth/SignInPage.tsx +83 -0
  678. package/src/pages/auth/SignUpPage.tsx +93 -0
  679. package/src/pages/candidateFields.tsx +175 -0
  680. package/src/pages/dashboard/DashboardPage.tsx +108 -0
  681. package/src/pages/dashboard/attention.ts +206 -0
  682. package/src/pages/dashboard/sections.tsx +269 -0
  683. package/src/pages/fields.ts +21 -0
  684. package/src/pages/forms/EmbedPanel.tsx +95 -0
  685. package/src/pages/forms/FieldsEditor.tsx +412 -0
  686. package/src/pages/forms/FormSettings.tsx +159 -0
  687. package/src/pages/forms/SubmissionsTable.tsx +171 -0
  688. package/src/pages/forms/fieldList.ts +209 -0
  689. package/src/pages/forms/template.ts +37 -0
  690. package/src/pages/handbook/HandbookPage.tsx +500 -0
  691. package/src/pages/handbook/tree.ts +327 -0
  692. package/src/pages/hiringDirectory.ts +146 -0
  693. package/src/pages/onboarding/HandbookStepPage.tsx +75 -0
  694. package/src/pages/onboarding/InvitesStepPage.tsx +180 -0
  695. package/src/pages/onboarding/WorkspaceStepPage.tsx +122 -0
  696. package/src/pages/positionDirectory.ts +98 -0
  697. package/src/registry/UiExtensionProvider.tsx +20 -0
  698. package/src/registry/context.ts +67 -0
  699. package/src/registry/contributions.ts +89 -0
  700. package/src/registry/overridable.ts +62 -0
  701. package/src/registry/registry.ts +204 -0
  702. package/src/styles.css +175 -0
  703. package/src/testing/inputs.ts +18 -0
  704. package/src/testing/stubClient.ts +78 -0
@@ -0,0 +1,404 @@
1
+ import { AGENT_RUN_STATUS_LABELS } from '@kelpie/schemas'
2
+ import type { AgentRun, McpTool } from '@kelpie/schemas'
3
+ import { useMemo, useState } from 'react'
4
+ import { Link } from 'react-router'
5
+
6
+ import {
7
+ useAgentRuns,
8
+ useAgents,
9
+ useAllAgentTasks,
10
+ useCreateAgent,
11
+ useDeleteAgent,
12
+ } from '../../api/resources/agentTasks.ts'
13
+ import { useMcpTools } from '../../api/resources/mcpTools.ts'
14
+ import { PageHeader } from '../../components/PageHeader.tsx'
15
+ import { ErrorPanel, LoadingPanel } from '../../components/QueryState.tsx'
16
+ import { CopyButton } from '../../components/CopyButton.tsx'
17
+ import { formatRelativeTime } from '../../lib/dates.ts'
18
+
19
+ /**
20
+ * How an agent connects to this workspace.
21
+ *
22
+ * Everything on the page is derived rather than written down. The endpoint comes
23
+ * from the origin the browser reached the app on, the same way a form's embed URL
24
+ * does, so it is right for a self-hosted install on any hostname. The tool list
25
+ * comes from `/v1/mcp/tools`, which reads the registry the endpoint itself
26
+ * dispatches against: a module that adds a resource shows up here without anyone
27
+ * editing this file.
28
+ *
29
+ * Registered agents and their run log live here too, under the connection
30
+ * details, where the mockup put them: an agent is something you connect, and
31
+ * this is the connections page.
32
+ */
33
+
34
+ /**
35
+ * Matches a tool on its name or its description, so "csv" finds the import and
36
+ * export tools and "pinned" finds the note list that filters on it.
37
+ */
38
+ function matches(tool: McpTool, term: string): boolean {
39
+ const needle = term.trim().toLowerCase()
40
+
41
+ if (needle.length === 0) {
42
+ return true
43
+ }
44
+
45
+ return (
46
+ tool.name.toLowerCase().includes(needle) ||
47
+ tool.description.toLowerCase().includes(needle)
48
+ )
49
+ }
50
+
51
+ export function McpPage(): React.JSX.Element {
52
+ const endpoint = new URL('/mcp', window.location.origin).toString()
53
+ const config = `{
54
+ "mcpServers": {
55
+ "kelpie": {
56
+ "url": "${endpoint}",
57
+ "headers": {
58
+ "Authorization": "Bearer kp_live_…"
59
+ }
60
+ }
61
+ }
62
+ }`
63
+
64
+ return (
65
+ <div className="animate-slide-in mx-auto max-w-4xl space-y-6">
66
+ <PageHeader title="MCP" description="Connect agents to this workspace over Streamable HTTP." />
67
+
68
+ <section className="rounded-md border border-border p-5">
69
+ <h2 className="text-[15px] font-semibold text-ink">How agents use Kelpie</h2>
70
+ <p className="mt-2 max-w-2xl text-[13px] leading-relaxed text-ink-muted">
71
+ Kelpie is a CRM and a company brain. Every REST operation is also an MCP tool over
72
+ Streamable HTTP, so an agent reads and writes the same records the app does, through the
73
+ same API. Point Claude, Cursor, or any MCP client at this workspace. There is no bundled
74
+ AI: bring your own agent.
75
+ </p>
76
+ <ul className="mt-4 space-y-2 text-[13px] text-ink">
77
+ <li className="flex gap-2">
78
+ <span className="text-accent">→</span>
79
+ An API key is bound to one workspace, so a client sees that workspace and no other.
80
+ </li>
81
+ <li className="flex gap-2">
82
+ <span className="text-accent">→</span>
83
+ A tool refuses exactly what the endpoint behind it refuses, with the same message.
84
+ </li>
85
+ <li className="flex gap-2">
86
+ <span className="text-accent">→</span>
87
+ Signing in with a browser session does not work here. The endpoint takes bearer keys
88
+ only.
89
+ </li>
90
+ </ul>
91
+ </section>
92
+
93
+ <section className="rounded-md border border-border p-5">
94
+ <div className="flex items-center justify-between gap-3">
95
+ <h2 className="text-[13px] font-semibold text-ink">Streamable HTTP endpoint</h2>
96
+ <CopyButton value={endpoint} label="Copy the endpoint URL" />
97
+ </div>
98
+ <code className="mt-3 block rounded-md border border-border bg-surface px-3 py-2.5 font-mono text-[13px] break-all text-ink">
99
+ {endpoint}
100
+ </code>
101
+ </section>
102
+
103
+ <section className="rounded-md border border-border p-5">
104
+ <div className="flex items-center justify-between gap-3">
105
+ <h2 className="text-[13px] font-semibold text-ink">Claude / Cursor config</h2>
106
+ <CopyButton value={config} label="Copy the client config" />
107
+ </div>
108
+ <p className="mt-1 text-[12px] text-ink-muted">
109
+ Paste into your MCP client config, and replace the bearer token with a workspace key from{' '}
110
+ <Link to="/admin/workspace" className="text-accent hover:underline">
111
+ workspace settings
112
+ </Link>
113
+ .
114
+ </p>
115
+ <pre className="bg-code-bg text-code-fg mt-3 overflow-x-auto rounded-md border border-border p-4 font-mono text-[12px] leading-relaxed">
116
+ {config}
117
+ </pre>
118
+ </section>
119
+
120
+ <RegisteredAgents />
121
+ <RecentRuns />
122
+ <ToolCatalog />
123
+ </div>
124
+ )
125
+ }
126
+
127
+ /**
128
+ * Bring-your-own agents that Run dispatches to. Any member reads this list —
129
+ * the Run dialog on every record page is built from it — and the API holds
130
+ * writes to admins, so a member's Add answers `403` and the form shows it.
131
+ */
132
+ function RegisteredAgents(): React.JSX.Element {
133
+ const { records, isLoading, error } = useAgents()
134
+ const createAgent = useCreateAgent()
135
+ const deleteAgent = useDeleteAgent()
136
+ const [adding, setAdding] = useState(false)
137
+ const [name, setName] = useState('')
138
+ const [endpoint, setEndpoint] = useState('')
139
+ const [authHeader, setAuthHeader] = useState('')
140
+
141
+ function submit(event: React.FormEvent): void {
142
+ event.preventDefault()
143
+ createAgent
144
+ .runAsync({
145
+ name,
146
+ endpoint,
147
+ ...(authHeader.trim().length === 0 ? {} : { authHeader }),
148
+ })
149
+ .then(() => {
150
+ setAdding(false)
151
+ setName('')
152
+ setEndpoint('')
153
+ setAuthHeader('')
154
+ })
155
+ .catch(() => {
156
+ // The form stays open and renders `createAgent.error`.
157
+ })
158
+ }
159
+
160
+ return (
161
+ <section className="rounded-md border border-border p-5">
162
+ <div className="flex flex-wrap items-center justify-between gap-3">
163
+ <h2 className="text-[13px] font-semibold text-ink">Registered agents</h2>
164
+ <button
165
+ type="button"
166
+ onClick={() => {
167
+ setAdding((open) => !open)
168
+ }}
169
+ className="rounded-md border border-border px-2.5 py-1 text-[12px] font-medium text-ink transition hover:border-accent hover:text-accent"
170
+ >
171
+ {adding ? 'Cancel' : 'Add agent'}
172
+ </button>
173
+ </div>
174
+ <p className="mt-1 max-w-2xl text-[12px] text-ink-muted">
175
+ Run on any record dispatches the resolved task to one of these endpoints as JSON. The agent
176
+ still reads and writes through the API above. The auth header is stored encrypted and never
177
+ shown again.
178
+ </p>
179
+
180
+ {adding && (
181
+ <form onSubmit={submit} className="mt-4 space-y-2 rounded-md border border-border p-3">
182
+ <label className="block text-[12px] text-ink-muted">
183
+ Name
184
+ <input
185
+ value={name}
186
+ onChange={(event) => {
187
+ setName(event.target.value)
188
+ }}
189
+ required
190
+ placeholder="Local Claude"
191
+ className="mt-1 w-full rounded-md border border-border bg-surface px-2.5 py-1.5 text-[12px] text-ink outline-none focus:border-accent"
192
+ />
193
+ </label>
194
+ <label className="block text-[12px] text-ink-muted">
195
+ Endpoint URL
196
+ <input
197
+ value={endpoint}
198
+ onChange={(event) => {
199
+ setEndpoint(event.target.value)
200
+ }}
201
+ required
202
+ placeholder="https://agents.example.com/kelpie/run"
203
+ className="mt-1 w-full rounded-md border border-border bg-surface px-2.5 py-1.5 font-mono text-[12px] text-ink outline-none focus:border-accent"
204
+ />
205
+ </label>
206
+ <label className="block text-[12px] text-ink-muted">
207
+ Auth header (optional, sent as Authorization)
208
+ <input
209
+ value={authHeader}
210
+ onChange={(event) => {
211
+ setAuthHeader(event.target.value)
212
+ }}
213
+ placeholder="Bearer …"
214
+ className="mt-1 w-full rounded-md border border-border bg-surface px-2.5 py-1.5 font-mono text-[12px] text-ink outline-none focus:border-accent"
215
+ />
216
+ </label>
217
+ <div className="flex items-center gap-3">
218
+ <button
219
+ type="submit"
220
+ disabled={createAgent.isPending}
221
+ className="rounded-md bg-accent px-3 py-1.5 text-[12px] font-semibold text-accent-fg hover:bg-accent-hover disabled:opacity-50"
222
+ >
223
+ Register agent
224
+ </button>
225
+ {createAgent.error !== null && (
226
+ <span className="text-[12px] text-danger">{createAgent.error.message}</span>
227
+ )}
228
+ </div>
229
+ </form>
230
+ )}
231
+
232
+ {error !== null && <div className="mt-4">{<ErrorPanel error={error} />}</div>}
233
+ {isLoading && <LoadingPanel label="Loading agents…" />}
234
+
235
+ {!isLoading && error === null && records.length === 0 && (
236
+ <p className="mt-4 text-[12px] text-ink-faint">
237
+ No agents registered. Copy prompt works without one; Run needs somewhere to send the task.
238
+ </p>
239
+ )}
240
+
241
+ {records.length > 0 && (
242
+ <ul className="mt-4 divide-y divide-border rounded-md border border-border">
243
+ {records.map((agent) => (
244
+ <li key={agent.id} className="flex flex-wrap items-center justify-between gap-3 px-3 py-2.5">
245
+ <div className="min-w-0">
246
+ <div className="text-[13px] font-medium text-ink">{agent.name}</div>
247
+ <code className="font-mono text-[11px] break-all text-ink-muted">
248
+ {agent.endpoint}
249
+ </code>
250
+ </div>
251
+ <div className="flex shrink-0 items-center gap-3 text-[11px] text-ink-faint">
252
+ {agent.hasAuthHeader && <span>Auth header set</span>}
253
+ <span>
254
+ {agent.lastRunAt === null
255
+ ? 'Never run'
256
+ : `Last run ${formatRelativeTime(agent.lastRunAt)}`}
257
+ </span>
258
+ <button
259
+ type="button"
260
+ onClick={() => {
261
+ deleteAgent.run(agent.id)
262
+ }}
263
+ className="font-medium text-danger hover:underline"
264
+ >
265
+ Remove
266
+ </button>
267
+ </div>
268
+ </li>
269
+ ))}
270
+ </ul>
271
+ )}
272
+ {deleteAgent.error !== null && (
273
+ <p className="mt-2 text-[12px] text-danger">{deleteAgent.error.message}</p>
274
+ )}
275
+ </section>
276
+ )
277
+ }
278
+
279
+ const RUN_LOG_ROWS = 8
280
+
281
+ /** The newest dispatches, labelled from the catalog the tasks came from. */
282
+ function RecentRuns(): React.JSX.Element {
283
+ const { records: runs, isLoading, error } = useAgentRuns()
284
+ const catalog = useAllAgentTasks()
285
+ const agents = useAgents()
286
+
287
+ const taskLabels = useMemo(
288
+ () => new Map(catalog.records.map((task) => [task.id, task.label])),
289
+ [catalog.records],
290
+ )
291
+ const agentNames = useMemo(
292
+ () => new Map(agents.records.map((agent) => [agent.id, agent.name])),
293
+ [agents.records],
294
+ )
295
+
296
+ function describeRun(run: AgentRun): string {
297
+ const agentName = agentNames.get(run.agentId) ?? 'a removed agent'
298
+
299
+ return `${run.targetType}/${run.targetId} → ${agentName}`
300
+ }
301
+
302
+ return (
303
+ <section className="rounded-md border border-border p-5">
304
+ <h2 className="text-[13px] font-semibold text-ink">Recent runs</h2>
305
+ <p className="mt-1 text-[12px] text-ink-muted">
306
+ Each run records the dispatch: queued, then succeeded or failed with the reason. What the
307
+ agent did afterwards is on the records themselves.
308
+ </p>
309
+
310
+ {error !== null && <div className="mt-4">{<ErrorPanel error={error} />}</div>}
311
+ {isLoading && <LoadingPanel label="Loading runs…" />}
312
+
313
+ {!isLoading && error === null && runs.length === 0 && (
314
+ <p className="mt-4 text-[12px] text-ink-faint">
315
+ No runs yet. Run an agent task from any record page.
316
+ </p>
317
+ )}
318
+
319
+ {runs.length > 0 && (
320
+ <ul className="mt-4 divide-y divide-border rounded-md border border-border">
321
+ {runs.slice(0, RUN_LOG_ROWS).map((run) => (
322
+ <li key={run.id} className="flex flex-wrap items-center justify-between gap-3 px-3 py-2.5">
323
+ <div className="min-w-0">
324
+ <div className="text-[13px] font-medium text-ink">
325
+ {taskLabels.get(run.taskId) ?? run.taskId}
326
+ </div>
327
+ <div className="text-[11px] text-ink-muted">{describeRun(run)}</div>
328
+ {run.failureReason !== null && (
329
+ <div className="text-[11px] text-danger">{run.failureReason}</div>
330
+ )}
331
+ </div>
332
+ <div className="flex shrink-0 items-center gap-3 text-[11px]">
333
+ <span className={run.status === 'failed' ? 'font-medium text-danger' : 'text-ink-muted'}>
334
+ {AGENT_RUN_STATUS_LABELS[run.status]}
335
+ </span>
336
+ <span className="text-ink-faint">{formatRelativeTime(run.updatedAt)}</span>
337
+ </div>
338
+ </li>
339
+ ))}
340
+ </ul>
341
+ )}
342
+ </section>
343
+ )
344
+ }
345
+
346
+ /**
347
+ * What this deployment actually registered, read from the endpoint's own registry.
348
+ *
349
+ * A flat list rather than a grouped one. Tool names are resource-then-verb, so
350
+ * sorting by name already puts a resource's five together, and every rule for
351
+ * grouping them turned out to be a lexical guess that read `webhooks_rotate_secret`
352
+ * as a resource called `webhooks_rotate`.
353
+ */
354
+ function ToolCatalog(): React.JSX.Element {
355
+ const { records, isLoading, error } = useMcpTools()
356
+ const [term, setTerm] = useState('')
357
+ const shown = useMemo(
358
+ () => [...records].filter((tool) => matches(tool, term)).sort((left, right) => left.name.localeCompare(right.name)),
359
+ [records, term],
360
+ )
361
+
362
+ return (
363
+ <section className="rounded-md border border-border p-5">
364
+ <div className="flex flex-wrap items-center justify-between gap-3">
365
+ <h2 className="text-[13px] font-semibold text-ink">Tools</h2>
366
+ {records.length > 0 && (
367
+ <input
368
+ type="search"
369
+ value={term}
370
+ onChange={(event) => {
371
+ setTerm(event.target.value)
372
+ }}
373
+ placeholder="Filter tools"
374
+ aria-label="Filter tools"
375
+ className="rounded-md border border-border bg-surface px-2.5 py-1 text-[12px] text-ink outline-none focus:border-border-strong"
376
+ />
377
+ )}
378
+ </div>
379
+ <p className="mt-1 max-w-2xl text-[12px] text-ink-muted">
380
+ {isLoading
381
+ ? 'Reading what this deployment exposes.'
382
+ : `${String(records.length)} tools, mirroring the REST API one for one. Arguments and results are snake_case JSON.`}
383
+ </p>
384
+
385
+ {error !== null && <div className="mt-4">{<ErrorPanel error={error} />}</div>}
386
+ {isLoading && <LoadingPanel label="Loading tools…" />}
387
+
388
+ {records.length > 0 && shown.length === 0 && (
389
+ <p className="mt-4 text-[12px] text-ink-faint">No tool matches “{term}”.</p>
390
+ )}
391
+
392
+ {shown.length > 0 && (
393
+ <ul className="mt-4 divide-y divide-border rounded-md border border-border">
394
+ {shown.map((tool) => (
395
+ <li key={tool.name} className="px-3 py-2.5">
396
+ <code className="font-mono text-[12px] text-accent">{tool.name}</code>
397
+ <p className="mt-0.5 text-[12px] leading-relaxed text-ink-muted">{tool.description}</p>
398
+ </li>
399
+ ))}
400
+ </ul>
401
+ )}
402
+ </section>
403
+ )
404
+ }
@@ -0,0 +1,113 @@
1
+ import type { ModuleSetting } from '@kelpie/schemas'
2
+
3
+ import { useSetModuleEnabled, useModuleSettings } from '../../api/resources/moduleSettings.ts'
4
+ import { useSession } from '../../api/resources/session.ts'
5
+ import { PageHeader } from '../../components/PageHeader.tsx'
6
+ import { ErrorPanel, LoadingPanel } from '../../components/QueryState.tsx'
7
+
8
+ /**
9
+ * Turns optional modules on or off for this workspace.
10
+ *
11
+ * A module a deploy-time config file locks (`modules.md`) shows as disabled
12
+ * with a note rather than being left out of the list: a workspace admin should
13
+ * see that the choice exists and is not theirs, not wonder why a module they
14
+ * expect is simply missing from the page.
15
+ *
16
+ * Known ids get a friendlier label; an id this page has never heard of still
17
+ * renders, title-cased, because the module catalog is meant to grow without
18
+ * this file changing every time it does.
19
+ */
20
+ const MODULE_LABELS: Readonly<Record<string, string>> = {
21
+ positions: 'Positions',
22
+ deals: 'Deals',
23
+ opportunities: 'Opportunities',
24
+ partnerships: 'Partnerships',
25
+ raises: 'Fundraising',
26
+ hiring: 'Hiring',
27
+ handbook: 'Handbook',
28
+ forms: 'Forms',
29
+ 'import-export': 'Import / export',
30
+ 'agent-tasks': 'Agent tasks',
31
+ webhooks: 'Webhooks',
32
+ }
33
+
34
+ function labelFor(moduleId: string): string {
35
+ return (
36
+ MODULE_LABELS[moduleId] ??
37
+ moduleId
38
+ .split('-')
39
+ .map((word) => (word.length === 0 ? word : word[0]?.toUpperCase() + word.slice(1)))
40
+ .join(' ')
41
+ )
42
+ }
43
+
44
+ export function ModulesPage(): React.JSX.Element {
45
+ const { session } = useSession()
46
+ const { settings, isLoading, error } = useModuleSettings()
47
+ const isAdmin = session?.role === 'owner' || session?.role === 'admin'
48
+
49
+ return (
50
+ <div className="animate-slide-in mx-auto max-w-4xl space-y-6">
51
+ <PageHeader
52
+ title="Modules"
53
+ description="Turn optional parts of Kelpie on or off for this workspace."
54
+ />
55
+
56
+ {error !== null && <ErrorPanel error={error} />}
57
+
58
+ {isLoading ? (
59
+ <LoadingPanel label="Loading modules…" />
60
+ ) : settings.length === 0 ? (
61
+ <p className="text-[13px] text-ink-muted">Nothing here yet.</p>
62
+ ) : (
63
+ <ul className="divide-y divide-border rounded-md border border-border">
64
+ {settings
65
+ .toSorted((a, b) => labelFor(a.moduleId).localeCompare(labelFor(b.moduleId)))
66
+ .map((setting) => (
67
+ <ModuleRow key={setting.moduleId} setting={setting} canEdit={isAdmin} />
68
+ ))}
69
+ </ul>
70
+ )}
71
+ </div>
72
+ )
73
+ }
74
+
75
+ function ModuleRow({
76
+ setting,
77
+ canEdit,
78
+ }: {
79
+ readonly setting: ModuleSetting
80
+ readonly canEdit: boolean
81
+ }): React.JSX.Element {
82
+ const setEnabled = useSetModuleEnabled()
83
+ const disabled = !canEdit || setting.locked || setEnabled.isPending
84
+
85
+ return (
86
+ <li className="flex items-start justify-between gap-4 px-4 py-3">
87
+ <div>
88
+ <label className="flex cursor-pointer items-center gap-2.5">
89
+ <input
90
+ type="checkbox"
91
+ checked={setting.enabled}
92
+ disabled={disabled}
93
+ onChange={(event) => {
94
+ setEnabled.run({ moduleId: setting.moduleId, enabled: event.target.checked })
95
+ }}
96
+ className="disabled:opacity-50"
97
+ />
98
+ <span className="text-[13px] font-medium text-ink">{labelFor(setting.moduleId)}</span>
99
+ </label>
100
+ {setting.locked && (
101
+ <p className="mt-1 pl-6 text-[11px] text-ink-faint">
102
+ Locked by this deployment's configuration.
103
+ </p>
104
+ )}
105
+ {setEnabled.error !== null && (
106
+ <div className="mt-2 pl-6">
107
+ <ErrorPanel error={setEnabled.error} />
108
+ </div>
109
+ )}
110
+ </div>
111
+ </li>
112
+ )
113
+ }