spine-framework 0.4.4 → 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 (283) 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/hash-api-key.ts +183 -79
  15. package/.framework/functions/_shared/logging.ts +562 -224
  16. package/.framework/functions/_shared/middleware.ts +47 -44
  17. package/.framework/functions/admin-data.ts +39 -28
  18. package/.framework/functions/ai-agents.ts +10 -6
  19. package/.framework/functions/api-keys.ts +301 -122
  20. package/.framework/functions/apps.ts +43 -26
  21. package/.framework/functions/cil-ingest.ts +48 -15
  22. package/.framework/functions/debug-auth.ts +14 -8
  23. package/.framework/functions/deliveries.ts +39 -12
  24. package/.framework/functions/embeddings.ts +145 -76
  25. package/.framework/functions/integration-outbound.ts +67 -27
  26. package/.framework/functions/integrations.ts +254 -127
  27. package/.framework/functions/logs.ts +273 -133
  28. package/.framework/functions/observability.ts +277 -147
  29. package/.framework/functions/pipeline-executions.ts +1 -1
  30. package/.framework/functions/pipelines.ts +14 -9
  31. package/.framework/functions/prompt-configs.ts +7 -4
  32. package/.framework/functions/roles.ts +8 -5
  33. package/.framework/functions/security.ts +30 -17
  34. package/.framework/functions/system-cron.ts +240 -127
  35. package/.framework/functions/tests.ts +7 -6
  36. package/.framework/functions/timers.ts +310 -107
  37. package/.framework/functions/triggers.ts +28 -13
  38. package/.framework/functions/types.ts +13 -10
  39. package/.framework/migrations/069_log_stats_window.sql +54 -0
  40. package/.framework/migrations/070_app_type_schema_rpcs.sql +166 -0
  41. package/.framework/migrations/071_timer_interval_keys.sql +96 -0
  42. package/.framework/migrations/072_slug_autofill.sql +77 -0
  43. package/.framework/migrations/073_seed_member_roles.sql +26 -0
  44. package/.framework/src/apps/admin/index.tsx +1141 -775
  45. package/.framework/src/components/ErrorBoundary.tsx +136 -0
  46. package/.framework/src/components/admin/AdminListPage.tsx +81 -73
  47. package/.framework/src/components/admin/AdminSidebar.tsx +88 -79
  48. package/.framework/src/components/admin/EntitySelect.tsx +181 -0
  49. package/.framework/src/components/admin/PageInstructions.tsx +86 -127
  50. package/.framework/src/components/app-shell/GenericDetailPage.tsx +37 -13
  51. package/.framework/src/components/app-shell/GenericListPage.tsx +28 -32
  52. package/.framework/src/components/layout/Sidebar.tsx +300 -177
  53. package/.framework/src/components/runtime/DataDetailPage.tsx +67 -35
  54. package/.framework/src/components/runtime/DataHeader.tsx +96 -48
  55. package/.framework/src/components/runtime/DataListPage.tsx +3 -26
  56. package/.framework/src/components/runtime/DataStats.tsx +10 -10
  57. package/.framework/src/components/runtime/DataTable.tsx +12 -10
  58. package/.framework/src/components/ui/sheet.tsx +24 -26
  59. package/.framework/src/components/ui/textarea.tsx +74 -48
  60. package/.framework/src/hooks/useEntityList.ts +12 -9
  61. package/.framework/src/hooks/useListSchema.ts +108 -58
  62. package/.framework/src/instructions/README.md +57 -0
  63. package/.framework/src/instructions/ai-agents.md +69 -0
  64. package/.framework/src/instructions/alerts.md +80 -0
  65. package/.framework/src/instructions/api-keys.md +87 -0
  66. package/.framework/src/instructions/apps.md +77 -0
  67. package/.framework/src/instructions/concepts/ai-and-prompts.md +150 -0
  68. package/.framework/src/instructions/concepts/apps-and-renderers.md +162 -0
  69. package/.framework/src/instructions/concepts/auth-and-api-keys.md +133 -0
  70. package/.framework/src/instructions/concepts/automation.md +186 -0
  71. package/.framework/src/instructions/concepts/concurrency-and-idempotency.md +125 -0
  72. package/.framework/src/instructions/concepts/core-vs-custom.md +124 -0
  73. package/.framework/src/instructions/concepts/design-schema.md +152 -0
  74. package/.framework/src/instructions/concepts/integrations-and-webhooks.md +127 -0
  75. package/.framework/src/instructions/concepts/observability.md +116 -0
  76. package/.framework/src/instructions/concepts/permissions.md +150 -0
  77. package/.framework/src/instructions/concepts/runtime-records.md +111 -0
  78. package/.framework/src/instructions/concepts/scope-and-accounts.md +112 -0
  79. package/.framework/src/instructions/concepts/spine-way.md +172 -0
  80. package/.framework/src/instructions/deliveries.md +59 -0
  81. package/.framework/src/instructions/guide/00-orientation.md +106 -0
  82. package/.framework/src/instructions/guide/01-install-and-first-run.md +253 -0
  83. package/.framework/src/instructions/guide/02-project-map.md +147 -0
  84. package/.framework/src/instructions/guide/03-domain-model.md +223 -0
  85. package/.framework/src/instructions/guide/04-first-app.md +227 -0
  86. package/.framework/src/instructions/guide/05-glossary.md +183 -0
  87. package/.framework/src/instructions/integrations.md +96 -0
  88. package/.framework/src/instructions/internal/cil-markers.md +83 -0
  89. package/.framework/src/instructions/invites.md +60 -0
  90. package/.framework/src/instructions/kb.md +80 -0
  91. package/.framework/src/instructions/logs.md +77 -0
  92. package/.framework/src/instructions/observability.md +61 -0
  93. package/.framework/src/instructions/operations/deployment.md +115 -0
  94. package/.framework/src/instructions/operations/migrations.md +125 -0
  95. package/.framework/src/instructions/operations/security-checklist.md +148 -0
  96. package/.framework/src/instructions/operations/troubleshooting.md +170 -0
  97. package/.framework/src/instructions/operations/upgrade.md +116 -0
  98. package/.framework/src/instructions/pipeline-executions.md +62 -0
  99. package/.framework/src/instructions/pipelines.md +78 -0
  100. package/.framework/src/instructions/prompts.md +95 -0
  101. package/.framework/src/instructions/reference/api/admin-data.md +162 -0
  102. package/.framework/src/instructions/reference/api/auth.md +113 -0
  103. package/.framework/src/instructions/reference/api/errors-and-envelopes.md +113 -0
  104. package/.framework/src/instructions/reference/app-manifest.md +150 -0
  105. package/.framework/src/instructions/reference/cli.md +124 -0
  106. package/.framework/src/instructions/reference/database.md +132 -0
  107. package/.framework/src/instructions/reference/design-schema.md +280 -0
  108. package/.framework/src/instructions/reference/env-vars.md +133 -0
  109. package/.framework/src/instructions/reference/functions/account-nodes.md +75 -0
  110. package/.framework/src/instructions/reference/functions/admin-data.md +195 -0
  111. package/.framework/src/instructions/reference/functions/admin-funnel.md +90 -0
  112. package/.framework/src/instructions/reference/functions/admin-install-funnel.md +107 -0
  113. package/.framework/src/instructions/reference/functions/admin-signals.md +102 -0
  114. package/.framework/src/instructions/reference/functions/ai-agents.md +148 -0
  115. package/.framework/src/instructions/reference/functions/ai-interactions.md +156 -0
  116. package/.framework/src/instructions/reference/functions/api-keys.md +130 -0
  117. package/.framework/src/instructions/reference/functions/apps.md +140 -0
  118. package/.framework/src/instructions/reference/functions/auth.md +99 -0
  119. package/.framework/src/instructions/reference/functions/debug-auth.md +91 -0
  120. package/.framework/src/instructions/reference/functions/deliveries.md +110 -0
  121. package/.framework/src/instructions/reference/functions/embeddings.md +166 -0
  122. package/.framework/src/instructions/reference/functions/eval-harness.md +149 -0
  123. package/.framework/src/instructions/reference/functions/index.md +103 -0
  124. package/.framework/src/instructions/reference/functions/integration-outbound.md +200 -0
  125. package/.framework/src/instructions/reference/functions/integration-routes.md +151 -0
  126. package/.framework/src/instructions/reference/functions/integrations.md +130 -0
  127. package/.framework/src/instructions/reference/functions/invites.md +182 -0
  128. package/.framework/src/instructions/reference/functions/item-progress.md +107 -0
  129. package/.framework/src/instructions/reference/functions/kb.md +166 -0
  130. package/.framework/src/instructions/reference/functions/logs.md +141 -0
  131. package/.framework/src/instructions/reference/functions/observability.md +105 -0
  132. package/.framework/src/instructions/reference/functions/pipeline-executions.md +132 -0
  133. package/.framework/src/instructions/reference/functions/pipeline-runner-background.md +121 -0
  134. package/.framework/src/instructions/reference/functions/pipelines.md +136 -0
  135. package/.framework/src/instructions/reference/functions/prompt-configs.md +121 -0
  136. package/.framework/src/instructions/reference/functions/roles.md +121 -0
  137. package/.framework/src/instructions/reference/functions/security.md +140 -0
  138. package/.framework/src/instructions/reference/functions/system-cron.md +136 -0
  139. package/.framework/src/instructions/reference/functions/system.md +106 -0
  140. package/.framework/src/instructions/reference/functions/tests.md +97 -0
  141. package/.framework/src/instructions/reference/functions/timers.md +117 -0
  142. package/.framework/src/instructions/reference/functions/trigger-scheduler.md +102 -0
  143. package/.framework/src/instructions/reference/functions/triggers.md +140 -0
  144. package/.framework/src/instructions/reference/functions/types.md +146 -0
  145. package/.framework/src/instructions/reference/seeds.md +126 -0
  146. package/.framework/src/instructions/reference/shared-modules.md +127 -0
  147. package/.framework/src/instructions/reference/spine-config.md +114 -0
  148. package/.framework/src/instructions/roles.md +80 -0
  149. package/.framework/src/instructions/runtime-detail.md +70 -0
  150. package/.framework/src/instructions/runtime-list.md +77 -0
  151. package/.framework/src/instructions/security.md +67 -0
  152. package/.framework/src/instructions/tasks/add-a-pipeline.md +110 -0
  153. package/.framework/src/instructions/tasks/add-a-role.md +96 -0
  154. package/.framework/src/instructions/tasks/add-a-timer.md +114 -0
  155. package/.framework/src/instructions/tasks/add-a-trigger.md +106 -0
  156. package/.framework/src/instructions/tasks/add-a-type.md +151 -0
  157. package/.framework/src/instructions/tasks/add-a-webhook.md +108 -0
  158. package/.framework/src/instructions/tasks/add-an-ai-agent.md +108 -0
  159. package/.framework/src/instructions/tasks/add-an-integration.md +124 -0
  160. package/.framework/src/instructions/tasks/build-a-custom-page.md +118 -0
  161. package/.framework/src/instructions/tasks/package-and-install-an-app.md +127 -0
  162. package/.framework/src/instructions/tasks/test-your-code.md +108 -0
  163. package/.framework/src/instructions/tasks/write-a-function.md +132 -0
  164. package/.framework/src/instructions/tasks/write-a-migration.md +110 -0
  165. package/.framework/src/instructions/testing.md +59 -0
  166. package/.framework/src/instructions/timers.md +82 -0
  167. package/.framework/src/instructions/triggers.md +69 -0
  168. package/.framework/src/instructions/types.md +93 -0
  169. package/.framework/src/pages/NotFoundPage.tsx +62 -31
  170. package/.framework/src/pages/admin/AIAgentDetailPage.tsx +117 -106
  171. package/.framework/src/pages/admin/AIAgentsPage.tsx +86 -48
  172. package/.framework/src/pages/admin/APIKeyDetailPage.tsx +153 -152
  173. package/.framework/src/pages/admin/APIKeysPage.tsx +91 -90
  174. package/.framework/src/pages/admin/AlertsConfigPage.tsx +29 -18
  175. package/.framework/src/pages/admin/AppDetailPage.tsx +6 -60
  176. package/.framework/src/pages/admin/AppsPage.tsx +104 -66
  177. package/.framework/src/pages/admin/DeliveriesPage.tsx +5 -5
  178. package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +5 -23
  179. package/.framework/src/pages/admin/EmbeddingsPage.tsx +5 -26
  180. package/.framework/src/pages/admin/IntegrationDetailPage.tsx +7 -7
  181. package/.framework/src/pages/admin/IntegrationsPage.tsx +85 -43
  182. package/.framework/src/pages/admin/LogsPage.tsx +144 -76
  183. package/.framework/src/pages/admin/ObservabilityDashboard.tsx +223 -140
  184. package/.framework/src/pages/admin/PipelineDetailPage.tsx +134 -113
  185. package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +108 -45
  186. package/.framework/src/pages/admin/PipelinesPage.tsx +160 -115
  187. package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +96 -98
  188. package/.framework/src/pages/admin/PromptConfigsPage.tsx +101 -59
  189. package/.framework/src/pages/admin/RoleDetailPage.tsx +90 -79
  190. package/.framework/src/pages/admin/RolesPage.tsx +86 -43
  191. package/.framework/src/pages/admin/SecurityPage.tsx +1 -1
  192. package/.framework/src/pages/admin/TestingDashboard.tsx +16 -28
  193. package/.framework/src/pages/admin/TimerDetailPage.tsx +117 -100
  194. package/.framework/src/pages/admin/TimersPage.tsx +90 -62
  195. package/.framework/src/pages/admin/TriggerDetailPage.tsx +90 -83
  196. package/.framework/src/pages/admin/TriggersPage.tsx +124 -99
  197. package/.framework/src/pages/admin/TypeDetailPage.tsx +152 -138
  198. package/.framework/src/pages/admin/TypesPage.tsx +90 -48
  199. package/.framework/src/pages/admin/cil/CILAgentPage.tsx +17 -25
  200. package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +17 -27
  201. package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +72 -40
  202. package/.framework/src/pages/admin/cil/CILFileListPage.tsx +321 -129
  203. package/.framework/src/pages/admin/cil/CILFileSelectPage.tsx +18 -29
  204. package/.framework/src/pages/admin/cil/CILGraphPage.tsx +26 -38
  205. package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +34 -46
  206. package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +189 -103
  207. package/.framework/src/pages/admin/cil/CILSearchPage.tsx +246 -136
  208. package/.framework/src/pages/admin/cil/CILSuggestionsPage.tsx +11 -22
  209. package/.framework/src/pages/admin/cil/CILVersionsPage.tsx +9 -20
  210. package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +26 -38
  211. package/.framework/src/pages/admin/kb/KBAdminPage.tsx +7 -26
  212. package/.framework/templates/agent/AGENTS.md +150 -0
  213. package/.framework/templates/agent/skills/spine-add-ai-agent/SKILL.md +58 -0
  214. package/.framework/templates/agent/skills/spine-add-automation/SKILL.md +62 -0
  215. package/.framework/templates/agent/skills/spine-add-integration/SKILL.md +63 -0
  216. package/.framework/templates/agent/skills/spine-architect/SKILL.md +86 -0
  217. package/.framework/templates/agent/skills/spine-install-app/SKILL.md +72 -0
  218. package/.framework/templates/agent/skills/spine-migration/SKILL.md +75 -0
  219. package/.framework/templates/agent/skills/spine-new-app/SKILL.md +67 -0
  220. package/.framework/templates/agent/skills/spine-new-function/SKILL.md +65 -0
  221. package/.framework/templates/agent/skills/spine-new-type/SKILL.md +65 -0
  222. package/.framework/templates/agent/skills/spine-schema/SKILL.md +77 -0
  223. package/.framework/templates/agent/skills/spine-test/SKILL.md +67 -0
  224. package/.framework/templates/agent/skills/spine-troubleshoot/SKILL.md +74 -0
  225. package/.framework/templates/agent/skills/spine-upgrade/SKILL.md +69 -0
  226. package/.framework/templates/project.json +4 -1
  227. package/.framework/tests/unit/account-scoping-gates.test.ts +392 -0
  228. package/.framework/tests/unit/agent-files.test.ts +355 -0
  229. package/.framework/tests/unit/agent-runner.test.ts +479 -44
  230. package/.framework/tests/unit/api-keys-create-scope-gate.test.ts +160 -0
  231. package/.framework/tests/unit/api-keys-omit-secret-fields.test.ts +38 -0
  232. package/.framework/tests/unit/bootstrap.test.ts +242 -0
  233. package/.framework/tests/unit/cli-context-api-key.test.ts +114 -0
  234. package/.framework/tests/unit/debug-auth.test.ts +38 -0
  235. package/.framework/tests/unit/deliveries-account-scoping.test.ts +185 -0
  236. package/.framework/tests/unit/integration-outbound-credentials.test.ts +167 -0
  237. package/.framework/tests/unit/integrations-audit-redaction.test.ts +130 -0
  238. package/.framework/tests/unit/logging-app-id.test.ts +75 -0
  239. package/.framework/tests/unit/system-context-denial.test.ts +145 -0
  240. package/.framework/tests/unit/system-cron.test.ts +240 -0
  241. package/.framework/tests/unit/timers.test.ts +159 -0
  242. package/README.md +125 -166
  243. package/config/tsconfig.cli.json +2 -2
  244. package/package.json +15 -4
  245. package/templates/project/package-lock.json +2 -2
  246. package/.framework/docs/admin-routes.md +0 -76
  247. package/.framework/docs/api-docs-progress.md +0 -38
  248. package/.framework/docs/api-governance.md +0 -146
  249. package/.framework/docs/api-testing-results.md +0 -212
  250. package/.framework/docs/assembly-launch-guide.md +0 -138
  251. package/.framework/docs/audit-results.md +0 -590
  252. package/.framework/docs/db-api-inventory.md +0 -95
  253. package/.framework/docs/gap-remediation-backlog.md +0 -103
  254. package/.framework/docs/ui-adoption-verification.md +0 -111
  255. package/.framework/docs/ui-api-coverage.md +0 -84
  256. package/.framework/docs/v2-compatibility-audit.md +0 -228
  257. package/.framework/mcp/index.ts +0 -133
  258. package/.framework/mcp/load-env.ts +0 -60
  259. package/.framework/mcp/shared/app-manifest.ts +0 -275
  260. package/.framework/mcp/shared/db.ts +0 -477
  261. package/.framework/mcp/shared/kb.ts +0 -118
  262. package/.framework/mcp/tools/architect.ts +0 -431
  263. package/.framework/mcp/tools/cil/context.ts +0 -345
  264. package/.framework/mcp/tools/cil/graph.ts +0 -242
  265. package/.framework/mcp/tools/cil/ingest.ts +0 -1217
  266. package/.framework/mcp/tools/cil/pipeline-orchestrator.ts +0 -693
  267. package/.framework/mcp/tools/cil/pipeline.ts +0 -767
  268. package/.framework/mcp/tools/cil/project.ts +0 -791
  269. package/.framework/mcp/tools/cil/retrieval.ts +0 -336
  270. package/.framework/mcp/tools/cil/search-core.ts +0 -454
  271. package/.framework/mcp/tools/cil/search.ts +0 -97
  272. package/.framework/mcp/tools/cil/suggest.ts +0 -186
  273. package/.framework/mcp/tools/cil/validate.ts +0 -1369
  274. package/.framework/mcp/tools/kb/delete.ts +0 -139
  275. package/.framework/mcp/tools/kb/index.ts +0 -52
  276. package/.framework/mcp/tools/kb/ingest.ts +0 -84
  277. package/.framework/mcp/tools/kb/list-types.ts +0 -102
  278. package/.framework/mcp/tools/kb/publish.ts +0 -100
  279. package/.framework/mcp/tools/kb/reindex.ts +0 -86
  280. package/.framework/mcp/tools/kb/revoke.ts +0 -85
  281. package/.framework/mcp/tools/kb/search.ts +0 -101
  282. package/.framework/mcp/tools/kb/upsert.ts +0 -125
  283. 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"]