@bevel-software/platform-core-backend 0.25.2 → 0.27.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 (733) hide show
  1. package/agent-guide/access-control.md +251 -0
  2. package/agent-guide/conventions.md +35 -0
  3. package/agent-guide/directory-structure.md +145 -0
  4. package/agent-guide/finding-things.md +7 -0
  5. package/agent-guide/html-views.md +83 -0
  6. package/agent-guide/introduction.md +27 -0
  7. package/agent-guide/new-knowledge-base.md +24 -0
  8. package/agent-guide/skills.md +47 -0
  9. package/agent-guide/tool-manuals.md +227 -0
  10. package/agent-guide/where-a-new-file-goes.md +36 -0
  11. package/dist/assets.d.ts +26 -0
  12. package/dist/assets.d.ts.map +1 -1
  13. package/dist/assets.js +35 -2
  14. package/dist/assets.js.map +1 -1
  15. package/dist/core/catalog-revision.d.ts +19 -1
  16. package/dist/core/catalog-revision.d.ts.map +1 -1
  17. package/dist/core/catalog-revision.js +14 -3
  18. package/dist/core/catalog-revision.js.map +1 -1
  19. package/dist/core/core-ports.d.ts +11 -0
  20. package/dist/core/core-ports.d.ts.map +1 -1
  21. package/dist/core/core-ports.js.map +1 -1
  22. package/dist/core/create-core-server.d.ts +5 -0
  23. package/dist/core/create-core-server.d.ts.map +1 -1
  24. package/dist/core/create-core-server.js +65 -3
  25. package/dist/core/create-core-server.js.map +1 -1
  26. package/dist/core/create-core-services.d.ts +35 -0
  27. package/dist/core/create-core-services.d.ts.map +1 -1
  28. package/dist/core/create-core-services.js +114 -12
  29. package/dist/core/create-core-services.js.map +1 -1
  30. package/dist/core/lifecycle.d.ts +16 -1
  31. package/dist/core/lifecycle.d.ts.map +1 -1
  32. package/dist/core/lifecycle.js +18 -1
  33. package/dist/core/lifecycle.js.map +1 -1
  34. package/dist/core-config.d.ts +21 -0
  35. package/dist/core-config.d.ts.map +1 -1
  36. package/dist/core-config.js +22 -1
  37. package/dist/core-config.js.map +1 -1
  38. package/dist/index.d.ts +1 -1
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +2 -2
  41. package/dist/index.js.map +1 -1
  42. package/dist/modules/access/access-control.interface.d.ts +17 -0
  43. package/dist/modules/access/access-control.interface.d.ts.map +1 -1
  44. package/dist/modules/access/access-control.service.d.ts +2 -0
  45. package/dist/modules/access/access-control.service.d.ts.map +1 -1
  46. package/dist/modules/access/access-control.service.js +27 -0
  47. package/dist/modules/access/access-control.service.js.map +1 -1
  48. package/dist/modules/access/directory-sync-bot.js +1 -1
  49. package/dist/modules/access/directory-sync-bot.js.map +1 -1
  50. package/dist/modules/agent-guide/agent-guide.d.ts +145 -0
  51. package/dist/modules/agent-guide/agent-guide.d.ts.map +1 -0
  52. package/dist/modules/agent-guide/agent-guide.js +199 -0
  53. package/dist/modules/agent-guide/agent-guide.js.map +1 -0
  54. package/dist/modules/agent-guide/agent-guide.tools.d.ts +24 -0
  55. package/dist/modules/agent-guide/agent-guide.tools.d.ts.map +1 -0
  56. package/dist/modules/agent-guide/agent-guide.tools.js +100 -0
  57. package/dist/modules/agent-guide/agent-guide.tools.js.map +1 -0
  58. package/dist/modules/agent-guide/index.d.ts +4 -0
  59. package/dist/modules/agent-guide/index.d.ts.map +1 -0
  60. package/dist/modules/agent-guide/index.js +4 -0
  61. package/dist/modules/agent-guide/index.js.map +1 -0
  62. package/dist/modules/agent-instructions/agent-instructions.routes.d.ts +3 -2
  63. package/dist/modules/agent-instructions/agent-instructions.routes.d.ts.map +1 -1
  64. package/dist/modules/agent-instructions/agent-instructions.routes.js +3 -2
  65. package/dist/modules/agent-instructions/agent-instructions.routes.js.map +1 -1
  66. package/dist/modules/agent-instructions/compose.d.ts +14 -6
  67. package/dist/modules/agent-instructions/compose.d.ts.map +1 -1
  68. package/dist/modules/agent-instructions/compose.js +28 -8
  69. package/dist/modules/agent-instructions/compose.js.map +1 -1
  70. package/dist/modules/agent-instructions/index.d.ts +1 -1
  71. package/dist/modules/agent-instructions/index.d.ts.map +1 -1
  72. package/dist/modules/agent-instructions/index.js +1 -1
  73. package/dist/modules/agent-instructions/index.js.map +1 -1
  74. package/dist/modules/agent-instructions/shared-file-rules.d.ts +10 -50
  75. package/dist/modules/agent-instructions/shared-file-rules.d.ts.map +1 -1
  76. package/dist/modules/agent-instructions/shared-file-rules.js +51 -104
  77. package/dist/modules/agent-instructions/shared-file-rules.js.map +1 -1
  78. package/dist/modules/audit/agent-audit.service.d.ts +21 -2
  79. package/dist/modules/audit/agent-audit.service.d.ts.map +1 -1
  80. package/dist/modules/audit/agent-audit.service.js +43 -2
  81. package/dist/modules/audit/agent-audit.service.js.map +1 -1
  82. package/dist/modules/audit/agent-connection.routes.d.ts +34 -0
  83. package/dist/modules/audit/agent-connection.routes.d.ts.map +1 -0
  84. package/dist/modules/audit/agent-connection.routes.js +38 -0
  85. package/dist/modules/audit/agent-connection.routes.js.map +1 -0
  86. package/dist/modules/audit/audit.contract.d.ts +24 -0
  87. package/dist/modules/audit/audit.contract.d.ts.map +1 -1
  88. package/dist/modules/audit/audit.contract.js.map +1 -1
  89. package/dist/modules/audit/index.d.ts +1 -0
  90. package/dist/modules/audit/index.d.ts.map +1 -1
  91. package/dist/modules/audit/index.js +1 -0
  92. package/dist/modules/audit/index.js.map +1 -1
  93. package/dist/modules/auth/account.routes.d.ts.map +1 -1
  94. package/dist/modules/auth/account.routes.js +10 -3
  95. package/dist/modules/auth/account.routes.js.map +1 -1
  96. package/dist/modules/auth/auth.middleware.d.ts +7 -0
  97. package/dist/modules/auth/auth.middleware.d.ts.map +1 -1
  98. package/dist/modules/auth/auth.middleware.js +1 -1
  99. package/dist/modules/auth/auth.middleware.js.map +1 -1
  100. package/dist/modules/code-mode/code-mode.tool.d.ts.map +1 -1
  101. package/dist/modules/code-mode/code-mode.tool.js +11 -3
  102. package/dist/modules/code-mode/code-mode.tool.js.map +1 -1
  103. package/dist/modules/database/core-schema.d.ts +96 -0
  104. package/dist/modules/database/core-schema.d.ts.map +1 -1
  105. package/dist/modules/database/core-schema.js +32 -3
  106. package/dist/modules/database/core-schema.js.map +1 -1
  107. package/dist/modules/embed/account-link.service.d.ts +42 -0
  108. package/dist/modules/embed/account-link.service.d.ts.map +1 -0
  109. package/dist/modules/embed/account-link.service.js +50 -0
  110. package/dist/modules/embed/account-link.service.js.map +1 -0
  111. package/dist/modules/embed/embed-link.d.ts +58 -0
  112. package/dist/modules/embed/embed-link.d.ts.map +1 -0
  113. package/dist/modules/embed/embed-link.js +160 -0
  114. package/dist/modules/embed/embed-link.js.map +1 -0
  115. package/dist/modules/embed/embed.errors.d.ts +30 -0
  116. package/dist/modules/embed/embed.errors.d.ts.map +1 -0
  117. package/dist/modules/embed/embed.errors.js +42 -0
  118. package/dist/modules/embed/embed.errors.js.map +1 -0
  119. package/dist/modules/embed/embed.interface.d.ts +204 -0
  120. package/dist/modules/embed/embed.interface.d.ts.map +1 -0
  121. package/dist/modules/embed/embed.interface.js +2 -0
  122. package/dist/modules/embed/embed.interface.js.map +1 -0
  123. package/dist/modules/embed/embed.routes.d.ts +59 -0
  124. package/dist/modules/embed/embed.routes.d.ts.map +1 -0
  125. package/dist/modules/embed/embed.routes.js +343 -0
  126. package/dist/modules/embed/embed.routes.js.map +1 -0
  127. package/dist/modules/embed/embed.service.d.ts +169 -0
  128. package/dist/modules/embed/embed.service.d.ts.map +1 -0
  129. package/dist/modules/embed/embed.service.js +627 -0
  130. package/dist/modules/embed/embed.service.js.map +1 -0
  131. package/dist/modules/embed/embed.tools.d.ts +51 -0
  132. package/dist/modules/embed/embed.tools.d.ts.map +1 -0
  133. package/dist/modules/embed/embed.tools.js +170 -0
  134. package/dist/modules/embed/embed.tools.js.map +1 -0
  135. package/dist/modules/embed/mcp-app.d.ts +64 -0
  136. package/dist/modules/embed/mcp-app.d.ts.map +1 -0
  137. package/dist/modules/embed/mcp-app.js +147 -0
  138. package/dist/modules/embed/mcp-app.js.map +1 -0
  139. package/dist/modules/embed/mcp-app.routes.d.ts +21 -0
  140. package/dist/modules/embed/mcp-app.routes.d.ts.map +1 -0
  141. package/dist/modules/embed/mcp-app.routes.js +36 -0
  142. package/dist/modules/embed/mcp-app.routes.js.map +1 -0
  143. package/dist/modules/github-app/github-app.connection.d.ts +15 -0
  144. package/dist/modules/github-app/github-app.connection.d.ts.map +1 -1
  145. package/dist/modules/github-app/github-app.connection.js +34 -3
  146. package/dist/modules/github-app/github-app.connection.js.map +1 -1
  147. package/dist/modules/kb-fs/locking-filesystem.d.ts +65 -0
  148. package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -1
  149. package/dist/modules/kb-fs/locking-filesystem.js +300 -0
  150. package/dist/modules/kb-fs/locking-filesystem.js.map +1 -1
  151. package/dist/modules/kb-sync/kb-sync.interface.d.ts +5 -0
  152. package/dist/modules/kb-sync/kb-sync.interface.d.ts.map +1 -1
  153. package/dist/modules/kb-sync/kb-sync.service.d.ts.map +1 -1
  154. package/dist/modules/kb-sync/kb-sync.service.js +6 -0
  155. package/dist/modules/kb-sync/kb-sync.service.js.map +1 -1
  156. package/dist/modules/mcp/mcp-auth.middleware.d.ts.map +1 -1
  157. package/dist/modules/mcp/mcp-auth.middleware.js +2 -1
  158. package/dist/modules/mcp/mcp-auth.middleware.js.map +1 -1
  159. package/dist/modules/mcp/mcp.service.d.ts +57 -3
  160. package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
  161. package/dist/modules/mcp/mcp.service.js +177 -24
  162. package/dist/modules/mcp/mcp.service.js.map +1 -1
  163. package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts +24 -0
  164. package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts.map +1 -1
  165. package/dist/modules/mcp/oauth/bevel-oauth-provider.js +32 -4
  166. package/dist/modules/mcp/oauth/bevel-oauth-provider.js.map +1 -1
  167. package/dist/modules/mcp/tool-schema-guard.d.ts +105 -0
  168. package/dist/modules/mcp/tool-schema-guard.d.ts.map +1 -0
  169. package/dist/modules/mcp/tool-schema-guard.js +171 -0
  170. package/dist/modules/mcp/tool-schema-guard.js.map +1 -0
  171. package/dist/modules/onboarding/onboarding.contract.d.ts +80 -0
  172. package/dist/modules/onboarding/onboarding.contract.d.ts.map +1 -0
  173. package/dist/modules/onboarding/onboarding.contract.js +7 -0
  174. package/dist/modules/onboarding/onboarding.contract.js.map +1 -0
  175. package/dist/modules/onboarding/onboarding.routes.d.ts +18 -0
  176. package/dist/modules/onboarding/onboarding.routes.d.ts.map +1 -0
  177. package/dist/modules/onboarding/onboarding.routes.js +81 -0
  178. package/dist/modules/onboarding/onboarding.routes.js.map +1 -0
  179. package/dist/modules/onboarding/starter-pack.service.d.ts +213 -0
  180. package/dist/modules/onboarding/starter-pack.service.d.ts.map +1 -0
  181. package/dist/modules/onboarding/starter-pack.service.js +492 -0
  182. package/dist/modules/onboarding/starter-pack.service.js.map +1 -0
  183. package/dist/modules/onboarding/starter-packs.d.ts +78 -0
  184. package/dist/modules/onboarding/starter-packs.d.ts.map +1 -0
  185. package/dist/modules/onboarding/starter-packs.js +156 -0
  186. package/dist/modules/onboarding/starter-packs.js.map +1 -0
  187. package/dist/modules/plugins/index.d.ts +1 -1
  188. package/dist/modules/plugins/index.d.ts.map +1 -1
  189. package/dist/modules/plugins/index.js +1 -1
  190. package/dist/modules/plugins/index.js.map +1 -1
  191. package/dist/modules/plugins/plugin-provision.service.d.ts +19 -0
  192. package/dist/modules/plugins/plugin-provision.service.d.ts.map +1 -1
  193. package/dist/modules/plugins/plugin-provision.service.js +18 -1
  194. package/dist/modules/plugins/plugin-provision.service.js.map +1 -1
  195. package/dist/modules/plugins/plugins.routes.d.ts +0 -36
  196. package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
  197. package/dist/modules/plugins/plugins.routes.js +31 -0
  198. package/dist/modules/plugins/plugins.routes.js.map +1 -1
  199. package/dist/modules/plugins/plugins.tools.d.ts +36 -2
  200. package/dist/modules/plugins/plugins.tools.d.ts.map +1 -1
  201. package/dist/modules/plugins/plugins.tools.js +71 -14
  202. package/dist/modules/plugins/plugins.tools.js.map +1 -1
  203. package/dist/modules/settings/deployment-settings.service.d.ts +34 -7
  204. package/dist/modules/settings/deployment-settings.service.d.ts.map +1 -1
  205. package/dist/modules/settings/deployment-settings.service.js +148 -54
  206. package/dist/modules/settings/deployment-settings.service.js.map +1 -1
  207. package/dist/modules/settings/repository-source.d.ts +1 -0
  208. package/dist/modules/settings/repository-source.d.ts.map +1 -1
  209. package/dist/modules/settings/repository-source.js +3 -3
  210. package/dist/modules/settings/repository-source.js.map +1 -1
  211. package/dist/modules/settings/setup.routes.d.ts.map +1 -1
  212. package/dist/modules/settings/setup.routes.js +3 -6
  213. package/dist/modules/settings/setup.routes.js.map +1 -1
  214. package/dist/modules/skills/skills.tools.d.ts.map +1 -1
  215. package/dist/modules/skills/skills.tools.js +103 -43
  216. package/dist/modules/skills/skills.tools.js.map +1 -1
  217. package/dist/modules/tool-auth/connection-key-rejection.d.ts +10 -1
  218. package/dist/modules/tool-auth/connection-key-rejection.d.ts.map +1 -1
  219. package/dist/modules/tool-auth/connection-key-rejection.js +11 -3
  220. package/dist/modules/tool-auth/connection-key-rejection.js.map +1 -1
  221. package/dist/modules/tool-auth/external-api-key.interface.d.ts +8 -0
  222. package/dist/modules/tool-auth/external-api-key.interface.d.ts.map +1 -1
  223. package/dist/modules/tool-auth/external-api-key.service.d.ts +24 -2
  224. package/dist/modules/tool-auth/external-api-key.service.d.ts.map +1 -1
  225. package/dist/modules/tool-auth/external-api-key.service.js +59 -2
  226. package/dist/modules/tool-auth/external-api-key.service.js.map +1 -1
  227. package/dist/modules/tool-auth/tool-auth.middleware.d.ts.map +1 -1
  228. package/dist/modules/tool-auth/tool-auth.middleware.js +9 -4
  229. package/dist/modules/tool-auth/tool-auth.middleware.js.map +1 -1
  230. package/dist/modules/tool-helpers/index.d.ts +28 -1
  231. package/dist/modules/tool-helpers/index.d.ts.map +1 -1
  232. package/dist/modules/tool-helpers/index.js +28 -1
  233. package/dist/modules/tool-helpers/index.js.map +1 -1
  234. package/dist/modules/tool-helpers/route-argument-check.d.ts +10 -0
  235. package/dist/modules/tool-helpers/route-argument-check.d.ts.map +1 -0
  236. package/dist/modules/tool-helpers/route-argument-check.js +132 -0
  237. package/dist/modules/tool-helpers/route-argument-check.js.map +1 -0
  238. package/dist/modules/tool-helpers/route-tool-schemas.d.ts +89 -0
  239. package/dist/modules/tool-helpers/route-tool-schemas.d.ts.map +1 -0
  240. package/dist/modules/tool-helpers/route-tool-schemas.js +113 -0
  241. package/dist/modules/tool-helpers/route-tool-schemas.js.map +1 -0
  242. package/dist/modules/tool-helpers/tool-def.d.ts +71 -0
  243. package/dist/modules/tool-helpers/tool-def.d.ts.map +1 -1
  244. package/dist/modules/tool-helpers/tool-def.js +70 -6
  245. package/dist/modules/tool-helpers/tool-def.js.map +1 -1
  246. package/dist/modules/tool-helpers/tool-handler.d.ts +46 -6
  247. package/dist/modules/tool-helpers/tool-handler.d.ts.map +1 -1
  248. package/dist/modules/tool-helpers/tool-handler.js +157 -8
  249. package/dist/modules/tool-helpers/tool-handler.js.map +1 -1
  250. package/dist/modules/tool-helpers/tool.contract.d.ts +9 -0
  251. package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -1
  252. package/dist/modules/tool-helpers/tool.contract.js.map +1 -1
  253. package/dist/modules/tool-manuals/tool-manuals.contract.d.ts +23 -4
  254. package/dist/modules/tool-manuals/tool-manuals.contract.d.ts.map +1 -1
  255. package/dist/modules/tool-manuals/tool-manuals.contract.js.map +1 -1
  256. package/dist/modules/tool-manuals/tool-manuals.service.d.ts +4 -0
  257. package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
  258. package/dist/modules/tool-manuals/tool-manuals.service.js +14 -0
  259. package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -1
  260. package/dist/modules/tool-manuals/tool-manuals.tools.d.ts +7 -0
  261. package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
  262. package/dist/modules/tool-manuals/tool-manuals.tools.js +77 -38
  263. package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
  264. package/dist/modules/tool-registry/description-length.d.ts +20 -16
  265. package/dist/modules/tool-registry/description-length.d.ts.map +1 -1
  266. package/dist/modules/tool-registry/description-length.js +50 -30
  267. package/dist/modules/tool-registry/description-length.js.map +1 -1
  268. package/dist/modules/tool-registry/guide-first.d.ts +27 -0
  269. package/dist/modules/tool-registry/guide-first.d.ts.map +1 -0
  270. package/dist/modules/tool-registry/guide-first.js +40 -0
  271. package/dist/modules/tool-registry/guide-first.js.map +1 -0
  272. package/dist/modules/tool-registry/tool-registry.d.ts +6 -0
  273. package/dist/modules/tool-registry/tool-registry.d.ts.map +1 -1
  274. package/dist/modules/tool-registry/tool-registry.js +9 -2
  275. package/dist/modules/tool-registry/tool-registry.js.map +1 -1
  276. package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts +449 -0
  277. package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts.map +1 -0
  278. package/dist/modules/workflow/agent-tools/change-request-read-shape.js +481 -0
  279. package/dist/modules/workflow/agent-tools/change-request-read-shape.js.map +1 -0
  280. package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts +126 -0
  281. package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts.map +1 -0
  282. package/dist/modules/workflow/agent-tools/change-request-read.tools.js +611 -0
  283. package/dist/modules/workflow/agent-tools/change-request-read.tools.js.map +1 -0
  284. package/dist/modules/workflow/agent-tools/change-request-summary.d.ts +12 -1
  285. package/dist/modules/workflow/agent-tools/change-request-summary.d.ts.map +1 -1
  286. package/dist/modules/workflow/agent-tools/change-request-summary.js +5 -1
  287. package/dist/modules/workflow/agent-tools/change-request-summary.js.map +1 -1
  288. package/dist/modules/workflow/agent-tools/workflow.tools.d.ts +8 -1
  289. package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +1 -1
  290. package/dist/modules/workflow/agent-tools/workflow.tools.js +133 -37
  291. package/dist/modules/workflow/agent-tools/workflow.tools.js.map +1 -1
  292. package/dist/modules/workflow/file-lock.service.d.ts +29 -5
  293. package/dist/modules/workflow/file-lock.service.d.ts.map +1 -1
  294. package/dist/modules/workflow/file-lock.service.js +62 -5
  295. package/dist/modules/workflow/file-lock.service.js.map +1 -1
  296. package/dist/modules/workflow/git/git.service.d.ts +282 -14
  297. package/dist/modules/workflow/git/git.service.d.ts.map +1 -1
  298. package/dist/modules/workflow/git/git.service.js +627 -126
  299. package/dist/modules/workflow/git/git.service.js.map +1 -1
  300. package/dist/modules/workflow/git/merge-commit.d.ts +73 -0
  301. package/dist/modules/workflow/git/merge-commit.d.ts.map +1 -0
  302. package/dist/modules/workflow/git/merge-commit.js +89 -0
  303. package/dist/modules/workflow/git/merge-commit.js.map +1 -0
  304. package/dist/modules/workflow/git/node-git-runner.d.ts +15 -0
  305. package/dist/modules/workflow/git/node-git-runner.d.ts.map +1 -1
  306. package/dist/modules/workflow/git/node-git-runner.js +78 -6
  307. package/dist/modules/workflow/git/node-git-runner.js.map +1 -1
  308. package/dist/modules/workflow/git/pull-request.service.d.ts +94 -1
  309. package/dist/modules/workflow/git/pull-request.service.d.ts.map +1 -1
  310. package/dist/modules/workflow/git/pull-request.service.js +332 -37
  311. package/dist/modules/workflow/git/pull-request.service.js.map +1 -1
  312. package/dist/modules/workflow/pending-commits.service.d.ts +15 -0
  313. package/dist/modules/workflow/pending-commits.service.d.ts.map +1 -1
  314. package/dist/modules/workflow/pending-commits.service.js +25 -1
  315. package/dist/modules/workflow/pending-commits.service.js.map +1 -1
  316. package/dist/modules/workflow/pending-commits.worker.d.ts +6 -1
  317. package/dist/modules/workflow/pending-commits.worker.d.ts.map +1 -1
  318. package/dist/modules/workflow/pending-commits.worker.js +23 -6
  319. package/dist/modules/workflow/pending-commits.worker.js.map +1 -1
  320. package/dist/modules/workflow/recovery-bot.js +1 -1
  321. package/dist/modules/workflow/recovery-bot.js.map +1 -1
  322. package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts +35 -0
  323. package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +1 -1
  324. package/dist/modules/workflow/review-workflow/review-workflow.service.js +180 -13
  325. package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +1 -1
  326. package/dist/modules/workflow/sanitize-error.d.ts +16 -0
  327. package/dist/modules/workflow/sanitize-error.d.ts.map +1 -1
  328. package/dist/modules/workflow/sanitize-error.js +45 -0
  329. package/dist/modules/workflow/sanitize-error.js.map +1 -1
  330. package/dist/modules/workflow/workflow.routes.d.ts +6 -2
  331. package/dist/modules/workflow/workflow.routes.d.ts.map +1 -1
  332. package/dist/modules/workflow/workflow.routes.js +7 -2
  333. package/dist/modules/workflow/workflow.routes.js.map +1 -1
  334. package/dist/modules/workflow/workflow.service.d.ts +187 -15
  335. package/dist/modules/workflow/workflow.service.d.ts.map +1 -1
  336. package/dist/modules/workflow/workflow.service.js +808 -106
  337. package/dist/modules/workflow/workflow.service.js.map +1 -1
  338. package/dist/modules/workspace/agent-download.builder.d.ts +105 -0
  339. package/dist/modules/workspace/agent-download.builder.d.ts.map +1 -0
  340. package/dist/modules/workspace/agent-download.builder.js +238 -0
  341. package/dist/modules/workspace/agent-download.builder.js.map +1 -0
  342. package/dist/modules/workspace/agent-download.routes.d.ts +77 -0
  343. package/dist/modules/workspace/agent-download.routes.d.ts.map +1 -0
  344. package/dist/modules/workspace/agent-download.routes.js +156 -0
  345. package/dist/modules/workspace/agent-download.routes.js.map +1 -0
  346. package/dist/modules/workspace/agent-download.store.d.ts +225 -0
  347. package/dist/modules/workspace/agent-download.store.d.ts.map +1 -0
  348. package/dist/modules/workspace/agent-download.store.js +423 -0
  349. package/dist/modules/workspace/agent-download.store.js.map +1 -0
  350. package/dist/modules/workspace/agent-upload.store.d.ts +10 -1
  351. package/dist/modules/workspace/agent-upload.store.d.ts.map +1 -1
  352. package/dist/modules/workspace/agent-upload.store.js +16 -6
  353. package/dist/modules/workspace/agent-upload.store.js.map +1 -1
  354. package/dist/modules/workspace/file-readers/raw-mime.d.ts +6 -0
  355. package/dist/modules/workspace/file-readers/raw-mime.d.ts.map +1 -0
  356. package/dist/modules/workspace/file-readers/raw-mime.js +38 -0
  357. package/dist/modules/workspace/file-readers/raw-mime.js.map +1 -0
  358. package/dist/modules/workspace/file-readers/text-reader.d.ts +5 -5
  359. package/dist/modules/workspace/file-readers/text-reader.d.ts.map +1 -1
  360. package/dist/modules/workspace/file-readers/text-reader.js +5 -8
  361. package/dist/modules/workspace/file-readers/text-reader.js.map +1 -1
  362. package/dist/modules/workspace/first-run.d.ts +111 -0
  363. package/dist/modules/workspace/first-run.d.ts.map +1 -0
  364. package/dist/modules/workspace/first-run.js +181 -0
  365. package/dist/modules/workspace/first-run.js.map +1 -0
  366. package/dist/modules/workspace/move-links.d.ts +92 -0
  367. package/dist/modules/workspace/move-links.d.ts.map +1 -0
  368. package/dist/modules/workspace/move-links.js +173 -0
  369. package/dist/modules/workspace/move-links.js.map +1 -0
  370. package/dist/modules/workspace/startup/steps/seed-tree.d.ts.map +1 -1
  371. package/dist/modules/workspace/startup/steps/seed-tree.js +24 -39
  372. package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
  373. package/dist/modules/workspace/startup/steps/template-files.step.d.ts +58 -52
  374. package/dist/modules/workspace/startup/steps/template-files.step.d.ts.map +1 -1
  375. package/dist/modules/workspace/startup/steps/template-files.step.js +209 -223
  376. package/dist/modules/workspace/startup/steps/template-files.step.js.map +1 -1
  377. package/dist/modules/workspace/startup/steps/template-source.d.ts +5 -3
  378. package/dist/modules/workspace/startup/steps/template-source.d.ts.map +1 -1
  379. package/dist/modules/workspace/startup/steps/template-source.js +5 -3
  380. package/dist/modules/workspace/startup/steps/template-source.js.map +1 -1
  381. package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
  382. package/dist/modules/workspace/workspace.routes.js +63 -22
  383. package/dist/modules/workspace/workspace.routes.js.map +1 -1
  384. package/dist/modules/workspace/workspace.service.d.ts +75 -2
  385. package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
  386. package/dist/modules/workspace/workspace.service.js +197 -24
  387. package/dist/modules/workspace/workspace.service.js.map +1 -1
  388. package/dist/modules/workspace/workspace.tools.d.ts +68 -1
  389. package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
  390. package/dist/modules/workspace/workspace.tools.js +642 -71
  391. package/dist/modules/workspace/workspace.tools.js.map +1 -1
  392. package/dist/modules/write-access/write-access.d.ts.map +1 -1
  393. package/dist/modules/write-access/write-access.js +9 -0
  394. package/dist/modules/write-access/write-access.js.map +1 -1
  395. package/dist/shared/domain-errors.d.ts +84 -1
  396. package/dist/shared/domain-errors.d.ts.map +1 -1
  397. package/dist/shared/domain-errors.js +100 -12
  398. package/dist/shared/domain-errors.js.map +1 -1
  399. package/dist/shared/git.contract.d.ts +10 -1
  400. package/dist/shared/git.contract.d.ts.map +1 -1
  401. package/dist/shared/git.contract.js.map +1 -1
  402. package/dist/shared/hidden-tools.d.ts +44 -0
  403. package/dist/shared/hidden-tools.d.ts.map +1 -0
  404. package/dist/shared/hidden-tools.js +13 -0
  405. package/dist/shared/hidden-tools.js.map +1 -0
  406. package/dist/shared/utf8-text.d.ts +15 -0
  407. package/dist/shared/utf8-text.d.ts.map +1 -0
  408. package/dist/shared/utf8-text.js +20 -0
  409. package/dist/shared/utf8-text.js.map +1 -0
  410. package/dist/tenancy/static-tenant-source.d.ts +2 -1
  411. package/dist/tenancy/static-tenant-source.d.ts.map +1 -1
  412. package/dist/tenancy/static-tenant-source.js +9 -2
  413. package/dist/tenancy/static-tenant-source.js.map +1 -1
  414. package/kb-template/.bevelignore +0 -5
  415. package/mcp-app/page.html +349 -0
  416. package/migrations/0017_atlassian_account_links.sql +37 -0
  417. package/migrations/meta/0017_snapshot.json +2396 -0
  418. package/migrations/meta/_journal.json +8 -1
  419. package/package.json +6 -3
  420. package/src/__tests__/kb-layout-config.test.ts +10 -100
  421. package/src/__tests__/packaged-assets-ship.test.ts +66 -0
  422. package/src/assets.ts +38 -2
  423. package/src/core/__tests__/catalog-revision.test.ts +40 -0
  424. package/src/core/__tests__/gated-boot.test.ts +1 -0
  425. package/src/core/__tests__/lifecycle.test.ts +14 -0
  426. package/src/core/catalog-revision.ts +15 -2
  427. package/src/core/core-ports.ts +11 -0
  428. package/src/core/create-core-server.ts +78 -3
  429. package/src/core/create-core-services.ts +168 -10
  430. package/src/core/lifecycle.ts +28 -2
  431. package/src/core-config.ts +24 -1
  432. package/src/index.ts +2 -2
  433. package/src/modules/access/__tests__/access-control.atref-batch.test.ts +58 -0
  434. package/src/modules/access/__tests__/access-control.platform-restore.test.ts +8 -7
  435. package/src/modules/access/__tests__/access-control.service.test.ts +19 -0
  436. package/src/modules/access/__tests__/access-personal-plugin.test.ts +1 -18
  437. package/src/modules/access/access-control.interface.ts +28 -0
  438. package/src/modules/access/access-control.service.ts +37 -0
  439. package/src/modules/access/directory-sync-bot.ts +1 -1
  440. package/src/modules/agent-guide/__tests__/agent-guide.test.ts +386 -0
  441. package/src/modules/agent-guide/__tests__/agent-guide.tools.test.ts +207 -0
  442. package/src/modules/agent-guide/agent-guide.tools.ts +122 -0
  443. package/src/modules/agent-guide/agent-guide.ts +300 -0
  444. package/src/modules/agent-guide/index.ts +22 -0
  445. package/src/modules/agent-instructions/__tests__/shared-file-rules.test.ts +39 -118
  446. package/src/modules/agent-instructions/agent-instructions.routes.ts +3 -2
  447. package/src/modules/agent-instructions/compose.ts +26 -8
  448. package/src/modules/agent-instructions/index.ts +0 -3
  449. package/src/modules/agent-instructions/shared-file-rules.ts +50 -112
  450. package/src/modules/audit/__tests__/agent-audit.service.test.ts +64 -4
  451. package/src/modules/audit/__tests__/agent-connection.routes.test.ts +102 -0
  452. package/src/modules/audit/agent-audit.service.ts +58 -3
  453. package/src/modules/audit/agent-connection.routes.ts +56 -0
  454. package/src/modules/audit/audit.contract.ts +26 -0
  455. package/src/modules/audit/index.ts +1 -0
  456. package/src/modules/auth/__tests__/account.routes.test.ts +5 -3
  457. package/src/modules/auth/account.routes.ts +10 -3
  458. package/src/modules/auth/auth.middleware.ts +1 -1
  459. package/src/modules/code-mode/__tests__/code-mode.tool.test.ts +18 -2
  460. package/src/modules/code-mode/code-mode.tool.ts +13 -2
  461. package/src/modules/database/core-schema.ts +33 -3
  462. package/src/modules/embed/__tests__/account-links.migration.test.ts +98 -0
  463. package/src/modules/embed/__tests__/embed-link.test.ts +122 -0
  464. package/src/modules/embed/__tests__/embed.routes.test.ts +362 -0
  465. package/src/modules/embed/__tests__/embed.service.lock.test.ts +193 -0
  466. package/src/modules/embed/__tests__/embed.service.test.ts +805 -0
  467. package/src/modules/embed/__tests__/embed.tools.test.ts +304 -0
  468. package/src/modules/embed/__tests__/mcp-app.test.ts +207 -0
  469. package/src/modules/embed/account-link.service.ts +76 -0
  470. package/src/modules/embed/embed-link.ts +180 -0
  471. package/src/modules/embed/embed.errors.ts +43 -0
  472. package/src/modules/embed/embed.interface.ts +203 -0
  473. package/src/modules/embed/embed.routes.ts +363 -0
  474. package/src/modules/embed/embed.service.ts +705 -0
  475. package/src/modules/embed/embed.tools.ts +206 -0
  476. package/src/modules/embed/mcp-app.routes.ts +41 -0
  477. package/src/modules/embed/mcp-app.ts +173 -0
  478. package/src/modules/github-app/__tests__/github-app.test.ts +76 -0
  479. package/src/modules/github-app/github-app.connection.ts +38 -4
  480. package/src/modules/kb-fs/__tests__/move-with-edits.test.ts +304 -0
  481. package/src/modules/kb-fs/locking-filesystem.ts +287 -0
  482. package/src/modules/kb-sync/__tests__/kb-sync.service.test.ts +35 -0
  483. package/src/modules/kb-sync/kb-sync.interface.ts +2 -0
  484. package/src/modules/kb-sync/kb-sync.service.ts +6 -0
  485. package/src/modules/mcp/__tests__/bevel-oauth-provider.test.ts +68 -11
  486. package/src/modules/mcp/__tests__/fake-downstream-mcp-server.ts +14 -3
  487. package/src/modules/mcp/__tests__/mcp-proxy-helpers.test.ts +37 -2
  488. package/src/modules/mcp/__tests__/mcp.app.e2e.test.ts +200 -0
  489. package/src/modules/mcp/__tests__/mcp.e2e.test.ts +252 -0
  490. package/src/modules/mcp/__tests__/mcp.service.test.ts +42 -24
  491. package/src/modules/mcp/__tests__/tool-call-interface.e2e.test.ts +499 -0
  492. package/src/modules/mcp/__tests__/tool-schema-guard.test.ts +266 -0
  493. package/src/modules/mcp/mcp-auth.middleware.ts +2 -1
  494. package/src/modules/mcp/mcp.service.ts +218 -31
  495. package/src/modules/mcp/oauth/bevel-oauth-provider.ts +42 -4
  496. package/src/modules/mcp/tool-schema-guard.ts +196 -0
  497. package/src/modules/onboarding/__tests__/onboarding.routes.test.ts +163 -0
  498. package/src/modules/onboarding/__tests__/starter-pack.service.test.ts +635 -0
  499. package/src/modules/onboarding/__tests__/starter-packs.test.ts +169 -0
  500. package/src/modules/onboarding/onboarding.contract.ts +85 -0
  501. package/src/modules/onboarding/onboarding.routes.ts +85 -0
  502. package/src/modules/onboarding/starter-pack.service.ts +580 -0
  503. package/src/modules/onboarding/starter-packs.ts +182 -0
  504. package/src/modules/plugins/__tests__/plugins.tools.test.ts +177 -4
  505. package/src/modules/plugins/index.ts +1 -0
  506. package/src/modules/plugins/plugin-provision.service.ts +22 -1
  507. package/src/modules/plugins/plugins.routes.ts +29 -0
  508. package/src/modules/plugins/plugins.tools.ts +75 -15
  509. package/src/modules/settings/__tests__/deployment-settings.service.test.ts +176 -56
  510. package/src/modules/settings/__tests__/repository-source.test.ts +9 -0
  511. package/src/modules/settings/deployment-settings.service.ts +144 -55
  512. package/src/modules/settings/repository-source.ts +4 -4
  513. package/src/modules/settings/setup.routes.ts +3 -6
  514. package/src/modules/skills/__tests__/skills.tools.description.test.ts +95 -0
  515. package/src/modules/skills/skills.tools.ts +112 -46
  516. package/src/modules/tool-auth/__tests__/connection-key-rejection.test.ts +32 -0
  517. package/src/modules/tool-auth/__tests__/external-api-key.service.test.ts +65 -0
  518. package/src/modules/tool-auth/connection-key-rejection.ts +13 -3
  519. package/src/modules/tool-auth/external-api-key.interface.ts +9 -0
  520. package/src/modules/tool-auth/external-api-key.service.ts +61 -4
  521. package/src/modules/tool-auth/tool-auth.middleware.ts +13 -4
  522. package/src/modules/tool-helpers/__tests__/branch-declaration.test.ts +502 -0
  523. package/src/modules/tool-helpers/__tests__/route-argument-check.test.ts +337 -0
  524. package/src/modules/tool-helpers/index.ts +34 -1
  525. package/src/modules/tool-helpers/route-argument-check.ts +149 -0
  526. package/src/modules/tool-helpers/route-tool-schemas.ts +171 -0
  527. package/src/modules/tool-helpers/tool-def.ts +132 -7
  528. package/src/modules/tool-helpers/tool-handler.ts +196 -8
  529. package/src/modules/tool-helpers/tool.contract.ts +9 -0
  530. package/src/modules/tool-manuals/__tests__/tool-manuals.detail.route.test.ts +57 -0
  531. package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +73 -4
  532. package/src/modules/tool-manuals/tool-manuals.contract.ts +24 -4
  533. package/src/modules/tool-manuals/tool-manuals.service.ts +17 -0
  534. package/src/modules/tool-manuals/tool-manuals.tools.ts +86 -38
  535. package/src/modules/tool-registry/__tests__/own-tool-schemas.test.ts +173 -0
  536. package/src/modules/tool-registry/__tests__/tool-description-length.test.ts +81 -66
  537. package/src/modules/tool-registry/description-length.ts +57 -32
  538. package/src/modules/tool-registry/guide-first.ts +41 -0
  539. package/src/modules/tool-registry/tool-registry.ts +9 -2
  540. package/src/modules/workflow/__tests__/apply-failure.test.ts +6 -1
  541. package/src/modules/workflow/__tests__/file-lock.service.deletion-gate.test.ts +104 -0
  542. package/src/modules/workflow/__tests__/pending-commits.repository-replaced.test.ts +66 -0
  543. package/src/modules/workflow/__tests__/pending-commits.worker.test.ts +31 -2
  544. package/src/modules/workflow/__tests__/preserve-roles-yaml.test.ts +110 -6
  545. package/src/modules/workflow/__tests__/sanitize-error.test.ts +89 -1
  546. package/src/modules/workflow/__tests__/workflow.routes.push-refused.test.ts +202 -0
  547. package/src/modules/workflow/__tests__/workflow.service.branch-in-use.test.ts +6 -6
  548. package/src/modules/workflow/__tests__/workflow.service.delete-branch.test.ts +1026 -0
  549. package/src/modules/workflow/__tests__/workflow.service.facade.test.ts +468 -10
  550. package/src/modules/workflow/__tests__/workflow.service.folder-proposals.test.ts +4 -0
  551. package/src/modules/workflow/__tests__/workflow.service.releaseLock.test.ts +5 -4
  552. package/src/modules/workflow/__tests__/workflow.service.update-from-target.test.ts +54 -2
  553. package/src/modules/workflow/agent-tools/__tests__/change-request-read-shape.test.ts +705 -0
  554. package/src/modules/workflow/agent-tools/__tests__/change-request-read.tools.test.ts +1554 -0
  555. package/src/modules/workflow/agent-tools/__tests__/workflow.tools.test.ts +150 -4
  556. package/src/modules/workflow/agent-tools/change-request-read-shape.ts +712 -0
  557. package/src/modules/workflow/agent-tools/change-request-read.tools.ts +759 -0
  558. package/src/modules/workflow/agent-tools/change-request-summary.ts +5 -1
  559. package/src/modules/workflow/agent-tools/workflow.tools.ts +137 -35
  560. package/src/modules/workflow/file-lock.service.ts +67 -5
  561. package/src/modules/workflow/git/__tests__/git.service.appliedChange.test.ts +285 -0
  562. package/src/modules/workflow/git/__tests__/git.service.changedFilesForPr.test.ts +124 -0
  563. package/src/modules/workflow/git/__tests__/git.service.deleteBranch.test.ts +164 -0
  564. package/src/modules/workflow/git/__tests__/git.service.mergeChangeRequest.test.ts +334 -0
  565. package/src/modules/workflow/git/__tests__/git.service.pull.test.ts +48 -1
  566. package/src/modules/workflow/git/__tests__/node-git-runner.test.ts +231 -2
  567. package/src/modules/workflow/git/__tests__/pull-request.service.list-fetch.test.ts +72 -2
  568. package/src/modules/workflow/git/__tests__/pull-request.service.placeholder.test.ts +24 -2
  569. package/src/modules/workflow/git/__tests__/pull-request.service.test.ts +620 -1
  570. package/src/modules/workflow/git/git.service.ts +714 -133
  571. package/src/modules/workflow/git/merge-commit.ts +88 -0
  572. package/src/modules/workflow/git/node-git-runner.ts +82 -7
  573. package/src/modules/workflow/git/pull-request.service.ts +380 -54
  574. package/src/modules/workflow/pending-commits.service.ts +29 -1
  575. package/src/modules/workflow/pending-commits.worker.ts +24 -6
  576. package/src/modules/workflow/recovery-bot.ts +1 -1
  577. package/src/modules/workflow/review-workflow/__tests__/approval-states.test.ts +7 -1
  578. package/src/modules/workflow/review-workflow/__tests__/merge-records-own-commit.test.ts +407 -0
  579. package/src/modules/workflow/review-workflow/review-workflow.service.ts +191 -12
  580. package/src/modules/workflow/sanitize-error.ts +50 -0
  581. package/src/modules/workflow/workflow.routes.ts +7 -2
  582. package/src/modules/workflow/workflow.service.ts +886 -112
  583. package/src/modules/workspace/__tests__/agent-downloads.test.ts +823 -0
  584. package/src/modules/workspace/__tests__/escape-sequences.routes.test.ts +4 -3
  585. package/src/modules/workspace/__tests__/first-run.test.ts +234 -0
  586. package/src/modules/workspace/__tests__/git-internals.security.test.ts +5 -2
  587. package/src/modules/workspace/__tests__/md-links.test.ts +353 -0
  588. package/src/modules/workspace/__tests__/move-links.test.ts +261 -0
  589. package/src/modules/workspace/__tests__/rest-tool-arguments.test.ts +219 -0
  590. package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +3 -0
  591. package/src/modules/workspace/__tests__/workspace.routes.delete.test.ts +102 -0
  592. package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +52 -5
  593. package/src/modules/workspace/__tests__/workspace.routes.folder-zip-access.test.ts +190 -0
  594. package/src/modules/workspace/__tests__/workspace.routes.move-platform-files.test.ts +21 -10
  595. package/src/modules/workspace/__tests__/workspace.service.forget-clone-races.test.ts +8 -4
  596. package/src/modules/workspace/__tests__/workspace.service.test.ts +50 -8
  597. package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +33 -55
  598. package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +44 -1
  599. package/src/modules/workspace/__tests__/workspace.tools.test.ts +664 -34
  600. package/src/modules/workspace/agent-download.builder.ts +308 -0
  601. package/src/modules/workspace/agent-download.routes.ts +183 -0
  602. package/src/modules/workspace/agent-download.store.ts +533 -0
  603. package/src/modules/workspace/agent-upload.store.ts +23 -7
  604. package/src/modules/workspace/file-readers/raw-mime.ts +40 -0
  605. package/src/modules/workspace/file-readers/text-reader.ts +5 -8
  606. package/src/modules/workspace/first-run.ts +222 -0
  607. package/src/modules/workspace/move-links.ts +237 -0
  608. package/src/modules/workspace/startup/steps/__tests__/steps.test.ts +191 -489
  609. package/src/modules/workspace/startup/steps/seed-tree.ts +23 -38
  610. package/src/modules/workspace/startup/steps/template-files.step.ts +217 -249
  611. package/src/modules/workspace/startup/steps/template-source.ts +5 -3
  612. package/src/modules/workspace/workspace.routes.ts +64 -22
  613. package/src/modules/workspace/workspace.service.ts +202 -25
  614. package/src/modules/workspace/workspace.tools.ts +707 -68
  615. package/src/modules/write-access/__tests__/write-access.test.ts +13 -0
  616. package/src/modules/write-access/write-access.ts +9 -0
  617. package/src/shared/domain-errors.ts +123 -11
  618. package/src/shared/git.contract.ts +8 -1
  619. package/src/shared/hidden-tools.ts +45 -0
  620. package/src/shared/utf8-text.ts +21 -0
  621. package/src/tenancy/__tests__/static-tenant-source.test.ts +1 -0
  622. package/src/tenancy/static-tenant-source.ts +10 -2
  623. package/starter-packs/README.md +103 -0
  624. package/starter-packs/engineering/KnowledgeBase/About us.md +9 -0
  625. package/starter-packs/engineering/KnowledgeBase/Architecture.md +9 -0
  626. package/starter-packs/engineering/KnowledgeBase/Glossary.md +9 -0
  627. package/starter-packs/engineering/KnowledgeBase/How we ship.md +9 -0
  628. package/starter-packs/engineering/Plugins/engineering-starter/LICENSE +21 -0
  629. package/starter-packs/engineering/Plugins/engineering-starter/SOURCE.md +20 -0
  630. package/starter-packs/engineering/Plugins/engineering-starter/access.md +19 -0
  631. package/starter-packs/engineering/Plugins/engineering-starter/plugin.json +10 -0
  632. package/starter-packs/engineering/Plugins/engineering-starter/skills/office-hours/SKILL.md +171 -0
  633. package/starter-packs/engineering/Plugins/engineering-starter/skills/office-hours/sections/phase-2a-startup-diagnostic.md +157 -0
  634. package/starter-packs/engineering/Plugins/engineering-starter/skills/office-hours/sections/phase-2b-builder-brainstorm.md +39 -0
  635. package/starter-packs/engineering/Plugins/engineering-starter/skills/plan-ceo-review/SKILL.md +144 -0
  636. package/starter-packs/engineering/Plugins/engineering-starter/skills/plan-eng-review/SKILL.md +144 -0
  637. package/starter-packs/engineering/Plugins/engineering-starter/skills/review/SKILL.md +80 -0
  638. package/starter-packs/engineering/Plugins/engineering-starter/skills/review/checklist.md +184 -0
  639. package/starter-packs/engineering/pack.yaml +11 -0
  640. package/starter-packs/general/KnowledgeBase/About us.md +9 -0
  641. package/starter-packs/general/KnowledgeBase/Glossary.md +9 -0
  642. package/starter-packs/general/KnowledgeBase/How we work.md +9 -0
  643. package/starter-packs/general/Plugins/general-starter/LICENSE +202 -0
  644. package/starter-packs/general/Plugins/general-starter/SOURCE.md +10 -0
  645. package/starter-packs/general/Plugins/general-starter/access.md +19 -0
  646. package/starter-packs/general/Plugins/general-starter/plugin.json +10 -0
  647. package/starter-packs/general/Plugins/general-starter/skills/memory-management/SKILL.md +332 -0
  648. package/starter-packs/general/Plugins/general-starter/skills/productivity-start/SKILL.md +163 -0
  649. package/starter-packs/general/Plugins/general-starter/skills/productivity-update/SKILL.md +167 -0
  650. package/starter-packs/general/Plugins/general-starter/skills/task-management/SKILL.md +83 -0
  651. package/starter-packs/general/pack.yaml +10 -0
  652. package/starter-packs/operations/KnowledgeBase/Glossary.md +9 -0
  653. package/starter-packs/operations/KnowledgeBase/How we work.md +9 -0
  654. package/starter-packs/operations/KnowledgeBase/Processes.md +9 -0
  655. package/starter-packs/operations/KnowledgeBase/Tools we use.md +9 -0
  656. package/starter-packs/operations/KnowledgeBase/Vendors.md +9 -0
  657. package/starter-packs/operations/Plugins/operations-starter/LICENSE +202 -0
  658. package/starter-packs/operations/Plugins/operations-starter/SOURCE.md +10 -0
  659. package/starter-packs/operations/Plugins/operations-starter/access.md +19 -0
  660. package/starter-packs/operations/Plugins/operations-starter/plugin.json +10 -0
  661. package/starter-packs/operations/Plugins/operations-starter/skills/capacity-plan/SKILL.md +111 -0
  662. package/starter-packs/operations/Plugins/operations-starter/skills/change-request/SKILL.md +119 -0
  663. package/starter-packs/operations/Plugins/operations-starter/skills/compliance-tracking/SKILL.md +44 -0
  664. package/starter-packs/operations/Plugins/operations-starter/skills/process-doc/SKILL.md +80 -0
  665. package/starter-packs/operations/Plugins/operations-starter/skills/process-optimization/SKILL.md +39 -0
  666. package/starter-packs/operations/Plugins/operations-starter/skills/risk-assessment/SKILL.md +40 -0
  667. package/starter-packs/operations/Plugins/operations-starter/skills/runbook/SKILL.md +85 -0
  668. package/starter-packs/operations/Plugins/operations-starter/skills/status-report/SKILL.md +75 -0
  669. package/starter-packs/operations/Plugins/operations-starter/skills/vendor-review/SKILL.md +102 -0
  670. package/starter-packs/operations/pack.yaml +12 -0
  671. package/starter-packs/sales/KnowledgeBase/About us.md +9 -0
  672. package/starter-packs/sales/KnowledgeBase/Customers.md +9 -0
  673. package/starter-packs/sales/KnowledgeBase/Glossary.md +9 -0
  674. package/starter-packs/sales/KnowledgeBase/How we sell.md +9 -0
  675. package/starter-packs/sales/KnowledgeBase/Objections.md +9 -0
  676. package/starter-packs/sales/KnowledgeBase/Pricing.md +9 -0
  677. package/starter-packs/sales/Plugins/sales-starter/LICENSE +202 -0
  678. package/starter-packs/sales/Plugins/sales-starter/SOURCE.md +10 -0
  679. package/starter-packs/sales/Plugins/sales-starter/access.md +19 -0
  680. package/starter-packs/sales/Plugins/sales-starter/plugin.json +10 -0
  681. package/starter-packs/sales/Plugins/sales-starter/skills/account-context/SKILL.md +94 -0
  682. package/starter-packs/sales/Plugins/sales-starter/skills/account-plan/SKILL.md +95 -0
  683. package/starter-packs/sales/Plugins/sales-starter/skills/account-research/SKILL.md +99 -0
  684. package/starter-packs/sales/Plugins/sales-starter/skills/account-tiering/SKILL.md +101 -0
  685. package/starter-packs/sales/Plugins/sales-starter/skills/call-prep/SKILL.md +111 -0
  686. package/starter-packs/sales/Plugins/sales-starter/skills/call-summary/SKILL.md +111 -0
  687. package/starter-packs/sales/Plugins/sales-starter/skills/close-plan/SKILL.md +106 -0
  688. package/starter-packs/sales/Plugins/sales-starter/skills/competitive-intelligence/SKILL.md +102 -0
  689. package/starter-packs/sales/Plugins/sales-starter/skills/create-an-asset/SKILL.md +105 -0
  690. package/starter-packs/sales/Plugins/sales-starter/skills/crm-hygiene-check/SKILL.md +103 -0
  691. package/starter-packs/sales/Plugins/sales-starter/skills/customer-health/SKILL.md +108 -0
  692. package/starter-packs/sales/Plugins/sales-starter/skills/customer-voice/SKILL.md +94 -0
  693. package/starter-packs/sales/Plugins/sales-starter/skills/daily-briefing/SKILL.md +61 -0
  694. package/starter-packs/sales/Plugins/sales-starter/skills/deal-advance-gap/SKILL.md +102 -0
  695. package/starter-packs/sales/Plugins/sales-starter/skills/deal-review/SKILL.md +105 -0
  696. package/starter-packs/sales/Plugins/sales-starter/skills/deal-signals/SKILL.md +96 -0
  697. package/starter-packs/sales/Plugins/sales-starter/skills/deal-slip-scenario/SKILL.md +104 -0
  698. package/starter-packs/sales/Plugins/sales-starter/skills/draft-outreach/SKILL.md +116 -0
  699. package/starter-packs/sales/Plugins/sales-starter/skills/end-of-day/SKILL.md +114 -0
  700. package/starter-packs/sales/Plugins/sales-starter/skills/expansion-whitespace/SKILL.md +97 -0
  701. package/starter-packs/sales/Plugins/sales-starter/skills/forecast/SKILL.md +100 -0
  702. package/starter-packs/sales/Plugins/sales-starter/skills/handle-objection/SKILL.md +93 -0
  703. package/starter-packs/sales/Plugins/sales-starter/skills/inbox-sweep/SKILL.md +114 -0
  704. package/starter-packs/sales/Plugins/sales-starter/skills/lead-triage/SKILL.md +106 -0
  705. package/starter-packs/sales/Plugins/sales-starter/skills/log-activity/SKILL.md +111 -0
  706. package/starter-packs/sales/Plugins/sales-starter/skills/pipeline-review/SKILL.md +97 -0
  707. package/starter-packs/sales/Plugins/sales-starter/skills/renewal-radar/SKILL.md +95 -0
  708. package/starter-packs/sales/Plugins/sales-starter/skills/rep-context/SKILL.md +90 -0
  709. package/starter-packs/sales/Plugins/sales-starter/skills/route-lead/SKILL.md +111 -0
  710. package/starter-packs/sales/Plugins/sales-starter/skills/sales-setup/SKILL.md +200 -0
  711. package/starter-packs/sales/Plugins/sales-starter/skills/schedule-meeting/SKILL.md +99 -0
  712. package/starter-packs/sales/Plugins/sales-starter/skills/stakeholder-map/SKILL.md +107 -0
  713. package/starter-packs/sales/Plugins/sales-starter/skills/team-pipeline/SKILL.md +105 -0
  714. package/starter-packs/sales/Plugins/sales-starter/skills/update-opportunity/SKILL.md +112 -0
  715. package/starter-packs/sales/Plugins/sales-starter/skills/weekly-wrap/SKILL.md +90 -0
  716. package/starter-packs/sales/Plugins/sales-starter/skills/win-loss-review/SKILL.md +88 -0
  717. package/starter-packs/sales/pack.yaml +13 -0
  718. package/starter-packs/support/KnowledgeBase/Escalations.md +9 -0
  719. package/starter-packs/support/KnowledgeBase/Glossary.md +9 -0
  720. package/starter-packs/support/KnowledgeBase/Known issues.md +9 -0
  721. package/starter-packs/support/KnowledgeBase/Products.md +9 -0
  722. package/starter-packs/support/KnowledgeBase/Tone of voice.md +9 -0
  723. package/starter-packs/support/Plugins/support-starter/LICENSE +202 -0
  724. package/starter-packs/support/Plugins/support-starter/SOURCE.md +10 -0
  725. package/starter-packs/support/Plugins/support-starter/access.md +19 -0
  726. package/starter-packs/support/Plugins/support-starter/plugin.json +10 -0
  727. package/starter-packs/support/Plugins/support-starter/skills/customer-escalation/SKILL.md +246 -0
  728. package/starter-packs/support/Plugins/support-starter/skills/customer-research/SKILL.md +250 -0
  729. package/starter-packs/support/Plugins/support-starter/skills/draft-response/SKILL.md +416 -0
  730. package/starter-packs/support/Plugins/support-starter/skills/kb-article/SKILL.md +350 -0
  731. package/starter-packs/support/Plugins/support-starter/skills/ticket-triage/SKILL.md +273 -0
  732. package/starter-packs/support/pack.yaml +12 -0
  733. package/kb-template/AGENTS.md +0 -730
