@dsh-enhanced/lark-channel 0.1.48 → 0.1.49
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 +19 -8
- package/docs/rsi-setup.md +123 -11
- package/docs/setup.md +27 -14
- package/docs/supervised-growth.md +2 -0
- package/lib/adapter.d.ts +6 -0
- package/lib/adapter.d.ts.map +1 -1
- package/lib/adapter.js +79 -8
- package/lib/adapter.js.map +1 -1
- package/lib/business-cli-install.d.ts +9 -0
- package/lib/business-cli-install.d.ts.map +1 -0
- package/lib/business-cli-install.js +367 -0
- package/lib/business-cli-install.js.map +1 -0
- package/lib/business-environment.d.ts +2 -0
- package/lib/business-environment.d.ts.map +1 -0
- package/lib/business-environment.js +16 -0
- package/lib/business-environment.js.map +1 -0
- package/lib/business-skill.d.ts +32 -0
- package/lib/business-skill.d.ts.map +1 -0
- package/lib/business-skill.js +202 -0
- package/lib/business-skill.js.map +1 -0
- package/lib/rsi-authority-config.d.ts +29 -0
- package/lib/rsi-authority-config.d.ts.map +1 -0
- package/lib/rsi-authority-config.js +233 -0
- package/lib/rsi-authority-config.js.map +1 -0
- package/lib/rsi-authority-resources.d.ts +36 -0
- package/lib/rsi-authority-resources.d.ts.map +1 -0
- package/lib/rsi-authority-resources.js +139 -0
- package/lib/rsi-authority-resources.js.map +1 -0
- package/lib/rsi-authority-runtime.d.ts +50 -0
- package/lib/rsi-authority-runtime.d.ts.map +1 -0
- package/lib/rsi-authority-runtime.js +393 -0
- package/lib/rsi-authority-runtime.js.map +1 -0
- package/lib/rsi-bootstrap-manifest.d.ts +39 -0
- package/lib/rsi-bootstrap-manifest.d.ts.map +1 -0
- package/lib/rsi-bootstrap-manifest.js +366 -0
- package/lib/rsi-bootstrap-manifest.js.map +1 -0
- package/lib/rsi-bootstrap.d.ts +30 -0
- package/lib/rsi-bootstrap.d.ts.map +1 -0
- package/lib/rsi-bootstrap.js +363 -0
- package/lib/rsi-bootstrap.js.map +1 -0
- package/lib/rsi-build.d.ts +45 -0
- package/lib/rsi-build.d.ts.map +1 -0
- package/lib/rsi-build.js +404 -0
- package/lib/rsi-build.js.map +1 -0
- package/lib/rsi-creation-build.d.ts +47 -0
- package/lib/rsi-creation-build.d.ts.map +1 -0
- package/lib/rsi-creation-build.js +333 -0
- package/lib/rsi-creation-build.js.map +1 -0
- package/lib/rsi-host-authorities.d.ts +18 -0
- package/lib/rsi-host-authorities.d.ts.map +1 -0
- package/lib/rsi-host-authorities.js +129 -0
- package/lib/rsi-host-authorities.js.map +1 -0
- package/lib/rsi-host-update.d.ts +113 -0
- package/lib/rsi-host-update.d.ts.map +1 -0
- package/lib/rsi-host-update.js +316 -0
- package/lib/rsi-host-update.js.map +1 -0
- package/lib/rsi-install-inputs.d.ts +43 -0
- package/lib/rsi-install-inputs.d.ts.map +1 -0
- package/lib/rsi-install-inputs.js +342 -0
- package/lib/rsi-install-inputs.js.map +1 -0
- package/lib/rsi-install.d.ts +54 -0
- package/lib/rsi-install.d.ts.map +1 -0
- package/lib/rsi-install.js +404 -0
- package/lib/rsi-install.js.map +1 -0
- package/lib/rsi-local-activation.d.ts +78 -0
- package/lib/rsi-local-activation.d.ts.map +1 -0
- package/lib/rsi-local-activation.js +485 -0
- package/lib/rsi-local-activation.js.map +1 -0
- package/lib/rsi-local-cohort.d.ts +70 -0
- package/lib/rsi-local-cohort.d.ts.map +1 -0
- package/lib/rsi-local-cohort.js +781 -0
- package/lib/rsi-local-cohort.js.map +1 -0
- package/lib/rsi-local-install.d.ts +40 -0
- package/lib/rsi-local-install.d.ts.map +1 -0
- package/lib/rsi-local-install.js +221 -0
- package/lib/rsi-local-install.js.map +1 -0
- package/lib/rsi-local-pair-install.d.ts +38 -0
- package/lib/rsi-local-pair-install.d.ts.map +1 -0
- package/lib/rsi-local-pair-install.js +200 -0
- package/lib/rsi-local-pair-install.js.map +1 -0
- package/lib/rsi-local-profile-update.d.ts +25 -0
- package/lib/rsi-local-profile-update.d.ts.map +1 -0
- package/lib/rsi-local-profile-update.js +226 -0
- package/lib/rsi-local-profile-update.js.map +1 -0
- package/lib/rsi-local-resources.d.ts +37 -0
- package/lib/rsi-local-resources.d.ts.map +1 -0
- package/lib/rsi-local-resources.js +184 -0
- package/lib/rsi-local-resources.js.map +1 -0
- package/lib/rsi-local-roots-extension.d.ts +11 -0
- package/lib/rsi-local-roots-extension.d.ts.map +1 -0
- package/lib/rsi-local-roots-extension.js +31 -0
- package/lib/rsi-local-roots-extension.js.map +1 -0
- package/lib/rsi-local-update-build.d.ts +18 -0
- package/lib/rsi-local-update-build.d.ts.map +1 -0
- package/lib/rsi-local-update-build.js +37 -0
- package/lib/rsi-local-update-build.js.map +1 -0
- package/lib/rsi-local-update.d.ts +39 -0
- package/lib/rsi-local-update.d.ts.map +1 -0
- package/lib/rsi-local-update.js +205 -0
- package/lib/rsi-local-update.js.map +1 -0
- package/lib/rsi-memory-learning.d.ts +22 -0
- package/lib/rsi-memory-learning.d.ts.map +1 -0
- package/lib/rsi-memory-learning.js +76 -0
- package/lib/rsi-memory-learning.js.map +1 -0
- package/lib/rsi-owner-profile.d.ts +37 -0
- package/lib/rsi-owner-profile.d.ts.map +1 -0
- package/lib/rsi-owner-profile.js +178 -0
- package/lib/rsi-owner-profile.js.map +1 -0
- package/lib/rsi-plugin-creation.d.ts +31 -0
- package/lib/rsi-plugin-creation.d.ts.map +1 -0
- package/lib/rsi-plugin-creation.js +179 -0
- package/lib/rsi-plugin-creation.js.map +1 -0
- package/lib/rsi-profile.d.ts +23 -0
- package/lib/rsi-profile.d.ts.map +1 -1
- package/lib/rsi-profile.js +154 -43
- package/lib/rsi-profile.js.map +1 -1
- package/lib/rsi-release-build.d.ts +41 -0
- package/lib/rsi-release-build.d.ts.map +1 -0
- package/lib/rsi-release-build.js +223 -0
- package/lib/rsi-release-build.js.map +1 -0
- package/lib/rsi-service-environment.d.ts +6 -0
- package/lib/rsi-service-environment.d.ts.map +1 -0
- package/lib/rsi-service-environment.js +113 -0
- package/lib/rsi-service-environment.js.map +1 -0
- package/lib/rsi-service-setup.d.ts +10 -0
- package/lib/rsi-service-setup.d.ts.map +1 -0
- package/lib/rsi-service-setup.js +34 -0
- package/lib/rsi-service-setup.js.map +1 -0
- package/lib/rsi-setup.d.ts +35 -2
- package/lib/rsi-setup.d.ts.map +1 -1
- package/lib/rsi-setup.js +459 -32
- package/lib/rsi-setup.js.map +1 -1
- package/lib/rsi-source-maintenance.d.ts +25 -0
- package/lib/rsi-source-maintenance.d.ts.map +1 -0
- package/lib/rsi-source-maintenance.js +348 -0
- package/lib/rsi-source-maintenance.js.map +1 -0
- package/lib/rsi-source-update.d.ts +26 -0
- package/lib/rsi-source-update.d.ts.map +1 -0
- package/lib/rsi-source-update.js +276 -0
- package/lib/rsi-source-update.js.map +1 -0
- package/lib/rsi-source.d.ts +34 -0
- package/lib/rsi-source.d.ts.map +1 -0
- package/lib/rsi-source.js +375 -0
- package/lib/rsi-source.js.map +1 -0
- package/lib/rsi-systemd-bootstrap.d.ts +46 -0
- package/lib/rsi-systemd-bootstrap.d.ts.map +1 -0
- package/lib/rsi-systemd-bootstrap.js +271 -0
- package/lib/rsi-systemd-bootstrap.js.map +1 -0
- package/lib/sdk.d.ts.map +1 -1
- package/lib/sdk.js +26 -1
- package/lib/sdk.js.map +1 -1
- package/lib/setup-business.d.ts +49 -0
- package/lib/setup-business.d.ts.map +1 -0
- package/lib/setup-business.js +335 -0
- package/lib/setup-business.js.map +1 -0
- package/lib/setup-profile.d.ts +1 -1
- package/lib/setup-profile.d.ts.map +1 -1
- package/lib/setup-profile.js +25 -2
- package/lib/setup-profile.js.map +1 -1
- package/lib/setup.d.ts +12 -1
- package/lib/setup.d.ts.map +1 -1
- package/lib/setup.js +138 -34
- package/lib/setup.js.map +1 -1
- package/lib/systemd.d.ts +10 -0
- package/lib/systemd.d.ts.map +1 -1
- package/lib/systemd.js +23 -6
- package/lib/systemd.js.map +1 -1
- package/lib/types.d.ts +7 -0
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +32 -20
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { spawn } from 'node:child_process';
|
|
3
|
+
import { constants } from 'node:fs';
|
|
4
|
+
import { access, chmod, lstat, mkdir, mkdtemp, readFile, readdir, realpath, rename, rm, stat, writeFile } from 'node:fs/promises';
|
|
5
|
+
import { isAbsolute, join, resolve } from 'node:path';
|
|
6
|
+
const PACKAGE = '@larksuite/cli';
|
|
7
|
+
const REGISTRY = 'https://registry.npmjs.org';
|
|
8
|
+
const MAX_PACKAGE_BYTES = 8 * 1024 * 1024;
|
|
9
|
+
const MAX_ARCHIVE_BYTES = 150 * 1024 * 1024;
|
|
10
|
+
const MAX_BINARY_BYTES = 150 * 1024 * 1024;
|
|
11
|
+
const MAX_COMMAND_OUTPUT = 128 * 1024;
|
|
12
|
+
const METADATA_TIMEOUT_MS = 15_000;
|
|
13
|
+
const DOWNLOAD_TIMEOUT_MS = 120_000;
|
|
14
|
+
const COMMAND_TIMEOUT_MS = 10_000;
|
|
15
|
+
const BINARY_NAME = process.platform === 'win32' ? 'lark-cli.exe' : 'lark-cli';
|
|
16
|
+
function assertVersion(version) {
|
|
17
|
+
if (!/^(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)$/u.test(version)) {
|
|
18
|
+
throw new Error('Lark CLI registry latest is not a stable exact version');
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function supportedVersion(version) {
|
|
22
|
+
const parts = /^(\d+)\.(\d+)\.(\d+)$/u.exec(version);
|
|
23
|
+
return parts !== null && parts[1] === '1'
|
|
24
|
+
&& (BigInt(parts[2]) > 0n || BigInt(parts[3]) >= 85n);
|
|
25
|
+
}
|
|
26
|
+
async function run(command, args, timeoutMs, maxOutput = MAX_COMMAND_OUTPUT) {
|
|
27
|
+
return await new Promise((resolveResult, reject) => {
|
|
28
|
+
const child = spawn(command, args, { stdio: ['ignore', 'pipe', 'pipe'], windowsHide: true });
|
|
29
|
+
let stdout = '';
|
|
30
|
+
let stderr = '';
|
|
31
|
+
let exceeded = false;
|
|
32
|
+
const timer = setTimeout(() => child.kill('SIGKILL'), timeoutMs);
|
|
33
|
+
child.stdout?.on('data', (chunk) => {
|
|
34
|
+
stdout += chunk.toString('utf8');
|
|
35
|
+
if (Buffer.byteLength(stdout) > maxOutput) {
|
|
36
|
+
exceeded = true;
|
|
37
|
+
child.kill('SIGKILL');
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
child.stderr?.on('data', (chunk) => {
|
|
41
|
+
stderr += chunk.toString('utf8');
|
|
42
|
+
if (Buffer.byteLength(stderr) > maxOutput) {
|
|
43
|
+
exceeded = true;
|
|
44
|
+
child.kill('SIGKILL');
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
child.once('error', error => { clearTimeout(timer); reject(error); });
|
|
48
|
+
child.once('close', (code, signal) => {
|
|
49
|
+
clearTimeout(timer);
|
|
50
|
+
if (exceeded)
|
|
51
|
+
reject(new Error('Lark CLI command output exceeded limit'));
|
|
52
|
+
else
|
|
53
|
+
resolveResult({ code, signal, stdout, stderr });
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
async function commandVersion(command) {
|
|
58
|
+
try {
|
|
59
|
+
const versionResult = await run(command, ['--version'], COMMAND_TIMEOUT_MS);
|
|
60
|
+
if (versionResult.code !== 0 || versionResult.signal !== null)
|
|
61
|
+
return undefined;
|
|
62
|
+
const match = /^lark-cli version (\d+\.\d+\.\d+)\s*$/u.exec(versionResult.stdout.trim());
|
|
63
|
+
if (!match || !supportedVersion(match[1]))
|
|
64
|
+
return undefined;
|
|
65
|
+
const contracts = [
|
|
66
|
+
{ args: ['config', 'init', '--help'], required: ['--app-secret-stdin', '--name'] },
|
|
67
|
+
{ args: ['auth', 'login', '--help'], required: ['--domain', 'all'] },
|
|
68
|
+
{ args: ['skills', 'list', '--help'], required: ['skills list'] },
|
|
69
|
+
{ args: ['skills', 'read', '--help'], required: ['skills read'] },
|
|
70
|
+
];
|
|
71
|
+
for (const contract of contracts) {
|
|
72
|
+
const result = await run(command, contract.args, COMMAND_TIMEOUT_MS);
|
|
73
|
+
const output = result.stdout + result.stderr;
|
|
74
|
+
if (result.code !== 0 || result.signal !== null || !contract.required.every(token => output.includes(token))) {
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return match[1];
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return undefined;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async function executable(path) {
|
|
85
|
+
try {
|
|
86
|
+
const info = await stat(path);
|
|
87
|
+
if (!info.isFile())
|
|
88
|
+
return false;
|
|
89
|
+
await access(path, process.platform === 'win32' ? constants.F_OK : constants.X_OK);
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async function pathCandidate(command) {
|
|
97
|
+
if (isAbsolute(command))
|
|
98
|
+
return await executable(command) ? await realpath(command) : undefined;
|
|
99
|
+
if (command !== 'lark-cli')
|
|
100
|
+
return undefined;
|
|
101
|
+
for (const directory of (process.env.PATH ?? '').split(process.platform === 'win32' ? ';' : ':')) {
|
|
102
|
+
if (!directory || !isAbsolute(directory))
|
|
103
|
+
continue;
|
|
104
|
+
const candidate = join(directory, process.platform === 'win32' ? 'lark-cli.exe' : 'lark-cli');
|
|
105
|
+
if (await executable(candidate))
|
|
106
|
+
return await realpath(candidate);
|
|
107
|
+
}
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
110
|
+
async function download(url, path, maxBytes, timeoutMs) {
|
|
111
|
+
const response = await fetch(url, { signal: AbortSignal.timeout(timeoutMs), redirect: 'follow' });
|
|
112
|
+
if (!response.ok || !response.body)
|
|
113
|
+
throw new Error(`Lark CLI download failed: HTTP ${response.status}`);
|
|
114
|
+
const { open } = await import('node:fs/promises');
|
|
115
|
+
const file = await open(path, 'wx', 0o600);
|
|
116
|
+
const sha512 = createHash('sha512');
|
|
117
|
+
let total = 0;
|
|
118
|
+
try {
|
|
119
|
+
for await (const chunk of response.body) {
|
|
120
|
+
total += chunk.byteLength;
|
|
121
|
+
if (total > maxBytes)
|
|
122
|
+
throw new Error('Lark CLI download exceeded size limit');
|
|
123
|
+
sha512.update(chunk);
|
|
124
|
+
for (let offset = 0; offset < chunk.byteLength;) {
|
|
125
|
+
const written = await file.write(chunk.subarray(offset));
|
|
126
|
+
if (written.bytesWritten === 0)
|
|
127
|
+
throw new Error('Lark CLI download write stalled');
|
|
128
|
+
offset += written.bytesWritten;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
finally {
|
|
133
|
+
await file.close();
|
|
134
|
+
}
|
|
135
|
+
if (total === 0)
|
|
136
|
+
throw new Error('Lark CLI download was empty');
|
|
137
|
+
return sha512.digest('base64');
|
|
138
|
+
}
|
|
139
|
+
async function extractEntry(archive, entry, maxBytes, timeoutMs) {
|
|
140
|
+
const tar = process.platform === 'win32' ? 'tar.exe' : '/usr/bin/tar';
|
|
141
|
+
const result = await run(tar, ['-xOzf', archive, entry], timeoutMs, maxBytes);
|
|
142
|
+
if (result.code !== 0 || result.signal !== null)
|
|
143
|
+
throw new Error('Lark CLI archive extraction failed');
|
|
144
|
+
return Buffer.from(result.stdout, 'utf8');
|
|
145
|
+
}
|
|
146
|
+
async function extractBinary(archive, output) {
|
|
147
|
+
const tar = process.platform === 'win32' ? 'tar.exe' : '/usr/bin/tar';
|
|
148
|
+
await new Promise((resolveResult, reject) => {
|
|
149
|
+
const args = archive.endsWith('.zip') ? ['-xOf', archive, BINARY_NAME] : ['-xOzf', archive, BINARY_NAME];
|
|
150
|
+
const child = spawn(tar, args, { stdio: ['ignore', 'pipe', 'pipe'], windowsHide: true });
|
|
151
|
+
const chunks = [];
|
|
152
|
+
let bytes = 0;
|
|
153
|
+
let stderr = '';
|
|
154
|
+
let exceeded = false;
|
|
155
|
+
const timer = setTimeout(() => child.kill('SIGKILL'), DOWNLOAD_TIMEOUT_MS);
|
|
156
|
+
child.stdout?.on('data', (chunk) => {
|
|
157
|
+
bytes += chunk.length;
|
|
158
|
+
if (bytes > MAX_BINARY_BYTES) {
|
|
159
|
+
exceeded = true;
|
|
160
|
+
child.kill('SIGKILL');
|
|
161
|
+
}
|
|
162
|
+
else
|
|
163
|
+
chunks.push(chunk);
|
|
164
|
+
});
|
|
165
|
+
child.stderr?.on('data', (chunk) => {
|
|
166
|
+
stderr += chunk.toString('utf8');
|
|
167
|
+
if (Buffer.byteLength(stderr) > MAX_COMMAND_OUTPUT)
|
|
168
|
+
child.kill('SIGKILL');
|
|
169
|
+
});
|
|
170
|
+
child.once('error', error => { clearTimeout(timer); reject(error); });
|
|
171
|
+
child.once('close', (code, signal) => {
|
|
172
|
+
clearTimeout(timer);
|
|
173
|
+
if (code !== 0 || signal !== null || exceeded || bytes === 0)
|
|
174
|
+
reject(new Error('Lark CLI binary extraction failed'));
|
|
175
|
+
else
|
|
176
|
+
writeFile(output, Buffer.concat(chunks), { mode: 0o700 }).then(resolveResult, reject);
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
if (process.platform !== 'win32')
|
|
180
|
+
await chmod(output, 0o700);
|
|
181
|
+
}
|
|
182
|
+
function archiveTarget(version) {
|
|
183
|
+
const platforms = { darwin: 'darwin', linux: 'linux', win32: 'windows' };
|
|
184
|
+
const architectures = { x64: 'amd64', arm64: 'arm64', riscv64: 'riscv64' };
|
|
185
|
+
const platform = platforms[process.platform];
|
|
186
|
+
const architecture = architectures[process.arch];
|
|
187
|
+
if (!platform || !architecture)
|
|
188
|
+
throw new Error(`Lark CLI does not support ${process.platform}-${process.arch}`);
|
|
189
|
+
const name = `lark-cli-${version}-${platform}-${architecture}${platform === 'windows' ? '.zip' : '.tar.gz'}`;
|
|
190
|
+
return {
|
|
191
|
+
name,
|
|
192
|
+
url: `https://github.com/larksuite/cli/releases/download/v${version}/${name}`,
|
|
193
|
+
mirrorUrl: `https://registry.npmmirror.com/-/binary/lark-cli/v${version}/${name}`,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
async function managedInstalled(toolsRoot) {
|
|
197
|
+
let entries;
|
|
198
|
+
try {
|
|
199
|
+
entries = await readdir(toolsRoot);
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
if (error.code === 'ENOENT')
|
|
203
|
+
return undefined;
|
|
204
|
+
throw error;
|
|
205
|
+
}
|
|
206
|
+
const versions = entries.filter(version => /^(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)$/u.test(version))
|
|
207
|
+
.sort((left, right) => {
|
|
208
|
+
const a = left.split('.').map(BigInt);
|
|
209
|
+
const b = right.split('.').map(BigInt);
|
|
210
|
+
for (let index = 0; index < 3; index++) {
|
|
211
|
+
if (a[index] > b[index])
|
|
212
|
+
return -1;
|
|
213
|
+
if (a[index] < b[index])
|
|
214
|
+
return 1;
|
|
215
|
+
}
|
|
216
|
+
return 0;
|
|
217
|
+
});
|
|
218
|
+
for (const version of versions) {
|
|
219
|
+
const versionDir = join(toolsRoot, version);
|
|
220
|
+
const platformDir = join(versionDir, `${process.platform}-${process.arch}`);
|
|
221
|
+
const command = join(platformDir, BINARY_NAME);
|
|
222
|
+
try {
|
|
223
|
+
// Reject symlinked managed candidates before reading any provenance or
|
|
224
|
+
// invoking an executable outside the installer's version directory.
|
|
225
|
+
if (!(await lstat(versionDir)).isDirectory() || !(await lstat(platformDir)).isDirectory()
|
|
226
|
+
|| !(await lstat(command)).isFile()
|
|
227
|
+
|| !(await lstat(join(platformDir, 'provenance.json'))).isFile())
|
|
228
|
+
continue;
|
|
229
|
+
const provenance = JSON.parse(await readFile(join(platformDir, 'provenance.json'), 'utf8'));
|
|
230
|
+
if (provenance.package !== PACKAGE || provenance.version !== version
|
|
231
|
+
|| !/^sha512-[A-Za-z0-9+/]+={0,2}$/u.test(provenance.npmIntegrity ?? '')
|
|
232
|
+
|| !/^[0-9a-f]{64}$/iu.test(provenance.releaseSha256 ?? '')
|
|
233
|
+
|| provenance.releaseArchive !== archiveTarget(version).name)
|
|
234
|
+
continue;
|
|
235
|
+
if (await commandVersion(command) === version)
|
|
236
|
+
return { command: await realpath(command), version };
|
|
237
|
+
}
|
|
238
|
+
catch { /* An invalid candidate must not shadow a usable older version. */ }
|
|
239
|
+
}
|
|
240
|
+
return undefined;
|
|
241
|
+
}
|
|
242
|
+
async function managedRoot(dshHome) {
|
|
243
|
+
const first = resolve(dshHome, '.dsh-enhanced');
|
|
244
|
+
const second = join(first, 'tools');
|
|
245
|
+
const third = join(second, 'lark-cli');
|
|
246
|
+
for (const path of [first, second, third]) {
|
|
247
|
+
try {
|
|
248
|
+
if (!(await lstat(path)).isDirectory())
|
|
249
|
+
throw new Error('Lark CLI managed path is not a real directory');
|
|
250
|
+
}
|
|
251
|
+
catch (error) {
|
|
252
|
+
if (error.code !== 'ENOENT')
|
|
253
|
+
throw error;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return third;
|
|
257
|
+
}
|
|
258
|
+
async function latestMetadata() {
|
|
259
|
+
const response = await fetch(`${REGISTRY}/@larksuite%2fcli/latest`, {
|
|
260
|
+
signal: AbortSignal.timeout(METADATA_TIMEOUT_MS), redirect: 'error',
|
|
261
|
+
});
|
|
262
|
+
if (!response.ok)
|
|
263
|
+
throw new Error(`Lark CLI registry lookup failed: HTTP ${response.status}`);
|
|
264
|
+
const raw = await response.text();
|
|
265
|
+
if (Buffer.byteLength(raw) > 1024 * 1024)
|
|
266
|
+
throw new Error('Lark CLI metadata exceeded size limit');
|
|
267
|
+
const metadata = JSON.parse(raw);
|
|
268
|
+
assertVersion(metadata.version);
|
|
269
|
+
if (!supportedVersion(metadata.version))
|
|
270
|
+
throw new Error('Lark CLI latest is outside the verified command contract range');
|
|
271
|
+
const expectedTarball = `${REGISTRY}/@larksuite/cli/-/cli-${metadata.version}.tgz`;
|
|
272
|
+
if (metadata.dist?.tarball !== expectedTarball || !/^sha512-[A-Za-z0-9+/]+={0,2}$/u.test(metadata.dist.integrity)) {
|
|
273
|
+
throw new Error('Lark CLI registry metadata has invalid archive provenance');
|
|
274
|
+
}
|
|
275
|
+
return metadata;
|
|
276
|
+
}
|
|
277
|
+
/** Ensure a contract-compatible official Lark CLI without changing global npm or user configuration. */
|
|
278
|
+
export async function ensureLarkBusinessCli(options) {
|
|
279
|
+
if (!isAbsolute(options.dshHome))
|
|
280
|
+
throw new Error('DSH_HOME must be an absolute path');
|
|
281
|
+
const existing = await pathCandidate(options.command ?? 'lark-cli');
|
|
282
|
+
if (options.command && !existing)
|
|
283
|
+
throw new Error('Configured Lark CLI command is not an executable absolute path or PATH lark-cli');
|
|
284
|
+
if (existing) {
|
|
285
|
+
const version = await commandVersion(existing);
|
|
286
|
+
if (version)
|
|
287
|
+
return { command: existing, version };
|
|
288
|
+
if (options.command)
|
|
289
|
+
throw new Error('Configured Lark CLI does not satisfy the required command contract');
|
|
290
|
+
}
|
|
291
|
+
const toolsRoot = await managedRoot(options.dshHome);
|
|
292
|
+
const managed = await managedInstalled(toolsRoot);
|
|
293
|
+
if (managed)
|
|
294
|
+
return managed;
|
|
295
|
+
const metadata = await latestMetadata();
|
|
296
|
+
const target = archiveTarget(metadata.version);
|
|
297
|
+
const versionDir = join(toolsRoot, metadata.version, `${process.platform}-${process.arch}`);
|
|
298
|
+
const installed = join(versionDir, BINARY_NAME);
|
|
299
|
+
if (await executable(installed) && await commandVersion(installed) === metadata.version) {
|
|
300
|
+
return { command: await realpath(installed), version: metadata.version };
|
|
301
|
+
}
|
|
302
|
+
await mkdir(toolsRoot, { recursive: true, mode: 0o700 });
|
|
303
|
+
await managedRoot(options.dshHome);
|
|
304
|
+
const stage = await mkdtemp(join(toolsRoot, '.stage-'));
|
|
305
|
+
try {
|
|
306
|
+
const packageArchive = join(stage, 'package.tgz');
|
|
307
|
+
const packageDigest = await download(metadata.dist.tarball, packageArchive, MAX_PACKAGE_BYTES, DOWNLOAD_TIMEOUT_MS);
|
|
308
|
+
if (`sha512-${packageDigest}` !== metadata.dist.integrity)
|
|
309
|
+
throw new Error('Lark CLI npm archive integrity mismatch');
|
|
310
|
+
const packageManifest = JSON.parse((await extractEntry(packageArchive, 'package/package.json', 64 * 1024, COMMAND_TIMEOUT_MS)).toString('utf8'));
|
|
311
|
+
if (packageManifest.name !== PACKAGE || packageManifest.version !== metadata.version) {
|
|
312
|
+
throw new Error('Lark CLI npm archive identity mismatch');
|
|
313
|
+
}
|
|
314
|
+
const checksums = await extractEntry(packageArchive, 'package/checksums.txt', 64 * 1024, COMMAND_TIMEOUT_MS);
|
|
315
|
+
const match = checksums.toString('utf8').split(/\r?\n/u)
|
|
316
|
+
.map(line => /^([0-9a-f]{64}) (.+)$/iu.exec(line))
|
|
317
|
+
.find(parts => parts?.[2] === target.name);
|
|
318
|
+
if (!match)
|
|
319
|
+
throw new Error('Lark CLI release checksum missing from official npm archive');
|
|
320
|
+
const releaseArchive = join(stage, target.name);
|
|
321
|
+
let releaseVerified = false;
|
|
322
|
+
let lastReleaseError;
|
|
323
|
+
// The official npm installer uses this same GitHub → npmmirror fallback;
|
|
324
|
+
// both sources must match its npm-integrity-protected SHA-256 checksum.
|
|
325
|
+
for (const url of [target.url, target.mirrorUrl]) {
|
|
326
|
+
await rm(releaseArchive, { force: true });
|
|
327
|
+
try {
|
|
328
|
+
await download(url, releaseArchive, MAX_ARCHIVE_BYTES, DOWNLOAD_TIMEOUT_MS);
|
|
329
|
+
const releaseDigest = createHash('sha256').update(await readFile(releaseArchive)).digest('hex');
|
|
330
|
+
if (releaseDigest.toLowerCase() !== match[1]?.toLowerCase())
|
|
331
|
+
throw new Error('Lark CLI release checksum mismatch');
|
|
332
|
+
releaseVerified = true;
|
|
333
|
+
break;
|
|
334
|
+
}
|
|
335
|
+
catch (error) {
|
|
336
|
+
lastReleaseError = error;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
if (!releaseVerified)
|
|
340
|
+
throw lastReleaseError;
|
|
341
|
+
const stageBinary = join(stage, BINARY_NAME);
|
|
342
|
+
await extractBinary(releaseArchive, stageBinary);
|
|
343
|
+
if (await commandVersion(stageBinary) !== metadata.version)
|
|
344
|
+
throw new Error('Lark CLI release binary failed contract verification');
|
|
345
|
+
await writeFile(join(stage, 'provenance.json'), JSON.stringify({
|
|
346
|
+
package: PACKAGE, version: metadata.version, npmIntegrity: metadata.dist.integrity,
|
|
347
|
+
releaseArchive: target.name, releaseSha256: match[1],
|
|
348
|
+
}) + '\n', { mode: 0o600 });
|
|
349
|
+
await rm(packageArchive);
|
|
350
|
+
await rm(releaseArchive);
|
|
351
|
+
await mkdir(join(toolsRoot, metadata.version), { recursive: true, mode: 0o700 });
|
|
352
|
+
try {
|
|
353
|
+
await rename(stage, versionDir);
|
|
354
|
+
}
|
|
355
|
+
catch (error) {
|
|
356
|
+
if (await executable(installed) && await commandVersion(installed) === metadata.version) {
|
|
357
|
+
return { command: await realpath(installed), version: metadata.version };
|
|
358
|
+
}
|
|
359
|
+
throw error;
|
|
360
|
+
}
|
|
361
|
+
return { command: await realpath(installed), version: metadata.version };
|
|
362
|
+
}
|
|
363
|
+
finally {
|
|
364
|
+
await rm(stage, { recursive: true, force: true });
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
//# sourceMappingURL=business-cli-install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"business-cli-install.js","sourceRoot":"","sources":["../src/business-cli-install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const LARK_BUSINESS_CLEARED_ENV: readonly ["OPENCLAW_HOME", "OPENCLAW_CLI", "OPENCLAW_STATE_DIR", "OPENCLAW_CONFIG_PATH", "OPENCLAW_SERVICE_MARKER", "OPENCLAW_SERVICE_VERSION", "OPENCLAW_GATEWAY_PORT", "OPENCLAW_SHELL", "HERMES_HOME", "HERMES_QUIET", "HERMES_EXEC_ASK", "HERMES_GATEWAY_TOKEN", "HERMES_SESSION_KEY", "LARK_CHANNEL", "LARKSUITE_CLI_APP_ID", "LARKSUITE_CLI_APP_SECRET", "LARKSUITE_CLI_BRAND", "LARKSUITE_CLI_USER_ACCESS_TOKEN", "LARKSUITE_CLI_TENANT_ACCESS_TOKEN", "LARKSUITE_CLI_TENANT_ACCESS_TOKEN_SOURCE", "LARKSUITE_CLI_DEFAULT_AS", "LARKSUITE_CLI_PROFILE", "LARKSUITE_CLI_STRICT_MODE", "LARKSUITE_CLI_AUTH_PROXY", "LARKSUITE_CLI_PROXY_KEY", "LARKSUITE_CLI_CONTENT_SAFETY_MODE", "LARKSUITE_CLI_AGENT_NAME", "LARKSUITE_CLI_AGENT_TRACE", "LARKSUITE_CLI_PROXY_ENABLE", "LARKSUITE_CLI_PROXY_ADDRESS", "LARKSUITE_CLI_CA_PATH"];
|
|
2
|
+
//# sourceMappingURL=business-environment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"business-environment.d.ts","sourceRoot":"","sources":["../src/business-environment.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,yBAAyB,wyBAY5B,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// Official CLI v1.0.96 workspace/identity overrides. Installation and the
|
|
2
|
+
// generated native skill must select the same CLI workspace and credentials.
|
|
3
|
+
export const LARK_BUSINESS_CLEARED_ENV = [
|
|
4
|
+
'OPENCLAW_HOME', 'OPENCLAW_CLI', 'OPENCLAW_STATE_DIR', 'OPENCLAW_CONFIG_PATH',
|
|
5
|
+
'OPENCLAW_SERVICE_MARKER', 'OPENCLAW_SERVICE_VERSION', 'OPENCLAW_GATEWAY_PORT', 'OPENCLAW_SHELL',
|
|
6
|
+
'HERMES_HOME', 'HERMES_QUIET', 'HERMES_EXEC_ASK', 'HERMES_GATEWAY_TOKEN', 'HERMES_SESSION_KEY',
|
|
7
|
+
'LARK_CHANNEL',
|
|
8
|
+
'LARKSUITE_CLI_APP_ID', 'LARKSUITE_CLI_APP_SECRET', 'LARKSUITE_CLI_BRAND',
|
|
9
|
+
'LARKSUITE_CLI_USER_ACCESS_TOKEN', 'LARKSUITE_CLI_TENANT_ACCESS_TOKEN',
|
|
10
|
+
'LARKSUITE_CLI_TENANT_ACCESS_TOKEN_SOURCE', 'LARKSUITE_CLI_DEFAULT_AS',
|
|
11
|
+
'LARKSUITE_CLI_PROFILE', 'LARKSUITE_CLI_STRICT_MODE',
|
|
12
|
+
'LARKSUITE_CLI_AUTH_PROXY', 'LARKSUITE_CLI_PROXY_KEY', 'LARKSUITE_CLI_CONTENT_SAFETY_MODE',
|
|
13
|
+
'LARKSUITE_CLI_AGENT_NAME', 'LARKSUITE_CLI_AGENT_TRACE',
|
|
14
|
+
'LARKSUITE_CLI_PROXY_ENABLE', 'LARKSUITE_CLI_PROXY_ADDRESS', 'LARKSUITE_CLI_CA_PATH',
|
|
15
|
+
];
|
|
16
|
+
//# sourceMappingURL=business-environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"business-environment.js","sourceRoot":"","sources":["../src/business-environment.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,6EAA6E;AAC7E,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,eAAe,EAAE,cAAc,EAAE,oBAAoB,EAAE,sBAAsB;IAC7E,yBAAyB,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,gBAAgB;IAChG,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,oBAAoB;IAC9F,cAAc;IACd,sBAAsB,EAAE,0BAA0B,EAAE,qBAAqB;IACzE,iCAAiC,EAAE,mCAAmC;IACtE,0CAA0C,EAAE,0BAA0B;IACtE,uBAAuB,EAAE,2BAA2B;IACpD,0BAA0B,EAAE,yBAAyB,EAAE,mCAAmC;IAC1F,0BAA0B,EAAE,2BAA2B;IACvD,4BAA4B,EAAE,6BAA6B,EAAE,uBAAuB;CAC5E,CAAA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export interface LarkBusinessSkillInput {
|
|
2
|
+
dshHome: string;
|
|
3
|
+
profile: string;
|
|
4
|
+
account: string;
|
|
5
|
+
cliCommand: string;
|
|
6
|
+
cliProfile: string;
|
|
7
|
+
cliConfigDir: string;
|
|
8
|
+
cliDataDir: string;
|
|
9
|
+
ownerUserId: string;
|
|
10
|
+
appId: string;
|
|
11
|
+
platform?: NodeJS.Platform;
|
|
12
|
+
}
|
|
13
|
+
export interface LarkBusinessSkillReconcileInput {
|
|
14
|
+
dshHome: string;
|
|
15
|
+
profile: string;
|
|
16
|
+
account: string;
|
|
17
|
+
appId: string;
|
|
18
|
+
ownerUserId: string;
|
|
19
|
+
enabled: boolean;
|
|
20
|
+
previousAccount?: string;
|
|
21
|
+
}
|
|
22
|
+
export declare function renderLarkBusinessSkill(input: LarkBusinessSkillInput): {
|
|
23
|
+
name: string;
|
|
24
|
+
content: string;
|
|
25
|
+
};
|
|
26
|
+
/** Remove a stale managed skill after owner/app rotation or explicit opt-out. */
|
|
27
|
+
export declare function reconcileLarkBusinessSkill(input: LarkBusinessSkillReconcileInput): Promise<void>;
|
|
28
|
+
export declare function installLarkBusinessSkill(input: LarkBusinessSkillInput): Promise<{
|
|
29
|
+
path: string;
|
|
30
|
+
name: string;
|
|
31
|
+
}>;
|
|
32
|
+
//# sourceMappingURL=business-skill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"business-skill.d.ts","sourceRoot":"","sources":["../src/business-skill.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAA;CAC3B;AAED,MAAM,WAAW,+BAA+B;IAC9C,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAwED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,sBAAsB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAexG;AAsDD,iFAAiF;AACjF,wBAAsB,0BAA0B,CAAC,KAAK,EAAE,+BAA+B,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBtG;AAED,wBAAsB,wBAAwB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CA0BrH"}
|