dexto 1.5.8 → 1.6.1

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 (224) hide show
  1. package/README.md +3 -3
  2. package/dist/agents/agent-template.yml +2 -2
  3. package/dist/agents/coding-agent/README.md +10 -10
  4. package/dist/agents/coding-agent/coding-agent.yml +84 -83
  5. package/dist/agents/default-agent.yml +32 -47
  6. package/dist/agents/explore-agent/explore-agent.yml +3 -6
  7. package/dist/agents/image-editor-agent/image-editor-agent.yml +1 -1
  8. package/dist/agents/nano-banana-agent/nano-banana-agent.yml +1 -1
  9. package/dist/agents/podcast-agent/podcast-agent.yml +1 -1
  10. package/dist/agents/product-name-researcher/product-name-researcher.yml +1 -1
  11. package/dist/agents/sora-video-agent/sora-video-agent.yml +4 -6
  12. package/dist/agents/triage-demo/triage-agent.yml +1 -1
  13. package/dist/analytics/events.d.ts +1 -1
  14. package/dist/analytics/events.d.ts.map +1 -1
  15. package/dist/api/mcp/tool-aggregation-handler.d.ts +2 -2
  16. package/dist/api/server-hono.d.ts +2 -2
  17. package/dist/api/server-hono.d.ts.map +1 -1
  18. package/dist/api/server-hono.js +37 -60
  19. package/dist/cli/approval/cli-approval-handler.d.ts +10 -3
  20. package/dist/cli/approval/cli-approval-handler.d.ts.map +1 -1
  21. package/dist/cli/approval/cli-approval-handler.js +1 -1
  22. package/dist/cli/assets/sounds/SOURCES.md +35 -0
  23. package/dist/cli/assets/sounds/boot.wav +0 -0
  24. package/dist/cli/assets/sounds/chime.wav +0 -0
  25. package/dist/cli/assets/sounds/coin.wav +0 -0
  26. package/dist/cli/assets/sounds/confirm.wav +0 -0
  27. package/dist/cli/assets/sounds/levelup.wav +0 -0
  28. package/dist/cli/assets/sounds/ping.wav +0 -0
  29. package/dist/cli/assets/sounds/powerup.wav +0 -0
  30. package/dist/cli/assets/sounds/startup.wav +0 -0
  31. package/dist/cli/assets/sounds/success.wav +0 -0
  32. package/dist/cli/assets/sounds/treasure.wav +0 -0
  33. package/dist/cli/assets/sounds/win.wav +0 -0
  34. package/dist/cli/commands/create-app.d.ts +1 -11
  35. package/dist/cli/commands/create-app.d.ts.map +1 -1
  36. package/dist/cli/commands/create-app.js +21 -545
  37. package/dist/cli/commands/create-image.d.ts.map +1 -1
  38. package/dist/cli/commands/create-image.js +54 -53
  39. package/dist/cli/commands/image.d.ts +52 -0
  40. package/dist/cli/commands/image.d.ts.map +1 -0
  41. package/dist/cli/commands/image.js +118 -0
  42. package/dist/cli/commands/index.d.ts +2 -1
  43. package/dist/cli/commands/index.d.ts.map +1 -1
  44. package/dist/cli/commands/index.js +3 -1
  45. package/dist/cli/commands/init-app.d.ts +4 -8
  46. package/dist/cli/commands/init-app.d.ts.map +1 -1
  47. package/dist/cli/commands/init-app.js +37 -161
  48. package/dist/cli/commands/interactive-commands/command-parser.d.ts +2 -0
  49. package/dist/cli/commands/interactive-commands/command-parser.d.ts.map +1 -1
  50. package/dist/cli/commands/interactive-commands/commands.d.ts +1 -1
  51. package/dist/cli/commands/interactive-commands/commands.d.ts.map +1 -1
  52. package/dist/cli/commands/interactive-commands/commands.js +2 -2
  53. package/dist/cli/commands/interactive-commands/exit-handler.d.ts +12 -0
  54. package/dist/cli/commands/interactive-commands/exit-handler.d.ts.map +1 -0
  55. package/dist/cli/commands/interactive-commands/exit-handler.js +20 -0
  56. package/dist/cli/commands/interactive-commands/exit-stats.d.ts +24 -0
  57. package/dist/cli/commands/interactive-commands/exit-stats.d.ts.map +1 -0
  58. package/dist/cli/commands/interactive-commands/exit-stats.js +17 -0
  59. package/dist/cli/commands/interactive-commands/general-commands.d.ts.map +1 -1
  60. package/dist/cli/commands/interactive-commands/general-commands.js +55 -5
  61. package/dist/cli/commands/interactive-commands/prompt-commands.d.ts.map +1 -1
  62. package/dist/cli/commands/interactive-commands/prompt-commands.js +14 -74
  63. package/dist/cli/commands/interactive-commands/session/index.d.ts +2 -1
  64. package/dist/cli/commands/interactive-commands/session/index.d.ts.map +1 -1
  65. package/dist/cli/commands/interactive-commands/session/index.js +2 -1
  66. package/dist/cli/commands/interactive-commands/session/session-commands.d.ts +2 -2
  67. package/dist/cli/commands/interactive-commands/session/session-commands.d.ts.map +1 -1
  68. package/dist/cli/commands/interactive-commands/session/session-commands.js +2 -4
  69. package/dist/cli/commands/interactive-commands/system/system-commands.d.ts +1 -13
  70. package/dist/cli/commands/interactive-commands/system/system-commands.d.ts.map +1 -1
  71. package/dist/cli/commands/interactive-commands/system/system-commands.js +52 -83
  72. package/dist/cli/commands/plugin.d.ts +4 -4
  73. package/dist/cli/commands/sync-agents.d.ts +2 -12
  74. package/dist/cli/commands/sync-agents.d.ts.map +1 -1
  75. package/dist/cli/commands/sync-agents.js +2 -50
  76. package/dist/cli/ink-cli/InkCLIRefactored.d.ts +7 -1
  77. package/dist/cli/ink-cli/InkCLIRefactored.d.ts.map +1 -1
  78. package/dist/cli/ink-cli/InkCLIRefactored.js +138 -27
  79. package/dist/cli/ink-cli/components/ApprovalPrompt.d.ts +2 -2
  80. package/dist/cli/ink-cli/components/ApprovalPrompt.d.ts.map +1 -1
  81. package/dist/cli/ink-cli/components/ApprovalPrompt.js +85 -30
  82. package/dist/cli/ink-cli/components/BackgroundTasksPanel.js +1 -1
  83. package/dist/cli/ink-cli/components/ElicitationForm.d.ts +5 -3
  84. package/dist/cli/ink-cli/components/ElicitationForm.d.ts.map +1 -1
  85. package/dist/cli/ink-cli/components/ElicitationForm.js +414 -180
  86. package/dist/cli/ink-cli/components/Footer.d.ts.map +1 -1
  87. package/dist/cli/ink-cli/components/Footer.js +1 -2
  88. package/dist/cli/ink-cli/components/ResourceAutocomplete.d.ts.map +1 -1
  89. package/dist/cli/ink-cli/components/ResourceAutocomplete.js +20 -11
  90. package/dist/cli/ink-cli/components/SlashCommandAutocomplete.d.ts.map +1 -1
  91. package/dist/cli/ink-cli/components/SlashCommandAutocomplete.js +47 -67
  92. package/dist/cli/ink-cli/components/StatusBar.d.ts.map +1 -1
  93. package/dist/cli/ink-cli/components/StatusBar.js +20 -10
  94. package/dist/cli/ink-cli/components/TodoPanel.js +1 -1
  95. package/dist/cli/ink-cli/components/base/BaseSelector.d.ts +2 -1
  96. package/dist/cli/ink-cli/components/base/BaseSelector.d.ts.map +1 -1
  97. package/dist/cli/ink-cli/components/base/BaseSelector.js +37 -27
  98. package/dist/cli/ink-cli/components/chat/Header.d.ts.map +1 -1
  99. package/dist/cli/ink-cli/components/chat/Header.js +1 -1
  100. package/dist/cli/ink-cli/components/chat/MessageItem.d.ts.map +1 -1
  101. package/dist/cli/ink-cli/components/chat/MessageItem.js +3 -1
  102. package/dist/cli/ink-cli/components/chat/ToolIcon.d.ts.map +1 -1
  103. package/dist/cli/ink-cli/components/chat/ToolIcon.js +5 -15
  104. package/dist/cli/ink-cli/components/chat/styled-boxes/ConfigBox.js +1 -1
  105. package/dist/cli/ink-cli/components/chat/styled-boxes/LogConfigBox.d.ts.map +1 -1
  106. package/dist/cli/ink-cli/components/chat/styled-boxes/LogConfigBox.js +1 -1
  107. package/dist/cli/ink-cli/components/modes/AlternateBufferCLI.d.ts +3 -1
  108. package/dist/cli/ink-cli/components/modes/AlternateBufferCLI.d.ts.map +1 -1
  109. package/dist/cli/ink-cli/components/modes/AlternateBufferCLI.js +5 -3
  110. package/dist/cli/ink-cli/components/modes/StaticCLI.d.ts +3 -1
  111. package/dist/cli/ink-cli/components/modes/StaticCLI.d.ts.map +1 -1
  112. package/dist/cli/ink-cli/components/modes/StaticCLI.js +10 -3
  113. package/dist/cli/ink-cli/components/overlays/CommandOutputOverlay.d.ts +13 -0
  114. package/dist/cli/ink-cli/components/overlays/CommandOutputOverlay.d.ts.map +1 -0
  115. package/dist/cli/ink-cli/components/overlays/CommandOutputOverlay.js +60 -0
  116. package/dist/cli/ink-cli/components/overlays/LogLevelSelector.js +1 -1
  117. package/dist/cli/ink-cli/components/overlays/ModelSelectorRefactored.d.ts.map +1 -1
  118. package/dist/cli/ink-cli/components/overlays/ModelSelectorRefactored.js +213 -100
  119. package/dist/cli/ink-cli/components/overlays/PromptList.d.ts.map +1 -1
  120. package/dist/cli/ink-cli/components/overlays/PromptList.js +12 -16
  121. package/dist/cli/ink-cli/components/overlays/SoundsSelector.d.ts +21 -0
  122. package/dist/cli/ink-cli/components/overlays/SoundsSelector.d.ts.map +1 -0
  123. package/dist/cli/ink-cli/components/overlays/SoundsSelector.js +566 -0
  124. package/dist/cli/ink-cli/components/overlays/ToolBrowser.d.ts +1 -1
  125. package/dist/cli/ink-cli/components/overlays/ToolBrowser.d.ts.map +1 -1
  126. package/dist/cli/ink-cli/components/overlays/ToolBrowser.js +100 -45
  127. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/LocalModelWizard.d.ts.map +1 -1
  128. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/LocalModelWizard.js +8 -13
  129. package/dist/cli/ink-cli/components/renderers/FilePreviewRenderer.d.ts +3 -3
  130. package/dist/cli/ink-cli/components/renderers/FilePreviewRenderer.d.ts.map +1 -1
  131. package/dist/cli/ink-cli/components/renderers/FilePreviewRenderer.js +6 -5
  132. package/dist/cli/ink-cli/components/renderers/FileRenderer.d.ts +3 -1
  133. package/dist/cli/ink-cli/components/renderers/FileRenderer.d.ts.map +1 -1
  134. package/dist/cli/ink-cli/components/renderers/FileRenderer.js +18 -7
  135. package/dist/cli/ink-cli/components/renderers/ShellRenderer.d.ts.map +1 -1
  136. package/dist/cli/ink-cli/components/renderers/ShellRenderer.js +7 -17
  137. package/dist/cli/ink-cli/components/renderers/index.d.ts.map +1 -1
  138. package/dist/cli/ink-cli/components/renderers/index.js +1 -1
  139. package/dist/cli/ink-cli/components/shared/FocusOverlayFrame.d.ts +7 -0
  140. package/dist/cli/ink-cli/components/shared/FocusOverlayFrame.d.ts.map +1 -0
  141. package/dist/cli/ink-cli/components/shared/FocusOverlayFrame.js +8 -0
  142. package/dist/cli/ink-cli/components/shared/HintBar.d.ts +6 -0
  143. package/dist/cli/ink-cli/components/shared/HintBar.d.ts.map +1 -0
  144. package/dist/cli/ink-cli/components/shared/HintBar.js +6 -0
  145. package/dist/cli/ink-cli/constants/spinnerFrames.d.ts +2 -0
  146. package/dist/cli/ink-cli/constants/spinnerFrames.d.ts.map +1 -0
  147. package/dist/cli/ink-cli/constants/spinnerFrames.js +1 -0
  148. package/dist/cli/ink-cli/constants/tips.d.ts.map +1 -1
  149. package/dist/cli/ink-cli/constants/tips.js +2 -1
  150. package/dist/cli/ink-cli/containers/InputContainer.d.ts +4 -0
  151. package/dist/cli/ink-cli/containers/InputContainer.d.ts.map +1 -1
  152. package/dist/cli/ink-cli/containers/InputContainer.js +47 -21
  153. package/dist/cli/ink-cli/containers/OverlayContainer.d.ts +2 -0
  154. package/dist/cli/ink-cli/containers/OverlayContainer.d.ts.map +1 -1
  155. package/dist/cli/ink-cli/containers/OverlayContainer.js +101 -40
  156. package/dist/cli/ink-cli/hooks/useAgentEvents.d.ts.map +1 -1
  157. package/dist/cli/ink-cli/hooks/useAgentEvents.js +15 -16
  158. package/dist/cli/ink-cli/hooks/useAnimationTick.d.ts +11 -0
  159. package/dist/cli/ink-cli/hooks/useAnimationTick.d.ts.map +1 -0
  160. package/dist/cli/ink-cli/hooks/useAnimationTick.js +54 -0
  161. package/dist/cli/ink-cli/hooks/useCLIState.d.ts.map +1 -1
  162. package/dist/cli/ink-cli/hooks/useCLIState.js +1 -0
  163. package/dist/cli/ink-cli/hooks/useTokenCounter.d.ts.map +1 -1
  164. package/dist/cli/ink-cli/hooks/useTokenCounter.js +7 -4
  165. package/dist/cli/ink-cli/services/CommandService.d.ts +1 -1
  166. package/dist/cli/ink-cli/services/CommandService.d.ts.map +1 -1
  167. package/dist/cli/ink-cli/services/CommandService.js +2 -2
  168. package/dist/cli/ink-cli/services/processStream.d.ts +2 -2
  169. package/dist/cli/ink-cli/services/processStream.d.ts.map +1 -1
  170. package/dist/cli/ink-cli/services/processStream.js +27 -19
  171. package/dist/cli/ink-cli/state/initialState.d.ts.map +1 -1
  172. package/dist/cli/ink-cli/state/initialState.js +1 -0
  173. package/dist/cli/ink-cli/state/types.d.ts +15 -3
  174. package/dist/cli/ink-cli/state/types.d.ts.map +1 -1
  175. package/dist/cli/ink-cli/utils/commandOverlays.d.ts.map +1 -1
  176. package/dist/cli/ink-cli/utils/commandOverlays.js +1 -0
  177. package/dist/cli/ink-cli/utils/elicitationSchema.d.ts +11 -0
  178. package/dist/cli/ink-cli/utils/elicitationSchema.d.ts.map +1 -0
  179. package/dist/cli/ink-cli/utils/elicitationSchema.js +80 -0
  180. package/dist/cli/ink-cli/utils/index.d.ts +1 -1
  181. package/dist/cli/ink-cli/utils/index.d.ts.map +1 -1
  182. package/dist/cli/ink-cli/utils/index.js +1 -1
  183. package/dist/cli/ink-cli/utils/messageFormatting.d.ts +10 -19
  184. package/dist/cli/ink-cli/utils/messageFormatting.d.ts.map +1 -1
  185. package/dist/cli/ink-cli/utils/messageFormatting.js +43 -262
  186. package/dist/cli/ink-cli/utils/overlayPresentation.d.ts +19 -0
  187. package/dist/cli/ink-cli/utils/overlayPresentation.d.ts.map +1 -0
  188. package/dist/cli/ink-cli/utils/overlayPresentation.js +33 -0
  189. package/dist/cli/ink-cli/utils/overlaySizing.d.ts +19 -0
  190. package/dist/cli/ink-cli/utils/overlaySizing.d.ts.map +1 -0
  191. package/dist/cli/ink-cli/utils/overlaySizing.js +11 -0
  192. package/dist/cli/ink-cli/utils/soundNotification.d.ts +19 -13
  193. package/dist/cli/ink-cli/utils/soundNotification.d.ts.map +1 -1
  194. package/dist/cli/ink-cli/utils/soundNotification.js +120 -97
  195. package/dist/cli/ink-cli/utils/toolUtils.d.ts.map +1 -1
  196. package/dist/cli/ink-cli/utils/toolUtils.js +2 -9
  197. package/dist/cli/utils/config-validation.d.ts +11 -11
  198. package/dist/cli/utils/config-validation.d.ts.map +1 -1
  199. package/dist/cli/utils/config-validation.js +56 -290
  200. package/dist/cli/utils/image-store.d.ts +16 -0
  201. package/dist/cli/utils/image-store.d.ts.map +1 -0
  202. package/dist/cli/utils/image-store.js +289 -0
  203. package/dist/cli/utils/scaffolding-utils.d.ts +5 -0
  204. package/dist/cli/utils/scaffolding-utils.d.ts.map +1 -1
  205. package/dist/cli/utils/scaffolding-utils.js +46 -4
  206. package/dist/cli/utils/template-engine.d.ts +28 -16
  207. package/dist/cli/utils/template-engine.d.ts.map +1 -1
  208. package/dist/cli/utils/template-engine.js +339 -479
  209. package/dist/config/cli-overrides.d.ts +4 -3
  210. package/dist/config/cli-overrides.d.ts.map +1 -1
  211. package/dist/config/cli-overrides.js +7 -9
  212. package/dist/index-main.d.ts +2 -0
  213. package/dist/index-main.d.ts.map +1 -0
  214. package/dist/index-main.js +1554 -0
  215. package/dist/index.js +2 -1589
  216. package/dist/utils/session-logger-factory.d.ts +3 -0
  217. package/dist/utils/session-logger-factory.d.ts.map +1 -0
  218. package/dist/utils/session-logger-factory.js +34 -0
  219. package/dist/webui/assets/{index-Cz2z7NQ8.js → index-CKhumsZA.js} +231 -231
  220. package/dist/webui/index.html +1 -1
  221. package/package.json +11 -8
  222. package/dist/cli/cli-subscriber.d.ts +0 -45
  223. package/dist/cli/cli-subscriber.d.ts.map +0 -1
  224. package/dist/cli/cli-subscriber.js +0 -204
