spine-framework 0.3.124 → 0.3.126

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 (319) hide show
  1. package/.framework/cli/commands/agents.ts +35 -37
  2. package/.framework/cli/commands/auth.ts +35 -34
  3. package/.framework/cli/commands/create-app.ts +104 -40
  4. package/.framework/cli/commands/dev.ts +104 -69
  5. package/.framework/cli/commands/doctor.ts +179 -69
  6. package/.framework/cli/commands/generate.ts +83 -143
  7. package/.framework/cli/commands/init.ts +72 -34
  8. package/.framework/cli/commands/install-app.ts +260 -125
  9. package/.framework/cli/commands/items.ts +33 -44
  10. package/.framework/cli/commands/migrate.ts +122 -40
  11. package/.framework/cli/commands/migrations.ts +33 -40
  12. package/.framework/cli/commands/pipelines.ts +31 -39
  13. package/.framework/cli/commands/status.ts +47 -23
  14. package/.framework/cli/commands/system.ts +47 -37
  15. package/.framework/cli/commands/test.ts +112 -68
  16. package/.framework/cli/commands/validate-app.ts +215 -121
  17. package/.framework/cli/context.ts +112 -130
  18. package/.framework/cli/env-loader.ts +47 -18
  19. package/.framework/cli/index.ts +81 -42
  20. package/.framework/docs/runtime-types.md +1024 -0
  21. package/.framework/functions/_shared/agent-runner.ts +1296 -961
  22. package/.framework/functions/_shared/app-manifest.ts +82 -68
  23. package/.framework/functions/_shared/audit.ts +135 -83
  24. package/.framework/functions/_shared/{cil-state.ts → cil.ts} +158 -56
  25. package/.framework/functions/_shared/db.ts +80 -126
  26. package/.framework/functions/_shared/hash-api-key.ts +63 -0
  27. package/.framework/functions/_shared/index.ts +224 -335
  28. package/.framework/functions/_shared/kb.ts +319 -0
  29. package/.framework/functions/_shared/llm.ts +92 -0
  30. package/.framework/functions/_shared/logging.ts +288 -0
  31. package/.framework/functions/_shared/middleware.ts +329 -365
  32. package/.framework/functions/_shared/outcomes.ts +36 -0
  33. package/.framework/functions/_shared/permissions.ts +359 -643
  34. package/.framework/functions/_shared/pipeline-runner.ts +243 -316
  35. package/.framework/functions/_shared/principal.ts +376 -468
  36. package/.framework/functions/_shared/resolve-credentials.ts +102 -0
  37. package/.framework/functions/_shared/resolve-ids.ts +188 -16
  38. package/.framework/functions/_shared/retry-deliveries.ts +104 -0
  39. package/.framework/functions/_shared/schema-utils.ts +611 -373
  40. package/.framework/functions/_shared/testing.ts +207 -137
  41. package/.framework/functions/_shared/tracing.ts +276 -0
  42. package/.framework/functions/_shared/trigger-engine.ts +159 -211
  43. package/.framework/functions/_shared/webhook-registration.ts +95 -81
  44. package/.framework/functions/_shared/webhook-registry.ts +153 -75
  45. package/.framework/functions/account-nodes.ts +31 -53
  46. package/.framework/functions/adapters/generic-webhook-inbound.ts +56 -0
  47. package/.framework/functions/adapters/generic-webhook-outbound.ts +43 -0
  48. package/.framework/functions/adapters/openai-outbound.ts +40 -0
  49. package/.framework/functions/admin-data.ts +685 -537
  50. package/.framework/functions/admin-funnel.ts +31 -20
  51. package/.framework/functions/admin-install-funnel.ts +47 -28
  52. package/.framework/functions/admin-signals.ts +47 -29
  53. package/.framework/functions/ai-agents.ts +122 -147
  54. package/.framework/functions/ai-interactions.ts +180 -90
  55. package/.framework/functions/api-keys.ts +250 -192
  56. package/.framework/functions/apps.ts +203 -197
  57. package/.framework/functions/auth.ts +98 -91
  58. package/.framework/functions/cil-agent-ingest.ts +773 -0
  59. package/.framework/functions/cil-agent.ts +592 -0
  60. package/.framework/functions/cil-callmap.ts +1227 -0
  61. package/.framework/functions/cil-config.ts +583 -0
  62. package/.framework/functions/cil-context.ts +445 -0
  63. package/.framework/functions/cil-doc.ts +1752 -0
  64. package/.framework/functions/cil-embeddings.ts +1202 -0
  65. package/.framework/functions/cil-graph.ts +585 -0
  66. package/.framework/functions/cil-ingest.ts +2416 -0
  67. package/.framework/functions/cil-pipeline.ts +318 -0
  68. package/.framework/functions/cil-project.ts +499 -0
  69. package/.framework/functions/cil-validate.ts +469 -0
  70. package/.framework/functions/debug-auth.ts +73 -53
  71. package/.framework/functions/deliveries.ts +117 -0
  72. package/.framework/functions/embeddings.ts +528 -516
  73. package/.framework/functions/eval-harness.ts +158 -106
  74. package/.framework/functions/integration-outbound.ts +311 -0
  75. package/.framework/functions/integration-routes.ts +240 -466
  76. package/.framework/functions/integrations.ts +132 -140
  77. package/.framework/functions/invites.ts +401 -201
  78. package/.framework/functions/item-progress.ts +113 -53
  79. package/.framework/functions/kb.ts +28 -0
  80. package/.framework/functions/logs.ts +239 -222
  81. package/.framework/functions/observability.ts +308 -259
  82. package/.framework/functions/pipeline-executions.ts +179 -235
  83. package/.framework/functions/pipelines.ts +163 -205
  84. package/.framework/functions/prompt-configs.ts +109 -156
  85. package/.framework/functions/roles.ts +97 -147
  86. package/.framework/functions/system-cron.ts +132 -218
  87. package/.framework/functions/system.ts +112 -52
  88. package/.framework/functions/tests.ts +32 -28
  89. package/.framework/functions/timers.ts +162 -210
  90. package/.framework/functions/triggers.ts +282 -346
  91. package/.framework/functions/types.ts +283 -400
  92. package/.framework/migrations/001_core_schema.sql +630 -0
  93. package/.framework/migrations/002_core_rls_and_functions.sql +532 -0
  94. package/.framework/migrations/{003_system_data.sql → 003_core_system_data.sql} +26 -153
  95. package/.framework/migrations/004_core_rpc_and_broker.sql +421 -0
  96. package/.framework/migrations/005_core_observability.sql +598 -0
  97. package/.framework/migrations/006_security_hardening_rls.sql +97 -0
  98. package/.framework/migrations/007_kb_article_list.sql +237 -0
  99. package/.framework/migrations/008_items_target.sql +8 -0
  100. package/.framework/migrations/009_roles_slug_unique.sql +11 -0
  101. package/.framework/public/spine.config.json +91 -0
  102. package/.framework/scripts/app-install-cli.ts +112 -98
  103. package/.framework/src/App.tsx +67 -20
  104. package/.framework/src/apps/admin/index.tsx +97 -27
  105. package/.framework/src/components/AppWrapper.tsx +50 -11
  106. package/.framework/src/components/CustomAppLoader.tsx +131 -22
  107. package/.framework/src/components/admin/AdminListPage.tsx +75 -8
  108. package/.framework/src/components/admin/AdminSidebar.tsx +148 -36
  109. package/.framework/src/components/admin/AdminStatsCard.tsx +48 -29
  110. package/.framework/src/components/admin/PageInstructions.tsx +49 -0
  111. package/.framework/src/components/admin/SortableTableHeader.tsx +49 -2
  112. package/.framework/src/components/app-shell/GenericAppShell.tsx +69 -11
  113. package/.framework/src/components/app-shell/GenericDetailPage.tsx +55 -10
  114. package/.framework/src/components/app-shell/GenericListPage.tsx +76 -9
  115. package/.framework/src/components/app-sidebar.tsx +50 -3
  116. package/.framework/src/components/auth/ProtectedRoute.tsx +53 -45
  117. package/.framework/src/components/kb/KBArticleEditor.tsx +409 -0
  118. package/.framework/src/components/kb/KBArticleList.tsx +557 -0
  119. package/.framework/src/components/layout/AppShell.tsx +54 -16
  120. package/.framework/src/components/layout/Header.tsx +50 -38
  121. package/.framework/src/components/layout/Layout.tsx +48 -32
  122. package/.framework/src/components/layout/Sidebar.tsx +167 -16
  123. package/.framework/src/components/runtime/DataDetailHeader.tsx +33 -1
  124. package/.framework/src/components/runtime/DataDetailPage.tsx +289 -4
  125. package/.framework/src/components/runtime/DataFilters.tsx +78 -1
  126. package/.framework/src/components/runtime/DataHeader.tsx +32 -29
  127. package/.framework/src/components/runtime/DataListPage.tsx +161 -2
  128. package/.framework/src/components/runtime/DataStats.tsx +48 -1
  129. package/.framework/src/components/runtime/DataTable.tsx +153 -1
  130. package/.framework/src/components/runtime/SchemaDetailForm.tsx +77 -46
  131. package/.framework/src/components/runtime/index.ts +16 -9
  132. package/.framework/src/components/search-form.tsx +33 -1
  133. package/.framework/src/components/shared/AgentView.tsx +48 -51
  134. package/.framework/src/components/shared/FieldRenderer.tsx +84 -67
  135. package/.framework/src/components/shared/InviteManager.tsx +113 -52
  136. package/.framework/src/components/shared/MemberList.tsx +182 -0
  137. package/.framework/src/components/shared/SchemaFields.tsx +96 -78
  138. package/.framework/src/components/ui/DataTable.tsx +86 -56
  139. package/.framework/src/components/ui/Form.tsx +188 -109
  140. package/.framework/src/components/ui/ItemCard.tsx +86 -58
  141. package/.framework/src/components/ui/ItemListView.tsx +88 -61
  142. package/.framework/src/components/ui/LoadingSpinner.tsx +52 -27
  143. package/.framework/src/components/ui/Modal.tsx +81 -4
  144. package/.framework/src/components/ui/RichTextEditor.tsx +101 -9
  145. package/.framework/src/components/ui/accordion.tsx +97 -5
  146. package/.framework/src/components/ui/alert-dialog.tsx +225 -13
  147. package/.framework/src/components/ui/alert.tsx +113 -6
  148. package/.framework/src/components/ui/aspect-ratio.tsx +49 -2
  149. package/.framework/src/components/ui/avatar.tsx +129 -7
  150. package/.framework/src/components/ui/badge.tsx +65 -3
  151. package/.framework/src/components/ui/breadcrumb.tsx +145 -8
  152. package/.framework/src/components/ui/button-group.tsx +81 -4
  153. package/.framework/src/components/ui/button.tsx +49 -2
  154. package/.framework/src/components/ui/calendar.tsx +65 -3
  155. package/.framework/src/components/ui/card.tsx +145 -8
  156. package/.framework/src/components/ui/carousel.tsx +129 -7
  157. package/.framework/src/components/ui/chart.tsx +161 -10
  158. package/.framework/src/components/ui/checkbox.tsx +49 -2
  159. package/.framework/src/components/ui/collapsible.tsx +81 -5
  160. package/.framework/src/components/ui/combobox.tsx +305 -20
  161. package/.framework/src/components/ui/command.tsx +177 -11
  162. package/.framework/src/components/ui/context-menu.tsx +273 -17
  163. package/.framework/src/components/ui/dialog.tsx +209 -27
  164. package/.framework/src/components/ui/direction.tsx +64 -4
  165. package/.framework/src/components/ui/drawer.tsx +193 -12
  166. package/.framework/src/components/ui/dropdown-menu.tsx +273 -18
  167. package/.framework/src/components/ui/empty.tsx +145 -9
  168. package/.framework/src/components/ui/field.tsx +209 -14
  169. package/.framework/src/components/ui/hover-card.tsx +81 -4
  170. package/.framework/src/components/ui/input-group.tsx +162 -10
  171. package/.framework/src/components/ui/input-otp.tsx +98 -5
  172. package/.framework/src/components/ui/input.tsx +49 -2
  173. package/.framework/src/components/ui/item.tsx +225 -13
  174. package/.framework/src/components/ui/kbd.tsx +65 -3
  175. package/.framework/src/components/ui/label.tsx +49 -2
  176. package/.framework/src/components/ui/menubar.tsx +289 -17
  177. package/.framework/src/components/ui/native-select.tsx +97 -5
  178. package/.framework/src/components/ui/navigation-menu.tsx +177 -10
  179. package/.framework/src/components/ui/pagination.tsx +161 -9
  180. package/.framework/src/components/ui/popover.tsx +145 -8
  181. package/.framework/src/components/ui/progress.tsx +49 -2
  182. package/.framework/src/components/ui/radio-group.tsx +65 -3
  183. package/.framework/src/components/ui/resizable.tsx +82 -4
  184. package/.framework/src/components/ui/scroll-area.tsx +65 -3
  185. package/.framework/src/components/ui/select.tsx +193 -11
  186. package/.framework/src/components/ui/separator.tsx +49 -2
  187. package/.framework/src/components/ui/sheet.tsx +193 -11
  188. package/.framework/src/components/ui/sidebar.tsx +481 -38
  189. package/.framework/src/components/ui/skeleton.tsx +49 -2
  190. package/.framework/src/components/ui/slider.tsx +49 -2
  191. package/.framework/src/components/ui/sonner.tsx +49 -2
  192. package/.framework/src/components/ui/spinner.tsx +49 -2
  193. package/.framework/src/components/ui/switch.tsx +49 -2
  194. package/.framework/src/components/ui/table-primitives.tsx +160 -33
  195. package/.framework/src/components/ui/table.tsx +161 -9
  196. package/.framework/src/components/ui/tabs.tsx +113 -6
  197. package/.framework/src/components/ui/textarea.tsx +49 -2
  198. package/.framework/src/components/ui/toggle-group.tsx +81 -4
  199. package/.framework/src/components/ui/toggle.tsx +65 -3
  200. package/.framework/src/components/ui/tooltip.tsx +97 -5
  201. package/.framework/src/contexts/AppContext.tsx +129 -45
  202. package/.framework/src/contexts/AuthContext.tsx +187 -144
  203. package/.framework/src/hooks/use-mobile.ts +48 -2
  204. package/.framework/src/hooks/useApi.ts +208 -159
  205. package/.framework/src/hooks/useAppPath.ts +32 -23
  206. package/.framework/src/hooks/useApps.ts +51 -20
  207. package/.framework/src/hooks/useEntityList.ts +32 -78
  208. package/.framework/src/hooks/useEntityRecord.ts +35 -96
  209. package/.framework/src/hooks/useForm.ts +32 -92
  210. package/.framework/src/hooks/useListSchema.ts +49 -78
  211. package/.framework/src/hooks/useSchemaRecord.ts +114 -105
  212. package/.framework/src/lib/api.ts +195 -116
  213. package/.framework/src/lib/supabase.ts +98 -64
  214. package/.framework/src/lib/utils.ts +287 -151
  215. package/.framework/src/main.tsx +49 -3
  216. package/.framework/src/pages/DashboardPage.tsx +52 -29
  217. package/.framework/src/pages/NotFoundPage.tsx +32 -10
  218. package/.framework/src/pages/SetupPage.tsx +32 -12
  219. package/.framework/src/pages/admin/AIAgentDetailPage.tsx +119 -10
  220. package/.framework/src/pages/admin/AIAgentsPage.tsx +48 -19
  221. package/.framework/src/pages/admin/APIKeyDetailPage.tsx +187 -17
  222. package/.framework/src/pages/admin/APIKeysPage.tsx +98 -22
  223. package/.framework/src/pages/admin/AlertsConfigPage.tsx +113 -26
  224. package/.framework/src/pages/admin/AppDetailPage.tsx +125 -8
  225. package/.framework/src/pages/admin/AppsPage.tsx +49 -2
  226. package/.framework/src/pages/admin/DeliveriesPage.tsx +196 -0
  227. package/.framework/src/pages/admin/DesignedPage.tsx +32 -18
  228. package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +215 -484
  229. package/.framework/src/pages/admin/EmbeddingsPage.tsx +116 -319
  230. package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +34 -9
  231. package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +34 -9
  232. package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -16
  233. package/.framework/src/pages/admin/IntegrationDetailPage.tsx +183 -26
  234. package/.framework/src/pages/admin/IntegrationsPage.tsx +48 -19
  235. package/.framework/src/pages/admin/InvitesPage.tsx +48 -14
  236. package/.framework/src/pages/admin/LogsPage.tsx +422 -75
  237. package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +34 -9
  238. package/.framework/src/pages/admin/ObservabilityDashboard.tsx +113 -24
  239. package/.framework/src/pages/admin/PipelineDetailPage.tsx +206 -34
  240. package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +50 -17
  241. package/.framework/src/pages/admin/PipelinesPage.tsx +160 -21
  242. package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +378 -88
  243. package/.framework/src/pages/admin/PromptConfigsPage.tsx +125 -16
  244. package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +49 -10
  245. package/.framework/src/pages/admin/RoleDetailPage.tsx +130 -10
  246. package/.framework/src/pages/admin/RolesPage.tsx +171 -18
  247. package/.framework/src/pages/admin/SelectTestPage.tsx +34 -9
  248. package/.framework/src/pages/admin/ShadcnTestPage.tsx +49 -11
  249. package/.framework/src/pages/admin/SimpleDashboard.tsx +49 -10
  250. package/.framework/src/pages/admin/TestRunDetailPage.tsx +49 -4
  251. package/.framework/src/pages/admin/TestingDashboard.tsx +98 -28
  252. package/.framework/src/pages/admin/TimerDetailPage.tsx +143 -33
  253. package/.framework/src/pages/admin/TimersPage.tsx +48 -20
  254. package/.framework/src/pages/admin/TriggerDetailPage.tsx +118 -30
  255. package/.framework/src/pages/admin/TriggersPage.tsx +64 -19
  256. package/.framework/src/pages/admin/TypeDetailPage.tsx +138 -15
  257. package/.framework/src/pages/admin/TypesPage.tsx +48 -20
  258. package/.framework/src/pages/admin/cil/CILAgentPage.tsx +465 -0
  259. package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +787 -0
  260. package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +699 -0
  261. package/.framework/src/pages/admin/cil/CILFileListPage.tsx +647 -0
  262. package/.framework/src/pages/admin/cil/CILGraphPage.tsx +616 -0
  263. package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +1402 -0
  264. package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +614 -0
  265. package/.framework/src/pages/admin/cil/CILSearchPage.tsx +571 -0
  266. package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +731 -0
  267. package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
  268. package/.framework/src/pages/auth/AuthConfirmPage.tsx +52 -51
  269. package/.framework/src/pages/auth/ForgotPasswordPage.tsx +31 -22
  270. package/.framework/src/pages/auth/LoginPage.tsx +50 -23
  271. package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -15
  272. package/.framework/src/pages/auth/RegisterPage.tsx +281 -317
  273. package/.framework/src/pages/spine-framework/APIPage.tsx +33 -0
  274. package/.framework/src/pages/spine-framework/CLIPage.tsx +33 -0
  275. package/.framework/src/types/auth.ts +128 -71
  276. package/.framework/src/types/types.ts +373 -157
  277. package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +39 -0
  278. package/custom/.devin/skills/spine-workbench-idea/SKILL.md +36 -0
  279. package/custom/.devin/skills/spine-workbench-implement/SKILL.md +46 -0
  280. package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +28 -0
  281. package/custom/.devin/skills/spine-workbench-plan/SKILL.md +38 -0
  282. package/docs/README.md +9 -130
  283. package/netlify.toml +5 -2
  284. package/package.json +13 -25
  285. package/scripts/kb-ingest-docs.ts +203 -0
  286. package/spine.config.json +65 -4
  287. package/.framework/migrations/001_schema.sql +0 -425
  288. package/.framework/migrations/002_rls_and_functions.sql +0 -763
  289. package/.framework/migrations/004_enhancements.sql +0 -43
  290. package/.framework/migrations/005_auth_user_trigger.sql +0 -105
  291. package/.framework/migrations/006_fix_current_actor_id.sql +0 -21
  292. package/.framework/migrations/016_invites.sql +0 -27
  293. package/.framework/migrations/017_fix_get_account_apps.sql +0 -78
  294. package/.framework/migrations/018_apps_required_roles.sql +0 -17
  295. package/.framework/migrations/019_triggers_unique_constraint.sql +0 -13
  296. package/.framework/migrations/020_get_account_apps_role_filter.sql +0 -117
  297. package/.framework/migrations/021_app_domains.sql +0 -112
  298. package/.framework/migrations/022_route_prefix_domain_unique.sql +0 -21
  299. package/.framework/migrations/023_match_embeddings_rpc.sql +0 -78
  300. package/.framework/migrations/024_messages_account_id.sql +0 -9
  301. package/.framework/migrations/025_retype_threads_messages.sql +0 -240
  302. package/.framework/migrations/026_fix_rls_policies.sql +0 -47
  303. package/.framework/migrations/027_embedding_lifecycle.sql +0 -176
  304. package/.framework/migrations/028_fix_message_data_permissions.sql +0 -49
  305. package/.framework/migrations/029_tighten_support_triage_prompt.sql +0 -41
  306. package/.framework/migrations/030_messages_updated_by.sql +0 -6
  307. package/.framework/migrations/031_seed_upsert_constraints.sql +0 -35
  308. package/docs/APPS.md +0 -232
  309. package/docs/ARCHITECTURE.md +0 -246
  310. package/docs/INSTALL.md +0 -155
  311. package/docs/design-schema-spec.md +0 -1837
  312. package/docs/dev-guides/01-create-an-app.md +0 -183
  313. package/docs/dev-guides/02-create-a-function.md +0 -178
  314. package/docs/dev-guides/03-create-a-component.md +0 -178
  315. package/docs/dev-guides/04-webhook-handlers.md +0 -129
  316. package/docs/dev-guides/05-testing.md +0 -168
  317. package/docs/dev-guides/README.md +0 -40
  318. package/docs/npm-packages-plan.md +0 -288
  319. package/docs/spine-core--api-reference.md +0 -822
