spine-framework 0.4.3 → 0.5.0-rc.4

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 (320) hide show
  1. package/.env.example +13 -3
  2. package/.framework/cli/commands/bootstrap.ts +392 -0
  3. package/.framework/cli/commands/dev.ts +91 -218
  4. package/.framework/cli/commands/doctor.ts +132 -26
  5. package/.framework/cli/commands/generate.ts +38 -298
  6. package/.framework/cli/commands/init.ts +20 -1
  7. package/.framework/cli/commands/migrate.ts +36 -30
  8. package/.framework/cli/commands/migrations.ts +16 -56
  9. package/.framework/cli/commands/upgrade.ts +35 -0
  10. package/.framework/cli/commands/validate-schema.ts +147 -0
  11. package/.framework/cli/context.ts +223 -110
  12. package/.framework/cli/index.ts +6 -0
  13. package/.framework/cli/lib/project-files.ts +241 -1
  14. package/.framework/functions/_shared/agent-runner.ts +1000 -81
  15. package/.framework/functions/_shared/cil.ts +2 -1
  16. package/.framework/functions/_shared/db.ts +3 -6
  17. package/.framework/functions/_shared/hash-api-key.ts +183 -79
  18. package/.framework/functions/_shared/kb.ts +61 -7
  19. package/.framework/functions/_shared/logging.ts +562 -224
  20. package/.framework/functions/_shared/message-sequence.ts +53 -0
  21. package/.framework/functions/_shared/middleware.ts +47 -44
  22. package/.framework/functions/_shared/pipeline-runner.ts +150 -37
  23. package/.framework/functions/_shared/principal.ts +9 -6
  24. package/.framework/functions/_shared/trigger-engine.ts +149 -40
  25. package/.framework/functions/admin-data.ts +48 -31
  26. package/.framework/functions/ai-agents.ts +103 -33
  27. package/.framework/functions/api-keys.ts +301 -122
  28. package/.framework/functions/apps.ts +43 -26
  29. package/.framework/functions/cil-ingest.ts +48 -15
  30. package/.framework/functions/debug-auth.ts +14 -8
  31. package/.framework/functions/deliveries.ts +39 -12
  32. package/.framework/functions/embeddings.ts +145 -76
  33. package/.framework/functions/integration-outbound.ts +67 -27
  34. package/.framework/functions/integrations.ts +254 -127
  35. package/.framework/functions/logs.ts +273 -133
  36. package/.framework/functions/observability.ts +277 -147
  37. package/.framework/functions/pipeline-executions.ts +1 -1
  38. package/.framework/functions/pipeline-runner-background.ts +120 -0
  39. package/.framework/functions/pipelines.ts +14 -9
  40. package/.framework/functions/prompt-configs.ts +7 -4
  41. package/.framework/functions/roles.ts +8 -5
  42. package/.framework/functions/security.ts +30 -17
  43. package/.framework/functions/system-cron.ts +250 -128
  44. package/.framework/functions/tests.ts +7 -6
  45. package/.framework/functions/timers.ts +310 -107
  46. package/.framework/functions/trigger-scheduler.ts +65 -5
  47. package/.framework/functions/triggers.ts +28 -13
  48. package/.framework/functions/types.ts +13 -10
  49. package/.framework/migrations/064_episode_leases.sql +196 -0
  50. package/.framework/migrations/065_execution_tables_updated_at.sql +20 -0
  51. package/.framework/migrations/066_episode_steal_thread_merge.sql +148 -0
  52. package/.framework/migrations/067_episode_lease_stale_steal.sql +93 -0
  53. package/.framework/migrations/068_cron_schedule_timer_rpcs.sql +251 -0
  54. package/.framework/migrations/069_log_stats_window.sql +54 -0
  55. package/.framework/migrations/070_app_type_schema_rpcs.sql +166 -0
  56. package/.framework/migrations/071_timer_interval_keys.sql +96 -0
  57. package/.framework/migrations/072_slug_autofill.sql +77 -0
  58. package/.framework/migrations/073_seed_member_roles.sql +26 -0
  59. package/.framework/schemas/spine.config.schema.json +62 -0
  60. package/.framework/src/App.tsx +3 -1
  61. package/.framework/src/apps/admin/index.tsx +1141 -775
  62. package/.framework/src/components/ErrorBoundary.tsx +136 -0
  63. package/.framework/src/components/admin/AdminListPage.tsx +81 -73
  64. package/.framework/src/components/admin/AdminSidebar.tsx +92 -81
  65. package/.framework/src/components/admin/EntitySelect.tsx +181 -0
  66. package/.framework/src/components/admin/PageInstructions.tsx +86 -127
  67. package/.framework/src/components/app-shell/GenericAppShell.tsx +3 -1
  68. package/.framework/src/components/app-shell/GenericDetailPage.tsx +37 -13
  69. package/.framework/src/components/app-shell/GenericListPage.tsx +28 -32
  70. package/.framework/src/components/auth/TurnstileWidget.tsx +9 -6
  71. package/.framework/src/components/kb/KBArticleEditor.tsx +49 -6
  72. package/.framework/src/components/layout/Layout.tsx +4 -2
  73. package/.framework/src/components/layout/Sidebar.tsx +304 -179
  74. package/.framework/src/components/runtime/DataDetailPage.tsx +67 -35
  75. package/.framework/src/components/runtime/DataHeader.tsx +96 -48
  76. package/.framework/src/components/runtime/DataListPage.tsx +3 -26
  77. package/.framework/src/components/runtime/DataStats.tsx +10 -10
  78. package/.framework/src/components/runtime/DataTable.tsx +12 -10
  79. package/.framework/src/components/ui/sheet.tsx +24 -26
  80. package/.framework/src/components/ui/textarea.tsx +74 -48
  81. package/.framework/src/hooks/useBranding.ts +47 -0
  82. package/.framework/src/hooks/useEntityList.ts +12 -9
  83. package/.framework/src/hooks/useListSchema.ts +108 -58
  84. package/.framework/src/instructions/README.md +57 -0
  85. package/.framework/src/instructions/ai-agents.md +69 -0
  86. package/.framework/src/instructions/alerts.md +80 -0
  87. package/.framework/src/instructions/api-keys.md +87 -0
  88. package/.framework/src/instructions/apps.md +77 -0
  89. package/.framework/src/instructions/concepts/ai-and-prompts.md +150 -0
  90. package/.framework/src/instructions/concepts/apps-and-renderers.md +162 -0
  91. package/.framework/src/instructions/concepts/auth-and-api-keys.md +133 -0
  92. package/.framework/src/instructions/concepts/automation.md +186 -0
  93. package/.framework/src/instructions/concepts/concurrency-and-idempotency.md +125 -0
  94. package/.framework/src/instructions/concepts/core-vs-custom.md +124 -0
  95. package/.framework/src/instructions/concepts/design-schema.md +152 -0
  96. package/.framework/src/instructions/concepts/integrations-and-webhooks.md +127 -0
  97. package/.framework/src/instructions/concepts/observability.md +116 -0
  98. package/.framework/src/instructions/concepts/permissions.md +150 -0
  99. package/.framework/src/instructions/concepts/runtime-records.md +111 -0
  100. package/.framework/src/instructions/concepts/scope-and-accounts.md +112 -0
  101. package/.framework/src/instructions/concepts/spine-way.md +172 -0
  102. package/.framework/src/instructions/deliveries.md +59 -0
  103. package/.framework/src/instructions/guide/00-orientation.md +106 -0
  104. package/.framework/src/instructions/guide/01-install-and-first-run.md +253 -0
  105. package/.framework/src/instructions/guide/02-project-map.md +147 -0
  106. package/.framework/src/instructions/guide/03-domain-model.md +223 -0
  107. package/.framework/src/instructions/guide/04-first-app.md +227 -0
  108. package/.framework/src/instructions/guide/05-glossary.md +183 -0
  109. package/.framework/src/instructions/integrations.md +96 -0
  110. package/.framework/src/instructions/internal/cil-markers.md +83 -0
  111. package/.framework/src/instructions/invites.md +60 -0
  112. package/.framework/src/instructions/kb.md +80 -0
  113. package/.framework/src/instructions/logs.md +77 -0
  114. package/.framework/src/instructions/observability.md +61 -0
  115. package/.framework/src/instructions/operations/deployment.md +115 -0
  116. package/.framework/src/instructions/operations/migrations.md +125 -0
  117. package/.framework/src/instructions/operations/security-checklist.md +148 -0
  118. package/.framework/src/instructions/operations/troubleshooting.md +170 -0
  119. package/.framework/src/instructions/operations/upgrade.md +116 -0
  120. package/.framework/src/instructions/pipeline-executions.md +62 -0
  121. package/.framework/src/instructions/pipelines.md +78 -0
  122. package/.framework/src/instructions/prompts.md +95 -0
  123. package/.framework/src/instructions/reference/api/admin-data.md +162 -0
  124. package/.framework/src/instructions/reference/api/auth.md +113 -0
  125. package/.framework/src/instructions/reference/api/errors-and-envelopes.md +113 -0
  126. package/.framework/src/instructions/reference/app-manifest.md +150 -0
  127. package/.framework/src/instructions/reference/cli.md +124 -0
  128. package/.framework/src/instructions/reference/database.md +132 -0
  129. package/.framework/src/instructions/reference/design-schema.md +280 -0
  130. package/.framework/src/instructions/reference/env-vars.md +133 -0
  131. package/.framework/src/instructions/reference/functions/account-nodes.md +75 -0
  132. package/.framework/src/instructions/reference/functions/admin-data.md +195 -0
  133. package/.framework/src/instructions/reference/functions/admin-funnel.md +90 -0
  134. package/.framework/src/instructions/reference/functions/admin-install-funnel.md +107 -0
  135. package/.framework/src/instructions/reference/functions/admin-signals.md +102 -0
  136. package/.framework/src/instructions/reference/functions/ai-agents.md +148 -0
  137. package/.framework/src/instructions/reference/functions/ai-interactions.md +156 -0
  138. package/.framework/src/instructions/reference/functions/api-keys.md +130 -0
  139. package/.framework/src/instructions/reference/functions/apps.md +140 -0
  140. package/.framework/src/instructions/reference/functions/auth.md +99 -0
  141. package/.framework/src/instructions/reference/functions/debug-auth.md +91 -0
  142. package/.framework/src/instructions/reference/functions/deliveries.md +110 -0
  143. package/.framework/src/instructions/reference/functions/embeddings.md +166 -0
  144. package/.framework/src/instructions/reference/functions/eval-harness.md +149 -0
  145. package/.framework/src/instructions/reference/functions/index.md +103 -0
  146. package/.framework/src/instructions/reference/functions/integration-outbound.md +200 -0
  147. package/.framework/src/instructions/reference/functions/integration-routes.md +151 -0
  148. package/.framework/src/instructions/reference/functions/integrations.md +130 -0
  149. package/.framework/src/instructions/reference/functions/invites.md +182 -0
  150. package/.framework/src/instructions/reference/functions/item-progress.md +107 -0
  151. package/.framework/src/instructions/reference/functions/kb.md +166 -0
  152. package/.framework/src/instructions/reference/functions/logs.md +141 -0
  153. package/.framework/src/instructions/reference/functions/observability.md +105 -0
  154. package/.framework/src/instructions/reference/functions/pipeline-executions.md +132 -0
  155. package/.framework/src/instructions/reference/functions/pipeline-runner-background.md +121 -0
  156. package/.framework/src/instructions/reference/functions/pipelines.md +136 -0
  157. package/.framework/src/instructions/reference/functions/prompt-configs.md +121 -0
  158. package/.framework/src/instructions/reference/functions/roles.md +121 -0
  159. package/.framework/src/instructions/reference/functions/security.md +140 -0
  160. package/.framework/src/instructions/reference/functions/system-cron.md +136 -0
  161. package/.framework/src/instructions/reference/functions/system.md +106 -0
  162. package/.framework/src/instructions/reference/functions/tests.md +97 -0
  163. package/.framework/src/instructions/reference/functions/timers.md +117 -0
  164. package/.framework/src/instructions/reference/functions/trigger-scheduler.md +102 -0
  165. package/.framework/src/instructions/reference/functions/triggers.md +140 -0
  166. package/.framework/src/instructions/reference/functions/types.md +146 -0
  167. package/.framework/src/instructions/reference/seeds.md +126 -0
  168. package/.framework/src/instructions/reference/shared-modules.md +127 -0
  169. package/.framework/src/instructions/reference/spine-config.md +114 -0
  170. package/.framework/src/instructions/roles.md +80 -0
  171. package/.framework/src/instructions/runtime-detail.md +70 -0
  172. package/.framework/src/instructions/runtime-list.md +77 -0
  173. package/.framework/src/instructions/security.md +67 -0
  174. package/.framework/src/instructions/tasks/add-a-pipeline.md +110 -0
  175. package/.framework/src/instructions/tasks/add-a-role.md +96 -0
  176. package/.framework/src/instructions/tasks/add-a-timer.md +114 -0
  177. package/.framework/src/instructions/tasks/add-a-trigger.md +106 -0
  178. package/.framework/src/instructions/tasks/add-a-type.md +151 -0
  179. package/.framework/src/instructions/tasks/add-a-webhook.md +108 -0
  180. package/.framework/src/instructions/tasks/add-an-ai-agent.md +108 -0
  181. package/.framework/src/instructions/tasks/add-an-integration.md +124 -0
  182. package/.framework/src/instructions/tasks/build-a-custom-page.md +118 -0
  183. package/.framework/src/instructions/tasks/package-and-install-an-app.md +127 -0
  184. package/.framework/src/instructions/tasks/test-your-code.md +108 -0
  185. package/.framework/src/instructions/tasks/write-a-function.md +132 -0
  186. package/.framework/src/instructions/tasks/write-a-migration.md +110 -0
  187. package/.framework/src/instructions/testing.md +59 -0
  188. package/.framework/src/instructions/timers.md +82 -0
  189. package/.framework/src/instructions/triggers.md +69 -0
  190. package/.framework/src/instructions/types.md +93 -0
  191. package/.framework/src/lib/branding.ts +128 -0
  192. package/.framework/src/pages/NoAppPage.tsx +3 -1
  193. package/.framework/src/pages/NotFoundPage.tsx +62 -31
  194. package/.framework/src/pages/SetupPage.tsx +5 -2
  195. package/.framework/src/pages/admin/AIAgentDetailPage.tsx +117 -106
  196. package/.framework/src/pages/admin/AIAgentsPage.tsx +86 -48
  197. package/.framework/src/pages/admin/APIKeyDetailPage.tsx +153 -152
  198. package/.framework/src/pages/admin/APIKeysPage.tsx +91 -90
  199. package/.framework/src/pages/admin/AlertsConfigPage.tsx +29 -18
  200. package/.framework/src/pages/admin/AppDetailPage.tsx +6 -60
  201. package/.framework/src/pages/admin/AppsPage.tsx +104 -66
  202. package/.framework/src/pages/admin/DeliveriesPage.tsx +5 -5
  203. package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +5 -23
  204. package/.framework/src/pages/admin/EmbeddingsPage.tsx +5 -26
  205. package/.framework/src/pages/admin/IntegrationDetailPage.tsx +7 -7
  206. package/.framework/src/pages/admin/IntegrationsPage.tsx +85 -43
  207. package/.framework/src/pages/admin/LogsPage.tsx +144 -76
  208. package/.framework/src/pages/admin/ObservabilityDashboard.tsx +223 -140
  209. package/.framework/src/pages/admin/PipelineDetailPage.tsx +134 -113
  210. package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +108 -45
  211. package/.framework/src/pages/admin/PipelinesPage.tsx +160 -115
  212. package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +96 -98
  213. package/.framework/src/pages/admin/PromptConfigsPage.tsx +101 -59
  214. package/.framework/src/pages/admin/RoleDetailPage.tsx +90 -79
  215. package/.framework/src/pages/admin/RolesPage.tsx +86 -43
  216. package/.framework/src/pages/admin/SecurityPage.tsx +1 -1
  217. package/.framework/src/pages/admin/TestingDashboard.tsx +16 -28
  218. package/.framework/src/pages/admin/TimerDetailPage.tsx +117 -100
  219. package/.framework/src/pages/admin/TimersPage.tsx +90 -62
  220. package/.framework/src/pages/admin/TriggerDetailPage.tsx +90 -83
  221. package/.framework/src/pages/admin/TriggersPage.tsx +124 -99
  222. package/.framework/src/pages/admin/TypeDetailPage.tsx +152 -138
  223. package/.framework/src/pages/admin/TypesPage.tsx +90 -48
  224. package/.framework/src/pages/admin/cil/CILAgentPage.tsx +17 -25
  225. package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +17 -27
  226. package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +72 -40
  227. package/.framework/src/pages/admin/cil/CILFileListPage.tsx +321 -129
  228. package/.framework/src/pages/admin/cil/CILFileSelectPage.tsx +18 -29
  229. package/.framework/src/pages/admin/cil/CILGraphPage.tsx +26 -38
  230. package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +34 -46
  231. package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +189 -103
  232. package/.framework/src/pages/admin/cil/CILSearchPage.tsx +246 -136
  233. package/.framework/src/pages/admin/cil/CILSuggestionsPage.tsx +11 -22
  234. package/.framework/src/pages/admin/cil/CILVersionsPage.tsx +9 -20
  235. package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +26 -38
  236. package/.framework/src/pages/admin/kb/KBAdminPage.tsx +7 -26
  237. package/.framework/src/pages/auth/AuthConfirmPage.tsx +3 -1
  238. package/.framework/src/pages/auth/ForgotPasswordPage.tsx +3 -1
  239. package/.framework/src/pages/auth/LoginPage.tsx +4 -2
  240. package/.framework/src/pages/auth/RegisterPage.tsx +3 -1
  241. package/.framework/templates/agent/AGENTS.md +150 -0
  242. package/.framework/templates/agent/skills/spine-add-ai-agent/SKILL.md +58 -0
  243. package/.framework/templates/agent/skills/spine-add-automation/SKILL.md +62 -0
  244. package/.framework/templates/agent/skills/spine-add-integration/SKILL.md +63 -0
  245. package/.framework/templates/agent/skills/spine-architect/SKILL.md +86 -0
  246. package/.framework/templates/agent/skills/spine-install-app/SKILL.md +72 -0
  247. package/.framework/templates/agent/skills/spine-migration/SKILL.md +75 -0
  248. package/.framework/templates/agent/skills/spine-new-app/SKILL.md +67 -0
  249. package/.framework/templates/agent/skills/spine-new-function/SKILL.md +65 -0
  250. package/.framework/templates/agent/skills/spine-new-type/SKILL.md +65 -0
  251. package/.framework/templates/agent/skills/spine-schema/SKILL.md +77 -0
  252. package/.framework/templates/agent/skills/spine-test/SKILL.md +67 -0
  253. package/.framework/templates/agent/skills/spine-troubleshoot/SKILL.md +74 -0
  254. package/.framework/templates/agent/skills/spine-upgrade/SKILL.md +69 -0
  255. package/.framework/templates/project.json +5 -1
  256. package/.framework/tests/unit/account-scoping-gates.test.ts +392 -0
  257. package/.framework/tests/unit/agent-files.test.ts +355 -0
  258. package/.framework/tests/unit/agent-runner.test.ts +496 -47
  259. package/.framework/tests/unit/api-keys-create-scope-gate.test.ts +160 -0
  260. package/.framework/tests/unit/api-keys-omit-secret-fields.test.ts +38 -0
  261. package/.framework/tests/unit/bootstrap.test.ts +242 -0
  262. package/.framework/tests/unit/cli-context-api-key.test.ts +114 -0
  263. package/.framework/tests/unit/debug-auth.test.ts +38 -0
  264. package/.framework/tests/unit/deliveries-account-scoping.test.ts +185 -0
  265. package/.framework/tests/unit/episode-lease.test.ts +695 -0
  266. package/.framework/tests/unit/integration-outbound-credentials.test.ts +167 -0
  267. package/.framework/tests/unit/integrations-audit-redaction.test.ts +130 -0
  268. package/.framework/tests/unit/kb-ingest-lease.test.ts +19 -0
  269. package/.framework/tests/unit/logging-app-id.test.ts +75 -0
  270. package/.framework/tests/unit/pipeline-runner-background.test.ts +120 -0
  271. package/.framework/tests/unit/pipeline-runner.test.ts +153 -1
  272. package/.framework/tests/unit/principal-cache.test.ts +15 -0
  273. package/.framework/tests/unit/system-context-denial.test.ts +145 -0
  274. package/.framework/tests/unit/system-cron.test.ts +240 -0
  275. package/.framework/tests/unit/timers.test.ts +159 -0
  276. package/.framework/tests/unit/trigger-engine.test.ts +278 -91
  277. package/.framework/tests/unit/trigger-scheduler.test.ts +78 -0
  278. package/README.md +125 -166
  279. package/config/tsconfig.cli.json +2 -2
  280. package/netlify.toml +5 -0
  281. package/package.json +15 -4
  282. package/templates/project/package-lock.json +2 -2
  283. package/.framework/docs/admin-routes.md +0 -76
  284. package/.framework/docs/api-docs-progress.md +0 -38
  285. package/.framework/docs/api-governance.md +0 -146
  286. package/.framework/docs/api-testing-results.md +0 -212
  287. package/.framework/docs/assembly-launch-guide.md +0 -138
  288. package/.framework/docs/audit-results.md +0 -590
  289. package/.framework/docs/db-api-inventory.md +0 -95
  290. package/.framework/docs/gap-remediation-backlog.md +0 -103
  291. package/.framework/docs/ui-adoption-verification.md +0 -111
  292. package/.framework/docs/ui-api-coverage.md +0 -84
  293. package/.framework/docs/v2-compatibility-audit.md +0 -228
  294. package/.framework/mcp/index.ts +0 -133
  295. package/.framework/mcp/load-env.ts +0 -60
  296. package/.framework/mcp/shared/app-manifest.ts +0 -275
  297. package/.framework/mcp/shared/db.ts +0 -477
  298. package/.framework/mcp/shared/kb.ts +0 -118
  299. package/.framework/mcp/tools/architect.ts +0 -431
  300. package/.framework/mcp/tools/cil/context.ts +0 -345
  301. package/.framework/mcp/tools/cil/graph.ts +0 -242
  302. package/.framework/mcp/tools/cil/ingest.ts +0 -1217
  303. package/.framework/mcp/tools/cil/pipeline-orchestrator.ts +0 -693
  304. package/.framework/mcp/tools/cil/pipeline.ts +0 -767
  305. package/.framework/mcp/tools/cil/project.ts +0 -791
  306. package/.framework/mcp/tools/cil/retrieval.ts +0 -336
  307. package/.framework/mcp/tools/cil/search-core.ts +0 -454
  308. package/.framework/mcp/tools/cil/search.ts +0 -97
  309. package/.framework/mcp/tools/cil/suggest.ts +0 -186
  310. package/.framework/mcp/tools/cil/validate.ts +0 -1369
  311. package/.framework/mcp/tools/kb/delete.ts +0 -139
  312. package/.framework/mcp/tools/kb/index.ts +0 -52
  313. package/.framework/mcp/tools/kb/ingest.ts +0 -84
  314. package/.framework/mcp/tools/kb/list-types.ts +0 -102
  315. package/.framework/mcp/tools/kb/publish.ts +0 -100
  316. package/.framework/mcp/tools/kb/reindex.ts +0 -86
  317. package/.framework/mcp/tools/kb/revoke.ts +0 -85
  318. package/.framework/mcp/tools/kb/search.ts +0 -101
  319. package/.framework/mcp/tools/kb/upsert.ts +0 -125
  320. package/.framework/mcp/tools/observability.ts +0 -510