@@ -0,0 +1,289 @@
1
+ import path from 'node:path';
2
+ import { existsSync, readFileSync } from 'node:fs';
3
+ import { promises as fs } from 'node:fs';
4
+ import { pathToFileURL } from 'node:url';
5
+ import { getDefaultImageStoreDir, getImagePackageInstallDir, isFileLikeImageSpecifier, loadImageRegistry, parseImageSpecifier, resolveFileLikeImageSpecifierToFileUrl, resolveFileLikeImageSpecifierToPath, resolveImageEntryFileFromStore, saveImageRegistry, } from '@dexto/agent-management';
6
+ import { loadImage } from '@dexto/agent-config';
7
+ import { executeWithTimeout } from './execute.js';
8
+ function hasWorkspaceProtocolDependencies(pkg) {
9
+ if (typeof pkg !== 'object' || pkg === null) {
10
+ return false;
11
+ }
12
+ const maybePkg = pkg;
13
+ const depFields = [
14
+ 'dependencies',
15
+ 'devDependencies',
16
+ 'peerDependencies',
17
+ 'optionalDependencies',
18
+ ];
19
+ for (const field of depFields) {
20
+ const deps = maybePkg[field];
21
+ if (typeof deps !== 'object' || deps === null) {
22
+ continue;
23
+ }
24
+ for (const version of Object.values(deps)) {
25
+ if (typeof version === 'string' && version.startsWith('workspace:')) {
26
+ return true;
27
+ }
28
+ }
29
+ }
30
+ return false;
31
+ }
32
+ async function isDirectory(filePath) {
33
+ try {
34
+ const stat = await fs.stat(filePath);
35
+ return stat.isDirectory();
36
+ }
37
+ catch {
38
+ return false;
39
+ }
40
+ }
41
+ async function findSingleTgzFile(dir) {
42
+ const entries = await fs.readdir(dir);
43
+ const tgzFiles = entries.filter((entry) => entry.endsWith('.tgz'));
44
+ if (tgzFiles.length !== 1) {
45
+ throw new Error(`Expected exactly one .tgz file in ${dir}, found ${tgzFiles.length}: ${tgzFiles.join(', ')}`);
46
+ }
47
+ return path.join(dir, tgzFiles[0] ?? '');
48
+ }
49
+ function getInstalledPackageRoot(installDir, packageName) {
50
+ const nodeModulesDir = path.join(installDir, 'node_modules');
51
+ if (packageName.startsWith('@')) {
52
+ const [scope, name] = packageName.split('/');
53
+ if (!scope || !name) {
54
+ throw new Error(`Invalid scoped package name: ${packageName}`);
55
+ }
56
+ return path.join(nodeModulesDir, scope, name);
57
+ }
58
+ return path.join(nodeModulesDir, packageName);
59
+ }
60
+ function readJsonFile(filePath) {
61
+ return JSON.parse(readFileSync(filePath, 'utf-8'));
62
+ }
63
+ function resolveEntryFileFromPackageJson(packageRoot, pkg) {
64
+ if (typeof pkg !== 'object' || pkg === null) {
65
+ throw new Error('Invalid package.json');
66
+ }
67
+ const maybePkg = pkg;
68
+ const exportsField = maybePkg.exports;
69
+ let entryRel;
70
+ if (exportsField && typeof exportsField === 'object') {
71
+ const rootExport = exportsField['.'] ??
72
+ exportsField['./'];
73
+ if (typeof rootExport === 'string') {
74
+ entryRel = rootExport;
75
+ }
76
+ else if (rootExport && typeof rootExport === 'object') {
77
+ const rootObj = rootExport;
78
+ if (typeof rootObj.import === 'string') {
79
+ entryRel = rootObj.import;
80
+ }
81
+ else if (typeof rootObj.default === 'string') {
82
+ entryRel = rootObj.default;
83
+ }
84
+ }
85
+ }
86
+ if (!entryRel) {
87
+ const moduleField = maybePkg.module;
88
+ if (typeof moduleField === 'string')
89
+ entryRel = moduleField;
90
+ }
91
+ if (!entryRel) {
92
+ const mainField = maybePkg.main;
93
+ if (typeof mainField === 'string')
94
+ entryRel = mainField;
95
+ }
96
+ if (!entryRel) {
97
+ const fallback = path.join(packageRoot, 'dist', 'index.js');
98
+ if (existsSync(fallback)) {
99
+ return fallback;
100
+ }
101
+ throw new Error(`Could not determine image entry file from package.json exports/main`);
102
+ }
103
+ const entryPath = path.resolve(packageRoot, entryRel);
104
+ if (!existsSync(entryPath)) {
105
+ throw new Error(`Image entry file not found: ${entryPath}`);
106
+ }
107
+ return entryPath;
108
+ }
109
+ function getInstalledImageEntryFile(installDir, imageId) {
110
+ const packageRoot = getInstalledPackageRoot(installDir, imageId);
111
+ const packageJsonPath = path.join(packageRoot, 'package.json');
112
+ if (!existsSync(packageJsonPath)) {
113
+ throw new Error(`Installed image package.json not found at ${packageJsonPath}`);
114
+ }
115
+ const pkg = readJsonFile(packageJsonPath);
116
+ const entryFilePath = resolveEntryFileFromPackageJson(packageRoot, pkg);
117
+ return pathToFileURL(entryFilePath).href;
118
+ }
119
+ async function upsertRegistryInstall(imageId, version, entryFile, options) {
120
+ const registry = loadImageRegistry(options.storeDir);
121
+ registry.images[imageId] ??= { installed: {} };
122
+ registry.images[imageId].installed[version] = {
123
+ entryFile,
124
+ installedAt: new Date().toISOString(),
125
+ };
126
+ if (options.activate) {
127
+ registry.images[imageId].active = version;
128
+ }
129
+ await saveImageRegistry(registry, options.storeDir);
130
+ }
131
+ async function validateInstalledImageModule(imageId, version, entryFile) {
132
+ try {
133
+ await loadImage(entryFile);
134
+ }
135
+ catch (error) {
136
+ const message = error instanceof Error ? error.message : String(error);
137
+ throw new Error(`Installed image '${imageId}@${version}' did not export a valid DextoImage.\n` +
138
+ `Entry file: ${entryFile}\n` +
139
+ message);
140
+ }
141
+ }
142
+ async function installImageDirectoryByReference(options) {
143
+ const { packageDir, packageJson, storeDir, activate, force } = options;
144
+ if (typeof packageJson !== 'object' || packageJson === null) {
145
+ throw new Error(`Invalid package.json for local image at ${packageDir}`);
146
+ }
147
+ const maybePkg = packageJson;
148
+ const imageId = maybePkg.name;
149
+ if (typeof imageId !== 'string' || imageId.trim().length === 0) {
150
+ throw new Error(`Local image package.json is missing a valid 'name' field (${packageDir})`);
151
+ }
152
+ const version = maybePkg.version;
153
+ if (typeof version !== 'string' || version.trim().length === 0) {
154
+ throw new Error(`Local image '${imageId}' package.json is missing a valid 'version' field (${packageDir})`);
155
+ }
156
+ if (force) {
157
+ const existingInstallDir = getImagePackageInstallDir(imageId, version, storeDir);
158
+ await fs.rm(existingInstallDir, { recursive: true, force: true }).catch(() => { });
159
+ }
160
+ let entryFilePath;
161
+ try {
162
+ entryFilePath = resolveEntryFileFromPackageJson(packageDir, packageJson);
163
+ }
164
+ catch (error) {
165
+ const message = error instanceof Error ? error.message : String(error);
166
+ if (message.startsWith('Image entry file not found:')) {
167
+ throw new Error(`Local image '${imageId}@${version}' has not been built.\n` +
168
+ `${message}\n` +
169
+ `Run: pnpm run build (or npm run build) in ${packageDir}, then re-run: dexto image install ${packageDir}`);
170
+ }
171
+ throw error;
172
+ }
173
+ const entryFile = pathToFileURL(entryFilePath).href;
174
+ await validateInstalledImageModule(imageId, version, entryFile);
175
+ await upsertRegistryInstall(imageId, version, entryFile, { storeDir, activate });
176
+ return { id: imageId, version, entryFile, installDir: packageDir, installMode: 'linked' };
177
+ }
178
+ export async function installImageToStore(specifier, options = {}) {
179
+ const { force = false, activate = true, storeDir = getDefaultImageStoreDir(), npmTimeoutMs, } = options;
180
+ await fs.mkdir(storeDir, { recursive: true });
181
+ if (isFileLikeImageSpecifier(specifier)) {
182
+ const resolvedPath = resolveFileLikeImageSpecifierToPath(specifier);
183
+ if (await isDirectory(resolvedPath)) {
184
+ const localPackageJsonPath = path.join(resolvedPath, 'package.json');
185
+ if (existsSync(localPackageJsonPath)) {
186
+ const localPkg = readJsonFile(localPackageJsonPath);
187
+ if (hasWorkspaceProtocolDependencies(localPkg)) {
188
+ // `workspace:*` dependencies can only be resolved from within the workspace.
189
+ // Installing this package into the global image store would break dependency
190
+ // resolution, so we register a linked install that points at the local build.
191
+ return await installImageDirectoryByReference({
192
+ packageDir: resolvedPath,
193
+ packageJson: localPkg,
194
+ storeDir,
195
+ activate,
196
+ force,
197
+ });
198
+ }
199
+ }
200
+ }
201
+ }
202
+ const tmpDir = await fs.mkdtemp(path.join(storeDir, 'tmp-install-'));
203
+ let installDir = null;
204
+ let moved = false;
205
+ try {
206
+ const tmpPackageJsonPath = path.join(tmpDir, 'package.json');
207
+ await fs.writeFile(tmpPackageJsonPath, JSON.stringify({ name: 'dexto-image-store', private: true }, null, 2), 'utf-8');
208
+ let packDir = null;
209
+ let installSpecifier = isFileLikeImageSpecifier(specifier)
210
+ ? resolveFileLikeImageSpecifierToPath(specifier)
211
+ : specifier;
212
+ // `npm install <directory>` often installs as a relative link, which can break when
213
+ // the temp install directory is moved into the image store. Avoid this by packing
214
+ // directories into a tarball and installing from the tarball instead.
215
+ if (isFileLikeImageSpecifier(specifier) && (await isDirectory(installSpecifier))) {
216
+ packDir = path.join(tmpDir, '.dexto-pack');
217
+ await fs.mkdir(packDir, { recursive: true });
218
+ await executeWithTimeout('npm', ['pack', installSpecifier, '--pack-destination', packDir], { cwd: tmpDir, ...(npmTimeoutMs !== undefined && { timeoutMs: npmTimeoutMs }) });
219
+ installSpecifier = await findSingleTgzFile(packDir);
220
+ }
221
+ await executeWithTimeout('npm', ['install', installSpecifier, '--no-audit', '--no-fund', '--no-package-lock'], { cwd: tmpDir, ...(npmTimeoutMs !== undefined && { timeoutMs: npmTimeoutMs }) });
222
+ if (packDir) {
223
+ await fs.rm(packDir, { recursive: true, force: true }).catch(() => { });
224
+ }
225
+ const tmpPkgJson = readJsonFile(tmpPackageJsonPath);
226
+ const deps = tmpPkgJson.dependencies ? Object.keys(tmpPkgJson.dependencies) : [];
227
+ if (deps.length !== 1) {
228
+ throw new Error(`Unexpected install state: expected exactly one dependency, got ${deps.length}`);
229
+ }
230
+ const imageId = deps[0] ?? '';
231
+ if (!imageId) {
232
+ throw new Error(`Could not determine installed image package name`);
233
+ }
234
+ const packageRoot = getInstalledPackageRoot(tmpDir, imageId);
235
+ const installedPackageJsonPath = path.join(packageRoot, 'package.json');
236
+ const installedPackageJson = readJsonFile(installedPackageJsonPath);
237
+ const version = installedPackageJson.version;
238
+ if (typeof version !== 'string' || version.trim().length === 0) {
239
+ throw new Error(`Installed image package has an invalid version field`);
240
+ }
241
+ installDir = getImagePackageInstallDir(imageId, version, storeDir);
242
+ if (existsSync(installDir)) {
243
+ if (!force) {
244
+ const entryFile = getInstalledImageEntryFile(installDir, imageId);
245
+ await validateInstalledImageModule(imageId, version, entryFile);
246
+ await upsertRegistryInstall(imageId, version, entryFile, { storeDir, activate });
247
+ await fs.rm(tmpDir, { recursive: true, force: true }).catch(() => { });
248
+ return { id: imageId, version, entryFile, installDir, installMode: 'store' };
249
+ }
250
+ await fs.rm(installDir, { recursive: true, force: true });
251
+ }
252
+ await fs.mkdir(path.dirname(installDir), { recursive: true });
253
+ await fs.rename(tmpDir, installDir);
254
+ moved = true;
255
+ const entryFile = getInstalledImageEntryFile(installDir, imageId);
256
+ await validateInstalledImageModule(imageId, version, entryFile);
257
+ await upsertRegistryInstall(imageId, version, entryFile, { storeDir, activate });
258
+ return { id: imageId, version, entryFile, installDir, installMode: 'store' };
259
+ }
260
+ catch (error) {
261
+ if (moved && installDir) {
262
+ await fs.rm(installDir, { recursive: true, force: true }).catch(() => { });
263
+ }
264
+ else {
265
+ await fs.rm(tmpDir, { recursive: true, force: true }).catch(() => { });
266
+ }
267
+ throw error;
268
+ }
269
+ }
270
+ export async function importImageModule(imageName, storeDir = getDefaultImageStoreDir()) {
271
+ if (isFileLikeImageSpecifier(imageName)) {
272
+ const fileUrl = resolveFileLikeImageSpecifierToFileUrl(imageName);
273
+ return import(fileUrl);
274
+ }
275
+ const parsed = parseImageSpecifier(imageName);
276
+ // Prefer the store when an image is installed there; fall back to host resolution.
277
+ const storeEntryFile = await resolveImageEntryFileFromStore(parsed, storeDir);
278
+ if (storeEntryFile) {
279
+ return import(storeEntryFile);
280
+ }
281
+ try {
282
+ return await import(parsed.id);
283
+ }
284
+ catch (error) {
285
+ const message = error instanceof Error ? error.message : String(error);
286
+ throw new Error(`Failed to import image '${imageName}': ${message}\n` +
287
+ `Install it into the Dexto image store with: dexto image install ${imageName}`);
288
+ }
289
+ }
@@ -1,4 +1,9 @@
1
1
  import * as p from '@clack/prompts';