@@ -1,45 +1,41 @@
1
- /// <reference types="node" />
2
- /**
3
- * @module cli/commands/agents
4
- * @audience installer
5
- * @layer cli
6
- * @stability stable
7
- *
8
- * `spine agents` command group. Sends messages to AI agent threads and
9
- * inspects thread state from the terminal or an agentic IDE. `agents run`
10
- * calls `runAgent` — the same function used by API handlers — so responses
11
- * are recorded in the `messages` table like any other agent turn.
12
- *
13
- * **Commands:**
14
- * | Subcommand | Description |
15
- * |--------------------------------------------------|---------------------------------------|
16
- * | `agents run <threadId> --message <text>` | Send a message and print the response |
17
- * | `agents threads list [--account <id>]` | List agent threads |
18
- * | `agents threads get <id> [--limit <n>]` | Show thread + recent messages |
19
- *
20
- * **Usage:**
21
- * ```bash
22
- * spine agents run <uuid> --message "Summarize the last 10 tickets" --json
23
- * spine agents threads list --account <id> --limit 10
24
- * spine agents threads get <uuid>
25
- * ```
26
- *
27
- * @seeAlso cli/context.ts (buildCliContext)
28
- * @seeAlso functions/_shared/agent-runner.ts (runAgent)
29
- * @seeAlso functions/ai-agents.ts (agent configuration CRUD)
30
- */
1
+ // CIL[BEGIN chunk_id="agents_module_header_1784183721" type="module_header" identity="module_header" parent="none"]
2
+ // CIL[DOC-MACRO purpose="Preamble and imports for agents"]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Provides imports and top-level types/constants used by the rest of the module"]
4
+ // CIL[DOC-CONTEXT module=".framework/cli/commands/agents" layer="cli" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
5
+ // CIL[DOC-CONTRACT inputs="none" outputs="imports, types, constants" errors="none" side_effects="none"]
6
+ // CIL[DOC-MICRO logic_summary="Imports external dependencies and declares shared types or constants" notable_decisions="[]"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
8
+ // CIL[DOC-STABILITY stability="stable"]
9
+ // CIL[DOC-AUDIENCE audience="developer"]
10
+ // CIL[DOC-VECTOR type="context" content="Layer: cli. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, \."]
11
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
12
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
13
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
14
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
15
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
16
+
17
+
31
18
 
