cli-jaw 2.17.72 → 2.17.73
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 +16 -0
- package/dist/src/agent/aside-catalog.js +339 -0
- package/dist/src/agent/aside-catalog.js.map +1 -0
- package/dist/src/agent/aside-cli.js +208 -0
- package/dist/src/agent/aside-cli.js.map +1 -0
- package/dist/src/agent/aside-replay.js +120 -0
- package/dist/src/agent/aside-replay.js.map +1 -0
- package/dist/src/agent/aside-runtime.js +175 -0
- package/dist/src/agent/aside-runtime.js.map +1 -0
- package/dist/src/agent/lifecycle-handler.js +26 -18
- package/dist/src/agent/lifecycle-handler.js.map +1 -1
- package/dist/src/agent/memory-flush-controller.js +3 -0
- package/dist/src/agent/memory-flush-controller.js.map +1 -1
- package/dist/src/agent/prompt-context.js +2 -2
- package/dist/src/agent/prompt-context.js.map +1 -1
- package/dist/src/agent/session-persistence.js +2 -0
- package/dist/src/agent/session-persistence.js.map +1 -1
- package/dist/src/agent/spawn/backend-aside.js +314 -0
- package/dist/src/agent/spawn/backend-aside.js.map +1 -0
- package/dist/src/agent/spawn/resume.js +3 -0
- package/dist/src/agent/spawn/resume.js.map +1 -1
- package/dist/src/agent/spawn-env.js +5 -0
- package/dist/src/agent/spawn-env.js.map +1 -1
- package/dist/src/agent/spawn.js +60 -6
- package/dist/src/agent/spawn.js.map +1 -1
- package/dist/src/cli/cli-status-worker.js +2 -1
- package/dist/src/cli/cli-status-worker.js.map +1 -1
- package/dist/src/cli/employee-handler.js +2 -0
- package/dist/src/cli/employee-handler.js.map +1 -1
- package/dist/src/cli/handlers-completions.js +20 -8
- package/dist/src/cli/handlers-completions.js.map +1 -1
- package/dist/src/cli/handlers-runtime.js +2 -0
- package/dist/src/cli/handlers-runtime.js.map +1 -1
- package/dist/src/cli/readiness.js +7 -3
- package/dist/src/cli/readiness.js.map +1 -1
- package/dist/src/cli/registry-live.js +47 -0
- package/dist/src/cli/registry-live.js.map +1 -1
- package/dist/src/cli/registry.js +5 -0
- package/dist/src/cli/registry.js.map +1 -1
- package/dist/src/core/config.js +10 -3
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/core/employees.js +5 -3
- package/dist/src/core/employees.js.map +1 -1
- package/dist/src/core/settings-merge.js +35 -0
- package/dist/src/core/settings-merge.js.map +1 -1
- package/dist/src/core/settings-watch.js +10 -1
- package/dist/src/core/settings-watch.js.map +1 -1
- package/dist/src/orchestrator/gateway.js +2 -0
- package/dist/src/orchestrator/gateway.js.map +1 -1
- package/dist/src/routes/employees.js +8 -0
- package/dist/src/routes/employees.js.map +1 -1
- package/dist/src/routes/jaw-memory.js +4 -0
- package/dist/src/routes/jaw-memory.js.map +1 -1
- package/dist/src/routes/orchestrate.js +22 -3
- package/dist/src/routes/orchestrate.js.map +1 -1
- package/dist/src/routes/settings.js +23 -0
- package/dist/src/routes/settings.js.map +1 -1
- package/dist/src/shared/aside-contract.js +2 -0
- package/dist/src/shared/aside-contract.js.map +1 -0
- package/dist/src/types/cli-engine.js +1 -0
- package/dist/src/types/cli-engine.js.map +1 -1
- package/package.json +1 -1
- package/public/dist/.vite/manifest.json +186 -175
- package/public/dist/assets/{Activity-DPLlOJ46.js → Activity-DsBgOkCP.js} +1 -1
- package/public/dist/assets/{AdvancedExport-BgOgGvc5.js → AdvancedExport-COGQ7vbK.js} +1 -1
- package/public/dist/assets/Agent-6qGQN7lY.js +1 -0
- package/public/dist/assets/AsideSelectionFields-DvU5xWAP.js +1 -0
- package/public/dist/assets/{Browser-m6VynQXV.js → Browser-r09vOsR1.js} +1 -1
- package/public/dist/assets/ChannelEnablementControl-ooOkdd-Q.js +85 -0
- package/public/dist/assets/{ChannelSetupEntry-DHLoZEzJ.js → ChannelSetupEntry-B0b4TdhH.js} +1 -1
- package/public/dist/assets/{ChannelsDiscord-B-G8vsYy.js → ChannelsDiscord-9EMLt5b3.js} +1 -1
- package/public/dist/assets/{ChannelsSlack-oPuh922z.js → ChannelsSlack-B8ETzWFt.js} +1 -1
- package/public/dist/assets/{ChannelsTelegram-PmTv43KQ.js → ChannelsTelegram-CflLUsQw.js} +1 -1
- package/public/dist/assets/{DashboardMeta-BqEiJrvr.js → DashboardMeta-wjEuh9-E.js} +1 -1
- package/public/dist/assets/{Developer-CbySB7_Z.js → Developer-B3cDkldo.js} +1 -1
- package/public/dist/assets/{Display-DU4_76cS.js → Display-BXQxpv6-.js} +1 -1
- package/public/dist/assets/{Display-C0Zdamcb.js → Display-Cl4DD334.js} +1 -1
- package/public/dist/assets/{Embedding-CCFMOB_2.js → Embedding-D-T92-En.js} +1 -1
- package/public/dist/assets/{Employees-BanvF58d.js → Employees-Cf4IeF0N.js} +1 -1
- package/public/dist/assets/{Heartbeat-uyi_MpUd.js → Heartbeat-Bj8V_bUM.js} +1 -1
- package/public/dist/assets/{Mcp-rjPoL_Zo.js → Mcp-jAcut_fw.js} +1 -1
- package/public/dist/assets/Memory-BOXkBFKg.js +1 -0
- package/public/dist/assets/ModelProvider-DIDQ37z-.js +1 -0
- package/public/dist/assets/{Network-CuqFrOvR.js → Network-I5eOe2hf.js} +1 -1
- package/public/dist/assets/{Permissions-BltXiZnz.js → Permissions-B7PthH01.js} +1 -1
- package/public/dist/assets/{Permissions-DcCbFMIq.js → Permissions-BCYUfJg1.js} +1 -1
- package/public/dist/assets/Profile-CYPMVhQM.js +1 -0
- package/public/dist/assets/{Prompts-C9vY8ivQ.js → Prompts-BRAgZLNQ.js} +1 -1
- package/public/dist/assets/{SpeechKeys-BJ8V7U5E.js → SpeechKeys-UlXNSFoe.js} +1 -1
- package/public/dist/assets/{TelegramHub-DtyjLGFR.js → TelegramHub-BhUFhIcv.js} +1 -1
- package/public/dist/assets/agent-meta-v4jNRAbX.js +1 -0
- package/public/dist/assets/app-SVIyP1TT.js +59 -0
- package/public/dist/assets/bgtask-badge-HIrvpcr_.js +1 -0
- package/public/dist/assets/{bgtask-badge-oPvZyylH.js → bgtask-badge-tYRnplEV.js} +1 -1
- package/public/dist/assets/constants-_iw-lnKY.js +1 -0
- package/public/dist/assets/{employees-BchFBkDz.js → employees-DNTPcxtZ.js} +2 -2
- package/public/dist/assets/{error-normalize-clOi-AAA.js → error-normalize-jnjrKZDu.js} +1 -1
- package/public/dist/assets/{iframe-renderer-CcGzEi0v.js → iframe-renderer--lHbKTDh.js} +2 -2
- package/public/dist/assets/iframe-renderer-DigNC5FU.js +1 -0
- package/public/dist/assets/{manager-nquYZ7_x.js → manager-qGH-xUZ7.js} +1 -1
- package/public/dist/assets/{memory-DTpD4see.js → memory-BAdRkBdk.js} +1 -1
- package/public/dist/assets/memory-DA8x5314.js +1 -0
- package/public/dist/assets/message-history-CGOgZH4l.js +1 -0
- package/public/dist/assets/{message-history-DSvflaZ9.js → message-history-PAYeKmia.js} +1 -1
- package/public/dist/assets/page-shell-Cz2ylri8.js +1 -0
- package/public/dist/assets/{render-D8dVQ_bm.js → render-F6xF6w6c.js} +1 -1
- package/public/dist/assets/settings-DMbNzuTm.js +1 -0
- package/public/dist/assets/{settings-DMiQe469.js → settings-DZ2-ca8T.js} +1 -1
- package/public/dist/assets/{settings-Bp0sgQ2a.js → settings-W0WFhBf2.js} +1 -1
- package/public/dist/assets/settings-core-2vZXNf6n.js +2 -0
- package/public/dist/assets/settings-core-BofMyzL9.js +1 -0
- package/public/dist/assets/{settings-embedding-BRW0WZvh.js → settings-embedding-Bjwpe8xu.js} +2 -2
- package/public/dist/assets/{shared-D1begqvi.js → shared-CftvKNY9.js} +1 -1
- package/public/dist/assets/{sidebar-CrpBbYFg.js → sidebar-Clkqd78q.js} +3 -3
- package/public/dist/assets/{skills-Bx8U-gJa.js → skills-0aA-RuN9.js} +1 -1
- package/public/dist/assets/skills-SqmQXndw.js +1 -0
- package/public/dist/assets/{slash-commands-DkrGUOnC.js → slash-commands-4zHHXEeU.js} +1 -1
- package/public/dist/assets/slash-commands-D5LqONzL.js +1 -0
- package/public/dist/assets/{trace-drawer-Dbe5pTbf.js → trace-drawer-B4O0Tl1M.js} +1 -1
- package/public/dist/assets/{ui-rnVAM91F.js → ui-CVtGpivr.js} +1 -1
- package/public/dist/assets/ui-_cqgseFX.js +1 -0
- package/public/dist/index.html +1 -1
- package/public/dist/manager/index.html +1 -1
- package/public/dist/settings/index.html +1 -1
- package/public/js/constants.ts +5 -0
- package/public/js/features/employees.ts +3 -3
- package/public/js/features/heartbeat.ts +14 -1
- package/public/js/features/settings-core.ts +39 -13
- package/public/js/features/settings-types.ts +1 -1
- package/public/locales/en.json +2 -0
- package/public/locales/ja.json +2 -0
- package/public/locales/ko.json +2 -0
- package/public/locales/zh.json +2 -0
- package/public/manager/src/settings/SettingsShell.tsx +1 -1
- package/public/manager/src/settings/pages/Agent.tsx +137 -52
- package/public/manager/src/settings/pages/Heartbeat.tsx +6 -0
- package/public/manager/src/settings/pages/Memory.tsx +8 -6
- package/public/manager/src/settings/pages/ModelProvider.tsx +31 -6
- package/public/manager/src/settings/pages/Profile.tsx +2 -2
- package/public/manager/src/settings/pages/components/AsideSelectionFields.tsx +33 -0
- package/public/manager/src/settings/pages/components/AvatarCard.tsx +22 -34
- package/public/manager/src/settings/pages/components/PerCliRow.tsx +29 -1
- package/public/manager/src/settings/pages/components/agent/FlushAgentSection.tsx +7 -6
- package/public/manager/src/settings/pages/components/agent/RuntimeEmployeeRow.tsx +4 -4
- package/public/manager/src/settings/pages/components/agent/RuntimeHeader.tsx +5 -0
- package/public/manager/src/settings/pages/components/agent/agent-meta.ts +7 -0
- package/public/manager/src/settings/pages/components/agent/runtime-employees-helpers.ts +3 -2
- package/public/manager/src/settings/pages/components/aside-models.ts +104 -0
- package/public/manager/src/settings/settings-client.ts +3 -1
- package/public/manager/src/settings/types.ts +1 -0
- package/public/dist/assets/Agent-O_U8ny90.js +0 -1
- package/public/dist/assets/ChannelEnablementControl-BSuKQhTW.js +0 -85
- package/public/dist/assets/Memory-C9I33pIi.js +0 -1
- package/public/dist/assets/ModelProvider-fiUktMaO.js +0 -1
- package/public/dist/assets/Profile-DUL7-RE_.js +0 -1
- package/public/dist/assets/agent-meta-94LMwZZK.js +0 -1
- package/public/dist/assets/app-Iu76iEiU.js +0 -59
- package/public/dist/assets/bgtask-badge-DHo2mkMI.js +0 -1
- package/public/dist/assets/constants-DmZ9Rjym.js +0 -1
- package/public/dist/assets/iframe-renderer-DSLsfZq8.js +0 -1
- package/public/dist/assets/memory-BgUF3M9l.js +0 -1
- package/public/dist/assets/message-history-DkB768L3.js +0 -1
- package/public/dist/assets/page-shell-DfinU3mb.js +0 -1
- package/public/dist/assets/settings-DxjoyiIM.js +0 -1
- package/public/dist/assets/settings-core-CXWmPKUE.js +0 -1
- package/public/dist/assets/settings-core-D4zGy72z.js +0 -2
- package/public/dist/assets/skills-BY-hQnqM.js +0 -1
- package/public/dist/assets/slash-commands-C53T9J3g.js +0 -1
- package/public/dist/assets/ui-C0o427q6.js +0 -1
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { readAsideCatalog, resolveAsideSelection, AsideCatalogError } from '../aside-catalog.js';
|
|
3
|
+
import { startAsideRun } from '../aside-runtime.js';
|
|
4
|
+
import { broadcast } from '../../core/bus.js';
|
|
5
|
+
import { getSessionBucket, clearSessionBucket, insertMessage } from '../../core/db.js';
|
|
6
|
+
import { consumePendingBootstrapPrompt } from '../../core/main-session.js';
|
|
7
|
+
import { stripSkillMentionBlock } from '../../core/skill-mentions.js';
|
|
8
|
+
import { startTraceRun } from '../../trace/store.js';
|
|
9
|
+
import { resolveScopedSessionBucket } from '../args.js';
|
|
10
|
+
import { buildAsideResumeKey } from '../spawn-env.js';
|
|
11
|
+
import { buildPromptForArgs, PROMPT_HISTORY_MAX_CHARS, PROMPT_HISTORY_MAX_ROWS } from '../prompt-context.js';
|
|
12
|
+
import { shouldResumeBucketSession } from './resume.js';
|
|
13
|
+
import { beginLiveRun, setLiveRunTraceId, getLiveRun, clearLiveRun } from '../live-run-state.js';
|
|
14
|
+
import { isCurrentSessionOwner } from '../session-persistence.js';
|
|
15
|
+
import { handleAgentExit } from '../lifecycle-handler.js';
|
|
16
|
+
import { handoffRuntimeOutcome } from '../runtime/outcome.js';
|
|
17
|
+
import { createPrintActivity, finishPrintActivity } from '../runtime/print-activity.js';
|
|
18
|
+
import { captureExitSettler, settleCapturedExit } from './exit-settle.js';
|
|
19
|
+
import { isLifecycleSteerReason } from './kill-reason.js';
|
|
20
|
+
import { FALLBACK_MAX_RETRIES } from './queue.js';
|
|
21
|
+
import { settleOnce } from '../../orchestrator/request-registry.js';
|
|
22
|
+
/** Admission is deliberately before bootstrap, isolation, generic argv or NDJSON. */
|
|
23
|
+
export function asideAdmissionError(mainManaged, opts, policy, origin) {
|
|
24
|
+
if (!mainManaged || opts.agentId || opts.employeeSessionId || opts.internal || opts.forceNew)
|
|
25
|
+
return 'aside_main_only';
|
|
26
|
+
if (origin === 'heartbeat')
|
|
27
|
+
return 'aside_scheduled_unsupported';
|
|
28
|
+
if (opts._isFallback || opts._retryAttempt !== undefined || opts._isSmokeContinuation || opts._isGoalContinuation
|
|
29
|
+
|| opts._isCapacityFallback || opts._employeeFreshSessionRetry)
|
|
30
|
+
return 'aside_automatic_retry_unsupported';
|
|
31
|
+
if (opts.images?.length)
|
|
32
|
+
return 'aside_images_unsupported';
|
|
33
|
+
if (policy !== 'auto' && policy !== 'safe')
|
|
34
|
+
return 'aside_policy_unsupported';
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
/** Dedicated CLI backend; the runtime, rather than a process exit event, selects finality. */
|
|
38
|
+
export function runAsideBackend(locals, host) {
|
|
39
|
+
const { mainRun: run, scopeKey, chatSessionId, ownerGeneration, persistenceOwner, origin, runPin } = locals;
|
|
40
|
+
if (!run)
|
|
41
|
+
throw new Error('aside_main_owner_required');
|
|
42
|
+
// Every execution selector is copied before the catalog's first await.
|
|
43
|
+
const context = { ...locals.context };
|
|
44
|
+
const cwd = locals.spawnCwd || process.cwd();
|
|
45
|
+
const policy = locals.policy;
|
|
46
|
+
const opts = { ...locals.opts };
|
|
47
|
+
const env = { ...locals.spawnEnv };
|
|
48
|
+
const model = locals.model || 'default', effort = locals.effort || 'default';
|
|
49
|
+
const sysPrompt = locals.sysPrompt;
|
|
50
|
+
const originalPrompt = locals.prompt;
|
|
51
|
+
// Generation fences session mutations, not control of captured commands.
|
|
52
|
+
const controlsRun = () => host.activeMainProcesses.get(scopeKey) === run;
|
|
53
|
+
const owned = () => controlsRun()
|
|
54
|
+
&& run.ownerGeneration === ownerGeneration && isCurrentSessionOwner(persistenceOwner, scopeKey);
|
|
55
|
+
let child = null;
|
|
56
|
+
let childClosed = true;
|
|
57
|
+
let handle;
|
|
58
|
+
let cancelled = false, reason = null, sealed = false;
|
|
59
|
+
let uncertain = false;
|
|
60
|
+
let exitArm;
|
|
61
|
+
const cancel = (cause) => {
|
|
62
|
+
if (sealed || cancelled)
|
|
63
|
+
return;
|
|
64
|
+
cancelled = true;
|
|
65
|
+
reason = cause;
|
|
66
|
+
exitArm = captureExitSettler(scopeKey);
|
|
67
|
+
// Runtime cancellation latches synchronously, including before its session receipt.
|
|
68
|
+
if (handle)
|
|
69
|
+
void handle.cancel().catch(() => { });
|
|
70
|
+
};
|
|
71
|
+
run.starting = true;
|
|
72
|
+
run.cancelTurn = cancel;
|
|
73
|
+
void (async () => {
|
|
74
|
+
let ctx;
|
|
75
|
+
const retireCapturedRun = () => {
|
|
76
|
+
if (!controlsRun() || !childClosed || (handle && !handle.commandsClosed()))
|
|
77
|
+
return false;
|
|
78
|
+
// Identity above prevents releasing a replacement, including process=null.
|
|
79
|
+
// The same captured run may have had its generation invalidated in place.
|
|
80
|
+
const released = host.releaseMainRun(scopeKey, child, run.ownerGeneration);
|
|
81
|
+
if (released && ctx?.traceRunId && getLiveRun(scopeKey).traceRunId === ctx.traceRunId)
|
|
82
|
+
clearLiveRun(scopeKey);
|
|
83
|
+
return released;
|
|
84
|
+
};
|
|
85
|
+
let bucket = '', resumeKey = null, selectedModel = model, selectedEffort = '';
|
|
86
|
+
let isResume = false;
|
|
87
|
+
let result;
|
|
88
|
+
try {
|
|
89
|
+
const catalog = await readAsideCatalog(context);
|
|
90
|
+
const selection = resolveAsideSelection(catalog, model, effort);
|
|
91
|
+
selectedModel = selection.model;
|
|
92
|
+
selectedEffort = selection.effort || '';
|
|
93
|
+
resumeKey = buildAsideResumeKey(selection, cwd, policy);
|
|
94
|
+
bucket = resolveScopedSessionBucket('aside', selectedModel, 'aside', scopeKey, selectedEffort, 'fallback', false);
|
|
95
|
+
const row = getSessionBucket.get(bucket);
|
|
96
|
+
isResume = !opts._skipResume && !!row?.session_id
|
|
97
|
+
&& shouldResumeBucketSession('aside', selectedModel, row.model, resumeKey, row.resume_key);
|
|
98
|
+
if (!owned() || !isCurrentSessionOwner(persistenceOwner, scopeKey))
|
|
99
|
+
cancelled = true;
|
|
100
|
+
if (cancelled) {
|
|
101
|
+
result = { status: 'stopped', finalText: null, partialText: '', sessionId: null, reusable: false, exitCode: null, cleanup: 'confirmed' };
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
run.meta.model = selectedModel;
|
|
105
|
+
run.meta.effectiveProvider = 'aside';
|
|
106
|
+
const bootstrap = isResume ? '' : consumePendingBootstrapPrompt(scopeKey);
|
|
107
|
+
const prompt = bootstrap ? `${bootstrap}\n\n---\n\n${originalPrompt}` : originalPrompt;
|
|
108
|
+
const history = !isResume && !opts._skipHistory
|
|
109
|
+
? host.buildHistoryBlock(originalPrompt, cwd, chatSessionId, PROMPT_HISTORY_MAX_ROWS, PROMPT_HISTORY_MAX_CHARS) : '';
|
|
110
|
+
const fullPrompt = buildPromptForArgs({ cli: 'aside', effectiveProvider: 'aside', prompt: `[Workspace Context]\nProject root: ${cwd}\n${opts.workspaceContext || ''}\n\n${prompt}`,
|
|
111
|
+
historyBlock: history, sysPrompt, isResume });
|
|
112
|
+
if (!opts._skipInsert)
|
|
113
|
+
insertMessage.run('user', stripSkillMentionBlock(originalPrompt), 'aside', selectedModel, cwd, chatSessionId);
|
|
114
|
+
// Journal failure cannot change execution or select an empty/error final.
|
|
115
|
+
let traceRunId = `tr_aside_${randomUUID()}`;
|
|
116
|
+
try {
|
|
117
|
+
traceRunId = startTraceRun({ cli: 'aside', model: selectedModel, workingDir: cwd,
|
|
118
|
+
agentLabel: 'main', audience: 'public', sessionId: chatSessionId, scopeKey });
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
console.warn('[aside] trace admission unavailable');
|
|
122
|
+
}
|
|
123
|
+
try {
|
|
124
|
+
beginLiveRun(scopeKey, 'aside');
|
|
125
|
+
setLiveRunTraceId(scopeKey, traceRunId);
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
console.warn('[aside] live projection unavailable');
|
|
129
|
+
}
|
|
130
|
+
const capturedCtx = { fullText: '', traceLog: [], toolLog: [], seenToolKeys: new Set(),
|
|
131
|
+
hasClaudeStreamEvents: false, sessionId: null, stderrBuf: '',
|
|
132
|
+
cost: null, turns: null, duration: null, tokens: null, runStartedAt: Date.now(),
|
|
133
|
+
liveScope: scopeKey, traceRunId, traceAudience: 'public', origin,
|
|
134
|
+
activityIdentity: { sessionId: chatSessionId, scope: scopeKey },
|
|
135
|
+
...(opts.requestId ? { requestId: opts.requestId } : {}) };
|
|
136
|
+
ctx = capturedCtx;
|
|
137
|
+
try {
|
|
138
|
+
capturedCtx.printActivity = createPrintActivity({ runId: traceRunId, sessionId: chatSessionId,
|
|
139
|
+
scope: scopeKey, turnId: traceRunId, audience: 'public' }, 'aside');
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
console.warn('[aside] Activity projection unavailable');
|
|
143
|
+
}
|
|
144
|
+
try {
|
|
145
|
+
broadcast('agent_status', { running: true, cli: 'aside', agentId: 'main', scope: scopeKey });
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
console.warn('[aside] status observer failed');
|
|
149
|
+
}
|
|
150
|
+
handle = startAsideRun({ binary: locals.binary, cwd, env,
|
|
151
|
+
selection, permission: policy === 'safe' ? 'guard' : 'full-access', prompt: fullPrompt,
|
|
152
|
+
...(isResume && row?.session_id ? { sessionId: row.session_id } : {}) }, {
|
|
153
|
+
onChild(proc) {
|
|
154
|
+
if (sealed)
|
|
155
|
+
return;
|
|
156
|
+
child = proc;
|
|
157
|
+
childClosed = false;
|
|
158
|
+
proc.once('close', () => { childClosed = true; host.consumeKillReason(proc.pid); });
|
|
159
|
+
if (controlsRun()) {
|
|
160
|
+
run.process = proc;
|
|
161
|
+
run.starting = false;
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
onSession(id) { if (!sealed)
|
|
165
|
+
capturedCtx.sessionId = id; },
|
|
166
|
+
onOutput(text) {
|
|
167
|
+
if (sealed)
|
|
168
|
+
return;
|
|
169
|
+
// CLI output is bounded diagnostics, never an assistant final or tool proof.
|
|
170
|
+
capturedCtx.stderrBuf = (capturedCtx.stderrBuf + text).slice(-4000);
|
|
171
|
+
try {
|
|
172
|
+
opts.lifecycle?.onActivity?.('aside');
|
|
173
|
+
}
|
|
174
|
+
catch { /* observer only */ }
|
|
175
|
+
},
|
|
176
|
+
});
|
|
177
|
+
if (cancelled)
|
|
178
|
+
void handle.cancel().catch(() => { });
|
|
179
|
+
result = await handle.result;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
// A rejected run promise has supplied no physical-close proof.
|
|
184
|
+
uncertain = handle !== undefined;
|
|
185
|
+
result = { status: cancelled ? 'stopped' : 'error', finalText: null, partialText: '',
|
|
186
|
+
sessionId: null, reusable: false, exitCode: null, cleanup: handle ? 'uncertain' : 'confirmed',
|
|
187
|
+
diagnostic: error instanceof AsideCatalogError ? error.message : 'Aside runtime preparation failed.' };
|
|
188
|
+
}
|
|
189
|
+
sealed = true;
|
|
190
|
+
uncertain = result.cleanup === 'uncertain';
|
|
191
|
+
if (uncertain && controlsRun()) {
|
|
192
|
+
run.starting = true;
|
|
193
|
+
const acknowledgementToken = randomUUID();
|
|
194
|
+
const recovery = 'aside_control_uncertain: reconcile the captured session in Aside, then POST /api/orchestrate/aside/reconcile with sessionId, acknowledgementToken and acknowledged:true. All captured local commands must close. Send fresh input afterward.';
|
|
195
|
+
result = { ...result, diagnostic: `${result.diagnostic || 'Aside cleanup is unresolved.'} Jaw chat ID: ${chatSessionId}. External Aside ID: ${result.sessionId || 'unavailable'} (account ${context.account}, local). Acknowledgement token: ${acknowledgementToken}. ${recovery}` };
|
|
196
|
+
// Repeated Stop closes captured commands without repeating external control.
|
|
197
|
+
run.cancelTurn = () => {
|
|
198
|
+
if (controlsRun() && handle)
|
|
199
|
+
void handle.closeCommands().catch(() => { });
|
|
200
|
+
};
|
|
201
|
+
run.reconcileAside = token => {
|
|
202
|
+
if (token !== acknowledgementToken || !controlsRun() || !childClosed || (handle && !handle.commandsClosed()))
|
|
203
|
+
return false;
|
|
204
|
+
host.queueCtrl.purgeQueueOnStop(scopeKey, 'aside-manual-reconciliation');
|
|
205
|
+
delete run.cancelTurn;
|
|
206
|
+
delete run.reconcileAside;
|
|
207
|
+
return retireCapturedRun();
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
try {
|
|
211
|
+
opts.lifecycle?.onExit?.(result.exitCode);
|
|
212
|
+
}
|
|
213
|
+
catch { /* observer only */ }
|
|
214
|
+
if (!owned()) {
|
|
215
|
+
// A captured terminal still settles its caller, but cannot mutate a newer
|
|
216
|
+
// session's MESSAGE history, flush counters, goal or persistence via lifecycle.
|
|
217
|
+
const outcome = cancelled ? { ...result, status: 'stopped', finalText: null } : result;
|
|
218
|
+
if (ctx) {
|
|
219
|
+
handoffRuntimeOutcome(ctx, outcome);
|
|
220
|
+
finishPrintActivity(ctx, { kind: 'turn-end', status: outcome.status, finalText: outcome.finalText });
|
|
221
|
+
}
|
|
222
|
+
settleOnce(opts.requestId, outcome.status === 'done' ? 'completed' : outcome.status === 'stopped' ? 'cancelled' : 'failed', {
|
|
223
|
+
text: outcome.finalText ?? '', scope: scopeKey, sessionId: chatSessionId,
|
|
224
|
+
runtimeStatus: outcome.status, runtimeFinality: outcome.finalText === null ? 'absent' : 'present'
|
|
225
|
+
});
|
|
226
|
+
locals.resolve({ text: outcome.finalText ?? '',
|
|
227
|
+
code: outcome.status === 'done' ? 0 : outcome.status === 'stopped' ? 130 : 1,
|
|
228
|
+
runtimeOutcome: outcome, ...(ctx?.traceRunId ? { traceRunId: ctx.traceRunId } : {}) });
|
|
229
|
+
if (run.cancelTurn === cancel)
|
|
230
|
+
delete run.cancelTurn;
|
|
231
|
+
if (!uncertain && retireCapturedRun() && !cancelled)
|
|
232
|
+
void host.processQueue(scopeKey);
|
|
233
|
+
settleCapturedExit(scopeKey, exitArm);
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
if (!ctx) {
|
|
237
|
+
if (!uncertain)
|
|
238
|
+
retireCapturedRun();
|
|
239
|
+
const text = result.status === 'error' ? result.diagnostic || 'Aside unavailable.' : '';
|
|
240
|
+
settleOnce(opts.requestId, result.status === 'stopped' ? 'cancelled' : 'failed', {
|
|
241
|
+
text, scope: scopeKey, sessionId: chatSessionId
|
|
242
|
+
});
|
|
243
|
+
broadcast('agent_done', { ...runPin, cli: 'aside', text, error: result.status === 'error', runtimeStatus: result.status });
|
|
244
|
+
locals.resolve({ text, code: result.status === 'stopped' ? 130 : 78,
|
|
245
|
+
runtimeOutcome: result, executionInterrupted: result.status === 'stopped', executionFailed: result.status === 'error' });
|
|
246
|
+
if (run.cancelTurn === cancel && !uncertain)
|
|
247
|
+
delete run.cancelTurn;
|
|
248
|
+
if (!cancelled && !uncertain)
|
|
249
|
+
void host.processQueue(scopeKey);
|
|
250
|
+
settleCapturedExit(scopeKey, exitArm);
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
// Failed/stopped sessions must not survive in their captured resumable bucket.
|
|
254
|
+
if ((cancelled || !result.reusable || uncertain) && owned() && isCurrentSessionOwner(persistenceOwner, scopeKey)) {
|
|
255
|
+
try {
|
|
256
|
+
clearSessionBucket.run(bucket);
|
|
257
|
+
}
|
|
258
|
+
catch {
|
|
259
|
+
console.warn('[aside] resumable bucket clear failed');
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
ctx.sessionId = !uncertain && !cancelled && result.reusable && result.status === 'done' ? result.sessionId : null;
|
|
263
|
+
ctx.metadata = { ...ctx.metadata, asideCleanup: result.cleanup };
|
|
264
|
+
if (result.diagnostic !== undefined)
|
|
265
|
+
ctx.runtimeDiagnostic = result.diagnostic;
|
|
266
|
+
handoffRuntimeOutcome(ctx, cancelled ? { status: 'stopped', finalText: null, partialText: result.partialText } : result);
|
|
267
|
+
const capturedRun = run;
|
|
268
|
+
try {
|
|
269
|
+
await handleAgentExit({ ctx, code: result.exitCode, cli: 'aside', model: selectedModel, effectiveProvider: 'aside',
|
|
270
|
+
resumeKey, workingDir: cwd, permissions: policy, agentLabel: 'main', mainManaged: true, origin, prompt: originalPrompt,
|
|
271
|
+
opts: { ...opts, _skipSessionPersist: opts._skipSessionPersist === true || !owned() || !result.reusable || cancelled || uncertain },
|
|
272
|
+
cfg: { effort: selectedEffort }, ownerGeneration, persistenceOwner, forceNew: false, empSid: null,
|
|
273
|
+
isResume, wasKilled: cancelled, wasSteer: isLifecycleSteerReason(reason), killReason: reason,
|
|
274
|
+
childExitCode: result.exitCode,
|
|
275
|
+
smokeResult: { isSmoke: false, confidence: 'low', matchedPattern: null, reason: '' },
|
|
276
|
+
effortDefault: '', costLine: '', resolve: locals.resolve, activeProcesses: host.activeProcesses,
|
|
277
|
+
scopeKey, chatSessionId, scopedBucket: bucket, runtimeTransport: 'print', childProcess: child,
|
|
278
|
+
releaseMainRun: (scope, proc, generation) => !uncertain && owned() && host.releaseMainRun(scope, proc, generation),
|
|
279
|
+
retryState: host.queueCtrl.retryStateForScope(scopeKey), fallbackState: host.queueCtrl.fallbackStateForScope(scopeKey),
|
|
280
|
+
fallbackMaxRetries: FALLBACK_MAX_RETRIES,
|
|
281
|
+
processQueue: scope => { if (!cancelled && !uncertain)
|
|
282
|
+
void host.processQueue(scope); },
|
|
283
|
+
onRuntimeEnd: end => ctx?.printActivity?.finish(end) });
|
|
284
|
+
}
|
|
285
|
+
catch {
|
|
286
|
+
// Lifecycle/projection failures cannot replace the runtime's selected terminal.
|
|
287
|
+
const outcome = ctx.runtimeOutcome;
|
|
288
|
+
finishPrintActivity(ctx, { kind: 'turn-end', status: outcome.status, finalText: outcome.finalText });
|
|
289
|
+
if (!ctx.runtimeTerminalAttempted) {
|
|
290
|
+
ctx.runtimeTerminalAttempted = true;
|
|
291
|
+
try {
|
|
292
|
+
broadcast('agent_done', { ...runPin, cli: 'aside', runtimeStatus: outcome.status,
|
|
293
|
+
runtimeFinality: outcome.finalText === null ? 'absent' : 'present',
|
|
294
|
+
text: outcome.finalText ?? '', error: outcome.status === 'error' });
|
|
295
|
+
}
|
|
296
|
+
catch { /* observer only */ }
|
|
297
|
+
}
|
|
298
|
+
locals.resolve({ text: outcome.finalText ?? '',
|
|
299
|
+
code: outcome.status === 'done' ? 0 : outcome.status === 'stopped' ? 130 : 1,
|
|
300
|
+
runtimeOutcome: outcome, ...(ctx.traceRunId ? { traceRunId: ctx.traceRunId } : {}) });
|
|
301
|
+
}
|
|
302
|
+
finally {
|
|
303
|
+
if (!uncertain) {
|
|
304
|
+
if (capturedRun.cancelTurn === cancel)
|
|
305
|
+
delete capturedRun.cancelTurn;
|
|
306
|
+
if (retireCapturedRun() && !cancelled)
|
|
307
|
+
void host.processQueue(scopeKey);
|
|
308
|
+
}
|
|
309
|
+
settleCapturedExit(scopeKey, exitArm);
|
|
310
|
+
}
|
|
311
|
+
})();
|
|
312
|
+
return { child: null, promise: locals.resultPromise };
|
|
313
|
+
}
|
|
314
|
+
//# sourceMappingURL=backend-aside.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-aside.js","sourceRoot":"","sources":["../../../../src/agent/spawn/backend-aside.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,9 @@ export function shouldResumeBucketSession(cli, requestedModel, bucketModel, requ
|
|
|
24
24
|
return false;
|
|
25
25
|
return normalizeModelForCli('kiro-code', requestedModel) === normalizeModelForCli('kiro-code', bucketModel);
|
|
26
26
|
}
|
|
27
|
+
if (cli === 'aside')
|
|
28
|
+
return Boolean(requestedResumeKey) && requestedResumeKey === bucketResumeKey
|
|
29
|
+
&& requestedModel === bucketModel;
|
|
27
30
|
if (cli === 'opencode' && requestedResumeKey) {
|
|
28
31
|
return requestedResumeKey === (bucketResumeKey ?? null);
|
|
29
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resume.js","sourceRoot":"","sources":["../../../../src/agent/spawn/resume.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"resume.js","sourceRoot":"","sources":["../../../../src/agent/spawn/resume.ts"],"names":[],"mappings":"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"}
|
|
@@ -165,4 +165,9 @@ export function ensureOpencodeAlwaysAllowPermissions(configPath = join(os.homedi
|
|
|
165
165
|
console.warn('[jaw:opencode] permission sync failed:', error.message);
|
|
166
166
|
}
|
|
167
167
|
}
|
|
168
|
+
/** Full concrete identity; changing any selector starts a fresh Aside session. */
|
|
169
|
+
export function buildAsideResumeKey(selection, cwd, policy) {
|
|
170
|
+
return JSON.stringify(['aside-v1', selection.account, selection.host, selection.provider,
|
|
171
|
+
selection.modelId, selection.effort, cwd, policy]);
|
|
172
|
+
}
|
|
168
173
|
//# sourceMappingURL=spawn-env.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spawn-env.js","sourceRoot":"","sources":["../../../src/agent/spawn-env.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"spawn-env.js","sourceRoot":"","sources":["../../../src/agent/spawn-env.ts"],"names":[],"mappings":"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"}
|
package/dist/src/agent/spawn.js
CHANGED
|
@@ -70,6 +70,7 @@ import { resolveCursorModelVariant } from './cursor-runtime.js';
|
|
|
70
70
|
import * as piExecutionControls from './pi-runtime.js';
|
|
71
71
|
import { runNativeAcpBackend } from './spawn/backend-native-acp.js';
|
|
72
72
|
import { runCopilotBackend } from './spawn/backend-copilot.js';
|
|
73
|
+
import { runAsideBackend, asideAdmissionError } from './spawn/backend-aside.js';
|
|
73
74
|
import { runPiBackend } from './spawn/backend-pi.js';
|
|
74
75
|
import { runCodexAppBackend } from './spawn/backend-codex-app.js';
|
|
75
76
|
// ─── State ───────────────────────────────────────────
|
|
@@ -469,14 +470,14 @@ export function killActiveAgent(scopeKeyOrReason = 'user', scopedReason) {
|
|
|
469
470
|
settleOnce(run?.meta?.requestId, 'cancelled', { reason });
|
|
470
471
|
clearWorkerSlotsOnStop(scopeKey, reason);
|
|
471
472
|
}
|
|
472
|
-
if (run?.cancelTurn && ['codex-app', 'pi', 'cursor', 'grok', 'claude'].includes(getActiveMainCli(scopeKey) || '')) {
|
|
473
|
+
if (run?.cancelTurn && ['codex-app', 'pi', 'cursor', 'grok', 'claude', 'aside'].includes(getActiveMainCli(scopeKey) || '')) {
|
|
473
474
|
if (run.process?.pid)
|
|
474
475
|
killReasons.set(run.process.pid, reason);
|
|
475
476
|
console.log(`[jaw:kill] reason=${reason} scope=${scopeKey} cli=${getActiveMainCli(scopeKey)} action=lease.cancel`);
|
|
476
477
|
if (isLifecycleExitSettleReason(reason))
|
|
477
478
|
armExitSettle(scopeKey);
|
|
478
479
|
run.cancelTurn(reason);
|
|
479
|
-
if (isImmediateScopeReleaseReason(reason))
|
|
480
|
+
if (getActiveMainCli(scopeKey) !== 'aside' && isImmediateScopeReleaseReason(reason))
|
|
480
481
|
activeMainProcesses.delete(scopeKey);
|
|
481
482
|
return true;
|
|
482
483
|
}
|
|
@@ -616,11 +617,18 @@ export function waitForAllProcessesEnd(timeoutMs = 2000) {
|
|
|
616
617
|
const deadline = setTimeout(() => { clearInterval(check); resolve(); }, timeoutMs);
|
|
617
618
|
});
|
|
618
619
|
}
|
|
620
|
+
/** Human acknowledgement after external reconciliation; retained owner verifies local close. */
|
|
621
|
+
export function reconcileAsideScope(scopeKey, chatSessionId, acknowledgementToken) {
|
|
622
|
+
const run = activeMainProcesses.get(scopeKey);
|
|
623
|
+
if (run?.meta.chatSessionId !== chatSessionId)
|
|
624
|
+
return false;
|
|
625
|
+
return run?.reconcileAside?.(acknowledgementToken) === true;
|
|
626
|
+
}
|
|
619
627
|
export function canSteerAgent(scopeKey) {
|
|
620
628
|
const run = activeMainProcesses.get(scopeKey);
|
|
621
629
|
// Route CLI steering through either the in-band hook or the native replacement hook.
|
|
622
630
|
// Each owning hook decides whether the current turn can still accept the input.
|
|
623
|
-
return typeof run?.steerTurnInBand === 'function' || typeof run?.replaceTurn === 'function';
|
|
631
|
+
return run?.meta.cli === 'aside' || typeof run?.steerTurnInBand === 'function' || typeof run?.replaceTurn === 'function';
|
|
624
632
|
}
|
|
625
633
|
/** Native replacement owns a stricter mismatch contract than queue fallback:
|
|
626
634
|
* malformed cross-conversation metadata must fail before it is persisted. */
|
|
@@ -638,6 +646,8 @@ export async function steerAgent(scopeKey, newPrompt, source, meta) {
|
|
|
638
646
|
scope: scopeKey, sessionId: chatSessionId });
|
|
639
647
|
return 'retired';
|
|
640
648
|
}
|
|
649
|
+
if (run?.meta.cli === 'aside')
|
|
650
|
+
return 'fallback-queue';
|
|
641
651
|
if (typeof run?.replaceTurn === 'function') {
|
|
642
652
|
const capturedSessionOwner = getSessionOwnershipGeneration(scopeKey);
|
|
643
653
|
const owner = run.meta;
|
|
@@ -1062,7 +1072,9 @@ export function spawnAgent(prompt, opts = {}) {
|
|
|
1062
1072
|
// saved-session reads, bootstrap consumption, or worker isolation.
|
|
1063
1073
|
const runtimeTransport = isSwitchableNativeCli(cli)
|
|
1064
1074
|
? resolveRuntimeTransport(settings['perCli']?.[cli]?.transport) : 'print';
|
|
1065
|
-
const selectedPermissions =
|
|
1075
|
+
const selectedPermissions = cli === 'aside'
|
|
1076
|
+
? opts.permissions ?? settings['permissions'] ?? session.permissions ?? 'auto'
|
|
1077
|
+
: opts.permissions || settings['permissions'] || session.permissions || 'auto';
|
|
1066
1078
|
const permissions = Array.isArray(selectedPermissions) ? [...selectedPermissions] : selectedPermissions;
|
|
1067
1079
|
const capturedPermissions = typeof permissions === 'string'
|
|
1068
1080
|
|| (Array.isArray(permissions) && permissions.every(value => typeof value === 'string')) ? permissions : undefined;
|
|
@@ -1089,6 +1101,48 @@ export function spawnAgent(prompt, opts = {}) {
|
|
|
1089
1101
|
void processQueue(scopeKey);
|
|
1090
1102
|
return { child: null, promise: resultPromise };
|
|
1091
1103
|
}
|
|
1104
|
+
if (cli === 'aside') {
|
|
1105
|
+
const admission = asideAdmissionError(mainManaged, opts, permissions, origin);
|
|
1106
|
+
const cfg = { ...settings['perCli']?.aside };
|
|
1107
|
+
const overrides = { ...settings['activeOverrides']?.aside };
|
|
1108
|
+
const account = cfg.account, selectedHost = cfg.host;
|
|
1109
|
+
const invalidContext = typeof account !== 'string' || !/^u(?:0|[1-9][0-9]{0,8})$/.test(account) || selectedHost !== 'local';
|
|
1110
|
+
const diagnostic = admission || (invalidContext ? 'aside_explicit_local_account_required' : null);
|
|
1111
|
+
if (diagnostic) {
|
|
1112
|
+
if (activeMainProcesses.get(scopeKey) === mainRun)
|
|
1113
|
+
releaseMainRun(scopeKey, null, ownerGeneration);
|
|
1114
|
+
settleOnce(opts.requestId, 'failed', { error: diagnostic, scope: scopeKey, sessionId: chatSessionId });
|
|
1115
|
+
broadcast('agent_done', { ...runPin, text: diagnostic, cli, error: true, ...empTag }, isEmployee ? 'internal' : 'public');
|
|
1116
|
+
try {
|
|
1117
|
+
opts.lifecycle?.onExit?.(78);
|
|
1118
|
+
}
|
|
1119
|
+
catch { /* observer only */ }
|
|
1120
|
+
resolve({ text: diagnostic, code: 78 });
|
|
1121
|
+
return { child: null, promise: resultPromise };
|
|
1122
|
+
}
|
|
1123
|
+
const cwd = settings['workingDir'] || process.cwd();
|
|
1124
|
+
const detected = detectCli('aside');
|
|
1125
|
+
const env = makeCleanEnv(applyCliEnvDefaults('aside', opts.env));
|
|
1126
|
+
env[COMPUTER_USE_APPROVAL_ENV] = permissions === 'auto' ? 'auto' : 'safe';
|
|
1127
|
+
const model = opts.model || overrides.model || cfg.model || 'default';
|
|
1128
|
+
if (mainManaged) {
|
|
1129
|
+
setCurrentMainMeta(scopeKey, stripUndefined({
|
|
1130
|
+
origin, cli: 'aside', permissions: capturedPermissions, target: opts.target,
|
|
1131
|
+
chatId: opts.chatId, requestId: opts.requestId, replyViaTarget: opts.replyViaTarget,
|
|
1132
|
+
scopeId: scopeKey, chatSessionId,
|
|
1133
|
+
...(opts.remoteKey ? { remoteKey: opts.remoteKey } : {}),
|
|
1134
|
+
model, effectiveProvider: 'aside',
|
|
1135
|
+
}));
|
|
1136
|
+
}
|
|
1137
|
+
return runAsideBackend({ mainRun, scopeKey, chatSessionId, opts, origin, ownerGeneration,
|
|
1138
|
+
persistenceOwner, runPin, prompt, resolve: value => resolve(value), resultPromise,
|
|
1139
|
+
binary: detected.path || 'aside', context: { account, host: 'local' }, policy: permissions,
|
|
1140
|
+
spawnCwd: cwd, spawnEnv: env, model,
|
|
1141
|
+
effort: opts.effort || overrides.effort || cfg.effort || 'default',
|
|
1142
|
+
sysPrompt: customSysPrompt !== undefined ? customSysPrompt : getSystemPrompt(stripUndefined({
|
|
1143
|
+
currentPrompt: prompt, forDisk: false, memorySnapshot, activeCli: 'aside', freshSession: true
|
|
1144
|
+
})) }, { activeMainProcesses, activeProcesses, buildHistoryBlock, releaseMainRun, queueCtrl, processQueue, consumeKillReason });
|
|
1145
|
+
}
|
|
1092
1146
|
// Ensure AGENTS.md on disk is fresh before CLI reads it
|
|
1093
1147
|
// Skip for employee spawns — distribute.ts manages AGENTS.md isolation
|
|
1094
1148
|
if (!opts.internal && !opts._isFallback && !opts.agentId)
|
|
@@ -1122,11 +1176,11 @@ export function spawnAgent(prompt, opts = {}) {
|
|
|
1122
1176
|
// computation so we can use the authoritative per-bucket resume decision
|
|
1123
1177
|
// instead of the legacy `isResumeGuess` heuristic. See comment near line 762.
|
|
1124
1178
|
// ─── Fallback retry: skip to fallback if retries exhausted ───
|
|
1125
|
-
if (runtimeTransport !== 'native' && !opts._isFallback && !opts.internal) {
|
|
1179
|
+
if (cli !== 'aside' && runtimeTransport !== 'native' && !opts._isFallback && !opts.internal) {
|
|
1126
1180
|
const st = queueCtrl.fallbackStateForScope(scopeKey).get(cli);
|
|
1127
1181
|
if (st?.fallbackCli && st.retriesLeft <= 0) {
|
|
1128
1182
|
const fbAvail = detectCli(st.fallbackCli)?.available;
|
|
1129
|
-
if (fbAvail && !isRetiredCliSelection(st.fallbackCli)) {
|
|
1183
|
+
if (fbAvail && st.fallbackCli !== 'aside' && !isRetiredCliSelection(st.fallbackCli)) {
|
|
1130
1184
|
console.log(`[jaw:fallback] ${cli} retries exhausted → direct ${st.fallbackCli}`);
|
|
1131
1185
|
broadcast('agent_fallback', { from: cli, to: st.fallbackCli, reason: 'retries exhausted', ...empTag }, isEmployee ? 'internal' : 'public');
|
|
1132
1186
|
return spawnAgent(prompt, {
|