@c15t/cli 2.0.0-rc.1 → 2.0.0-rc.3

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.
@@ -1,7 +1,7 @@
1
1
  import { Node, Project, SyntaxKind } from "ts-morph";
2
- export const __rspack_esm_id = "760";
2
+ export const __rspack_esm_id = "153";
3
3
  export const __rspack_esm_ids = [
4
- "760"
4
+ "153"
5
5
  ];
6
6
  export const __webpack_modules__ = {
7
7
  "./src/commands/generate/options/utils/generate-files.ts" (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
@@ -11,7 +11,7 @@ export const __webpack_modules__ = {
11
11
  var promises_ = __webpack_require__("node:fs/promises");
12
12
  var external_node_path_ = __webpack_require__("node:path");
13
13
  var external_picocolors_ = __webpack_require__("picocolors");
14
- var logger = __webpack_require__("./src/utils/logger.ts");
14
+ var utils_logger = __webpack_require__("./src/utils/logger.ts");
15
15
  var constants = __webpack_require__("./src/constants.ts");
16
16
  function generateClientConfigContent(mode, backendURL, useEnvFile, enableDevTools = false) {
17
17
  switch(mode){
@@ -231,6 +231,99 @@ ${devToolsCall}
231
231
  const envVarName = getEnvVarName(pkg);
232
232
  return `\n# c15t Configuration\n${envVarName}=https://your-instance.c15t.dev\n`;
233
233
  }
234
+ async function findMatchingFiles(projectRoot, patterns, logger) {
235
+ const matches = [];
236
+ for (const pattern of patterns){
237
+ const parts = pattern.split('/');
238
+ const hasWildcard = parts.some((p)=>'*' === p);
239
+ if (hasWildcard) {
240
+ const baseParts = [];
241
+ for (const part of parts){
242
+ if ('*' === part) break;
243
+ baseParts.push(part);
244
+ }
245
+ const baseDir = external_node_path_["default"].join(projectRoot, ...baseParts);
246
+ try {
247
+ const entries = await promises_["default"].readdir(baseDir, {
248
+ withFileTypes: true
249
+ });
250
+ for (const entry of entries)if (entry.isDirectory()) {
251
+ const remainingParts = parts.slice(baseParts.length + 1);
252
+ const potentialPath = external_node_path_["default"].join(baseDir, entry.name, ...remainingParts);
253
+ const relativePath = external_node_path_["default"].relative(projectRoot, potentialPath);
254
+ const patternWithDir = pattern.replace('*', entry.name);
255
+ if (relativePath === patternWithDir.replace(/\//g, external_node_path_["default"].sep)) try {
256
+ await promises_["default"].access(potentialPath);
257
+ logger?.debug(`Found layout: ${relativePath}`);
258
+ matches.push(relativePath);
259
+ } catch {}
260
+ }
261
+ } catch {}
262
+ } else {
263
+ const filePath = external_node_path_["default"].join(projectRoot, pattern);
264
+ try {
265
+ await promises_["default"].access(filePath);
266
+ logger?.debug(`Found layout: ${pattern}`);
267
+ matches.push(pattern);
268
+ } catch {}
269
+ }
270
+ }
271
+ return matches;
272
+ }
273
+ function extractLocaleSegment(filepath) {
274
+ const match = filepath.match(constants.QL.DYNAMIC_SEGMENT);
275
+ return match ? match[0] : void 0;
276
+ }
277
+ function hasLocaleSegment(filepath) {
278
+ return constants.QL.DYNAMIC_SEGMENT.test(filepath);
279
+ }
280
+ function getAppDirectory(layoutPath) {
281
+ const parts = layoutPath.split(external_node_path_["default"].sep);
282
+ const appIndex = parts.indexOf('app');
283
+ if (-1 === appIndex) {
284
+ const pagesIndex = parts.indexOf('pages');
285
+ if (-1 !== pagesIndex) return parts.slice(0, pagesIndex + 1).join(external_node_path_["default"].sep);
286
+ return external_node_path_["default"].dirname(layoutPath);
287
+ }
288
+ if (hasLocaleSegment(layoutPath)) return parts.slice(0, appIndex + 2).join(external_node_path_["default"].sep);
289
+ return parts.slice(0, appIndex + 1).join(external_node_path_["default"].sep);
290
+ }
291
+ async function findLayoutFile(projectRoot, logger) {
292
+ logger?.debug(`Searching for layout file in ${projectRoot}`);
293
+ const appLayoutMatches = await findMatchingFiles(projectRoot, constants.Lk, logger);
294
+ if (appLayoutMatches.length > 0) {
295
+ appLayoutMatches.sort((a, b)=>{
296
+ const aHasLocale = hasLocaleSegment(a);
297
+ const bHasLocale = hasLocaleSegment(b);
298
+ if (!aHasLocale && bHasLocale) return -1;
299
+ if (aHasLocale && !bHasLocale) return 1;
300
+ return a.length - b.length;
301
+ });
302
+ const layoutPath = appLayoutMatches[0];
303
+ const localeSegment = extractLocaleSegment(layoutPath);
304
+ logger?.debug(`Selected layout: ${layoutPath}`);
305
+ return {
306
+ path: layoutPath,
307
+ type: 'app',
308
+ hasLocaleSegment: !!localeSegment,
309
+ localeSegment,
310
+ appDirectory: getAppDirectory(layoutPath)
311
+ };
312
+ }
313
+ const pagesLayoutMatches = await findMatchingFiles(projectRoot, constants.Vj, logger);
314
+ if (pagesLayoutMatches.length > 0) {
315
+ const layoutPath = pagesLayoutMatches[0];
316
+ logger?.debug(`Selected pages layout: ${layoutPath}`);
317
+ return {
318
+ path: layoutPath,
319
+ type: 'pages',
320
+ hasLocaleSegment: false,
321
+ appDirectory: getAppDirectory(layoutPath)
322
+ };
323
+ }
324
+ logger?.debug('No layout file found');
325
+ return null;
326
+ }
234
327
  function toCamelCase(scriptName) {
235
328
  return scriptName.replace(/-([a-z])/g, (_, letter)=>letter.toUpperCase());
236
329
  }
@@ -315,7 +408,7 @@ ${devToolsCall}
315
408
  }` : '{ children }: { children: ReactNode }';
316
409
  const providerProps = initialDataProp ? `\n\t\t\tinitialData={initialData}\n\t\t\toptions={${fullOptionsText}}` : ` options={${fullOptionsText}}`;
317
410
  const directive = useClientDirective ? "'use client';\n\n" : '';
318
- const devToolsImport = enableDevTools ? "import { C15TDevTools } from '@c15t/dev-tools/react';\n" : '';
411
+ const devToolsImport = enableDevTools ? "import { DevTools } from '@c15t/dev-tools/react';\n" : '';
319
412
  const themeImport = includeTheme ? "import { theme } from './theme';\n" : '';
320
413
  const componentName = defaultExport ? 'ConsentManagerClient' : 'ConsentManager';
321
414
  const exportPrefix = defaultExport ? 'export default function' : 'export function';
@@ -339,7 +432,7 @@ ${exportPrefix} ${componentName}(${propsDestructure}) {
339
432
  <ConsentManagerProvider${providerProps}>
340
433
  <ConsentBanner />
341
434
  <ConsentDialog />
342
- ${enableDevTools ? "<C15TDevTools disabled={process.env.NODE_ENV === 'production'} />" : ''}
435
+ ${enableDevTools ? "<DevTools disabled={process.env.NODE_ENV === 'production'} />" : ''}
343
436
  {children}
344
437
  </ConsentManagerProvider>
345
438
  );
@@ -364,7 +457,7 @@ ${exportPrefix} ${componentName}(${propsDestructure}) {
364
457
  * @see https://c15t.com/docs/frameworks/${slug}/quickstart
365
458
  */`;
366
459
  }
367
- async function getComponentsDirectory(projectRoot, sourceDir) {
460
+ async function directory_getComponentsDirectory(projectRoot, sourceDir) {
368
461
  const isSrcDir = 'src' === sourceDir || sourceDir.startsWith('src');
369
462
  const candidates = isSrcDir ? [
370
463
  'src/components',
@@ -416,7 +509,7 @@ ${exportPrefix} ${componentName}(${propsDestructure}) {
416
509
  typeImports = '';
417
510
  }
418
511
  const ssrDataOption = enableSSR ? '\n\t\t\t\tssrData,' : '';
419
- const devToolsImport = enableDevTools ? "import { C15TDevTools } from '@c15t/dev-tools/react';\n" : '';
512
+ const devToolsImport = enableDevTools ? "import { DevTools } from '@c15t/dev-tools/react';\n" : '';
420
513
  const reactNodeImport = useConsentManagerProps ? '' : "import type { ReactNode } from 'react';\n";
421
514
  return `'use client';
422
515
 
@@ -444,7 +537,7 @@ export default function ConsentManagerClient(${propsDestructure}) {
444
537
  >
445
538
  <ConsentBanner />
446
539
  <ConsentDialog />
447
- ${enableDevTools ? "<C15TDevTools disabled={process.env.NODE_ENV === 'production'} />" : ''}
540
+ ${enableDevTools ? "<DevTools disabled={process.env.NODE_ENV === 'production'} />" : ''}
448
541
  {children}
449
542
  </ConsentManagerProvider>
450
543
  );
@@ -816,10 +909,13 @@ export const theme: Theme = {
816
909
  });
817
910
  }
818
911
  async function runLayoutUpdatePipeline(config) {
819
- const { filePatterns, projectRoot, frameworkDirName, createComponents, wrapJsx, afterImport } = config;
912
+ const { filePatterns, projectRoot, knownFilePath, frameworkDirName, createComponents, wrapJsx, afterImport } = config;
820
913
  const project = new Project();
821
914
  let layoutFile;
822
- for (const pattern of filePatterns){
915
+ if (knownFilePath) try {
916
+ layoutFile = project.addSourceFileAtPath(knownFilePath);
917
+ } catch {}
918
+ else for (const pattern of filePatterns){
823
919
  const files = project.addSourceFilesAtPaths(`${projectRoot}/${pattern}`);
824
920
  if (files.length > 0) {
825
921
  layoutFile = files[0];
@@ -988,7 +1084,7 @@ export function ConsentManager({ children }: { children: ReactNode }) {
988
1084
  }
989
1085
  async function createExpandedConsentManagerComponents(projectRoot, appDir, options) {
990
1086
  const { mode, backendURL, useEnvFile, proxyNextjs, enableSSR, enableDevTools, expandedTheme } = options;
991
- const componentsDir = await getComponentsDirectory(projectRoot, appDir);
1087
+ const componentsDir = await directory_getComponentsDirectory(projectRoot, appDir);
992
1088
  const consentManagerDirPath = external_node_path_["default"].join(projectRoot, componentsDir, 'consent-manager');
993
1089
  const backendURLValue = getBackendURLValue(backendURL, useEnvFile, proxyNextjs, NEXTJS_CONFIG.envVarPrefix);
994
1090
  const optionsText = generateOptionsText(mode, backendURL, useEnvFile, proxyNextjs, void 0, NEXTJS_CONFIG.envVarPrefix);
@@ -1029,7 +1125,7 @@ export function ConsentManager({ children }: { children: ReactNode }) {
1029
1125
  async function createPrebuiltConsentManagerComponents(projectRoot, appDir, options) {
1030
1126
  const { mode, backendURL, useEnvFile, proxyNextjs, enableSSR, enableDevTools, expandedTheme, selectedScripts } = options;
1031
1127
  const hasTheme = expandedTheme && 'none' !== expandedTheme;
1032
- const componentsDir = await getComponentsDirectory(projectRoot, appDir);
1128
+ const componentsDir = await directory_getComponentsDirectory(projectRoot, appDir);
1033
1129
  const consentManagerDirPath = external_node_path_["default"].join(projectRoot, componentsDir, 'consent-manager');
1034
1130
  const backendURLValue = getBackendURLValue(backendURL, useEnvFile, proxyNextjs, NEXTJS_CONFIG.envVarPrefix);
1035
1131
  const optionsText = generateOptionsText(mode, backendURL, useEnvFile, proxyNextjs, void 0, NEXTJS_CONFIG.envVarPrefix);
@@ -1077,10 +1173,11 @@ export function ConsentManager({ children }: { children: ReactNode }) {
1077
1173
  'app/layout.ts',
1078
1174
  'src/app/layout.ts'
1079
1175
  ];
1080
- async function updateAppLayout({ projectRoot, mode, backendURL, useEnvFile, proxyNextjs, enableSSR = false, enableDevTools = false, uiStyle = 'prebuilt', expandedTheme = 'tailwind', selectedScripts }) {
1176
+ async function updateAppLayout({ projectRoot, mode, backendURL, useEnvFile, proxyNextjs, enableSSR = false, enableDevTools = false, uiStyle = 'prebuilt', expandedTheme = 'tailwind', selectedScripts, layoutFilePath }) {
1081
1177
  return runLayoutUpdatePipeline({
1082
1178
  filePatterns: APP_LAYOUT_PATTERNS,
1083
1179
  projectRoot,
1180
+ knownFilePath: layoutFilePath,
1084
1181
  frameworkDirName: 'app',
1085
1182
  wrapJsx: wrapAppJsxContent,
1086
1183
  createComponents: async (_layoutFilePath, appDir)=>{
@@ -1176,11 +1273,12 @@ export function ConsentManager({ children }: { children: ReactNode }) {
1176
1273
  'src/pages/_app.tsx',
1177
1274
  'src/pages/_app.ts'
1178
1275
  ];
1179
- async function updatePagesLayout({ projectRoot, mode, backendURL, useEnvFile, proxyNextjs, enableDevTools = false, selectedScripts }) {
1276
+ async function updatePagesLayout({ projectRoot, mode, backendURL, useEnvFile, proxyNextjs, enableDevTools = false, selectedScripts, layoutFilePath }) {
1180
1277
  const optionsText = generateOptionsText(mode, backendURL, useEnvFile, proxyNextjs);
1181
1278
  return runLayoutUpdatePipeline({
1182
1279
  filePatterns: PAGES_APP_PATTERNS,
1183
1280
  projectRoot,
1281
+ knownFilePath: layoutFilePath,
1184
1282
  frameworkDirName: 'pages',
1185
1283
  wrapJsx: wrapPagesJsxContent,
1186
1284
  createComponents: async (_layoutFilePath, pagesDir)=>createConsentManagerComponent(projectRoot, pagesDir, optionsText, selectedScripts, enableDevTools),
@@ -1190,40 +1288,24 @@ export function ConsentManager({ children }: { children: ReactNode }) {
1190
1288
  }
1191
1289
  });
1192
1290
  }
1193
- function detectNextJsStructure(projectRoot) {
1194
- const project = new Project();
1195
- const appLayoutPatterns = [
1196
- 'app/layout.tsx',
1197
- 'src/app/layout.tsx',
1198
- 'app/layout.ts',
1199
- 'src/app/layout.ts'
1200
- ];
1201
- for (const pattern of appLayoutPatterns){
1202
- const files = project.addSourceFilesAtPaths(`${projectRoot}/${pattern}`);
1203
- if (files.length > 0) return 'app';
1204
- }
1205
- const pagesAppPatterns = [
1206
- 'pages/_app.tsx',
1207
- 'pages/_app.ts',
1208
- 'src/pages/_app.tsx',
1209
- 'src/pages/_app.ts'
1210
- ];
1211
- for (const pattern of pagesAppPatterns){
1212
- const files = project.addSourceFilesAtPaths(`${projectRoot}/${pattern}`);
1213
- if (files.length > 0) return 'pages';
1214
- }
1215
- return null;
1216
- }
1217
1291
  async function updateNextLayout(options) {
1218
- const structureType = detectNextJsStructure(options.projectRoot);
1219
- if (!structureType) return {
1292
+ const layoutDetection = await findLayoutFile(options.projectRoot);
1293
+ if (!layoutDetection) return {
1220
1294
  updated: false,
1221
1295
  filePath: null,
1222
1296
  alreadyModified: false,
1223
1297
  structureType: null
1224
1298
  };
1299
+ const structureType = layoutDetection.type;
1300
+ const layoutFilePath = external_node_path_["default"].join(options.projectRoot, layoutDetection.path);
1225
1301
  let result;
1226
- result = 'app' === structureType ? await updateAppLayout(options) : await updatePagesLayout(options);
1302
+ result = 'app' === structureType ? await updateAppLayout({
1303
+ ...options,
1304
+ layoutFilePath
1305
+ }) : await updatePagesLayout({
1306
+ ...options,
1307
+ layoutFilePath
1308
+ });
1227
1309
  return {
1228
1310
  ...result,
1229
1311
  structureType
@@ -1260,7 +1342,7 @@ export function ConsentManager({ children }: { children: ReactNode }) {
1260
1342
  }
1261
1343
  async function layout_createConsentManagerComponent(projectRoot, sourceDir, mode, backendURL, useEnvFile, selectedScripts, enableDevTools, expandedTheme) {
1262
1344
  const hasTheme = expandedTheme && 'none' !== expandedTheme;
1263
- const componentsDir = await getComponentsDirectory(projectRoot, sourceDir);
1345
+ const componentsDir = await directory_getComponentsDirectory(projectRoot, sourceDir);
1264
1346
  const consentManagerDirPath = external_node_path_["default"].join(projectRoot, componentsDir, 'consent-manager');
1265
1347
  const optionsText = generateOptionsText(mode, backendURL, useEnvFile, void 0, true);
1266
1348
  const providerContent = generateConsentComponent({
@@ -1590,7 +1672,7 @@ export default config;
1590
1672
  };
1591
1673
  };
1592
1674
  const { message, type } = spinnerMessage();
1593
- spinner.stop((0, logger.$e)(type, message));
1675
+ spinner.stop((0, utils_logger.$e)(type, message));
1594
1676
  return {
1595
1677
  layoutUpdated: layoutResult.updated,
1596
1678
  layoutPath: layoutResult.filePath
@@ -1623,7 +1705,7 @@ export default config;
1623
1705
  };
1624
1706
  };
1625
1707
  const { message, type } = spinnerMessage();
1626
- spinner.stop((0, logger.$e)(type, message));
1708
+ spinner.stop((0, utils_logger.$e)(type, message));
1627
1709
  return {
1628
1710
  nextConfigUpdated: configResult.updated,
1629
1711
  nextConfigPath: configResult.filePath,
@@ -1651,9 +1733,9 @@ export default config;
1651
1733
  const currentExampleContent = await promises_["default"].readFile(envExamplePath, 'utf-8');
1652
1734
  if (!currentExampleContent.includes(envVarName)) await promises_["default"].appendFile(envExamplePath, envExampleContent);
1653
1735
  } else await promises_["default"].writeFile(envExamplePath, envExampleContent);
1654
- spinner.stop((0, logger.$e)('info', `Environment files added/updated successfully: ${external_picocolors_["default"].cyan(external_node_path_["default"].relative(cwd, envPath))} and ${external_picocolors_["default"].cyan(external_node_path_["default"].relative(cwd, envExamplePath))}`));
1736
+ spinner.stop((0, utils_logger.$e)('info', `Environment files added/updated successfully: ${external_picocolors_["default"].cyan(external_node_path_["default"].relative(cwd, envPath))} and ${external_picocolors_["default"].cyan(external_node_path_["default"].relative(cwd, envExamplePath))}`));
1655
1737
  } catch (error) {
1656
- spinner.stop((0, logger.$e)('error', `Error processing environment files: ${error instanceof Error ? error.message : String(error)}`));
1738
+ spinner.stop((0, utils_logger.$e)('error', `Error processing environment files: ${error instanceof Error ? error.message : String(error)}`));
1657
1739
  throw error;
1658
1740
  }
1659
1741
  }
@@ -1696,7 +1778,7 @@ export default config;
1696
1778
  spinner.start('Generating client configuration file...');
1697
1779
  result.configContent = generateClientConfigContent(mode, backendURL, useEnvFile, enableDevTools);
1698
1780
  result.configPath = external_node_path_["default"].join(projectRoot, 'c15t.config.ts');
1699
- spinner.stop((0, logger.$e)('info', `Client configuration file generated: ${result.configContent}`));
1781
+ spinner.stop((0, utils_logger.$e)('info', `Client configuration file generated: ${result.configContent}`));
1700
1782
  }
1701
1783
  if (useEnvFile && backendURL) await handleEnvFiles({
1702
1784
  projectRoot,
@@ -1711,8 +1793,8 @@ export default config;
1711
1793
  if (tailwindResult.updated) {
1712
1794
  result.tailwindCssUpdated = true;
1713
1795
  result.tailwindCssPath = tailwindResult.filePath;
1714
- spinner.stop((0, logger.$e)('info', `Tailwind CSS updated for v3 compatibility: ${external_picocolors_["default"].cyan(external_node_path_["default"].relative(context.cwd, tailwindResult.filePath || ''))}`));
1715
- } else spinner.stop((0, logger.$e)('debug', 'Tailwind CSS update not needed.'));
1796
+ spinner.stop((0, utils_logger.$e)('info', `Tailwind CSS updated for v3 compatibility: ${external_picocolors_["default"].cyan(external_node_path_["default"].relative(context.cwd, tailwindResult.filePath || ''))}`));
1797
+ } else spinner.stop((0, utils_logger.$e)('debug', 'Tailwind CSS update not needed.'));
1716
1798
  }
1717
1799
  return result;
1718
1800
  }
@@ -17,6 +17,7 @@ interface UpdateAppLayoutOptions {
17
17
  uiStyle?: UIStyle;
18
18
  expandedTheme?: ExpandedTheme;
19
19
  selectedScripts?: string[];
20
+ layoutFilePath?: string;
20
21
  }
21
22
  interface ComponentFilePaths {
22
23
  consentManager: string;
@@ -39,7 +40,7 @@ interface ComponentFilePaths {
39
40
  * 4. Adds ConsentManager import to layout
40
41
  * 5. Wraps layout content with ConsentManager component
41
42
  */
42
- export declare function updateAppLayout({ projectRoot, mode, backendURL, useEnvFile, proxyNextjs, enableSSR, enableDevTools, uiStyle, expandedTheme, selectedScripts, }: UpdateAppLayoutOptions): Promise<{
43
+ export declare function updateAppLayout({ projectRoot, mode, backendURL, useEnvFile, proxyNextjs, enableSSR, enableDevTools, uiStyle, expandedTheme, selectedScripts, layoutFilePath, }: UpdateAppLayoutOptions): Promise<{
43
44
  updated: boolean;
44
45
  filePath: string | null;
45
46
  alreadyModified: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../../../../src/commands/generate/templates/next/app/layout.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAmB/D,UAAU,sBAAsB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,EAAE,iBAAiB,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,UAAU,kBAAkB;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAyTD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,eAAe,CAAC,EACrC,WAAW,EACX,IAAI,EACJ,UAAU,EACV,UAAU,EACV,WAAW,EACX,SAAiB,EACjB,cAAsB,EACtB,OAAoB,EACpB,aAA0B,EAC1B,eAAe,GACf,EAAE,sBAAsB,GAAG,OAAO,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,kBAAkB,CAAC;CACpC,CAAC,CA8BD"}
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../../../../src/commands/generate/templates/next/app/layout.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAmB/D,UAAU,sBAAsB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,EAAE,iBAAiB,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,kBAAkB;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAyTD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,eAAe,CAAC,EACrC,WAAW,EACX,IAAI,EACJ,UAAU,EACV,UAAU,EACV,WAAW,EACX,SAAiB,EACjB,cAAsB,EACtB,OAAoB,EACpB,aAA0B,EAC1B,eAAe,EACf,cAAc,GACd,EAAE,sBAAsB,GAAG,OAAO,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,kBAAkB,CAAC;CACpC,CAAC,CA+BD"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/commands/generate/templates/next/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAI5D,UAAU,uBAAuB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,EAAE,iBAAiB,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,KAAK,aAAa,GAAG,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC;AAsC5C,wBAAsB,gBAAgB,CACrC,OAAO,EAAE,uBAAuB,GAC9B,OAAO,CAAC;IACV,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,aAAa,CAAC;IAC7B,cAAc,CAAC,EAAE;QAChB,cAAc,EAAE,MAAM,CAAC;QACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;CACF,CAAC,CAiCD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/commands/generate/templates/next/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAI5D,UAAU,uBAAuB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,EAAE,iBAAiB,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,KAAK,aAAa,GAAG,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC;AAE5C,wBAAsB,gBAAgB,CACrC,OAAO,EAAE,uBAAuB,GAC9B,OAAO,CAAC;IACV,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,aAAa,CAAC;IAC7B,cAAc,CAAC,EAAE;QAChB,cAAc,EAAE,MAAM,CAAC;QACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;CACF,CAAC,CAoCD"}
@@ -13,6 +13,7 @@ interface UpdatePagesLayoutOptions {
13
13
  proxyNextjs?: boolean;
14
14
  enableDevTools?: boolean;
15
15
  selectedScripts?: string[];
16
+ layoutFilePath?: string;
16
17
  }
17
18
  interface ComponentFilePaths {
18
19
  consentManager: string;
@@ -37,7 +38,7 @@ interface ComponentFilePaths {
37
38
  * Unlike App Directory, Pages Directory only needs one component file because
38
39
  * it doesn't use the 'use client' directive pattern.
39
40
  */
40
- export declare function updatePagesLayout({ projectRoot, mode, backendURL, useEnvFile, proxyNextjs, enableDevTools, selectedScripts, }: UpdatePagesLayoutOptions): Promise<{
41
+ export declare function updatePagesLayout({ projectRoot, mode, backendURL, useEnvFile, proxyNextjs, enableDevTools, selectedScripts, layoutFilePath, }: UpdatePagesLayoutOptions): Promise<{
41
42
  updated: boolean;
42
43
  filePath: string | null;
43
44
  alreadyModified: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../../../../src/commands/generate/templates/next/pages/layout.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAKvE,UAAU,wBAAwB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,EAAE,iBAAiB,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,UAAU,kBAAkB;IAC3B,cAAc,EAAE,MAAM,CAAC;CACvB;AA+KD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,iBAAiB,CAAC,EACvC,WAAW,EACX,IAAI,EACJ,UAAU,EACV,UAAU,EACV,WAAW,EACX,cAAsB,EACtB,eAAe,GACf,EAAE,wBAAwB,GAAG,OAAO,CAAC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,kBAAkB,CAAC;CACpC,CAAC,CA4BD"}
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../../../../src/commands/generate/templates/next/pages/layout.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAKvE,UAAU,wBAAwB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,EAAE,iBAAiB,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,kBAAkB;IAC3B,cAAc,EAAE,MAAM,CAAC;CACvB;AA+KD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,iBAAiB,CAAC,EACvC,WAAW,EACX,IAAI,EACJ,UAAU,EACV,UAAU,EACV,WAAW,EACX,cAAsB,EACtB,eAAe,EACf,cAAc,GACd,EAAE,wBAAwB,GAAG,OAAO,CAAC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,kBAAkB,CAAC;CACpC,CAAC,CA6BD"}
@@ -20,6 +20,7 @@ export interface LayoutPipelineConfig {
20
20
  filePatterns: string[];
21
21
  /** Root directory of the project */
22
22
  projectRoot: string;
23
+ knownFilePath?: string;
23
24
  /** Framework directory name for getFrameworkDirectory (e.g., 'app' or 'pages') */
24
25
  frameworkDirName: string;
25
26
  /** Creates the consent-manager component files. Receives the layout file path and framework directory. */
@@ -1 +1 @@
1
- {"version":3,"file":"layout-pipeline.d.ts","sourceRoot":"","sources":["../../../../../src/commands/generate/templates/shared/layout-pipeline.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAW,KAAK,UAAU,EAAc,MAAM,UAAU,CAAC;AAOhE,UAAU,kBAAkB;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,kBAAkB,CAAC;CACpC;AAED,MAAM,WAAW,oBAAoB;IACpC,mGAAmG;IACnG,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,kFAAkF;IAClF,gBAAgB,EAAE,MAAM,CAAC;IACzB,0GAA0G;IAC1G,gBAAgB,EAAE,CACjB,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,KAChB,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACjC,uEAAuE;IACvE,OAAO,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC;IACzC,+GAA+G;IAC/G,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;CAC/C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,uBAAuB,CAC5C,MAAM,EAAE,oBAAoB,GAC1B,OAAO,CAAC,kBAAkB,CAAC,CAoF7B"}
1
+ {"version":3,"file":"layout-pipeline.d.ts","sourceRoot":"","sources":["../../../../../src/commands/generate/templates/shared/layout-pipeline.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAW,KAAK,UAAU,EAAc,MAAM,UAAU,CAAC;AAOhE,UAAU,kBAAkB;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,kBAAkB,CAAC;CACpC;AAED,MAAM,WAAW,oBAAoB;IACpC,mGAAmG;IACnG,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kFAAkF;IAClF,gBAAgB,EAAE,MAAM,CAAC;IACzB,0GAA0G;IAC1G,gBAAgB,EAAE,CACjB,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,KAChB,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACjC,uEAAuE;IACvE,OAAO,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC;IACzC,+GAA+G;IAC/G,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;CAC/C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,uBAAuB,CAC5C,MAAM,EAAE,oBAAoB,GAC1B,OAAO,CAAC,kBAAkB,CAAC,CA8F7B"}
@@ -5,4 +5,5 @@ export { authCommands, loginCommand, logoutCommand } from './auth';
5
5
  export { generate, generateCommand } from './generate';
6
6
  export { instancesCommand } from './instances';
7
7
  export { selfHost } from './self-host';
8
+ export { installSkills } from './skills';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEnE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEnE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Install Skills command
3
+ *
4
+ * Installs c15t agent skills for AI-assisted development (Claude, Cursor, etc.)
5
+ */
6
+ import type { CliContext } from '../context/types';
7
+ /**
8
+ * Install c15t agent skills for AI coding assistants
9
+ */
10
+ export declare function installSkills(context: CliContext): Promise<void>;
11
+ //# sourceMappingURL=skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/commands/skills.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,UAAU,iBA6CtD"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG;AAGH,OAAO,eAAe,CAAC;AAiEvB,wBAAsB,IAAI,kBAyKzB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG;AAGH,OAAO,eAAe,CAAC;AA0EvB,wBAAsB,IAAI,kBAyKzB"}
package/dist/index.mjs CHANGED
@@ -22,6 +22,9 @@ var __webpack_modules__ = {
22
22
  "./src/constants.ts" (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
23
23
  __webpack_require__.d(__webpack_exports__, {
24
24
  $V: ()=>STORAGE_MODES,
25
+ Lk: ()=>LAYOUT_PATTERNS,
26
+ QL: ()=>REGEX,
27
+ Vj: ()=>PAGES_APP_PATTERNS,
25
28
  tl: ()=>URLS
26
29
  });
27
30
  const URLS = {
@@ -32,12 +35,51 @@ var __webpack_modules__ = {
32
35
  API_DOCS: 'https://c15t.dev/docs/api',
33
36
  CLI_DOCS: 'https://c15t.dev/docs/cli'
34
37
  };
38
+ const REGEX = {
39
+ URL: /^https?:\/\/.+/,
40
+ C15T_URL: /^https:\/\/[\w-]+\.c15t\.dev$/,
41
+ DYNAMIC_SEGMENT: /\[[\w-]+\]/,
42
+ SEMVER: /^\d+\.\d+\.\d+(-[\w.]+)?$/,
43
+ PACKAGE_NAME: /^(@[\w-]+\/)?[\w-]+$/
44
+ };
35
45
  const STORAGE_MODES = {
36
46
  C15T: 'c15t',
37
47
  OFFLINE: 'offline',
38
48
  SELF_HOSTED: 'self-hosted',
39
49
  CUSTOM: 'custom'
40
50
  };
51
+ const LAYOUT_PATTERNS = [
52
+ 'app/layout.tsx',
53
+ 'app/layout.ts',
54
+ 'app/layout.jsx',
55
+ 'app/layout.js',
56
+ 'src/app/layout.tsx',
57
+ 'src/app/layout.ts',
58
+ 'src/app/layout.jsx',
59
+ 'src/app/layout.js',
60
+ 'app/*/layout.tsx',
61
+ 'app/*/layout.ts',
62
+ 'app/*/layout.jsx',
63
+ 'app/*/layout.js',
64
+ 'src/app/*/layout.tsx',
65
+ 'src/app/*/layout.ts',
66
+ 'src/app/*/layout.jsx',
67
+ 'src/app/*/layout.js',
68
+ 'app/*/*/layout.tsx',
69
+ 'app/*/*/layout.ts',
70
+ 'src/app/*/*/layout.tsx',
71
+ 'src/app/*/*/layout.ts'
72
+ ];
73
+ const PAGES_APP_PATTERNS = [
74
+ 'pages/_app.tsx',
75
+ 'pages/_app.ts',
76
+ 'pages/_app.jsx',
77
+ 'pages/_app.js',
78
+ 'src/pages/_app.tsx',
79
+ 'src/pages/_app.ts',
80
+ 'src/pages/_app.jsx',
81
+ 'src/pages/_app.js'
82
+ ];
41
83
  },
42
84
  "./src/utils/logger.ts" (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
43
85
  __webpack_require__.d(__webpack_exports__, {
@@ -798,7 +840,7 @@ const fileGenerationActor = (0, __rspack_external_xstate.fromPromise)(async ({ i
798
840
  };
799
841
  const { projectRoot, framework, cwd, logger } = cliContext;
800
842
  framework.pkg;
801
- const { generateFiles } = await __webpack_require__.e("760").then(__webpack_require__.bind(__webpack_require__, "./src/commands/generate/options/utils/generate-files.ts"));
843
+ const { generateFiles } = await __webpack_require__.e("153").then(__webpack_require__.bind(__webpack_require__, "./src/commands/generate/options/utils/generate-files.ts"));
802
844
  const spinnerMock = {
803
845
  start: (msg)=>logger.debug(`[spinner] ${msg}`),
804
846
  stop: (msg)=>logger.debug(`[spinner] ${msg}`),
@@ -1029,7 +1071,7 @@ async function getDevToolsOption({ context, handleCancel, onCancel }) {
1029
1071
  {
1030
1072
  value: true,
1031
1073
  label: 'Yes (Recommended)',
1032
- hint: isReactProject ? 'Adds <C15TDevTools /> to generated consent components' : 'Adds createDevTools() setup to c15t.config.ts'
1074
+ hint: isReactProject ? 'Adds <DevTools /> to generated consent components' : 'Adds createDevTools() setup to c15t.config.ts'
1033
1075
  },
1034
1076
  {
1035
1077
  value: false,
@@ -1422,6 +1464,53 @@ const installConfirmActor = (0, __rspack_external_xstate.fromPromise)(async ({ i
1422
1464
  confirmed: result
1423
1465
  };
1424
1466
  });
1467
+ const skillsInstallActor = (0, __rspack_external_xstate.fromPromise)(async ({ input })=>{
1468
+ const { cliContext } = input;
1469
+ const result = await prompts_.confirm({
1470
+ message: 'Install c15t agent skills for AI-assisted development? (Claude, Cursor, etc.)',
1471
+ initialValue: true
1472
+ });
1473
+ if (isCancel(result)) return {
1474
+ installed: false
1475
+ };
1476
+ if (result) try {
1477
+ const { spawn } = await import("node:child_process");
1478
+ const pmName = cliContext.packageManager.name;
1479
+ const execCommands = {
1480
+ bun: 'bunx',
1481
+ pnpm: 'pnpm dlx',
1482
+ yarn: 'yarn dlx',
1483
+ npm: 'npx'
1484
+ };
1485
+ const execCommand = execCommands[pmName] ?? 'npx';
1486
+ const [cmd, ...baseArgs] = execCommand.split(' ');
1487
+ cliContext.logger.info('Installing c15t agent skills...');
1488
+ const child = spawn(cmd, [
1489
+ ...baseArgs,
1490
+ 'skills',
1491
+ 'add',
1492
+ 'c15t/skills'
1493
+ ], {
1494
+ cwd: cliContext.projectRoot,
1495
+ stdio: 'inherit'
1496
+ });
1497
+ const exitCode = await new Promise((resolve)=>{
1498
+ child.on('exit', (code)=>resolve(code));
1499
+ });
1500
+ if (0 === exitCode) {
1501
+ cliContext.logger.success('Agent skills installed successfully!');
1502
+ return {
1503
+ installed: true
1504
+ };
1505
+ }
1506
+ cliContext.logger.warn('Skills installation failed. You can install later with: npx skills add c15t/skills');
1507
+ } catch {
1508
+ cliContext.logger.warn('Skills installation failed. You can install later with: npx skills add c15t/skills');
1509
+ }
1510
+ return {
1511
+ installed: false
1512
+ };
1513
+ });
1425
1514
  const githubStarActor = (0, __rspack_external_xstate.fromPromise)(async ({ input })=>{
1426
1515
  const { cliContext } = input;
1427
1516
  const result = await prompts_.confirm({
@@ -1569,6 +1658,7 @@ function createInitialContext(cliContext, modeArg) {
1569
1658
  installAttempted: false,
1570
1659
  installSucceeded: false,
1571
1660
  runMigrations: false,
1661
+ skillsInstalled: false,
1572
1662
  cancelReason: null,
1573
1663
  cleanupDone: false,
1574
1664
  errors: [],
@@ -1595,6 +1685,7 @@ const generateMachine = (0, __rspack_external_xstate.setup)({
1595
1685
  installConfirm: installConfirmActor,
1596
1686
  dependencyInstall: dependencyInstallActor,
1597
1687
  rollback: rollbackActor,
1688
+ skillsInstall: skillsInstallActor,
1598
1689
  githubStar: githubStarActor
1599
1690
  }
1600
1691
  }).createMachine({
@@ -1999,7 +2090,22 @@ const generateMachine = (0, __rspack_external_xstate.setup)({
1999
2090
  }
2000
2091
  },
2001
2092
  after: {
2002
- 100: 'githubStar'
2093
+ 100: 'skillsInstall'
2094
+ }
2095
+ },
2096
+ skillsInstall: {
2097
+ invoke: {
2098
+ src: 'skillsInstall',
2099
+ input: ({ context })=>({
2100
+ cliContext: context.cliContext
2101
+ }),
2102
+ onDone: {
2103
+ target: 'githubStar',
2104
+ actions: (0, __rspack_external_xstate.assign)({
2105
+ skillsInstalled: ({ event })=>event.output.installed
2106
+ })
2107
+ },
2108
+ onError: 'githubStar'
2003
2109
  }
2004
2110
  },
2005
2111
  githubStar: {
@@ -2801,6 +2907,41 @@ async function selfHost(context) {
2801
2907
  success: true
2802
2908
  });
2803
2909
  }
2910
+ async function installSkills(context) {
2911
+ const { logger, packageManager, telemetry } = context;
2912
+ logger.info('c15t agent skills give AI coding assistants deep knowledge of c15t APIs, components, and configuration.');
2913
+ logger.info('Supported tools: Claude Code, Cursor, GitHub Copilot, and any agent that supports the skills format.');
2914
+ const execCommands = {
2915
+ bun: 'bunx',
2916
+ pnpm: 'pnpm dlx',
2917
+ yarn: 'yarn dlx',
2918
+ npm: 'npx'
2919
+ };
2920
+ const execCommand = execCommands[packageManager.name] ?? 'npx';
2921
+ const [cmd, ...baseArgs] = execCommand.split(' ');
2922
+ logger.info(`Running: ${execCommand} skills add c15t/skills`);
2923
+ try {
2924
+ const child = (0, __rspack_external_node_child_process_27f17141.spawn)(cmd, [
2925
+ ...baseArgs,
2926
+ 'skills',
2927
+ 'add',
2928
+ 'c15t/skills'
2929
+ ], {
2930
+ cwd: context.projectRoot,
2931
+ stdio: 'inherit'
2932
+ });
2933
+ const [exitCode] = await (0, __rspack_external_node_events_0a6aefe7.once)(child, 'exit');
2934
+ if (0 === exitCode) {
2935
+ logger.success('Agent skills installed successfully!');
2936
+ telemetry.trackEvent(TelemetryEventName.ONBOARDING_COMPLETED, {
2937
+ action: 'skills_installed'
2938
+ });
2939
+ } else logger.error(`Skills installation failed (exit code ${exitCode}). Please try again or install manually with: npx skills add c15t/skills`);
2940
+ } catch (error) {
2941
+ logger.error(`Skills installation failed: ${error instanceof Error ? error.message : String(error)}`);
2942
+ logger.info('You can install manually with: npx skills add c15t/skills');
2943
+ }
2944
+ }
2804
2945
  async function displayIntro(context, version) {
2805
2946
  const { logger } = context;
2806
2947
  logger.info(`${external_picocolors_["default"].bold('Welcome!')} Let's get you set up.`);
@@ -3241,6 +3382,13 @@ const src_commands = [
3241
3382
  description: 'Commands for self-hosting c15t (generate, migrate).',
3242
3383
  action: (context)=>selfHost(context)
3243
3384
  },
3385
+ {
3386
+ name: 'skills',
3387
+ label: 'Skills',
3388
+ hint: 'Add c15t agent skills for AI tools',
3389
+ description: 'Install c15t skills for AI-assisted development (Claude, Cursor, etc.)',
3390
+ action: (context)=>installSkills(context)
3391
+ },
3244
3392
  {
3245
3393
  name: 'github',
3246
3394
  label: 'GitHub',
@@ -112,6 +112,13 @@ export interface InstallConfirmOutput {
112
112
  confirmed: boolean;
113
113
  }
114
114
  export declare const installConfirmActor: import("xstate").PromiseActorLogic<InstallConfirmOutput, InstallConfirmInput, import("xstate").EventObject>;
115
+ export interface SkillsInstallInput {
116
+ cliContext: CliContext;
117
+ }
118
+ export interface SkillsInstallOutput {
119
+ installed: boolean;
120
+ }
121
+ export declare const skillsInstallActor: import("xstate").PromiseActorLogic<SkillsInstallOutput, SkillsInstallInput, import("xstate").EventObject>;
115
122
  export interface GitHubStarInput {
116
123
  cliContext: CliContext;
117
124
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../../src/machines/generate/actors/prompts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAA0B,OAAO,EAAE,MAAM,UAAU,CAAC;AAS/E;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;gBAClC,KAAK,EAAE,MAAM;CAIzB;AAID,MAAM,WAAW,kBAAkB;IAClC,WAAW,CAAC,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,WAAW,CAAC;CAClB;AAED,eAAO,MAAM,kBAAkB,2GAoC7B,CAAC;AAIH,MAAM,WAAW,oBAAoB;IACpC,UAAU,EAAE,UAAU,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACrC,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;CACvB;AAED,eAAO,MAAM,oBAAoB,+GA2D/B,CAAC;AAIH,MAAM,WAAW,eAAe;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAChC,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,eAAO,MAAM,eAAe,qGAmC3B,CAAC;AAIF,MAAM,WAAW,mBAAmB;IACnC,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACpC,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,mBAAmB,6GAyC9B,CAAC;AAIH,MAAM,WAAW,oBAAoB;IACpC,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC9B;AAED,eAAO,MAAM,oBAAoB,+GAqL/B,CAAC;AAIH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8CpB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;AAE1E,MAAM,WAAW,kBAAkB;IAClC,UAAU,EAAE,UAAU,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IACnC,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,eAAe,EAAE,CAAC;CACnC;AAED,eAAO,MAAM,kBAAkB,2GA4C7B,CAAC;AAIH,MAAM,WAAW,mBAAmB;IACnC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACpC,SAAS,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,mBAAmB,6GAiB9B,CAAC;AAIH,MAAM,WAAW,eAAe;IAC/B,UAAU,EAAE,UAAU,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAChC,MAAM,EAAE,OAAO,CAAC;CAChB;AAED,eAAO,MAAM,eAAe,qGAgC3B,CAAC"}
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../../src/machines/generate/actors/prompts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAA0B,OAAO,EAAE,MAAM,UAAU,CAAC;AAS/E;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;gBAClC,KAAK,EAAE,MAAM;CAIzB;AAID,MAAM,WAAW,kBAAkB;IAClC,WAAW,CAAC,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,WAAW,CAAC;CAClB;AAED,eAAO,MAAM,kBAAkB,2GAoC7B,CAAC;AAIH,MAAM,WAAW,oBAAoB;IACpC,UAAU,EAAE,UAAU,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACrC,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;CACvB;AAED,eAAO,MAAM,oBAAoB,+GA2D/B,CAAC;AAIH,MAAM,WAAW,eAAe;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAChC,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,eAAO,MAAM,eAAe,qGAmC3B,CAAC;AAIF,MAAM,WAAW,mBAAmB;IACnC,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACpC,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,mBAAmB,6GAyC9B,CAAC;AAIH,MAAM,WAAW,oBAAoB;IACpC,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC9B;AAED,eAAO,MAAM,oBAAoB,+GAqL/B,CAAC;AAIH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8CpB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;AAE1E,MAAM,WAAW,kBAAkB;IAClC,UAAU,EAAE,UAAU,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IACnC,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,eAAe,EAAE,CAAC;CACnC;AAED,eAAO,MAAM,kBAAkB,2GA4C7B,CAAC;AAIH,MAAM,WAAW,mBAAmB;IACnC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACpC,SAAS,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,mBAAmB,6GAiB9B,CAAC;AAIH,MAAM,WAAW,kBAAkB;IAClC,UAAU,EAAE,UAAU,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IACnC,SAAS,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,kBAAkB,2GA2D7B,CAAC;AAIH,MAAM,WAAW,eAAe;IAC/B,UAAU,EAAE,UAAU,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAChC,MAAM,EAAE,OAAO,CAAC;CAChB;AAED,eAAO,MAAM,eAAe,qGAgC3B,CAAC"}
@@ -83,7 +83,7 @@ export declare const generateMachine: import("xstate").StateMachine<GenerateMach
83
83
  } | {
84
84
  type: "CLEANUP_COMPLETE";
85
85
  }, {
86
- [x: string]: import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<import("./actors/preflight").PreflightOutput, import("./actors/preflight").PreflightInput, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<import("./actors/prompts").ModeSelectionOutput, import("./actors/prompts").ModeSelectionInput, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<import("./actors/prompts").BackendOptionsOutput, import("./actors/prompts").BackendOptionsInput, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<import("./actors/prompts").FrontendOptionsOutput, import("./actors/prompts").FrontendOptionsInput, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<import("./actors/file-generation").FileGenerationOutput, import("./actors/file-generation").FileGenerationInput, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<import("./actors/dependencies").DependencyInstallOutput, import("./actors/dependencies").DependencyInstallInput, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<import("./actors/prompts").GitHubStarOutput, import("./actors/prompts").GitHubStarInput, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<import("./actors/prompts").BackendURLOutput, import("./actors/prompts").BackendURLInput, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<import("./actors/prompts").AccountCreationOutput, import("./actors/prompts").AccountCreationInput, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<import("./actors/prompts").ScriptsOptionOutput, import("./actors/prompts").ScriptsOptionInput, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<import("./actors/dependencies").CheckDepsOutput, import("./actors/dependencies").CheckDepsInput, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<import("./actors/prompts").InstallConfirmOutput, import("./actors/prompts").InstallConfirmInput, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<import("./actors/file-generation").RollbackOutput, import("./actors/file-generation").RollbackInput, import("xstate").EventObject>> | undefined;
86
+ [x: string]: import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<import("./actors/preflight").PreflightOutput, import("./actors/preflight").PreflightInput, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<import("./actors/prompts").ModeSelectionOutput, import("./actors/prompts").ModeSelectionInput, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<import("./actors/prompts").BackendOptionsOutput, import("./actors/prompts").BackendOptionsInput, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<import("./actors/prompts").FrontendOptionsOutput, import("./actors/prompts").FrontendOptionsInput, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<import("./actors/file-generation").FileGenerationOutput, import("./actors/file-generation").FileGenerationInput, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<import("./actors/dependencies").DependencyInstallOutput, import("./actors/dependencies").DependencyInstallInput, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<import("./actors/prompts").SkillsInstallOutput, import("./actors/prompts").SkillsInstallInput, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<import("./actors/prompts").GitHubStarOutput, import("./actors/prompts").GitHubStarInput, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<import("./actors/prompts").BackendURLOutput, import("./actors/prompts").BackendURLInput, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<import("./actors/prompts").AccountCreationOutput, import("./actors/prompts").AccountCreationInput, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<import("./actors/prompts").ScriptsOptionOutput, import("./actors/prompts").ScriptsOptionInput, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<import("./actors/dependencies").CheckDepsOutput, import("./actors/dependencies").CheckDepsInput, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<import("./actors/prompts").InstallConfirmOutput, import("./actors/prompts").InstallConfirmInput, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<import("./actors/file-generation").RollbackOutput, import("./actors/file-generation").RollbackInput, import("xstate").EventObject>> | undefined;
87
87
  }, {
88
88
  src: "preflight";
89
89
  logic: import("xstate").PromiseActorLogic<import("./actors/preflight").PreflightOutput, import("./actors/preflight").PreflightInput, import("xstate").EventObject>;
@@ -108,6 +108,10 @@ export declare const generateMachine: import("xstate").StateMachine<GenerateMach
108
108
  src: "dependencyInstall";
109
109
  logic: import("xstate").PromiseActorLogic<import("./actors/dependencies").DependencyInstallOutput, import("./actors/dependencies").DependencyInstallInput, import("xstate").EventObject>;
110
110
  id: string | undefined;
111
+ } | {
112
+ src: "skillsInstall";
113
+ logic: import("xstate").PromiseActorLogic<import("./actors/prompts").SkillsInstallOutput, import("./actors/prompts").SkillsInstallInput, import("xstate").EventObject>;
114
+ id: string | undefined;
111
115
  } | {
112
116
  src: "githubStar";
113
117
  logic: import("xstate").PromiseActorLogic<import("./actors/prompts").GitHubStarOutput, import("./actors/prompts").GitHubStarInput, import("xstate").EventObject>;
@@ -208,7 +212,7 @@ export declare const generateMachine: import("xstate").StateMachine<GenerateMach
208
212
  } | {
209
213
  type: "shouldPromptUIStyle";
210
214
  params: unknown;
211
- }, never, "error" | "exited" | "complete" | "preflightError" | "idle" | "preflight" | "modeSelection" | "offlineMode" | "selfHostedMode" | "customMode" | "backendOptions" | "frontendOptions" | "scriptsOptions" | "fileGeneration" | "dependencyInstall" | "summary" | "githubStar" | "cancelling" | "rollback" | "routeToMode" | "dependencyCheck" | "dependencyConfirm" | {
215
+ }, never, "error" | "exited" | "complete" | "preflightError" | "idle" | "preflight" | "modeSelection" | "offlineMode" | "selfHostedMode" | "customMode" | "backendOptions" | "frontendOptions" | "scriptsOptions" | "fileGeneration" | "dependencyInstall" | "summary" | "skillsInstall" | "githubStar" | "cancelling" | "rollback" | "routeToMode" | "dependencyCheck" | "dependencyConfirm" | {
212
216
  c15tMode: "backendURL" | "accountCreation";
213
217
  }, string, {
214
218
  cliContext: CliContext;
@@ -238,6 +242,7 @@ export declare const generateMachine: import("xstate").StateMachine<GenerateMach
238
242
  readonly dependencyConfirm: {};
239
243
  readonly dependencyInstall: {};
240
244
  readonly summary: {};
245
+ readonly skillsInstall: {};
241
246
  readonly githubStar: {};
242
247
  readonly complete: {};
243
248
  readonly error: {};
@@ -1 +1 @@
1
- {"version":3,"file":"machine.d.ts","sourceRoot":"","sources":["../../../src/machines/generate/machine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAwBlD,OAAO,EAEN,KAAK,sBAAsB,EAE3B,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAIC,UAAU;cAAY,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8lB5D,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC"}
1
+ {"version":3,"file":"machine.d.ts","sourceRoot":"","sources":["../../../src/machines/generate/machine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAyBlD,OAAO,EAEN,KAAK,sBAAsB,EAE3B,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAIC,UAAU;cAAY,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgnB5D,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC"}
@@ -75,6 +75,8 @@ export interface GenerateMachineContext extends BaseMachineContext {
75
75
  installSucceeded: boolean;
76
76
  /** Whether to run database migrations (self-hosted mode) */
77
77
  runMigrations: boolean;
78
+ /** Whether agent skills were installed */
79
+ skillsInstalled: boolean;
78
80
  /** Reason for cancellation if cancelled */
79
81
  cancelReason: string | null;
80
82
  /** Whether cleanup has been performed */
@@ -169,7 +171,7 @@ export type GenerateMachineEvent = {
169
171
  /**
170
172
  * State value types for the generate machine
171
173
  */
172
- export type GenerateMachineStateValue = 'idle' | 'preflight' | 'preflightError' | 'modeSelection' | 'c15tMode' | 'offlineMode' | 'selfHostedMode' | 'customMode' | 'backendOptions' | 'frontendOptions' | 'scriptsOptions' | 'fileGeneration' | 'dependencyInstall' | 'summary' | 'githubStar' | 'complete' | 'error' | 'cancelling' | 'cleanup' | 'exited';
174
+ export type GenerateMachineStateValue = 'idle' | 'preflight' | 'preflightError' | 'modeSelection' | 'c15tMode' | 'offlineMode' | 'selfHostedMode' | 'customMode' | 'backendOptions' | 'frontendOptions' | 'scriptsOptions' | 'fileGeneration' | 'dependencyInstall' | 'summary' | 'skillsInstall' | 'githubStar' | 'complete' | 'error' | 'cancelling' | 'cleanup' | 'exited';
173
175
  /**
174
176
  * Initial context for the generate machine
175
177
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/machines/generate/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EACX,kBAAkB,EAClB,gBAAgB,EAGhB,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG,UAAU,CAAC;AAE9C;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,kBAAkB;IAEjE,mEAAmE;IACnE,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAG9B,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,SAAS,EAAE;QACV,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,GAAG,EAAE,iBAAiB,CAAC;QACvB,QAAQ,EAAE,OAAO,CAAC;QAClB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;KAC/B,GAAG,IAAI,CAAC;IACT,+BAA+B;IAC/B,cAAc,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAG5C,sCAAsC;IACtC,eAAe,EAAE,OAAO,CAAC;IACzB,8BAA8B;IAC9B,eAAe,EAAE,oBAAoB,EAAE,CAAC;IAGxC,4BAA4B;IAC5B,YAAY,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,kCAAkC;IAClC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAG5B,6CAA6C;IAC7C,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,gDAAgD;IAChD,UAAU,EAAE,OAAO,CAAC;IACpB,qDAAqD;IACrD,WAAW,EAAE,OAAO,CAAC;IAGrB,mDAAmD;IACnD,SAAS,EAAE,OAAO,CAAC;IACnB,kDAAkD;IAClD,cAAc,EAAE,OAAO,CAAC;IACxB,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IAGpC,0CAA0C;IAC1C,UAAU,EAAE,OAAO,CAAC;IACpB,wCAAwC;IACxC,eAAe,EAAE,MAAM,EAAE,CAAC;IAG1B,+CAA+C;IAC/C,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,8CAA8C;IAC9C,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAGlC,8BAA8B;IAC9B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,qDAAqD;IACrD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,yCAAyC;IACzC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,qCAAqC;IACrC,gBAAgB,EAAE,OAAO,CAAC;IAG1B,4DAA4D;IAC5D,aAAa,EAAE,OAAO,CAAC;IAGvB,2CAA2C;IAC3C,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,yCAAyC;IACzC,WAAW,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAE7B;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GAGjB;IACA,IAAI,EAAE,oBAAoB,CAAC;IAC3B,MAAM,EAAE;QACP,MAAM,EAAE,OAAO,CAAC;QAChB,MAAM,EAAE,oBAAoB,EAAE,CAAC;QAC/B,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,sBAAsB,CAAC,WAAW,CAAC,CAAC;QAC/C,cAAc,EAAE,oBAAoB,CAAC;KACrC,CAAC;CACD,GACD;IAAE,IAAI,EAAE,iBAAiB,CAAA;CAAE,GAG3B;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAG5C;IAAE,IAAI,EAAE,2BAA2B,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAG5C;IACA,IAAI,EAAE,0BAA0B,CAAC;IACjC,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACpB,GAGD;IACA,IAAI,EAAE,2BAA2B,CAAC;IAClC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC7B,GAGD;IAAE,IAAI,EAAE,yBAAyB,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,GAGxD;IACA,IAAI,EAAE,iBAAiB,CAAC;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,gBAAgB,EAAE,CAAC;CACjC,GACD;IAAE,IAAI,EAAE,uBAAuB,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAG/C;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GAGxB;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GAGpB;IAAE,IAAI,EAAE,mBAAmB,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAEhC;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAClC,MAAM,GACN,WAAW,GACX,gBAAgB,GAChB,eAAe,GACf,UAAU,GACV,aAAa,GACb,gBAAgB,GAChB,YAAY,GACZ,gBAAgB,GAChB,iBAAiB,GACjB,gBAAgB,GAChB,gBAAgB,GAChB,mBAAmB,GACnB,SAAS,GACT,YAAY,GACZ,UAAU,GACV,OAAO,GACP,YAAY,GACZ,SAAS,GACT,QAAQ,CAAC;AAEZ;;GAEG;AACH,wBAAgB,oBAAoB,CACnC,UAAU,CAAC,EAAE,UAAU,EACvB,OAAO,CAAC,EAAE,WAAW,GACnB,sBAAsB,CAsDxB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAE9D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAChC,SAAS,EAAE,sBAAsB,CAAC,WAAW,CAAC,GAC5C,OAAO,CAET;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAChC,SAAS,EAAE,sBAAsB,CAAC,WAAW,CAAC,GAC5C,OAAO,CAET"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/machines/generate/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@c15t/cli",
3
- "version": "2.0.0-rc.1",
3
+ "version": "2.0.0-rc.3",
4
4
  "description": "CLI for rapid c15t setup. Scaffold React and Next.js cookie banners and a preferences centre, generate types and config, and run migration tooling for self-hosted deployments.",
5
5
  "homepage": "https://c15t.com",
6
6
  "repository": {
@@ -31,7 +31,7 @@
31
31
  "test:watch": "vitest"
32
32
  },
33
33
  "dependencies": {
34
- "@c15t/backend": "2.0.0-rc.1",
34
+ "@c15t/backend": "2.0.0-rc.3",
35
35
  "@c15t/logger": "2.0.0-rc.1",
36
36
  "@clack/prompts": "0.11.0",
37
37
  "@modelcontextprotocol/sdk": "^1.0.0",