@@ -47,6 +47,12 @@ describe('isAlwaysWritable', () => {
47
47
  ['POST', '/api/workspace/w1/access/batch'],
48
48
  ['POST', '/api/workspace/w1/workflow/locks/heartbeat'],
49
49
  ['POST', '/api/events/s1/focus'],
50
+ // The Atlassian connector's VIEW mint: it signs a token, changes nothing.
51
+ ['POST', '/api/embed/token'],
52
+ // The embed's lock signals, like the app's heartbeat: a held lock kept
53
+ // or let go, no content changed.
54
+ ['POST', '/api/embed/heartbeat'],
55
+ ['POST', '/api/embed/cancel'],
50
56
  ])('lets %s %s through', (method, path) => {
51
57
  expect(isAlwaysWritable(method, path)).toBe(true);
52
58
  });
@@ -59,6 +65,13 @@ describe('isAlwaysWritable', () => {
59
65
  ['POST', '/api/workspace/w1/workflow/locks'],
60
66
  ['POST', '/api/plugins'],
61
67
  ['POST', '/api/admin/groups'],
68
+ // The embed's own edits stay refused like every other write — taking the
69
+ // lock included, since it is the first step of a save.
70
+ ['POST', '/api/embed/save'],
71
+ ['POST', '/api/embed/propose'],
72
+ ['POST', '/api/embed/lock'],
73
+ ['POST', '/api/embed/token/extra'],
74
+ ['POST', '/api/embed/heartbeat/extra'],
62
75
  // A look-alike of an allowed path is not that path.
63
76
  ['POST', '/api/admin/accountsx'],
64
77
  ['POST', '/api/workspace/w1/access/batch/extra'],
@@ -48,6 +48,12 @@ const MUTATING_METHODS = new Set(['POST', 'PUT', 'PATCH', 'DELETE']);
48
48
  * - Account administration: the way an admin brings the number of people
49
49
  * down. Erasing an account with `removeFromAccess` commits to the
50
50
  * knowledge base, and that commit is part of the same act.
51
+ * - The embed mint: `POST /api/embed/token` signs a short-lived VIEW
52
+ * token for the Atlassian connector and changes nothing; the embed's
53
+ * own edit routes stay refused. Its lock heartbeat and cancel stay open
54
+ * for the same reason the app's heartbeat does: a held lock is kept or
55
+ * let go, and no content changes — refusing them would have an editor
56
+ * read the refusal as "your access was withdrawn".
51
57
  * - The tool surface: every tool call is judged by the tool layer itself,
52
58
  * which knows a read tool from a write tool (see `toolHandler`); the MCP
53
59
  * endpoint only relays to it.
@@ -76,6 +82,9 @@ const ALWAYS_WRITABLE: readonly RegExp[] = [
76
82
  /^\/api\/workspace\/[^/]+\/workflow\/locks\/heartbeat$/,
77
83
  /^\/api\/events\/[^/]+\/focus$/,
78
84
  /^\/api\/tools\/preview$/,
85
+ /^\/api\/embed\/token$/,
86
+ /^\/api\/embed\/heartbeat$/,
87
+ /^\/api\/embed\/cancel$/,
79
88
  ];
80
89
 
81
90
  /**
@@ -108,24 +108,53 @@ export class PushNeedsAgentResolutionError extends WorkflowDomainError {
108
108
  readonly path: string,
109
109
  readonly originalDetail: string,
110
110
  readonly recoveryDetail: string,
111
+ /**
112
+ * Why the push did not land. `diverged`: the remote moved and the
113
+ * cooperative rebase could not reconcile. `refused`: the host turned the
114
+ * push away for any other reason (an outage, credentials, a dropped
115
+ * connection) — nothing to reconcile, the next push of the branch carries
116
+ * the commits. The opening clause is the same either way.
117
+ */
118
+ readonly cause: 'diverged' | 'refused' = 'diverged',
111
119
  ) {
112
120
  super(
113
121
  `Saved locally on "${branch}" but couldn't share with the team automatically — ` +
114
- `the remote diverged on "${path}" and the cooperative rebase couldn't reconcile. ` +
115
- `The agent will resolve this.`,
122
+ (cause === 'refused'
123
+ ? `the repository host refused the push; the next save on this branch will try sharing it again.`
124
+ : `the remote diverged on "${path}" and the cooperative rebase couldn't reconcile. ` +
125
+ `The agent will resolve this.`),
116
126
  409,
117
- {
118
- kind: 'push-needs-resolution',
119
- branch,
120
- path,
121
- originalDetail,
122
- recoveryDetail,
123
- },
127
+ // The two details are raw git output — stderr can quote a credentialed
128
+ // URL, server paths, the host's own error page. They stay on the error
129
+ // for the server log and never enter the payload the browser receives.
130
+ { kind: 'push-needs-resolution', branch, path },
124
131
  );
125
132
  this.name = 'PushNeedsAgentResolutionError';
126
133
  }
127
134
  }
