@luckydraw/cumulus 0.18.2 → 0.20.0

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 (51) hide show
  1. package/dist/gateway/adapters/discord.d.ts.map +1 -1
  2. package/dist/gateway/adapters/discord.js +3 -3
  3. package/dist/gateway/adapters/discord.js.map +1 -1
  4. package/dist/gateway/adapters/slack.d.ts.map +1 -1
  5. package/dist/gateway/adapters/slack.js +2 -2
  6. package/dist/gateway/adapters/slack.js.map +1 -1
  7. package/dist/gateway/adapters/webchat.d.ts +3 -0
  8. package/dist/gateway/adapters/webchat.d.ts.map +1 -1
  9. package/dist/gateway/adapters/webchat.js +129 -10
  10. package/dist/gateway/adapters/webchat.js.map +1 -1
  11. package/dist/gateway/cli.js +1 -1
  12. package/dist/gateway/cli.js.map +1 -1
  13. package/dist/gateway/config.d.ts +15 -0
  14. package/dist/gateway/config.d.ts.map +1 -1
  15. package/dist/gateway/config.js +18 -1
  16. package/dist/gateway/config.js.map +1 -1
  17. package/dist/gateway/daemon.d.ts.map +1 -1
  18. package/dist/gateway/daemon.js +11 -11
  19. package/dist/gateway/daemon.js.map +1 -1
  20. package/dist/gateway/logger.js +1 -1
  21. package/dist/gateway/logger.js.map +1 -1
  22. package/dist/gateway/server.d.ts +3 -0
  23. package/dist/gateway/server.d.ts.map +1 -1
  24. package/dist/gateway/server.js +220 -12
  25. package/dist/gateway/server.js.map +1 -1
  26. package/dist/gateway/static/widget.js +520 -89
  27. package/dist/index.d.ts +5 -1
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +3 -0
  30. package/dist/index.js.map +1 -1
  31. package/dist/lib/gateway.d.ts +1 -1
  32. package/dist/lib/gateway.d.ts.map +1 -1
  33. package/dist/lib/gateway.js +48 -30
  34. package/dist/lib/gateway.js.map +1 -1
  35. package/dist/lib/projects.d.ts +67 -0
  36. package/dist/lib/projects.d.ts.map +1 -0
  37. package/dist/lib/projects.js +229 -0
  38. package/dist/lib/projects.js.map +1 -0
  39. package/dist/lib/retriever.d.ts.map +1 -1
  40. package/dist/lib/retriever.js +1 -3
  41. package/dist/lib/retriever.js.map +1 -1
  42. package/dist/lib/segments.d.ts.map +1 -1
  43. package/dist/lib/segments.js.map +1 -1
  44. package/dist/lib/summaries.d.ts.map +1 -1
  45. package/dist/lib/summaries.js +7 -10
  46. package/dist/lib/summaries.js.map +1 -1
  47. package/dist/lib/templates.d.ts +25 -0
  48. package/dist/lib/templates.d.ts.map +1 -0
  49. package/dist/lib/templates.js +102 -0
  50. package/dist/lib/templates.js.map +1 -0
  51. package/package.json +1 -1
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Template system for project scaffolding.
3
+ * Creates standard directory structure and initial files from configurable templates.
4
+ */
5
+ import * as fs from 'fs';
6
+ import * as path from 'path';
7
+ import * as os from 'os';
8
+ const CUMULUS_DIR = path.join(os.homedir(), '.cumulus');
9
+ const TEMPLATES_DIR = path.join(CUMULUS_DIR, 'templates');
10
+ // ─── Default templates ───────────────────────────────────────────────────────
11
+ const DEFAULT_TEMPLATES = {
12
+ default: {
13
+ scaffold: ['Tasks.md', 'docs/tasks/', 'docs/decisions/'],
14
+ alwaysInclude: ['Tasks.md'],
15
+ initialTasks: [],
16
+ },
17
+ 'web-app': {
18
+ scaffold: ['Tasks.md', 'docs/tasks/', 'docs/decisions/', 'src/', 'public/'],
19
+ alwaysInclude: ['Tasks.md', 'README.md'],
20
+ initialTasks: [],
21
+ },
22
+ };
23
+ // ─── Default file contents ───────────────────────────────────────────────────
24
+ function defaultTasksMd(projectName) {
25
+ return `# ${projectName} Tasks\n\n\n`;
26
+ }
27
+ // ─── Public API ──────────────────────────────────────────────────────────────
28
+ /**
29
+ * List available templates (merged from config + defaults).
30
+ */
31
+ export function listTemplates(configTemplates) {
32
+ return { ...DEFAULT_TEMPLATES, ...configTemplates };
33
+ }
34
+ /**
35
+ * Scaffold a project directory from a template.
36
+ */
37
+ export async function scaffoldFromTemplate(projectPath, templateName, projectName, configTemplates) {
38
+ const templates = listTemplates(configTemplates);
39
+ const template = templates[templateName];
40
+ if (!template) {
41
+ throw new Error(`Unknown template: "${templateName}". Available: ${Object.keys(templates).join(', ')}`);
42
+ }
43
+ // Create directories and files from scaffold list
44
+ for (const entry of template.scaffold) {
45
+ const fullPath = path.join(projectPath, entry);
46
+ if (entry.endsWith('/')) {
47
+ // Directory
48
+ fs.mkdirSync(fullPath, { recursive: true });
49
+ }
50
+ else {
51
+ // File — create with default content if it doesn't exist
52
+ const dir = path.dirname(fullPath);
53
+ fs.mkdirSync(dir, { recursive: true });
54
+ if (!fs.existsSync(fullPath)) {
55
+ const content = getDefaultFileContent(entry, projectName);
56
+ fs.writeFileSync(fullPath, content);
57
+ }
58
+ }
59
+ }
60
+ // Copy initial task files from templates dir
61
+ if (template.initialTasks && template.initialTasks.length > 0) {
62
+ const tasksDir = path.join(projectPath, 'docs', 'tasks');
63
+ fs.mkdirSync(tasksDir, { recursive: true });
64
+ for (const taskId of template.initialTasks) {
65
+ // Look in ~/.cumulus/templates/tasks/ first, then bundled
66
+ const sourceFile = findTaskTemplate(taskId);
67
+ if (sourceFile) {
68
+ const destFile = path.join(tasksDir, `${taskId}.md`);
69
+ if (!fs.existsSync(destFile)) {
70
+ fs.copyFileSync(sourceFile, destFile);
71
+ }
72
+ }
73
+ }
74
+ }
75
+ }
76
+ /**
77
+ * Get alwaysInclude paths for a template.
78
+ */
79
+ export function getTemplateAlwaysInclude(templateName, configTemplates) {
80
+ const templates = listTemplates(configTemplates);
81
+ return templates[templateName]?.alwaysInclude ?? ['Tasks.md'];
82
+ }
83
+ // ─── Internal helpers ────────────────────────────────────────────────────────
84
+ function getDefaultFileContent(filename, projectName) {
85
+ if (filename === 'Tasks.md')
86
+ return defaultTasksMd(projectName);
87
+ if (filename === 'README.md')
88
+ return `# ${projectName}\n`;
89
+ return '';
90
+ }
91
+ function findTaskTemplate(taskId) {
92
+ // Check user templates dir
93
+ const userPath = path.join(TEMPLATES_DIR, 'tasks', `${taskId}.md`);
94
+ if (fs.existsSync(userPath))
95
+ return userPath;
96
+ // Check global templates (macOS convention)
97
+ const globalPath = path.join(os.homedir(), 'Documents', '_Projects', '_Global', 'docs', 'tasks', `${taskId}.md`);
98
+ if (fs.existsSync(globalPath))
99
+ return globalPath;
100
+ return null;
101
+ }
102
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/lib/templates.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@luckydraw/cumulus",
3
- "version": "0.18.2",
3
+ "version": "0.20.0",
4
4
  "description": "RLM-based CLI chat wrapper for Claude with external history context management",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",