32
19
  import type { Command } from 'commander'
33
20
  import { buildCliContext, printResult, handleError } from '../context.ts'
34
21
  import { runAgent, adminDb } from '../../functions/_shared/index.ts'
35
22
 
36
- /**
37
- * Registers the `agents` subcommand group on the root Commander program.
38
- *
39
- * @param program - The root `spine` Commander instance
40
- * @sideEffects Adds `agents run`, `agents threads list/get` subcommands to `program`
41
- * @calledBy cli/index.ts
42
- */
23
+
24
+ // CIL[END chunk_id="agents_module_header_1784183721"]
25
+ // CIL[BEGIN chunk_id="agents_registeragentcommands_1784183721" type="function" identity="registerAgentCommands" parent="none"]
26
+ // CIL[DOC-MACRO purpose="Implement the registerAgentCommands helper function"]
27
+ // CIL[DOC-RESPONSIBILITY responsibility="Owns the registerAgentCommands computation and return value"]
28
+ // CIL[DOC-CONTEXT module=".framework/cli/commands/agents" layer="cli" related_files="[\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
29
+ // CIL[DOC-CONTRACT inputs="none" outputs="void" errors="Error" side_effects="logs to console, queries database, builds CLI context"]
30
+ // CIL[DOC-MICRO logic_summary="Computes and returns void" notable_decisions="[]"]
31
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="external_symbols_unknown"]
32
+ // CIL[DOC-STABILITY stability="stable"]
33
+ // CIL[DOC-VECTOR type="context" content="Layer: cli. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/functions/custom_cil-embeddings.ts, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, \."]
34
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
35
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
36
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
37
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
38
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
43
39
  export function registerAgentCommands(program: Command) {
44
40
  const agents = program
45
41
  .command('agents')
@@ -151,3 +147,5 @@ export function registerAgentCommands(program: Command) {
151
147
  }
152
148
  })
