cluttry 1.0.3 → 1.5.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.
- package/CHANGELOG.md +71 -0
- package/README.md +203 -300
- package/dist/commands/completions.d.ts +16 -0
- package/dist/commands/completions.d.ts.map +1 -0
- package/dist/commands/completions.js +46 -0
- package/dist/commands/completions.js.map +1 -0
- package/dist/commands/explain-copy.d.ts +11 -0
- package/dist/commands/explain-copy.d.ts.map +1 -0
- package/dist/commands/explain-copy.js +34 -0
- package/dist/commands/explain-copy.js.map +1 -0
- package/dist/commands/finish.d.ts +20 -0
- package/dist/commands/finish.d.ts.map +1 -0
- package/dist/commands/finish.js +817 -0
- package/dist/commands/finish.js.map +1 -0
- package/dist/commands/gc.d.ts +22 -0
- package/dist/commands/gc.d.ts.map +1 -0
- package/dist/commands/gc.js +163 -0
- package/dist/commands/gc.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +1 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/open.d.ts +15 -1
- package/dist/commands/open.d.ts.map +1 -1
- package/dist/commands/open.js +96 -17
- package/dist/commands/open.js.map +1 -1
- package/dist/commands/resume.d.ts +21 -0
- package/dist/commands/resume.d.ts.map +1 -0
- package/dist/commands/resume.js +106 -0
- package/dist/commands/resume.js.map +1 -0
- package/dist/commands/rm.d.ts.map +1 -1
- package/dist/commands/rm.js +6 -14
- package/dist/commands/rm.js.map +1 -1
- package/dist/commands/spawn.d.ts +3 -0
- package/dist/commands/spawn.d.ts.map +1 -1
- package/dist/commands/spawn.js +182 -19
- package/dist/commands/spawn.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +198 -9
- package/dist/index.js.map +1 -1
- package/dist/lib/completions.d.ts +35 -0
- package/dist/lib/completions.d.ts.map +1 -0
- package/dist/lib/completions.js +368 -0
- package/dist/lib/completions.js.map +1 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +2 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/errors.d.ts +43 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +251 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/git.d.ts +17 -0
- package/dist/lib/git.d.ts.map +1 -1
- package/dist/lib/git.js +78 -10
- package/dist/lib/git.js.map +1 -1
- package/dist/lib/safety.d.ts +79 -0
- package/dist/lib/safety.d.ts.map +1 -0
- package/dist/lib/safety.js +133 -0
- package/dist/lib/safety.js.map +1 -0
- package/dist/lib/secrets.d.ts +29 -0
- package/dist/lib/secrets.d.ts.map +1 -1
- package/dist/lib/secrets.js +115 -0
- package/dist/lib/secrets.js.map +1 -1
- package/dist/lib/session.d.ts +93 -0
- package/dist/lib/session.d.ts.map +1 -0
- package/dist/lib/session.js +254 -0
- package/dist/lib/session.js.map +1 -0
- package/dist/lib/types.d.ts +6 -1
- package/dist/lib/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/.claude/settings.local.json +0 -7
- package/src/commands/doctor.ts +0 -222
- package/src/commands/init.ts +0 -120
- package/src/commands/list.ts +0 -133
- package/src/commands/open.ts +0 -78
- package/src/commands/prune.ts +0 -36
- package/src/commands/rm.ts +0 -125
- package/src/commands/shell.ts +0 -99
- package/src/commands/spawn.ts +0 -169
- package/src/index.ts +0 -123
- package/src/lib/config.ts +0 -120
- package/src/lib/git.ts +0 -243
- package/src/lib/output.ts +0 -102
- package/src/lib/paths.ts +0 -108
- package/src/lib/secrets.ts +0 -193
- package/src/lib/types.ts +0 -69
- package/tests/config.test.ts +0 -102
- package/tests/paths.test.ts +0 -155
- package/tests/secrets.test.ts +0 -150
- package/tsconfig.json +0 -20
- package/vitest.config.ts +0 -15
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safety.js","sourceRoot":"","sources":["../../src/lib/safety.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/secrets.d.ts
CHANGED
|
@@ -42,9 +42,38 @@ export declare function copyFile(relativePath: string, sourceRoot: string, targe
|
|
|
42
42
|
export declare function createSymlink(relativePath: string, sourceRoot: string, targetRoot: string): void;
|
|
43
43
|
/**
|
|
44
44
|
* Process files according to mode (copy or symlink)
|
|
45
|
+
* SAFETY: Only processes files that pass safety checks (not tracked, is ignored)
|
|
45
46
|
*/
|
|
46
47
|
export declare function processSecrets(mode: SecretMode, patterns: string[], sourceRoot: string, targetRoot: string): Promise<{
|
|
47
48
|
processed: string[];
|
|
48
49
|
skipped: FileCheckResult[];
|
|
49
50
|
}>;
|
|
51
|
+
/**
|
|
52
|
+
* Copy plan for explain-copy and spawn --dry-run
|
|
53
|
+
*/
|
|
54
|
+
export interface CopyPlan {
|
|
55
|
+
/** Files that will be copied/symlinked */
|
|
56
|
+
willCopy: Array<{
|
|
57
|
+
path: string;
|
|
58
|
+
reason: string;
|
|
59
|
+
}>;
|
|
60
|
+
/** Files that are blocked from copying */
|
|
61
|
+
blocked: Array<{
|
|
62
|
+
path: string;
|
|
63
|
+
reason: string;
|
|
64
|
+
type: 'tracked' | 'not_ignored' | 'not_found';
|
|
65
|
+
}>;
|
|
66
|
+
/** Warnings about include patterns */
|
|
67
|
+
warnings: string[];
|
|
68
|
+
/** Patterns from config */
|
|
69
|
+
patterns: string[];
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Generate a copy plan explaining what will/won't be copied
|
|
73
|
+
*/
|
|
74
|
+
export declare function generateCopyPlan(patterns: string[], repoRoot: string): Promise<CopyPlan>;
|
|
75
|
+
/**
|
|
76
|
+
* Format a copy plan for human-readable output
|
|
77
|
+
*/
|
|
78
|
+
export declare function formatCopyPlan(plan: CopyPlan, mode: SecretMode): string;
|
|
50
79
|
//# sourceMappingURL=secrets.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/lib/secrets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/lib/secrets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,CA+BnF;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAAE,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,EAAE,CAAC,CAsBnB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAAE,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,IAAI,EAAE,eAAe,EAAE,CAAC;IAAC,MAAM,EAAE,eAAe,EAAE,CAAA;CAAE,CAAC,CAgBjE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CACtB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,IAAI,CAWN;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,IAAI,CAYN;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,MAAM,EAAE,EAClB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,eAAe,EAAE,CAAA;CAAE,CAAC,CAuC9D;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,0CAA0C;IAC1C,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH,0CAA0C;IAC1C,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,SAAS,GAAG,aAAa,GAAG,WAAW,CAAC;KAC/C,CAAC,CAAC;IACH,sCAAsC;IACtC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAAE,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,QAAQ,CAAC,CAmDnB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CAgDvE"}
|
package/dist/lib/secrets.js
CHANGED
|
@@ -8,6 +8,8 @@ import { existsSync, copyFileSync, symlinkSync, mkdirSync } from 'node:fs';
|
|
|
8
8
|
import path from 'node:path';
|
|
9
9
|
import { glob } from 'glob';
|
|
10
10
|
import { isTracked, isIgnored } from './git.js';
|
|
11
|
+
import { validateFileCopy } from './safety.js';
|
|
12
|
+
import * as out from './output.js';
|
|
11
13
|
/**
|
|
12
14
|
* Check if a file is safe to copy/symlink
|
|
13
15
|
* A file is safe if:
|
|
@@ -115,6 +117,7 @@ export function createSymlink(relativePath, sourceRoot, targetRoot) {
|
|
|
115
117
|
}
|
|
116
118
|
/**
|
|
117
119
|
* Process files according to mode (copy or symlink)
|
|
120
|
+
* SAFETY: Only processes files that pass safety checks (not tracked, is ignored)
|
|
118
121
|
*/
|
|
119
122
|
export async function processSecrets(mode, patterns, sourceRoot, targetRoot) {
|
|
120
123
|
if (mode === 'none') {
|
|
@@ -123,6 +126,16 @@ export async function processSecrets(mode, patterns, sourceRoot, targetRoot) {
|
|
|
123
126
|
const { safe, unsafe } = await getSafeFiles(patterns, sourceRoot);
|
|
124
127
|
const processed = [];
|
|
125
128
|
for (const file of safe) {
|
|
129
|
+
// SAFETY: Validate file copy decision before proceeding
|
|
130
|
+
const decision = {
|
|
131
|
+
path: file.path,
|
|
132
|
+
allowed: file.safe,
|
|
133
|
+
reason: file.reason ?? 'File is gitignored and not tracked',
|
|
134
|
+
isTracked: file.isTracked,
|
|
135
|
+
isIgnored: file.isIgnored,
|
|
136
|
+
};
|
|
137
|
+
// This will throw if safety constraints are violated
|
|
138
|
+
validateFileCopy(decision);
|
|
126
139
|
try {
|
|
127
140
|
if (mode === 'copy') {
|
|
128
141
|
copyFile(file.path, sourceRoot, targetRoot);
|
|
@@ -143,4 +156,106 @@ export async function processSecrets(mode, patterns, sourceRoot, targetRoot) {
|
|
|
143
156
|
}
|
|
144
157
|
return { processed, skipped: unsafe };
|
|
145
158
|
}
|
|
159
|
+
/**
|
|
160
|
+
* Generate a copy plan explaining what will/won't be copied
|
|
161
|
+
*/
|
|
162
|
+
export async function generateCopyPlan(patterns, repoRoot) {
|
|
163
|
+
const plan = {
|
|
164
|
+
willCopy: [],
|
|
165
|
+
blocked: [],
|
|
166
|
+
warnings: [],
|
|
167
|
+
patterns,
|
|
168
|
+
};
|
|
169
|
+
if (patterns.length === 0) {
|
|
170
|
+
return plan;
|
|
171
|
+
}
|
|
172
|
+
// Expand patterns and check each file
|
|
173
|
+
const files = await expandIncludePatterns(patterns, repoRoot);
|
|
174
|
+
for (const file of files) {
|
|
175
|
+
const result = checkFileSafety(file, repoRoot);
|
|
176
|
+
if (result.safe) {
|
|
177
|
+
plan.willCopy.push({
|
|
178
|
+
path: result.path,
|
|
179
|
+
reason: 'gitignored and exists',
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
else if (!result.exists) {
|
|
183
|
+
// Don't report non-existent files as blocked (pattern just didn't match anything real)
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
else if (result.isTracked) {
|
|
187
|
+
plan.blocked.push({
|
|
188
|
+
path: result.path,
|
|
189
|
+
reason: result.reason || 'File is tracked by git',
|
|
190
|
+
type: 'tracked',
|
|
191
|
+
});
|
|
192
|
+
plan.warnings.push(`Pattern matches tracked file: ${result.path} — tracked files are NEVER copied`);
|
|
193
|
+
}
|
|
194
|
+
else if (!result.isIgnored) {
|
|
195
|
+
plan.blocked.push({
|
|
196
|
+
path: result.path,
|
|
197
|
+
reason: result.reason || 'File is not in .gitignore',
|
|
198
|
+
type: 'not_ignored',
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
plan.blocked.push({
|
|
203
|
+
path: result.path,
|
|
204
|
+
reason: result.reason || 'Unknown safety issue',
|
|
205
|
+
type: 'not_found',
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return plan;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Format a copy plan for human-readable output
|
|
213
|
+
*/
|
|
214
|
+
export function formatCopyPlan(plan, mode) {
|
|
215
|
+
const lines = [];
|
|
216
|
+
// Patterns
|
|
217
|
+
lines.push(out.fmt.bold('Include patterns:'));
|
|
218
|
+
if (plan.patterns.length === 0) {
|
|
219
|
+
lines.push(' (none configured)');
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
for (const pattern of plan.patterns) {
|
|
223
|
+
lines.push(` ${out.fmt.dim('•')} ${pattern}`);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
lines.push('');
|
|
227
|
+
// Warnings (if any)
|
|
228
|
+
if (plan.warnings.length > 0) {
|
|
229
|
+
lines.push(out.fmt.yellow(out.fmt.bold('⚠ Warnings:')));
|
|
230
|
+
for (const warning of plan.warnings) {
|
|
231
|
+
lines.push(` ${out.fmt.yellow('•')} ${warning}`);
|
|
232
|
+
}
|
|
233
|
+
lines.push('');
|
|
234
|
+
}
|
|
235
|
+
// Files that will be copied
|
|
236
|
+
lines.push(out.fmt.green(out.fmt.bold(`✓ Will ${mode === 'symlink' ? 'symlink' : 'copy'} (${plan.willCopy.length} file${plan.willCopy.length !== 1 ? 's' : ''}):`)));
|
|
237
|
+
if (plan.willCopy.length === 0) {
|
|
238
|
+
lines.push(` ${out.fmt.dim('(no files matched)')}`);
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
for (const file of plan.willCopy) {
|
|
242
|
+
lines.push(` ${out.fmt.green('•')} ${file.path}`);
|
|
243
|
+
lines.push(` ${out.fmt.dim(file.reason)}`);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
lines.push('');
|
|
247
|
+
// Files that are blocked
|
|
248
|
+
lines.push(out.fmt.red(out.fmt.bold(`✗ Blocked (${plan.blocked.length} file${plan.blocked.length !== 1 ? 's' : ''}):`)));
|
|
249
|
+
if (plan.blocked.length === 0) {
|
|
250
|
+
lines.push(` ${out.fmt.dim('(none)')}`);
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
for (const file of plan.blocked) {
|
|
254
|
+
const icon = file.type === 'tracked' ? '🔒' : file.type === 'not_ignored' ? '⚠' : '?';
|
|
255
|
+
lines.push(` ${out.fmt.red('•')} ${icon} ${file.path}`);
|
|
256
|
+
lines.push(` ${out.fmt.dim(file.reason)}`);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return lines.join('\n');
|
|
260
|
+
}
|
|
146
261
|
//# sourceMappingURL=secrets.js.map
|
package/dist/lib/secrets.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/lib/secrets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAyB,MAAM,SAAS,CAAC;AAClG,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/lib/secrets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session manifest management for cry
|
|
3
|
+
*
|
|
4
|
+
* Sessions track the lifecycle of a worktree from spawn to finish.
|
|
5
|
+
* Manifests are stored in .cry/sessions/<id>.json in the repo root.
|
|
6
|
+
*/
|
|
7
|
+
export declare const SESSIONS_DIR = ".cry/sessions";
|
|
8
|
+
export interface SessionManifest {
|
|
9
|
+
/** Unique session identifier */
|
|
10
|
+
id: string;
|
|
11
|
+
/** Absolute path to the repository root (main worktree) */
|
|
12
|
+
repoRoot: string;
|
|
13
|
+
/** ISO timestamp when session was created */
|
|
14
|
+
createdAt: string;
|
|
15
|
+
/** Branch name for this worktree */
|
|
16
|
+
branch: string;
|
|
17
|
+
/** Branch we spawned from (base for PRs) */
|
|
18
|
+
baseBranch: string;
|
|
19
|
+
/** Absolute path to the worktree directory */
|
|
20
|
+
worktreePath: string;
|
|
21
|
+
/** Agent used for this session (optional) */
|
|
22
|
+
agent?: string;
|
|
23
|
+
/** Human-readable task name (optional) */
|
|
24
|
+
taskName?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface CreateSessionOptions {
|
|
27
|
+
repoRoot: string;
|
|
28
|
+
branch: string;
|
|
29
|
+
baseBranch: string;
|
|
30
|
+
worktreePath: string;
|
|
31
|
+
agent?: string;
|
|
32
|
+
taskName?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Get the sessions directory path for a repo
|
|
36
|
+
*/
|
|
37
|
+
export declare function getSessionsDir(repoRoot: string): string;
|
|
38
|
+
/**
|
|
39
|
+
* Get the manifest file path for a session
|
|
40
|
+
*/
|
|
41
|
+
export declare function getManifestPath(repoRoot: string, sessionId: string): string;
|
|
42
|
+
/**
|
|
43
|
+
* Ensure the sessions directory exists
|
|
44
|
+
*/
|
|
45
|
+
export declare function ensureSessionsDir(repoRoot: string): void;
|
|
46
|
+
/**
|
|
47
|
+
* Create a new session manifest
|
|
48
|
+
*/
|
|
49
|
+
export declare function createSessionManifest(options: CreateSessionOptions): SessionManifest;
|
|
50
|
+
/**
|
|
51
|
+
* Read a session manifest by ID
|
|
52
|
+
*/
|
|
53
|
+
export declare function readSessionManifest(repoRoot: string, sessionId: string): SessionManifest | null;
|
|
54
|
+
/**
|
|
55
|
+
* List all sessions for a repository
|
|
56
|
+
*/
|
|
57
|
+
export declare function listSessions(repoRoot: string): SessionManifest[];
|
|
58
|
+
/**
|
|
59
|
+
* Find session for the current working directory
|
|
60
|
+
*
|
|
61
|
+
* Strategy:
|
|
62
|
+
* 1. Check if CWD matches any session's worktreePath exactly
|
|
63
|
+
* 2. Check if CWD is inside any session's worktreePath
|
|
64
|
+
* 3. Fallback: use git worktree list to find current worktree, then match by branch
|
|
65
|
+
*/
|
|
66
|
+
export declare function findSessionForCwd(cwd: string): SessionManifest | null;
|
|
67
|
+
/**
|
|
68
|
+
* Find the main repository root (where .cry/ lives)
|
|
69
|
+
*
|
|
70
|
+
* For worktrees, we need to trace back to the main repo.
|
|
71
|
+
*/
|
|
72
|
+
export declare function findMainRepoRoot(cwd: string): string | null;
|
|
73
|
+
/**
|
|
74
|
+
* Delete a session by ID
|
|
75
|
+
*/
|
|
76
|
+
export declare function deleteSession(repoRoot: string, sessionId: string): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Find session by branch name
|
|
79
|
+
*/
|
|
80
|
+
export declare function findSessionByBranch(repoRoot: string, branch: string): SessionManifest | null;
|
|
81
|
+
/**
|
|
82
|
+
* Find session by worktree path
|
|
83
|
+
*/
|
|
84
|
+
export declare function findSessionByWorktreePath(repoRoot: string, worktreePath: string): SessionManifest | null;
|
|
85
|
+
/**
|
|
86
|
+
* Update an existing session manifest
|
|
87
|
+
*/
|
|
88
|
+
export declare function updateSessionManifest(repoRoot: string, sessionId: string, updates: Partial<Omit<SessionManifest, 'id' | 'createdAt'>>): SessionManifest | null;
|
|
89
|
+
/**
|
|
90
|
+
* Check if a worktree path has an associated session
|
|
91
|
+
*/
|
|
92
|
+
export declare function hasSession(repoRoot: string, worktreePath: string): boolean;
|
|
93
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/lib/session.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAeH,eAAO,MAAM,YAAY,kBAAkB,CAAC;AAE5C,MAAM,WAAW,eAAe;IAC9B,gCAAgC;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,YAAY,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAWD;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAKxD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,oBAAoB,GAAG,eAAe,CAmBpF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAY/F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE,CAyBhE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CA8DrE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA8B3D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAY1E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAG5F;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAIxG;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,WAAW,CAAC,CAAC,GAC1D,eAAe,GAAG,IAAI,CAiBxB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAE1E"}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session manifest management for cry
|
|
3
|
+
*
|
|
4
|
+
* Sessions track the lifecycle of a worktree from spawn to finish.
|
|
5
|
+
* Manifests are stored in .cry/sessions/<id>.json in the repo root.
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync, mkdirSync, writeFileSync, readFileSync, readdirSync, unlinkSync, } from 'node:fs';
|
|
8
|
+
import path from 'node:path';
|
|
9
|
+
import { randomBytes } from 'node:crypto';
|
|
10
|
+
import { listWorktrees, getRepoRoot, isGitRepo } from './git.js';
|
|
11
|
+
export const SESSIONS_DIR = '.cry/sessions';
|
|
12
|
+
/**
|
|
13
|
+
* Generate a unique session ID
|
|
14
|
+
*/
|
|
15
|
+
function generateSessionId() {
|
|
16
|
+
const timestamp = Date.now().toString(36);
|
|
17
|
+
const random = randomBytes(4).toString('hex');
|
|
18
|
+
return `${timestamp}-${random}`;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Get the sessions directory path for a repo
|
|
22
|
+
*/
|
|
23
|
+
export function getSessionsDir(repoRoot) {
|
|
24
|
+
return path.join(repoRoot, SESSIONS_DIR);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Get the manifest file path for a session
|
|
28
|
+
*/
|
|
29
|
+
export function getManifestPath(repoRoot, sessionId) {
|
|
30
|
+
return path.join(getSessionsDir(repoRoot), `${sessionId}.json`);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Ensure the sessions directory exists
|
|
34
|
+
*/
|
|
35
|
+
export function ensureSessionsDir(repoRoot) {
|
|
36
|
+
const sessionsDir = getSessionsDir(repoRoot);
|
|
37
|
+
if (!existsSync(sessionsDir)) {
|
|
38
|
+
mkdirSync(sessionsDir, { recursive: true });
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Create a new session manifest
|
|
43
|
+
*/
|
|
44
|
+
export function createSessionManifest(options) {
|
|
45
|
+
const id = generateSessionId();
|
|
46
|
+
const manifest = {
|
|
47
|
+
id,
|
|
48
|
+
repoRoot: options.repoRoot,
|
|
49
|
+
createdAt: new Date().toISOString(),
|
|
50
|
+
branch: options.branch,
|
|
51
|
+
baseBranch: options.baseBranch,
|
|
52
|
+
worktreePath: options.worktreePath,
|
|
53
|
+
agent: options.agent,
|
|
54
|
+
taskName: options.taskName,
|
|
55
|
+
};
|
|
56
|
+
// Ensure directory exists and write manifest
|
|
57
|
+
ensureSessionsDir(options.repoRoot);
|
|
58
|
+
const manifestPath = getManifestPath(options.repoRoot, id);
|
|
59
|
+
writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + '\n');
|
|
60
|
+
return manifest;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Read a session manifest by ID
|
|
64
|
+
*/
|
|
65
|
+
export function readSessionManifest(repoRoot, sessionId) {
|
|
66
|
+
const manifestPath = getManifestPath(repoRoot, sessionId);
|
|
67
|
+
if (!existsSync(manifestPath)) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
const content = readFileSync(manifestPath, 'utf-8');
|
|
72
|
+
return JSON.parse(content);
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* List all sessions for a repository
|
|
80
|
+
*/
|
|
81
|
+
export function listSessions(repoRoot) {
|
|
82
|
+
const sessionsDir = getSessionsDir(repoRoot);
|
|
83
|
+
if (!existsSync(sessionsDir)) {
|
|
84
|
+
return [];
|
|
85
|
+
}
|
|
86
|
+
const sessions = [];
|
|
87
|
+
const files = readdirSync(sessionsDir);
|
|
88
|
+
for (const file of files) {
|
|
89
|
+
if (!file.endsWith('.json'))
|
|
90
|
+
continue;
|
|
91
|
+
const sessionId = file.replace('.json', '');
|
|
92
|
+
const manifest = readSessionManifest(repoRoot, sessionId);
|
|
93
|
+
if (manifest) {
|
|
94
|
+
sessions.push(manifest);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// Sort by creation time, newest first
|
|
98
|
+
sessions.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
|
|
99
|
+
return sessions;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Find session for the current working directory
|
|
103
|
+
*
|
|
104
|
+
* Strategy:
|
|
105
|
+
* 1. Check if CWD matches any session's worktreePath exactly
|
|
106
|
+
* 2. Check if CWD is inside any session's worktreePath
|
|
107
|
+
* 3. Fallback: use git worktree list to find current worktree, then match by branch
|
|
108
|
+
*/
|
|
109
|
+
export function findSessionForCwd(cwd) {
|
|
110
|
+
// First, find the repo root for this CWD
|
|
111
|
+
let repoRoot;
|
|
112
|
+
try {
|
|
113
|
+
if (!isGitRepo(cwd)) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
repoRoot = getRepoRoot(cwd);
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
// For worktrees, the "repo root" is the worktree itself
|
|
122
|
+
// We need to find the main repo root where sessions are stored
|
|
123
|
+
const mainRepoRoot = findMainRepoRoot(cwd);
|
|
124
|
+
if (!mainRepoRoot) {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
const sessions = listSessions(mainRepoRoot);
|
|
128
|
+
if (sessions.length === 0) {
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
const normalizedCwd = path.normalize(cwd);
|
|
132
|
+
// Strategy 1: Exact match on worktreePath
|
|
133
|
+
for (const session of sessions) {
|
|
134
|
+
if (path.normalize(session.worktreePath) === normalizedCwd) {
|
|
135
|
+
return session;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// Strategy 2: CWD is inside a session's worktreePath
|
|
139
|
+
for (const session of sessions) {
|
|
140
|
+
const normalizedWt = path.normalize(session.worktreePath);
|
|
141
|
+
if (normalizedCwd.startsWith(normalizedWt + path.sep) || normalizedCwd === normalizedWt) {
|
|
142
|
+
return session;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Strategy 3: Fallback to git worktree matching by branch
|
|
146
|
+
try {
|
|
147
|
+
const worktrees = listWorktrees(cwd);
|
|
148
|
+
const currentWt = worktrees.find(wt => {
|
|
149
|
+
const normalizedWtPath = path.normalize(wt.worktree);
|
|
150
|
+
return normalizedCwd.startsWith(normalizedWtPath + path.sep) || normalizedCwd === normalizedWtPath;
|
|
151
|
+
});
|
|
152
|
+
if (currentWt && currentWt.branch) {
|
|
153
|
+
// Find session by branch name
|
|
154
|
+
for (const session of sessions) {
|
|
155
|
+
if (session.branch === currentWt.branch) {
|
|
156
|
+
return session;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
// Git command failed, give up
|
|
163
|
+
}
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Find the main repository root (where .cry/ lives)
|
|
168
|
+
*
|
|
169
|
+
* For worktrees, we need to trace back to the main repo.
|
|
170
|
+
*/
|
|
171
|
+
export function findMainRepoRoot(cwd) {
|
|
172
|
+
try {
|
|
173
|
+
if (!isGitRepo(cwd)) {
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
// Get the git dir for this worktree
|
|
177
|
+
const repoRoot = getRepoRoot(cwd);
|
|
178
|
+
// Check if this is the main repo (has .cry/ directory or is the commondir)
|
|
179
|
+
if (existsSync(path.join(repoRoot, '.cry'))) {
|
|
180
|
+
return repoRoot;
|
|
181
|
+
}
|
|
182
|
+
// For worktrees, we need to find the main worktree
|
|
183
|
+
// The main repo can be found by checking the worktree list
|
|
184
|
+
const worktrees = listWorktrees(cwd);
|
|
185
|
+
if (worktrees.length > 0) {
|
|
186
|
+
// The first worktree is typically the main one
|
|
187
|
+
const mainWorktree = worktrees[0];
|
|
188
|
+
if (mainWorktree && existsSync(mainWorktree.worktree)) {
|
|
189
|
+
return mainWorktree.worktree;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
// Fallback: just use the repo root we found
|
|
193
|
+
return repoRoot;
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Delete a session by ID
|
|
201
|
+
*/
|
|
202
|
+
export function deleteSession(repoRoot, sessionId) {
|
|
203
|
+
const manifestPath = getManifestPath(repoRoot, sessionId);
|
|
204
|
+
if (!existsSync(manifestPath)) {
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
207
|
+
try {
|
|
208
|
+
unlinkSync(manifestPath);
|
|
209
|
+
return true;
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Find session by branch name
|
|
217
|
+
*/
|
|
218
|
+
export function findSessionByBranch(repoRoot, branch) {
|
|
219
|
+
const sessions = listSessions(repoRoot);
|
|
220
|
+
return sessions.find(s => s.branch === branch) ?? null;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Find session by worktree path
|
|
224
|
+
*/
|
|
225
|
+
export function findSessionByWorktreePath(repoRoot, worktreePath) {
|
|
226
|
+
const sessions = listSessions(repoRoot);
|
|
227
|
+
const normalizedPath = path.normalize(worktreePath);
|
|
228
|
+
return sessions.find(s => path.normalize(s.worktreePath) === normalizedPath) ?? null;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Update an existing session manifest
|
|
232
|
+
*/
|
|
233
|
+
export function updateSessionManifest(repoRoot, sessionId, updates) {
|
|
234
|
+
const manifest = readSessionManifest(repoRoot, sessionId);
|
|
235
|
+
if (!manifest) {
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
238
|
+
const updated = {
|
|
239
|
+
...manifest,
|
|
240
|
+
...updates,
|
|
241
|
+
id: manifest.id,
|
|
242
|
+
createdAt: manifest.createdAt,
|
|
243
|
+
};
|
|
244
|
+
const manifestPath = getManifestPath(repoRoot, sessionId);
|
|
245
|
+
writeFileSync(manifestPath, JSON.stringify(updated, null, 2) + '\n');
|
|
246
|
+
return updated;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Check if a worktree path has an associated session
|
|
250
|
+
*/
|
|
251
|
+
export function hasSession(repoRoot, worktreePath) {
|
|
252
|
+
return findSessionByWorktreePath(repoRoot, worktreePath) !== null;
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/lib/session.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -12,8 +12,10 @@ export interface CryConfig {
|
|
|
12
12
|
hooks?: {
|
|
13
13
|
postCreate?: string[];
|
|
14
14
|
};
|
|
15
|
-
/** Default agent command */
|
|
15
|
+
/** Default agent command (e.g. 'claude') */
|
|
16
16
|
agentCommand?: string;
|
|
17
|
+
/** Default editor command (e.g. 'code' for VS Code) */
|
|
18
|
+
editorCommand?: string;
|
|
17
19
|
}
|
|
18
20
|
export interface CryLocalConfig {
|
|
19
21
|
/** Machine-specific base directory override */
|
|
@@ -26,6 +28,8 @@ export interface CryLocalConfig {
|
|
|
26
28
|
};
|
|
27
29
|
/** Override agent command */
|
|
28
30
|
agentCommand?: string;
|
|
31
|
+
/** Override editor command */
|
|
32
|
+
editorCommand?: string;
|
|
29
33
|
}
|
|
30
34
|
export interface MergedConfig {
|
|
31
35
|
worktreeBaseDir?: string;
|
|
@@ -35,6 +39,7 @@ export interface MergedConfig {
|
|
|
35
39
|
postCreate: string[];
|
|
36
40
|
};
|
|
37
41
|
agentCommand: string;
|
|
42
|
+
editorCommand: string;
|
|
38
43
|
}
|
|
39
44
|
export interface WorktreeInfo {
|
|
40
45
|
worktree: string;
|
package/dist/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,SAAS;IACxB,uEAAuE;IACvE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wCAAwC;IACxC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;IACzC,oFAAoF;IACpF,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,oBAAoB;IACpB,KAAK,CAAC,EAAE;QACN,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;IACF,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,SAAS;IACxB,uEAAuE;IACvE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wCAAwC;IACxC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;IACzC,oFAAoF;IACpF,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,oBAAoB;IACpB,KAAK,CAAC,EAAE;QACN,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;IACF,4CAA4C;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,wCAAwC;IACxC,KAAK,CAAC,EAAE;QACN,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;IACF,6BAA6B;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;IACzC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC;IACF,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAErD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CAC3B"}
|
package/package.json
CHANGED