@sentropic/llm-mesh 0.34.0 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -0
- package/dist/enrollment/contracts.d.ts +1 -1
- package/dist/enrollment/contracts.d.ts.map +1 -1
- package/dist/node/claude-code-cli-runner.d.ts +56 -0
- package/dist/node/claude-code-cli-runner.d.ts.map +1 -0
- package/dist/node/claude-code-cli-runner.js +590 -0
- package/dist/node/claude-code-cli-runner.js.map +1 -0
- package/dist/node/claude-code-cli-wire.d.ts +55 -0
- package/dist/node/claude-code-cli-wire.d.ts.map +1 -0
- package/dist/node/claude-code-cli-wire.js +144 -0
- package/dist/node/claude-code-cli-wire.js.map +1 -0
- package/dist/node/cli/bin.d.ts +3 -0
- package/dist/node/cli/bin.d.ts.map +1 -0
- package/dist/node/cli/bin.js +15 -0
- package/dist/node/cli/bin.js.map +1 -0
- package/dist/node/cli/enroll-args.d.ts +41 -0
- package/dist/node/cli/enroll-args.d.ts.map +1 -0
- package/dist/node/cli/enroll-args.js +118 -0
- package/dist/node/cli/enroll-args.js.map +1 -0
- package/dist/node/cli/enroll-cli.d.ts +4 -0
- package/dist/node/cli/enroll-cli.d.ts.map +1 -0
- package/dist/node/cli/enroll-cli.js +124 -0
- package/dist/node/cli/enroll-cli.js.map +1 -0
- package/dist/node/cli/enroll-command.d.ts +3 -0
- package/dist/node/cli/enroll-command.d.ts.map +1 -0
- package/dist/node/cli/enroll-command.js +87 -0
- package/dist/node/cli/enroll-command.js.map +1 -0
- package/dist/node/index.d.ts +6 -1
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +4 -1
- package/dist/node/index.js.map +1 -1
- package/dist/node/keyring/encrypted-file-keyring.d.ts +7 -1
- package/dist/node/keyring/encrypted-file-keyring.d.ts.map +1 -1
- package/dist/node/keyring/encrypted-file-keyring.js +46 -1
- package/dist/node/keyring/encrypted-file-keyring.js.map +1 -1
- package/dist/service/local-account-transport-service.js +1 -1
- package/dist/service/local-account-transport-service.js.map +1 -1
- package/dist/transport/claude-code-runtime-client.d.ts +24 -0
- package/dist/transport/claude-code-runtime-client.d.ts.map +1 -1
- package/dist/transport/claude-code-runtime-client.js +66 -3
- package/dist/transport/claude-code-runtime-client.js.map +1 -1
- package/package.json +4 -1
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { ClaudeCodeCliEvent, ClaudeCodeCliRequest } from '../transport/claude-code-runtime-client.js';
|
|
2
|
+
/** Deterministic prompt rendering; pinned by unit tests with a fake CLI. */
|
|
3
|
+
export declare const renderClaudeCodeCliPrompt: (request: ClaudeCodeCliRequest) => string;
|
|
4
|
+
export interface QuotaDiagnosis {
|
|
5
|
+
readonly quota: boolean;
|
|
6
|
+
readonly retryAfterMs?: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Quota-relevant text out of a CLI error payload: CLI-owned message fields
|
|
10
|
+
* only (`result`, `message`, `error`, string or numeric `code`). Numeric
|
|
11
|
+
* telemetry beside them (token usage, costs) is never signal, so a bare
|
|
12
|
+
* `429` buried in `usage` cannot trip the quota circuit.
|
|
13
|
+
*/
|
|
14
|
+
export declare const extractQuotaText: (payload: unknown) => string | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Append a chunk to a byte-capped stderr tail. A non-positive cap keeps
|
|
17
|
+
* nothing (the caller still drains the pipe, but stores no bytes).
|
|
18
|
+
*/
|
|
19
|
+
export declare const appendCappedTail: (current: Buffer, chunk: Uint8Array, capBytes: number) => Buffer;
|
|
20
|
+
/** Match quota prose in CLI-owned text only (stderr, error payloads). */
|
|
21
|
+
export declare const diagnoseClaudeCodeQuota: (text: unknown) => QuotaDiagnosis;
|
|
22
|
+
export type ClaudeCodeLineOutcome = {
|
|
23
|
+
type: 'system_init';
|
|
24
|
+
init: {
|
|
25
|
+
tools?: unknown;
|
|
26
|
+
mcpServers?: unknown;
|
|
27
|
+
};
|
|
28
|
+
} | {
|
|
29
|
+
type: 'text';
|
|
30
|
+
text: string;
|
|
31
|
+
} | {
|
|
32
|
+
type: 'tool_use';
|
|
33
|
+
event: Extract<ClaudeCodeCliEvent, {
|
|
34
|
+
type: 'tool_use';
|
|
35
|
+
}>;
|
|
36
|
+
} | {
|
|
37
|
+
type: 'stop_reason';
|
|
38
|
+
reason: unknown;
|
|
39
|
+
} | {
|
|
40
|
+
type: 'result';
|
|
41
|
+
result: {
|
|
42
|
+
finishReason: 'stop' | 'length' | 'tool_calls';
|
|
43
|
+
usage?: {
|
|
44
|
+
inputTokens?: number;
|
|
45
|
+
outputTokens?: number;
|
|
46
|
+
};
|
|
47
|
+
resultText?: string;
|
|
48
|
+
};
|
|
49
|
+
} | {
|
|
50
|
+
type: 'error_payload';
|
|
51
|
+
payload: unknown;
|
|
52
|
+
};
|
|
53
|
+
/** Normalize one stream-json line; unknown and noise lines yield nothing. */
|
|
54
|
+
export declare const parseClaudeCodeLine: (line: string) => ClaudeCodeLineOutcome[];
|
|
55
|
+
//# sourceMappingURL=claude-code-cli-wire.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code-cli-wire.d.ts","sourceRoot":"","sources":["../../src/node/claude-code-cli-wire.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,4CAA4C,CAAC;AAEpD,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,YAAa,oBAAoB,KAAG,MAezE,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAkBD;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,YAAa,OAAO,KAAG,MAAM,GAAG,SAW5D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,YAAa,MAAM,SAAS,UAAU,YAAY,MAAM,KAAG,MAIvF,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,uBAAuB,SAAU,OAAO,KAAG,cAKvD,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAAE,GACxE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC,kBAAkB,EAAE;QAAE,IAAI,EAAE,UAAU,CAAA;KAAE,CAAC,CAAA;CAAE,GAC9E;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE;QAAE,YAAY,EAAE,MAAM,GAAG,QAAQ,GAAG,YAAY,CAAC;QACzE,KAAK,CAAC,EAAE;YAAE,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,YAAY,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAClF;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AAQhD,6EAA6E;AAC7E,eAAO,MAAM,mBAAmB,SAAU,MAAM,KAAG,qBAAqB,EAgDvE,CAAC"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
// @sentropic/llm-mesh/node/claude-code-cli-wire.ts
|
|
2
|
+
//
|
|
3
|
+
// Pure stream-json wire for the `claude` CLI host: deterministic prompt
|
|
4
|
+
// rendering, quota prose diagnosis, and line normalization to
|
|
5
|
+
// ClaudeCodeCliEvent outcomes. No process, clock, or network access —
|
|
6
|
+
// safe to unit-test without a CLI.
|
|
7
|
+
/** Deterministic prompt rendering; pinned by unit tests with a fake CLI. */
|
|
8
|
+
export const renderClaudeCodeCliPrompt = (request) => {
|
|
9
|
+
const lines = [];
|
|
10
|
+
for (const message of request.messages) {
|
|
11
|
+
for (const part of message.content) {
|
|
12
|
+
if (part.type === 'text') {
|
|
13
|
+
lines.push(`${message.role}: ${part.text}`);
|
|
14
|
+
}
|
|
15
|
+
else if (part.type === 'tool_use') {
|
|
16
|
+
lines.push(`${message.role} tool_use ${part.name} ${part.id}: ${JSON.stringify(part.input)}`);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
lines.push(`${message.role} tool_result ${part.tool_use_id}: ${part.content}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
if (message.content.length === 0)
|
|
23
|
+
lines.push(`${message.role}:`);
|
|
24
|
+
}
|
|
25
|
+
return `${lines.join('\n')}\n`;
|
|
26
|
+
};
|
|
27
|
+
const QUOTA_PATTERN = /5-hour|usage.?limit|rate.?limit|too many requests|\b429\b|quota|overloaded/i;
|
|
28
|
+
const STRUCTURED_QUOTA_KEYS = ['result', 'message', 'error'];
|
|
29
|
+
const RETRY_AFTER_PATTERN = /(\d+)\s*(milliseconds?|seconds?|minutes?|hours?)/i;
|
|
30
|
+
const readRetryAfterMs = (text) => {
|
|
31
|
+
const match = RETRY_AFTER_PATTERN.exec(text);
|
|
32
|
+
if (!match)
|
|
33
|
+
return undefined;
|
|
34
|
+
const amount = Number(match[1]);
|
|
35
|
+
const unit = match[2].toLowerCase();
|
|
36
|
+
if (!Number.isSafeInteger(amount) || amount < 0)
|
|
37
|
+
return undefined;
|
|
38
|
+
const factor = unit.startsWith('millis') ? 1 : unit.startsWith('s') ? 1_000
|
|
39
|
+
: unit.startsWith('m') ? 60_000 : 3_600_000;
|
|
40
|
+
const ms = amount * factor;
|
|
41
|
+
return Number.isSafeInteger(ms) ? ms : undefined;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Quota-relevant text out of a CLI error payload: CLI-owned message fields
|
|
45
|
+
* only (`result`, `message`, `error`, string or numeric `code`). Numeric
|
|
46
|
+
* telemetry beside them (token usage, costs) is never signal, so a bare
|
|
47
|
+
* `429` buried in `usage` cannot trip the quota circuit.
|
|
48
|
+
*/
|
|
49
|
+
export const extractQuotaText = (payload) => {
|
|
50
|
+
if (!isRecord(payload))
|
|
51
|
+
return undefined;
|
|
52
|
+
const parts = [];
|
|
53
|
+
for (const key of STRUCTURED_QUOTA_KEYS) {
|
|
54
|
+
const value = payload[key];
|
|
55
|
+
if (typeof value === 'string' && value.length > 0)
|
|
56
|
+
parts.push(value);
|
|
57
|
+
}
|
|
58
|
+
const code = payload['code'];
|
|
59
|
+
if (typeof code === 'string' && code.length > 0)
|
|
60
|
+
parts.push(code);
|
|
61
|
+
else if (typeof code === 'number' && Number.isSafeInteger(code))
|
|
62
|
+
parts.push(String(code));
|
|
63
|
+
return parts.length > 0 ? parts.join(' ') : undefined;
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Append a chunk to a byte-capped stderr tail. A non-positive cap keeps
|
|
67
|
+
* nothing (the caller still drains the pipe, but stores no bytes).
|
|
68
|
+
*/
|
|
69
|
+
export const appendCappedTail = (current, chunk, capBytes) => {
|
|
70
|
+
if (capBytes <= 0)
|
|
71
|
+
return Buffer.from('');
|
|
72
|
+
const next = Buffer.concat([current, Buffer.from(chunk)]);
|
|
73
|
+
return next.length <= capBytes ? next : Buffer.from(next.subarray(next.length - capBytes));
|
|
74
|
+
};
|
|
75
|
+
/** Match quota prose in CLI-owned text only (stderr, error payloads). */
|
|
76
|
+
export const diagnoseClaudeCodeQuota = (text) => {
|
|
77
|
+
if (typeof text !== 'string' || text.length === 0)
|
|
78
|
+
return { quota: false };
|
|
79
|
+
if (!QUOTA_PATTERN.test(text))
|
|
80
|
+
return { quota: false };
|
|
81
|
+
const retryAfterMs = readRetryAfterMs(text);
|
|
82
|
+
return retryAfterMs === undefined ? { quota: true } : { quota: true, retryAfterMs };
|
|
83
|
+
};
|
|
84
|
+
const isRecord = (value) => !!value && typeof value === 'object' && !Array.isArray(value);
|
|
85
|
+
const safeInt = (value) => typeof value === 'number' && Number.isSafeInteger(value) && value >= 0 ? value : undefined;
|
|
86
|
+
/** Normalize one stream-json line; unknown and noise lines yield nothing. */
|
|
87
|
+
export const parseClaudeCodeLine = (line) => {
|
|
88
|
+
let parsed;
|
|
89
|
+
try {
|
|
90
|
+
parsed = JSON.parse(line);
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return [];
|
|
94
|
+
}
|
|
95
|
+
if (!isRecord(parsed) || typeof parsed.type !== 'string')
|
|
96
|
+
return [];
|
|
97
|
+
if (parsed.type === 'system' && parsed.subtype === 'init') {
|
|
98
|
+
const init = {};
|
|
99
|
+
if ('tools' in parsed)
|
|
100
|
+
init.tools = parsed['tools'];
|
|
101
|
+
if ('mcp_servers' in parsed)
|
|
102
|
+
init.mcpServers = parsed['mcp_servers'];
|
|
103
|
+
else if ('mcpServers' in parsed)
|
|
104
|
+
init.mcpServers = parsed['mcpServers'];
|
|
105
|
+
return [{ type: 'system_init', init }];
|
|
106
|
+
}
|
|
107
|
+
if (parsed.type === 'assistant') {
|
|
108
|
+
const message = parsed.message;
|
|
109
|
+
if (!isRecord(message) || !Array.isArray(message.content))
|
|
110
|
+
return [];
|
|
111
|
+
const outcomes = [];
|
|
112
|
+
for (const block of message.content) {
|
|
113
|
+
if (!isRecord(block) || typeof block.type !== 'string')
|
|
114
|
+
continue;
|
|
115
|
+
if (block.type === 'text' && typeof block.text === 'string' && block.text.length > 0) {
|
|
116
|
+
outcomes.push({ type: 'text', text: block.text });
|
|
117
|
+
}
|
|
118
|
+
else if (block.type === 'tool_use' && typeof block.id === 'string'
|
|
119
|
+
&& typeof block.name === 'string' && isRecord(block.input)) {
|
|
120
|
+
outcomes.push({ type: 'tool_use',
|
|
121
|
+
event: { type: 'tool_use', id: block.id, name: block.name, input: block.input } });
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (message.stop_reason !== undefined) {
|
|
125
|
+
outcomes.push({ type: 'stop_reason', reason: message.stop_reason });
|
|
126
|
+
}
|
|
127
|
+
return outcomes;
|
|
128
|
+
}
|
|
129
|
+
if (parsed.type === 'result') {
|
|
130
|
+
if (parsed.subtype === 'success' && parsed.is_error !== true) {
|
|
131
|
+
const usage = isRecord(parsed.usage) ? {
|
|
132
|
+
...(safeInt(parsed.usage.input_tokens) !== undefined ? { inputTokens: safeInt(parsed.usage.input_tokens) } : {}),
|
|
133
|
+
...(safeInt(parsed.usage.output_tokens) !== undefined ? { outputTokens: safeInt(parsed.usage.output_tokens) } : {}),
|
|
134
|
+
} : undefined;
|
|
135
|
+
const resultText = typeof parsed.result === 'string' ? parsed.result : undefined;
|
|
136
|
+
return [{ type: 'result', result: { finishReason: 'stop',
|
|
137
|
+
...(usage && Object.keys(usage).length ? { usage } : {}),
|
|
138
|
+
...(resultText !== undefined ? { resultText } : {}) } }];
|
|
139
|
+
}
|
|
140
|
+
return [{ type: 'error_payload', payload: parsed }];
|
|
141
|
+
}
|
|
142
|
+
return [];
|
|
143
|
+
};
|
|
144
|
+
//# sourceMappingURL=claude-code-cli-wire.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code-cli-wire.js","sourceRoot":"","sources":["../../src/node/claude-code-cli-wire.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,EAAE;AACF,wEAAwE;AACxE,8DAA8D;AAC9D,sEAAsE;AACtE,mCAAmC;AAOnC,4EAA4E;AAC5E,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,OAA6B,EAAU,EAAE;IACjF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9C,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBACpC,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,aAAa,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAChG,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,gBAAgB,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC,CAAC;AAOF,MAAM,aAAa,GAAG,6EAA6E,CAAC;AACpG,MAAM,qBAAqB,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAU,CAAC;AACtE,MAAM,mBAAmB,GAAG,mDAAmD,CAAC;AAEhF,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAsB,EAAE;IAC5D,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAClE,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK;QACzE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9C,MAAM,EAAE,GAAG,MAAM,GAAG,MAAM,CAAC;IAC3B,OAAO,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACnD,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAgB,EAAsB,EAAE;IACvE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,GAAG,IAAI,qBAAqB,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,IAAI,GAAY,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC7D,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1F,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACxD,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAe,EAAE,KAAiB,EAAE,QAAgB,EAAU,EAAE;IAC/F,IAAI,QAAQ,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;AAC7F,CAAC,CAAC;AAEF,yEAAyE;AACzE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,IAAa,EAAkB,EAAE;IACvE,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC3E,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACvD,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC5C,OAAO,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;AACtF,CAAC,CAAC;AAWF,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE,CACpE,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAEhE,MAAM,OAAO,GAAG,CAAC,KAAc,EAAsB,EAAE,CACrD,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAE7F,6EAA6E;AAC7E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAA2B,EAAE;IAC3E,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACpE,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;QAC1D,MAAM,IAAI,GAA8C,EAAE,CAAC;QAC3D,IAAI,OAAO,IAAI,MAAM;YAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QACpD,IAAI,aAAa,IAAI,MAAM;YAAE,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;aAChE,IAAI,YAAY,IAAI,MAAM;YAAE,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;QACxE,OAAO,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,OAAO,EAAE,CAAC;QACrE,MAAM,QAAQ,GAA4B,EAAE,CAAC;QAC7C,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAAE,SAAS;YACjE,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrF,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACpD,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;mBAC/D,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7D,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU;oBAC9B,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACvF,CAAC;QACH,CAAC;QACD,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC7D,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACrC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjH,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACrH,CAAC,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,UAAU,GAAG,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;YACjF,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM;wBACtD,GAAG,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACxD,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../../../src/node/cli/bin.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// @sentropic/llm-mesh/node/cli/bin.ts
|
|
3
|
+
//
|
|
4
|
+
// Dedicated executable entry point for the `llm-mesh-enroll` bin
|
|
5
|
+
// (package.json `bin`). It runs unconditionally: npm exposes the bin as a
|
|
6
|
+
// symlink named `llm-mesh-enroll`, so a suffix guard on `argv[1]` would
|
|
7
|
+
// no-op. Library consumers import `run` from `./enroll-cli.js` instead.
|
|
8
|
+
import { argv, exit } from 'node:process';
|
|
9
|
+
import { EXIT_CODES, defaultWriters } from './enroll-args.js';
|
|
10
|
+
import { run } from './enroll-cli.js';
|
|
11
|
+
run(argv.slice(2)).then((code) => exit(code), () => {
|
|
12
|
+
defaultWriters().err(JSON.stringify({ status: 'error', code: EXIT_CODES.probeFailed }));
|
|
13
|
+
exit(EXIT_CODES.probeFailed);
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=bin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../../../src/node/cli/bin.ts"],"names":[],"mappings":";AACA,sCAAsC;AACtC,EAAE;AACF,iEAAiE;AACjE,0EAA0E;AAC1E,wEAAwE;AACxE,wEAAwE;AAExE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAEtC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CACrB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EACpB,GAAG,EAAE;IACH,cAAc,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACxF,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAC/B,CAAC,CACF,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { LocalAccountTransportService } from '../../service/local-account-transport-service.js';
|
|
2
|
+
export declare const EXIT_CODES: {
|
|
3
|
+
readonly ok: 0;
|
|
4
|
+
readonly usage: 2;
|
|
5
|
+
readonly enrollmentFailed: 3;
|
|
6
|
+
readonly accountNotFound: 4;
|
|
7
|
+
readonly keyringKey: 5;
|
|
8
|
+
readonly probeFailed: 6;
|
|
9
|
+
readonly billingNotConfigured: 7;
|
|
10
|
+
};
|
|
11
|
+
export interface CliWriters {
|
|
12
|
+
out: (line: string) => void;
|
|
13
|
+
err: (line: string) => void;
|
|
14
|
+
}
|
|
15
|
+
export interface EnrollCliDeps {
|
|
16
|
+
fetchFn?: typeof fetch;
|
|
17
|
+
writers?: CliWriters;
|
|
18
|
+
env?: Record<string, string | undefined>;
|
|
19
|
+
}
|
|
20
|
+
export interface ParsedArgs {
|
|
21
|
+
command: 'enroll' | 'probe' | 'help';
|
|
22
|
+
provider: string;
|
|
23
|
+
keyringDir?: string;
|
|
24
|
+
keyringKeyEnv?: string;
|
|
25
|
+
ownerScope?: string;
|
|
26
|
+
label?: string;
|
|
27
|
+
account?: string;
|
|
28
|
+
model?: string;
|
|
29
|
+
effort?: string;
|
|
30
|
+
maxAttempts?: number;
|
|
31
|
+
}
|
|
32
|
+
export declare const parseArgs: (argv: string[]) => ParsedArgs;
|
|
33
|
+
export declare const usageText: () => string;
|
|
34
|
+
export declare const defaultWriters: () => CliWriters;
|
|
35
|
+
export declare const fail: (writers: CliWriters, code: number, message: string) => number;
|
|
36
|
+
export declare const resolveMasterKey: (keyringKeyEnv: string | undefined, env: Record<string, string | undefined>) => {
|
|
37
|
+
key?: Buffer;
|
|
38
|
+
error?: string;
|
|
39
|
+
};
|
|
40
|
+
export declare const openService: (keyringDir: string, masterKey: Buffer, fetchFn: typeof fetch) => LocalAccountTransportService;
|
|
41
|
+
//# sourceMappingURL=enroll-args.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enroll-args.d.ts","sourceRoot":"","sources":["../../../src/node/cli/enroll-args.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,4BAA4B,EAAE,MAAM,kDAAkD,CAAC;AAEhG,eAAO,MAAM,UAAU;;;;;;;;CAQb,CAAC;AAEX,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA0CD,eAAO,MAAM,SAAS,SAAU,MAAM,EAAE,KAAG,UAsB1C,CAAC;AAEF,eAAO,MAAM,SAAS,QAAO,MAOf,CAAC;AAEf,eAAO,MAAM,cAAc,QAAO,UAGhC,CAAC;AAEH,eAAO,MAAM,IAAI,YAAa,UAAU,QAAQ,MAAM,WAAW,MAAM,KAAG,MAGzE,CAAC;AAEF,eAAO,MAAM,gBAAgB,kBACZ,MAAM,GAAG,SAAS,OAC5B,OAAO,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,KACtC;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAchC,CAAC;AAQF,eAAO,MAAM,WAAW,eACV,MAAM,aACP,MAAM,WACR,YAAY,KACpB,4BAKA,CAAC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
// @sentropic/llm-mesh/node/cli/enroll-args.ts
|
|
2
|
+
//
|
|
3
|
+
// Shared argument parsing, exit codes, and keyring opening for the
|
|
4
|
+
// llm-mesh-enroll CLI. Secrets never enter error messages: only the env
|
|
5
|
+
// var NAME is quoted, never its value.
|
|
6
|
+
import { stderr, stdout } from 'node:process';
|
|
7
|
+
import { CodexEnrollmentProvider } from '../../enrollment/codex.js';
|
|
8
|
+
import { MuseCodeEnrollmentProvider } from '../../enrollment/muse-code.js';
|
|
9
|
+
import { deriveKeyringMasterKey, EncryptedFileKeyring, } from '../keyring/encrypted-file-keyring.js';
|
|
10
|
+
import { LocalAccountTransportService } from '../../service/local-account-transport-service.js';
|
|
11
|
+
export const EXIT_CODES = {
|
|
12
|
+
ok: 0,
|
|
13
|
+
usage: 2,
|
|
14
|
+
enrollmentFailed: 3,
|
|
15
|
+
accountNotFound: 4,
|
|
16
|
+
keyringKey: 5,
|
|
17
|
+
probeFailed: 6,
|
|
18
|
+
billingNotConfigured: 7,
|
|
19
|
+
};
|
|
20
|
+
const KNOWN_FLAGS = new Set([
|
|
21
|
+
'provider',
|
|
22
|
+
'keyring-dir',
|
|
23
|
+
'keyring-key-env',
|
|
24
|
+
'owner-scope',
|
|
25
|
+
'label',
|
|
26
|
+
'account',
|
|
27
|
+
'model',
|
|
28
|
+
'effort',
|
|
29
|
+
'max-attempts',
|
|
30
|
+
'help',
|
|
31
|
+
]);
|
|
32
|
+
const flagValue = (argv, name) => {
|
|
33
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
34
|
+
const arg = argv[i];
|
|
35
|
+
if (arg === `--${name}`) {
|
|
36
|
+
const next = argv[i + 1];
|
|
37
|
+
if (next === undefined || next.startsWith('--'))
|
|
38
|
+
return undefined;
|
|
39
|
+
return next;
|
|
40
|
+
}
|
|
41
|
+
if (arg.startsWith(`--${name}=`)) {
|
|
42
|
+
const value = arg.slice(name.length + 3);
|
|
43
|
+
return value.length > 0 ? value : undefined;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return undefined;
|
|
47
|
+
};
|
|
48
|
+
const hasFlag = (argv, name) => argv.includes(`--${name}`) || argv.some((arg) => arg.startsWith(`--${name}=`));
|
|
49
|
+
const rejectUnknownFlags = (argv) => {
|
|
50
|
+
for (const arg of argv) {
|
|
51
|
+
if (!arg.startsWith('--'))
|
|
52
|
+
continue;
|
|
53
|
+
const name = arg.slice(2).split('=', 1)[0];
|
|
54
|
+
if (!KNOWN_FLAGS.has(name))
|
|
55
|
+
throw new Error(`unknown flag '--${name}'`);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
export const parseArgs = (argv) => {
|
|
59
|
+
const [command, ...rest] = argv;
|
|
60
|
+
if (!command || command === 'help' || hasFlag(argv, 'help')) {
|
|
61
|
+
return { command: 'help', provider: 'muse-code' };
|
|
62
|
+
}
|
|
63
|
+
if (command !== 'enroll' && command !== 'probe') {
|
|
64
|
+
throw new Error(`unknown command '${command}'; expected 'enroll' or 'probe'`);
|
|
65
|
+
}
|
|
66
|
+
rejectUnknownFlags(rest);
|
|
67
|
+
const maxAttemptsRaw = flagValue(rest, 'max-attempts');
|
|
68
|
+
return {
|
|
69
|
+
command,
|
|
70
|
+
provider: flagValue(rest, 'provider') ?? 'muse-code',
|
|
71
|
+
keyringDir: flagValue(rest, 'keyring-dir'),
|
|
72
|
+
keyringKeyEnv: flagValue(rest, 'keyring-key-env'),
|
|
73
|
+
ownerScope: flagValue(rest, 'owner-scope'),
|
|
74
|
+
label: flagValue(rest, 'label'),
|
|
75
|
+
account: flagValue(rest, 'account'),
|
|
76
|
+
model: flagValue(rest, 'model') ?? 'muse-wonder-1.0',
|
|
77
|
+
effort: flagValue(rest, 'effort') ?? 'low',
|
|
78
|
+
...(maxAttemptsRaw !== undefined ? { maxAttempts: Number(maxAttemptsRaw) } : {}),
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
export const usageText = () => [
|
|
82
|
+
'llm-mesh-enroll enroll --provider muse-code --keyring-dir <dir>',
|
|
83
|
+
' --owner-scope <ref> [--label <label>] --keyring-key-env <NAME>',
|
|
84
|
+
' [--max-attempts <n>]',
|
|
85
|
+
'llm-mesh-enroll probe --provider muse-code --keyring-dir <dir>',
|
|
86
|
+
' --account <id> --model muse-wonder-1.0 --effort low --keyring-key-env <NAME>',
|
|
87
|
+
].join('\n');
|
|
88
|
+
export const defaultWriters = () => ({
|
|
89
|
+
out: (line) => stdout.write(`${line}\n`),
|
|
90
|
+
err: (line) => stderr.write(`${line}\n`),
|
|
91
|
+
});
|
|
92
|
+
export const fail = (writers, code, message) => {
|
|
93
|
+
writers.err(JSON.stringify({ status: 'error', code, message }));
|
|
94
|
+
return code;
|
|
95
|
+
};
|
|
96
|
+
export const resolveMasterKey = (keyringKeyEnv, env) => {
|
|
97
|
+
if (!keyringKeyEnv)
|
|
98
|
+
return { error: 'missing --keyring-key-env <NAME>' };
|
|
99
|
+
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(keyringKeyEnv)) {
|
|
100
|
+
return { error: `invalid --keyring-key-env name '${keyringKeyEnv}'` };
|
|
101
|
+
}
|
|
102
|
+
const raw = env[keyringKeyEnv];
|
|
103
|
+
if (typeof raw !== 'string' || raw.length === 0) {
|
|
104
|
+
return { error: `keyring key env var '${keyringKeyEnv}' is missing or empty` };
|
|
105
|
+
}
|
|
106
|
+
try {
|
|
107
|
+
return { key: deriveKeyringMasterKey(raw) };
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return { error: `keyring key env var '${keyringKeyEnv}' must hold 32 bytes as 64 hex chars or 44/43-char base64` };
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
const buildProviders = (fetchFn) => new Map([
|
|
114
|
+
['muse-code', new MuseCodeEnrollmentProvider({ fetchFn })],
|
|
115
|
+
['codex', new CodexEnrollmentProvider({ fetchFn })],
|
|
116
|
+
]);
|
|
117
|
+
export const openService = (keyringDir, masterKey, fetchFn) => new LocalAccountTransportService(new EncryptedFileKeyring(keyringDir, masterKey), buildProviders(fetchFn), { resolveConfig: async () => ({}) });
|
|
118
|
+
//# sourceMappingURL=enroll-args.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enroll-args.js","sourceRoot":"","sources":["../../../src/node/cli/enroll-args.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type EnrollCliDeps, type ParsedArgs } from './enroll-args.js';
|
|
2
|
+
export declare const runProbe: (args: ParsedArgs, deps?: EnrollCliDeps) => Promise<number>;
|
|
3
|
+
export declare const run: (argv: string[], deps?: EnrollCliDeps) => Promise<number>;
|
|
4
|
+
//# sourceMappingURL=enroll-cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enroll-cli.d.ts","sourceRoot":"","sources":["../../../src/node/cli/enroll-cli.ts"],"names":[],"mappings":"AAQA,OAAO,EAOL,KAAK,aAAa,EAClB,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAC;AAK1B,eAAO,MAAM,QAAQ,SACb,UAAU,SACV,aAAa,KAClB,QAAQ,MAAM,CAyFhB,CAAC;AAEF,eAAO,MAAM,GAAG,SAAgB,MAAM,EAAE,SAAQ,aAAa,KAAQ,QAAQ,MAAM,CAclF,CAAC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
// @sentropic/llm-mesh/node/cli/enroll-cli.ts
|
|
2
|
+
//
|
|
3
|
+
// Generic device-flow enrollment CLI (muse-code first):
|
|
4
|
+
// `enroll` stores a seat account, `probe` checks it with one minimal
|
|
5
|
+
// generate through MuseAdapter/MuseRuntimeClient. stdout is a machine
|
|
6
|
+
// contract (one JSON object per line); secrets never printed.
|
|
7
|
+
import { EncryptedFileKeyring } from '../keyring/encrypted-file-keyring.js';
|
|
8
|
+
import { defaultWriters, EXIT_CODES, fail, parseArgs, resolveMasterKey, usageText, } from './enroll-args.js';
|
|
9
|
+
import { runEnroll } from './enroll-command.js';
|
|
10
|
+
const KNOWN_EFFORTS = new Set(['none', 'low', 'medium', 'high', 'xhigh', 'max']);
|
|
11
|
+
export const runProbe = async (args, deps = {}) => {
|
|
12
|
+
const writers = deps.writers ?? defaultWriters();
|
|
13
|
+
const env = deps.env ?? process.env;
|
|
14
|
+
const fetchFn = deps.fetchFn ?? fetch;
|
|
15
|
+
if (args.provider !== 'muse-code') {
|
|
16
|
+
return fail(writers, EXIT_CODES.usage, `provider '${args.provider}' has no probe; only 'muse-code' is probed`);
|
|
17
|
+
}
|
|
18
|
+
if (!args.keyringDir)
|
|
19
|
+
return fail(writers, EXIT_CODES.usage, 'missing --keyring-dir <dir>');
|
|
20
|
+
if (!args.account)
|
|
21
|
+
return fail(writers, EXIT_CODES.usage, 'missing --account <id>');
|
|
22
|
+
const effort = args.effort ?? 'low';
|
|
23
|
+
if (!KNOWN_EFFORTS.has(effort)) {
|
|
24
|
+
return fail(writers, EXIT_CODES.usage, `unknown --effort '${effort}'`);
|
|
25
|
+
}
|
|
26
|
+
const resolved = resolveMasterKey(args.keyringKeyEnv, env);
|
|
27
|
+
if (!resolved.key)
|
|
28
|
+
return fail(writers, EXIT_CODES.keyringKey, resolved.error ?? 'key error');
|
|
29
|
+
const keyring = new EncryptedFileKeyring(args.keyringDir, resolved.key);
|
|
30
|
+
let raw;
|
|
31
|
+
let publicRaw;
|
|
32
|
+
try {
|
|
33
|
+
raw = await keyring.getSecret(`sentropic-llm-mesh:${args.account}:envelope`);
|
|
34
|
+
publicRaw = await keyring.getSecret(`sentropic-llm-mesh:${args.account}:public`);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return fail(writers, EXIT_CODES.keyringKey, 'keyring read failed; check the key and permissions');
|
|
38
|
+
}
|
|
39
|
+
if (!raw) {
|
|
40
|
+
return fail(writers, EXIT_CODES.accountNotFound, `account '${args.account}' not found`);
|
|
41
|
+
}
|
|
42
|
+
// The envelope carries no provider; the public record does. Refuse any
|
|
43
|
+
// non-muse account before any token leaves the keyring: a codex OAuth
|
|
44
|
+
// token must never reach api.meta.ai.
|
|
45
|
+
try {
|
|
46
|
+
const record = JSON.parse(publicRaw ?? '');
|
|
47
|
+
if (record.providerId !== 'muse')
|
|
48
|
+
throw new Error('bad provider');
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return fail(writers, EXIT_CODES.accountNotFound, `account '${args.account}' is not a muse-code seat account`);
|
|
52
|
+
}
|
|
53
|
+
let accessToken;
|
|
54
|
+
try {
|
|
55
|
+
const envelope = JSON.parse(raw);
|
|
56
|
+
if (typeof envelope.accessToken !== 'string' || !envelope.accessToken)
|
|
57
|
+
throw new Error('bad');
|
|
58
|
+
accessToken = envelope.accessToken;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return fail(writers, EXIT_CODES.probeFailed, `account '${args.account}' credential record is corrupt`);
|
|
62
|
+
}
|
|
63
|
+
// The Muse Chat wire takes no reasoning controls (the client refuses a
|
|
64
|
+
// non-empty reasoning block), so --effort is validated for forward
|
|
65
|
+
// compatibility but not forwarded.
|
|
66
|
+
let adapter;
|
|
67
|
+
try {
|
|
68
|
+
const { MuseAdapter } = await import('../../adapters.js');
|
|
69
|
+
const { MuseRuntimeClient } = await import('../../transport/muse-runtime-client.js');
|
|
70
|
+
adapter = new MuseAdapter({ client: new MuseRuntimeClient({ fetch: fetchFn }) });
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return fail(writers, EXIT_CODES.probeFailed, 'probe failed to load the muse runtime');
|
|
74
|
+
}
|
|
75
|
+
const modelId = args.model ?? 'muse-wonder-1.0';
|
|
76
|
+
const startedAt = Date.now();
|
|
77
|
+
try {
|
|
78
|
+
const response = await adapter.generate({ providerId: 'muse', modelId, messages: [{ role: 'user', content: 'probe' }], maxOutputTokens: 16 }, {
|
|
79
|
+
auth: {
|
|
80
|
+
material: { type: 'account-transport', provider: 'muse', accessToken, accountId: args.account },
|
|
81
|
+
descriptor: { sourceType: 'account-transport', accountProviderId: 'muse' },
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
// Status plus latency plus usage only; the model text stays out.
|
|
85
|
+
writers.out(JSON.stringify({
|
|
86
|
+
status: 'ok',
|
|
87
|
+
latencyMs: Date.now() - startedAt,
|
|
88
|
+
modelId: response.modelId,
|
|
89
|
+
...(response.usage ? { usage: response.usage } : {}),
|
|
90
|
+
}));
|
|
91
|
+
return EXIT_CODES.ok;
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
const status = error.status;
|
|
95
|
+
if (status === 402) {
|
|
96
|
+
// Measured non-seat wire: a raw MUSE_API_KEY import (muse.ts direct
|
|
97
|
+
// path) is not seat-billed, so serving refuses billing_not_configured.
|
|
98
|
+
// Seat-billed device-flow accounts (muse-code.ts) never hit this.
|
|
99
|
+
return fail(writers, EXIT_CODES.billingNotConfigured, 'billing_not_configured: non-seat muse.ts direct-key path; re-enroll a seat account');
|
|
100
|
+
}
|
|
101
|
+
if (typeof status === 'number') {
|
|
102
|
+
return fail(writers, EXIT_CODES.probeFailed, `probe failed (status ${status})`);
|
|
103
|
+
}
|
|
104
|
+
return fail(writers, EXIT_CODES.probeFailed, 'probe failed');
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
export const run = async (argv, deps = {}) => {
|
|
108
|
+
const writers = deps.writers ?? defaultWriters();
|
|
109
|
+
let args;
|
|
110
|
+
try {
|
|
111
|
+
args = parseArgs(argv);
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
return fail(writers, EXIT_CODES.usage, error instanceof Error ? error.message : 'bad usage');
|
|
115
|
+
}
|
|
116
|
+
if (args.command === 'help') {
|
|
117
|
+
writers.out(usageText());
|
|
118
|
+
return EXIT_CODES.ok;
|
|
119
|
+
}
|
|
120
|
+
if (args.command === 'enroll')
|
|
121
|
+
return runEnroll(args, deps);
|
|
122
|
+
return runProbe(args, deps);
|
|
123
|
+
};
|
|
124
|
+
//# sourceMappingURL=enroll-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enroll-cli.js","sourceRoot":"","sources":["../../../src/node/cli/enroll-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enroll-command.d.ts","sourceRoot":"","sources":["../../../src/node/cli/enroll-command.ts"],"names":[],"mappings":"AAOA,OAAO,EAML,KAAK,aAAa,EAClB,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAC;AA0B1B,eAAO,MAAM,SAAS,SACd,UAAU,SACV,aAAa,KAClB,QAAQ,MAAM,CAsDhB,CAAC"}
|