153
149
  }
150
+
151
+ // CIL[END chunk_id="agents_registeragentcommands_1784183721"]
@@ -1,40 +1,40 @@
1
- /**
2
- * @module cli/commands/auth
3
- * @audience installer
4
- * @layer cli
5
- * @stability stable
6
- *
7
- * `spine auth` command group. Exposes two subcommands for verifying and
8
- * inspecting the currently configured CLI credentials without performing
9
- * any data operations.
10
- *
11
- * **Commands:**
12
- * | Subcommand | Description |
13
- * |-------------------|-------------------------------------------------------|
14
- * | `auth whoami` | Print the resolved principal for the current env |
15
- * | `auth check` | Validate credentials; exit 0 on success, 1 on failure |
16
- *
17
- * **Usage:**
18
- * ```bash
19
- * spine auth whoami
20
- * spine auth whoami --json
21
- * spine auth check
22
- * ```
23
- *
24
- * @seeAlso cli/context.ts (buildCliContext — principal resolution)
25
- * @seeAlso functions/auth.ts (API equivalent)
26
- */
27
1
 
2
+
3
+
4
+
5
+
6
+ // CIL[BEGIN chunk_id="auth_module_header_1784071456" type="module_header" identity="module_header" parent="none"]
7
+ // CIL[DOC-MACRO purpose="Import dependencies for auth CLI commands"]
8
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide imports for auth command registration"]
9
+ // CIL[DOC-CONTEXT module="auth-cli" layer="cli" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
10
+ // CIL[DOC-CONTRACT inputs="none" outputs="imports" errors="none" side_effects="none"]
11
+ // CIL[DOC-MICRO logic_summary="Imports Command type and CLI context utilities" notable_decisions="[]"]
12
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
13
+ // CIL[DOC-STABILITY stability="stable"]
14
+ // CIL[DOC-AUDIENCE audience="developer"]
15
+ // CIL[DOC-VECTOR type="context" content="Layer: cli. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/principal.ts, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, \."]
16
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
17
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
18
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
19
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
20
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
28
21
  import type { Command } from 'commander'