128
135
 
136
+ /**
137
+ * The repository host refused to delete a branch (an outage, a protection
138
+ * rule, a dropped connection). Deletion pushes FIRST and deletes locally only
139
+ * once the host agreed, so the branch is still there — locally and remotely —
140
+ * and the person can try again later. Unlike a refused write there is nothing
141
+ * to keep "saved locally": a deleted branch has no later push to carry it.
142
+ *
143
+ * `detail` is the raw git failure, for the server log only; it never enters
144
+ * the message or the payload.
145
+ */
146
+ export class BranchDeleteRefusedError extends WorkflowDomainError {
147
+ readonly kind = 'branch-delete-refused' as const;
148
+ constructor(readonly branchName: string, readonly detail: string) {
149
+ super(
150
+ `The repository host refused to delete "${branchName}"; it is still there. Try again later.`,
151
+ 409,
152
+ { kind: 'branch-delete-refused', branchName },
153
+ );
154
+ this.name = 'BranchDeleteRefusedError';
155
+ }
156
+ }
157
+
129
158
  /**
130
159
  * Refreshing a workspace from origin (`GitService.pull`) hit a rebase
131
160
  * conflict: the workspace carries local commits origin doesn't have, origin
@@ -221,8 +250,18 @@ const STRINGIFIED_ABSENT_VALUES = new Set(['undefined', 'null']);
221
250
  * nothing", which is the one case where naming the branch back is impossible.
222
251
  */
