@loom-framework/core 0.1.0-alpha.157 → 0.1.0-alpha.158

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 (34) hide show
  1. package/dist/cli/commands/eject.d.ts +12 -0
  2. package/dist/cli/commands/eject.d.ts.map +1 -0
  3. package/dist/cli/commands/eject.js +451 -0
  4. package/dist/cli/commands/eject.js.map +1 -0
  5. package/dist/cli/commands/generate-system-settings.d.ts +4 -4
  6. package/dist/cli/commands/generate-system-settings.d.ts.map +1 -1
  7. package/dist/cli/commands/generate-system-settings.js +147 -59
  8. package/dist/cli/commands/generate-system-settings.js.map +1 -1
  9. package/dist/cli/commands/init.js +30 -22
  10. package/dist/cli/commands/init.js.map +1 -1
  11. package/dist/cli/helpers/app-tsx-wiring.d.ts +8 -0
  12. package/dist/cli/helpers/app-tsx-wiring.d.ts.map +1 -1
  13. package/dist/cli/helpers/app-tsx-wiring.js +164 -0
  14. package/dist/cli/helpers/app-tsx-wiring.js.map +1 -1
  15. package/dist/cli/index.d.ts.map +1 -1
  16. package/dist/cli/index.js +2 -0
  17. package/dist/cli/index.js.map +1 -1
  18. package/dist/cli/templates/index.d.ts +3 -1
  19. package/dist/cli/templates/index.d.ts.map +1 -1
  20. package/dist/cli/templates/index.js +3 -1
  21. package/dist/cli/templates/index.js.map +1 -1
  22. package/dist/cli/templates/login-page.d.ts +4 -0
  23. package/dist/cli/templates/login-page.d.ts.map +1 -1
  24. package/dist/cli/templates/login-page.js +65 -3
  25. package/dist/cli/templates/login-page.js.map +1 -1
  26. package/dist/cli/templates/notification-center-page.d.ts +9 -0
  27. package/dist/cli/templates/notification-center-page.d.ts.map +1 -0
  28. package/dist/cli/templates/notification-center-page.js +258 -0
  29. package/dist/cli/templates/notification-center-page.js.map +1 -0
  30. package/dist/cli/templates/notification-detail-page.d.ts +9 -0
  31. package/dist/cli/templates/notification-detail-page.d.ts.map +1 -0
  32. package/dist/cli/templates/notification-detail-page.js +102 -0
  33. package/dist/cli/templates/notification-detail-page.js.map +1 -0
  34. package/package.json +1 -1