29
22
  import { buildCliContext, handleError } from '../context.js'
30
-
31
- /**
32
- * Registers the `auth` subcommand group on the root Commander program.
33
- *
34
- * @param program - The root `spine` Commander instance
35
- * @sideEffects Adds `auth whoami` and `auth check` subcommands to `program`
36
- * @calledBy cli/index.ts
37
- */
23
+ // CIL[END chunk_id="auth_module_header_1784071456"]
24
+ // CIL[BEGIN chunk_id="auth_registerauthcommands_1784071456" type="function" identity="registerAuthCommands" parent="none"]
25
+ // CIL[DOC-MACRO purpose="Register auth commands with CLI framework"]
26
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide whoami and check subcommands for auth"]
27
+ // CIL[DOC-CONTEXT module="auth-cli" layer="cli" related_files="[\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
28
+ // CIL[DOC-CONTRACT inputs="none" outputs="auth command registration" errors="CLI context errors" side_effects="outputs identity info"]
29
+ // CIL[DOC-MICRO logic_summary="Registers whoami and check commands for identity validation" notable_decisions="[]"]
30
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="external_symbols_unknown"]
31
+ // CIL[DOC-STABILITY stability="stable"]
32
+ // CIL[DOC-VECTOR type="context" content="Layer: cli. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, .framework/src/components/ui/dialog.tsx, .framework/src/components/ui/table-primitives.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
33
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
34
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
35
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
36
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
37
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
38
38
  export function registerAuthCommands(program: Command) {
39
39
  const auth = program
40
40
  .command('auth')
@@ -92,3 +92,4 @@ export function registerAuthCommands(program: Command) {
92
92
  }
93
93
  })
