@luckydraw/cumulus 0.26.0 → 0.26.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.
- package/package.json +1 -1
- package/dist/lib/projects.d.ts +0 -67
- package/dist/lib/projects.js +0 -233
- package/dist/lib/projects.js.map +0 -1
package/package.json
CHANGED
package/dist/lib/projects.d.ts
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Gateway-native project management — CRUD for projects that bundle
|
|
3
|
-
* a work folder on thundercat with one or more cumulus threads.
|
|
4
|
-
*
|
|
5
|
-
* Projects are stored as individual JSON files in ~/.cumulus/projects/.
|
|
6
|
-
*/
|
|
7
|
-
export interface ProjectMetadata {
|
|
8
|
-
name: string;
|
|
9
|
-
path: string;
|
|
10
|
-
template: string;
|
|
11
|
-
threads: string[];
|
|
12
|
-
primaryThread: string;
|
|
13
|
-
gitRemote?: string;
|
|
14
|
-
createdAt: string;
|
|
15
|
-
lastActivity: string;
|
|
16
|
-
}
|
|
17
|
-
export interface ProjectSummary {
|
|
18
|
-
name: string;
|
|
19
|
-
path: string;
|
|
20
|
-
template: string;
|
|
21
|
-
threadCount: number;
|
|
22
|
-
primaryThread: string;
|
|
23
|
-
lastActivity: string;
|
|
24
|
-
createdAt: string;
|
|
25
|
-
}
|
|
26
|
-
export interface CreateProjectOptions {
|
|
27
|
-
name: string;
|
|
28
|
-
template: string;
|
|
29
|
-
projectRoot?: string;
|
|
30
|
-
gitCloneUrl?: string;
|
|
31
|
-
/** Override the default projects dir for testing */
|
|
32
|
-
projectsDir?: string;
|
|
33
|
-
/** Override the default threads dir for testing */
|
|
34
|
-
threadsDir?: string;
|
|
35
|
-
/** Scaffold function — injected by caller (uses templates module) */
|
|
36
|
-
scaffold?: (projectPath: string, template: string) => Promise<void>;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Create a new project: folder on disk, git init, primary thread, metadata.
|
|
40
|
-
*/
|
|
41
|
-
export declare function createProject(options: CreateProjectOptions): Promise<ProjectMetadata>;
|
|
42
|
-
/**
|
|
43
|
-
* List all projects with summary info.
|
|
44
|
-
*/
|
|
45
|
-
export declare function listProjects(projectsDir?: string): Promise<ProjectSummary[]>;
|
|
46
|
-
/**
|
|
47
|
-
* Get a single project's full metadata.
|
|
48
|
-
*/
|
|
49
|
-
export declare function getProject(name: string, projectsDir?: string): Promise<ProjectMetadata | null>;
|
|
50
|
-
/**
|
|
51
|
-
* Update project metadata (add/remove threads, change settings).
|
|
52
|
-
*/
|
|
53
|
-
export declare function updateProject(name: string, changes: Partial<Pick<ProjectMetadata, 'threads' | 'primaryThread' | 'gitRemote'>>, projectsDir?: string, threadsDir?: string): Promise<ProjectMetadata>;
|
|
54
|
-
/**
|
|
55
|
-
* Delete a project. Optionally delete the project folder on disk.
|
|
56
|
-
*/
|
|
57
|
-
export declare function deleteProject(name: string, deleteFolder?: boolean, projectsDir?: string): Promise<void>;
|
|
58
|
-
/**
|
|
59
|
-
* Add a thread to a project.
|
|
60
|
-
*/
|
|
61
|
-
export declare function addThreadToProject(projectName: string, threadName: string, projectsDir?: string, threadsDir?: string): Promise<ProjectMetadata>;
|
|
62
|
-
/**
|
|
63
|
-
* Resolve a thread's project directory (cwd for Claude subprocess).
|
|
64
|
-
* Returns null if the thread isn't bound to a project.
|
|
65
|
-
*/
|
|
66
|
-
export declare function resolveThreadProjectDir(threadName: string, threadsDir?: string, projectsDir?: string): Promise<string | null>;
|
|
67
|
-
//# sourceMappingURL=projects.d.ts.map
|
package/dist/lib/projects.js
DELETED
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Gateway-native project management — CRUD for projects that bundle
|
|
3
|
-
* a work folder on thundercat with one or more cumulus threads.
|
|
4
|
-
*
|
|
5
|
-
* Projects are stored as individual JSON files in ~/.cumulus/projects/.
|
|
6
|
-
*/
|
|
7
|
-
import * as fs from 'fs';
|
|
8
|
-
import * as path from 'path';
|
|
9
|
-
import * as os from 'os';
|
|
10
|
-
import { execSync, execFileSync } from 'child_process';
|
|
11
|
-
const CUMULUS_DIR = path.join(os.homedir(), '.cumulus');
|
|
12
|
-
const PROJECTS_DIR = path.join(CUMULUS_DIR, 'projects');
|
|
13
|
-
const THREADS_DIR = path.join(CUMULUS_DIR, 'threads');
|
|
14
|
-
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
15
|
-
function getProjectsDir(overrideDir) {
|
|
16
|
-
return overrideDir ?? PROJECTS_DIR;
|
|
17
|
-
}
|
|
18
|
-
function getThreadsDir(overrideDir) {
|
|
19
|
-
return overrideDir ?? THREADS_DIR;
|
|
20
|
-
}
|
|
21
|
-
function getProjectFilePath(name, projectsDir) {
|
|
22
|
-
return path.join(getProjectsDir(projectsDir), `${name}.json`);
|
|
23
|
-
}
|
|
24
|
-
function sanitizeName(name) {
|
|
25
|
-
return name.replace(/[^a-zA-Z0-9_-]/g, '');
|
|
26
|
-
}
|
|
27
|
-
function ensureDir(dir) {
|
|
28
|
-
if (!fs.existsSync(dir)) {
|
|
29
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
// ─── CRUD ────────────────────────────────────────────────────────────────────
|
|
33
|
-
/**
|
|
34
|
-
* Create a new project: folder on disk, git init, primary thread, metadata.
|
|
35
|
-
*/
|
|
36
|
-
export async function createProject(options) {
|
|
37
|
-
const { template, gitCloneUrl, scaffold } = options;
|
|
38
|
-
const name = sanitizeName(options.name);
|
|
39
|
-
if (!name)
|
|
40
|
-
throw new Error('Invalid project name');
|
|
41
|
-
const pDir = getProjectsDir(options.projectsDir);
|
|
42
|
-
const tDir = getThreadsDir(options.threadsDir);
|
|
43
|
-
ensureDir(pDir);
|
|
44
|
-
ensureDir(tDir);
|
|
45
|
-
// Check if project already exists
|
|
46
|
-
const metaPath = getProjectFilePath(name, options.projectsDir);
|
|
47
|
-
if (fs.existsSync(metaPath)) {
|
|
48
|
-
throw new Error(`Project "${name}" already exists`);
|
|
49
|
-
}
|
|
50
|
-
// Determine project root
|
|
51
|
-
const root = options.projectRoot ?? path.join(os.homedir(), 'projects');
|
|
52
|
-
const projectPath = path.join(root, name);
|
|
53
|
-
if (gitCloneUrl) {
|
|
54
|
-
// Validate URL format (prevent command injection)
|
|
55
|
-
if (!/^(https?:\/\/|git@|ssh:\/\/|git:\/\/)[\w.@:/?#[\]!$&'()*+,;=%-]+$/i.test(gitCloneUrl)) {
|
|
56
|
-
throw new Error('Invalid git clone URL');
|
|
57
|
-
}
|
|
58
|
-
// Clone the repo — use execFileSync to prevent shell injection
|
|
59
|
-
execFileSync('git', ['clone', gitCloneUrl, projectPath], { stdio: 'pipe' });
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
// Create the directory
|
|
63
|
-
ensureDir(projectPath);
|
|
64
|
-
// Scaffold from template
|
|
65
|
-
if (scaffold) {
|
|
66
|
-
await scaffold(projectPath, template);
|
|
67
|
-
}
|
|
68
|
-
// Init git
|
|
69
|
-
if (!fs.existsSync(path.join(projectPath, '.git'))) {
|
|
70
|
-
try {
|
|
71
|
-
execSync('git init', { cwd: projectPath, stdio: 'pipe' });
|
|
72
|
-
}
|
|
73
|
-
catch {
|
|
74
|
-
// Non-fatal — git may not be available
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
// Create primary thread config with project binding
|
|
79
|
-
const threadConfigPath = path.join(tDir, `${name}.config.json`);
|
|
80
|
-
const threadConfig = { project: name };
|
|
81
|
-
fs.writeFileSync(threadConfigPath, JSON.stringify(threadConfig, null, 2));
|
|
82
|
-
// Save project metadata
|
|
83
|
-
const now = new Date().toISOString();
|
|
84
|
-
const metadata = {
|
|
85
|
-
name,
|
|
86
|
-
path: projectPath,
|
|
87
|
-
template,
|
|
88
|
-
threads: [name],
|
|
89
|
-
primaryThread: name,
|
|
90
|
-
gitRemote: gitCloneUrl,
|
|
91
|
-
createdAt: now,
|
|
92
|
-
lastActivity: now,
|
|
93
|
-
};
|
|
94
|
-
fs.writeFileSync(metaPath, JSON.stringify(metadata, null, 2));
|
|
95
|
-
return metadata;
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* List all projects with summary info.
|
|
99
|
-
*/
|
|
100
|
-
export async function listProjects(projectsDir) {
|
|
101
|
-
const pDir = getProjectsDir(projectsDir);
|
|
102
|
-
if (!fs.existsSync(pDir))
|
|
103
|
-
return [];
|
|
104
|
-
const files = fs.readdirSync(pDir).filter(f => f.endsWith('.json'));
|
|
105
|
-
const projects = [];
|
|
106
|
-
for (const file of files) {
|
|
107
|
-
try {
|
|
108
|
-
const raw = fs.readFileSync(path.join(pDir, file), 'utf-8');
|
|
109
|
-
const meta = JSON.parse(raw);
|
|
110
|
-
projects.push({
|
|
111
|
-
name: meta.name,
|
|
112
|
-
path: meta.path,
|
|
113
|
-
template: meta.template,
|
|
114
|
-
threadCount: meta.threads.length,
|
|
115
|
-
primaryThread: meta.primaryThread,
|
|
116
|
-
lastActivity: meta.lastActivity,
|
|
117
|
-
createdAt: meta.createdAt,
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
catch {
|
|
121
|
-
// Skip corrupt files
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
// Sort by last activity descending
|
|
125
|
-
projects.sort((a, b) => b.lastActivity.localeCompare(a.lastActivity));
|
|
126
|
-
return projects;
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Get a single project's full metadata.
|
|
130
|
-
*/
|
|
131
|
-
export async function getProject(name, projectsDir) {
|
|
132
|
-
const metaPath = getProjectFilePath(name, projectsDir);
|
|
133
|
-
if (!fs.existsSync(metaPath))
|
|
134
|
-
return null;
|
|
135
|
-
try {
|
|
136
|
-
const raw = fs.readFileSync(metaPath, 'utf-8');
|
|
137
|
-
return JSON.parse(raw);
|
|
138
|
-
}
|
|
139
|
-
catch {
|
|
140
|
-
return null;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Update project metadata (add/remove threads, change settings).
|
|
145
|
-
*/
|
|
146
|
-
export async function updateProject(name, changes, projectsDir, threadsDir) {
|
|
147
|
-
const metaPath = getProjectFilePath(name, projectsDir);
|
|
148
|
-
if (!fs.existsSync(metaPath)) {
|
|
149
|
-
throw new Error(`Project "${name}" not found`);
|
|
150
|
-
}
|
|
151
|
-
const raw = fs.readFileSync(metaPath, 'utf-8');
|
|
152
|
-
const meta = JSON.parse(raw);
|
|
153
|
-
if (changes.threads)
|
|
154
|
-
meta.threads = changes.threads;
|
|
155
|
-
if (changes.primaryThread)
|
|
156
|
-
meta.primaryThread = changes.primaryThread;
|
|
157
|
-
if (changes.gitRemote !== undefined)
|
|
158
|
-
meta.gitRemote = changes.gitRemote;
|
|
159
|
-
meta.lastActivity = new Date().toISOString();
|
|
160
|
-
// Update thread configs for any new threads
|
|
161
|
-
const tDir = getThreadsDir(threadsDir);
|
|
162
|
-
for (const threadName of meta.threads) {
|
|
163
|
-
const threadConfigPath = path.join(tDir, `${threadName}.config.json`);
|
|
164
|
-
if (!fs.existsSync(threadConfigPath)) {
|
|
165
|
-
fs.writeFileSync(threadConfigPath, JSON.stringify({ project: name }, null, 2));
|
|
166
|
-
}
|
|
167
|
-
else {
|
|
168
|
-
// Ensure project binding exists
|
|
169
|
-
try {
|
|
170
|
-
const tc = JSON.parse(fs.readFileSync(threadConfigPath, 'utf-8'));
|
|
171
|
-
if (tc.project !== name) {
|
|
172
|
-
tc.project = name;
|
|
173
|
-
fs.writeFileSync(threadConfigPath, JSON.stringify(tc, null, 2));
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
catch {
|
|
177
|
-
// Skip
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
fs.writeFileSync(metaPath, JSON.stringify(meta, null, 2));
|
|
182
|
-
return meta;
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Delete a project. Optionally delete the project folder on disk.
|
|
186
|
-
*/
|
|
187
|
-
export async function deleteProject(name, deleteFolder = false, projectsDir) {
|
|
188
|
-
const metaPath = getProjectFilePath(name, projectsDir);
|
|
189
|
-
if (!fs.existsSync(metaPath)) {
|
|
190
|
-
throw new Error(`Project "${name}" not found`);
|
|
191
|
-
}
|
|
192
|
-
const raw = fs.readFileSync(metaPath, 'utf-8');
|
|
193
|
-
const meta = JSON.parse(raw);
|
|
194
|
-
// Remove project metadata file
|
|
195
|
-
fs.unlinkSync(metaPath);
|
|
196
|
-
// Optionally delete the project folder
|
|
197
|
-
if (deleteFolder && meta.path && fs.existsSync(meta.path)) {
|
|
198
|
-
fs.rmSync(meta.path, { recursive: true });
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
/**
|
|
202
|
-
* Add a thread to a project.
|
|
203
|
-
*/
|
|
204
|
-
export async function addThreadToProject(projectName, threadName, projectsDir, threadsDir) {
|
|
205
|
-
const meta = await getProject(projectName, projectsDir);
|
|
206
|
-
if (!meta)
|
|
207
|
-
throw new Error(`Project "${projectName}" not found`);
|
|
208
|
-
if (!meta.threads.includes(threadName)) {
|
|
209
|
-
meta.threads.push(threadName);
|
|
210
|
-
}
|
|
211
|
-
return updateProject(projectName, { threads: meta.threads }, projectsDir, threadsDir);
|
|
212
|
-
}
|
|
213
|
-
/**
|
|
214
|
-
* Resolve a thread's project directory (cwd for Claude subprocess).
|
|
215
|
-
* Returns null if the thread isn't bound to a project.
|
|
216
|
-
*/
|
|
217
|
-
export async function resolveThreadProjectDir(threadName, threadsDir, projectsDir) {
|
|
218
|
-
const tDir = getThreadsDir(threadsDir);
|
|
219
|
-
const threadConfigPath = path.join(tDir, `${threadName}.config.json`);
|
|
220
|
-
if (!fs.existsSync(threadConfigPath))
|
|
221
|
-
return null;
|
|
222
|
-
try {
|
|
223
|
-
const tc = JSON.parse(fs.readFileSync(threadConfigPath, 'utf-8'));
|
|
224
|
-
if (!tc.project)
|
|
225
|
-
return null;
|
|
226
|
-
const meta = await getProject(tc.project, projectsDir);
|
|
227
|
-
return meta?.path ?? null;
|
|
228
|
-
}
|
|
229
|
-
catch {
|
|
230
|
-
return null;
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
//# sourceMappingURL=projects.js.map
|
package/dist/lib/projects.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/lib/projects.ts"],"names":[],"mappings":"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"}
|