veryfront 0.1.215 → 0.1.217

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 (305) hide show
  1. package/README.md +1 -1
  2. package/esm/cli/commands/extension/command-help.d.ts +3 -0
  3. package/esm/cli/commands/extension/command-help.d.ts.map +1 -0
  4. package/esm/cli/commands/extension/command-help.js +16 -0
  5. package/esm/cli/commands/extension/handler.d.ts +3 -0
  6. package/esm/cli/commands/extension/handler.d.ts.map +1 -0
  7. package/esm/cli/commands/extension/handler.js +36 -0
  8. package/esm/cli/commands/extension/init-command.d.ts +19 -0
  9. package/esm/cli/commands/extension/init-command.d.ts.map +1 -0
  10. package/esm/cli/commands/extension/init-command.js +122 -0
  11. package/esm/cli/commands/extension/validate-command.d.ts +13 -0
  12. package/esm/cli/commands/extension/validate-command.d.ts.map +1 -0
  13. package/esm/cli/commands/extension/validate-command.js +62 -0
  14. package/esm/cli/commands/generate/integration-generator-helpers.d.ts +35 -0
  15. package/esm/cli/commands/generate/integration-generator-helpers.d.ts.map +1 -0
  16. package/esm/cli/commands/generate/integration-generator-helpers.js +123 -0
  17. package/esm/cli/commands/generate/integration-generator.d.ts +1 -2
  18. package/esm/cli/commands/generate/integration-generator.d.ts.map +1 -1
  19. package/esm/cli/commands/generate/integration-generator.js +1 -123
  20. package/esm/cli/commands/knowledge/command-helpers.d.ts +48 -0
  21. package/esm/cli/commands/knowledge/command-helpers.d.ts.map +1 -0
  22. package/esm/cli/commands/knowledge/command-helpers.js +216 -0
  23. package/esm/cli/commands/knowledge/command.d.ts +12 -17
  24. package/esm/cli/commands/knowledge/command.d.ts.map +1 -1
  25. package/esm/cli/commands/knowledge/command.js +26 -214
  26. package/esm/cli/help/command-definitions.d.ts.map +1 -1
  27. package/esm/cli/help/command-definitions.js +2 -0
  28. package/esm/cli/mcp/remote-file-tool-helpers.d.ts +5 -0
  29. package/esm/cli/mcp/remote-file-tool-helpers.d.ts.map +1 -0
  30. package/esm/cli/mcp/remote-file-tool-helpers.js +22 -0
  31. package/esm/cli/mcp/remote-file-tools.d.ts.map +1 -1
  32. package/esm/cli/mcp/remote-file-tools.js +1 -22
  33. package/esm/cli/router.d.ts.map +1 -1
  34. package/esm/cli/router.js +2 -0
  35. package/esm/cli/templates/integration-loader-helpers.d.ts +8 -0
  36. package/esm/cli/templates/integration-loader-helpers.d.ts.map +1 -0
  37. package/esm/cli/templates/integration-loader-helpers.js +29 -0
  38. package/esm/cli/templates/integration-loader.d.ts.map +1 -1
  39. package/esm/cli/templates/integration-loader.js +5 -21
  40. package/esm/cli/templates/manifest.d.ts +1 -0
  41. package/esm/cli/templates/manifest.js +2 -1
  42. package/esm/deno.d.ts +3 -0
  43. package/esm/deno.js +5 -2
  44. package/esm/src/agent/runtime/index.d.ts.map +1 -1
  45. package/esm/src/agent/runtime/index.js +48 -90
  46. package/esm/src/chat/ag-ui-helpers.d.ts +17 -0
  47. package/esm/src/chat/ag-ui-helpers.d.ts.map +1 -0
  48. package/esm/src/chat/ag-ui-helpers.js +111 -0
  49. package/esm/src/chat/ag-ui.d.ts.map +1 -1
  50. package/esm/src/chat/ag-ui.js +1 -111
  51. package/esm/src/config/schemas/config.schema.d.ts +1 -0
  52. package/esm/src/config/schemas/config.schema.d.ts.map +1 -1
  53. package/esm/src/config/schemas/config.schema.js +11 -0
  54. package/esm/src/config/schemas/index.d.ts +11 -1
  55. package/esm/src/config/schemas/index.d.ts.map +1 -1
  56. package/esm/src/errors/error-registry-helpers.d.ts +6 -0
  57. package/esm/src/errors/error-registry-helpers.d.ts.map +1 -0
  58. package/esm/src/errors/error-registry-helpers.js +9 -0
  59. package/esm/src/errors/error-registry.d.ts.map +1 -1
  60. package/esm/src/errors/error-registry.js +4 -3
  61. package/esm/src/extensions/capabilities.d.ts +20 -0
  62. package/esm/src/extensions/capabilities.d.ts.map +1 -0
  63. package/esm/src/extensions/capabilities.js +77 -0
  64. package/esm/src/extensions/contracts.d.ts +10 -0
  65. package/esm/src/extensions/contracts.d.ts.map +1 -0
  66. package/esm/src/extensions/contracts.js +28 -0
  67. package/esm/src/extensions/discovery.d.ts +48 -0
  68. package/esm/src/extensions/discovery.d.ts.map +1 -0
  69. package/esm/src/extensions/discovery.js +179 -0
  70. package/esm/src/extensions/errors.d.ts +10 -0
  71. package/esm/src/extensions/errors.d.ts.map +1 -0
  72. package/esm/src/extensions/errors.js +34 -0
  73. package/esm/src/extensions/factory-loader.d.ts +29 -0
  74. package/esm/src/extensions/factory-loader.d.ts.map +1 -0
  75. package/esm/src/extensions/factory-loader.js +63 -0
  76. package/esm/src/extensions/index.d.ts +37 -0
  77. package/esm/src/extensions/index.d.ts.map +1 -0
  78. package/esm/src/extensions/index.js +41 -0
  79. package/esm/src/extensions/interfaces/ai-model-provider.d.ts +94 -0
  80. package/esm/src/extensions/interfaces/ai-model-provider.d.ts.map +1 -0
  81. package/esm/src/extensions/interfaces/ai-model-provider.js +8 -0
  82. package/esm/src/extensions/interfaces/auth-provider.d.ts +49 -0
  83. package/esm/src/extensions/interfaces/auth-provider.d.ts.map +1 -0
  84. package/esm/src/extensions/interfaces/auth-provider.js +8 -0
  85. package/esm/src/extensions/interfaces/bundler.d.ts +118 -0
  86. package/esm/src/extensions/interfaces/bundler.d.ts.map +1 -0
  87. package/esm/src/extensions/interfaces/bundler.js +8 -0
  88. package/esm/src/extensions/interfaces/cache-store.d.ts +27 -0
  89. package/esm/src/extensions/interfaces/cache-store.d.ts.map +1 -0
  90. package/esm/src/extensions/interfaces/cache-store.js +8 -0
  91. package/esm/src/extensions/interfaces/code-parser.d.ts +76 -0
  92. package/esm/src/extensions/interfaces/code-parser.d.ts.map +1 -0
  93. package/esm/src/extensions/interfaces/code-parser.js +8 -0
  94. package/esm/src/extensions/interfaces/content-transformer.d.ts +40 -0
  95. package/esm/src/extensions/interfaces/content-transformer.d.ts.map +1 -0
  96. package/esm/src/extensions/interfaces/content-transformer.js +8 -0
  97. package/esm/src/extensions/interfaces/css-processor.d.ts +38 -0
  98. package/esm/src/extensions/interfaces/css-processor.d.ts.map +1 -0
  99. package/esm/src/extensions/interfaces/css-processor.js +8 -0
  100. package/esm/src/extensions/interfaces/database-client.d.ts +31 -0
  101. package/esm/src/extensions/interfaces/database-client.d.ts.map +1 -0
  102. package/esm/src/extensions/interfaces/database-client.js +8 -0
  103. package/esm/src/extensions/interfaces/embedding-provider.d.ts +37 -0
  104. package/esm/src/extensions/interfaces/embedding-provider.d.ts.map +1 -0
  105. package/esm/src/extensions/interfaces/embedding-provider.js +8 -0
  106. package/esm/src/extensions/interfaces/index.d.ts +21 -0
  107. package/esm/src/extensions/interfaces/index.d.ts.map +1 -0
  108. package/esm/src/extensions/interfaces/index.js +9 -0
  109. package/esm/src/extensions/interfaces/node-compat.d.ts +25 -0
  110. package/esm/src/extensions/interfaces/node-compat.d.ts.map +1 -0
  111. package/esm/src/extensions/interfaces/node-compat.js +8 -0
  112. package/esm/src/extensions/interfaces/schema-validator.d.ts +46 -0
  113. package/esm/src/extensions/interfaces/schema-validator.d.ts.map +1 -0
  114. package/esm/src/extensions/interfaces/schema-validator.js +8 -0
  115. package/esm/src/extensions/interfaces/tracing-exporter.d.ts +44 -0
  116. package/esm/src/extensions/interfaces/tracing-exporter.d.ts.map +1 -0
  117. package/esm/src/extensions/interfaces/tracing-exporter.js +8 -0
  118. package/esm/src/extensions/loader.d.ts +33 -0
  119. package/esm/src/extensions/loader.d.ts.map +1 -0
  120. package/esm/src/extensions/loader.js +209 -0
  121. package/esm/src/extensions/orchestrate.d.ts +54 -0
  122. package/esm/src/extensions/orchestrate.d.ts.map +1 -0
  123. package/esm/src/extensions/orchestrate.js +116 -0
  124. package/esm/src/extensions/recommendations.d.ts +7 -0
  125. package/esm/src/extensions/recommendations.d.ts.map +1 -0
  126. package/esm/src/extensions/recommendations.js +22 -0
  127. package/esm/src/extensions/types.d.ts +47 -0
  128. package/esm/src/extensions/types.d.ts.map +1 -0
  129. package/esm/src/extensions/types.js +6 -0
  130. package/esm/src/extensions/validation.d.ts +44 -0
  131. package/esm/src/extensions/validation.d.ts.map +1 -0
  132. package/esm/src/extensions/validation.js +115 -0
  133. package/esm/src/html/styles-builder/plugin-loader.d.ts.map +1 -1
  134. package/esm/src/html/styles-builder/plugin-loader.js +23 -0
  135. package/esm/src/html/styles-builder/tailwind-plugin-allowlist.d.ts +29 -0
  136. package/esm/src/html/styles-builder/tailwind-plugin-allowlist.d.ts.map +1 -0
  137. package/esm/src/html/styles-builder/tailwind-plugin-allowlist.js +48 -0
  138. package/esm/src/modules/react-loader/ssr-module-loader/loader-helpers.d.ts +15 -0
  139. package/esm/src/modules/react-loader/ssr-module-loader/loader-helpers.d.ts.map +1 -0
  140. package/esm/src/modules/react-loader/ssr-module-loader/loader-helpers.js +22 -0
  141. package/esm/src/modules/react-loader/ssr-module-loader/loader.d.ts +0 -2
  142. package/esm/src/modules/react-loader/ssr-module-loader/loader.d.ts.map +1 -1
  143. package/esm/src/modules/react-loader/ssr-module-loader/loader.js +4 -24
  144. package/esm/src/platform/adapters/fs/veryfront/adapter-helpers.d.ts +19 -0
  145. package/esm/src/platform/adapters/fs/veryfront/adapter-helpers.d.ts.map +1 -0
  146. package/esm/src/platform/adapters/fs/veryfront/adapter-helpers.js +26 -0
  147. package/esm/src/platform/adapters/fs/veryfront/adapter.d.ts.map +1 -1
  148. package/esm/src/platform/adapters/fs/veryfront/adapter.js +4 -20
  149. package/esm/src/platform/adapters/fs/veryfront/read-operations-helpers.d.ts +1 -0
  150. package/esm/src/platform/adapters/fs/veryfront/read-operations-helpers.d.ts.map +1 -1
  151. package/esm/src/platform/adapters/fs/veryfront/read-operations-helpers.js +3 -0
  152. package/esm/src/platform/adapters/fs/veryfront/read-operations.d.ts.map +1 -1
  153. package/esm/src/platform/adapters/fs/veryfront/read-operations.js +4 -7
  154. package/esm/src/platform/adapters/fs/veryfront/websocket-manager-helpers.d.ts +28 -0
  155. package/esm/src/platform/adapters/fs/veryfront/websocket-manager-helpers.d.ts.map +1 -0
  156. package/esm/src/platform/adapters/fs/veryfront/websocket-manager-helpers.js +41 -0
  157. package/esm/src/platform/adapters/fs/veryfront/websocket-manager.d.ts +1 -4
  158. package/esm/src/platform/adapters/fs/veryfront/websocket-manager.d.ts.map +1 -1
  159. package/esm/src/platform/adapters/fs/veryfront/websocket-manager.js +7 -40
  160. package/esm/src/platform/compat/process/command.d.ts +31 -0
  161. package/esm/src/platform/compat/process/command.d.ts.map +1 -0
  162. package/esm/src/platform/compat/process/command.js +193 -0
  163. package/esm/src/platform/compat/process/env.d.ts +31 -0
  164. package/esm/src/platform/compat/process/env.d.ts.map +1 -0
  165. package/esm/src/platform/compat/process/env.js +175 -0
  166. package/esm/src/platform/compat/process/lifecycle.d.ts +98 -0
  167. package/esm/src/platform/compat/process/lifecycle.d.ts.map +1 -0
  168. package/esm/src/platform/compat/process/lifecycle.js +305 -0
  169. package/esm/src/platform/compat/process/runtime-process.d.ts +10 -0
  170. package/esm/src/platform/compat/process/runtime-process.d.ts.map +1 -0
  171. package/esm/src/platform/compat/process/runtime-process.js +24 -0
  172. package/esm/src/platform/compat/process.d.ts +4 -165
  173. package/esm/src/platform/compat/process.d.ts.map +1 -1
  174. package/esm/src/platform/compat/process.js +4 -682
  175. package/esm/src/platform/index.d.ts +1 -1
  176. package/esm/src/platform/index.d.ts.map +1 -1
  177. package/esm/src/provider/runtime-loader/provider-endpoints.d.ts +8 -0
  178. package/esm/src/provider/runtime-loader/provider-endpoints.d.ts.map +1 -0
  179. package/esm/src/provider/runtime-loader/provider-endpoints.js +27 -0
  180. package/esm/src/provider/runtime-loader/provider-request-init.d.ts +32 -0
  181. package/esm/src/provider/runtime-loader/provider-request-init.d.ts.map +1 -0
  182. package/esm/src/provider/runtime-loader/provider-request-init.js +67 -0
  183. package/esm/src/provider/runtime-loader/tool-input-status.d.ts +17 -0
  184. package/esm/src/provider/runtime-loader/tool-input-status.d.ts.map +1 -0
  185. package/esm/src/provider/runtime-loader/tool-input-status.js +155 -0
  186. package/esm/src/provider/runtime-loader.d.ts +2 -3
  187. package/esm/src/provider/runtime-loader.d.ts.map +1 -1
  188. package/esm/src/provider/runtime-loader.js +92 -291
  189. package/esm/src/proxy/handler.d.ts.map +1 -1
  190. package/esm/src/proxy/handler.js +14 -0
  191. package/esm/src/rendering/orchestrator/pipeline-helpers.d.ts +8 -0
  192. package/esm/src/rendering/orchestrator/pipeline-helpers.d.ts.map +1 -0
  193. package/esm/src/rendering/orchestrator/pipeline-helpers.js +20 -0
  194. package/esm/src/rendering/orchestrator/pipeline.d.ts +0 -3
  195. package/esm/src/rendering/orchestrator/pipeline.d.ts.map +1 -1
  196. package/esm/src/rendering/orchestrator/pipeline.js +4 -22
  197. package/esm/src/routing/api/module-loader/loader-helpers.d.ts +10 -0
  198. package/esm/src/routing/api/module-loader/loader-helpers.d.ts.map +1 -0
  199. package/esm/src/routing/api/module-loader/loader-helpers.js +62 -0
  200. package/esm/src/routing/api/module-loader/loader.d.ts +1 -1
  201. package/esm/src/routing/api/module-loader/loader.d.ts.map +1 -1
  202. package/esm/src/routing/api/module-loader/loader.js +2 -60
  203. package/esm/src/server/bootstrap.d.ts +22 -2
  204. package/esm/src/server/bootstrap.d.ts.map +1 -1
  205. package/esm/src/server/bootstrap.js +67 -5
  206. package/esm/src/server/dev-ui/manifest.d.ts +2 -0
  207. package/esm/src/server/dev-ui/manifest.js +3 -1
  208. package/esm/src/server/handlers/request/api/project-discovery.d.ts.map +1 -1
  209. package/esm/src/server/handlers/request/api/project-discovery.js +14 -8
  210. package/esm/src/server/production-server.js +1 -1
  211. package/esm/src/server/services/rsc/endpoints/rsc-bundles.generated.d.ts.map +1 -1
  212. package/esm/src/server/services/rsc/endpoints/rsc-bundles.generated.js +2 -2
  213. package/esm/src/server/utils/domain-parser.d.ts.map +1 -1
  214. package/esm/src/server/utils/domain-parser.js +4 -0
  215. package/esm/src/studio/bridge/bridge-bundle.generated.d.ts.map +1 -1
  216. package/esm/src/studio/bridge/bridge-bundle.generated.js +1 -1
  217. package/esm/src/tool/index.d.ts +1 -1
  218. package/esm/src/tool/index.d.ts.map +1 -1
  219. package/esm/src/tool/types.d.ts +20 -0
  220. package/esm/src/tool/types.d.ts.map +1 -1
  221. package/esm/src/utils/version-constant.d.ts +1 -1
  222. package/esm/src/utils/version-constant.js +1 -1
  223. package/package.json +7 -1
  224. package/src/cli/commands/extension/command-help.ts +18 -0
  225. package/src/cli/commands/extension/handler.ts +41 -0
  226. package/src/cli/commands/extension/init-command.ts +140 -0
  227. package/src/cli/commands/extension/validate-command.ts +78 -0
  228. package/src/cli/commands/generate/integration-generator-helpers.ts +185 -0
  229. package/src/cli/commands/generate/integration-generator.ts +12 -168
  230. package/src/cli/commands/knowledge/command-helpers.ts +295 -0
  231. package/src/cli/commands/knowledge/command.ts +34 -261
  232. package/src/cli/help/command-definitions.ts +2 -0
  233. package/src/cli/mcp/remote-file-tool-helpers.ts +27 -0
  234. package/src/cli/mcp/remote-file-tools.ts +6 -28
  235. package/src/cli/router.ts +2 -0
  236. package/src/cli/templates/integration-loader-helpers.ts +49 -0
  237. package/src/cli/templates/integration-loader.ts +10 -28
  238. package/src/cli/templates/manifest.js +2 -1
  239. package/src/deno.js +5 -2
  240. package/src/src/agent/runtime/index.ts +77 -94
  241. package/src/src/chat/ag-ui-helpers.ts +139 -0
  242. package/src/src/chat/ag-ui.ts +11 -139
  243. package/src/src/config/schemas/config.schema.ts +11 -0
  244. package/src/src/config/schemas/index.ts +15 -1
  245. package/src/src/errors/error-registry-helpers.ts +23 -0
  246. package/src/src/errors/error-registry.ts +8 -3
  247. package/src/src/extensions/capabilities.ts +97 -0
  248. package/src/src/extensions/contracts.ts +36 -0
  249. package/src/src/extensions/discovery.ts +221 -0
  250. package/src/src/extensions/errors.ts +39 -0
  251. package/src/src/extensions/factory-loader.ts +76 -0
  252. package/src/src/extensions/index.ts +79 -0
  253. package/src/src/extensions/interfaces/ai-model-provider.ts +100 -0
  254. package/src/src/extensions/interfaces/auth-provider.ts +52 -0
  255. package/src/src/extensions/interfaces/bundler.ts +116 -0
  256. package/src/src/extensions/interfaces/cache-store.ts +27 -0
  257. package/src/src/extensions/interfaces/code-parser.ts +84 -0
  258. package/src/src/extensions/interfaces/content-transformer.ts +38 -0
  259. package/src/src/extensions/interfaces/css-processor.ts +40 -0
  260. package/src/src/extensions/interfaces/database-client.ts +35 -0
  261. package/src/src/extensions/interfaces/embedding-provider.ts +39 -0
  262. package/src/src/extensions/interfaces/index.ts +81 -0
  263. package/src/src/extensions/interfaces/node-compat.ts +25 -0
  264. package/src/src/extensions/interfaces/schema-validator.ts +51 -0
  265. package/src/src/extensions/interfaces/tracing-exporter.ts +42 -0
  266. package/src/src/extensions/loader.ts +245 -0
  267. package/src/src/extensions/orchestrate.ts +184 -0
  268. package/src/src/extensions/recommendations.ts +24 -0
  269. package/src/src/extensions/types.ts +57 -0
  270. package/src/src/extensions/validation.ts +147 -0
  271. package/src/src/html/styles-builder/plugin-loader.ts +32 -0
  272. package/src/src/html/styles-builder/tailwind-plugin-allowlist.ts +51 -0
  273. package/src/src/modules/react-loader/ssr-module-loader/loader-helpers.ts +37 -0
  274. package/src/src/modules/react-loader/ssr-module-loader/loader.ts +8 -39
  275. package/src/src/platform/adapters/fs/veryfront/adapter-helpers.ts +43 -0
  276. package/src/src/platform/adapters/fs/veryfront/adapter.ts +8 -22
  277. package/src/src/platform/adapters/fs/veryfront/read-operations-helpers.ts +4 -0
  278. package/src/src/platform/adapters/fs/veryfront/read-operations.ts +4 -7
  279. package/src/src/platform/adapters/fs/veryfront/websocket-manager-helpers.ts +73 -0
  280. package/src/src/platform/adapters/fs/veryfront/websocket-manager.ts +29 -44
  281. package/src/src/platform/compat/process/command.ts +297 -0
  282. package/src/src/platform/compat/process/env.ts +227 -0
  283. package/src/src/platform/compat/process/lifecycle.ts +330 -0
  284. package/src/src/platform/compat/process/runtime-process.ts +27 -0
  285. package/src/src/platform/compat/process.ts +37 -870
  286. package/src/src/platform/index.ts +1 -0
  287. package/src/src/provider/runtime-loader/provider-endpoints.ts +50 -0
  288. package/src/src/provider/runtime-loader/provider-request-init.ts +101 -0
  289. package/src/src/provider/runtime-loader/tool-input-status.ts +210 -0
  290. package/src/src/provider/runtime-loader.ts +113 -368
  291. package/src/src/proxy/handler.ts +16 -0
  292. package/src/src/rendering/orchestrator/pipeline-helpers.ts +35 -0
  293. package/src/src/rendering/orchestrator/pipeline.ts +8 -35
  294. package/src/src/routing/api/module-loader/loader-helpers.ts +68 -0
  295. package/src/src/routing/api/module-loader/loader.ts +8 -65
  296. package/src/src/server/bootstrap.ts +88 -7
  297. package/src/src/server/dev-ui/manifest.js +3 -1
  298. package/src/src/server/handlers/request/api/project-discovery.ts +19 -8
  299. package/src/src/server/production-server.ts +1 -1
  300. package/src/src/server/services/rsc/endpoints/rsc-bundles.generated.ts +2 -2
  301. package/src/src/server/utils/domain-parser.ts +4 -0
  302. package/src/src/studio/bridge/bridge-bundle.generated.ts +1 -1
  303. package/src/src/tool/index.ts +1 -0
  304. package/src/src/tool/types.ts +21 -0
  305. package/src/src/utils/version-constant.ts +1 -1
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Capability audit logging and Deno permission mapping.
3
+ *
4
+ * @module extensions/capabilities
5
+ */
6
+ /**
7
+ * Format capabilities as human-readable strings for logging.
8
+ */
9
+ export function formatCapabilities(capabilities) {
10
+ return capabilities.map((cap) => {
11
+ if (cap.type === "contract") {
12
+ return `contract: ${cap.name}`;
13
+ }
14
+ const { type, ...rest } = cap;
15
+ const extras = Object.keys(rest);
16
+ if (extras.length === 0)
17
+ return type;
18
+ const details = extras
19
+ .map((key) => `${key}: ${JSON.stringify(rest[key])}`)
20
+ .join(", ");
21
+ return `${type} (${details})`;
22
+ });
23
+ }
24
+ const DENO_PERMISSION_MAP = {
25
+ "fs:read": { flag: "--allow-read", scopeKey: "paths" },
26
+ "fs:write": { flag: "--allow-write", scopeKey: "paths" },
27
+ "net:outbound": { flag: "--allow-net", scopeKey: "hosts" },
28
+ "net:listen": {
29
+ flag: "--allow-net",
30
+ resolveScopes: (cap) => {
31
+ const ports = cap.ports;
32
+ if (!ports || ports.length === 0)
33
+ return [];
34
+ const host = cap.host || "localhost";
35
+ return ports.map((p) => `${host}:${p}`);
36
+ },
37
+ },
38
+ "env:read": { flag: "--allow-env", scopeKey: "keys" },
39
+ "process:spawn": { flag: "--allow-run", scopeKey: "commands" },
40
+ "native:ffi": { flag: "--allow-ffi" },
41
+ };
42
+ /**
43
+ * Map capabilities to Deno CLI permission flags.
44
+ * Skips non-system capabilities (e.g., "contract").
45
+ */
46
+ export function mapToDenoPermissions(capabilities) {
47
+ const seen = new Set();
48
+ const flags = [];
49
+ for (const cap of capabilities) {
50
+ const mapping = DENO_PERMISSION_MAP[cap.type];
51
+ if (!mapping)
52
+ continue;
53
+ let flag = mapping.flag;
54
+ const scopes = mapping.resolveScopes
55
+ ? mapping.resolveScopes(cap)
56
+ : mapping.scopeKey
57
+ ? cap[mapping.scopeKey] ?? []
58
+ : [];
59
+ if (scopes.length > 0) {
60
+ flag = `${flag}=${scopes.join(",")}`;
61
+ }
62
+ if (!seen.has(flag)) {
63
+ seen.add(flag);
64
+ flags.push(flag);
65
+ }
66
+ }
67
+ return flags;
68
+ }
69
+ /**
70
+ * Log capabilities for a named extension at startup.
71
+ */
72
+ export function auditCapabilities(extensionName, capabilities, logger) {
73
+ if (capabilities.length === 0)
74
+ return;
75
+ const lines = formatCapabilities(capabilities);
76
+ logger.info(`Extension "${extensionName}" declares capabilities:`, ...lines);
77
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Contract registry — runtime resolution of extension-provided implementations.
3
+ *
4
+ * @module extensions/contracts
5
+ */
6
+ export declare function resolve<T>(name: string): T;
7
+ export declare function tryResolve<T>(name: string): T | undefined;
8
+ export declare function register<T>(name: string, impl: T): void;
9
+ export declare function reset(): void;
10
+ //# sourceMappingURL=contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../src/src/extensions/contracts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,wBAAgB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,CAY1C;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAEzD;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAEvD;AAED,wBAAgB,KAAK,IAAI,IAAI,CAE5B"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Contract registry — runtime resolution of extension-provided implementations.
3
+ *
4
+ * @module extensions/contracts
5
+ */
6
+ import { MISSING_EXTENSION_ERROR } from "./errors.js";
7
+ import { getRecommendation } from "./recommendations.js";
8
+ const contracts = new Map();
9
+ export function resolve(name) {
10
+ const impl = contracts.get(name);
11
+ if (impl === undefined) {
12
+ const recommendation = getRecommendation(name);
13
+ throw MISSING_EXTENSION_ERROR.create({
14
+ message: `Missing extension for contract "${name}"${recommendation ? `. Recommended: ${recommendation}` : ""}`,
15
+ detail: recommendation ? `Install it with: deno add ${recommendation}` : undefined,
16
+ });
17
+ }
18
+ return impl;
19
+ }
20
+ export function tryResolve(name) {
21
+ return contracts.get(name);
22
+ }
23
+ export function register(name, impl) {
24
+ contracts.set(name, impl);
25
+ }
26
+ export function reset() {
27
+ contracts.clear();
28
+ }
@@ -0,0 +1,48 @@
1
+ import type { Capability, ResolvedExtension } from "./types.js";
2
+ /**
3
+ * Metadata extracted from a package.json that declares itself
4
+ * as a veryfront extension.
5
+ */
6
+ export interface PackageMetadata {
7
+ isExtension: true;
8
+ capabilities: Capability[];
9
+ }
10
+ /**
11
+ * Parse veryfront extension metadata from a package.json-like object.
12
+ *
13
+ * Returns `PackageMetadata` when the package declares
14
+ * `veryfront.extension: true`, otherwise `undefined`. Malformed capability
15
+ * entries are filtered out; the caller receives only valid shapes.
16
+ */
17
+ export declare function parsePackageMetadata(pkg: Record<string, unknown>): PackageMetadata | undefined;
18
+ /**
19
+ * Merge extensions from all four sources in priority order.
20
+ *
21
+ * Priority (highest first): config > package > project > local-file.
22
+ * Duplicates are resolved by keeping the highest-priority entry.
23
+ * Disable directives (`{ name, enabled: false }`) remove matching
24
+ * extensions regardless of source.
25
+ */
26
+ export declare function mergeExtensions(config: ResolvedExtension[], packages: ResolvedExtension[], project: ResolvedExtension[], local: ResolvedExtension[], disableDirectives?: Array<{
27
+ name: string;
28
+ enabled: false;
29
+ }>): ResolvedExtension[];
30
+ /**
31
+ * Scan `node_modules` (including `@scoped` packages) for packages
32
+ * that declare veryfront extension metadata in their `package.json`.
33
+ */
34
+ export declare function discoverPackageExtensions(baseDir: string): Promise<Array<{
35
+ packageName: string;
36
+ metadata: PackageMetadata;
37
+ }>>;
38
+ /**
39
+ * Discover project extensions living under `extensions/` in the project root.
40
+ *
41
+ * Looks for `extensions/<name>/src/index.ts` and `extensions/<name>/index.ts`.
42
+ */
43
+ export declare function discoverProjectExtensions(baseDir: string): Promise<string[]>;
44
+ /**
45
+ * Find `*.extension.ts` files in the project root.
46
+ */
47
+ export declare function discoverLocalExtensions(baseDir: string): Promise<string[]>;
48
+ //# sourceMappingURL=discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/src/extensions/discovery.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEhE;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,IAAI,CAAC;IAClB,YAAY,EAAE,UAAU,EAAE,CAAC;CAC5B;AAUD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,eAAe,GAAG,SAAS,CAmB7B;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,iBAAiB,EAAE,EAC3B,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,OAAO,EAAE,iBAAiB,EAAE,EAC5B,KAAK,EAAE,iBAAiB,EAAE,EAC1B,iBAAiB,CAAC,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,CAAC,GAC1D,iBAAiB,EAAE,CAwBrB;AA6BD;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,KAAK,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAA;CAAE,CAAC,CAAC,CA4BpE;AAqBD;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,EAAE,CAAC,CAkBnB;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,EAAE,CAAC,CAKnB"}
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Multi-source extension discovery.
3
+ *
4
+ * Discovers extensions from four sources with priority:
5
+ * config > package > project > local-file
6
+ *
7
+ * @module extensions/discovery
8
+ */
9
+ import * as dntShim from "../../_dnt.shims.js";
10
+ import { join } from "../../deps/jsr.io/@std/path/1.1.4/mod.js";
11
+ function isCapability(value) {
12
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
13
+ return false;
14
+ }
15
+ const cap = value;
16
+ return typeof cap.type === "string" && cap.type.length > 0;
17
+ }
18
+ /**
19
+ * Parse veryfront extension metadata from a package.json-like object.
20
+ *
21
+ * Returns `PackageMetadata` when the package declares
22
+ * `veryfront.extension: true`, otherwise `undefined`. Malformed capability
23
+ * entries are filtered out; the caller receives only valid shapes.
24
+ */
25
+ export function parsePackageMetadata(pkg) {
26
+ const vf = pkg.veryfront;
27
+ if (vf === null || vf === undefined || typeof vf !== "object" ||
28
+ Array.isArray(vf)) {
29
+ return undefined;
30
+ }
31
+ const meta = vf;
32
+ if (meta.extension !== true) {
33
+ return undefined;
34
+ }
35
+ const capabilities = Array.isArray(meta.capabilities)
36
+ ? meta.capabilities.filter(isCapability)
37
+ : [];
38
+ return { isExtension: true, capabilities };
39
+ }
40
+ /**
41
+ * Merge extensions from all four sources in priority order.
42
+ *
43
+ * Priority (highest first): config > package > project > local-file.
44
+ * Duplicates are resolved by keeping the highest-priority entry.
45
+ * Disable directives (`{ name, enabled: false }`) remove matching
46
+ * extensions regardless of source.
47
+ */
48
+ export function mergeExtensions(config, packages, project, local, disableDirectives) {
49
+ const disabledNames = new Set((disableDirectives ?? []).map((d) => d.name));
50
+ const seen = new Map();
51
+ // Process sources in priority order -- first write wins.
52
+ const ordered = [
53
+ ...config,
54
+ ...packages,
55
+ ...project,
56
+ ...local,
57
+ ];
58
+ for (const resolved of ordered) {
59
+ const name = resolved.extension.name;
60
+ if (disabledNames.has(name))
61
+ continue;
62
+ if (!seen.has(name)) {
63
+ seen.set(name, resolved);
64
+ }
65
+ }
66
+ return [...seen.values()];
67
+ }
68
+ // ---------------------------------------------------------------------------
69
+ // Filesystem discovery helpers
70
+ // ---------------------------------------------------------------------------
71
+ async function readDir(path) {
72
+ try {
73
+ const entries = [];
74
+ for await (const entry of dntShim.Deno.readDir(path)) {
75
+ entries.push(entry);
76
+ }
77
+ return entries;
78
+ }
79
+ catch (err) {
80
+ if (err instanceof dntShim.Deno.errors.NotFound)
81
+ return [];
82
+ throw err;
83
+ }
84
+ }
85
+ async function fileExists(path) {
86
+ try {
87
+ await dntShim.Deno.stat(path);
88
+ return true;
89
+ }
90
+ catch (err) {
91
+ if (err instanceof dntShim.Deno.errors.NotFound)
92
+ return false;
93
+ throw err;
94
+ }
95
+ }
96
+ /**
97
+ * Scan `node_modules` (including `@scoped` packages) for packages
98
+ * that declare veryfront extension metadata in their `package.json`.
99
+ */
100
+ export async function discoverPackageExtensions(baseDir) {
101
+ const nmDir = join(baseDir, "node_modules");
102
+ const results = [];
103
+ const entries = await readDir(nmDir);
104
+ for (const entry of entries) {
105
+ // Accept symlinks so pnpm-style node_modules layouts are discovered.
106
+ if (!entry.isDirectory && !entry.isSymlink)
107
+ continue;
108
+ if (entry.name.startsWith("@")) {
109
+ // Scoped packages -- iterate one level deeper.
110
+ const scopeDir = join(nmDir, entry.name);
111
+ const scopeEntries = await readDir(scopeDir);
112
+ for (const scopeEntry of scopeEntries) {
113
+ if (!scopeEntry.isDirectory && !scopeEntry.isSymlink)
114
+ continue;
115
+ const pkgName = `${entry.name}/${scopeEntry.name}`;
116
+ const meta = await tryReadPackageMeta(join(scopeDir, scopeEntry.name));
117
+ if (meta)
118
+ results.push({ packageName: pkgName, metadata: meta });
119
+ }
120
+ }
121
+ else {
122
+ const meta = await tryReadPackageMeta(join(nmDir, entry.name));
123
+ if (meta)
124
+ results.push({ packageName: entry.name, metadata: meta });
125
+ }
126
+ }
127
+ return results;
128
+ }
129
+ async function tryReadPackageMeta(pkgDir) {
130
+ let raw;
131
+ try {
132
+ raw = await dntShim.Deno.readTextFile(join(pkgDir, "package.json"));
133
+ }
134
+ catch (err) {
135
+ if (err instanceof dntShim.Deno.errors.NotFound)
136
+ return undefined;
137
+ throw err;
138
+ }
139
+ try {
140
+ const pkg = JSON.parse(raw);
141
+ return parsePackageMetadata(pkg);
142
+ }
143
+ catch {
144
+ // Malformed JSON -- treat as non-extension package.
145
+ return undefined;
146
+ }
147
+ }
148
+ /**
149
+ * Discover project extensions living under `extensions/` in the project root.
150
+ *
151
+ * Looks for `extensions/<name>/src/index.ts` and `extensions/<name>/index.ts`.
152
+ */
153
+ export async function discoverProjectExtensions(baseDir) {
154
+ const extDir = join(baseDir, "extensions");
155
+ const entries = await readDir(extDir);
156
+ const results = [];
157
+ for (const entry of entries) {
158
+ if (!entry.isDirectory)
159
+ continue;
160
+ const srcIndex = join(extDir, entry.name, "src", "index.ts");
161
+ const rootIndex = join(extDir, entry.name, "index.ts");
162
+ if (await fileExists(srcIndex)) {
163
+ results.push(srcIndex);
164
+ }
165
+ else if (await fileExists(rootIndex)) {
166
+ results.push(rootIndex);
167
+ }
168
+ }
169
+ return results;
170
+ }
171
+ /**
172
+ * Find `*.extension.ts` files in the project root.
173
+ */
174
+ export async function discoverLocalExtensions(baseDir) {
175
+ const entries = await readDir(baseDir);
176
+ return entries
177
+ .filter((e) => !e.isDirectory && e.name.endsWith(".extension.ts"))
178
+ .map((e) => join(baseDir, e.name));
179
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Extension system error definitions.
3
+ *
4
+ * @module extensions/errors
5
+ */
6
+ export declare const MISSING_EXTENSION_ERROR: import("../errors/types.js").RegisteredError;
7
+ export declare const EXTENSION_VALIDATION_ERROR: import("../errors/types.js").RegisteredError;
8
+ export declare const CIRCULAR_DEPENDENCY_ERROR: import("../errors/types.js").RegisteredError;
9
+ export declare const EXTENSION_CONFLICT_ERROR: import("../errors/types.js").RegisteredError;
10
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/src/extensions/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,eAAO,MAAM,uBAAuB,8CAMlC,CAAC;AAEH,eAAO,MAAM,0BAA0B,8CAMrC,CAAC;AAEH,eAAO,MAAM,yBAAyB,8CAMpC,CAAC;AAEH,eAAO,MAAM,wBAAwB,8CAMnC,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Extension system error definitions.
3
+ *
4
+ * @module extensions/errors
5
+ */
6
+ import { defineError } from "../errors/index.js";
7
+ export const MISSING_EXTENSION_ERROR = defineError({
8
+ slug: "missing-extension",
9
+ category: "RUNTIME",
10
+ status: 500,
11
+ title: "Required extension not found",
12
+ suggestion: "Install the missing extension package and add it to your configuration",
13
+ });
14
+ export const EXTENSION_VALIDATION_ERROR = defineError({
15
+ slug: "extension-validation",
16
+ category: "CONFIG",
17
+ status: 422,
18
+ title: "Extension validation failed",
19
+ suggestion: "Check that the extension exports a valid name, version, and capabilities array",
20
+ });
21
+ export const CIRCULAR_DEPENDENCY_ERROR = defineError({
22
+ slug: "extension-circular-dependency",
23
+ category: "CONFIG",
24
+ status: 422,
25
+ title: "Circular dependency detected between extensions",
26
+ suggestion: "Review the 'extends' fields in your extensions to break the cycle",
27
+ });
28
+ export const EXTENSION_CONFLICT_ERROR = defineError({
29
+ slug: "extension-conflict",
30
+ category: "CONFIG",
31
+ status: 409,
32
+ title: "Conflicting extensions detected",
33
+ suggestion: "Remove or disable one of the conflicting extensions in your configuration",
34
+ });
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Dynamic factory loader.
3
+ *
4
+ * Loads an extension factory from a filesystem path by dynamic import,
5
+ * invokes it, and wraps the result as a `ResolvedExtension`.
6
+ *
7
+ * @module extensions/factory-loader
8
+ */
9
+ import type { ExtensionSource, ResolvedExtension } from "./types.js";
10
+ /**
11
+ * Dynamically import an extension factory from `path` and resolve it.
12
+ *
13
+ * `path` may be either an absolute filesystem path (for project and
14
+ * local-file sources) or a bare module specifier (for `package` source).
15
+ * Absolute paths are converted to `file://` URLs; bare specifiers are
16
+ * passed through so the runtime's module resolver can find them.
17
+ *
18
+ * The module must `export default` an `ExtensionFactory` (a function that
19
+ * returns an `Extension`). On any error — missing default export, default
20
+ * export that is not a function, factory throw, or import failure — this
21
+ * throws `EXTENSION_VALIDATION_ERROR` with a `detail` field that names the
22
+ * path and what went wrong.
23
+ *
24
+ * @param path Absolute filesystem path or bare module specifier.
25
+ * @param source Where the extension was discovered (drives merge priority).
26
+ * @param config Optional config forwarded to the factory.
27
+ */
28
+ export declare function loadExtensionFactory(path: string, source: ExtensionSource, config?: unknown): Promise<ResolvedExtension>;
29
+ //# sourceMappingURL=factory-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory-loader.d.ts","sourceRoot":"","sources":["../../../src/src/extensions/factory-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAA+B,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAElG;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,eAAe,EACvB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,iBAAiB,CAAC,CAwC5B"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Dynamic factory loader.
3
+ *
4
+ * Loads an extension factory from a filesystem path by dynamic import,
5
+ * invokes it, and wraps the result as a `ResolvedExtension`.
6
+ *
7
+ * @module extensions/factory-loader
8
+ */
9
+ import { isAbsolute, toFileUrl } from "../../deps/jsr.io/@std/path/1.1.4/mod.js";
10
+ import { EXTENSION_VALIDATION_ERROR } from "./errors.js";
11
+ /**
12
+ * Dynamically import an extension factory from `path` and resolve it.
13
+ *
14
+ * `path` may be either an absolute filesystem path (for project and
15
+ * local-file sources) or a bare module specifier (for `package` source).
16
+ * Absolute paths are converted to `file://` URLs; bare specifiers are
17
+ * passed through so the runtime's module resolver can find them.
18
+ *
19
+ * The module must `export default` an `ExtensionFactory` (a function that
20
+ * returns an `Extension`). On any error — missing default export, default
21
+ * export that is not a function, factory throw, or import failure — this
22
+ * throws `EXTENSION_VALIDATION_ERROR` with a `detail` field that names the
23
+ * path and what went wrong.
24
+ *
25
+ * @param path Absolute filesystem path or bare module specifier.
26
+ * @param source Where the extension was discovered (drives merge priority).
27
+ * @param config Optional config forwarded to the factory.
28
+ */
29
+ export async function loadExtensionFactory(path, source, config) {
30
+ const specifier = isAbsolute(path) ? toFileUrl(path).href : path;
31
+ let mod;
32
+ try {
33
+ mod = await import(specifier);
34
+ }
35
+ catch (err) {
36
+ throw EXTENSION_VALIDATION_ERROR.create({
37
+ detail: `Failed to import extension at "${path}": ${err instanceof Error ? err.message : String(err)}`,
38
+ cause: err,
39
+ });
40
+ }
41
+ const factory = mod.default;
42
+ if (factory === undefined || factory === null) {
43
+ throw EXTENSION_VALIDATION_ERROR.create({
44
+ detail: `Extension at "${path}" has no default export`,
45
+ });
46
+ }
47
+ if (typeof factory !== "function") {
48
+ throw EXTENSION_VALIDATION_ERROR.create({
49
+ detail: `Extension at "${path}" default export is not a function (got ${typeof factory})`,
50
+ });
51
+ }
52
+ let extension;
53
+ try {
54
+ extension = factory(config);
55
+ }
56
+ catch (err) {
57
+ throw EXTENSION_VALIDATION_ERROR.create({
58
+ detail: `Extension factory at "${path}" threw during invocation: ${err instanceof Error ? err.message : String(err)}`,
59
+ cause: err,
60
+ });
61
+ }
62
+ return { extension, source, origin: path };
63
+ }
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Public extension API surface.
3
+ *
4
+ * Types used when authoring extensions (the scaffold template generated by
5
+ * `veryfront extension init` imports from this module), plus the runtime
6
+ * helpers consumers need to load, validate, and orchestrate extensions.
7
+ *
8
+ * @module extensions
9
+ * @example
10
+ * ```ts
11
+ * import { orchestrateExtensions } from "veryfront/extensions";
12
+ *
13
+ * const loader = await orchestrateExtensions({
14
+ * projectDir: Deno.cwd(),
15
+ * config,
16
+ * logger,
17
+ * });
18
+ *
19
+ * // Later, on shutdown:
20
+ * await loader.teardownAll();
21
+ * ```
22
+ */
23
+ import "../../_dnt.polyfills.js";
24
+ export type { Capability, Extension, ExtensionConfigEntry, ExtensionContext, ExtensionFactory, ExtensionLogger, ExtensionSource, ResolvedExtension, } from "./types.js";
25
+ export { resolve, tryResolve } from "./contracts.js";
26
+ export type { PackageMetadata } from "./discovery.js";
27
+ export { discoverLocalExtensions, discoverPackageExtensions, discoverProjectExtensions, mergeExtensions, parsePackageMetadata, } from "./discovery.js";
28
+ export { ExtensionLoader } from "./loader.js";
29
+ export { loadExtensionFactory } from "./factory-loader.js";
30
+ export type { OrchestrateOptions } from "./orchestrate.js";
31
+ export { orchestrateExtensions } from "./orchestrate.js";
32
+ export type { ConflictInfo } from "./validation.js";
33
+ export { detectConflicts, validateExtension } from "./validation.js";
34
+ export { auditCapabilities, formatCapabilities, mapToDenoPermissions } from "./capabilities.js";
35
+ export { getRecommendation } from "./recommendations.js";
36
+ export { CIRCULAR_DEPENDENCY_ERROR, EXTENSION_CONFLICT_ERROR, EXTENSION_VALIDATION_ERROR, MISSING_EXTENSION_ERROR, } from "./errors.js";
37
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/extensions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,yBAAyB,CAAC;AAEjC,YAAY,EACV,UAAU,EACV,SAAS,EACT,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAKpB,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGrD,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,yBAAyB,EACzB,eAAe,EACf,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAGzD,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGrE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGhG,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Public extension API surface.
3
+ *
4
+ * Types used when authoring extensions (the scaffold template generated by
5
+ * `veryfront extension init` imports from this module), plus the runtime
6
+ * helpers consumers need to load, validate, and orchestrate extensions.
7
+ *
8
+ * @module extensions
9
+ * @example
10
+ * ```ts
11
+ * import { orchestrateExtensions } from "veryfront/extensions";
12
+ *
13
+ * const loader = await orchestrateExtensions({
14
+ * projectDir: Deno.cwd(),
15
+ * config,
16
+ * logger,
17
+ * });
18
+ *
19
+ * // Later, on shutdown:
20
+ * await loader.teardownAll();
21
+ * ```
22
+ */
23
+ // Core types
24
+ import "../../_dnt.polyfills.js";
25
+ // Contract registry — resolve/tryResolve are the consumer-facing API.
26
+ // register()/reset() are internal primitives (used by ExtensionLoader and
27
+ // tests) and are intentionally not exported here.
28
+ export { resolve, tryResolve } from "./contracts.js";
29
+ export { discoverLocalExtensions, discoverPackageExtensions, discoverProjectExtensions, mergeExtensions, parsePackageMetadata, } from "./discovery.js";
30
+ // Loader
31
+ export { ExtensionLoader } from "./loader.js";
32
+ // Factory loader (dynamic-import of an extension factory)
33
+ export { loadExtensionFactory } from "./factory-loader.js";
34
+ export { orchestrateExtensions } from "./orchestrate.js";
35
+ export { detectConflicts, validateExtension } from "./validation.js";
36
+ // Capabilities
37
+ export { auditCapabilities, formatCapabilities, mapToDenoPermissions } from "./capabilities.js";
38
+ // Recommendations
39
+ export { getRecommendation } from "./recommendations.js";
40
+ // Errors
41
+ export { CIRCULAR_DEPENDENCY_ERROR, EXTENSION_CONFLICT_ERROR, EXTENSION_VALIDATION_ERROR, MISSING_EXTENSION_ERROR, } from "./errors.js";