223
252
  export function assertBranchProvided(branch: unknown): asserts branch is string {
224
- if (typeof branch !== 'string' || branch.length === 0) throw new BranchRequiredError();
225
- if (STRINGIFIED_ABSENT_VALUES.has(branch)) throw new BranchRequiredError();
253
+ if (!branchProvided(branch)) throw new BranchRequiredError();
254
+ }
255
+
256
+ /**
257
+ * The same question as {@link assertBranchProvided}, answered rather than
258
+ * thrown — for a caller that must know whether the branch refusal is the one
259
+ * this call is going to get, without being the one to raise it. The generic
260
+ * argument check asks it so that refusal keeps coming first.
261
+ */
262
+ export function branchProvided(branch: unknown): branch is string {
263
+ if (typeof branch !== 'string' || branch.length === 0) return false;
264
+ return !STRINGIFIED_ABSENT_VALUES.has(branch);
226
265
  }
227
266
 
228
267
  /**
@@ -245,6 +284,23 @@ export class BranchNotFoundError extends WorkflowDomainError {
245
284
  }
246
285
  }
247
286
 
287
+ /**
288
+ * A tool that defaults its branch was called without one, and the deployment
289
+ * has no default branch configured to fall back on. Not `BranchRequiredError`:
290
+ * the tool's schema says the branch is optional, so "you must pass one" would
291
+ * misdescribe the call — the caller did nothing wrong, the deployment is not
292
+ * set up. 503 with kind `default-branch-unset`; passing a branch works.
293
+ */
294
+ export class DefaultBranchUnsetError extends WorkflowDomainError {
295
+ readonly kind = 'default-branch-unset' as const;
296
+ constructor() {
297
+ super('This deployment has no default branch configured: pass `branch` to name the one to use.', 503, {
298
+ kind: 'default-branch-unset',
299
+ });
300
+ this.name = 'DefaultBranchUnsetError';
301
+ }
302
+ }
303
+
248
304
  /**
249
305
  * The clone's branch no longer exists on origin: the fetch that refreshes
250
306
  * `refs/remotes/origin/<branch>` found no such ref. Distinct from an
@@ -330,6 +386,62 @@ export class WorkflowValidationError extends WorkflowDomainError {
330
386
  }
331
387
  }
332
388
 
389
+ /**
390
+ * An agent's `delete_branch` refused, for a reason a person can act on. The
391
+ * `reason` is the discriminator a caller branches on; the message says what
392
+ * to do about it. Nothing was deleted.
393
+ *
394
+ * - `open-change-request` (409) — a request is open from or into the branch;
395
+ * `number` names it. Withdrawing or declining it is a person's action, in
396
+ * the app.
397
+ * - `unmerged-commits` (409) — `unmergedCommits` commits would be lost;
398
+ * `discardUnmerged` is the deliberate way past it.
399
+ * - `saves-landing` (409) — the branch's checkout still has saves waiting to
400
+ * be committed or a file held for editing. Clears itself within seconds.
401
+ * - `state-unconfirmed` (503) — the shared repository could not be fetched,
402
+ * so the branch's current state is unknown.
403
+ */
404
+ export type BranchDeleteBlockedReason =
405
+ | 'open-change-request'
406
+ | 'unmerged-commits'
407
+ | 'saves-landing'
408
+ | 'state-unconfirmed';
409
+
410
+ export class BranchDeleteBlockedError extends WorkflowDomainError {
411
+ readonly kind = 'branch-delete-blocked' as const;
412
+ constructor(
413
+ readonly reason: BranchDeleteBlockedReason,
414
+ readonly branchName: string,
415
+ message: string,
416
+ extra: Record<string, unknown> = {},
417
+ ) {
418
+ // `extra` first: it adds detail, and can never contradict the kind,
419
+ // reason or branch the status and fields above were chosen for.
420
+ super(message, reason === 'state-unconfirmed' ? 503 : 409, {
421
+ ...extra,
422
+ kind: 'branch-delete-blocked',
423
+ reason,
424
+ branchName,
425
+ });
426
+ this.name = 'BranchDeleteBlockedError';
427
+ }
428
+ }
429
+
430
+ /**
431
+ * The commit an applied change request records is in the clone but is NOT
432
+ * that request's own merge commit — no second parent (not a merge), no first
433
+ * parent (a root commit), or a message that does not name the request. A
434
+ * validation failure like the one above, told apart
435
+ * because it never mends: a reader may remember it, where a commit the clone
436
+ * merely does not hold yet must be asked for again after the next fetch.
437
+ */
438
+ export class AppliedChangeMismatchError extends WorkflowValidationError {
439
+ constructor(message: string, payload?: Record<string, unknown>) {
440
+ super(message, payload);
441
+ this.name = 'AppliedChangeMismatchError';
442
+ }
443
+ }
444
+
333
445
  /**
334
446
  * The next step a missing path always offers, in one sentence.
335
447
  *
@@ -70,8 +70,15 @@ export interface GitCredentials {
70
70
  * failure here is not the call's failure: git runs with the token in
71
71
  * hand, and the host says what it thinks of it. Absent for a credential
72
72
  * that does not expire.
73
+ *
74
+ * `refused` is the runner reporting that the host just refused the
75
+ * credential in hand: whatever is held is dead, however much time the
76
+ * clock says it has left, and a fresh one is asked for now, past whatever
77
+ * the provider remembers about a recent failure. The failure is thrown to
78
+ * the caller; what `token` answers afterwards is what the runner judges
79
+ * by — a credential that could not be replaced is not offered again.
73
80
  */