94
94
  }
95
+ // CIL[END chunk_id="auth_registerauthcommands_1784071456"]
@@ -1,25 +1,26 @@
1
- /// <reference types="node" />
2
- /**
3
- * @module cli/commands/create-app
4
- * @audience installer
5
- * @layer cli
6
- * @stability stable
7
- *
8
- * `spine-framework create-app <slug>` — scaffold a new custom app.
9
- *
10
- * Creates the full directory structure under `custom/apps/{slug}/`:
11
- * - manifest.json (app metadata, roles, routes, nav_items)
12
- * - index.tsx (React entry point)
13
- * - components/ (empty dir with .gitkeep)
14
- *
15
- * **Usage:**
16
- * ```bash
17
- * npm run spine-framework create-app my-app
18
- * npm run spine-framework create-app my-app --name "My App" --role member
19
- * npm run spine-framework create-app my-app --force
20
- * ```
21
- */
22
1
 
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+ // CIL[BEGIN chunk_id="create-app_module_header_1784071456" type="module_header" identity="module_header" parent="none"]
10
+ // CIL[DOC-MACRO purpose="Import dependencies for create-app CLI command"]
11
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide imports and utilities for app scaffolding"]
12
+ // CIL[DOC-CONTEXT module="create-app-cli" layer="cli" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
13
+ // CIL[DOC-CONTRACT inputs="none" outputs="imports" errors="none" side_effects="none"]
14
+ // CIL[DOC-MICRO logic_summary="Imports Command type, file system, path, and database modules" notable_decisions="[]"]
15
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
16
+ // CIL[DOC-STABILITY stability="stable"]
17
+ // CIL[DOC-AUDIENCE audience="developer"]
18
+ // CIL[DOC-VECTOR type="context" content="Layer: cli. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, \."]
19
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
20
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
21
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
22
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
23
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
23
24
  import type { Command } from 'commander'
