happy-imou-cloud 2.1.43 → 2.1.44
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/compat/acp-sdk-schema/index.d.ts +16 -3
- package/compat/acp-sdk-schema/index.js +15 -2
- package/compat/acp-sdk-schema/types.gen.d.ts +1801 -313
- package/compat/acp-sdk-schema/zod.gen.d.ts +3267 -1775
- package/compat/acp-sdk-schema/zod.gen.js +1007 -316
- package/dist/{BaseReasoningProcessor-D6itItnT.cjs → BaseReasoningProcessor-CMyFNQ1O.cjs} +2 -2
- package/dist/{BaseReasoningProcessor-CWCPAVJ3.mjs → BaseReasoningProcessor-DVSN7PCw.mjs} +2 -2
- package/dist/{ProviderSelectionHandler-CYUH1U8F.mjs → ProviderSelectionHandler-2IaDlDBx.mjs} +2 -2
- package/dist/{ProviderSelectionHandler-CXwqOJpC.cjs → ProviderSelectionHandler-Dqa4j1pD.cjs} +2 -2
- package/dist/{api-B89O-SC-.mjs → api-BhMVpzwg.mjs} +12 -8
- package/dist/{api-zMic8QXq.cjs → api-BoWVQeVe.cjs} +12 -8
- package/dist/{command-_qNFoJ-l.cjs → command-DoF8oaxg.cjs} +2 -2
- package/dist/{command-W01qXC9C.mjs → command-h3Rr4Abu.mjs} +2 -2
- package/dist/{index-CiHiCC31.mjs → index-DxF1W0nt.mjs} +57 -14
- package/dist/{index-DVVbyQGZ.cjs → index-kIN8gN9G.cjs} +60 -17
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +2 -2
- package/dist/lib.cjs +1 -1
- package/dist/lib.d.cts +335 -336
- package/dist/lib.d.mts +335 -336
- package/dist/lib.mjs +1 -1
- package/dist/{registerKillSessionHandler-CDYAY5Ev.cjs → registerKillSessionHandler-CBm2WFM0.cjs} +2 -2
- package/dist/{registerKillSessionHandler-BnS3ozFX.mjs → registerKillSessionHandler-Dsg63Cx6.mjs} +2 -2
- package/dist/{runClaude-0U7kV07_.mjs → runClaude-BpwlCyVT.mjs} +4 -4
- package/dist/{runClaude-C1xfptKt.cjs → runClaude-Dq9OISKt.cjs} +4 -4
- package/dist/{runCodex-DnDmHm7E.mjs → runCodex-BMNR2hNp.mjs} +5 -5
- package/dist/{runCodex-BBgKpYLO.cjs → runCodex-BnzErOK_.cjs} +5 -5
- package/dist/{runGemini-CUwQHJ9y.cjs → runGemini-CYc9Ufxo.cjs} +4 -4
- package/dist/{runGemini-DcsIBQSc.mjs → runGemini-D4Af8oH1.mjs} +4 -4
- package/package.json +2 -2
- package/scripts/ensureAcpSdkCompat.mjs +37 -11
- package/scripts/release-smoke.mjs +1 -0
package/dist/lib.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { A as ApiClient, a as ApiSessionClient, c as configuration, l as logger } from './api-
|
|
1
|
+
export { A as ApiClient, a as ApiSessionClient, c as configuration, l as logger } from './api-BhMVpzwg.mjs';
|
|
2
2
|
export { R as RawJSONLinesSchema } from './types-CiliQpqS.mjs';
|
|
3
3
|
import 'axios';
|
|
4
4
|
import 'chalk';
|
package/dist/{registerKillSessionHandler-CDYAY5Ev.cjs → registerKillSessionHandler-CBm2WFM0.cjs}
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var index = require('./index-
|
|
4
|
-
var persistence = require('./api-
|
|
3
|
+
var index = require('./index-kIN8gN9G.cjs');
|
|
4
|
+
var persistence = require('./api-BoWVQeVe.cjs');
|
|
5
5
|
var node_crypto = require('node:crypto');
|
|
6
6
|
var path = require('node:path');
|
|
7
7
|
require('axios');
|
package/dist/{registerKillSessionHandler-BnS3ozFX.mjs → registerKillSessionHandler-Dsg63Cx6.mjs}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { k as initialMachineMetadata, R as RuntimeShell, f as formatDisplayMessage, l as resolveCanonicalToolNameV2, m as isTerminalReferenceOnlyPayload, t as truncateDisplayMessage } from './index-
|
|
2
|
-
import { r as readSettings, H as HeadTailPreviewBuffer, e as HAPPY_ORG_REPLY_ACK_VERSION, f as HAPPY_ORG_TURN_REPORT_TAG, g as HAPPY_ORG_SUMMARY_MAX_LENGTH, j as HAPPY_ORG_REPEAT_THRESHOLD, l as logger, n as normalizePreviewableArtifactTarget } from './api-
|
|
1
|
+
import { k as initialMachineMetadata, R as RuntimeShell, f as formatDisplayMessage, l as resolveCanonicalToolNameV2, m as isTerminalReferenceOnlyPayload, t as truncateDisplayMessage } from './index-DxF1W0nt.mjs';
|
|
2
|
+
import { r as readSettings, H as HeadTailPreviewBuffer, e as HAPPY_ORG_REPLY_ACK_VERSION, f as HAPPY_ORG_TURN_REPORT_TAG, g as HAPPY_ORG_SUMMARY_MAX_LENGTH, j as HAPPY_ORG_REPEAT_THRESHOLD, l as logger, n as normalizePreviewableArtifactTarget } from './api-BhMVpzwg.mjs';
|
|
3
3
|
import { randomUUID } from 'node:crypto';
|
|
4
4
|
import { basename } from 'node:path';
|
|
5
5
|
import 'axios';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
|
-
import { l as logger, k as backoff, m as delay, d as AssistantMessageStream, o as AsyncLock, c as configuration, s as startOfflineReconnection, b as connectionState, A as ApiClient, i as isAuthenticationRequiredError, h as hashObject } from './api-
|
|
2
|
+
import { l as logger, k as backoff, m as delay, d as AssistantMessageStream, o as AsyncLock, c as configuration, s as startOfflineReconnection, b as connectionState, A as ApiClient, i as isAuthenticationRequiredError, h as hashObject } from './api-BhMVpzwg.mjs';
|
|
3
3
|
import 'cross-spawn';
|
|
4
4
|
import '@agentclientprotocol/sdk';
|
|
5
|
-
import { n as getProjectPath, F as Future, o as claudeLocal, E as ExitCodeError, q as trimIdent, u as createClaudeBackend, f as formatDisplayMessage, t as truncateDisplayMessage, w as claudeCheckSession, x as projectPath, y as mapToClaudeMode, P as PushableAsyncIterable, z as query, A as AbortError, e as stopCaffeinate, p as publishSessionRegistration, B as getEnvironmentInfo, a as createSessionMetadata, C as startCaffeinate, b as closeProviderSession } from './index-
|
|
5
|
+
import { n as getProjectPath, F as Future, o as claudeLocal, E as ExitCodeError, q as trimIdent, u as createClaudeBackend, f as formatDisplayMessage, t as truncateDisplayMessage, w as claudeCheckSession, x as projectPath, y as mapToClaudeMode, P as PushableAsyncIterable, z as query, A as AbortError, e as stopCaffeinate, p as publishSessionRegistration, B as getEnvironmentInfo, a as createSessionMetadata, C as startCaffeinate, b as closeProviderSession } from './index-DxF1W0nt.mjs';
|
|
6
6
|
import 'ps-list';
|
|
7
7
|
import 'fs';
|
|
8
8
|
import 'path';
|
|
@@ -23,9 +23,9 @@ import 'tweetnacl';
|
|
|
23
23
|
import 'open';
|
|
24
24
|
import React, { useState, useRef, useEffect, useCallback } from 'react';
|
|
25
25
|
import { useStdout, useInput, Box, Text, render } from 'ink';
|
|
26
|
-
import { c as createKeepAliveController, P as ProviderSelectionHandler, r as runModeLoop } from './ProviderSelectionHandler-
|
|
26
|
+
import { c as createKeepAliveController, P as ProviderSelectionHandler, r as runModeLoop } from './ProviderSelectionHandler-2IaDlDBx.mjs';
|
|
27
27
|
import { R as RawJSONLinesSchema } from './types-CiliQpqS.mjs';
|
|
28
|
-
import { B as BasePermissionHandler, d as MessageBuffer, C as ConversationHistory$1, f as buildHappyOrgTurnPrompt, w as waitForResponseCompleteWithAbort, h as finalizeHappyOrgTurnWithBusinessAck, i as buildTurnResultPushNotification, q as createSessionTranscriptInkRenderer, j as buildReadyPushNotification, l as launchRuntimeHandleWithFactoryResult, n as renderTerminalOutputPreview, p as forwardAgentMessageToProviderSession, m as buildPermissionPushNotification, s as syncControlledByUserState, r as resolveHappyOrgQueuedTurn, e as ensureManagedProviderMachine, M as MissingMachineIdError, b as MessageQueue2, c as registerKillSessionHandler } from './registerKillSessionHandler-
|
|
28
|
+
import { B as BasePermissionHandler, d as MessageBuffer, C as ConversationHistory$1, f as buildHappyOrgTurnPrompt, w as waitForResponseCompleteWithAbort, h as finalizeHappyOrgTurnWithBusinessAck, i as buildTurnResultPushNotification, q as createSessionTranscriptInkRenderer, j as buildReadyPushNotification, l as launchRuntimeHandleWithFactoryResult, n as renderTerminalOutputPreview, p as forwardAgentMessageToProviderSession, m as buildPermissionPushNotification, s as syncControlledByUserState, r as resolveHappyOrgQueuedTurn, e as ensureManagedProviderMachine, M as MissingMachineIdError, b as MessageQueue2, c as registerKillSessionHandler } from './registerKillSessionHandler-Dsg63Cx6.mjs';
|
|
29
29
|
import 'socket.io-client';
|
|
30
30
|
import 'expo-server-sdk';
|
|
31
31
|
import { isDeepStrictEqual } from 'node:util';
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var node_crypto = require('node:crypto');
|
|
4
|
-
var persistence = require('./api-
|
|
4
|
+
var persistence = require('./api-BoWVQeVe.cjs');
|
|
5
5
|
require('cross-spawn');
|
|
6
6
|
require('@agentclientprotocol/sdk');
|
|
7
|
-
var index = require('./index-
|
|
7
|
+
var index = require('./index-kIN8gN9G.cjs');
|
|
8
8
|
require('ps-list');
|
|
9
9
|
require('fs');
|
|
10
10
|
require('path');
|
|
@@ -25,9 +25,9 @@ require('tweetnacl');
|
|
|
25
25
|
require('open');
|
|
26
26
|
var React = require('react');
|
|
27
27
|
var ink = require('ink');
|
|
28
|
-
var ProviderSelectionHandler = require('./ProviderSelectionHandler-
|
|
28
|
+
var ProviderSelectionHandler = require('./ProviderSelectionHandler-Dqa4j1pD.cjs');
|
|
29
29
|
var types = require('./types-DVk3crez.cjs');
|
|
30
|
-
var registerKillSessionHandler = require('./registerKillSessionHandler-
|
|
30
|
+
var registerKillSessionHandler = require('./registerKillSessionHandler-CBm2WFM0.cjs');
|
|
31
31
|
require('socket.io-client');
|
|
32
32
|
require('expo-server-sdk');
|
|
33
33
|
var node_util = require('node:util');
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { p as preserveSessionRuntimeMetadata, l as logger, h as hashObject, d as AssistantMessageStream, b as connectionState, A as ApiClient } from './api-
|
|
2
|
-
import { B as BasePermissionHandler, d as MessageBuffer, C as ConversationHistory$1, f as buildHappyOrgTurnPrompt, w as waitForResponseCompleteWithAbort, h as finalizeHappyOrgTurnWithBusinessAck, i as buildTurnResultPushNotification, c as registerKillSessionHandler, j as buildReadyPushNotification, l as launchRuntimeHandleWithFactoryResult, q as createSessionTranscriptInkRenderer, k as extractPermissionRequestPushContext, m as buildPermissionPushNotification, n as renderTerminalOutputPreview, o as inferToolResultError, p as forwardAgentMessageToProviderSession, e as ensureManagedProviderMachine, M as MissingMachineIdError, b as MessageQueue2, r as resolveHappyOrgQueuedTurn, s as syncControlledByUserState } from './registerKillSessionHandler-
|
|
3
|
-
import { f as formatDisplayMessage, v as validateCodexAcpSpawn, h as createCodexBackend, t as truncateDisplayMessage, b as closeProviderSession, e as stopCaffeinate, i as readManagedSessionTag, j as resolveManagedSessionTag } from './index-
|
|
1
|
+
import { p as preserveSessionRuntimeMetadata, l as logger, h as hashObject, d as AssistantMessageStream, b as connectionState, A as ApiClient } from './api-BhMVpzwg.mjs';
|
|
2
|
+
import { B as BasePermissionHandler, d as MessageBuffer, C as ConversationHistory$1, f as buildHappyOrgTurnPrompt, w as waitForResponseCompleteWithAbort, h as finalizeHappyOrgTurnWithBusinessAck, i as buildTurnResultPushNotification, c as registerKillSessionHandler, j as buildReadyPushNotification, l as launchRuntimeHandleWithFactoryResult, q as createSessionTranscriptInkRenderer, k as extractPermissionRequestPushContext, m as buildPermissionPushNotification, n as renderTerminalOutputPreview, o as inferToolResultError, p as forwardAgentMessageToProviderSession, e as ensureManagedProviderMachine, M as MissingMachineIdError, b as MessageQueue2, r as resolveHappyOrgQueuedTurn, s as syncControlledByUserState } from './registerKillSessionHandler-Dsg63Cx6.mjs';
|
|
3
|
+
import { f as formatDisplayMessage, v as validateCodexAcpSpawn, h as createCodexBackend, t as truncateDisplayMessage, b as closeProviderSession, e as stopCaffeinate, i as readManagedSessionTag, j as resolveManagedSessionTag } from './index-DxF1W0nt.mjs';
|
|
4
4
|
import 'cross-spawn';
|
|
5
5
|
import '@agentclientprotocol/sdk';
|
|
6
6
|
import { randomUUID } from 'node:crypto';
|
|
@@ -24,8 +24,8 @@ import 'tweetnacl';
|
|
|
24
24
|
import 'open';
|
|
25
25
|
import React, { useState, useRef, useEffect, useCallback } from 'react';
|
|
26
26
|
import { useStdout, useInput, Box, Text, render } from 'ink';
|
|
27
|
-
import { c as createKeepAliveController, P as ProviderSelectionHandler, r as runModeLoop } from './ProviderSelectionHandler-
|
|
28
|
-
import { B as BaseReasoningProcessor, b as bootstrapManagedProviderSession } from './BaseReasoningProcessor-
|
|
27
|
+
import { c as createKeepAliveController, P as ProviderSelectionHandler, r as runModeLoop } from './ProviderSelectionHandler-2IaDlDBx.mjs';
|
|
28
|
+
import { B as BaseReasoningProcessor, b as bootstrapManagedProviderSession } from './BaseReasoningProcessor-DVSN7PCw.mjs';
|
|
29
29
|
import 'zod';
|
|
30
30
|
import 'socket.io-client';
|
|
31
31
|
import 'expo-server-sdk';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var persistence = require('./api-
|
|
4
|
-
var registerKillSessionHandler = require('./registerKillSessionHandler-
|
|
5
|
-
var index = require('./index-
|
|
3
|
+
var persistence = require('./api-BoWVQeVe.cjs');
|
|
4
|
+
var registerKillSessionHandler = require('./registerKillSessionHandler-CBm2WFM0.cjs');
|
|
5
|
+
var index = require('./index-kIN8gN9G.cjs');
|
|
6
6
|
require('cross-spawn');
|
|
7
7
|
require('@agentclientprotocol/sdk');
|
|
8
8
|
var node_crypto = require('node:crypto');
|
|
@@ -26,8 +26,8 @@ require('tweetnacl');
|
|
|
26
26
|
require('open');
|
|
27
27
|
var React = require('react');
|
|
28
28
|
var ink = require('ink');
|
|
29
|
-
var ProviderSelectionHandler = require('./ProviderSelectionHandler-
|
|
30
|
-
var BaseReasoningProcessor = require('./BaseReasoningProcessor-
|
|
29
|
+
var ProviderSelectionHandler = require('./ProviderSelectionHandler-Dqa4j1pD.cjs');
|
|
30
|
+
var BaseReasoningProcessor = require('./BaseReasoningProcessor-CMyFNQ1O.cjs');
|
|
31
31
|
require('zod');
|
|
32
32
|
require('socket.io-client');
|
|
33
33
|
require('expo-server-sdk');
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
var ink = require('ink');
|
|
4
4
|
var React = require('react');
|
|
5
5
|
var node_crypto = require('node:crypto');
|
|
6
|
-
var persistence = require('./api-
|
|
7
|
-
var registerKillSessionHandler = require('./registerKillSessionHandler-
|
|
8
|
-
var index = require('./index-
|
|
9
|
-
var BaseReasoningProcessor = require('./BaseReasoningProcessor-
|
|
6
|
+
var persistence = require('./api-BoWVQeVe.cjs');
|
|
7
|
+
var registerKillSessionHandler = require('./registerKillSessionHandler-CBm2WFM0.cjs');
|
|
8
|
+
var index = require('./index-kIN8gN9G.cjs');
|
|
9
|
+
var BaseReasoningProcessor = require('./BaseReasoningProcessor-CMyFNQ1O.cjs');
|
|
10
10
|
require('cross-spawn');
|
|
11
11
|
require('@agentclientprotocol/sdk');
|
|
12
12
|
require('ps-list');
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { useStdout, useInput, Box, Text, render } from 'ink';
|
|
2
2
|
import React, { useState, useRef, useEffect, useCallback } from 'react';
|
|
3
3
|
import { randomUUID } from 'node:crypto';
|
|
4
|
-
import { l as logger, b as connectionState, A as ApiClient, h as hashObject, d as AssistantMessageStream } from './api-
|
|
5
|
-
import { B as BasePermissionHandler, C as ConversationHistory$1, r as resolveHappyOrgQueuedTurn, e as ensureManagedProviderMachine, M as MissingMachineIdError, s as syncControlledByUserState, b as MessageQueue2, c as registerKillSessionHandler, d as MessageBuffer, f as buildHappyOrgTurnPrompt, w as waitForResponseCompleteWithAbort, h as finalizeHappyOrgTurnWithBusinessAck, i as buildTurnResultPushNotification, j as buildReadyPushNotification, l as launchRuntimeHandleWithFactoryResult, k as extractPermissionRequestPushContext, m as buildPermissionPushNotification, n as renderTerminalOutputPreview, o as inferToolResultError, p as forwardAgentMessageToProviderSession, q as createSessionTranscriptInkRenderer } from './registerKillSessionHandler-
|
|
6
|
-
import { g as getInitialGeminiModel, r as readGeminiLocalConfig, G as GEMINI_MODEL_ENV, b as closeProviderSession, s as saveGeminiModelToConfig, d as createGeminiBackend, e as stopCaffeinate } from './index-
|
|
7
|
-
import { B as BaseReasoningProcessor, b as bootstrapManagedProviderSession } from './BaseReasoningProcessor-
|
|
4
|
+
import { l as logger, b as connectionState, A as ApiClient, h as hashObject, d as AssistantMessageStream } from './api-BhMVpzwg.mjs';
|
|
5
|
+
import { B as BasePermissionHandler, C as ConversationHistory$1, r as resolveHappyOrgQueuedTurn, e as ensureManagedProviderMachine, M as MissingMachineIdError, s as syncControlledByUserState, b as MessageQueue2, c as registerKillSessionHandler, d as MessageBuffer, f as buildHappyOrgTurnPrompt, w as waitForResponseCompleteWithAbort, h as finalizeHappyOrgTurnWithBusinessAck, i as buildTurnResultPushNotification, j as buildReadyPushNotification, l as launchRuntimeHandleWithFactoryResult, k as extractPermissionRequestPushContext, m as buildPermissionPushNotification, n as renderTerminalOutputPreview, o as inferToolResultError, p as forwardAgentMessageToProviderSession, q as createSessionTranscriptInkRenderer } from './registerKillSessionHandler-Dsg63Cx6.mjs';
|
|
6
|
+
import { g as getInitialGeminiModel, r as readGeminiLocalConfig, G as GEMINI_MODEL_ENV, b as closeProviderSession, s as saveGeminiModelToConfig, d as createGeminiBackend, e as stopCaffeinate } from './index-DxF1W0nt.mjs';
|
|
7
|
+
import { B as BaseReasoningProcessor, b as bootstrapManagedProviderSession } from './BaseReasoningProcessor-DVSN7PCw.mjs';
|
|
8
8
|
import 'cross-spawn';
|
|
9
9
|
import '@agentclientprotocol/sdk';
|
|
10
10
|
import 'ps-list';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "happy-imou-cloud",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.44",
|
|
4
4
|
"description": "hicloud - Imou 企业定制版。关键是 happy!移动端远程 AI 编程工具,支持 Claude Code、Codex 和 Gemini CLI",
|
|
5
5
|
"author": "long.zhu",
|
|
6
6
|
"license": "MIT",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"test:happy-org-1.2-quality": "node ../../node_modules/vitest/vitest.mjs run --config vitest.happy-org-1.2.config.mjs"
|
|
88
88
|
},
|
|
89
89
|
"dependencies": {
|
|
90
|
-
"@agentclientprotocol/sdk": "0.
|
|
90
|
+
"@agentclientprotocol/sdk": "0.21.0",
|
|
91
91
|
"@stablelib/base64": "^2.0.1",
|
|
92
92
|
"@stablelib/hex": "^2.0.1",
|
|
93
93
|
"@types/cross-spawn": "^6.0.6",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { copyFileSync, existsSync, mkdirSync } from 'node:fs';
|
|
1
|
+
import { copyFileSync, existsSync, mkdirSync, readFileSync } from 'node:fs';
|
|
2
2
|
import { dirname, resolve, join } from 'node:path';
|
|
3
3
|
import { fileURLToPath } from 'node:url';
|
|
4
4
|
|
|
@@ -61,14 +61,26 @@ function hasAllFiles(directory, files) {
|
|
|
61
61
|
return files.every((file) => existsSync(join(directory, file)));
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
function
|
|
64
|
+
function filesMatch(sourceFile, targetFile) {
|
|
65
|
+
if (!existsSync(sourceFile) || !existsSync(targetFile)) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return readFileSync(sourceFile).equals(readFileSync(targetFile));
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function hasMatchingFiles(sourceDir, targetDir, files) {
|
|
73
|
+
return files.every((file) => filesMatch(join(sourceDir, file), join(targetDir, file)));
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function copyChangedFiles(sourceDir, targetDir, files) {
|
|
65
77
|
let copied = 0;
|
|
66
78
|
|
|
67
79
|
for (const file of files) {
|
|
68
80
|
const sourceFile = join(sourceDir, file);
|
|
69
81
|
const targetFile = join(targetDir, file);
|
|
70
82
|
|
|
71
|
-
if (!existsSync(sourceFile) ||
|
|
83
|
+
if (!existsSync(sourceFile) || filesMatch(sourceFile, targetFile)) {
|
|
72
84
|
continue;
|
|
73
85
|
}
|
|
74
86
|
|
|
@@ -91,6 +103,9 @@ export function ensureAcpSdkCompat(options = {}) {
|
|
|
91
103
|
const targetPackageDir = resolve(target.targetPackageDir);
|
|
92
104
|
const targetBaseDir = join(targetPackageDir, target.targetBaseDir);
|
|
93
105
|
const sentinelFile = join(targetPackageDir, target.sentinelFile);
|
|
106
|
+
const requiredRuntimeFiles = Array.isArray(target.requiredRuntimeFiles) ? target.requiredRuntimeFiles : [];
|
|
107
|
+
const optionalTypeFiles = Array.isArray(target.optionalTypeFiles) ? target.optionalTypeFiles : [];
|
|
108
|
+
const sourceBaseDirs = Array.isArray(target.sourceBaseDirs) ? target.sourceBaseDirs : [];
|
|
94
109
|
|
|
95
110
|
if (!existsSync(sentinelFile)) {
|
|
96
111
|
results.push({
|
|
@@ -103,7 +118,20 @@ export function ensureAcpSdkCompat(options = {}) {
|
|
|
103
118
|
continue;
|
|
104
119
|
}
|
|
105
120
|
|
|
106
|
-
|
|
121
|
+
const sourceBaseDir = sourceBaseDirs.find((candidate) => hasAllFiles(candidate, requiredRuntimeFiles));
|
|
122
|
+
const typeSourceBaseDir = optionalTypeFiles.length > 0
|
|
123
|
+
? sourceBaseDirs.find((candidate) => hasAllFiles(candidate, optionalTypeFiles))
|
|
124
|
+
: null;
|
|
125
|
+
|
|
126
|
+
const hasRequiredRuntimeFiles = hasAllFiles(targetBaseDir, requiredRuntimeFiles);
|
|
127
|
+
const runtimeFilesMatchSource = sourceBaseDir
|
|
128
|
+
? hasMatchingFiles(sourceBaseDir, targetBaseDir, requiredRuntimeFiles)
|
|
129
|
+
: hasRequiredRuntimeFiles;
|
|
130
|
+
const typeFilesMatchSource = typeSourceBaseDir
|
|
131
|
+
? hasMatchingFiles(typeSourceBaseDir, targetBaseDir, optionalTypeFiles)
|
|
132
|
+
: true;
|
|
133
|
+
|
|
134
|
+
if (runtimeFilesMatchSource && typeFilesMatchSource) {
|
|
107
135
|
results.push({
|
|
108
136
|
name: target.name,
|
|
109
137
|
checked: true,
|
|
@@ -114,24 +142,22 @@ export function ensureAcpSdkCompat(options = {}) {
|
|
|
114
142
|
continue;
|
|
115
143
|
}
|
|
116
144
|
|
|
117
|
-
const sourceBaseDir = target.sourceBaseDirs.find((candidate) => hasAllFiles(candidate, target.requiredRuntimeFiles));
|
|
118
145
|
if (!sourceBaseDir) {
|
|
119
146
|
throw new Error(
|
|
120
|
-
`[runtime-compat] Missing ${
|
|
147
|
+
`[runtime-compat] Missing ${requiredRuntimeFiles.join(', ')} under ${targetBaseDir}, and no repair source is available for ${target.name}.`,
|
|
121
148
|
);
|
|
122
149
|
}
|
|
123
150
|
|
|
124
151
|
mkdirSync(targetBaseDir, { recursive: true });
|
|
125
152
|
|
|
126
|
-
const copiedRuntimeFiles =
|
|
127
|
-
const typeSourceBaseDir = target.sourceBaseDirs.find((candidate) => hasAllFiles(candidate, target.optionalTypeFiles));
|
|
153
|
+
const copiedRuntimeFiles = copyChangedFiles(sourceBaseDir, targetBaseDir, requiredRuntimeFiles);
|
|
128
154
|
const copiedTypeFiles = typeSourceBaseDir
|
|
129
|
-
?
|
|
155
|
+
? copyChangedFiles(typeSourceBaseDir, targetBaseDir, optionalTypeFiles)
|
|
130
156
|
: 0;
|
|
131
157
|
|
|
132
|
-
if (!
|
|
158
|
+
if (!hasMatchingFiles(sourceBaseDir, targetBaseDir, requiredRuntimeFiles)) {
|
|
133
159
|
throw new Error(
|
|
134
|
-
`[runtime-compat] Repair source ${sourceBaseDir} did not restore ${
|
|
160
|
+
`[runtime-compat] Repair source ${sourceBaseDir} did not restore ${requiredRuntimeFiles.join(', ')} into ${targetBaseDir}.`,
|
|
135
161
|
);
|
|
136
162
|
}
|
|
137
163
|
|
|
@@ -198,6 +198,7 @@ function main() {
|
|
|
198
198
|
'src/agent/acp/AcpBackend.startup.test.ts',
|
|
199
199
|
'src/agent/acp/AcpBackend.waitForResponseComplete.test.ts',
|
|
200
200
|
'src/agent/acp/AcpBackend.initDelay.test.ts',
|
|
201
|
+
'src/agent/acp/AcpBackend.streams.test.ts',
|
|
201
202
|
'src/agent/acp/acpSpawn.test.ts',
|
|
202
203
|
'src/agent/acp/createAcpFilteredStdoutReadable.multiline.test.ts',
|
|
203
204
|
'src/agent/acp/killProcessTree.test.ts',
|