74
- prepare?(): Promise<void>;
81
+ prepare?(opts?: { refused?: boolean }): Promise<void>;
75
82
  }
76
83
 
77
84
  /** The username git is given when a deployment names none. */
@@ -0,0 +1,45 @@
1
+ /**
2
+ * A connected tool Hexis keeps off every agent surface because its input
3
+ * schema is not valid JSON Schema as its server sent it — and the read port
4
+ * the surfaces that SHOW that to the server's owner use.
5
+ *
6
+ * Here rather than in either module because two of them meet over it: the MCP
7
+ * proxy finds these when a server's tools are loaded (`modules/mcp`), and the
8
+ * tool catalog reports them to the people who manage the server
9
+ * (`modules/tool-manuals`, on the tool page and in `list_tool_setup`). Neither
10
+ * has any business importing the other.
11
+ */
12
+
13
+ /** One connected tool hidden from agents, and why. */
14
+ export interface HiddenTool {
15
+ /** The manual (the `.tool` or `mcp.json` server) the tool came from, by catalog name. */
16
+ manual: string;
17
+ /** The name an agent would have called it by, had it been offered. */
18
+ name: string;
19
+ /** JSON Pointer to the place in the input schema that is not valid. */
20
+ path: string;
21
+ /** The violation in the validator's own words, e.g. `must be a string`. */
22
+ reason: string;
23
+ /** The one sentence every owner-facing surface shows, built once so they cannot drift. */
24
+ marker: string;
25
+ }
26
+
27
+ /**
28
+ * What the owner-facing surfaces read. A deployment that never builds an MCP
29
+ * surface has nothing to report, so every consumer treats the port as
30
+ * optional and an absent one as "no tool is hidden".
31
+ */
32
+ export interface HiddenToolSource {
33
+ /**
34
+ * The tools of `manual` currently hidden for an invalid schema, by the
35
+ * manual's CATALOG name — empty for a healthy server, and empty for a server
36
+ * whose tools this process has not loaded yet.
37
+ *
38
+ * A finding belongs to the SERVER, not to whoever's request loaded it: a
39
+ * schema is a property of the tool definition, and the people who can get it
40
+ * fixed are not necessarily the person whose connection saw it. So this is
41
+ * every finding this process holds for that manual, from whichever callers
42
+ * have loaded it, each distinct defect once.
43
+ */
44
+ hiddenFor(manual: string): HiddenTool[];
45
+ }
@@ -0,0 +1,21 @@
1
+ import { isUtf8 } from 'node:buffer';
2
+
3
+ /**
4
+ * The one rule for "is this text": no NUL byte AND valid UTF-8. A NUL-free
5
+ * file that does not decode as UTF-8 is still binary — the decode would be
6
+ * lossy, so text written back could never round-trip the original bytes.
7
+ * Checked on the raw bytes, so a large binary is refused without allocating
8
+ * its decoded string first. Every reader that has to decide "text to render
9
+ * or edit, or bytes to copy as they are" — the fallback text reader, the
10
+ * access-rule writer, the template seeder, the starter packs — reads the
11
+ * policy from here, so a file one treats as text another never treats as
12
+ * bytes.
13
+ */
14
+ export function isTextBytes(bytes: Buffer): boolean {
15
+ return !bytes.includes(0) && isUtf8(bytes);
16
+ }
17
+
18
+ /** The bytes as text when they ARE text by {@link isTextBytes} (BOM kept), else null. */
19
+ export function utf8Text(bytes: Buffer): string | null {
20
+ return isTextBytes(bytes) ? bytes.toString('utf8') : null;
21
+ }
@@ -11,6 +11,7 @@ const settings: TenantHostSettings = {
11
11
  trustProxy: '1',
12
12
  workspacesRoot: path.resolve('/srv/hexis/workspaces'),
13
13
  kbTemplateDir: '/srv/hexis/template',
14
+ starterPacksDir: '/srv/hexis/starter-packs',
14
15
  gitTimeoutMs: 120_000,
15
16
  updateCheckEnabled: false,
16
17
  masterKey: 'a-master-key-that-is-long-enough-to-count-as-random',
@@ -3,7 +3,7 @@ import path from 'node:path';
3
3
  import { resolveDatabaseUrl, type TenantConfig } from '../core-config.js';
4
4
  import { DEFAULT_DB_SCHEMA, assertSchemaName } from '../modules/database/connection.js';
5
5
  import { DEFAULT_GIT_TIMEOUT_MS } from '../modules/workflow/git/node-git-runner.js';
6
- import { defaultKbTemplateDir } from '../assets.js';
6
+ import { defaultKbTemplateDir, defaultStarterPacksDir } from '../assets.js';
7
7
  import { DEFAULT_GIT_USERNAME } from '../shared/git.contract.js';
8
8
  import { deriveTenantSecrets } from './tenant-secrets.js';
9
9
  import { loopbackTenantBaseUrl } from './tenant-host.js';
@@ -22,6 +22,7 @@ export interface TenantHostSettings {
22
22
  /** Each tenant's workspaces live under `<workspacesRoot>/<slug>`; its backups, spills and caches beside them. */
23
23
  readonly workspacesRoot: string;
24
24
  readonly kbTemplateDir: string;
25
+ readonly starterPacksDir: string;
25
26
  readonly gitTimeoutMs: number;
26
27
  readonly updateCheckEnabled: boolean;
27
28
  /** See `tenant-secrets.ts`. */
@@ -169,6 +170,11 @@ export function tenantConfigFrom(record: TenantRecord, settings: TenantHostSetti
169
170
  jwtSecret: secrets.jwtSecret,
170
171
  secretsEncKey: secrets.secretsEncKey,
171
172
  internalTokenSecret: secrets.internalTokenSecret,
173
+ // No shared-secret mint on a tenant of a host: the Atlassian connector
174
+ // is pointed at a deployment, not at one knowledge base inside a host,
175
+ // and a secret derived per tenant would be a credential nobody issued.
176
+ // The MCP App needs none of it — it mints through the MCP session.
177
+ embedSharedSecret: '',
172
178
  adminEmail,
173
179
  adminPassword,
174
180
  loginPasswordEnabled,
@@ -182,6 +188,7 @@ export function tenantConfigFrom(record: TenantRecord, settings: TenantHostSetti
182
188
  gitUsername,
183
189
  gitToken: (record.gitToken ?? '').trim(),
184
190
  kbTemplateDir: settings.kbTemplateDir,
191
+ starterPacksDir: settings.starterPacksDir,
185
192
  updateCheckEnabled: settings.updateCheckEnabled,
186
193
  allowedEmailDomains,
187
194
  trustProxy: settings.trustProxy,
@@ -261,7 +268,7 @@ const MAX_TIMER_MS = 2_147_483_647;
261
268
  * The host's settings from the environment: the same variables a
262
269
  * single-tenant deployment reads for these facts (`DATABASE_URL` and the
263
270
  * `POSTGRES_*` parts, `PORT`, `TRUST_PROXY`, `WORKSPACES_ROOT`,
264
- * `KB_TEMPLATE_DIR`, `GIT_TIMEOUT_MS`, …), plus the three that only a host
271
+ * `KB_TEMPLATE_DIR`, `STARTER_PACKS_DIR`, `GIT_TIMEOUT_MS`, …), plus the three that only a host
265
272
  * has: `TENANTS_FILE`, `TENANT_MASTER_KEY` and `TENANT_IDLE_MINUTES`.
266
273
  */
267
274
  export function tenantHostEnv(env: NodeJS.ProcessEnv = process.env): TenantHostEnv {
@@ -286,6 +293,7 @@ export function tenantHostEnv(env: NodeJS.ProcessEnv = process.env): TenantHostE
286
293
  trustProxy: (env.TRUST_PROXY || (domain ? '1' : '')).trim(),
287
294
  workspacesRoot,
288
295
  kbTemplateDir: env.KB_TEMPLATE_DIR || defaultKbTemplateDir(),
296
+ starterPacksDir: env.STARTER_PACKS_DIR || defaultStarterPacksDir(),
289
297
  gitTimeoutMs:
290
298
  Number.isFinite(gitTimeout) && gitTimeout > 0 && gitTimeout <= MAX_TIMER_MS ? gitTimeout : DEFAULT_GIT_TIMEOUT_MS,
291
299
  updateCheckEnabled: (env.UPDATE_CHECK ?? 'true').trim().toLowerCase() !== 'false',
@@ -0,0 +1,103 @@
1
+ # Starter packs
2
+
3
+ After the first-run storage step, a new knowledge base's admin is asked
4
+ "What does your team do?". Each answer is one folder here: the pages and the
5
+ team plugin it adds to the knowledge base, in one commit on the default branch,
6
+ authored by the admin who chose it. "Skip, I'll start from scratch" adds
7
+ nothing. Either way the choice is recorded (the `starterPack` deployment
8
+ setting) and the question is not asked again.
9
+
10
+ The code is `src/modules/onboarding/` (`starter-packs.ts` reads and validates
11
+ the packs, `starter-pack.service.ts` applies one).
12
+
13
+ ## Layout
14
+
15
+ ```
16
+ <id>/
17
+ pack.yaml
18
+ KnowledgeBase/… pages
19
+ Plugins/<plugin-name>/… a team plugin
20
+ Skills/… shared skills (optional)
21
+ ```
22
+
23
+ `pack.yaml`:
24
+
25
+ ```yaml
26
+ id: sales # the folder's name: lowercase letters, digits, hyphens
27
+ name: Sales # the chip's label
28
+ description: One line about what the pack adds.
29
+ order: 2 # chip order: engineering 1, sales 2, support 3, operations 4, general 99
30
+ firstPagePrompt: | # replaces the generic "write your first page" request for this team
31
+ Using our Hexis knowledge base, fill in …
32
+ suggestedPages: [About us, Customers, Pricing, Objections, Glossary] # named in the agent's first-run note
33
+ ```
34
+
35
+ A folder whose `pack.yaml` is missing or does not validate is skipped with a
36
+ warning in the log; the others are still offered. `none` is reserved for the
37
+ skip.
38
+
39
+ `KnowledgeBase/`, `Plugins/` and `Skills/` use the default layout's names and
40
+ are written under the names the deployment chose for those folders. Text files
41
+ may use the layout placeholders (`{{knowledgeBaseDir}}`, `{{skillsDir}}`,
42
+ `{{pluginsDir}}` and `{{agentsFile}}`, the agent guide's file name). Anything
43
+ else in a pack folder (like this README) is never copied. Dot-files are never
44
+ copied.
45
+
46
+ Pages are short tasks rather than finished documents: a heading, a line or two
47
+ of placeholders, and "Ask your agent: _…_". While a page still holds exactly
48
+ what the pack wrote it does not count as written, so the "Write your first
49
+ page" step and the agent's first-run note stay open until someone fills one in.
50
+
51
+ ## Plugins
52
+
53
+ A plugin uses Hexis's normal plugin layout: `plugin.json` (optional; one is
54
+ written for the folder name when absent), `skills/<skill>/SKILL.md`, and the
55
+ licence and provenance of anything vendored (`LICENSE`, `SOURCE.md`) inside the
56
+ plugin folder, so they travel with the skills. Skill names must be unique
57
+ across all packs.
58
+
59
+ When the pack is applied, the plugin's `access.md` is the pack's own (if it
60
+ ships one) with the admin who applied it added under `read`, `write` and
61
+ `owner`, the way "Create a plugin" makes a plugin its creator's. Without one,
62
+ the admin gets the access.md "Create a plugin" writes. A plugin whose folder
63
+ (or manifest name) already exists in the knowledge base is left alone entirely.
64
+
65
+ ## Applying
66
+
67
+ Only paths that do not exist yet are written, judged with every path's lock
68
+ held, so a pack never overwrites a page. All of it lands as one commit through
69
+ the platform's batch write (`LockingFilesystem.writeFiles`), under the write
70
+ rules of the default branch, which an admin passes.
71
+
72
+ ## Your own packs
73
+
74
+ A distribution can offer its own set by pointing `STARTER_PACKS_DIR` at a
75
+ folder in this format. A folder with no valid pack in it means the question is
76
+ never asked.
77
+
78
+ ## Vendored skills
79
+
80
+ Most packs carry skills adapted from open-source projects. Each plugin's
81
+ `SOURCE.md` names the repository, the commit and what was changed; its
82
+ `LICENSE` is the project's own. Both ship inside the plugin folder, so the
83
+ licence travels with the skills wherever the plugin is copied. (The generated
84
+ `THIRD-PARTY-NOTICES.md` covers npm dependencies only; vendored content is
85
+ attributed here, in the plugin.)
86
+
87
+ To refresh a plugin's skills from a newer upstream commit:
88
+
89
+ 1. Clone the upstream repository outside this one, at the commit you want, and
90
+ record it: `git clone --depth 1 <repo> /tmp/upstream && git -C /tmp/upstream rev-parse HEAD`.
91
+ 2. Diff the upstream skills against the commit named in `SOURCE.md`
92
+ (`git -C /tmp/upstream diff <old-sha> -- <skill folders>` after fetching the
93
+ old commit) and carry the changes into the adapted files by hand. The
94
+ adaptation notes in `SOURCE.md` say what was removed and why — keep it removed.
95
+ 3. Copy the upstream `LICENSE` again if it changed, and update the commit and
96
+ notes in `SOURCE.md`.
97
+ 4. Check every `SKILL.md` still has `name` and `description` frontmatter, that
98
+ skill names stay unique across all packs, and that nothing points at the
99
+ upstream project's own install (paths into `~/.claude/skills/…`, its setup
100
+ or binaries). Then run the backend's tests: the loader test reads every
101
+ packaged pack.
102
+
103
+ Nothing here fetches at build or test time; the packs are files in the repository.
@@ -0,0 +1,9 @@
1
+ # About us
2
+
3
+ What we build, for whom, and why, in a few sentences anyone on the team could repeat.
4
+
5
+ - **What we build:** _one sentence a new engineer would understand_
6
+ - **Who uses it:** _our customers or users, and what they rely on it for_
7
+ - **The team:** _who works on what, and who to ask about each part_
8
+
9
+ Ask your agent: _Draft this from our repository's README_
@@ -0,0 +1,9 @@
1
+ # Architecture
2
+
3
+ The main parts of the system and how they fit together, at the level a new engineer needs on day one.
4
+
5
+ - **Components:** _the services, apps and libraries, one line each_
6
+ - **How they talk:** _APIs, queues and events between them_
7
+ - **Where data lives:** _databases and stores, and what each one holds_
8
+
9
+ Ask your agent: _Draft this from our repository's README and code_
@@ -0,0 +1,9 @@
1
+ # Glossary
2
+
3
+ The words, acronyms and code names the engineering team uses, so a new person and their agent understand them.
4
+
5
+ - **Terms and acronyms:** _each with one line on what it means here_
6
+ - **Code names:** _projects, services and environments, and what they are_
7
+ - **Easily confused:** _pairs of words that sound alike but mean different things here_
8
+
9
+ Ask your agent: _Pull the terms from our repository, docs and recent pull requests_
@@ -0,0 +1,9 @@
1
+ # How we ship
2
+
3
+ How a change gets from an idea to production, so nobody has to ask twice.
4
+
5
+ - **From idea to plan:** _where ideas are written down and who signs off on a plan_
6
+ - **Review and merge:** _branching, who reviews, what has to pass before merging_
7
+ - **Release:** _how and when we deploy, how we roll back, who is on call_
8
+
9
+ Ask your agent: _Draft this from our CI configuration and contributing guide_
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Garry Tan
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,20 @@
1
+ # Source
2
+
3
+ The skills in this plugin are adapted from gstack, Garry Tan's set of Claude Code skills.
4
+
5
+ - Repository: https://github.com/garrytan/gstack
6
+ - Commit: `db745675bdf9f575276db2dcd132d3c047218a12` (v1.91.33.0)
7
+ - License: MIT, in `LICENSE` beside this file (Copyright (c) 2026 Garry Tan)
8
+
9
+ Skills taken: `office-hours`, `plan-ceo-review`, `plan-eng-review` and `review`. Their method is gstack's — the forcing questions, the premise challenge and alternatives, the review modes and sections, the cognitive patterns, the error and rescue map, the test coverage diagram, the pre-landing checklist and the fix-first heuristic — and much of the wording is too. `office-hours/sections/phase-2a-startup-diagnostic.md` and `phase-2b-builder-brainstorm.md` are gstack's text with only the question-tool references removed, and `review/checklist.md` is gstack's checklist with the specialist-reviewer column and one suppression removed.
10
+
11
+ Adapted for Hexis. gstack's skills are generated from templates and run inside a gstack install: every one starts with a preamble that calls gstack's own scripts (`~/.claude/skills/gstack/bin/…`: update checks, telemetry, session state, learnings, question preferences, review logs, a "brain" cache) and reads files gstack's `./setup` installs. None of that exists outside gstack, so each `SKILL.md` here was rewritten from its template as instructions that stand on their own:
12
+
13
+ - dropped the preamble, telemetry, learnings capture and search, question tuning, the review log and readiness dashboard, the brain cache and write-back, plan-mode gates and the self-check against generated sections;
14
+ - dropped the optional outside-voice review through the Codex CLI and the "Aside" browser research (web research now uses whatever search the agent has, with the same privacy rule), and office-hours' visual mockups, which need gstack's design binary;
15
+ - dropped office-hours' builder profile and founder-resources closing, and review's Greptile triage, parallel specialist reviewers, exploratory QA, slop scan and adversarial pass, all of which run gstack tooling;
16
+ - design docs, CEO plans and reviews are saved as pages in the Hexis knowledge base instead of `~/.gstack/projects/`, and earlier designs are found there;
17
+ - the long generated `review-sections.md` of each plan review was condensed into its `SKILL.md`;
18
+ - `allowed-tools` lists naming Claude Code's tools were removed, since Hexis matches that field against the tools in its own catalog.
19
+
20
+ Not taken: `ship`, whose core steps (the review readiness gate, `gstack-version-bump`, `gstack-evidence`, `gstack-review-read`) are gstack scripts installed by its setup; and `retro`, whose metrics come from gstack's `gstack-retro-metrics` and `gstack-global-discover` programs.
@@ -0,0 +1,19 @@
1
+ ---
2
+ # THIS BLOCK (the frontmatter) governs this access.md FILE only: who may
3
+ # see it and who may change it. `read: everyone` here means every signed-in
4
+ # person can see that the plugin exists. It admits nobody.
5
+ read:
6
+ - everyone
7
+ ---
8
+ # THIS BLOCK (the body) governs the PLUGIN FOLDER - its skills, tools and
9
+ # manifest. A starter plugin is for the whole team, so everyone may use it
10
+ # and admins change it. To narrow it, replace `everyone` under `read:` with a
11
+ # role from roles.yaml (as `role/<Name>`, so a group of the same name can
12
+ # never stand in for it), a group from groups.yaml, or a person as
13
+ # `Name <email>`. Keep this block pure YAML; explanations go in `#` lines.
14
+ read:
15
+ - everyone
16
+ write:
17
+ - role/Admin
18
+ owner:
19
+ - role/Admin
@@ -0,0 +1,10 @@
1
+ {
2
+ "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
3
+ "name": "engineering-starter",
4
+ "displayName": "Engineering starter",
5
+ "description": "Think an idea through before building it, pressure-test a plan's scope, lock a plan's architecture and tests, and review a diff before it lands.",
6
+ "version": "1.0.0",
7
+ "author": {
8
+ "name": "Garry Tan (gstack), adapted for Hexis by Bevel"
9
+ }
10
+ }