@cleocode/paths 2026.9.16 → 2026.9.17
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/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/portable-project-id.d.ts +103 -0
- package/dist/portable-project-id.d.ts.map +1 -0
- package/dist/portable-project-id.js +134 -0
- package/dist/portable-project-id.js.map +1 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* {@link resolveWorktreeRootForHash}, {@link resolveTaskWorktreePath},
|
|
16
16
|
* {@link getCleoWorktreesRoot}, {@link resolveWorktreeIndexPath}
|
|
17
17
|
* - {@link isAbsolutePath} — cross-platform abs-path check
|
|
18
|
+
* - Portable identity: {@link readPortableProjectId} (tracked `.cleo/project-id`, T12325)
|
|
18
19
|
*
|
|
19
20
|
* @packageDocumentation
|
|
20
21
|
* @task T1883
|
|
@@ -24,5 +25,6 @@ export { isAbsolutePath } from './abs-path.js';
|
|
|
24
25
|
export { _resetCleoPlatformPathsCache, canonicalizePath, computeCanonicalProjectId, getCanonicalTemplatesTildePath, getCleoHome, getCleoPlatformPaths, getCleoSystemInfo, getCleoTemplatesTildePath, legacyProjectId, type ResolvedProject, resolveCanonicalCleoDir, resolveLegacyCleoDir, resolveProjectByCwd, } from './cleo-paths.js';
|
|
25
26
|
export { type EnforceOptions, enforceNodeVersion, evaluateNodeVersion, FALLBACK_MIN_NODE, getRequiredNodeVersion, type NodeManager, type NodeVersionVerdict, parseSemver, type Semver, type UpgradeHint, } from './node-version-gate.js';
|
|
26
27
|
export { createPlatformPathsResolver, type PlatformPaths, type PlatformPathsResolver, type SystemInfo, } from './platform-paths.js';
|
|
28
|
+
export { formatPortableProjectId, isValidPortableProjectId, PORTABLE_PROJECT_ID_FILE, type PortableProjectIdRead, parsePortableProjectId, portableProjectIdPath, readPortableProjectId, } from './portable-project-id.js';
|
|
27
29
|
export { computeProjectHash, getCleoWorktreesRoot, resolveTaskWorktreePath, resolveWorktreeIndexPath, resolveWorktreeRootForHash, } from './worktree-paths.js';
|
|
28
30
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACL,4BAA4B,EAC5B,gBAAgB,EAChB,yBAAyB,EACzB,8BAA8B,EAC9B,WAAW,EACX,oBAAoB,EACpB,iBAAiB,EACjB,yBAAyB,EACzB,eAAe,EACf,KAAK,eAAe,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,KAAK,cAAc,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,WAAW,EACX,KAAK,MAAM,EACX,KAAK,WAAW,GACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,2BAA2B,EAC3B,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,UAAU,GAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,EACxB,KAAK,qBAAqB,EAC1B,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* {@link resolveWorktreeRootForHash}, {@link resolveTaskWorktreePath},
|
|
16
16
|
* {@link getCleoWorktreesRoot}, {@link resolveWorktreeIndexPath}
|
|
17
17
|
* - {@link isAbsolutePath} — cross-platform abs-path check
|
|
18
|
+
* - Portable identity: {@link readPortableProjectId} (tracked `.cleo/project-id`, T12325)
|
|
18
19
|
*
|
|
19
20
|
* @packageDocumentation
|
|
20
21
|
* @task T1883
|
|
@@ -24,5 +25,6 @@ export { isAbsolutePath } from './abs-path.js';
|
|
|
24
25
|
export { _resetCleoPlatformPathsCache, canonicalizePath, computeCanonicalProjectId, getCanonicalTemplatesTildePath, getCleoHome, getCleoPlatformPaths, getCleoSystemInfo, getCleoTemplatesTildePath, legacyProjectId, resolveCanonicalCleoDir, resolveLegacyCleoDir, resolveProjectByCwd, } from './cleo-paths.js';
|
|
25
26
|
export { enforceNodeVersion, evaluateNodeVersion, FALLBACK_MIN_NODE, getRequiredNodeVersion, parseSemver, } from './node-version-gate.js';
|
|
26
27
|
export { createPlatformPathsResolver, } from './platform-paths.js';
|
|
28
|
+
export { formatPortableProjectId, isValidPortableProjectId, PORTABLE_PROJECT_ID_FILE, parsePortableProjectId, portableProjectIdPath, readPortableProjectId, } from './portable-project-id.js';
|
|
27
29
|
export { computeProjectHash, getCleoWorktreesRoot, resolveTaskWorktreePath, resolveWorktreeIndexPath, resolveWorktreeRootForHash, } from './worktree-paths.js';
|
|
28
30
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACL,4BAA4B,EAC5B,gBAAgB,EAChB,yBAAyB,EACzB,8BAA8B,EAC9B,WAAW,EACX,oBAAoB,EACpB,iBAAiB,EACjB,yBAAyB,EACzB,eAAe,EAEf,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEL,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EAGtB,WAAW,GAGZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,2BAA2B,GAI5B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,EAExB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The tracked, write-once portable project identity (`.cleo/project-id`).
|
|
3
|
+
*
|
|
4
|
+
* Every other project identifier CLEO computes hashes the absolute path, and
|
|
5
|
+
* the random `projectId` in `.cleo/project-info.json` is gitignored (ADR-013
|
|
6
|
+
* §9), so a fresh clone used to mint a brand-new identity at `cleo init`. This
|
|
7
|
+
* file is the one identifier that travels with the repository: CLEO writes it
|
|
8
|
+
* once, commits nothing else beside it, and never rewrites it. Because nothing
|
|
9
|
+
* ever writes it a second time, git has nothing to overwrite — the geometry
|
|
10
|
+
* that made ADR-013 untrack the mutable state files does not apply
|
|
11
|
+
* (ADR-094, T12325).
|
|
12
|
+
*
|
|
13
|
+
* This module only READS. Writing (create-only) and re-linking live in
|
|
14
|
+
* `@cleocode/core` (`scaffold/project-identity.ts`).
|
|
15
|
+
*
|
|
16
|
+
* @packageDocumentation
|
|
17
|
+
* @task T12325
|
|
18
|
+
*/
|
|
19
|
+
/** Basename of the tracked portable identity file inside a project's `.cleo/`. */
|
|
20
|
+
export declare const PORTABLE_PROJECT_ID_FILE = "project-id";
|
|
21
|
+
/**
|
|
22
|
+
* Outcome of reading `.cleo/project-id`.
|
|
23
|
+
*
|
|
24
|
+
* `invalid` is distinct from `absent` on purpose: an unreadable or malformed
|
|
25
|
+
* identity file is a diagnostic to report, never a reason to mint a new id.
|
|
26
|
+
*
|
|
27
|
+
* @public
|
|
28
|
+
*/
|
|
29
|
+
export type PortableProjectIdRead = {
|
|
30
|
+
readonly status: 'absent';
|
|
31
|
+
} | {
|
|
32
|
+
readonly status: 'valid';
|
|
33
|
+
readonly projectId: string;
|
|
34
|
+
} | {
|
|
35
|
+
readonly status: 'invalid';
|
|
36
|
+
readonly reason: string;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Whether a string is an acceptable portable project id.
|
|
40
|
+
*
|
|
41
|
+
* @param projectId - Candidate identifier.
|
|
42
|
+
* @returns `true` when the id matches the accepted shape.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```ts
|
|
46
|
+
* isValidPortableProjectId('c78d09c3a8ee'); // true
|
|
47
|
+
* isValidPortableProjectId('../etc'); // false
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* @public
|
|
51
|
+
*/
|
|
52
|
+
export declare function isValidPortableProjectId(projectId: string): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Absolute path of the portable identity file for a project root.
|
|
55
|
+
*
|
|
56
|
+
* @param projectRoot - Absolute project root (the directory containing `.cleo/`).
|
|
57
|
+
* @returns `<projectRoot>/.cleo/project-id`.
|
|
58
|
+
*
|
|
59
|
+
* @public
|
|
60
|
+
*/
|
|
61
|
+
export declare function portableProjectIdPath(projectRoot: string): string;
|
|
62
|
+
/**
|
|
63
|
+
* Render the file body CLEO writes for a portable id.
|
|
64
|
+
*
|
|
65
|
+
* Comment lines (`#`) are ignored by {@link parsePortableProjectId}, so the
|
|
66
|
+
* header can tell a human reader not to edit the file without being part of
|
|
67
|
+
* the identity.
|
|
68
|
+
*
|
|
69
|
+
* @param projectId - A valid portable id.
|
|
70
|
+
* @returns The exact bytes to write.
|
|
71
|
+
*
|
|
72
|
+
* @public
|
|
73
|
+
*/
|
|
74
|
+
export declare function formatPortableProjectId(projectId: string): string;
|
|
75
|
+
/**
|
|
76
|
+
* Parse the body of a portable identity file.
|
|
77
|
+
*
|
|
78
|
+
* Blank lines and `#` comment lines are ignored; exactly one remaining line
|
|
79
|
+
* must hold a valid id.
|
|
80
|
+
*
|
|
81
|
+
* @param content - Raw file content.
|
|
82
|
+
* @returns The parsed read outcome (`valid` or `invalid`).
|
|
83
|
+
*
|
|
84
|
+
* @public
|
|
85
|
+
*/
|
|
86
|
+
export declare function parsePortableProjectId(content: string): PortableProjectIdRead;
|
|
87
|
+
/**
|
|
88
|
+
* Read the tracked portable identity of a project, synchronously.
|
|
89
|
+
*
|
|
90
|
+
* @param projectRoot - Absolute project root (the directory containing `.cleo/`).
|
|
91
|
+
* @returns `absent` when no file exists, `valid` with the id, or `invalid`
|
|
92
|
+
* with a reason when the file exists but cannot be used.
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* ```ts
|
|
96
|
+
* const read = readPortableProjectId('/repo');
|
|
97
|
+
* if (read.status === 'valid') console.log(read.projectId);
|
|
98
|
+
* ```
|
|
99
|
+
*
|
|
100
|
+
* @public
|
|
101
|
+
*/
|
|
102
|
+
export declare function readPortableProjectId(projectRoot: string): PortableProjectIdRead;
|
|
103
|
+
//# sourceMappingURL=portable-project-id.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portable-project-id.d.ts","sourceRoot":"","sources":["../src/portable-project-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,kFAAkF;AAClF,eAAO,MAAM,wBAAwB,eAAe,CAAC;AASrD;;;;;;;GAOG;AACH,MAAM,MAAM,qBAAqB,GAC7B;IAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACxD;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEnE;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAOjE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB,CAgB7E;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,qBAAqB,CAchF"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The tracked, write-once portable project identity (`.cleo/project-id`).
|
|
3
|
+
*
|
|
4
|
+
* Every other project identifier CLEO computes hashes the absolute path, and
|
|
5
|
+
* the random `projectId` in `.cleo/project-info.json` is gitignored (ADR-013
|
|
6
|
+
* §9), so a fresh clone used to mint a brand-new identity at `cleo init`. This
|
|
7
|
+
* file is the one identifier that travels with the repository: CLEO writes it
|
|
8
|
+
* once, commits nothing else beside it, and never rewrites it. Because nothing
|
|
9
|
+
* ever writes it a second time, git has nothing to overwrite — the geometry
|
|
10
|
+
* that made ADR-013 untrack the mutable state files does not apply
|
|
11
|
+
* (ADR-094, T12325).
|
|
12
|
+
*
|
|
13
|
+
* This module only READS. Writing (create-only) and re-linking live in
|
|
14
|
+
* `@cleocode/core` (`scaffold/project-identity.ts`).
|
|
15
|
+
*
|
|
16
|
+
* @packageDocumentation
|
|
17
|
+
* @task T12325
|
|
18
|
+
*/
|
|
19
|
+
import { readFileSync } from 'node:fs';
|
|
20
|
+
import { join } from 'node:path';
|
|
21
|
+
/** Basename of the tracked portable identity file inside a project's `.cleo/`. */
|
|
22
|
+
export const PORTABLE_PROJECT_ID_FILE = 'project-id';
|
|
23
|
+
/**
|
|
24
|
+
* Accepted identity shape: every id CLEO has ever minted (UUIDv4, 12-hex,
|
|
25
|
+
* the 29-char legacy form) fits, and nothing that could smuggle a path
|
|
26
|
+
* separator, whitespace or a second line does.
|
|
27
|
+
*/
|
|
28
|
+
const PORTABLE_PROJECT_ID_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/;
|
|
29
|
+
/**
|
|
30
|
+
* Whether a string is an acceptable portable project id.
|
|
31
|
+
*
|
|
32
|
+
* @param projectId - Candidate identifier.
|
|
33
|
+
* @returns `true` when the id matches the accepted shape.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```ts
|
|
37
|
+
* isValidPortableProjectId('c78d09c3a8ee'); // true
|
|
38
|
+
* isValidPortableProjectId('../etc'); // false
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* @public
|
|
42
|
+
*/
|
|
43
|
+
export function isValidPortableProjectId(projectId) {
|
|
44
|
+
return PORTABLE_PROJECT_ID_PATTERN.test(projectId);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Absolute path of the portable identity file for a project root.
|
|
48
|
+
*
|
|
49
|
+
* @param projectRoot - Absolute project root (the directory containing `.cleo/`).
|
|
50
|
+
* @returns `<projectRoot>/.cleo/project-id`.
|
|
51
|
+
*
|
|
52
|
+
* @public
|
|
53
|
+
*/
|
|
54
|
+
export function portableProjectIdPath(projectRoot) {
|
|
55
|
+
return join(projectRoot, '.cleo', PORTABLE_PROJECT_ID_FILE);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Render the file body CLEO writes for a portable id.
|
|
59
|
+
*
|
|
60
|
+
* Comment lines (`#`) are ignored by {@link parsePortableProjectId}, so the
|
|
61
|
+
* header can tell a human reader not to edit the file without being part of
|
|
62
|
+
* the identity.
|
|
63
|
+
*
|
|
64
|
+
* @param projectId - A valid portable id.
|
|
65
|
+
* @returns The exact bytes to write.
|
|
66
|
+
*
|
|
67
|
+
* @public
|
|
68
|
+
*/
|
|
69
|
+
export function formatPortableProjectId(projectId) {
|
|
70
|
+
return ('# CLEO portable project identity (write-once; ADR-094, T12325).\n' +
|
|
71
|
+
'# Commit this file. Never edit or regenerate it: every checkout, clone and\n' +
|
|
72
|
+
'# device of this project resolves to the id below.\n' +
|
|
73
|
+
`${projectId}\n`);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Parse the body of a portable identity file.
|
|
77
|
+
*
|
|
78
|
+
* Blank lines and `#` comment lines are ignored; exactly one remaining line
|
|
79
|
+
* must hold a valid id.
|
|
80
|
+
*
|
|
81
|
+
* @param content - Raw file content.
|
|
82
|
+
* @returns The parsed read outcome (`valid` or `invalid`).
|
|
83
|
+
*
|
|
84
|
+
* @public
|
|
85
|
+
*/
|
|
86
|
+
export function parsePortableProjectId(content) {
|
|
87
|
+
const lines = content
|
|
88
|
+
.split(/\r?\n/)
|
|
89
|
+
.map((line) => line.trim())
|
|
90
|
+
.filter((line) => line.length > 0 && !line.startsWith('#'));
|
|
91
|
+
if (lines.length !== 1) {
|
|
92
|
+
return {
|
|
93
|
+
status: 'invalid',
|
|
94
|
+
reason: `expected exactly one identity line, found ${lines.length}`,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
const projectId = lines[0] ?? '';
|
|
98
|
+
if (!isValidPortableProjectId(projectId)) {
|
|
99
|
+
return { status: 'invalid', reason: `malformed identity '${projectId.slice(0, 64)}'` };
|
|
100
|
+
}
|
|
101
|
+
return { status: 'valid', projectId };
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Read the tracked portable identity of a project, synchronously.
|
|
105
|
+
*
|
|
106
|
+
* @param projectRoot - Absolute project root (the directory containing `.cleo/`).
|
|
107
|
+
* @returns `absent` when no file exists, `valid` with the id, or `invalid`
|
|
108
|
+
* with a reason when the file exists but cannot be used.
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* ```ts
|
|
112
|
+
* const read = readPortableProjectId('/repo');
|
|
113
|
+
* if (read.status === 'valid') console.log(read.projectId);
|
|
114
|
+
* ```
|
|
115
|
+
*
|
|
116
|
+
* @public
|
|
117
|
+
*/
|
|
118
|
+
export function readPortableProjectId(projectRoot) {
|
|
119
|
+
let content;
|
|
120
|
+
try {
|
|
121
|
+
content = readFileSync(portableProjectIdPath(projectRoot), 'utf-8');
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
|
|
125
|
+
return { status: 'absent' };
|
|
126
|
+
}
|
|
127
|
+
return {
|
|
128
|
+
status: 'invalid',
|
|
129
|
+
reason: `unreadable: ${error instanceof Error ? error.message : String(error)}`,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
return parsePortableProjectId(content);
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=portable-project-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portable-project-id.js","sourceRoot":"","sources":["../src/portable-project-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,kFAAkF;AAClF,MAAM,CAAC,MAAM,wBAAwB,GAAG,YAAY,CAAC;AAErD;;;;GAIG;AACH,MAAM,2BAA2B,GAAG,oCAAoC,CAAC;AAezE;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,wBAAwB,CAAC,SAAiB;IACxD,OAAO,2BAA2B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACrD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,WAAmB;IACvD,OAAO,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,wBAAwB,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,uBAAuB,CAAC,SAAiB;IACvD,OAAO,CACL,mEAAmE;QACnE,8EAA8E;QAC9E,sDAAsD;QACtD,GAAG,SAAS,IAAI,CACjB,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,MAAM,KAAK,GAAG,OAAO;SAClB,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,6CAA6C,KAAK,CAAC,MAAM,EAAE;SACpE,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACjC,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,EAAE,CAAC;QACzC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,uBAAuB,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;IACzF,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AACxC,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,qBAAqB,CAAC,WAAmB;IACvD,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,YAAY,CAAC,qBAAqB,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACzE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,eAAe,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SAChF,CAAC;IACJ,CAAC;IACD,OAAO,sBAAsB,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cleocode/paths",
|
|
3
|
-
"version": "2026.9.
|
|
3
|
+
"version": "2026.9.17",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "CLEO XDG/env-paths SSoT — createPlatformPathsResolver factory, cleo-bound platform paths, project hash + worktree root primitives, isAbsolutePath. Zero-dep leaf package consumed by core, worktree, brain, adapters, and caamp.",
|