@cleocode/contracts 2026.5.67 → 2026.5.69
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/__tests__/credentials.test.d.ts +10 -0
- package/dist/__tests__/credentials.test.d.ts.map +1 -0
- package/dist/__tests__/credentials.test.js +100 -0
- package/dist/__tests__/credentials.test.js.map +1 -0
- package/dist/__tests__/llm-config-schema.test.d.ts +6 -6
- package/dist/__tests__/llm-config-schema.test.js +9 -13
- package/dist/__tests__/llm-config-schema.test.js.map +1 -1
- package/dist/config.d.ts +32 -54
- package/dist/config.d.ts.map +1 -1
- package/dist/credentials.d.ts +75 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +79 -0
- package/dist/credentials.js.map +1 -0
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/llm/failover-reason.d.ts +1 -1
- package/dist/llm/interfaces.d.ts +1 -0
- package/dist/llm/interfaces.d.ts.map +1 -1
- package/dist/llm/normalized-response.d.ts +10 -0
- package/dist/llm/normalized-response.d.ts.map +1 -1
- package/dist/llm/oauth.d.ts +125 -0
- package/dist/llm/oauth.d.ts.map +1 -0
- package/dist/llm/oauth.js +12 -0
- package/dist/llm/oauth.js.map +1 -0
- package/dist/llm/plugin-llm.d.ts +93 -0
- package/dist/llm/plugin-llm.d.ts.map +1 -0
- package/dist/llm/plugin-llm.js +65 -0
- package/dist/llm/plugin-llm.js.map +1 -0
- package/dist/llm/provider-profile.d.ts +23 -0
- package/dist/llm/provider-profile.d.ts.map +1 -1
- package/dist/memory/context-engine.d.ts +67 -0
- package/dist/memory/context-engine.d.ts.map +1 -0
- package/dist/memory/context-engine.js +15 -0
- package/dist/memory/context-engine.js.map +1 -0
- package/dist/operations/llm.d.ts +43 -6
- package/dist/operations/llm.d.ts.map +1 -1
- package/dist/operations/llm.js +0 -4
- package/dist/operations/llm.js.map +1 -1
- package/package.json +10 -2
- package/src/__tests__/credentials.test.ts +122 -0
- package/src/__tests__/llm-config-schema.test.ts +9 -13
- package/src/config.ts +37 -55
- package/src/credentials.ts +114 -0
- package/src/index.ts +22 -7
- package/src/llm/failover-reason.ts +1 -1
- package/src/llm/interfaces.ts +13 -0
- package/src/llm/normalized-response.ts +10 -0
- package/src/llm/oauth.ts +144 -0
- package/src/llm/plugin-llm.ts +128 -0
- package/src/llm/provider-profile.ts +25 -0
- package/src/memory/context-engine.ts +78 -0
- package/src/operations/llm.ts +50 -6
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Smoke tests for `parseClaudeCodeCredentials()` in @cleocode/contracts.
|
|
3
|
+
*
|
|
4
|
+
* Covers both OAuth-shaped and api-key-shaped JSON, plus edge cases
|
|
5
|
+
* (malformed input, expired tokens, missing fields).
|
|
6
|
+
*
|
|
7
|
+
* @task T9307
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=credentials.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/credentials.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Smoke tests for `parseClaudeCodeCredentials()` in @cleocode/contracts.
|
|
3
|
+
*
|
|
4
|
+
* Covers both OAuth-shaped and api-key-shaped JSON, plus edge cases
|
|
5
|
+
* (malformed input, expired tokens, missing fields).
|
|
6
|
+
*
|
|
7
|
+
* @task T9307
|
|
8
|
+
*/
|
|
9
|
+
import { describe, expect, it } from 'vitest';
|
|
10
|
+
import { parseClaudeCodeCredentials } from '../credentials.js';
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// Helpers
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
function makeCreds(overrides = {}) {
|
|
15
|
+
return JSON.stringify({
|
|
16
|
+
claudeAiOauth: {
|
|
17
|
+
accessToken: 'sk-ant-oat-test-token',
|
|
18
|
+
expiresAt: Date.now() + 3_600_000,
|
|
19
|
+
...overrides,
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
// OAuth-shaped credentials
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
describe('OAuth-shaped credentials', () => {
|
|
27
|
+
it('returns accessToken for valid OAuth JSON', () => {
|
|
28
|
+
const result = parseClaudeCodeCredentials(makeCreds());
|
|
29
|
+
expect(result).not.toBeNull();
|
|
30
|
+
expect(result?.accessToken).toBe('sk-ant-oat-test-token');
|
|
31
|
+
});
|
|
32
|
+
it('returns expiresAt when present', () => {
|
|
33
|
+
const expiresAt = Date.now() + 7_200_000;
|
|
34
|
+
const result = parseClaudeCodeCredentials(makeCreds({ expiresAt }));
|
|
35
|
+
expect(result?.expiresAt).toBe(expiresAt);
|
|
36
|
+
});
|
|
37
|
+
it('returns refreshToken when present', () => {
|
|
38
|
+
const result = parseClaudeCodeCredentials(makeCreds({ refreshToken: 'sk-ant-ort-refresh-token' }));
|
|
39
|
+
expect(result?.refreshToken).toBe('sk-ant-ort-refresh-token');
|
|
40
|
+
});
|
|
41
|
+
it('returns null for expired token', () => {
|
|
42
|
+
const result = parseClaudeCodeCredentials(makeCreds({ expiresAt: Date.now() - 1 }));
|
|
43
|
+
expect(result).toBeNull();
|
|
44
|
+
});
|
|
45
|
+
it('omits expiresAt when not provided', () => {
|
|
46
|
+
const raw = JSON.stringify({
|
|
47
|
+
claudeAiOauth: { accessToken: 'sk-ant-oat-no-expiry' },
|
|
48
|
+
});
|
|
49
|
+
const result = parseClaudeCodeCredentials(raw);
|
|
50
|
+
expect(result?.accessToken).toBe('sk-ant-oat-no-expiry');
|
|
51
|
+
expect(result?.expiresAt).toBeUndefined();
|
|
52
|
+
});
|
|
53
|
+
it('accepts a Buffer input', () => {
|
|
54
|
+
const buf = Buffer.from(makeCreds(), 'utf-8');
|
|
55
|
+
const result = parseClaudeCodeCredentials(buf);
|
|
56
|
+
expect(result?.accessToken).toBe('sk-ant-oat-test-token');
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
// Api-key-shaped / missing claudeAiOauth block
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
describe('Non-OAuth / missing block', () => {
|
|
63
|
+
it('returns null when claudeAiOauth block is absent', () => {
|
|
64
|
+
const raw = JSON.stringify({ someOtherKey: 'value' });
|
|
65
|
+
expect(parseClaudeCodeCredentials(raw)).toBeNull();
|
|
66
|
+
});
|
|
67
|
+
it('returns null when accessToken is empty string', () => {
|
|
68
|
+
const raw = JSON.stringify({ claudeAiOauth: { accessToken: '' } });
|
|
69
|
+
expect(parseClaudeCodeCredentials(raw)).toBeNull();
|
|
70
|
+
});
|
|
71
|
+
it('returns null when accessToken is whitespace only', () => {
|
|
72
|
+
const raw = JSON.stringify({ claudeAiOauth: { accessToken: ' ' } });
|
|
73
|
+
expect(parseClaudeCodeCredentials(raw)).toBeNull();
|
|
74
|
+
});
|
|
75
|
+
it('returns null when accessToken field is missing', () => {
|
|
76
|
+
const raw = JSON.stringify({ claudeAiOauth: { expiresAt: Date.now() + 3600 } });
|
|
77
|
+
expect(parseClaudeCodeCredentials(raw)).toBeNull();
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
// ---------------------------------------------------------------------------
|
|
81
|
+
// Malformed / edge-case input
|
|
82
|
+
// ---------------------------------------------------------------------------
|
|
83
|
+
describe('Malformed input', () => {
|
|
84
|
+
it('returns null for empty string', () => {
|
|
85
|
+
expect(parseClaudeCodeCredentials('')).toBeNull();
|
|
86
|
+
});
|
|
87
|
+
it('returns null for invalid JSON', () => {
|
|
88
|
+
expect(parseClaudeCodeCredentials('not-json')).toBeNull();
|
|
89
|
+
});
|
|
90
|
+
it('returns null for JSON null', () => {
|
|
91
|
+
expect(parseClaudeCodeCredentials('null')).toBeNull();
|
|
92
|
+
});
|
|
93
|
+
it('returns null for JSON array', () => {
|
|
94
|
+
expect(parseClaudeCodeCredentials('[]')).toBeNull();
|
|
95
|
+
});
|
|
96
|
+
it('returns null for empty Buffer', () => {
|
|
97
|
+
expect(parseClaudeCodeCredentials(Buffer.alloc(0))).toBeNull();
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
//# sourceMappingURL=credentials.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.test.js","sourceRoot":"","sources":["../../src/__tests__/credentials.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAE/D,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,SAAS,CAAC,YAAqC,EAAE;IACxD,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,aAAa,EAAE;YACb,WAAW,EAAE,uBAAuB;YACpC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YACjC,GAAG,SAAS;SACb;KACF,CAAC,CAAC;AACL,CAAC;AAED,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAE9E,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,MAAM,GAAG,0BAA0B,CAAC,SAAS,EAAE,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACzC,MAAM,MAAM,GAAG,0BAA0B,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QACpE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,MAAM,GAAG,0BAA0B,CACvC,SAAS,CAAC,EAAE,YAAY,EAAE,0BAA0B,EAAE,CAAC,CACxD,CAAC;QACF,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,MAAM,GAAG,0BAA0B,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACpF,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;YACzB,aAAa,EAAE,EAAE,WAAW,EAAE,sBAAsB,EAAE;SACvD,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACzD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,aAAa,EAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,OAAO,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,+CAA+C;AAC/C,8EAA8E;AAE9E,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC;QACtD,MAAM,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACtE,MAAM,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;QAChF,MAAM,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,8BAA8B;AAC9B,8EAA8E;AAE9E,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,0BAA0B,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -3,17 +3,17 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Asserts that:
|
|
5
5
|
*
|
|
6
|
-
* 1. A literal `LlmConfig` object containing the
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* 1. A literal `LlmConfig` object containing the `default` and `roles` fields
|
|
7
|
+
* typechecks and survives a JSON serialize/deserialize cycle without
|
|
8
|
+
* structural loss.
|
|
9
9
|
* 2. All five `RoleName` values (`extraction`, `consolidation`, `derivation`,
|
|
10
10
|
* `hygiene`, `judgement`) are accepted as keys of `roles`.
|
|
11
11
|
* 3. Omitting `default` and/or `roles` still typechecks (both are optional).
|
|
12
12
|
*
|
|
13
|
-
* These tests guard the Phase
|
|
14
|
-
*
|
|
13
|
+
* These tests guard the Phase 4 schema cleanup of T-LLM-CRED-CENTRALIZATION
|
|
14
|
+
* (T9306 — daemon field removed) against accidental regressions.
|
|
15
15
|
*
|
|
16
|
-
* @task
|
|
16
|
+
* @task T9306
|
|
17
17
|
* @epic T-LLM-CRED-CENTRALIZATION
|
|
18
18
|
*/
|
|
19
19
|
export {};
|
|
@@ -3,24 +3,23 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Asserts that:
|
|
5
5
|
*
|
|
6
|
-
* 1. A literal `LlmConfig` object containing the
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* 1. A literal `LlmConfig` object containing the `default` and `roles` fields
|
|
7
|
+
* typechecks and survives a JSON serialize/deserialize cycle without
|
|
8
|
+
* structural loss.
|
|
9
9
|
* 2. All five `RoleName` values (`extraction`, `consolidation`, `derivation`,
|
|
10
10
|
* `hygiene`, `judgement`) are accepted as keys of `roles`.
|
|
11
11
|
* 3. Omitting `default` and/or `roles` still typechecks (both are optional).
|
|
12
12
|
*
|
|
13
|
-
* These tests guard the Phase
|
|
14
|
-
*
|
|
13
|
+
* These tests guard the Phase 4 schema cleanup of T-LLM-CRED-CENTRALIZATION
|
|
14
|
+
* (T9306 — daemon field removed) against accidental regressions.
|
|
15
15
|
*
|
|
16
|
-
* @task
|
|
16
|
+
* @task T9306
|
|
17
17
|
* @epic T-LLM-CRED-CENTRALIZATION
|
|
18
18
|
*/
|
|
19
19
|
import { describe, expect, it } from 'vitest';
|
|
20
|
-
describe('LlmConfig — Phase
|
|
21
|
-
it('accepts a fully-populated config with default
|
|
20
|
+
describe('LlmConfig — Phase 4 schema cleanup (T9306)', () => {
|
|
21
|
+
it('accepts a fully-populated config with default and roles', () => {
|
|
22
22
|
const cfg = {
|
|
23
|
-
daemon: { provider: 'anthropic', model: 'claude-sonnet-4-6' },
|
|
24
23
|
providers: {
|
|
25
24
|
anthropic: { apiKey: 'sk-test-anthropic' },
|
|
26
25
|
openai: { apiKey: 'sk-test-openai' },
|
|
@@ -91,12 +90,9 @@ describe('LlmConfig — Phase 2 schema extension (T9256)', () => {
|
|
|
91
90
|
}
|
|
92
91
|
});
|
|
93
92
|
it('typechecks when default and roles are both omitted', () => {
|
|
94
|
-
const cfg = {
|
|
95
|
-
daemon: { provider: 'anthropic', model: 'claude-sonnet-4-6' },
|
|
96
|
-
};
|
|
93
|
+
const cfg = {};
|
|
97
94
|
expect(cfg.default).toBeUndefined();
|
|
98
95
|
expect(cfg.roles).toBeUndefined();
|
|
99
|
-
expect(cfg.daemon?.provider).toBe('anthropic');
|
|
100
96
|
});
|
|
101
97
|
it('typechecks an empty LlmConfig (all fields optional)', () => {
|
|
102
98
|
const cfg = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-config-schema.test.js","sourceRoot":"","sources":["../../src/__tests__/llm-config-schema.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAG9C,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"llm-config-schema.test.js","sourceRoot":"","sources":["../../src/__tests__/llm-config-schema.test.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -340,29 +340,7 @@ export interface LlmProviderEntry {
|
|
|
340
340
|
apiKey?: string;
|
|
341
341
|
}
|
|
342
342
|
/**
|
|
343
|
-
*
|
|
344
|
-
* (sentient tick, dream-cycle, BRAIN extraction, etc.) uses by default.
|
|
345
|
-
*
|
|
346
|
-
* Written via:
|
|
347
|
-
* cleo config llm.daemon.provider <provider>
|
|
348
|
-
* cleo config llm.daemon.model <model-id>
|
|
349
|
-
*
|
|
350
|
-
* @defaultValue { provider: 'anthropic', model: 'claude-sonnet-4-6' }
|
|
351
|
-
*/
|
|
352
|
-
export interface DaemonLLMConfig {
|
|
353
|
-
/**
|
|
354
|
-
* LLM provider transport used by daemon loops.
|
|
355
|
-
* @defaultValue 'anthropic'
|
|
356
|
-
*/
|
|
357
|
-
provider: ModelTransport;
|
|
358
|
-
/**
|
|
359
|
-
* Full model identifier for the selected provider.
|
|
360
|
-
* @defaultValue 'claude-sonnet-4-6'
|
|
361
|
-
*/
|
|
362
|
-
model: string;
|
|
363
|
-
}
|
|
364
|
-
/**
|
|
365
|
-
* Canonical model transport identifier — re-export of {@link ModelTransport}
|
|
343
|
+
* Config-layer transport identifier — re-export of {@link ModelTransport}
|
|
366
344
|
* from `operations/llm.ts` so config-layer types stay in lock-step with the
|
|
367
345
|
* operations layer with no risk of drift.
|
|
368
346
|
*
|
|
@@ -370,31 +348,38 @@ export interface DaemonLLMConfig {
|
|
|
370
348
|
* T-LLM-CRED Phase 2 DRY/SOLID review (P1-2). Adding a new transport now
|
|
371
349
|
* requires editing only `operations/llm.ts`.
|
|
372
350
|
*
|
|
351
|
+
* **Disambiguation**: This is the *config-level* alias for the
|
|
352
|
+
* `ModelTransport` string-literal union (`'anthropic' | 'openai' | ...`).
|
|
353
|
+
* It is intentionally distinct from the `LlmTransport` *interface* defined
|
|
354
|
+
* in `packages/contracts/src/llm/normalized-response.ts` (Phase 4 wire-level
|
|
355
|
+
* protocol). Renamed from `LlmTransport` → `LlmProviderTransport` in T9308
|
|
356
|
+
* to eliminate the name collision.
|
|
357
|
+
*
|
|
373
358
|
* @task T-LLM-CRED-CENTRALIZATION Phase 2 — DRY review P1-2
|
|
359
|
+
* @see T9308 — disambiguation rename
|
|
374
360
|
*/
|
|
375
|
-
export type
|
|
361
|
+
export type LlmProviderTransport = ModelTransport;
|
|
376
362
|
/**
|
|
377
363
|
* Logical LLM role name used by role-aware resolvers (BRAIN, sentient, etc.).
|
|
378
364
|
*
|
|
379
365
|
* Each role can pin its own provider + model + credential label, with
|
|
380
|
-
* resolution falling back to `LlmConfig.default
|
|
381
|
-
* `LlmConfig.daemon` block.
|
|
366
|
+
* resolution falling back to `LlmConfig.default`.
|
|
382
367
|
*
|
|
383
|
-
* @task T-LLM-CRED-CENTRALIZATION Phase
|
|
368
|
+
* @task T-LLM-CRED-CENTRALIZATION Phase 4 (T9306)
|
|
384
369
|
*/
|
|
385
|
-
export type RoleName = 'extraction' | 'consolidation' | 'derivation' | 'hygiene' | 'judgement'
|
|
370
|
+
export type RoleName = 'extraction' | 'consolidation' | 'derivation' | 'hygiene' | 'judgement'
|
|
371
|
+
/** Sandbox role for plugin-scoped single-turn calls (T9305). */
|
|
372
|
+
| 'plugin'
|
|
373
|
+
/** Context-compression role — uses a cheap model (haiku) for summarization (T9304). */
|
|
374
|
+
| 'compression';
|
|
386
375
|
/**
|
|
387
376
|
* Canonical default LLM target for unscoped (non-role) calls.
|
|
388
377
|
*
|
|
389
|
-
*
|
|
390
|
-
* field stays as a deprecated alias for one release cycle to give downstream
|
|
391
|
-
* consumers time to migrate.
|
|
392
|
-
*
|
|
393
|
-
* @task T-LLM-CRED-CENTRALIZATION Phase 2 (T9256)
|
|
378
|
+
* @task T-LLM-CRED-CENTRALIZATION Phase 4 (T9306)
|
|
394
379
|
*/
|
|
395
380
|
export interface LlmDefaultConfig {
|
|
396
381
|
/** LLM provider transport for the default model. */
|
|
397
|
-
provider:
|
|
382
|
+
provider: LlmProviderTransport;
|
|
398
383
|
/** Full model identifier for the selected provider. */
|
|
399
384
|
model: string;
|
|
400
385
|
}
|
|
@@ -410,7 +395,7 @@ export interface LlmDefaultConfig {
|
|
|
410
395
|
*/
|
|
411
396
|
export interface LlmRoleConfig {
|
|
412
397
|
/** LLM provider transport for this role. */
|
|
413
|
-
provider:
|
|
398
|
+
provider: LlmProviderTransport;
|
|
414
399
|
/** Full model identifier for the selected provider. */
|
|
415
400
|
model: string;
|
|
416
401
|
/**
|
|
@@ -426,39 +411,32 @@ export interface LlmRoleConfig {
|
|
|
426
411
|
* Stored at `llm` in config.json.
|
|
427
412
|
*
|
|
428
413
|
* Resolution order for role-scoped calls:
|
|
429
|
-
* `roles[role]` → `default` →
|
|
414
|
+
* `roles[role]` → `default` → implicit fallback.
|
|
415
|
+
*
|
|
416
|
+
* Note: configs that still carry a `llm.daemon` key are silently ignored
|
|
417
|
+
* at parse time — they will not cause a crash. Migration: remove the key
|
|
418
|
+
* and add `llm.default` or `llm.roles.<role>` instead.
|
|
419
|
+
*
|
|
420
|
+
* @task T-LLM-CRED-CENTRALIZATION Phase 4 (T9306)
|
|
430
421
|
*/
|
|
431
422
|
export interface LlmConfig {
|
|
432
|
-
/**
|
|
433
|
-
* Daemon LLM settings (provider + model for background loops).
|
|
434
|
-
*
|
|
435
|
-
* @deprecated Use `default` instead. Retained as a fallback alias for
|
|
436
|
-
* one release cycle (T-LLM-CRED-CENTRALIZATION Phase 2 · T9256). New
|
|
437
|
-
* code must read `default` first and only fall through to `daemon` when
|
|
438
|
-
* `default` is absent.
|
|
439
|
-
* @defaultValue { provider: 'anthropic', model: 'claude-sonnet-4-6' }
|
|
440
|
-
*/
|
|
441
|
-
daemon?: DaemonLLMConfig;
|
|
442
423
|
/**
|
|
443
424
|
* Per-provider API key overrides.
|
|
444
425
|
* Keys are provider names: 'anthropic' | 'openai' | 'gemini' | 'moonshot'.
|
|
445
426
|
*/
|
|
446
427
|
providers?: Record<string, LlmProviderEntry>;
|
|
447
428
|
/**
|
|
448
|
-
* Canonical default LLM for unscoped calls.
|
|
449
|
-
* played by `daemon`, which stays as a deprecated alias for one release
|
|
450
|
-
* cycle.
|
|
429
|
+
* Canonical default LLM for unscoped calls.
|
|
451
430
|
*
|
|
452
|
-
* @task T-LLM-CRED-CENTRALIZATION Phase
|
|
431
|
+
* @task T-LLM-CRED-CENTRALIZATION Phase 4 (T9306)
|
|
453
432
|
*/
|
|
454
433
|
default?: LlmDefaultConfig;
|
|
455
434
|
/**
|
|
456
|
-
* Per-role LLM overrides. Each role optionally pins to a credential
|
|
457
|
-
* label.
|
|
435
|
+
* Per-role LLM overrides. Each role optionally pins to a credential label.
|
|
458
436
|
*
|
|
459
|
-
* Resolution order: `roles[role]` → `default` →
|
|
437
|
+
* Resolution order: `roles[role]` → `default` → implicit fallback.
|
|
460
438
|
*
|
|
461
|
-
* @task T-LLM-CRED-CENTRALIZATION Phase
|
|
439
|
+
* @task T-LLM-CRED-CENTRALIZATION Phase 4 (T9306)
|
|
462
440
|
*/
|
|
463
441
|
roles?: Partial<Record<RoleName, LlmRoleConfig>>;
|
|
464
442
|
}
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,6BAA6B;AAC7B,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;AAE5E,2BAA2B;AAC3B,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;AAE/D,4BAA4B;AAC5B,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,aAAa,EAAE,YAAY,CAAC;IAC5B,0DAA0D;IAC1D,SAAS,EAAE,OAAO,CAAC;IACnB,qEAAqE;IACrE,WAAW,EAAE,OAAO,CAAC;IACrB,oEAAoE;IACpE,gBAAgB,EAAE,OAAO,CAAC;IAC1B,oDAAoD;IACpD,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,4BAA4B;AAC5B,MAAM,WAAW,YAAY;IAC3B,gFAAgF;IAChF,qBAAqB,EAAE,MAAM,CAAC;IAC9B,wEAAwE;IACxE,gBAAgB,EAAE,MAAM,CAAC;IACzB,6DAA6D;IAC7D,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED,4CAA4C;AAC5C,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,QAAQ,CAAC;AAElF,+BAA+B;AAC/B,MAAM,WAAW,eAAe;IAC9B,wEAAwE;IACxE,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,aAAa,EAAE,OAAO,CAAC;IACvB,kEAAkE;IAClE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,yDAAyD;IACzD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,0EAA0E;IAC1E,kBAAkB,EAAE,kBAAkB,CAAC;CACxC;AAED,6BAA6B;AAC7B,MAAM,WAAW,aAAa;IAC5B,iEAAiE;IACjE,SAAS,EAAE,OAAO,CAAC;IACnB,sDAAsD;IACtD,YAAY,EAAE,OAAO,CAAC;IACtB,wDAAwD;IACxD,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,uBAAuB;AACvB,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE1F,6BAA6B;AAC7B,MAAM,WAAW,aAAa;IAC5B,oDAAoD;IACpD,KAAK,EAAE,QAAQ,CAAC;IAChB,kEAAkE;IAClE,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,yFAAyF;IACzF,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED,4CAA4C;AAC5C,MAAM,MAAM,yBAAyB,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAEjE,gDAAgD;AAChD,MAAM,WAAW,2BAA2B;IAC1C,wBAAwB;IACxB,IAAI,EAAE,yBAAyB,CAAC;IAChC,uCAAuC;IACvC,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,yCAAyC;IACzC,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,oCAAoC;AACpC,MAAM,WAAW,wBAAwB;IACvC,2DAA2D;IAC3D,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,2CAA2C;AAC3C,MAAM,WAAW,iBAAiB;IAChC,uCAAuC;IACvC,UAAU,EAAE,2BAA2B,CAAC;IACxC,2BAA2B;IAC3B,OAAO,EAAE,wBAAwB,CAAC;CACnC;AAED,uCAAuC;AACvC,MAAM,WAAW,kBAAkB;IACjC,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,kCAAkC;AAClC,MAAM,MAAM,wBAAwB,GAAG,QAAQ,GAAG,UAAU,GAAG,KAAK,CAAC;AAErE;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;AAEjE,2CAA2C;AAC3C,MAAM,WAAW,eAAe;IAC9B,oEAAoE;IACpE,IAAI,EAAE,wBAAwB,CAAC;IAC/B;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,gFAAgF;AAChF,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,CAAC;AAE7C,2EAA2E;AAC3E,MAAM,WAAW,aAAa;IAC5B,sCAAsC;IACtC,IAAI,EAAE,WAAW,CAAC;IAClB,8EAA8E;IAC9E,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,oEAAoE;IACpE,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,MAAM,CAAC;AAE9C;;;;;;;GAOG;AACH,MAAM,WAAW,uBAAuB;IACtC,gGAAgG;IAChG,WAAW,EAAE,OAAO,CAAC;IACrB,0FAA0F;IAC1F,YAAY,EAAE,OAAO,CAAC;IACtB,sEAAsE;IACtE,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;;OAOG;IACH,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,8DAA8D;IAC9D,OAAO,EAAE,OAAO,CAAC;IACjB,oDAAoD;IACpD,QAAQ,EAAE,OAAO,GAAG,QAAQ,CAAC;CAC9B;AAED;;;;;GAKG;AACH,MAAM,WAAW,wBAAwB;IACvC,iEAAiE;IACjE,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,WAAW,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,wBAAwB;IACvC,yDAAyD;IACzD,OAAO,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,6FAA6F;IAC7F,aAAa,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,cAAc,EAAE,MAAM,CAAC;IACvB,iFAAiF;IACjF,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC1B,2FAA2F;IAC3F,WAAW,EAAE,OAAO,CAAC;IACrB,8DAA8D;IAC9D,YAAY,EAAE,OAAO,CAAC;IACtB,oGAAoG;IACpG,WAAW,EAAE,OAAO,CAAC;IACrB,mCAAmC;IACnC,SAAS,EAAE,oBAAoB,CAAC;IAChC,2CAA2C;IAC3C,YAAY,EAAE,uBAAuB,CAAC;IACtC,sCAAsC;IACtC,aAAa,EAAE,wBAAwB,CAAC;IACxC;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B;;;;;;;;;OASG;IACH,aAAa,CAAC,EAAE,wBAAwB,CAAC;CAC1C;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,uCAAuC;IACvC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,8BAA8B;IAC9B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAMD;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,MAAM,QAAQ,GAChB,YAAY,GACZ,eAAe,GACf,YAAY,GACZ,SAAS,GACT,WAAW;AACb,gEAAgE;GAC9D,QAAQ;AACV,uFAAuF;GACrF,aAAa,CAAC;AAElB;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oDAAoD;IACpD,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAa;IAC5B,4CAA4C;IAC5C,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,SAAS;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC7C;;;;OAIG;IACH,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;CAClD;AAED,iCAAiC;AACjC,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE/C,4CAA4C;AAC5C,MAAM,WAAW,gBAAgB;IAC/B,gEAAgE;IAChE,OAAO,EAAE,OAAO,CAAC;IACjB,mGAAmG;IACnG,IAAI,EAAE,cAAc,CAAC;IACrB,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,WAAW,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,WAAW,EAAE,QAAQ,GAAG,cAAc,GAAG,SAAS,CAAC;CACpD;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;;;;OAQG;IACH,4BAA4B,CAAC,EAAE,MAAM,CAAC;CACvC;AAED,gDAAgD;AAChD,MAAM,WAAW,UAAU;IACzB,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,MAAM,EAAE,YAAY,CAAC;IACrB,0DAA0D;IAC1D,MAAM,EAAE,YAAY,CAAC;IACrB,oDAAoD;IACpD,SAAS,EAAE,eAAe,CAAC;IAC3B,qDAAqD;IACrD,OAAO,EAAE,aAAa,CAAC;IACvB,yDAAyD;IACzD,WAAW,EAAE,iBAAiB,CAAC;IAC/B,2CAA2C;IAC3C,YAAY,EAAE,kBAAkB,CAAC;IACjC,uCAAuC;IACvC,SAAS,EAAE,eAAe,CAAC;IAC3B,yDAAyD;IACzD,OAAO,EAAE,aAAa,CAAC;IACvB,yDAAyD;IACzD,OAAO,EAAE,aAAa,CAAC;IACvB;;;;OAIG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B;;;;OAIG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B;;;;OAIG;IACH,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB;;;;;;;;;OASG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;;;;OAQG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,KAAK,CAAC;AAE5C,qDAAqD;AACrD,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,IAAI,CAAC,EAAE,eAAe,CAAC;CACxB;AAED,gDAAgD;AAChD,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,MAAM,CAAC,EAAE,oBAAoB,CAAC;CAC/B;AAED,yCAAyC;AACzC,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE5E,+CAA+C;AAC/C,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,wCAAwC;IACxC,KAAK,EAAE,CAAC,CAAC;IACT,yDAAyD;IACzD,MAAM,EAAE,YAAY,CAAC;CACtB"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure credential-parsing helpers for the CLEO LLM layer.
|
|
3
|
+
*
|
|
4
|
+
* This module is a LEAF — it has NO imports from @cleocode/core or any
|
|
5
|
+
* other runtime package. It exists so adapter packages can parse Claude Code
|
|
6
|
+
* OAuth credentials without creating a circular dependency on @cleocode/core.
|
|
7
|
+
*
|
|
8
|
+
* ## What lives here
|
|
9
|
+
* - `ClaudeCodeCredential` — shape of `~/.claude/.credentials.json`
|
|
10
|
+
* - `parseClaudeCodeCredentials()` — pure JSON parser + expiry check
|
|
11
|
+
*
|
|
12
|
+
* ## What does NOT live here
|
|
13
|
+
* - Filesystem reads (those belong in core/llm/credentials.ts)
|
|
14
|
+
* - Caching (belongs in core)
|
|
15
|
+
* - Multi-tier resolution (belongs in core)
|
|
16
|
+
*
|
|
17
|
+
* @module credentials
|
|
18
|
+
* @task T9307
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* The `claudeAiOauth` block found inside `~/.claude/.credentials.json`.
|
|
22
|
+
*/
|
|
23
|
+
export interface ClaudeCodeOAuthBlock {
|
|
24
|
+
/** Short-lived bearer token for Anthropic API calls. */
|
|
25
|
+
accessToken: string;
|
|
26
|
+
/** Unix-millisecond timestamp after which the token is invalid. Optional. */
|
|
27
|
+
expiresAt?: number;
|
|
28
|
+
/** Refresh token for obtaining new access tokens. Optional. */
|
|
29
|
+
refreshToken?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Parsed result returned by `parseClaudeCodeCredentials()`.
|
|
33
|
+
*
|
|
34
|
+
* All fields mirror `ClaudeCodeOAuthBlock` but `accessToken` is always
|
|
35
|
+
* present (a null return indicates the file was absent, malformed, or expired).
|
|
36
|
+
*/
|
|
37
|
+
export interface ParsedClaudeCodeCredential {
|
|
38
|
+
/** Bearer access token for the Anthropic API. */
|
|
39
|
+
accessToken: string;
|
|
40
|
+
/** Expiry as a Unix millisecond timestamp, if provided. */
|
|
41
|
+
expiresAt?: number;
|
|
42
|
+
/** Refresh token, if present in the credentials file. */
|
|
43
|
+
refreshToken?: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Parse the contents of `~/.claude/.credentials.json` and extract the OAuth
|
|
47
|
+
* credential block.
|
|
48
|
+
*
|
|
49
|
+
* This is a **pure** helper: it accepts a `Buffer | string` (the raw file
|
|
50
|
+
* content) and returns the parsed credential or `null`. It never reads the
|
|
51
|
+
* filesystem or accesses environment variables.
|
|
52
|
+
*
|
|
53
|
+
* Expiry is checked using `Date.now()` — tokens whose `expiresAt` is in the
|
|
54
|
+
* past are treated as absent and `null` is returned.
|
|
55
|
+
*
|
|
56
|
+
* @param buf - Raw UTF-8 contents of the credentials file.
|
|
57
|
+
* @returns Parsed credential object, or `null` when the file is malformed,
|
|
58
|
+
* the OAuth block is absent, or the token is expired.
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```ts
|
|
62
|
+
* import { readFileSync } from 'node:fs';
|
|
63
|
+
* import { join } from 'node:path';
|
|
64
|
+
* import { homedir } from 'node:os';
|
|
65
|
+
* import { parseClaudeCodeCredentials } from '@cleocode/contracts';
|
|
66
|
+
*
|
|
67
|
+
* const raw = readFileSync(join(homedir(), '.claude', '.credentials.json'));
|
|
68
|
+
* const cred = parseClaudeCodeCredentials(raw);
|
|
69
|
+
* if (cred) {
|
|
70
|
+
* console.log('token:', cred.accessToken);
|
|
71
|
+
* }
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
export declare function parseClaudeCodeCredentials(buf: Buffer | string): ParsedClaudeCodeCredential | null;
|
|
75
|
+
//# sourceMappingURL=credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAMH;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IACzC,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,MAAM,GAAG,MAAM,GACnB,0BAA0B,GAAG,IAAI,CA2BnC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure credential-parsing helpers for the CLEO LLM layer.
|
|
3
|
+
*
|
|
4
|
+
* This module is a LEAF — it has NO imports from @cleocode/core or any
|
|
5
|
+
* other runtime package. It exists so adapter packages can parse Claude Code
|
|
6
|
+
* OAuth credentials without creating a circular dependency on @cleocode/core.
|
|
7
|
+
*
|
|
8
|
+
* ## What lives here
|
|
9
|
+
* - `ClaudeCodeCredential` — shape of `~/.claude/.credentials.json`
|
|
10
|
+
* - `parseClaudeCodeCredentials()` — pure JSON parser + expiry check
|
|
11
|
+
*
|
|
12
|
+
* ## What does NOT live here
|
|
13
|
+
* - Filesystem reads (those belong in core/llm/credentials.ts)
|
|
14
|
+
* - Caching (belongs in core)
|
|
15
|
+
* - Multi-tier resolution (belongs in core)
|
|
16
|
+
*
|
|
17
|
+
* @module credentials
|
|
18
|
+
* @task T9307
|
|
19
|
+
*/
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
// Parser
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
/**
|
|
24
|
+
* Parse the contents of `~/.claude/.credentials.json` and extract the OAuth
|
|
25
|
+
* credential block.
|
|
26
|
+
*
|
|
27
|
+
* This is a **pure** helper: it accepts a `Buffer | string` (the raw file
|
|
28
|
+
* content) and returns the parsed credential or `null`. It never reads the
|
|
29
|
+
* filesystem or accesses environment variables.
|
|
30
|
+
*
|
|
31
|
+
* Expiry is checked using `Date.now()` — tokens whose `expiresAt` is in the
|
|
32
|
+
* past are treated as absent and `null` is returned.
|
|
33
|
+
*
|
|
34
|
+
* @param buf - Raw UTF-8 contents of the credentials file.
|
|
35
|
+
* @returns Parsed credential object, or `null` when the file is malformed,
|
|
36
|
+
* the OAuth block is absent, or the token is expired.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* import { readFileSync } from 'node:fs';
|
|
41
|
+
* import { join } from 'node:path';
|
|
42
|
+
* import { homedir } from 'node:os';
|
|
43
|
+
* import { parseClaudeCodeCredentials } from '@cleocode/contracts';
|
|
44
|
+
*
|
|
45
|
+
* const raw = readFileSync(join(homedir(), '.claude', '.credentials.json'));
|
|
46
|
+
* const cred = parseClaudeCodeCredentials(raw);
|
|
47
|
+
* if (cred) {
|
|
48
|
+
* console.log('token:', cred.accessToken);
|
|
49
|
+
* }
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export function parseClaudeCodeCredentials(buf) {
|
|
53
|
+
try {
|
|
54
|
+
const text = typeof buf === 'string' ? buf : buf.toString('utf-8');
|
|
55
|
+
const raw = JSON.parse(text);
|
|
56
|
+
const oauth = raw['claudeAiOauth'];
|
|
57
|
+
if (!oauth || typeof oauth !== 'object')
|
|
58
|
+
return null;
|
|
59
|
+
const block = oauth;
|
|
60
|
+
const accessToken = block['accessToken'];
|
|
61
|
+
if (typeof accessToken !== 'string' || !accessToken.trim())
|
|
62
|
+
return null;
|
|
63
|
+
const expiresAt = typeof block['expiresAt'] === 'number' ? block['expiresAt'] : undefined;
|
|
64
|
+
if (expiresAt !== undefined && Date.now() > expiresAt)
|
|
65
|
+
return null;
|
|
66
|
+
const refreshToken = typeof block['refreshToken'] === 'string' && block['refreshToken'].trim()
|
|
67
|
+
? block['refreshToken']
|
|
68
|
+
: undefined;
|
|
69
|
+
return {
|
|
70
|
+
accessToken: accessToken.trim(),
|
|
71
|
+
...(expiresAt !== undefined ? { expiresAt } : {}),
|
|
72
|
+
...(refreshToken !== undefined ? { refreshToken } : {}),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAiCH,8EAA8E;AAC9E,SAAS;AACT,8EAA8E;AAE9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,0BAA0B,CACxC,GAAoB;IAEpB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACnE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;QACxD,MAAM,KAAK,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAErD,MAAM,KAAK,GAAG,KAAgC,CAAC;QAC/C,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;QACzC,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;YAAE,OAAO,IAAI,CAAC;QAExE,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC,WAAW,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1F,IAAI,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YAAE,OAAO,IAAI,CAAC;QAEnE,MAAM,YAAY,GAChB,OAAO,KAAK,CAAC,cAAc,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE;YACvE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;YACvB,CAAC,CAAC,SAAS,CAAC;QAEhB,OAAO;YACL,WAAW,EAAE,WAAW,CAAC,IAAI,EAAE;YAC/B,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -24,8 +24,10 @@ export { BRANCH_LOCK_ERROR_CODES, ISOLATION_ENV_KEYS, provisionIsolatedShell, va
|
|
|
24
24
|
export type { AdapterCapabilities } from './capabilities.js';
|
|
25
25
|
export type { BatchParseResult, CodeSymbol, CodeSymbolKind, ParseResult, } from './code-symbol.js';
|
|
26
26
|
export type { Conduit, ConduitConfig, ConduitMessage, ConduitSendOptions, ConduitSendResult, ConduitState, ConduitStateChange, ConduitTopicPublishOptions, ConduitTopicSubscribeOptions, ConduitUnsubscribe, } from './conduit.js';
|
|
27
|
-
export type { BackupConfig, BrainConfig, BrainEmbeddingConfig, BrainLlmExtractionConfig, BrainMemoryBridgeConfig, BrainSummarizationConfig, BrainTieringConfig, ClaudeProviderConfig, ClaudeSpawnMode, CleoConfig, ConfigSource,
|
|
27
|
+
export type { BackupConfig, BrainConfig, BrainEmbeddingConfig, BrainLlmExtractionConfig, BrainMemoryBridgeConfig, BrainSummarizationConfig, BrainTieringConfig, ClaudeProviderConfig, ClaudeSpawnMode, CleoConfig, ConfigSource, DateFormat, DecisionsConfig, DepsRequiredAt, EnforcementProfile, HierarchyConfig, LifecycleConfig, LifecycleEnforcementMode, LlmConfig, LlmDefaultConfig, LlmProviderEntry, LlmProviderTransport, LlmRoleConfig, LoggingConfig, LogLevel, MemoryBridgeMode, OutputConfig, OutputFormat, ProviderConfig, ResolvedValue, RoleName, SessionConfig, SessionSummaryInput, SharingConfig, SharingMode, SignalDockConfig, SignalDockMode, } from './config.js';
|
|
28
28
|
export type { AdapterContextMonitorProvider } from './context-monitor.js';
|
|
29
|
+
export type { ClaudeCodeOAuthBlock, ParsedClaudeCodeCredential, } from './credentials.js';
|
|
30
|
+
export { parseClaudeCodeCredentials } from './credentials.js';
|
|
29
31
|
export type { ArchiveFields, ArchiveFile, DataAccessor, DataAccessorAgentInstance, QueryTasksResult, TaskFieldUpdates, TaskQueryFilters, TransactionAccessor, } from './data-accessor.js';
|
|
30
32
|
export type { DependencyCategory, DependencyCheckResult, DependencyReport, DependencySpec, } from './dependency.js';
|
|
31
33
|
export type { AdapterManifest, DetectionPattern } from './discovery.js';
|
|
@@ -48,9 +50,13 @@ export { isGatewayEnvelope, isLafsError, isLafsSuccess, } from './lafs.js';
|
|
|
48
50
|
export type { ClassifiedError, FailoverReason } from './llm/failover-reason.js';
|
|
49
51
|
export type { AggregatedUsage, ExecutionEvent, ExecutionRequest, ExecutorFactoryOptions, LlmExecutor, LlmExecutorFactory, LlmSession, LlmSessionFactory, NormalizedDelta, RetryPolicy, SendOptions, SessionFactoryOptions, ToolCall, TransportContext, } from './llm/interfaces.js';
|
|
50
52
|
export type { NormalizedResponse, NormalizedToolCall, NormalizedUsage, TransportMessage, TransportRequest, TransportTool, } from './llm/normalized-response.js';
|
|
53
|
+
export type { OAuthMode, OAuthTokens, PkceFlowConfig, ProviderOAuthConfig } from './llm/oauth.js';
|
|
54
|
+
export type { PluginLlmComplete, PluginLlmContext } from './llm/plugin-llm.js';
|
|
55
|
+
export { PluginLlmError, PluginModelGateError } from './llm/plugin-llm.js';
|
|
51
56
|
export type { ApiMode, BuiltinProviderId, ProviderId } from './llm/provider-id.js';
|
|
52
57
|
export type { ProviderPlugin, ProviderPluginApi, ProviderProfile, } from './llm/provider-profile.js';
|
|
53
58
|
export type { ResolvedCredential } from './llm/resolved-credential.js';
|
|
59
|
+
export type { CompressedContext, ContextEngine } from './memory/context-engine.js';
|
|
54
60
|
export type { BridgeDecision, BridgeLearning, BridgeObservation, BridgePattern, DispatchTrace, MemoryBridgeConfig, MemoryBridgeContent, SessionSummary, } from './memory.js';
|
|
55
61
|
export type { Contract, ContractCompatibilityMatrix, ContractExtractionResult, ContractMatch, ContractMatchLevel, ContractTaskLink, GrpcContract, HttpContract, TopicContract, } from './nexus-contract-ops.js';
|
|
56
62
|
export type { BlastRadiusSummary, BrainMemoryRef, BrainRiskNote, CodeAnchorResult, CodeReasonTrace, ConduitThreadRef, DecisionRef, ImpactFullReport, LbTaskRef, NexusContext, NexusEdgeRef, NexusNodeAnchor, PlasticityMeasure, ProposalRef, ReasonTraceStep, RiskTier, SymbolFullContext, SymbolImpactEntry, TaskCodeImpact, TasksForNodeEntry, } from './nexus-living-brain-ops.js';
|
|
@@ -63,7 +69,7 @@ export type { ConduitInboxMessage, ConduitListenParams, ConduitListenResult, Con
|
|
|
63
69
|
export type { ApplyInsightsParams, ApplyInsightsResult, DialecticInsights, DialecticTurn, EvaluateDialecticParams, EvaluateDialecticResult, } from './operations/dialectic.js';
|
|
64
70
|
export * as ops from './operations/index.js';
|
|
65
71
|
export type { Gate, LifecycleCheckParams, LifecycleCheckResult, LifecycleGateFailParams, LifecycleGateFailResult, LifecycleGatePassParams, LifecycleGatePassResult, LifecycleGatesParams, LifecycleGatesResult, LifecycleHistoryEntry, LifecycleHistoryParams, LifecycleHistoryResult, LifecyclePrerequisitesParams, LifecyclePrerequisitesResult, LifecycleProgressParams, LifecycleProgressResult, LifecycleResetParams, LifecycleResetResult, LifecycleSkipParams, LifecycleSkipResult, LifecycleStage, LifecycleStatusParams, LifecycleStatusResult, StageRecord, } from './operations/lifecycle.js';
|
|
66
|
-
export type { AuthTypeWire, CredentialResultWire, CredentialSourceWire, CredentialsStoreStrategyWire, LlmAddParams, LlmAddResult, LlmListParams, LlmListResult, LlmProfileParams, LlmProfileResult, LlmRemoveParams, LlmRemoveResult, LlmStoredCredentialView, LlmTestParams, LlmTestResult, LlmUseParams, LlmUseResult, LlmWhoamiEntry, LlmWhoamiParams, LlmWhoamiResult, ModelTransport, ResolutionSource, ResolvedLLM, ResolveLLMForRoleOptions, StoredAuthTypeWire, } from './operations/llm.js';
|
|
72
|
+
export type { AuthTypeWire, CredentialResultWire, CredentialSourceWire, CredentialsStoreStrategyWire, LlmAddParams, LlmAddResult, LlmListParams, LlmListResult, LlmProfileParams, LlmProfileResult, LlmProviderSourceWire, LlmProviderStatusEntry, LlmRemoveParams, LlmRemoveResult, LlmStatusResult, LlmStoredCredentialView, LlmTestParams, LlmTestResult, LlmUseParams, LlmUseResult, LlmWhoamiEntry, LlmWhoamiParams, LlmWhoamiResult, ModelTransport, ResolutionSource, ResolvedLLM, ResolveLLMForRoleOptions, StoredAuthTypeWire, } from './operations/llm.js';
|
|
67
73
|
export type { PassMask, RetrievalActiveTask, RetrievalBundle, RetrievalDecision, RetrievalLearning, RetrievalObservation, RetrievalPattern, RetrievalRequest, RetrievalTokenCounts, SigilCard, } from './operations/memory.js';
|
|
68
74
|
export type { BrainPageNodeEntry, NexusAugmentParams, NexusAugmentResult, NexusAugmentSymbol, NexusBlockersShowParams, NexusBlockersShowResult, NexusBrainAnchorsParams, NexusBrainAnchorsResult, NexusClustersParams, NexusClustersResult, NexusColdSymbol, NexusColdSymbolsParams, NexusColdSymbolsResult, NexusCommunityEntry, NexusConduitScanParams, NexusConduitScanResult, NexusContextNode, NexusContextParams, NexusContextProcess, NexusContextRelation, NexusContextResult, NexusContextSourceContent, NexusContractsLinkTasksParams, NexusContractsLinkTasksResult, NexusContractsShowParams, NexusContractsShowResult, NexusContractsSyncParams, NexusContractsSyncResult, NexusDepsEntry, NexusDepsParams, NexusDepsResult, NexusDiffHealth, NexusDiffParams, NexusDiffResult, NexusDiscoverHit, NexusDiscoverParams, NexusDiscoverResult, NexusFlowEntry, NexusFlowsParams, NexusFlowsResult, NexusFullContextParams, NexusFullContextResult, NexusGraphEdge, NexusGraphNode, NexusGraphParams, NexusGraphResult, NexusHealthStatus, NexusHotNode, NexusHotNodesParams, NexusHotNodesResult, NexusHotPath, NexusHotPathsParams, NexusHotPathsResult, NexusImpactAffectedNode, NexusImpactFullParams, NexusImpactFullResult, NexusImpactParams, NexusImpactResult, NexusInitParams, NexusInitResult, NexusListParams, NexusListResult, NexusOps, NexusOrphanEntry, NexusOrphansListParams, NexusOrphansListResult, NexusPathShowParams, NexusPathShowResult, NexusPermissionLevel, NexusPermissionSetParams, NexusPermissionSetResult, NexusProjectRecord, NexusProjectStats, NexusProjectsCleanParams, NexusProjectsCleanResult, NexusProjectsListParams, NexusProjectsListResult, NexusProjectsRegisterParams, NexusProjectsRegisterResult, NexusProjectsRemoveParams, NexusProjectsRemoveResult, NexusProjectsScanParams, NexusProjectsScanResult, NexusQueryCteParams, NexusQueryCteResult, NexusReconcileParams, NexusReconcileResult, NexusRefreshBridgeParams, NexusRefreshBridgeResult, NexusRegisterParams, NexusRegisterResult, NexusResolveParams, NexusResolveResult, NexusRouteMapParams, NexusRouteMapResult, NexusScanAutoRegisterError, NexusSearchCodeParams, NexusSearchCodeResult, NexusSearchHit, NexusSearchParams, NexusSearchResult, NexusShapeCheckParams, NexusShapeCheckResult, NexusShareSnapshotExportParams, NexusShareSnapshotExportResult, NexusShareSnapshotImportParams, NexusShareSnapshotImportResult, NexusShareStatusParams, NexusShareStatusResult, NexusSharingStatus, NexusShowParams, NexusShowResult, NexusSigilListParams, NexusSigilListResult, NexusSigilSyncParams, NexusSigilSyncResult, NexusStatusParams, NexusStatusResult, NexusSyncParams, NexusSyncResult, NexusTaskFootprintParams, NexusTaskFootprintResult, NexusTaskRef, NexusTaskSymbolsParams, NexusTaskSymbolsResult, NexusTopEntriesParams, NexusTopEntriesResult, NexusTopEntry, NexusTransferManifest, NexusTransferManifestEntry, NexusTransferMode, NexusTransferOnConflict, NexusTransferOnMissingDep, NexusTransferParams, NexusTransferPreviewParams, NexusTransferPreviewResult, NexusTransferResult, NexusTransferScope, NexusUnregisterParams, NexusUnregisterResult, NexusWhyParams, NexusWhyResult, NexusWikiParams, } from './operations/nexus.js';
|
|
69
75
|
export type { MetaWithNexusScope, NexusBindingSource, NexusEffect, NexusOperationDescriptor, NexusScope, NexusScopeMeta, NexusStore, ScopeBinding, SuggestedNextOp, } from './operations/nexus-scope.js';
|