2
+ export declare function getDextoCliVersion(): string;
3
+ export declare function getDextoVersionRange(): string;
4
+ export declare function isLocalDependencySpecifier(specifier: string): boolean;
5
+ export declare function hasVersionInPackageSpecifier(specifier: string): boolean;
6
+ export declare function pinDextoPackageIfUnversioned(specifier: string, versionRange: string): string;
2
7
  /**
3
8
  * Validates a project name against the standard regex
4
9
  * @param name - The project name to validate
@@ -1 +1 @@
1
- {"version":3,"file":"scaffolding-utils.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/scaffolding-utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAKpC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMpE;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACtC,WAAW,GAAE,MAA2B,EACxC,aAAa,GAAE,MAAiD,GACjE,OAAO,CAAC,MAAM,CAAC,CAmBjB;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CACxC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAErE;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACjC,WAAW,EAAE,MAAM,EACnB,iBAAiB,GAAE,MAAM,EAAO,GACjC,OAAO,CAAC,IAAI,CAAC,CAIf;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACjC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,KAAK,GAAG,OAAO,GAAG,SAAS,GAClC,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB7F;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B/E;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BjF;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACrC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;IACF,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B,EACD,cAAc,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,IAAI,CAAC,CAef;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAClC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpE"}
1
+ {"version":3,"file":"scaffolding-utils.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/scaffolding-utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AASpC,wBAAgB,kBAAkB,IAAI,MAAM,CAM3C;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAOrE;AAED,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAYvE;AAED,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAK5F;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMpE;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACtC,WAAW,GAAE,MAA2B,EACxC,aAAa,GAAE,MAAiD,GACjE,OAAO,CAAC,MAAM,CAAC,CAmBjB;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CACxC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAErE;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACjC,WAAW,EAAE,MAAM,EACnB,iBAAiB,GAAE,MAAM,EAAO,GACjC,OAAO,CAAC,IAAI,CAAC,CAIf;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACjC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,KAAK,GAAG,OAAO,GAAG,SAAS,GAClC,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB7F;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC/E;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BjF;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACrC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;IACF,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B,EACD,cAAc,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,IAAI,CAAC,CAef;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAClC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpE"}
@@ -1,9 +1,49 @@
1
1
  import fs from 'fs-extra';
2
2
  import path from 'path';
3
3
  import chalk from 'chalk';
4
+ import { createRequire } from 'module';
4
5
  import { executeWithTimeout } from './execute.js';
5
6
  import { textOrExit } from './prompt-helpers.js';
6
7
  import { getPackageManager, getPackageManagerInstallCommand } from './package-mgmt.js';
8
+ const require = createRequire(import.meta.url);
9
+ const cliPackageJson = require('../../../package.json');
10
+ export function getDextoCliVersion() {
11
+ const version = process.env.DEXTO_CLI_VERSION ?? cliPackageJson.version;
12
+ if (!version) {
13
+ throw new Error('Could not determine dexto CLI version');
14
+ }
15
+ return version;
16
+ }
17
+ export function getDextoVersionRange() {
18
+ return `^${getDextoCliVersion()}`;
19
+ }
20
+ export function isLocalDependencySpecifier(specifier) {
21
+ return (specifier.startsWith('.') ||
22
+ specifier.startsWith('/') ||
23
+ specifier.startsWith('file:') ||
24
+ /^[A-Za-z]:[\\/]/.test(specifier));
25
+ }
26
+ export function hasVersionInPackageSpecifier(specifier) {
27
+ if (isLocalDependencySpecifier(specifier))
28
+ return true;
29
+ const atIndex = specifier.lastIndexOf('@');
30
+ if (atIndex <= 0)
31
+ return false;
32
+ if (specifier.startsWith('@')) {
33
+ const slashIndex = specifier.indexOf('/');
34
+ return slashIndex !== -1 && atIndex > slashIndex;
35
+ }
36
+ return true;
37
+ }
38
+ export function pinDextoPackageIfUnversioned(specifier, versionRange) {
39
+ if (isLocalDependencySpecifier(specifier))
40
+ return specifier;
41
+ if (!specifier.startsWith('@dexto/'))
42
+ return specifier;
43
+ if (hasVersionInPackageSpecifier(specifier))
44
+ return specifier;
45
+ return `${specifier}@${versionRange}`;
46
+ }
7
47
  /**
8
48
  * Validates a project name against the standard regex
9
49
  * @param name - The project name to validate
@@ -164,9 +204,11 @@ export async function createTsconfigForImage(projectPath) {
164
204
  include: [
165
205
  'dexto.image.ts',
166
206
  'tools/**/*',