24
25
  import { existsSync, mkdirSync, writeFileSync } from 'fs'
25
26
  import { resolve, dirname } from 'path'
@@ -29,11 +30,39 @@ import { adminDb } from '../../functions/_shared/index.ts'
29
30
  const __filename = fileURLToPath(import.meta.url)
30
31
  const __dirname = dirname(__filename)
31
32
  const PROJECT_ROOT = resolve(__dirname, '../../../')
32
-
33
+ // CIL[END chunk_id="create-app_module_header_1784071456"]
34
+ // CIL[BEGIN chunk_id="create-app_totitlecase_1784071456" type="function" identity="toTitleCase" parent="none"]
35
+ // CIL[DOC-MACRO purpose="Convert slug to title case format"]
36
+ // CIL[DOC-RESPONSIBILITY responsibility="Format slugs as readable display names"]
37
+ // CIL[DOC-CONTEXT module="create-app-cli" layer="cli" related_files="[\".framework/src/components/ui/dialog.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
38
+ // CIL[DOC-CONTRACT inputs="none" outputs="string" errors="none" side_effects="none"]
39
+ // CIL[DOC-MICRO logic_summary="Converts kebab-case to Title Case for display names" notable_decisions="[]"]
40
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
41
+ // CIL[DOC-STABILITY stability="stable"]
42
+ // CIL[DOC-VECTOR type="context" content="Layer: cli. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
43
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
44
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
45
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
46
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
47
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
33
48
  function toTitleCase(slug: string): string {
34
49
  return slug.split('-').map(s => s.charAt(0).toUpperCase() + s.slice(1)).join(' ')
35
50
  }