@@ -1,186 +0,0 @@
1
- /**
2
- * @module suggest
3
- * @audience both
4
- * @layer shared-core
5
- * @stability stable
6
- *
7
- * This module provides functionality for suggesting actions or items within the MCP framework, leveraging the McpServer for server interactions. It is designed to integrate with the admin database for data persistence and utilizes Zod for input validation. INVARIANT: All suggestions must be validated before processing to ensure data integrity.
8
- *
9
- * @seeAlso adminDb.js (provides database access for storing suggestions).
10
- * @seeAlso @modelcontextprotocol/sdk/server/mcp.js (contains the McpServer used for server interactions).
11
- * @seeAlso zod (used for input validation).
12
- *
13
- * @cil-generated
14
- */
15
- // CIL[BEGIN stable_id="~/.framework/mcp/tools/cil/suggest.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/mcp/tools/cil/suggest.ts"]
16
- // CIL[DOC-MACRO purpose="Expose CIL suggestion tools (learning and review) on an McpServer and persist suggestions via adminDb"]
17
- // CIL[DOC-RESPONSIBILITY responsibility="Initialize module dependencies and provide the register() entry point that attaches two MCP tools"]
18
- // CIL[DOC-CONTEXT module="suggest" layer="shared-core" related_files=".framework/mcp/shared/db.ts"]
19
- // CIL[DOC-CONTRACT inputs="McpServer instance at runtime" outputs="registered tools with database-backed handlers" errors="none at module scope" side_effects="none"]
20
- // CIL[DOC-MICRO logic_summary="Import McpServer, zod, adminDb, and uuid; delegate to register() for tool registration" notable_decisions="Uses a dedicated type slug cil_suggestion resolved by resolveTypeId"]
21
- // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
22
- // CIL[DOC-STABILITY stable]
23
- // CIL[DOC-AUDIENCE audience="both"]
24
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'
25
- import { z } from 'zod'
26
- import { adminDb } from '../../shared/db.js'
27
- import { v4 as uuid } from 'uuid'
28
- // CIL[DOC-VECTOR type="context" content="purpose='Expose CIL suggestion tools (learning and review) on an McpServer and persist suggestions via adminDb'; No verified external callers; imports: .framework/mcp/shared/db.ts"]
29
- // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
30
- // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
31
- // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
32
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
33
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
34
- // CIL[END stable_id="~/.framework/mcp/tools/cil/suggest.ts:module_header:module_header"]
35
-
36
- // CIL[BEGIN stable_id="~/.framework/mcp/tools/cil/suggest.ts:resolveTypeId:function" type="function" identity="resolveTypeId" parent="~/.framework/mcp/tools/cil/suggest.ts"]
37
- // CIL[DOC-MACRO purpose="Resolve a public.types row id from a slug, restricting to active types"]
38
- // CIL[DOC-RESPONSIBILITY responsibility="Map a type slug to its database id or throw when missing or inactive"]
39
- // CIL[DOC-CONTEXT module="suggest" layer="shared-core" related_files=".framework/mcp/shared/db.ts,.framework/mcp/tools/cil/suggest.ts"]
40
- // CIL[DOC-CONTRACT inputs="slug: string" outputs="string type id" errors="Error('Type not found: {slug}')" side_effects="none"]
41
- // CIL[DOC-MICRO logic_summary="Query adminDb.from('types') for id where slug equals and is_active is true, return first row id" notable_decisions="Filters on is_active to avoid resolving deleted or inactive type records"]
42
- // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
43
- // CIL[DOC-STABILITY stable]
44
- /**
45
- * Retrieves the ID of a type based on its slug from the database. This function ensures that only active types are considered.
46
- *
47
- * @macro Async function that resolves a type ID from a slug.
48
- * @micro Queries the database for a type's ID and throws an error if not found or if inactive.
49
- * @inputSpec
50
- * slug: string (required) — the slug identifier for the type.
51
- * @outputSpec Promise<string> — resolves to the ID of the type as a string.
52
- * @throws Error — Type not found: {slug}
53
- * @sideEffects none
54
- * @stability internal
55
- * @calls adminDb.from('types')
56
- * @cil-generated
57
- */
58
- async function resolveTypeId(slug: string): Promise<string> {
59
- const { data: rows, error } = await adminDb
60
- .from('types')
61
- .select('id')
62
- .filter('slug', 'eq', slug)
63
- .eq('is_active', true)
64
- const typeId = (rows || [])[0]?.id
65
- if (error || !typeId) throw new Error(`Type not found: ${slug}`)
66
- return typeId
67
- }
68
- // CIL[DOC-VECTOR type="context" content="purpose='Resolve a public.types row id from a slug, restricting to active types'; No verified external callers; imports: .framework/mcp/shared/db.ts"]
69
- // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
70
- // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
71
- // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
72
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
73
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
74
- // CIL[END stable_id="~/.framework/mcp/tools/cil/suggest.ts:resolveTypeId:function"]
75
-
76
- /**
77
- * Registers tools for creating and reviewing CIL suggestions within the server. This functionality allows users to submit suggestions and manage their review process.
78
- *
79
- * @macro Tool registration for CIL suggestion management.
80
- * @micro Utilizes a database to insert and retrieve suggestion records based on user actions.
81
- * @inputSpec
82
- * - server: McpServer (required) — The server instance to register tools with.
83
- * @outputSpec Promise<{ content: Array<{ type: string, text: string }> }> — Returns a structured response indicating success or failure of the operation.
84
- * @sideEffects Database writes for inserting suggestions and retrieving existing suggestions.
85
- * @stability internal
86
- * @calls adminDb.from, uuid, resolveTypeId
87
- * @errorHandling Returns a structured error message if the database operation fails.
88
- * @cil-generated */
89
- // CIL[BEGIN stable_id="~/.framework/mcp/tools/cil/suggest.ts:register:function" type="function" identity="register" parent="~/.framework/mcp/tools/cil/suggest.ts"]
90
- // CIL[DOC-MACRO purpose="Register two CIL suggestion tools on an McpServer for creating and reviewing suggestions"]
91
- // CIL[DOC-RESPONSIBILITY responsibility="Attach spine_cil_suggest_learning and spine_cil_review_suggestion to the provided server and handle adminDb persistence"]
92
- // CIL[DOC-CONTEXT module="suggest" layer="shared-core" related_files=".framework/mcp/shared/db.ts,.framework/mcp/tools/cil/suggest.ts"]
93
- // CIL[DOC-CONTRACT inputs="server: McpServer" outputs="void" errors="Returns {ok:false,error} on database failures; validation via Zod" side_effects="Inserts or updates items in adminDb for suggestions and reviews"]
94
- // CIL[DOC-MICRO logic_summary="Resolve the cil_suggestion type, generate a uuid, insert a pending item for new suggestions, then for reviews read the item, update its status and review metadata, and persist the change" notable_decisions="Uses resolveTypeId('cil_suggestion') for the type id; review action sets status to accepted, rejected, or escalated; defaults proposed_by to system"]
95
- // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
96
- // CIL[DOC-STABILITY stable]
97
- export function register(server: McpServer) {
98
- server.registerTool(
99
- 'spine_cil_suggest_learning',
100
- {
101
- description: 'Create a CIL suggestion (learning, note, or KB link) for a chunk or version.',
102
- inputSchema: z.object({
103
- project_id: z.string().uuid().describe('The CIL project UUID'),
104
- version_id: z.string().uuid().optional().describe('Optional version to scope the suggestion to'),
105
- target_stable_id: z.string().optional().describe('Optional stable_id of the chunk this suggestion targets'),
106
- suggestion_type: z.enum(['learning', 'note', 'kb_link']).describe('Type of suggestion'),
107
- content: z.string().min(1).describe('Suggestion content'),
108
- source: z.string().optional().describe('Source or context (ticket, commit, AI reasoning)'),
109
- confidence: z.number().min(0).max(1).optional().describe('Confidence score 0-1'),
110
- proposed_by: z.enum(['ai', 'human', 'system']).optional().describe('Who proposed the suggestion'),
111
- }),
112
- },
113
- async ({ project_id, version_id, target_stable_id, suggestion_type, content, source, confidence, proposed_by }) => {
114
- const typeId = await resolveTypeId('cil_suggestion')
115
- const id = uuid()
116
- const data = {
117
- kb_type: 'cil_suggestion',
118
- project_id,
119
- version_id: version_id || null,
120
- target_stable_id: target_stable_id || null,
121
- suggestion_type,
122
- content,
123
- source: source || null,
124
- confidence: confidence ?? null,
125
- status: 'pending',
126
- proposed_by: proposed_by || 'system',
127
- reviewed_by: null,
128
- reviewed_at: null,
129
- }
130
- const { data: record, error } = await adminDb.from('items').insert({
131
- id,
132
- type_id: typeId,
133
- title: `CIL suggestion: ${suggestion_type}`,
134
- data,
135
- is_active: true,
136
- })
137
- if (error) {
138
- return { content: [{ type: 'text', text: JSON.stringify({ ok: false, error: error.message }) }] }
139
- }
140
- return { content: [{ type: 'text', text: JSON.stringify({ ok: true, suggestion_id: record?.id || id, status: 'pending' }) }] }
141
- }
142
- )
143
-
144
- server.registerTool(
145
- 'spine_cil_review_suggestion',
146
- {
147
- description: 'Review a CIL suggestion: accept, reject, or escalate it.',
148
- inputSchema: z.object({
149
- suggestion_id: z.string().uuid().describe('The CIL suggestion UUID'),
150
- action: z.enum(['accept', 'reject', 'escalate']).describe('Review action'),
151
- reviewed_by: z.string().optional().describe('Reviewer identifier'),
152
- review_notes: z.string().optional().describe('Notes from the reviewer'),
153
- }),
154
- },
155
- async ({ suggestion_id, action, reviewed_by, review_notes }) => {
156
- const { data: rows } = await adminDb
157
- .from('items')
158
- .select('id, data')
159
- .filter('data->>kb_type', 'eq', 'cil_suggestion')
160
- .filter('id', 'eq', suggestion_id)
161
- const suggestion = (rows || [])[0]
162
- if (!suggestion) {
163
- return { content: [{ type: 'text', text: JSON.stringify({ ok: false, error: `Suggestion not found: ${suggestion_id}` }) }] }
164
- }
165
- const newData = { ...suggestion.data }
166
- if (action === 'accept') newData.status = 'accepted'
167
- if (action === 'reject') newData.status = 'rejected'
168
- if (action === 'escalate') newData.status = 'escalated'
169
- newData.reviewed_by = reviewed_by || null
170
- newData.reviewed_at = new Date().toISOString()
171
- if (review_notes) newData.review_notes = review_notes
172
- const { error } = await adminDb.from('items').eq('id', suggestion_id).update({ data: newData, updated_at: new Date().toISOString() })
173
- if (error) {
174
- return { content: [{ type: 'text', text: JSON.stringify({ ok: false, error: error.message }) }] }
175
- }
176
- return { content: [{ type: 'text', text: JSON.stringify({ ok: true, suggestion_id, status: newData.status }) }] }
177
- }
178
- )
179
- }
180
- // CIL[DOC-VECTOR type="context" content="purpose='Register two CIL suggestion tools on an McpServer for creating and reviewing suggestions'; No verified external callers; imports: .framework/mcp/shared/db.ts"]
181
- // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
182
- // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
183
- // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
184
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
185
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
186
- // CIL[END stable_id="~/.framework/mcp/tools/cil/suggest.ts:register:function"]