167
- 'blob-store/**/*',
168
- 'compression/**/*',
169
- 'plugins/**/*',
207
+ 'storage/blob/**/*',
208
+ 'storage/database/**/*',
209
+ 'storage/cache/**/*',
210
+ 'compaction/**/*',
211
+ 'hooks/**/*',
170
212
  ],
171
213
  exclude: ['node_modules', 'dist'],
172
214
  };
@@ -199,7 +241,7 @@ export async function createTsconfigForProject(projectPath) {
199
241
  'src/**/*',
200
242
  'storage/**/*',
201
243
  'tools/**/*',
202
- 'plugins/**/*',
244
+ 'hooks/**/*',
203
245
  'shared/**/*',
204
246
  'dexto.config.ts',
205
247
  ],
@@ -2,9 +2,9 @@
2
2
  * Template Engine for Dexto Project Scaffolding
3
3
  *
4
4
  * Provides code generation functions for various project types.
5
- * Uses the image/harness terminology strategy:
6
- * - "Image" for distributable artifacts, packages, composition
7
- * - "Harness" for runtime behavior, what it provides
5
+ *
6
+ * Note: create-app/init-app scaffolds are programmatic (no YAML/images).
7
+ * Image scaffolds are generated via `dexto create-image`.
8
8
  */
