@cleocode/core 2026.4.11 → 2026.4.12
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/codebase-map/analyzers/architecture.d.ts.map +1 -1
- package/dist/codebase-map/analyzers/architecture.js +0 -1
- package/dist/codebase-map/analyzers/architecture.js.map +1 -1
- package/dist/conduit/local-transport.d.ts +18 -8
- package/dist/conduit/local-transport.d.ts.map +1 -1
- package/dist/conduit/local-transport.js +23 -13
- package/dist/conduit/local-transport.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +0 -1
- package/dist/config.js.map +1 -1
- package/dist/errors.d.ts +19 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +6 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.js +175 -68950
- package/dist/index.js.map +1 -7
- package/dist/init.d.ts +1 -2
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +1 -2
- package/dist/init.js.map +1 -1
- package/dist/internal.d.ts +8 -3
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +13 -6
- package/dist/internal.js.map +1 -1
- package/dist/memory/learnings.d.ts +2 -2
- package/dist/memory/patterns.d.ts +6 -6
- package/dist/output.d.ts +32 -11
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js +67 -67
- package/dist/output.js.map +1 -1
- package/dist/paths.js +80 -14
- package/dist/paths.js.map +1 -1
- package/dist/skills/dynamic-skill-generator.d.ts +0 -2
- package/dist/skills/dynamic-skill-generator.d.ts.map +1 -1
- package/dist/skills/dynamic-skill-generator.js.map +1 -1
- package/dist/store/agent-registry-accessor.d.ts +203 -12
- package/dist/store/agent-registry-accessor.d.ts.map +1 -1
- package/dist/store/agent-registry-accessor.js +618 -100
- package/dist/store/agent-registry-accessor.js.map +1 -1
- package/dist/store/api-key-kdf.d.ts +73 -0
- package/dist/store/api-key-kdf.d.ts.map +1 -0
- package/dist/store/api-key-kdf.js +84 -0
- package/dist/store/api-key-kdf.js.map +1 -0
- package/dist/store/cleanup-legacy.js +171 -0
- package/dist/store/cleanup-legacy.js.map +1 -0
- package/dist/store/conduit-sqlite.d.ts +184 -0
- package/dist/store/conduit-sqlite.d.ts.map +1 -0
- package/dist/store/conduit-sqlite.js +570 -0
- package/dist/store/conduit-sqlite.js.map +1 -0
- package/dist/store/global-salt.d.ts +78 -0
- package/dist/store/global-salt.d.ts.map +1 -0
- package/dist/store/global-salt.js +147 -0
- package/dist/store/global-salt.js.map +1 -0
- package/dist/store/migrate-signaldock-to-conduit.d.ts +81 -0
- package/dist/store/migrate-signaldock-to-conduit.d.ts.map +1 -0
- package/dist/store/migrate-signaldock-to-conduit.js +555 -0
- package/dist/store/migrate-signaldock-to-conduit.js.map +1 -0
- package/dist/store/nexus-sqlite.js +28 -3
- package/dist/store/nexus-sqlite.js.map +1 -1
- package/dist/store/signaldock-sqlite.d.ts +122 -19
- package/dist/store/signaldock-sqlite.d.ts.map +1 -1
- package/dist/store/signaldock-sqlite.js +401 -251
- package/dist/store/signaldock-sqlite.js.map +1 -1
- package/dist/store/sqlite-backup.js +122 -4
- package/dist/store/sqlite-backup.js.map +1 -1
- package/dist/system/backup.d.ts +0 -26
- package/dist/system/backup.d.ts.map +1 -1
- package/dist/system/runtime.d.ts +0 -2
- package/dist/system/runtime.d.ts.map +1 -1
- package/dist/system/runtime.js +3 -3
- package/dist/system/runtime.js.map +1 -1
- package/dist/tasks/add.d.ts +1 -1
- package/dist/tasks/add.d.ts.map +1 -1
- package/dist/tasks/add.js +98 -23
- package/dist/tasks/add.js.map +1 -1
- package/dist/tasks/complete.d.ts.map +1 -1
- package/dist/tasks/complete.js +4 -1
- package/dist/tasks/complete.js.map +1 -1
- package/dist/tasks/find.d.ts.map +1 -1
- package/dist/tasks/find.js +4 -1
- package/dist/tasks/find.js.map +1 -1
- package/dist/tasks/labels.d.ts.map +1 -1
- package/dist/tasks/labels.js +4 -1
- package/dist/tasks/labels.js.map +1 -1
- package/dist/tasks/relates.d.ts.map +1 -1
- package/dist/tasks/relates.js +16 -4
- package/dist/tasks/relates.js.map +1 -1
- package/dist/tasks/show.d.ts.map +1 -1
- package/dist/tasks/show.js +4 -1
- package/dist/tasks/show.js.map +1 -1
- package/dist/tasks/update.d.ts.map +1 -1
- package/dist/tasks/update.js +32 -6
- package/dist/tasks/update.js.map +1 -1
- package/dist/validation/engine.d.ts.map +1 -1
- package/dist/validation/engine.js +16 -4
- package/dist/validation/engine.js.map +1 -1
- package/dist/validation/param-utils.d.ts +5 -3
- package/dist/validation/param-utils.d.ts.map +1 -1
- package/dist/validation/param-utils.js +8 -6
- package/dist/validation/param-utils.js.map +1 -1
- package/dist/validation/protocols/_shared.d.ts.map +1 -1
- package/dist/validation/protocols/_shared.js +13 -6
- package/dist/validation/protocols/_shared.js.map +1 -1
- package/package.json +7 -7
- package/src/adapters/__tests__/manager.test.ts +0 -1
- package/src/codebase-map/analyzers/architecture.ts +0 -1
- package/src/conduit/__tests__/local-credential-flow.test.ts +20 -18
- package/src/conduit/__tests__/local-transport.test.ts +14 -12
- package/src/conduit/local-transport.ts +23 -13
- package/src/config.ts +0 -1
- package/src/errors.ts +24 -0
- package/src/hooks/handlers/__tests__/hook-automation-e2e.test.ts +2 -5
- package/src/init.ts +1 -2
- package/src/internal.ts +49 -2
- package/src/lifecycle/cant/lifecycle-rcasd.cant +133 -0
- package/src/memory/__tests__/engine-compat.test.ts +2 -2
- package/src/memory/__tests__/pipeline-manifest-sqlite.test.ts +4 -4
- package/src/observability/__tests__/index.test.ts +4 -4
- package/src/observability/__tests__/log-filter.test.ts +4 -4
- package/src/output.ts +73 -75
- package/src/sessions/__tests__/session-grade.integration.test.ts +1 -1
- package/src/sessions/__tests__/session-grade.test.ts +2 -2
- package/src/skills/__tests__/dynamic-skill-generator.test.ts +0 -2
- package/src/skills/dynamic-skill-generator.ts +0 -2
- package/src/store/__tests__/agent-registry-accessor.test.ts +807 -0
- package/src/store/__tests__/api-key-kdf.test.ts +113 -0
- package/src/store/__tests__/conduit-sqlite.test.ts +413 -0
- package/src/store/__tests__/global-salt.test.ts +195 -0
- package/src/store/__tests__/migrate-signaldock-to-conduit.test.ts +715 -0
- package/src/store/__tests__/signaldock-sqlite.test.ts +652 -0
- package/src/store/__tests__/sqlite-backup-global.test.ts +307 -3
- package/src/store/__tests__/sqlite-backup.test.ts +5 -1
- package/src/store/__tests__/t310-integration.test.ts +1150 -0
- package/src/store/agent-registry-accessor.ts +847 -140
- package/src/store/api-key-kdf.ts +104 -0
- package/src/store/conduit-sqlite.ts +655 -0
- package/src/store/global-salt.ts +175 -0
- package/src/store/migrate-signaldock-to-conduit.ts +669 -0
- package/src/store/signaldock-sqlite.ts +431 -254
- package/src/store/sqlite-backup.ts +185 -10
- package/src/system/backup.ts +2 -62
- package/src/system/runtime.ts +4 -6
- package/src/tasks/__tests__/error-hints.test.ts +256 -0
- package/src/tasks/add.ts +99 -9
- package/src/tasks/complete.ts +4 -1
- package/src/tasks/find.ts +4 -1
- package/src/tasks/labels.ts +4 -1
- package/src/tasks/relates.ts +16 -4
- package/src/tasks/show.ts +4 -1
- package/src/tasks/update.ts +32 -3
- package/src/validation/__tests__/error-hints.test.ts +97 -0
- package/src/validation/engine.ts +16 -1
- package/src/validation/param-utils.ts +10 -7
- package/src/validation/protocols/_shared.ts +14 -6
- package/src/validation/protocols/cant/architecture-decision.cant +80 -0
- package/src/validation/protocols/cant/artifact-publish.cant +95 -0
- package/src/validation/protocols/cant/consensus.cant +74 -0
- package/src/validation/protocols/cant/contribution.cant +82 -0
- package/src/validation/protocols/cant/decomposition.cant +92 -0
- package/src/validation/protocols/cant/implementation.cant +67 -0
- package/src/validation/protocols/cant/provenance.cant +88 -0
- package/src/validation/protocols/cant/release.cant +96 -0
- package/src/validation/protocols/cant/research.cant +66 -0
- package/src/validation/protocols/cant/specification.cant +67 -0
- package/src/validation/protocols/cant/testing.cant +88 -0
- package/src/validation/protocols/cant/validation.cant +65 -0
- package/src/validation/protocols/protocols-markdown/decomposition.md +0 -4
- package/templates/config.template.json +0 -1
- package/templates/global-config.template.json +0 -1
package/dist/output.js
CHANGED
|
@@ -4,13 +4,19 @@
|
|
|
4
4
|
* LAFS (LLM-Agent-First Schema) ensures all CLI output is
|
|
5
5
|
* machine-parseable JSON by default, with optional human-readable modes.
|
|
6
6
|
*
|
|
7
|
-
* All envelopes
|
|
8
|
-
*
|
|
7
|
+
* All envelopes use the canonical CLI envelope shape:
|
|
8
|
+
* { success, data?, error?, meta, page? }
|
|
9
|
+
*
|
|
10
|
+
* This replaces the three legacy shapes:
|
|
11
|
+
* {ok, r, _m} (minimal MVI — removed)
|
|
12
|
+
* {$schema, _meta, success, result} (full LAFS — now uses meta/data)
|
|
13
|
+
* {success, result} (observe command — now uses data)
|
|
9
14
|
*
|
|
10
15
|
* Types are re-exported from the canonical source in src/types/lafs.ts.
|
|
11
16
|
*
|
|
12
17
|
* @epic T4663
|
|
13
18
|
* @task T4672
|
|
19
|
+
* @task T338 (ADR-039 envelope unification)
|
|
14
20
|
*/
|
|
15
21
|
import { randomUUID } from 'node:crypto';
|
|
16
22
|
import { CleoError } from './errors.js';
|
|
@@ -47,110 +53,104 @@ function drainWarnings() {
|
|
|
47
53
|
return drained;
|
|
48
54
|
}
|
|
49
55
|
/**
|
|
50
|
-
* Create a
|
|
56
|
+
* Create a canonical `CliMeta` object for CLI envelopes.
|
|
57
|
+
*
|
|
51
58
|
* Includes sessionId (T4702) and warnings (T4669) when present.
|
|
59
|
+
* Drains the pending warnings queue so they are included in the current envelope.
|
|
60
|
+
*
|
|
61
|
+
* @param operation - Dot-delimited operation identifier (e.g. `"tasks.show"`).
|
|
62
|
+
* @param duration_ms - Wall-clock duration in milliseconds. Defaults to 0.
|
|
63
|
+
* @returns A fully populated {@link CliMeta} object.
|
|
52
64
|
*
|
|
53
65
|
* @task T4700
|
|
54
66
|
* @task T4702
|
|
67
|
+
* @task T338
|
|
55
68
|
* @epic T4663
|
|
56
69
|
*/
|
|
57
|
-
function createCliMeta(operation,
|
|
70
|
+
function createCliMeta(operation, duration_ms = 0) {
|
|
58
71
|
const warnings = drainWarnings();
|
|
59
72
|
const meta = {
|
|
60
|
-
specVersion: '1.2.3',
|
|
61
|
-
schemaVersion: '2026.2.1',
|
|
62
|
-
timestamp: new Date().toISOString(),
|
|
63
73
|
operation,
|
|
64
74
|
requestId: randomUUID(),
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
mvi,
|
|
68
|
-
contextVersion: 1,
|
|
69
|
-
...(warnings && { warnings }),
|
|
75
|
+
duration_ms,
|
|
76
|
+
timestamp: new Date().toISOString(),
|
|
70
77
|
};
|
|
71
78
|
const sessionId = getCurrentSessionId();
|
|
72
79
|
if (sessionId) {
|
|
73
|
-
meta
|
|
80
|
+
meta['sessionId'] = sessionId;
|
|
81
|
+
}
|
|
82
|
+
if (warnings && warnings.length > 0) {
|
|
83
|
+
meta['warnings'] = warnings;
|
|
74
84
|
}
|
|
75
85
|
return meta;
|
|
76
86
|
}
|
|
77
87
|
/**
|
|
78
|
-
* Format a successful result as a
|
|
88
|
+
* Format a successful result as a canonical CLI envelope.
|
|
89
|
+
*
|
|
90
|
+
* Produces the unified `CliEnvelope<T>` shape: `{success, data, meta, page?}`.
|
|
91
|
+
* This replaces all three legacy shapes (minimal `{ok,r,_m}`, full `{$schema,_meta,result}`,
|
|
92
|
+
* and observe `{success,result}`) with a single canonical format (ADR-039).
|
|
79
93
|
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
94
|
+
* The `mvi` option in `FormatOptions` is accepted for backward compatibility but
|
|
95
|
+
* no longer affects the envelope shape — the canonical shape is always emitted.
|
|
96
|
+
*
|
|
97
|
+
* @param data - The operation result payload.
|
|
98
|
+
* @param message - Optional success message (attached to `meta.message`).
|
|
99
|
+
* @param operationOrOpts - Operation name string or `FormatOptions` object.
|
|
100
|
+
* @returns JSON-serialized `CliEnvelope<T>`.
|
|
83
101
|
*
|
|
84
102
|
* @task T4672
|
|
85
103
|
* @task T4668
|
|
86
104
|
* @task T4670
|
|
105
|
+
* @task T338
|
|
87
106
|
* @epic T4663
|
|
88
107
|
*/
|
|
89
108
|
export function formatSuccess(data, message, operationOrOpts) {
|
|
90
109
|
const opts = typeof operationOrOpts === 'string' ? { operation: operationOrOpts } : (operationOrOpts ?? {});
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const mviLevel = opts.mvi ?? 'minimal';
|
|
94
|
-
const meta = createCliMeta(opts.operation ?? 'cli.output', mviLevel);
|
|
95
|
-
const fullEnvelope = {
|
|
96
|
-
$schema: 'https://lafs.dev/schemas/v1/envelope.schema.json',
|
|
97
|
-
_meta: meta,
|
|
110
|
+
const meta = createCliMeta(opts.operation ?? 'cli.output');
|
|
111
|
+
const envelope = {
|
|
98
112
|
success: true,
|
|
99
|
-
|
|
100
|
-
|
|
113
|
+
data,
|
|
114
|
+
meta: message ? { ...meta, message } : meta,
|
|
101
115
|
...(opts.page && { page: opts.page }),
|
|
102
|
-
...(opts.extensions &&
|
|
103
|
-
Object.keys(opts.extensions).length > 0 && { _extensions: opts.extensions }),
|
|
104
116
|
};
|
|
105
|
-
|
|
106
|
-
// This is the backward-compatible path used by --human and conformance tests.
|
|
107
|
-
if (mviLevel === 'full') {
|
|
108
|
-
return JSON.stringify(fullEnvelope);
|
|
109
|
-
}
|
|
110
|
-
// Apply MVI projection — strips envelope to the declared level.
|
|
111
|
-
// 'minimal': { success, result, _meta: { requestId, contextVersion } }
|
|
112
|
-
// 'standard': + $schema, timestamp, operation, mvi
|
|
113
|
-
if (mviLevel === 'minimal') {
|
|
114
|
-
// Inline minimal projection — avoids dynamic import overhead.
|
|
115
|
-
// Matches projectMetaMinimal() from @cleocode/lafs/mviProjection.ts
|
|
116
|
-
const minimalMeta = {
|
|
117
|
-
op: meta.operation,
|
|
118
|
-
rid: meta.requestId,
|
|
119
|
-
};
|
|
120
|
-
if (meta.sessionId)
|
|
121
|
-
minimalMeta.sid = meta.sessionId;
|
|
122
|
-
if (meta.warnings?.length)
|
|
123
|
-
minimalMeta.w = meta.warnings;
|
|
124
|
-
const minimal = {
|
|
125
|
-
ok: true,
|
|
126
|
-
r: data,
|
|
127
|
-
_m: minimalMeta,
|
|
128
|
-
};
|
|
129
|
-
if (message)
|
|
130
|
-
minimal.msg = message;
|
|
131
|
-
if (opts.page)
|
|
132
|
-
minimal.p = opts.page;
|
|
133
|
-
return JSON.stringify(minimal);
|
|
134
|
-
}
|
|
135
|
-
// 'standard' level — use the full envelope structure (current behavior)
|
|
136
|
-
return JSON.stringify(fullEnvelope);
|
|
117
|
+
return JSON.stringify(envelope);
|
|
137
118
|
}
|
|
138
119
|
/**
|
|
139
|
-
* Format an error as a
|
|
120
|
+
* Format an error as a canonical CLI error envelope.
|
|
121
|
+
*
|
|
122
|
+
* Produces `{success: false, error: CliEnvelopeError, meta: CliMeta}`.
|
|
123
|
+
* Every error envelope now always includes `meta` (ADR-039).
|
|
124
|
+
* When operation is omitted, defaults to `'cli.output'`.
|
|
140
125
|
*
|
|
141
|
-
*
|
|
142
|
-
*
|
|
126
|
+
* @param error - The `CleoError` to format.
|
|
127
|
+
* @param operation - Optional dot-delimited operation identifier.
|
|
128
|
+
* @returns JSON-serialized error `CliEnvelope`.
|
|
143
129
|
*
|
|
144
130
|
* @task T4672
|
|
131
|
+
* @task T338
|
|
145
132
|
* @epic T4663
|
|
146
133
|
*/
|
|
147
134
|
export function formatError(error, operation) {
|
|
135
|
+
const lafsError = error.toLAFSError();
|
|
136
|
+
const errorObj = {
|
|
137
|
+
code: lafsError.code,
|
|
138
|
+
message: lafsError.message,
|
|
139
|
+
details: lafsError.details,
|
|
140
|
+
};
|
|
141
|
+
if ('category' in lafsError && lafsError.category) {
|
|
142
|
+
errorObj['category'] = lafsError.category;
|
|
143
|
+
}
|
|
144
|
+
if ('retryable' in lafsError) {
|
|
145
|
+
errorObj['retryable'] = lafsError.retryable;
|
|
146
|
+
}
|
|
147
|
+
if ('agentAction' in lafsError && lafsError.agentAction) {
|
|
148
|
+
errorObj['agentAction'] = lafsError.agentAction;
|
|
149
|
+
}
|
|
148
150
|
const envelope = {
|
|
149
|
-
$schema: 'https://lafs.dev/schemas/v1/envelope.schema.json',
|
|
150
|
-
_meta: createCliMeta(operation ?? 'cli.output'),
|
|
151
151
|
success: false,
|
|
152
|
-
|
|
153
|
-
|
|
152
|
+
error: errorObj,
|
|
153
|
+
meta: createCliMeta(operation ?? 'cli.output'),
|
|
154
154
|
};
|
|
155
155
|
return JSON.stringify(envelope);
|
|
156
156
|
}
|
package/dist/output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
|
package/dist/paths.js
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* XDG-compliant path resolution for CLEO V2.
|
|
3
3
|
*
|
|
4
|
+
* Global data directory is resolved via env-paths (XDG on Linux, platform
|
|
5
|
+
* conventions on macOS and Windows):
|
|
6
|
+
* Linux: ~/.local/share/cleo
|
|
7
|
+
* macOS: ~/Library/Application Support/cleo
|
|
8
|
+
* Windows: %LOCALAPPDATA%\cleo
|
|
9
|
+
*
|
|
4
10
|
* Environment variables:
|
|
5
|
-
* CLEO_HOME -
|
|
11
|
+
* CLEO_HOME - Override global installation directory
|
|
6
12
|
* CLEO_DIR - Project data directory (default: .cleo)
|
|
7
13
|
*
|
|
8
14
|
* @epic T4454
|
|
@@ -11,6 +17,8 @@
|
|
|
11
17
|
import { existsSync, readFileSync } from 'node:fs';
|
|
12
18
|
import { homedir } from 'node:os';
|
|
13
19
|
import { dirname, join, resolve } from 'node:path';
|
|
20
|
+
import { ExitCode } from '@cleocode/contracts';
|
|
21
|
+
import { CleoError } from './errors.js';
|
|
14
22
|
import { getPlatformPaths } from './system/platform-paths.js';
|
|
15
23
|
/**
|
|
16
24
|
* Check if a CLEO project is initialized at the given root.
|
|
@@ -151,31 +159,89 @@ export function getCleoDirAbsolute(cwd) {
|
|
|
151
159
|
return resolve(cwd ?? process.cwd(), cleoDir);
|
|
152
160
|
}
|
|
153
161
|
/**
|
|
154
|
-
* Get the project root
|
|
155
|
-
*
|
|
156
|
-
*
|
|
162
|
+
* Get the project root by walking ancestor directories for `.cleo/` or `.git/`.
|
|
163
|
+
*
|
|
164
|
+
* Stops at the **first** ancestor directory that contains either sentinel
|
|
165
|
+
* directory and never drifts past it — even when multiple nested projects
|
|
166
|
+
* exist above the starting directory.
|
|
167
|
+
*
|
|
168
|
+
* Resolution order:
|
|
169
|
+
* 1. `CLEO_ROOT` env var — bypasses walk entirely (CI / test override)
|
|
170
|
+
* 2. `CLEO_DIR` env var (absolute path only) — derives project root from dirname
|
|
171
|
+
* 3. Walk ancestors from `cwd` (or `process.cwd()`) toward filesystem root:
|
|
172
|
+
* - `.cleo/` found → return that directory (project root)
|
|
173
|
+
* - `.git/` found (without `.cleo/` sibling) → throw `E_NOT_INITIALIZED`
|
|
174
|
+
* 4. Filesystem root reached without either → throw `E_NO_PROJECT`
|
|
157
175
|
*
|
|
158
|
-
* @param cwd - Optional
|
|
159
|
-
* @returns Absolute path to the project root
|
|
176
|
+
* @param cwd - Optional starting directory; defaults to `process.cwd()`
|
|
177
|
+
* @returns Absolute path to the project root directory (parent of `.cleo/`)
|
|
178
|
+
* @throws {CleoError} `ExitCode.CONFIG_ERROR` (`E_NOT_INITIALIZED`) when a
|
|
179
|
+
* `.git/` is found but no `.cleo/` is present at that level.
|
|
180
|
+
* @throws {CleoError} `ExitCode.NOT_FOUND` (`E_NO_PROJECT`) when neither
|
|
181
|
+
* sentinel is found in any ancestor.
|
|
160
182
|
*
|
|
161
183
|
* @remarks
|
|
162
|
-
*
|
|
163
|
-
*
|
|
184
|
+
* `CLEO_ROOT` is an absolute-path escape hatch for environments where the
|
|
185
|
+
* working directory is unrelated to the project (CI tmpdirs, monorepo scripts,
|
|
186
|
+
* test harnesses). When set it is returned as-is without scanning ancestors.
|
|
187
|
+
*
|
|
188
|
+
* `CLEO_DIR` set to an absolute path (e.g. `/project/.cleo`) also bypasses
|
|
189
|
+
* the walk: the project root is derived as its `dirname`. This preserves
|
|
190
|
+
* backward compatibility for test harnesses that use `CLEO_DIR` to pin the
|
|
191
|
+
* project root.
|
|
192
|
+
*
|
|
193
|
+
* NEVER auto-creates `.cleo/`. Project initialisation is an explicit opt-in
|
|
194
|
+
* via `cleo init`.
|
|
164
195
|
*
|
|
165
196
|
* @example
|
|
166
197
|
* ```typescript
|
|
167
|
-
*
|
|
198
|
+
* // Running from packages/core inside the monorepo:
|
|
199
|
+
* const root = getProjectRoot(); // "/mnt/projects/cleocode"
|
|
168
200
|
* ```
|
|
169
201
|
*/
|
|
170
202
|
export function getProjectRoot(cwd) {
|
|
171
|
-
|
|
203
|
+
// 1. Honour CLEO_ROOT env var — bypass walk entirely
|
|
204
|
+
if (process.env['CLEO_ROOT']) {
|
|
172
205
|
return process.env['CLEO_ROOT'];
|
|
173
206
|
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
207
|
+
// 2. If CLEO_DIR is an absolute path, derive the project root from it.
|
|
208
|
+
// This preserves backward compatibility for test harnesses that set
|
|
209
|
+
// CLEO_DIR=/some/absolute/path/.cleo to pin the project root.
|
|
210
|
+
const cleoDirEnv = process.env['CLEO_DIR'];
|
|
211
|
+
if (cleoDirEnv && isAbsolutePath(cleoDirEnv)) {
|
|
212
|
+
if (cleoDirEnv.endsWith('/.cleo') || cleoDirEnv.endsWith('\\.cleo')) {
|
|
213
|
+
return dirname(cleoDirEnv);
|
|
214
|
+
}
|
|
215
|
+
return cleoDirEnv;
|
|
216
|
+
}
|
|
217
|
+
const start = resolve(cwd ?? process.cwd());
|
|
218
|
+
let current = start;
|
|
219
|
+
// 2. Walk ancestors toward filesystem root
|
|
220
|
+
while (true) {
|
|
221
|
+
const cleoDir = join(current, '.cleo');
|
|
222
|
+
const gitDir = join(current, '.git');
|
|
223
|
+
if (existsSync(cleoDir)) {
|
|
224
|
+
// .cleo/ found — this is the project root
|
|
225
|
+
return current;
|
|
226
|
+
}
|
|
227
|
+
if (existsSync(gitDir)) {
|
|
228
|
+
// .git/ found but no .cleo/ sibling — not initialised
|
|
229
|
+
throw new CleoError(ExitCode.CONFIG_ERROR, `Run cleo init at ${current}`, {
|
|
230
|
+
fix: `cd ${current} && cleo init`,
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
// Move up one level
|
|
234
|
+
const parent = dirname(current);
|
|
235
|
+
if (parent === current) {
|
|
236
|
+
// Reached filesystem root without finding either sentinel
|
|
237
|
+
break;
|
|
238
|
+
}
|
|
239
|
+
current = parent;
|
|
177
240
|
}
|
|
178
|
-
|
|
241
|
+
// 3. No sentinel found in any ancestor
|
|
242
|
+
throw new CleoError(ExitCode.NOT_FOUND, 'Not inside a CLEO project. Run cleo init or cd to an existing project', {
|
|
243
|
+
fix: 'cleo init',
|
|
244
|
+
});
|
|
179
245
|
}
|
|
180
246
|
/**
|
|
181
247
|
* Resolve a project-relative path to an absolute path.
|
package/dist/paths.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-skill-generator.d.ts","sourceRoot":"","sources":["../../src/skills/dynamic-skill-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,
|
|
1
|
+
{"version":3,"file":"dynamic-skill-generator.d.ts","sourceRoot":"","sources":["../../src/skills/dynamic-skill-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAcxE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CA4BtE;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CA2B5E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-skill-generator.js","sourceRoot":"","sources":["../../src/skills/dynamic-skill-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"dynamic-skill-generator.js","sourceRoot":"","sources":["../../src/skills/dynamic-skill-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,31 +1,222 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Agent Registry Accessor — CRUD
|
|
2
|
+
* Agent Registry Accessor — cross-DB CRUD for agent data.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Post-T310 (ADR-037), agent identity lives in the GLOBAL
|
|
5
|
+
* `$XDG_DATA_HOME/cleo/signaldock.db:agents` table; per-project
|
|
6
|
+
* visibility and overrides live in the PROJECT
|
|
7
|
+
* `.cleo/conduit.db:project_agent_refs` table.
|
|
6
8
|
*
|
|
7
|
-
*
|
|
9
|
+
* This module provides three module-level functions that perform the
|
|
10
|
+
* in-memory cross-DB join, plus the backward-compatible
|
|
11
|
+
* `AgentRegistryAccessor` class that wraps them.
|
|
8
12
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
13
|
+
* Architecture:
|
|
14
|
+
* global signaldock.db — canonical identity (openGlobalDb)
|
|
15
|
+
* project conduit.db — project_agent_refs (openConduitDb)
|
|
16
|
+
* Join performed in Node (SQLite cannot cross-file-handle JOIN).
|
|
17
|
+
*
|
|
18
|
+
* @see .cleo/specs/T310-conduit-signaldock-spec.md §3.5
|
|
19
|
+
* @see .cleo/adrs/ADR-037-conduit-signaldock-separation.md
|
|
20
|
+
* @task T355
|
|
21
|
+
* @epic T310
|
|
22
|
+
*/
|
|
23
|
+
import type { AgentCredential, AgentListFilter, AgentRegistryAPI, AgentWithProjectOverride } from '@cleocode/contracts';
|
|
24
|
+
/**
|
|
25
|
+
* Cross-DB agent lookup. Opens both the global signaldock.db and the
|
|
26
|
+
* current project's conduit.db, joins project_agent_refs ⨝ agents by
|
|
27
|
+
* agentId, and returns the merged view.
|
|
28
|
+
*
|
|
29
|
+
* Default (includeGlobal=false): returns null if no project_agent_refs row
|
|
30
|
+
* exists, even if the agent exists globally. An enabled=0 row is also treated
|
|
31
|
+
* as absent.
|
|
32
|
+
*
|
|
33
|
+
* includeGlobal=true: returns the global agent with `projectRef: null` if no
|
|
34
|
+
* project attachment row exists.
|
|
35
|
+
*
|
|
36
|
+
* Dangling soft-FK detection: if a project_agent_refs row exists but the
|
|
37
|
+
* referenced global agent does not, logs a WARN and returns null.
|
|
38
|
+
*
|
|
39
|
+
* @param projectRoot - Absolute path to the project root directory.
|
|
40
|
+
* @param agentId - Agent business identifier.
|
|
41
|
+
* @param opts.includeGlobal - When true, returns global identity even without project ref.
|
|
42
|
+
* @returns Merged agent record or null if not found.
|
|
43
|
+
*
|
|
44
|
+
* @task T355
|
|
45
|
+
* @epic T310
|
|
46
|
+
*/
|
|
47
|
+
export declare function lookupAgent(projectRoot: string, agentId: string, opts?: {
|
|
48
|
+
includeGlobal?: boolean;
|
|
49
|
+
}): AgentWithProjectOverride | null;
|
|
50
|
+
/**
|
|
51
|
+
* Lists agents visible in the current project.
|
|
52
|
+
*
|
|
53
|
+
* Default (includeGlobal=false): INNER JOIN on project_agent_refs (enabled=1)
|
|
54
|
+
* — only agents explicitly attached to this project are returned.
|
|
55
|
+
*
|
|
56
|
+
* includeGlobal=true: returns all global agents regardless of project
|
|
57
|
+
* attachment, with projectRef populated for attached ones and null for the rest.
|
|
58
|
+
*
|
|
59
|
+
* includeDisabled=true: also returns agents with enabled=0 in project_agent_refs.
|
|
60
|
+
* Ignored when includeGlobal=true (all global agents are returned regardless).
|
|
61
|
+
*
|
|
62
|
+
* @param projectRoot - Absolute path to the project root directory.
|
|
63
|
+
* @param opts.includeGlobal - Include all global agents (bypasses project filter).
|
|
64
|
+
* @param opts.includeDisabled - Include agents with enabled=0 in project_agent_refs.
|
|
65
|
+
* @returns Array of merged agent records.
|
|
66
|
+
*
|
|
67
|
+
* @task T355
|
|
68
|
+
* @epic T310
|
|
69
|
+
*/
|
|
70
|
+
export declare function listAgentsForProject(projectRoot: string, opts?: {
|
|
71
|
+
includeGlobal?: boolean;
|
|
72
|
+
includeDisabled?: boolean;
|
|
73
|
+
}): AgentWithProjectOverride[];
|
|
74
|
+
/**
|
|
75
|
+
* Creates a new agent: writes identity row to global signaldock.db AND attaches
|
|
76
|
+
* it to the current project via conduit.db:project_agent_refs.
|
|
77
|
+
*
|
|
78
|
+
* Write order: global first, then project ref. If the project ref write fails,
|
|
79
|
+
* the global row remains (recoverable via `cleo agent attach <id>`).
|
|
80
|
+
*
|
|
81
|
+
* API key derivation: HMAC-SHA256(machineKey || globalSalt, agentId) per ADR-037 §5.
|
|
82
|
+
*
|
|
83
|
+
* @param projectRoot - Absolute path to the project root directory.
|
|
84
|
+
* @param spec - Agent creation spec (without createdAt/updatedAt).
|
|
85
|
+
* @returns Merged agent record including the new project ref.
|
|
86
|
+
*
|
|
87
|
+
* @task T355
|
|
88
|
+
* @epic T310
|
|
89
|
+
*/
|
|
90
|
+
export declare function createProjectAgent(projectRoot: string, spec: Omit<AgentCredential, 'createdAt' | 'updatedAt'>): AgentWithProjectOverride;
|
|
91
|
+
/**
|
|
92
|
+
* AgentRegistryAccessor — backward-compatible CRUD wrapper around the
|
|
93
|
+
* cross-DB module-level functions.
|
|
94
|
+
*
|
|
95
|
+
* Post-T310 (ADR-037), the constructor accepts the project root (same
|
|
96
|
+
* semantics as `projectPath` in the pre-T310 version). All operations are
|
|
97
|
+
* routed through the cross-DB functions above.
|
|
98
|
+
*
|
|
99
|
+
* @task T355
|
|
100
|
+
* @epic T310
|
|
11
101
|
*/
|
|
12
|
-
import type { AgentCredential, AgentListFilter, AgentRegistryAPI } from '@cleocode/contracts';
|
|
13
|
-
/** signaldock.db implementation of the AgentRegistryAPI. */
|
|
14
102
|
export declare class AgentRegistryAccessor implements AgentRegistryAPI {
|
|
15
|
-
private projectPath;
|
|
103
|
+
private readonly projectPath;
|
|
104
|
+
/**
|
|
105
|
+
* @param projectPath - Absolute path to the project root directory.
|
|
106
|
+
* Used as the `projectRoot` argument for all cross-DB operations.
|
|
107
|
+
* @task T355
|
|
108
|
+
* @epic T310
|
|
109
|
+
*/
|
|
16
110
|
constructor(projectPath: string);
|
|
17
|
-
/**
|
|
18
|
-
|
|
111
|
+
/**
|
|
112
|
+
* Ensure both databases exist with their full schemas before any operation.
|
|
113
|
+
*
|
|
114
|
+
* @task T355
|
|
115
|
+
* @epic T310
|
|
116
|
+
*/
|
|
117
|
+
private ensureDbs;
|
|
118
|
+
/**
|
|
119
|
+
* Register (create or update) an agent in global signaldock.db and attach
|
|
120
|
+
* it to the current project via conduit.db:project_agent_refs.
|
|
121
|
+
*
|
|
122
|
+
* @param credential - Agent spec (without createdAt/updatedAt).
|
|
123
|
+
* @returns The registered agent credential.
|
|
124
|
+
* @task T355
|
|
125
|
+
* @epic T310
|
|
126
|
+
*/
|
|
19
127
|
register(credential: Omit<AgentCredential, 'createdAt' | 'updatedAt'>): Promise<AgentCredential>;
|
|
20
|
-
|
|
128
|
+
/**
|
|
129
|
+
* Get agent by agentId. Project-scoped by default (INNER JOIN).
|
|
130
|
+
*
|
|
131
|
+
* @param agentId - Agent business identifier.
|
|
132
|
+
* @param opts.includeGlobal - When true, returns global identity even without project ref.
|
|
133
|
+
* @returns The agent credential, or null if not found.
|
|
134
|
+
* @task T355
|
|
135
|
+
* @epic T310
|
|
136
|
+
*/
|
|
137
|
+
get(agentId: string, opts?: {
|
|
138
|
+
includeGlobal?: boolean;
|
|
139
|
+
}): Promise<AgentCredential | null>;
|
|
140
|
+
/**
|
|
141
|
+
* Lists project-scoped agents (INNER JOIN on project_agent_refs with enabled=1).
|
|
142
|
+
*
|
|
143
|
+
* @param filter - Optional filter (active field maps to is_active in global agents).
|
|
144
|
+
* @returns Array of agent credentials visible in this project.
|
|
145
|
+
* @task T355
|
|
146
|
+
* @epic T310
|
|
147
|
+
*/
|
|
21
148
|
list(filter?: AgentListFilter): Promise<AgentCredential[]>;
|
|
149
|
+
/**
|
|
150
|
+
* Lists all global agents (no project filter). Exposed for `--global` CLI flag.
|
|
151
|
+
*
|
|
152
|
+
* @param filter - Optional filter (active field maps to is_active in global agents).
|
|
153
|
+
* @returns Array of all globally registered agent credentials.
|
|
154
|
+
* @task T355
|
|
155
|
+
* @epic T310
|
|
156
|
+
*/
|
|
157
|
+
listGlobal(filter?: AgentListFilter): Promise<AgentCredential[]>;
|
|
158
|
+
/**
|
|
159
|
+
* Update agent identity fields in global signaldock.db.
|
|
160
|
+
* Project-specific fields (role, capabilitiesOverride) require direct
|
|
161
|
+
* conduit.db manipulation (not yet exposed by this method).
|
|
162
|
+
*
|
|
163
|
+
* @param agentId - Agent business identifier.
|
|
164
|
+
* @param updates - Partial set of fields to update.
|
|
165
|
+
* @returns The updated agent credential (project-scoped lookup).
|
|
166
|
+
* @task T355
|
|
167
|
+
* @epic T310
|
|
168
|
+
*/
|
|
22
169
|
update(agentId: string, updates: Partial<Omit<AgentCredential, 'agentId' | 'createdAt'>>): Promise<AgentCredential>;
|
|
170
|
+
/**
|
|
171
|
+
* Remove agent from current project (sets project_agent_refs.enabled=0).
|
|
172
|
+
* Does NOT delete from global signaldock.db (per ADR-037 §6 / Q4=C).
|
|
173
|
+
*
|
|
174
|
+
* @param agentId - Agent business identifier.
|
|
175
|
+
* @task T355
|
|
176
|
+
* @epic T310
|
|
177
|
+
*/
|
|
23
178
|
remove(agentId: string): Promise<void>;
|
|
179
|
+
/**
|
|
180
|
+
* Remove agent from global signaldock.db.
|
|
181
|
+
* Requires explicit opt-in. Warns if cross-project refs may exist.
|
|
182
|
+
*
|
|
183
|
+
* @param agentId - Agent business identifier.
|
|
184
|
+
* @param opts.force - Skip the global-delete warning when refs exist.
|
|
185
|
+
* @task T355
|
|
186
|
+
* @epic T310
|
|
187
|
+
*/
|
|
188
|
+
removeGlobal(agentId: string, opts?: {
|
|
189
|
+
force?: boolean;
|
|
190
|
+
}): Promise<void>;
|
|
191
|
+
/**
|
|
192
|
+
* Rotate API key via cloud endpoint and re-encrypt with the new T310 KDF
|
|
193
|
+
* in global signaldock.db.
|
|
194
|
+
*
|
|
195
|
+
* @param agentId - Agent business identifier.
|
|
196
|
+
* @returns Object with agentId and a redacted new API key string.
|
|
197
|
+
* @task T355
|
|
198
|
+
* @epic T310
|
|
199
|
+
*/
|
|
24
200
|
rotateKey(agentId: string): Promise<{
|
|
25
201
|
agentId: string;
|
|
26
202
|
newApiKey: string;
|
|
27
203
|
}>;
|
|
204
|
+
/**
|
|
205
|
+
* Get the most recently used active agent in the current project.
|
|
206
|
+
*
|
|
207
|
+
* @returns The most-recently-used active agent, or null if none found.
|
|
208
|
+
* @task T355
|
|
209
|
+
* @epic T310
|
|
210
|
+
*/
|
|
28
211
|
getActive(): Promise<AgentCredential | null>;
|
|
212
|
+
/**
|
|
213
|
+
* Update last_used_at in both global signaldock.db:agents and
|
|
214
|
+
* conduit.db:project_agent_refs.
|
|
215
|
+
*
|
|
216
|
+
* @param agentId - Agent business identifier.
|
|
217
|
+
* @task T355
|
|
218
|
+
* @epic T310
|
|
219
|
+
*/
|
|
29
220
|
markUsed(agentId: string): Promise<void>;
|
|
30
221
|
}
|
|
31
222
|
//# sourceMappingURL=agent-registry-accessor.d.ts.map
|