36
-
51
+ // CIL[END chunk_id="create-app_totitlecase_1784071456"]
52
+ // CIL[BEGIN chunk_id="create-app_generatemanifest_1784071456" type="function" identity="generateManifest" parent="none"]
53
+ // CIL[DOC-MACRO purpose="Generate app manifest JSON content"]
54
+ // CIL[DOC-RESPONSIBILITY responsibility="Create default manifest configuration for new apps"]
55
+ // CIL[DOC-CONTEXT module="create-app-cli" layer="cli" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/migrations/015_simplify_apps_table.sql\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"\\\"]"]
56
+ // CIL[DOC-CONTRACT inputs="none" outputs="string" errors="none" side_effects="none"]
57
+ // CIL[DOC-MICRO logic_summary="Creates JSON manifest with routes, nav items, and metadata" notable_decisions="[]"]
58
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
59
+ // CIL[DOC-STABILITY stability="stable"]
60
+ // CIL[DOC-VECTOR type="context" content="Layer: cli. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/migrations/015_simplify_apps_table.sql, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, \."]
61
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
62
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
63
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
64
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
65
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
37
66
  function generateManifest(slug: string, name: string, role: string): string {
38
67
  return JSON.stringify({
39
68
  name,
@@ -58,18 +87,24 @@ function generateManifest(slug: string, name: string, role: string): string {
58
87
  entry_point: "./index.tsx"
59
88
  }, null, 2) + '\n'
60
89
  }
61
-
90
+ // CIL[END chunk_id="create-app_generatemanifest_1784071456"]
91
+ // CIL[BEGIN chunk_id="create-app_generateindextsx_1784071456" type="function" identity="generateIndexTsx" parent="none"]
92
+ // CIL[DOC-MACRO purpose="Generate React component index file"]
93
+ // CIL[DOC-RESPONSIBILITY responsibility="Create default React app component with routing"]
94
+ // CIL[DOC-CONTEXT module="create-app-cli" layer="cli" related_files="[\".framework/src/components/ui/dialog.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
95
+ // CIL[DOC-CONTRACT inputs="none" outputs="string" errors="none" side_effects="none"]
96
+ // CIL[DOC-MICRO logic_summary="Generates TSX file with React Router and dashboard component" notable_decisions="[]"]
97
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
98
+ // CIL[DOC-STABILITY stability="stable"]
99
+ // CIL[DOC-VECTOR type="context" content="Layer: cli. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/components/ui/table-primitives.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
100
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
101
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
102
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
103
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
104
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
62
105
  function generateIndexTsx(slug: string, name: string): string {
63
106
  const componentName = slug.split('-').map(s => s.charAt(0).toUpperCase() + s.slice(1)).join('')
64
- return `/**
65
- * @module custom/apps/${slug}
66
- * @audience custom
67
- * @layer frontend-app
68
- * @stability experimental
69
- *
70
- * Entry point for the ${name} app.
71
- * Generated by spine-framework CLI on ${new Date().toISOString().split('T')[0]}.
72
- */
107
+ return `
73
108
 
74
109
  import * as React from 'react'
75
110
  import { Routes, Route, Navigate } from 'react-router-dom'
@@ -93,7 +128,21 @@ export default function ${componentName}App() {
93
128
  }
94
129
  `
95
130
  }
96
-
131
+ // CIL[END chunk_id="create-app_generateindextsx_1784071456"]
132
+ // CIL[BEGIN chunk_id="create-app_createapp_1784071456" type="function" identity="createApp" parent="none"]
133
+ // CIL[DOC-MACRO purpose="Create new app directory and database entry"]
134
+ // CIL[DOC-RESPONSIBILITY responsibility="Scaffold app files and register in database"]
135
+ // CIL[DOC-CONTEXT module="create-app-cli" layer="cli" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/migrations/015_simplify_apps_table.sql\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/db.ts\"]"]
136
+ // CIL[DOC-CONTRACT inputs="none" outputs="void" errors="file system and database errors" side_effects="creates files, inserts database records"]
137
+ // CIL[DOC-MICRO logic_summary="Creates app structure, generates files, and registers app in database" notable_decisions="[]"]
138
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="external_symbols_unknown"]
139
+ // CIL[DOC-STABILITY stability="stable"]
140
+ // CIL[DOC-VECTOR type="context" content="Layer: cli. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/migrations/015_simplify_apps_table.sql, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/db.ts."]
141
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
142
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
143
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
144
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
145
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
97
146
  async function createApp(slug: string, options: { name?: string; role: string; force: boolean }): Promise<void> {
98
147
  const name = options.name || toTitleCase(slug)
99
148
  const appDir = resolve(PROJECT_ROOT, `custom/apps/${slug}`)
@@ -106,29 +155,29 @@ async function createApp(slug: string, options: { name?: string; role: string; f
106
155
  process.exit(1)
107
156
  }
108
157
 
109
- // 1. Create directories
158
+
110
159
  mkdirSync(resolve(appDir, 'components'), { recursive: true })
111
160
  console.log(` ✓ Created custom/apps/${slug}/`)
112
161
  console.log(` ✓ Created custom/apps/${slug}/components/`)
113
162
 
114
- // 2. manifest.json
163
+
115
164
  writeFileSync(
116
165
  resolve(appDir, 'manifest.json'),
117
166
  generateManifest(slug, name, options.role)
118
167
  )
119
168
  console.log(` ✓ Created custom/apps/${slug}/manifest.json`)
120
169
 
121
- // 3. index.tsx
170
+
122
171
  writeFileSync(
123
172
  resolve(appDir, 'index.tsx'),
124
173
  generateIndexTsx(slug, name)
125
174
  )
126
175
  console.log(` ✓ Created custom/apps/${slug}/index.tsx`)
127
176
 
128
- // 4. components/.gitkeep
177
+
129
178
  writeFileSync(resolve(appDir, 'components', '.gitkeep'), '')
130
179
 
131
- // 5. Insert app record into database
180
+
132
181
  console.log(` Registering app in database...`)
133
182
  const { data: existing } = await adminDb
134
183
  .from('apps')
@@ -166,7 +215,21 @@ async function createApp(slug: string, options: { name?: string; role: string; f
166
215
  console.log(` 2. Edit custom/apps/${slug}/index.tsx to build your app`)
167
216
  console.log(` 3. npm run assemble && netlify dev`)
168
217
  }
169
-
218
+ // CIL[END chunk_id="create-app_createapp_1784071456"]
219
+ // CIL[BEGIN chunk_id="create-app_registercreateappcommands_1784071456" type="function" identity="registerCreateAppCommands" parent="none"]
220
+ // CIL[DOC-MACRO purpose="Register create-app command with CLI framework"]
221
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide app scaffolding command interface"]
222
+ // CIL[DOC-CONTEXT module="create-app-cli" layer="cli" related_files="[]"]
223
+ // CIL[DOC-CONTRACT inputs="none" outputs="create-app command registration" errors="app creation errors" side_effects="creates app files and database entries"]
224
+ // CIL[DOC-MICRO logic_summary="Registers create-app command with options for name, role, and force" notable_decisions="[]"]
225
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
226
+ // CIL[DOC-STABILITY stability="stable"]
227
+ // CIL[DOC-VECTOR type="context" content="Layer: cli. Direct callers: 0. Direct calls: 0. Related files: none."]
228
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
229
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
230
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
231
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
232
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
170
233
  export function registerCreateAppCommands(program: Command) {
171
234
  program
172
235
  .command('create-app <slug>')
@@ -183,3 +246,4 @@ export function registerCreateAppCommands(program: Command) {
183
246
  }
184
247
  })
185
248
  }
249
+ // CIL[END chunk_id="create-app_registercreateappcommands_1784071456"]