9
9
  interface TemplateContext {
10
10
  projectName: string;
@@ -18,13 +18,13 @@ interface TemplateContext {
18
18
  [key: string]: any;
19
19
  }
20
20
  /**
21
- * Generates src/index.ts for an app using an image
21
+ * Generates src/index.ts for an app using programmatic configuration.
22
22
  */
23
- export declare function generateIndexForImage(context: TemplateContext): string;
23
+ export declare function generateIndexForCodeFirstDI(context: TemplateContext): string;
24
24
  /**
25
- * Generates src/index.ts for a web server application using an image
25
+ * Generates src/index.ts for a web server application using programmatic configuration.
26
26
  */
27
- export declare function generateWebServerIndex(context: TemplateContext): string;
27
+ export declare function generateWebServerIndexForCodeFirstDI(context: TemplateContext): string;
28
28
  /**
29
29
  * Generates HTML for web app
30
30
  */
@@ -41,25 +41,37 @@ export declare function generateWebAppCSS(): string;
41
41
  * Generates dexto.image.ts file for an image project
42
42
  */
43
43
  export declare function generateDextoImageFile(context: TemplateContext): string;
44
- /**
45
- * Generates dexto.config.ts file for manual registration projects
46
- */
47
- export declare function generateDextoConfigFile(context: TemplateContext): string;
48
44
  /**
49
45
  * Generates README.md for an image project
50
46
  */
51
47
  export declare function generateImageReadme(context: TemplateContext): string;
52
48
  /**
53
- * Generates an example custom tool provider
49
+ * Generates an example custom tool factory
54
50
  */
55
51
  export declare function generateExampleTool(toolName?: string): string;
56
52
  /**
57
- * Generates README for an app project
53
+ * Generates an example custom hook factory
58
54
  */
59
- export declare function generateAppReadme(context: TemplateContext): string;
55
+ export declare function generateExampleHook(hookName: string): string;
56
+ /**
57
+ * Generates an example custom compaction factory
58
+ */
59
+ export declare function generateExampleCompaction(compactionType: string): string;
60
60
  /**
61
- * Generates auto-discovery script for from-core mode
61
+ * Generates an example in-memory cache factory
62
62
  */
63
- export declare function generateDiscoveryScript(): string;
63
+ export declare function generateExampleCacheFactory(cacheType: string): string;
64
+ /**
65
+ * Generates an example in-memory database factory
66
+ */
67
+ export declare function generateExampleDatabaseFactory(databaseType: string): string;
68
+ /**
69
+ * Generates an example in-memory blob store factory
70
+ */
71
+ export declare function generateExampleBlobStoreFactory(blobType: string): string;
72
+ /**
73
+ * Generates README for an app project
74
+ */
75
+ export declare function generateAppReadme(context: TemplateContext): string;
64
76
  export {};
65
77
  //# sourceMappingURL=template-engine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"template-engine.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/template-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,UAAU,eAAe;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CA2CtE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CA4EvE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAsC9D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAwKzC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAqN1C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CA8DvE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAgExE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAyGpE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,GAAE,MAAuB,GAAG,MAAM,CAuD7E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CA2DlE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CA6JhD"}
1
+ {"version":3,"file":"template-engine.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/template-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,UAAU,eAAe;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAgC5E;AAED;;GAEG;AACH,wBAAgB,oCAAoC,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAsCrF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAsC9D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAwKzC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAqN1C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CA2DvE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAgFpE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,GAAE,MAAuB,GAAG,MAAM,CAoD7E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiC5D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAsDxE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAwBrE;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAwB3E;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAyBxE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CA+ClE"}