@@ -0,0 +1,12 @@
1
+ /**
2
+ * loom eject system-settings <type>
3
+ * loom uneject system-settings <type>
4
+ *
5
+ * Eject: npm import -> local file (for customization)
6
+ * Uneject: local file -> npm import (revert customization)
7
+ *
8
+ * Supported types: model, skill, user, login, process, notification
9
+ */
10
+ import type { Command } from 'commander';
11
+ export declare function registerEjectCommand(program: Command): void;
12
+ //# sourceMappingURL=eject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eject.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/eject.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwYzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0I3D"}
@@ -0,0 +1,451 @@
1
+ /**
2
+ * loom eject system-settings <type>
3
+ * loom uneject system-settings <type>
4
+ *
5
+ * Eject: npm import -> local file (for customization)
6
+ * Uneject: local file -> npm import (revert customization)
7
+ *
8
+ * Supported types: model, skill, user, login, process, notification
9
+ */
10
+ import chalk from 'chalk';
11
+ import { promises as fs } from 'fs';
12
+ import path from 'path';
13
+ import crypto from 'crypto';
14
+ import { resolveProjectRoot } from '../utils.js';
15
+ import { modelManagementPageTemplate, skillManagementPageTemplate, userManagementPageTemplate, processManagementPageTemplate, loginPageTemplate, notificationCenterPageTemplate, notificationDetailPageTemplate } from '../templates/index.js';
16
+ import { backupFile } from '../helpers/backup.js';
17
+ const PAGE_CONFIG = {
18
+ model: {
19
+ pascalName: 'ModelManagement',
20
+ fileName: 'ModelManagement.tsx',
21
+ navKey: 'model-management',
22
+ navLabelZh: '模型管理',
23
+ navLabelEn: 'Model Management',
24
+ npmComponent: 'ModelManagementPage',
25
+ template: modelManagementPageTemplate,
26
+ },
27
+ skill: {
28
+ pascalName: 'SkillManagement',
29
+ fileName: 'SkillManagement.tsx',
30
+ navKey: 'skill-management',
31
+ navLabelZh: '技能管理',
32
+ navLabelEn: 'Skill Management',
33
+ npmComponent: 'SkillManagementPage',
34
+ template: skillManagementPageTemplate,
35
+ },
36
+ user: {
37
+ pascalName: 'UserManagement',
38
+ fileName: 'UserManagement.tsx',
39
+ navKey: 'user-management',
40
+ navLabelZh: '用户管理',
41
+ navLabelEn: 'User Management',
42
+ npmComponent: 'UserManagementPage',
43
+ template: userManagementPageTemplate,
44
+ },
45
+ login: {
46
+ pascalName: 'Login',
47
+ fileName: 'Login.tsx',
48
+ // No navKey — Login is rendered by AuthGuard fallback, not in navigation
49
+ npmComponent: 'LoginPage',
50
+ template: loginPageTemplate,
51
+ },
52
+ process: {
53
+ pascalName: 'ProcessManagement',
54
+ fileName: 'ProcessManagement.tsx',
55
+ navKey: 'process-management',
56
+ navLabelZh: '过程管理',
57
+ navLabelEn: 'Process Management',
58
+ npmComponent: 'ProcessManagementPage',
59
+ template: processManagementPageTemplate,
60
+ },
61
+ notification: {
62
+ pascalName: 'NotificationCenter',
63
+ fileName: 'NotificationCenter.tsx',
64
+ navKey: 'notifications',
65
+ navLabelZh: '通知',
66
+ navLabelEn: 'Notifications',
67
+ npmComponent: 'NotificationCenterPage',
68
+ template: notificationCenterPageTemplate,
69
+ extraFiles: [{
70
+ pascalName: 'NotificationDetail',
71
+ fileName: 'NotificationDetail.tsx',
72
+ navKey: 'notification-detail',
73
+ navLabelZh: '通知详情',
74
+ navLabelEn: 'Notification Detail',
75
+ npmComponent: 'NotificationDetailPage',
76
+ template: notificationDetailPageTemplate,
77
+ }],
78
+ },
79
+ };
80
+ const VALID_TYPES = Object.keys(PAGE_CONFIG);
81
+ function parsePageType(type) {
82
+ if (VALID_TYPES.includes(type))
83
+ return type;
84
+ return null;
85
+ }
86
+ function checksum(content) {
87
+ return crypto.createHash('sha256').update(content).digest('hex').slice(0, 16);
88
+ }
89
+ async function saveChecksum(projectRoot, pascalName, content) {
90
+ const checksumDir = path.join(projectRoot, '.loom', 'checksums');
91
+ await fs.mkdir(checksumDir, { recursive: true });
92
+ await fs.writeFile(path.join(checksumDir, `${pascalName}.checksum`), checksum(content), 'utf-8');
93
+ }
94
+ async function readChecksum(projectRoot, pascalName) {
95
+ try {
96
+ return await fs.readFile(path.join(projectRoot, '.loom', 'checksums', `${pascalName}.checksum`), 'utf-8');
97
+ }
98
+ catch {
99
+ return null;
100
+ }
101
+ }
102
+ async function deleteChecksum(projectRoot, pascalName) {
103
+ try {
104
+ await fs.unlink(path.join(projectRoot, '.loom', 'checksums', `${pascalName}.checksum`));
105
+ }
106
+ catch { /* ignore */ }
107
+ }
108
+ function findLastImportEnd(content) {
109
+ const importRegex = /^import\s.+;?\s*$/gm;
110
+ let lastMatch = null;
111
+ let m;
112
+ while ((m = importRegex.exec(content)) !== null) {
113
+ lastMatch = m;
114
+ }
115
+ if (!lastMatch)
116
+ return null;
117
+ return lastMatch.index + lastMatch[0].length;
118
+ }
119
+ /**
120
+ * Add a name to the npm import from @loom-framework/frontend-antd.
121
+ * If the name already exists in any npm import, no-op.
122
+ * If no npm import exists, creates a new one.
123
+ */
124
+ function addNpmImportName(content, name) {
125
+ const existingNpmImport = content.match(/import\s*\{([^}]+)\}\s*from\s*'@loom-framework\/frontend-antd';/);
126
+ if (existingNpmImport) {
127
+ const currentNames = existingNpmImport[1].split(',').map(s => s.trim()).filter(Boolean);
128
+ if (currentNames.includes(name))
129
+ return content;
130
+ const newNames = [...currentNames, name].join(', ');
131
+ const newImport = `import { ${newNames} } from '@loom-framework/frontend-antd';`;
132
+ return content.replace(existingNpmImport[0], newImport);
133
+ }
134
+ const importLine = `import { ${name} } from '@loom-framework/frontend-antd';`;
135
+ const lastImportEnd = findLastImportEnd(content);
136
+ if (lastImportEnd === null)
137
+ return content;
138
+ return content.slice(0, lastImportEnd) + '\n' + importLine + content.slice(lastImportEnd);
139
+ }
140
+ /**
141
+ * Remove a name from the npm import from @loom-framework/frontend-antd.
142
+ */
143
+ function removeNpmImportName(content, name) {
144
+ const npmImportMatches = content.match(/import\s*\{([^}]+)\}\s*from\s*'@loom-framework\/frontend-antd';/g);
145
+ if (!npmImportMatches)
146
+ return content;
147
+ let modified = content;
148
+ for (const importLine of npmImportMatches) {
149
+ if (!importLine.includes(name))
150
+ continue;
151
+ const namesMatch = importLine.match(/import\s*\{([^}]+)\}/);
152
+ if (!namesMatch)
153
+ continue;
154
+ const importNames = namesMatch[1].split(',').map(s => s.trim()).filter(Boolean);
155
+ const filtered = importNames.filter(n => n !== name);
156
+ if (filtered.length > 0) {
157
+ const newImport = `import { ${filtered.join(', ')} } from '@loom-framework/frontend-antd';`;
158
+ modified = modified.replace(importLine, newImport);
159
+ }
160
+ else {
161
+ modified = modified.replace(importLine, '');
162
+ }
163
+ }
164
+ return modified;
165
+ }
166
+ /**
167
+ * Add a local import line: import XPage from './components/pages/X';
168
+ */
169
+ function addLocalImportLine(content, pascalName) {
170
+ const importLine = `import ${pascalName}Page from './components/pages/${pascalName}';`;
171
+ if (content.includes(importLine))
172
+ return content;
173
+ const lastImportEnd = findLastImportEnd(content);
174
+ if (lastImportEnd === null)
175
+ return content;
176
+ return content.slice(0, lastImportEnd) + '\n' + importLine + content.slice(lastImportEnd);
177
+ }
178
+ /**
179
+ * Remove a local import line.
180
+ */
181
+ function removeLocalImportLine(content, pascalName) {
182
+ const regex = new RegExp(`import\\s+${pascalName}Page\\s+from\\s*'\\.\\/components\\/pages\\/${pascalName}';\\n?`, 'g');
183
+ return content.replace(regex, '');
184
+ }
185
+ /**
186
+ * Replace the switch case for a page.
187
+ */
188
+ function replaceSwitchCase(content, navKey, oldComponent, newComponent) {
189
+ const oldCaseRegex = new RegExp(`case\\s*'${navKey}':\\s*return\\s*<${oldComponent}\\s*\\/?>;`, 'g');
190
+ return content.replace(oldCaseRegex, `case '${navKey}': return <${newComponent} />;`);
191
+ }
192
+ /**
193
+ * Remove the switch case for a page.
194
+ */
195
+ function removeSwitchCase(content, navKey, componentPatterns) {
196
+ let modified = content;
197
+ for (const pattern of componentPatterns) {
198
+ const regex = new RegExp(`\\s*case\\s*'${navKey}':\\s*return\\s*<${pattern}\\s*\\/?>;\\n?`, 'g');
199
+ modified = modified.replace(regex, '');
200
+ }
201
+ return modified;
202
+ }
203
+ /**
204
+ * Add a switch case before the default case.
205
+ */
206
+ function addSwitchCase(content, navKey, componentName) {
207
+ if (content.includes(`case '${navKey}':`))
208
+ return content;
209
+ const caseLine = ` case '${navKey}': return <${componentName} />;`;
210
+ const defaultIdx = content.indexOf('default:');
211
+ if (defaultIdx === -1)
212
+ return content;
213
+ const lineStart = content.lastIndexOf('\n', defaultIdx) + 1;
214
+ return content.slice(0, lineStart) + caseLine + '\n' + content.slice(lineStart);
215
+ }
216
+ /**
217
+ * For login eject: add fallback prop to AuthGuard
218
+ * <AuthGuard> → <AuthGuard fallback={<Login />}>
219
+ */
220
+ function addAuthGuardFallback(content) {
221
+ if (content.includes('fallback={<Login'))
222
+ return content;
223
+ return content.replace(/<AuthGuard>/g, '<AuthGuard fallback={<Login />}>');
224
+ }
225
+ /**
226
+ * For login uneject: remove fallback prop from AuthGuard
227
+ * <AuthGuard fallback={<Login />}> → <AuthGuard>
228
+ */
229
+ function removeAuthGuardFallback(content) {
230
+ return content.replace(/<AuthGuard\s+fallback=\{<Login\s*\/>\}>/g, '<AuthGuard>');
231
+ }
232
+ async function ejectSingleFile(projectRoot, pageDir, fileConfig, initialAppContent, force) {
233
+ const { pascalName, fileName, navKey, npmComponent, template, isLogin } = fileConfig;
234
+ const pagePath = path.join(pageDir, fileName);
235
+ // Check if local file already exists
236
+ try {
237
+ await fs.access(pagePath);
238
+ if (!force) {
239
+ console.error(chalk.red(`Local file already exists: ${path.relative(projectRoot, pagePath)}`));
240
+ console.error(chalk.yellow('Use --force to overwrite.'));
241
+ process.exit(1);
242
+ }
243
+ console.log(chalk.yellow(`Overwriting existing local file "${pascalName}"`));
244
+ const backupPath = await backupFile(projectRoot, pagePath);
245
+ if (backupPath)
246
+ console.log(chalk.dim(` Backup: ${path.relative(projectRoot, backupPath)}`));
247
+ }
248
+ catch {
249
+ // File does not exist, proceed
250
+ }
251
+ // Generate local file from template
252
+ const templateContent = template();
253
+ await fs.mkdir(pageDir, { recursive: true });
254
+ await fs.writeFile(pagePath, templateContent, 'utf-8');
255
+ await saveChecksum(projectRoot, pascalName, templateContent);
256
+ console.log(chalk.green(' ✓'), `Local file created: ${path.relative(projectRoot, pagePath)}`);
257
+ // Modify App.tsx content passed in
258
+ let appContent = initialAppContent;
259
+ let modified = false;
260
+ if (isLogin) {
261
+ appContent = addLocalImportLine(appContent, pascalName);
262
+ appContent = addAuthGuardFallback(appContent);
263
+ appContent = removeNpmImportName(appContent, npmComponent);
264
+ modified = true;
265
+ }
266
+ else if (navKey) {
267
+ appContent = removeNpmImportName(appContent, npmComponent);
268
+ appContent = addLocalImportLine(appContent, pascalName);
269
+ appContent = replaceSwitchCase(appContent, navKey, npmComponent, `${pascalName}Page`);
270
+ if (!appContent.includes(`case '${navKey}':`)) {
271
+ appContent = addSwitchCase(appContent, navKey, `${pascalName}Page`);
272
+ }
273
+ modified = true;
274
+ }
275
+ return { appContent, modified };
276
+ }
277
+ async function unejectSingleFile(projectRoot, pageDir, fileConfig, initialAppContent, force) {
278
+ const { pascalName, fileName, navKey, npmComponent, isLogin } = fileConfig;
279
+ const pagePath = path.join(pageDir, fileName);
280
+ // Confirm local file exists
281
+ try {
282
+ await fs.access(pagePath);
283
+ }
284
+ catch {
285
+ console.error(chalk.red(`No local file found: ${path.relative(projectRoot, pagePath)}`));
286
+ console.error(chalk.yellow('This page is already using the npm import.'));
287
+ process.exit(1);
288
+ }
289
+ // Check if modified (compare checksum)
290
+ const currentContent = await fs.readFile(pagePath, 'utf-8');
291
+ const savedChecksum = await readChecksum(projectRoot, pascalName);
292
+ if (savedChecksum !== null && checksum(currentContent) !== savedChecksum && !force) {
293
+ console.error(chalk.yellow(`Local file "${pascalName}" has been modified since eject.`));
294
+ console.error(chalk.yellow('Use --force to delete the modified file (changes will be lost).'));
295
+ console.error(chalk.dim('Tip: Copy your customizations before unejecting, then apply them to a new eject.'));
296
+ process.exit(1);
297
+ }
298
+ // Backup before deletion
299
+ const backupPath = await backupFile(projectRoot, pagePath);
300
+ if (backupPath)
301
+ console.log(chalk.dim(` Backup: ${path.relative(projectRoot, backupPath)}`));
302
+ // Delete local file
303
+ await fs.unlink(pagePath);
304
+ await deleteChecksum(projectRoot, pascalName);
305
+ console.log(chalk.green(' ✓'), `Local file removed: ${path.relative(projectRoot, pagePath)}`);
306
+ // Modify App.tsx content passed in
307
+ let appContent = initialAppContent;
308
+ let modified = false;
309
+ if (isLogin) {
310
+ appContent = removeLocalImportLine(appContent, pascalName);
311
+ appContent = removeAuthGuardFallback(appContent);
312
+ appContent = addNpmImportName(appContent, npmComponent);
313
+ modified = true;
314
+ }
315
+ else if (navKey) {
316
+ appContent = removeLocalImportLine(appContent, pascalName);
317
+ appContent = addNpmImportName(appContent, npmComponent);
318
+ appContent = replaceSwitchCase(appContent, navKey, `${pascalName}Page`, npmComponent);
319
+ if (!appContent.includes(`case '${navKey}':`)) {
320
+ appContent = addSwitchCase(appContent, navKey, npmComponent);
321
+ }
322
+ modified = true;
323
+ }
324
+ return { appContent, modified };
325
+ }
326
+ // ── Register commands ──
327
+ export function registerEjectCommand(program) {
328
+ const ejectCmd = program
329
+ .command('eject')
330
+ .description('Eject framework-managed files for local customization');
331
+ ejectCmd
332
+ .command('system-settings <type>')
333
+ .description('Eject a system settings page from npm import to local file')
334
+ .option('--force', 'Overwrite existing local file')
335
+ .action(async (type, cmdOptions) => {
336
+ const pageType = parsePageType(type);
337
+ if (!pageType) {
338
+ console.error(chalk.red(`Invalid type "${type}". Use: ${VALID_TYPES.join(', ')}.`));
339
+ process.exit(1);
340
+ }
341
+ const config = PAGE_CONFIG[pageType];
342
+ try {
343
+ const projectRoot = await resolveProjectRoot();
344
+ const pageDir = path.join(projectRoot, 'frontend', 'src', 'components', 'pages');
345
+ const appTsxPath = path.join(projectRoot, 'frontend', 'src', 'App.tsx');
346
+ // Backup App.tsx before modification
347
+ const appBackup = await backupFile(projectRoot, appTsxPath);
348
+ if (appBackup)
349
+ console.log(chalk.dim(` App.tsx backup: ${path.relative(projectRoot, appBackup)}`));
350
+ // Read App.tsx content once
351
+ let appContent = await fs.readFile(appTsxPath, 'utf-8');
352
+ let anyModified = false;
353
+ // Eject main file
354
+ const mainResult = await ejectSingleFile(projectRoot, pageDir, {
355
+ ...config,
356
+ isLogin: pageType === 'login',
357
+ }, appContent, cmdOptions.force);
358
+ if (mainResult.modified) {
359
+ appContent = mainResult.appContent;
360
+ anyModified = true;
361
+ }
362
+ // Eject extra files (e.g., NotificationDetail for notification type)
363
+ if (config.extraFiles) {
364
+ for (const extra of config.extraFiles) {
365
+ const result = await ejectSingleFile(projectRoot, pageDir, {
366
+ ...extra,
367
+ isLogin: false,
368
+ }, appContent, cmdOptions.force);
369
+ if (result.modified) {
370
+ appContent = result.appContent;
371
+ anyModified = true;
372
+ }
373
+ }
374
+ }
375
+ if (anyModified) {
376
+ await fs.writeFile(appTsxPath, appContent, 'utf-8');
377
+ console.log(chalk.green(' ✓'), 'App.tsx switched to local import');
378
+ }
379
+ console.log();
380
+ console.log(chalk.cyan(` "${config.pascalName}" is now ejected. Edit the local file to customize.`));
381
+ console.log(chalk.dim(` Run "loom uneject system-settings ${type}" to revert to npm import.`));
382
+ }
383
+ catch (err) {
384
+ const message = err instanceof Error ? err.message : String(err);
385
+ console.error(chalk.red('Eject failed:'), message);
386
+ process.exit(1);
387
+ }
388
+ });
389
+ const unejectCmd = program
390
+ .command('uneject')
391
+ .description('Revert ejected files back to npm imports');
392
+ unejectCmd
393
+ .command('system-settings <type>')
394
+ .description('Revert an ejected system settings page back to npm import')
395
+ .option('--force', 'Delete local file even if it has been modified')
396
+ .action(async (type, cmdOptions) => {
397
+ const pageType = parsePageType(type);
398
+ if (!pageType) {
399
+ console.error(chalk.red(`Invalid type "${type}". Use: ${VALID_TYPES.join(', ')}.`));
400
+ process.exit(1);
401
+ }
402
+ const config = PAGE_CONFIG[pageType];
403
+ try {
404
+ const projectRoot = await resolveProjectRoot();
405
+ const pageDir = path.join(projectRoot, 'frontend', 'src', 'components', 'pages');
406
+ const appTsxPath = path.join(projectRoot, 'frontend', 'src', 'App.tsx');
407
+ // Backup App.tsx
408
+ const appBackup = await backupFile(projectRoot, appTsxPath);
409
+ if (appBackup)
410
+ console.log(chalk.dim(` App.tsx backup: ${path.relative(projectRoot, appBackup)}`));
411
+ // Read App.tsx content once
412
+ let appContent = await fs.readFile(appTsxPath, 'utf-8');
413
+ let anyModified = false;
414
+ // Uneject main file
415
+ const mainResult = await unejectSingleFile(projectRoot, pageDir, {
416
+ ...config,
417
+ isLogin: pageType === 'login',
418
+ }, appContent, cmdOptions.force);
419
+ if (mainResult.modified) {
420
+ appContent = mainResult.appContent;
421
+ anyModified = true;
422
+ }
423
+ // Uneject extra files
424
+ if (config.extraFiles) {
425
+ for (const extra of config.extraFiles) {
426
+ const result = await unejectSingleFile(projectRoot, pageDir, {
427
+ ...extra,
428
+ isLogin: false,
429
+ }, appContent, cmdOptions.force);
430
+ if (result.modified) {
431
+ appContent = result.appContent;
432
+ anyModified = true;
433
+ }
434
+ }
435
+ }
436
+ if (anyModified) {
437
+ await fs.writeFile(appTsxPath, appContent, 'utf-8');
438
+ console.log(chalk.green(' ✓'), 'App.tsx switched back to npm import');
439
+ }
440
+ console.log();
441
+ console.log(chalk.cyan(` "${config.pascalName}" is now using npm import from @loom-framework/frontend-antd.`));
442
+ console.log(chalk.dim(` Run "loom eject system-settings ${type}" to customize again.`));
443
+ }
444
+ catch (err) {
445
+ const message = err instanceof Error ? err.message : String(err);
446
+ console.error(chalk.red('Uneject failed:'), message);
447
+ process.exit(1);
448
+ }
449
+ });
450
+ }
451
+ //# sourceMappingURL=eject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eject.js","sourceRoot":"","sources":["../../../src/cli/commands/eject.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  /**
2
- * loom generate system-settings <model|skill|user|process>
2
+ * loom generate system-settings <model|skill|user|login|process|notification>
3
3
  *
4
- * Generate system management pages as local source files.
5
- * Each page is generated individually; the first one creates the system-settings submenu in App.tsx.
6
- * When type is "user", also generates Login page and wires AuthProvider into App.tsx.
4
+ * System management pages are now built into @loom-framework/frontend-antd.
5
+ * Default behavior: wire npm imports into App.tsx (no local files).
6
+ * Use --local to generate local source files for customization (eject).
7
7
  */
8
8
  import type { Command } from 'commander';
9
9
  export declare function registerGenerateSystemSettingsCommand(program: Command): void;
@@ -1 +1 @@
1
- {"version":3,"file":"generate-system-settings.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate-system-settings.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqDzC,wBAAgB,qCAAqC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoE5E"}
1
+ {"version":3,"file":"generate-system-settings.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate-system-settings.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgGzC,wBAAgB,qCAAqC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsF5E"}