imcodes 2026.4.1304-dev.1266 → 2026.4.1308-dev.1276
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/shared/daemon-events.d.ts +7 -0
- package/dist/shared/daemon-events.d.ts.map +1 -0
- package/dist/shared/daemon-events.js +6 -0
- package/dist/shared/daemon-events.js.map +1 -0
- package/dist/src/agent/session-manager.d.ts.map +1 -1
- package/dist/src/agent/session-manager.js +54 -107
- package/dist/src/agent/session-manager.js.map +1 -1
- package/dist/src/daemon/command-handler.d.ts +1 -0
- package/dist/src/daemon/command-handler.d.ts.map +1 -1
- package/dist/src/daemon/command-handler.js +23 -15
- package/dist/src/daemon/command-handler.js.map +1 -1
- package/dist/src/daemon/discussion-orchestrator.d.ts.map +1 -1
- package/dist/src/daemon/discussion-orchestrator.js +0 -2
- package/dist/src/daemon/discussion-orchestrator.js.map +1 -1
- package/dist/src/daemon/lifecycle.d.ts.map +1 -1
- package/dist/src/daemon/lifecycle.js +1 -2
- package/dist/src/daemon/lifecycle.js.map +1 -1
- package/dist/src/daemon/oc-session-sync.d.ts.map +1 -1
- package/dist/src/daemon/oc-session-sync.js +3 -7
- package/dist/src/daemon/oc-session-sync.js.map +1 -1
- package/dist/src/daemon/subsession-manager.d.ts.map +1 -1
- package/dist/src/daemon/subsession-manager.js +3 -4
- package/dist/src/daemon/subsession-manager.js.map +1 -1
- package/dist/src/daemon/terminal-streamer.d.ts.map +1 -1
- package/dist/src/daemon/terminal-streamer.js +9 -6
- package/dist/src/daemon/terminal-streamer.js.map +1 -1
- package/dist/src/store/session-store.d.ts +2 -2
- package/dist/src/store/session-store.d.ts.map +1 -1
- package/dist/src/store/session-store.js +1 -2
- package/dist/src/store/session-store.js.map +1 -1
- package/package.json +1 -1
- package/dist/shared/agent-types.d.ts +0 -4
- package/dist/shared/agent-types.d.ts.map +0 -1
- package/dist/shared/agent-types.js +0 -10
- package/dist/shared/agent-types.js.map +0 -1
- package/dist/shared/runtime-types.d.ts +0 -7
- package/dist/shared/runtime-types.d.ts.map +0 -1
- package/dist/shared/runtime-types.js +0 -8
- package/dist/shared/runtime-types.js.map +0 -1
- package/dist/shared/session-capabilities.d.ts +0 -6
- package/dist/shared/session-capabilities.d.ts.map +0 -1
- package/dist/shared/session-capabilities.js +0 -10
- package/dist/shared/session-capabilities.js.map +0 -1
- package/dist/shared/session-states.d.ts +0 -14
- package/dist/shared/session-states.d.ts.map +0 -1
- package/dist/shared/session-states.js +0 -17
- package/dist/shared/session-states.js.map +0 -1
|
@@ -35,9 +35,8 @@ import { CODEX_MODEL_IDS, normalizeClaudeCodeModelId } from '../shared/models/op
|
|
|
35
35
|
import { getClaudeSdkRuntimeConfig, normalizeClaudeSdkModelForProvider } from '../agent/sdk-runtime-config.js';
|
|
36
36
|
import { getCodexRuntimeConfig } from '../agent/codex-runtime-config.js';
|
|
37
37
|
import { P2P_TERMINAL_RUN_STATUSES } from '../../shared/p2p-status.js';
|
|
38
|
+
import { DAEMON_MSG } from '../../shared/daemon-events.js';
|
|
38
39
|
import { CLAUDE_SDK_EFFORT_LEVELS, CODEX_SDK_EFFORT_LEVELS, DEFAULT_TRANSPORT_EFFORT, OPENCLAW_THINKING_LEVELS, QWEN_EFFORT_LEVELS, isTransportEffortLevel, } from '../../shared/effort-levels.js';
|
|
39
|
-
import { SESSION_STATE } from '../../shared/session-states.js';
|
|
40
|
-
import { canSessionUseTerminal } from '../../shared/session-capabilities.js';
|
|
41
40
|
/**
|
|
42
41
|
* Build a unified subsession.sync payload from the session store record.
|
|
43
42
|
* Ensures all fields (including Qwen metadata) are always sent — no more
|
|
@@ -81,7 +80,6 @@ async function buildSubSessionSync(id, overrides) {
|
|
|
81
80
|
providerId: r?.providerId ?? null,
|
|
82
81
|
providerSessionId: r?.providerSessionId ?? null,
|
|
83
82
|
requestedModel: r?.requestedModel ?? null,
|
|
84
|
-
state: r?.state ?? SESSION_STATE.UNKNOWN,
|
|
85
83
|
activeModel: r?.activeModel ?? r?.modelDisplay ?? null,
|
|
86
84
|
transportConfig: r?.transportConfig ?? null,
|
|
87
85
|
// Qwen metadata — freshly computed display fields + stored config fields
|
|
@@ -588,7 +586,7 @@ export function handleWebCommand(msg, serverLink) {
|
|
|
588
586
|
void handleServerDelete();
|
|
589
587
|
break;
|
|
590
588
|
case 'daemon.upgrade':
|
|
591
|
-
void handleDaemonUpgrade(cmd.targetVersion);
|
|
589
|
+
void handleDaemonUpgrade(cmd.targetVersion, serverLink);
|
|
592
590
|
break;
|
|
593
591
|
case 'file.search':
|
|
594
592
|
void handleFileSearch(cmd, serverLink);
|
|
@@ -1482,16 +1480,6 @@ function handleSubscribe(cmd, serverLink) {
|
|
|
1482
1480
|
const session = cmd.session;
|
|
1483
1481
|
if (!session)
|
|
1484
1482
|
return;
|
|
1485
|
-
const record = getSession(session);
|
|
1486
|
-
if (!canSessionUseTerminal(record)) {
|
|
1487
|
-
const existing = activeSubscriptions.get(session);
|
|
1488
|
-
if (existing) {
|
|
1489
|
-
existing.unsubscribe();
|
|
1490
|
-
activeSubscriptions.delete(session);
|
|
1491
|
-
}
|
|
1492
|
-
logger.debug({ session, runtimeType: record?.runtimeType, agentType: record?.agentType }, 'Ignored terminal subscribe for non-terminal session');
|
|
1493
|
-
return;
|
|
1494
|
-
}
|
|
1495
1483
|
// The bridge may include a `raw` flag on terminal.subscribe for its own forwarding-mode
|
|
1496
1484
|
// bookkeeping, but daemon-side terminal streaming remains transport-stable in this phase:
|
|
1497
1485
|
// once subscribed for a session, we continue emitting both text diffs and raw PTY bytes.
|
|
@@ -2175,7 +2163,24 @@ async function handleDiscussionStop(cmd) {
|
|
|
2175
2163
|
* 3. A short sleep before the restart gives the current daemon time to finish
|
|
2176
2164
|
* sending any in-flight messages.
|
|
2177
2165
|
*/
|
|
2178
|
-
async function handleDaemonUpgrade(targetVersion) {
|
|
2166
|
+
async function handleDaemonUpgrade(targetVersion, serverLink) {
|
|
2167
|
+
const activeRuns = getActiveP2pRunsBlockingDaemonUpgrade();
|
|
2168
|
+
if (activeRuns.length > 0) {
|
|
2169
|
+
logger.warn({
|
|
2170
|
+
targetVersion,
|
|
2171
|
+
activeRunIds: activeRuns.map((run) => run.id),
|
|
2172
|
+
activeRunStatuses: activeRuns.map((run) => run.status),
|
|
2173
|
+
}, 'daemon.upgrade: blocked because P2P runs are active');
|
|
2174
|
+
try {
|
|
2175
|
+
serverLink?.send({
|
|
2176
|
+
type: DAEMON_MSG.UPGRADE_BLOCKED,
|
|
2177
|
+
reason: 'p2p_active',
|
|
2178
|
+
activeRunIds: activeRuns.map((run) => run.id),
|
|
2179
|
+
});
|
|
2180
|
+
}
|
|
2181
|
+
catch { /* ignore */ }
|
|
2182
|
+
return;
|
|
2183
|
+
}
|
|
2179
2184
|
const { spawn } = await import('child_process');
|
|
2180
2185
|
const { writeFileSync, mkdtempSync, existsSync } = await import('fs');
|
|
2181
2186
|
const { join, dirname } = await import('path');
|
|
@@ -2370,6 +2375,9 @@ const FILE_SEARCH_EXCLUDES = new Set([
|
|
|
2370
2375
|
'dist', 'build', '.next', '.nuxt', 'vendor', 'target',
|
|
2371
2376
|
]);
|
|
2372
2377
|
const FILE_SEARCH_MAX = 20;
|
|
2378
|
+
export function getActiveP2pRunsBlockingDaemonUpgrade(runs = listP2pRuns()) {
|
|
2379
|
+
return runs.filter((run) => !P2P_TERMINAL_RUN_STATUSES.has(run.status));
|
|
2380
|
+
}
|
|
2373
2381
|
async function handleFileSearch(cmd, serverLink) {
|
|
2374
2382
|
const query = (cmd.query ?? '').trim();
|
|
2375
2383
|
const projectDir = cmd.projectDir;
|