happy-imou-cloud 2.1.1 → 2.1.2
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/bin/happy-cloud.mjs +21 -21
- package/compat/acp-sdk-schema/index.js +27 -27
- package/compat/acp-sdk-schema/types.gen.js +2 -2
- package/compat/acp-sdk-schema/zod.gen.js +1553 -1553
- package/compat/ink-build/components/Cursor.d.ts +83 -83
- package/compat/ink-build/components/Cursor.js +52 -52
- package/compat/ink-build/components/CursorContext.d.ts +11 -11
- package/compat/ink-build/components/CursorContext.js +7 -7
- package/compat/ink-build/components/ErrorBoundary.d.ts +18 -18
- package/compat/ink-build/components/ErrorBoundary.js +22 -22
- package/compat/ink-build/hooks/use-cursor.d.ts +12 -12
- package/compat/ink-build/hooks/use-cursor.js +28 -28
- package/dist/{BaseReasoningProcessor-Dn9FxfxU.mjs → BaseReasoningProcessor-BaOWkVcu.mjs} +3 -3
- package/dist/{BaseReasoningProcessor-CBMK-8Gi.cjs → BaseReasoningProcessor-CzvqwxuY.cjs} +3 -3
- package/dist/ProviderSelectionHandler-Q8pl7e-d.mjs +261 -0
- package/dist/ProviderSelectionHandler-wwbfeK_s.cjs +265 -0
- package/dist/{api-DBy5lPZw.mjs → api-Cxifhw5r.mjs} +3 -3
- package/dist/{api-DId_j3C2.cjs → api-DZimmN4C.cjs} +2 -2
- package/dist/{command-CeaBwYCW.mjs → command-B6LM3Nml.mjs} +3 -3
- package/dist/{command-DwfUpmId.cjs → command-RcCJI1jl.cjs} +3 -3
- package/dist/{index-CuuYSKiv.cjs → index-Cuvs0lFS.cjs} +168 -75
- package/dist/{index-66vjECEd.mjs → index-Des7I5WX.mjs} +165 -72
- package/dist/index.cjs +3 -3
- package/dist/index.mjs +3 -3
- package/dist/lib.cjs +1 -1
- package/dist/lib.d.cts +36 -36
- package/dist/lib.d.mts +36 -36
- package/dist/lib.mjs +1 -1
- package/dist/{persistence-BOWh1NER.mjs → persistence-6d4U4Sh8.mjs} +1 -1
- package/dist/{persistence-Dzr6sFwD.cjs → persistence-C8-MtdQK.cjs} +1 -1
- package/dist/{registerKillSessionHandler-D4_wpN18.mjs → registerKillSessionHandler-BFBkz_XT.mjs} +417 -5
- package/dist/{registerKillSessionHandler-Dg_iRBPm.cjs → registerKillSessionHandler-BapPCRmp.cjs} +419 -4
- package/dist/{runClaude-B74dHAnQ.mjs → runClaude-CPV5Uap2.mjs} +34 -5
- package/dist/{runClaude-oIFzkfuU.cjs → runClaude-DVnqKa1q.cjs} +37 -8
- package/dist/{runCodex-D_9CuL6M.cjs → runCodex-Bzsp8gFO.cjs} +29 -21
- package/dist/{runCodex-mLHjsgVj.mjs → runCodex-CwtLSTMJ.mjs} +26 -18
- package/dist/{runGemini-CcWGezMt.cjs → runGemini-6Dwyk_Km.cjs} +267 -82
- package/dist/{runGemini-BMiho2ab.mjs → runGemini-Bmoxehlh.mjs} +267 -82
- package/package.json +9 -9
- package/scripts/build.mjs +68 -68
- package/scripts/ensureAcpSdkCompat.mjs +170 -172
- package/scripts/release-smoke.mjs +38 -35
- package/dist/ProviderSelectionHandler-BuXk-8ji.cjs +0 -680
- package/dist/ProviderSelectionHandler-CMaQThYO.mjs +0 -673
|
@@ -1,173 +1,171 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
1
|
import { copyFileSync, existsSync, mkdirSync } from 'node:fs';
|
|
4
|
-
import { dirname, resolve, join } from 'node:path';
|
|
5
|
-
import { fileURLToPath } from 'node:url';
|
|
6
|
-
|
|
7
|
-
const here = dirname(fileURLToPath(import.meta.url));
|
|
8
|
-
const defaultPackageRoot = resolve(here, '..');
|
|
9
|
-
const defaultWorkspaceRoot = resolve(defaultPackageRoot, '..', '..');
|
|
10
|
-
|
|
11
|
-
function getRepairTargets(packageRoot, workspaceRoot) {
|
|
12
|
-
return [
|
|
13
|
-
{
|
|
14
|
-
name: '@agentclientprotocol/sdk schema',
|
|
15
|
-
targetPackageDir: join(packageRoot, 'node_modules', '@agentclientprotocol', 'sdk'),
|
|
16
|
-
targetBaseDir: 'dist/schema',
|
|
17
|
-
sentinelFile: 'dist/acp.js',
|
|
18
|
-
requiredRuntimeFiles: [
|
|
19
|
-
'index.js',
|
|
20
|
-
'types.gen.js',
|
|
21
|
-
'zod.gen.js',
|
|
22
|
-
],
|
|
23
|
-
optionalTypeFiles: [
|
|
24
|
-
'index.d.ts',
|
|
25
|
-
'types.gen.d.ts',
|
|
26
|
-
'zod.gen.d.ts',
|
|
27
|
-
],
|
|
28
|
-
sourceBaseDirs: [
|
|
29
|
-
join(workspaceRoot, 'node_modules', '@agentclientprotocol', 'sdk', 'dist', 'schema'),
|
|
30
|
-
join(packageRoot, 'compat', 'acp-sdk-schema'),
|
|
31
|
-
],
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
name: 'ink cursor hooks',
|
|
35
|
-
targetPackageDir: join(packageRoot, 'node_modules', 'ink'),
|
|
36
|
-
targetBaseDir: 'build',
|
|
37
|
-
sentinelFile: 'build/index.js',
|
|
38
|
-
requiredRuntimeFiles: [
|
|
39
|
-
'components/Cursor.js',
|
|
40
|
-
'components/CursorContext.js',
|
|
41
|
-
'components/ErrorBoundary.js',
|
|
42
|
-
'hooks/use-cursor.js',
|
|
43
|
-
],
|
|
44
|
-
optionalTypeFiles: [
|
|
45
|
-
'components/Cursor.d.ts',
|
|
46
|
-
'components/CursorContext.d.ts',
|
|
47
|
-
'components/ErrorBoundary.d.ts',
|
|
48
|
-
'hooks/use-cursor.d.ts',
|
|
49
|
-
],
|
|
50
|
-
sourceBaseDirs: [
|
|
51
|
-
join(workspaceRoot, 'node_modules', 'ink', 'build'),
|
|
52
|
-
join(packageRoot, 'compat', 'ink-build'),
|
|
53
|
-
],
|
|
54
|
-
},
|
|
55
|
-
];
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
function isDirectExecution() {
|
|
59
|
-
return process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
function hasAllFiles(directory, files) {
|
|
63
|
-
return files.every((file) => existsSync(join(directory, file)));
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function copyMissingFiles(sourceDir, targetDir, files) {
|
|
67
|
-
let copied = 0;
|
|
68
|
-
|
|
69
|
-
for (const file of files) {
|
|
70
|
-
const sourceFile = join(sourceDir, file);
|
|
71
|
-
const targetFile = join(targetDir, file);
|
|
72
|
-
|
|
73
|
-
if (!existsSync(sourceFile) || existsSync(targetFile)) {
|
|
74
|
-
continue;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
mkdirSync(dirname(targetFile), { recursive: true });
|
|
78
|
-
copyFileSync(sourceFile, targetFile);
|
|
79
|
-
copied += 1;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
return copied;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
export function ensureAcpSdkCompat(options = {}) {
|
|
86
|
-
const packageRoot = resolve(options.packageRoot ?? defaultPackageRoot);
|
|
87
|
-
const workspaceRoot = resolve(options.workspaceRoot ?? defaultWorkspaceRoot);
|
|
88
|
-
const targetOverrides = Array.isArray(options.targets) ? options.targets : null;
|
|
89
|
-
const repairTargets = targetOverrides ?? getRepairTargets(packageRoot, workspaceRoot);
|
|
90
|
-
const results = [];
|
|
91
|
-
|
|
92
|
-
for (const target of repairTargets) {
|
|
93
|
-
const targetPackageDir = resolve(target.targetPackageDir);
|
|
94
|
-
const targetBaseDir = join(targetPackageDir, target.targetBaseDir);
|
|
95
|
-
const sentinelFile = join(targetPackageDir, target.sentinelFile);
|
|
96
|
-
|
|
97
|
-
if (!existsSync(sentinelFile)) {
|
|
98
|
-
results.push({
|
|
99
|
-
name: target.name,
|
|
100
|
-
checked: false,
|
|
101
|
-
repaired: false,
|
|
102
|
-
reason: 'target-package-missing',
|
|
103
|
-
targetBaseDir,
|
|
104
|
-
});
|
|
105
|
-
continue;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
if (hasAllFiles(targetBaseDir, target.requiredRuntimeFiles)) {
|
|
109
|
-
results.push({
|
|
110
|
-
name: target.name,
|
|
111
|
-
checked: true,
|
|
112
|
-
repaired: false,
|
|
113
|
-
reason: 'already-valid',
|
|
114
|
-
targetBaseDir,
|
|
115
|
-
});
|
|
116
|
-
continue;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
const sourceBaseDir = target.sourceBaseDirs.find((candidate) => hasAllFiles(candidate, target.requiredRuntimeFiles));
|
|
120
|
-
if (!sourceBaseDir) {
|
|
121
|
-
throw new Error(
|
|
122
|
-
`[runtime-compat] Missing ${target.requiredRuntimeFiles.join(', ')} under ${targetBaseDir}, and no repair source is available for ${target.name}.`,
|
|
123
|
-
);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
mkdirSync(targetBaseDir, { recursive: true });
|
|
127
|
-
|
|
128
|
-
const copiedRuntimeFiles = copyMissingFiles(sourceBaseDir, targetBaseDir, target.requiredRuntimeFiles);
|
|
129
|
-
const typeSourceBaseDir = target.sourceBaseDirs.find((candidate) => hasAllFiles(candidate, target.optionalTypeFiles));
|
|
130
|
-
const copiedTypeFiles = typeSourceBaseDir
|
|
131
|
-
? copyMissingFiles(typeSourceBaseDir, targetBaseDir, target.optionalTypeFiles)
|
|
132
|
-
: 0;
|
|
133
|
-
|
|
134
|
-
if (!hasAllFiles(targetBaseDir, target.requiredRuntimeFiles)) {
|
|
135
|
-
throw new Error(
|
|
136
|
-
`[runtime-compat] Repair source ${sourceBaseDir} did not restore ${target.requiredRuntimeFiles.join(', ')} into ${targetBaseDir}.`,
|
|
137
|
-
);
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
results.push({
|
|
141
|
-
name: target.name,
|
|
142
|
-
checked: true,
|
|
143
|
-
repaired: copiedRuntimeFiles > 0 || copiedTypeFiles > 0,
|
|
144
|
-
reason: 'repaired',
|
|
145
|
-
copiedRuntimeFiles,
|
|
146
|
-
copiedTypeFiles,
|
|
147
|
-
sourceBaseDir,
|
|
148
|
-
targetBaseDir,
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
const repairedTargets = results.filter((result) => result.repaired);
|
|
153
|
-
const checkedTargets = results.filter((result) => result.checked);
|
|
154
|
-
|
|
155
|
-
return {
|
|
156
|
-
checked: checkedTargets.length > 0,
|
|
157
|
-
repaired: repairedTargets.length > 0,
|
|
158
|
-
reason: repairedTargets.length > 0 ? 'repaired' : 'already-valid',
|
|
159
|
-
results,
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
if (isDirectExecution()) {
|
|
164
|
-
const result = ensureAcpSdkCompat();
|
|
165
|
-
|
|
166
|
-
if (result.repaired) {
|
|
167
|
-
for (const target of result.results.filter((entry) => entry.repaired)) {
|
|
168
|
-
console.log(`[runtime-compat] Restored ${target.name} from ${target.sourceBaseDir} -> ${target.targetBaseDir}`);
|
|
169
|
-
}
|
|
170
|
-
} else {
|
|
171
|
-
console.log(`[runtime-compat] ${result.reason}`);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
2
|
+
import { dirname, resolve, join } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
|
|
5
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
6
|
+
const defaultPackageRoot = resolve(here, '..');
|
|
7
|
+
const defaultWorkspaceRoot = resolve(defaultPackageRoot, '..', '..');
|
|
8
|
+
|
|
9
|
+
function getRepairTargets(packageRoot, workspaceRoot) {
|
|
10
|
+
return [
|
|
11
|
+
{
|
|
12
|
+
name: '@agentclientprotocol/sdk schema',
|
|
13
|
+
targetPackageDir: join(packageRoot, 'node_modules', '@agentclientprotocol', 'sdk'),
|
|
14
|
+
targetBaseDir: 'dist/schema',
|
|
15
|
+
sentinelFile: 'dist/acp.js',
|
|
16
|
+
requiredRuntimeFiles: [
|
|
17
|
+
'index.js',
|
|
18
|
+
'types.gen.js',
|
|
19
|
+
'zod.gen.js',
|
|
20
|
+
],
|
|
21
|
+
optionalTypeFiles: [
|
|
22
|
+
'index.d.ts',
|
|
23
|
+
'types.gen.d.ts',
|
|
24
|
+
'zod.gen.d.ts',
|
|
25
|
+
],
|
|
26
|
+
sourceBaseDirs: [
|
|
27
|
+
join(workspaceRoot, 'node_modules', '@agentclientprotocol', 'sdk', 'dist', 'schema'),
|
|
28
|
+
join(packageRoot, 'compat', 'acp-sdk-schema'),
|
|
29
|
+
],
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
name: 'ink cursor hooks',
|
|
33
|
+
targetPackageDir: join(packageRoot, 'node_modules', 'ink'),
|
|
34
|
+
targetBaseDir: 'build',
|
|
35
|
+
sentinelFile: 'build/index.js',
|
|
36
|
+
requiredRuntimeFiles: [
|
|
37
|
+
'components/Cursor.js',
|
|
38
|
+
'components/CursorContext.js',
|
|
39
|
+
'components/ErrorBoundary.js',
|
|
40
|
+
'hooks/use-cursor.js',
|
|
41
|
+
],
|
|
42
|
+
optionalTypeFiles: [
|
|
43
|
+
'components/Cursor.d.ts',
|
|
44
|
+
'components/CursorContext.d.ts',
|
|
45
|
+
'components/ErrorBoundary.d.ts',
|
|
46
|
+
'hooks/use-cursor.d.ts',
|
|
47
|
+
],
|
|
48
|
+
sourceBaseDirs: [
|
|
49
|
+
join(workspaceRoot, 'node_modules', 'ink', 'build'),
|
|
50
|
+
join(packageRoot, 'compat', 'ink-build'),
|
|
51
|
+
],
|
|
52
|
+
},
|
|
53
|
+
];
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function isDirectExecution() {
|
|
57
|
+
return process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function hasAllFiles(directory, files) {
|
|
61
|
+
return files.every((file) => existsSync(join(directory, file)));
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function copyMissingFiles(sourceDir, targetDir, files) {
|
|
65
|
+
let copied = 0;
|
|
66
|
+
|
|
67
|
+
for (const file of files) {
|
|
68
|
+
const sourceFile = join(sourceDir, file);
|
|
69
|
+
const targetFile = join(targetDir, file);
|
|
70
|
+
|
|
71
|
+
if (!existsSync(sourceFile) || existsSync(targetFile)) {
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
mkdirSync(dirname(targetFile), { recursive: true });
|
|
76
|
+
copyFileSync(sourceFile, targetFile);
|
|
77
|
+
copied += 1;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return copied;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export function ensureAcpSdkCompat(options = {}) {
|
|
84
|
+
const packageRoot = resolve(options.packageRoot ?? defaultPackageRoot);
|
|
85
|
+
const workspaceRoot = resolve(options.workspaceRoot ?? defaultWorkspaceRoot);
|
|
86
|
+
const targetOverrides = Array.isArray(options.targets) ? options.targets : null;
|
|
87
|
+
const repairTargets = targetOverrides ?? getRepairTargets(packageRoot, workspaceRoot);
|
|
88
|
+
const results = [];
|
|
89
|
+
|
|
90
|
+
for (const target of repairTargets) {
|
|
91
|
+
const targetPackageDir = resolve(target.targetPackageDir);
|
|
92
|
+
const targetBaseDir = join(targetPackageDir, target.targetBaseDir);
|
|
93
|
+
const sentinelFile = join(targetPackageDir, target.sentinelFile);
|
|
94
|
+
|
|
95
|
+
if (!existsSync(sentinelFile)) {
|
|
96
|
+
results.push({
|
|
97
|
+
name: target.name,
|
|
98
|
+
checked: false,
|
|
99
|
+
repaired: false,
|
|
100
|
+
reason: 'target-package-missing',
|
|
101
|
+
targetBaseDir,
|
|
102
|
+
});
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (hasAllFiles(targetBaseDir, target.requiredRuntimeFiles)) {
|
|
107
|
+
results.push({
|
|
108
|
+
name: target.name,
|
|
109
|
+
checked: true,
|
|
110
|
+
repaired: false,
|
|
111
|
+
reason: 'already-valid',
|
|
112
|
+
targetBaseDir,
|
|
113
|
+
});
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const sourceBaseDir = target.sourceBaseDirs.find((candidate) => hasAllFiles(candidate, target.requiredRuntimeFiles));
|
|
118
|
+
if (!sourceBaseDir) {
|
|
119
|
+
throw new Error(
|
|
120
|
+
`[runtime-compat] Missing ${target.requiredRuntimeFiles.join(', ')} under ${targetBaseDir}, and no repair source is available for ${target.name}.`,
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
mkdirSync(targetBaseDir, { recursive: true });
|
|
125
|
+
|
|
126
|
+
const copiedRuntimeFiles = copyMissingFiles(sourceBaseDir, targetBaseDir, target.requiredRuntimeFiles);
|
|
127
|
+
const typeSourceBaseDir = target.sourceBaseDirs.find((candidate) => hasAllFiles(candidate, target.optionalTypeFiles));
|
|
128
|
+
const copiedTypeFiles = typeSourceBaseDir
|
|
129
|
+
? copyMissingFiles(typeSourceBaseDir, targetBaseDir, target.optionalTypeFiles)
|
|
130
|
+
: 0;
|
|
131
|
+
|
|
132
|
+
if (!hasAllFiles(targetBaseDir, target.requiredRuntimeFiles)) {
|
|
133
|
+
throw new Error(
|
|
134
|
+
`[runtime-compat] Repair source ${sourceBaseDir} did not restore ${target.requiredRuntimeFiles.join(', ')} into ${targetBaseDir}.`,
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
results.push({
|
|
139
|
+
name: target.name,
|
|
140
|
+
checked: true,
|
|
141
|
+
repaired: copiedRuntimeFiles > 0 || copiedTypeFiles > 0,
|
|
142
|
+
reason: 'repaired',
|
|
143
|
+
copiedRuntimeFiles,
|
|
144
|
+
copiedTypeFiles,
|
|
145
|
+
sourceBaseDir,
|
|
146
|
+
targetBaseDir,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
const repairedTargets = results.filter((result) => result.repaired);
|
|
151
|
+
const checkedTargets = results.filter((result) => result.checked);
|
|
152
|
+
|
|
153
|
+
return {
|
|
154
|
+
checked: checkedTargets.length > 0,
|
|
155
|
+
repaired: repairedTargets.length > 0,
|
|
156
|
+
reason: repairedTargets.length > 0 ? 'repaired' : 'already-valid',
|
|
157
|
+
results,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
if (isDirectExecution()) {
|
|
162
|
+
const result = ensureAcpSdkCompat();
|
|
163
|
+
|
|
164
|
+
if (result.repaired) {
|
|
165
|
+
for (const target of result.results.filter((entry) => entry.repaired)) {
|
|
166
|
+
console.log(`[runtime-compat] Restored ${target.name} from ${target.sourceBaseDir} -> ${target.targetBaseDir}`);
|
|
167
|
+
}
|
|
168
|
+
} else {
|
|
169
|
+
console.log(`[runtime-compat] ${result.reason}`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import { spawnSync } from 'node:child_process';
|
|
4
|
-
import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
5
|
-
import { tmpdir } from 'node:os';
|
|
6
|
-
import { fileURLToPath } from 'node:url';
|
|
7
|
-
import { dirname, join, resolve } from 'node:path';
|
|
8
|
-
import { ensureAcpSdkCompat } from './ensureAcpSdkCompat.mjs';
|
|
3
|
+
import { spawnSync } from 'node:child_process';
|
|
4
|
+
import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
5
|
+
import { tmpdir } from 'node:os';
|
|
6
|
+
import { fileURLToPath } from 'node:url';
|
|
7
|
+
import { dirname, join, resolve } from 'node:path';
|
|
8
|
+
import { ensureAcpSdkCompat } from './ensureAcpSdkCompat.mjs';
|
|
9
9
|
|
|
10
10
|
const here = dirname(fileURLToPath(import.meta.url));
|
|
11
11
|
const packageRoot = resolve(here, '..');
|
|
@@ -106,10 +106,10 @@ function runToolStep(name, tool, args, options = {}) {
|
|
|
106
106
|
runStep(name, tool.command, [...tool.prefixArgs, ...args], options);
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
function verifyPackedInstall() {
|
|
110
|
-
const tempRoot = mkdtempSync(join(tmpdir(), 'happy-cli-release-smoke-'));
|
|
111
|
-
const packOutputDir = join(tempRoot, 'pack');
|
|
112
|
-
let tarballPath = null;
|
|
109
|
+
function verifyPackedInstall() {
|
|
110
|
+
const tempRoot = mkdtempSync(join(tmpdir(), 'happy-cli-release-smoke-'));
|
|
111
|
+
const packOutputDir = join(tempRoot, 'pack');
|
|
112
|
+
let tarballPath = null;
|
|
113
113
|
|
|
114
114
|
try {
|
|
115
115
|
mkdirSync(packOutputDir, { recursive: true });
|
|
@@ -144,25 +144,25 @@ function verifyPackedInstall() {
|
|
|
144
144
|
cwd: tempRoot,
|
|
145
145
|
});
|
|
146
146
|
|
|
147
|
-
runStep('run packed cli help', 'node', [
|
|
148
|
-
join(tempRoot, 'node_modules', 'happy-imou-cloud', 'bin', 'happy-cloud.mjs'),
|
|
149
|
-
'--help',
|
|
150
|
-
], {
|
|
151
|
-
cwd: tempRoot,
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
runStep('run packed cli auth status', 'node', [
|
|
155
|
-
join(tempRoot, 'node_modules', 'happy-imou-cloud', 'bin', 'happy-cloud.mjs'),
|
|
156
|
-
'auth',
|
|
157
|
-
'status',
|
|
158
|
-
], {
|
|
159
|
-
cwd: tempRoot,
|
|
160
|
-
env: {
|
|
161
|
-
...process.env,
|
|
162
|
-
HAPPY_CLOUD_HOME_DIR: join(tempRoot, '.happy-cloud'),
|
|
163
|
-
},
|
|
164
|
-
});
|
|
165
|
-
} finally {
|
|
147
|
+
runStep('run packed cli help', 'node', [
|
|
148
|
+
join(tempRoot, 'node_modules', 'happy-imou-cloud', 'bin', 'happy-cloud.mjs'),
|
|
149
|
+
'--help',
|
|
150
|
+
], {
|
|
151
|
+
cwd: tempRoot,
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
runStep('run packed cli auth status', 'node', [
|
|
155
|
+
join(tempRoot, 'node_modules', 'happy-imou-cloud', 'bin', 'happy-cloud.mjs'),
|
|
156
|
+
'auth',
|
|
157
|
+
'status',
|
|
158
|
+
], {
|
|
159
|
+
cwd: tempRoot,
|
|
160
|
+
env: {
|
|
161
|
+
...process.env,
|
|
162
|
+
HAPPY_CLOUD_HOME_DIR: join(tempRoot, '.happy-cloud'),
|
|
163
|
+
},
|
|
164
|
+
});
|
|
165
|
+
} finally {
|
|
166
166
|
if (tarballPath) {
|
|
167
167
|
try {
|
|
168
168
|
unlinkSync(tarballPath);
|
|
@@ -183,12 +183,12 @@ function shouldSkipPackedInstallVerification() {
|
|
|
183
183
|
return process.env.npm_lifecycle_event === 'prepublishOnly';
|
|
184
184
|
}
|
|
185
185
|
|
|
186
|
-
function main() {
|
|
187
|
-
const tsc = resolveTool('tsc', 'typescript');
|
|
188
|
-
const vitest = resolveTool('vitest', 'vitest');
|
|
189
|
-
|
|
190
|
-
ensureAcpSdkCompat();
|
|
191
|
-
runToolStep('typecheck', tsc, ['--noEmit']);
|
|
186
|
+
function main() {
|
|
187
|
+
const tsc = resolveTool('tsc', 'typescript');
|
|
188
|
+
const vitest = resolveTool('vitest', 'vitest');
|
|
189
|
+
|
|
190
|
+
ensureAcpSdkCompat();
|
|
191
|
+
runToolStep('typecheck', tsc, ['--noEmit']);
|
|
192
192
|
runToolStep('unit runtime suite', vitest, [
|
|
193
193
|
'run',
|
|
194
194
|
'--testTimeout',
|
|
@@ -224,14 +224,17 @@ function main() {
|
|
|
224
224
|
'src/runtime/RuntimeShell.test.ts',
|
|
225
225
|
'src/runtime/createDefaultRuntimeShell.test.ts',
|
|
226
226
|
'src/agent/claude/ClaudeCodeBackend.test.ts',
|
|
227
|
+
'src/happyOrg/runtime.test.ts',
|
|
227
228
|
'src/claude/loop.test.ts',
|
|
228
229
|
'src/claude/claudeAcpRemoteLauncher.test.ts',
|
|
230
|
+
'src/claude/userMessageQueue.test.ts',
|
|
229
231
|
'src/claude/utils/acpPermissionHandler.test.ts',
|
|
230
232
|
'src/codex/__tests__/runCodex.lifecycle.test.ts',
|
|
231
233
|
'src/codex/__tests__/runtimeSession.test.ts',
|
|
232
234
|
'src/codex/__tests__/selectionHandler.test.ts',
|
|
233
235
|
'src/codex/__tests__/codexRemoteLauncher.acpOnly.test.ts',
|
|
234
236
|
'src/codex/__tests__/codexRemoteLauncher.startupError.test.ts',
|
|
237
|
+
'src/gemini/userMessageQueue.test.ts',
|
|
235
238
|
'src/security/signedTransport.test.ts',
|
|
236
239
|
'src/agent/initializeAgents.test.ts',
|
|
237
240
|
'src/agent/factories/factories.test.ts',
|