@nuvin/session 0.3.0-rc.5 → 0.3.0-rc.7
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/{chunk-VIUQI74J.js → chunk-2IGB2A4W.js} +26 -2
- package/dist/chunk-2ZMV6W6C.js +204 -0
- package/dist/{chunk-5XT7AOI2.js → chunk-MKPANFIF.js} +1 -1
- package/dist/{chunk-4UBSHJWS.js → chunk-NDRIMBWT.js} +2 -0
- package/dist/client/index.js +38 -16
- package/dist/client/session-client.d.ts +12 -7
- package/dist/client/session-client.d.ts.map +1 -1
- package/dist/controller/index.js +39 -5
- package/dist/controller/session-controller.d.ts +10 -1
- package/dist/controller/session-controller.d.ts.map +1 -1
- package/dist/grant/index.js +2 -2
- package/dist/protocol/background-work.d.ts +26 -0
- package/dist/protocol/background-work.d.ts.map +1 -0
- package/dist/protocol/index.d.ts +2 -0
- package/dist/protocol/index.d.ts.map +1 -1
- package/dist/protocol/index.js +17 -5
- package/dist/protocol/types.d.ts +87 -41
- package/dist/protocol/types.d.ts.map +1 -1
- package/dist/protocol/version.d.ts +1 -1
- package/dist/state/index.js +3 -1
- package/dist/state/messages.d.ts +5 -3
- package/dist/state/messages.d.ts.map +1 -1
- package/dist/state/session.d.ts.map +1 -1
- package/dist/state/subagent-report.d.ts +5 -0
- package/dist/state/subagent-report.d.ts.map +1 -1
- package/dist/state/tool-preview.d.ts +3 -0
- package/dist/state/tool-preview.d.ts.map +1 -1
- package/dist/state/tool-preview.js +29 -3
- package/dist/test-utils/index.js +4 -4
- package/package.json +2 -2
- package/dist/chunk-H5OW7CDG.js +0 -6
- /package/dist/{chunk-7LEIACBZ.js → chunk-5PHEC5GZ.js} +0 -0
|
@@ -638,7 +638,8 @@ function appendSubagentReportMessage(state, report) {
|
|
|
638
638
|
agentId: report.agentId,
|
|
639
639
|
runId: report.runId,
|
|
640
640
|
status: report.status,
|
|
641
|
-
text: sanitizeMultilineDisplayText(report.body)
|
|
641
|
+
text: sanitizeMultilineDisplayText(report.body),
|
|
642
|
+
...report.usage === void 0 ? {} : { usage: structuredClone(report.usage) }
|
|
642
643
|
});
|
|
643
644
|
}
|
|
644
645
|
function appendWarningMessage(state, text) {
|
|
@@ -867,6 +868,15 @@ function parseSubagentReportHeader(text) {
|
|
|
867
868
|
body: newlineIndex === -1 ? "" : text.slice(newlineIndex + 1)
|
|
868
869
|
};
|
|
869
870
|
}
|
|
871
|
+
function resolveSubagentReport(text, meta) {
|
|
872
|
+
const parsed = parseSubagentReportHeader(text);
|
|
873
|
+
if (parsed === void 0) return void 0;
|
|
874
|
+
if (meta === void 0) return parsed;
|
|
875
|
+
if (parsed.agentId !== meta.agentId || parsed.runId !== meta.runId || parsed.status !== meta.status) {
|
|
876
|
+
return void 0;
|
|
877
|
+
}
|
|
878
|
+
return { ...parsed, usage: structuredClone(meta.cumulativeUsage) };
|
|
879
|
+
}
|
|
870
880
|
function splitSanitizableDelivery(text) {
|
|
871
881
|
if (parseSubagentReportHeader(text) === void 0) return void 0;
|
|
872
882
|
const newlineIndex = text.indexOf("\n");
|
|
@@ -950,6 +960,15 @@ function cloneMessage(message) {
|
|
|
950
960
|
const { toolCallPath, ...rootMessage } = message;
|
|
951
961
|
return toolCallPath && toolCallPath.length > 0 ? { ...rootMessage, toolCallPath: [...toolCallPath] } : rootMessage;
|
|
952
962
|
}
|
|
963
|
+
function cloneBackgroundWorkSummary(summary) {
|
|
964
|
+
return { ...summary, owner: { ...summary.owner } };
|
|
965
|
+
}
|
|
966
|
+
function cloneBackgroundWorkActive(active) {
|
|
967
|
+
return {
|
|
968
|
+
queued: active.queued.map(cloneBackgroundWorkSummary),
|
|
969
|
+
running: active.running.map(cloneBackgroundWorkSummary)
|
|
970
|
+
};
|
|
971
|
+
}
|
|
953
972
|
function normalizeResetState(state) {
|
|
954
973
|
return {
|
|
955
974
|
...state,
|
|
@@ -957,6 +976,7 @@ function normalizeResetState(state) {
|
|
|
957
976
|
...state.backgroundAgents,
|
|
958
977
|
runningRunIds: [...state.backgroundAgents.runningRunIds]
|
|
959
978
|
},
|
|
979
|
+
backgroundWork: cloneBackgroundWorkActive(state.backgroundWork),
|
|
960
980
|
approval: {
|
|
961
981
|
...state.approval,
|
|
962
982
|
active: state.approval.active ? cloneApproval(state.approval.active) : null,
|
|
@@ -982,6 +1002,7 @@ function createSessionViewState() {
|
|
|
982
1002
|
approval: createApprovalQueueState(),
|
|
983
1003
|
authFlow: null,
|
|
984
1004
|
backgroundAgents: { running: 0, queued: 0, runningRunIds: [] },
|
|
1005
|
+
backgroundWork: { queued: [], running: [] },
|
|
985
1006
|
busy: false,
|
|
986
1007
|
mcp: { revision: 0, servers: [] },
|
|
987
1008
|
messages: createMessageState(),
|
|
@@ -1084,8 +1105,10 @@ function reduceSessionEvent(state, event) {
|
|
|
1084
1105
|
runningRunIds: [...event.runningRunIds]
|
|
1085
1106
|
}
|
|
1086
1107
|
};
|
|
1108
|
+
case "background-work-active":
|
|
1109
|
+
return { ...state, backgroundWork: cloneBackgroundWorkActive(event.active) };
|
|
1087
1110
|
case "info": {
|
|
1088
|
-
const report =
|
|
1111
|
+
const report = resolveSubagentReport(event.message, event.subagentReport);
|
|
1089
1112
|
return {
|
|
1090
1113
|
...state,
|
|
1091
1114
|
messages: report ? appendSubagentReportMessage(state.messages, report) : appendInfoMessage(state.messages, event.message)
|
|
@@ -1151,6 +1174,7 @@ export {
|
|
|
1151
1174
|
enqueueQuestion,
|
|
1152
1175
|
removeQuestion,
|
|
1153
1176
|
parseSubagentReportHeader,
|
|
1177
|
+
resolveSubagentReport,
|
|
1154
1178
|
splitSanitizableDelivery,
|
|
1155
1179
|
sanitizeCoordinatorDeliveryText,
|
|
1156
1180
|
createSessionViewState,
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
// src/protocol/background-work.ts
|
|
2
|
+
var BACKGROUND_WORK_PROTOCOL_LIMITS = Object.freeze({
|
|
3
|
+
idChars: 128,
|
|
4
|
+
kindChars: 64,
|
|
5
|
+
errorCodeChars: 64,
|
|
6
|
+
labelChars: 256,
|
|
7
|
+
descriptionChars: 256,
|
|
8
|
+
commandPreviewChars: 512,
|
|
9
|
+
cwdChars: 4096,
|
|
10
|
+
resultSummaryBytes: 16 * 1024,
|
|
11
|
+
resultSummaryDepth: 8,
|
|
12
|
+
cursorChars: 512,
|
|
13
|
+
pageItems: 100,
|
|
14
|
+
remoteOutputChars: 65536
|
|
15
|
+
});
|
|
16
|
+
function truncateBackgroundWorkText(value, maximum) {
|
|
17
|
+
if (value.length <= maximum) return value;
|
|
18
|
+
let end = 0;
|
|
19
|
+
for (const codePoint of value) {
|
|
20
|
+
if (end + codePoint.length > maximum) break;
|
|
21
|
+
end += codePoint.length;
|
|
22
|
+
}
|
|
23
|
+
return value.slice(0, end);
|
|
24
|
+
}
|
|
25
|
+
var textEncoder = new TextEncoder();
|
|
26
|
+
var BackgroundWorkResultValidationError = class extends Error {
|
|
27
|
+
constructor() {
|
|
28
|
+
super("Invalid managed work result.");
|
|
29
|
+
this.name = "BackgroundWorkResultValidationError";
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
function invalidResult() {
|
|
33
|
+
throw new BackgroundWorkResultValidationError();
|
|
34
|
+
}
|
|
35
|
+
function isRecord(value) {
|
|
36
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
37
|
+
}
|
|
38
|
+
function isBoundedString(value, maximum, allowEmpty = false) {
|
|
39
|
+
return typeof value === "string" && (allowEmpty || value.length > 0) && value.length <= maximum;
|
|
40
|
+
}
|
|
41
|
+
function isFiniteTime(value) {
|
|
42
|
+
return typeof value === "number" && Number.isFinite(value) && value >= 0;
|
|
43
|
+
}
|
|
44
|
+
function isAttemptState(value) {
|
|
45
|
+
return value === "queued" || value === "running" || value === "succeeded" || value === "failed" || value === "cancelled" || value === "abandoned";
|
|
46
|
+
}
|
|
47
|
+
function isDataOnlyJsonValue(value, depth = 1, ancestors = /* @__PURE__ */ new Set()) {
|
|
48
|
+
if (value === null || typeof value === "string" || typeof value === "boolean") return true;
|
|
49
|
+
if (typeof value === "number") return Number.isFinite(value);
|
|
50
|
+
if (typeof value !== "object" || depth > BACKGROUND_WORK_PROTOCOL_LIMITS.resultSummaryDepth) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
if (ancestors.has(value)) return false;
|
|
54
|
+
ancestors.add(value);
|
|
55
|
+
try {
|
|
56
|
+
if (Array.isArray(value)) {
|
|
57
|
+
const keys = Reflect.ownKeys(value);
|
|
58
|
+
if (keys.length !== value.length + 1 || !keys.includes("length")) return false;
|
|
59
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
60
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
|
|
61
|
+
if (descriptor === void 0 || !Object.hasOwn(descriptor, "value") || descriptor.enumerable !== true || !isDataOnlyJsonValue(descriptor.value, depth + 1, ancestors)) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
const prototype = Object.getPrototypeOf(value);
|
|
68
|
+
if (prototype !== Object.prototype && prototype !== null) return false;
|
|
69
|
+
for (const key of Reflect.ownKeys(value)) {
|
|
70
|
+
if (typeof key !== "string") return false;
|
|
71
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
72
|
+
if (descriptor === void 0 || !Object.hasOwn(descriptor, "value") || descriptor.enumerable !== true || !isDataOnlyJsonValue(descriptor.value, depth + 1, ancestors)) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return true;
|
|
77
|
+
} finally {
|
|
78
|
+
ancestors.delete(value);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function serializedBytes(value) {
|
|
82
|
+
return textEncoder.encode(JSON.stringify(value)).length;
|
|
83
|
+
}
|
|
84
|
+
function hasBoundedMetadataFields(value, allowOutput) {
|
|
85
|
+
if (value.description !== void 0 && !isBoundedString(
|
|
86
|
+
value.description,
|
|
87
|
+
BACKGROUND_WORK_PROTOCOL_LIMITS.descriptionChars,
|
|
88
|
+
true
|
|
89
|
+
) || value.commandPreview !== void 0 && !isBoundedString(
|
|
90
|
+
value.commandPreview,
|
|
91
|
+
BACKGROUND_WORK_PROTOCOL_LIMITS.commandPreviewChars,
|
|
92
|
+
true
|
|
93
|
+
) || value.cwd !== void 0 && !isBoundedString(value.cwd, BACKGROUND_WORK_PROTOCOL_LIMITS.cwdChars, true) || value.errorCode !== void 0 && !isBoundedString(value.errorCode, BACKGROUND_WORK_PROTOCOL_LIMITS.errorCodeChars)) {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
if (value.output === void 0) return true;
|
|
97
|
+
return allowOutput && typeof value.output === "string" && value.output.length <= BACKGROUND_WORK_PROTOCOL_LIMITS.remoteOutputChars;
|
|
98
|
+
}
|
|
99
|
+
function parseBoundedJsonObject(value, allowOutput) {
|
|
100
|
+
if (!isRecord(value) || !isDataOnlyJsonValue(value) || !hasBoundedMetadataFields(value, allowOutput)) {
|
|
101
|
+
return invalidResult();
|
|
102
|
+
}
|
|
103
|
+
const serialized = JSON.stringify(value);
|
|
104
|
+
const cloned = JSON.parse(serialized);
|
|
105
|
+
const bytesValue = allowOutput && Object.hasOwn(cloned, "output") ? { ...cloned, output: "" } : cloned;
|
|
106
|
+
if (serializedBytes(bytesValue) > BACKGROUND_WORK_PROTOCOL_LIMITS.resultSummaryBytes) {
|
|
107
|
+
return invalidResult();
|
|
108
|
+
}
|
|
109
|
+
return cloned;
|
|
110
|
+
}
|
|
111
|
+
function parseBackgroundWorkSummary(value) {
|
|
112
|
+
if (!isRecord(value) || !isRecord(value.owner)) return invalidResult();
|
|
113
|
+
if (!isBoundedString(value.workId, BACKGROUND_WORK_PROTOCOL_LIMITS.idChars) || !isBoundedString(value.kind, BACKGROUND_WORK_PROTOCOL_LIMITS.kindChars) || !isBoundedString(value.label, BACKGROUND_WORK_PROTOCOL_LIMITS.labelChars) || value.workState !== "open" && value.workState !== "settled" || !isAttemptState(value.latestAttemptState) || !isFiniteTime(value.createdAt) || !isFiniteTime(value.updatedAt) || !isBoundedString(value.owner.profile, BACKGROUND_WORK_PROTOCOL_LIMITS.idChars) || !isBoundedString(value.owner.workspace, BACKGROUND_WORK_PROTOCOL_LIMITS.idChars) || !isBoundedString(value.owner.sessionId, BACKGROUND_WORK_PROTOCOL_LIMITS.idChars) || value.activeAttemptId !== void 0 && !isBoundedString(value.activeAttemptId, BACKGROUND_WORK_PROTOCOL_LIMITS.idChars) || value.sourceToolCallId !== void 0 && !isBoundedString(value.sourceToolCallId, BACKGROUND_WORK_PROTOCOL_LIMITS.idChars)) {
|
|
114
|
+
return invalidResult();
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
workId: value.workId,
|
|
118
|
+
kind: value.kind,
|
|
119
|
+
owner: {
|
|
120
|
+
profile: value.owner.profile,
|
|
121
|
+
workspace: value.owner.workspace,
|
|
122
|
+
sessionId: value.owner.sessionId
|
|
123
|
+
},
|
|
124
|
+
label: value.label,
|
|
125
|
+
workState: value.workState,
|
|
126
|
+
latestAttemptState: value.latestAttemptState,
|
|
127
|
+
createdAt: value.createdAt,
|
|
128
|
+
updatedAt: value.updatedAt,
|
|
129
|
+
...value.activeAttemptId === void 0 ? {} : { activeAttemptId: value.activeAttemptId },
|
|
130
|
+
...value.sourceToolCallId === void 0 ? {} : { sourceToolCallId: value.sourceToolCallId }
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
function isNonNegativeSafeInteger(value) {
|
|
134
|
+
return typeof value === "number" && Number.isSafeInteger(value) && value >= 0;
|
|
135
|
+
}
|
|
136
|
+
function parseBackgroundWorkUsage(value) {
|
|
137
|
+
if (!isRecord(value) || !isNonNegativeSafeInteger(value.modelCallCount) || !isNonNegativeSafeInteger(value.totalInputTokens) || !isNonNegativeSafeInteger(value.totalOutputTokens) || !isNonNegativeSafeInteger(value.totalReasoningTokens) || !isNonNegativeSafeInteger(value.totalModelTimeMs) || !isNonNegativeSafeInteger(value.totalCostUsdTicks) || !isNonNegativeSafeInteger(value.pricedModelCallCount) || !isNonNegativeSafeInteger(value.unpricedModelCallCount) || value.totalReportedCostUsdTicks !== void 0 && !isNonNegativeSafeInteger(value.totalReportedCostUsdTicks) || value.totalEstimatedCostUsdTicks !== void 0 && !isNonNegativeSafeInteger(value.totalEstimatedCostUsdTicks)) {
|
|
138
|
+
return invalidResult();
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
modelCallCount: value.modelCallCount,
|
|
142
|
+
totalInputTokens: value.totalInputTokens,
|
|
143
|
+
totalOutputTokens: value.totalOutputTokens,
|
|
144
|
+
totalReasoningTokens: value.totalReasoningTokens,
|
|
145
|
+
totalModelTimeMs: value.totalModelTimeMs,
|
|
146
|
+
totalCostUsdTicks: value.totalCostUsdTicks,
|
|
147
|
+
...value.totalReportedCostUsdTicks === void 0 ? {} : { totalReportedCostUsdTicks: value.totalReportedCostUsdTicks },
|
|
148
|
+
...value.totalEstimatedCostUsdTicks === void 0 ? {} : { totalEstimatedCostUsdTicks: value.totalEstimatedCostUsdTicks },
|
|
149
|
+
pricedModelCallCount: value.pricedModelCallCount,
|
|
150
|
+
unpricedModelCallCount: value.unpricedModelCallCount
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
function parseBackgroundWorkPage(value) {
|
|
154
|
+
try {
|
|
155
|
+
if (!isRecord(value) || !Array.isArray(value.items) || value.items.length > BACKGROUND_WORK_PROTOCOL_LIMITS.pageItems || value.nextCursor !== void 0 && !isBoundedString(value.nextCursor, BACKGROUND_WORK_PROTOCOL_LIMITS.cursorChars)) {
|
|
156
|
+
return invalidResult();
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
items: value.items.map(parseBackgroundWorkSummary),
|
|
160
|
+
...value.nextCursor === void 0 ? {} : { nextCursor: value.nextCursor }
|
|
161
|
+
};
|
|
162
|
+
} catch (error) {
|
|
163
|
+
if (error instanceof BackgroundWorkResultValidationError) throw error;
|
|
164
|
+
return invalidResult();
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
function parseBackgroundWorkInspection(value) {
|
|
168
|
+
try {
|
|
169
|
+
if (!isRecord(value) || !isRecord(value.attempt)) return invalidResult();
|
|
170
|
+
const attempt = value.attempt;
|
|
171
|
+
if (!isBoundedString(attempt.attemptId, BACKGROUND_WORK_PROTOCOL_LIMITS.idChars) || !isAttemptState(attempt.state) || !isFiniteTime(attempt.queuedAt) || attempt.startedAt !== void 0 && !isFiniteTime(attempt.startedAt) || attempt.completedAt !== void 0 && !isFiniteTime(attempt.completedAt) || attempt.errorCode !== void 0 && !isBoundedString(attempt.errorCode, BACKGROUND_WORK_PROTOCOL_LIMITS.errorCodeChars)) {
|
|
172
|
+
return invalidResult();
|
|
173
|
+
}
|
|
174
|
+
return {
|
|
175
|
+
summary: parseBackgroundWorkSummary(value.summary),
|
|
176
|
+
attempt: {
|
|
177
|
+
attemptId: attempt.attemptId,
|
|
178
|
+
state: attempt.state,
|
|
179
|
+
queuedAt: attempt.queuedAt,
|
|
180
|
+
...attempt.startedAt === void 0 ? {} : { startedAt: attempt.startedAt },
|
|
181
|
+
...attempt.completedAt === void 0 ? {} : { completedAt: attempt.completedAt },
|
|
182
|
+
...attempt.usage === void 0 ? {} : { usage: parseBackgroundWorkUsage(attempt.usage) },
|
|
183
|
+
...attempt.resultSummary === void 0 ? {} : { resultSummary: parseBoundedJsonObject(attempt.resultSummary, false) },
|
|
184
|
+
...attempt.errorCode === void 0 ? {} : { errorCode: attempt.errorCode }
|
|
185
|
+
},
|
|
186
|
+
detail: parseBoundedJsonObject(value.detail, true)
|
|
187
|
+
};
|
|
188
|
+
} catch (error) {
|
|
189
|
+
if (error instanceof BackgroundWorkResultValidationError) throw error;
|
|
190
|
+
return invalidResult();
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// src/protocol/version.ts
|
|
195
|
+
var PROTOCOL_VERSION = 58;
|
|
196
|
+
|
|
197
|
+
export {
|
|
198
|
+
BACKGROUND_WORK_PROTOCOL_LIMITS,
|
|
199
|
+
truncateBackgroundWorkText,
|
|
200
|
+
BackgroundWorkResultValidationError,
|
|
201
|
+
parseBackgroundWorkPage,
|
|
202
|
+
parseBackgroundWorkInspection,
|
|
203
|
+
PROTOCOL_VERSION
|
|
204
|
+
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// src/protocol/types.ts
|
|
2
|
+
var OUTPUT_DENSITY_MODES = ["ungrouped", "maximum", "bounded"];
|
|
2
3
|
var GRANT_CAPABILITIES = ["manage-provider-auth"];
|
|
3
4
|
var PROVIDER_SURFACE_IDS = [
|
|
4
5
|
"anthropic-messages",
|
|
@@ -9,6 +10,7 @@ var PROVIDER_SURFACE_IDS = [
|
|
|
9
10
|
var AGENT_MODEL_TIERS = ["fast", "balanced", "powerful"];
|
|
10
11
|
|
|
11
12
|
export {
|
|
13
|
+
OUTPUT_DENSITY_MODES,
|
|
12
14
|
GRANT_CAPABILITIES,
|
|
13
15
|
PROVIDER_SURFACE_IDS,
|
|
14
16
|
AGENT_MODEL_TIERS
|
package/dist/client/index.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createSessionViewState,
|
|
3
3
|
reduceSessionEvent
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-2IGB2A4W.js";
|
|
5
5
|
import {
|
|
6
|
-
PROTOCOL_VERSION
|
|
7
|
-
|
|
6
|
+
PROTOCOL_VERSION,
|
|
7
|
+
parseBackgroundWorkInspection,
|
|
8
|
+
parseBackgroundWorkPage
|
|
9
|
+
} from "../chunk-2ZMV6W6C.js";
|
|
8
10
|
|
|
9
11
|
// src/client/endpoint.ts
|
|
10
12
|
var TerminalEndpointError = class extends Error {
|
|
@@ -529,6 +531,20 @@ function toMemoryRemovalResult(result) {
|
|
|
529
531
|
}
|
|
530
532
|
return { removed: record.removed, slug: record.slug };
|
|
531
533
|
}
|
|
534
|
+
function toBackgroundWorkPage(result) {
|
|
535
|
+
try {
|
|
536
|
+
return parseBackgroundWorkPage(result);
|
|
537
|
+
} catch {
|
|
538
|
+
throw new SessionCommandError("invalid-result", "Invalid managed work page.");
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
function toBackgroundWorkInspection(result) {
|
|
542
|
+
try {
|
|
543
|
+
return parseBackgroundWorkInspection(result);
|
|
544
|
+
} catch {
|
|
545
|
+
throw new SessionCommandError("invalid-result", "Invalid managed work inspection.");
|
|
546
|
+
}
|
|
547
|
+
}
|
|
532
548
|
function createSessionClient(transport) {
|
|
533
549
|
let state = createSessionViewState();
|
|
534
550
|
let seq = 0;
|
|
@@ -562,9 +578,9 @@ function createSessionClient(transport) {
|
|
|
562
578
|
};
|
|
563
579
|
const unsubscribe = transport.onFrame((frame) => {
|
|
564
580
|
if (frame.type === "snapshot") {
|
|
565
|
-
state = frame.snapshot.state;
|
|
581
|
+
state = structuredClone(frame.snapshot.state);
|
|
566
582
|
seq = frame.snapshot.seq;
|
|
567
|
-
serverCommandList = frame.snapshot.serverCommands;
|
|
583
|
+
serverCommandList = structuredClone(frame.snapshot.serverCommands);
|
|
568
584
|
scheduleNotify();
|
|
569
585
|
return;
|
|
570
586
|
}
|
|
@@ -697,6 +713,23 @@ function createSessionClient(transport) {
|
|
|
697
713
|
(result) => result
|
|
698
714
|
);
|
|
699
715
|
},
|
|
716
|
+
listBackgroundWork(input) {
|
|
717
|
+
return sendCommand((id) => ({
|
|
718
|
+
id,
|
|
719
|
+
type: "list-background-work",
|
|
720
|
+
...input.cursor === void 0 ? {} : { cursor: input.cursor },
|
|
721
|
+
...input.limit === void 0 ? {} : { limit: input.limit }
|
|
722
|
+
})).then(toBackgroundWorkPage);
|
|
723
|
+
},
|
|
724
|
+
inspectBackgroundWork(input) {
|
|
725
|
+
return sendCommand((id) => ({
|
|
726
|
+
id,
|
|
727
|
+
type: "inspect-background-work",
|
|
728
|
+
workId: input.workId,
|
|
729
|
+
...input.offset === void 0 ? {} : { offset: input.offset },
|
|
730
|
+
...input.limit === void 0 ? {} : { limit: input.limit }
|
|
731
|
+
})).then(toBackgroundWorkInspection);
|
|
732
|
+
},
|
|
700
733
|
serverCommands() {
|
|
701
734
|
return serverCommandList;
|
|
702
735
|
},
|
|
@@ -809,17 +842,6 @@ function createSessionClient(transport) {
|
|
|
809
842
|
capabilities() {
|
|
810
843
|
return transport.capabilities?.() ?? [];
|
|
811
844
|
},
|
|
812
|
-
completeProviderAuth(credential, name, replace) {
|
|
813
|
-
return sendCommand((id) => ({
|
|
814
|
-
id,
|
|
815
|
-
type: "complete-provider-auth",
|
|
816
|
-
providerId: "openai-codex",
|
|
817
|
-
credential,
|
|
818
|
-
...name !== void 0 ? { name } : {},
|
|
819
|
-
...replace !== void 0 ? { replace } : {}
|
|
820
|
-
})).then(() => {
|
|
821
|
-
});
|
|
822
|
-
},
|
|
823
845
|
addCustomProvider(provider) {
|
|
824
846
|
return sendCommand((id) => ({
|
|
825
847
|
id,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AgentInput, AskUserAnswers } from "@nuvin/agent-core/shared";
|
|
2
|
-
import type { AgentCatalogEntry, AgentDetail, AgentModelSetSelectionResult,
|
|
2
|
+
import type { AgentCatalogEntry, AgentDetail, AgentModelSetSelectionResult, BackgroundWorkInspection, BackgroundWorkPage, CommandDetail, ConfigPatch, ConsolidateProposalDetail, ConsolidateProposalSummary, ConsolidateRunOutcome, CustomProviderInput, GrantCapability, McpAction, McpActionResult, McpServerInfo, MemoryExtractSummary, PersistBashPermissionRequest, PersistBashPermissionResult, ServerEvent, SessionViewState, SetConfigResult, SkillCatalogEntry, SkillDetail, SlashCommandCompletion, SlashCommandDescriptor, WorkspaceMemoryDetail, WorkspaceMemorySummary } from "../protocol/types.ts";
|
|
3
3
|
import type { ClientTransport } from "./transport.ts";
|
|
4
4
|
export type ClientSubmitOptions = {
|
|
5
5
|
displayText: string;
|
|
@@ -39,6 +39,17 @@ export interface SessionClient {
|
|
|
39
39
|
cancelAuthFlow(): Promise<void>;
|
|
40
40
|
/** Execute one authoritative MCP mutation in the attached daemon session. */
|
|
41
41
|
mcpAction(action: McpAction, serverName: string): Promise<McpActionResult>;
|
|
42
|
+
/** Page managed work owned by the attached session. */
|
|
43
|
+
listBackgroundWork(input: {
|
|
44
|
+
cursor?: string;
|
|
45
|
+
limit?: number;
|
|
46
|
+
}): Promise<BackgroundWorkPage>;
|
|
47
|
+
/** Inspect one managed-work item owned by the attached session. */
|
|
48
|
+
inspectBackgroundWork(input: {
|
|
49
|
+
workId: string;
|
|
50
|
+
offset?: number;
|
|
51
|
+
limit?: number;
|
|
52
|
+
}): Promise<BackgroundWorkInspection>;
|
|
42
53
|
/** Server-executed slash command descriptors from the attach snapshot. */
|
|
43
54
|
serverCommands(): SlashCommandDescriptor[];
|
|
44
55
|
/**
|
|
@@ -113,12 +124,6 @@ export interface SessionClient {
|
|
|
113
124
|
* Empty when the transport does not expose capabilities.
|
|
114
125
|
*/
|
|
115
126
|
capabilities(): readonly GrantCapability[];
|
|
116
|
-
/**
|
|
117
|
-
* Complete ChatGPT/Codex device-code login. Provider id is locked to
|
|
118
|
-
* `openai-codex`; callers cannot select another. `name` is an optional alias
|
|
119
|
-
* entry name (defaults to the canonical provider id). Resolves on the ack.
|
|
120
|
-
*/
|
|
121
|
-
completeProviderAuth(credential: ChatGptCredentialInput, name?: string, replace?: boolean): Promise<void>;
|
|
122
127
|
/**
|
|
123
128
|
* Register a custom provider (base URL + API key + surface) on the attached
|
|
124
129
|
* host. Sends `add-custom-provider` and resolves on the ack.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-client.d.ts","sourceRoot":"","sources":["../../src/client/session-client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAa,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"session-client.d.ts","sourceRoot":"","sources":["../../src/client/session-client.ts"],"names":[],"mappings":"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"}
|
package/dist/controller/index.js
CHANGED
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
sanitizeCoordinatorDeliveryText,
|
|
12
12
|
scopedToolKey,
|
|
13
13
|
summarizeToolCallInput
|
|
14
|
-
} from "../chunk-
|
|
14
|
+
} from "../chunk-2IGB2A4W.js";
|
|
15
15
|
|
|
16
16
|
// src/controller/agent-channel.ts
|
|
17
17
|
import { EventEmitter } from "events";
|
|
@@ -94,6 +94,9 @@ function formatBashPolicyDenial(diagnostics) {
|
|
|
94
94
|
});
|
|
95
95
|
return `Bash command rejected by policy: ${details.join("; ")}.`;
|
|
96
96
|
}
|
|
97
|
+
function preservesVerbatimCoordinatorInput(submission) {
|
|
98
|
+
return submission?.origin === "coordinator" && submission.deliveryKind === "subagent-report";
|
|
99
|
+
}
|
|
97
100
|
var MAX_AUTO_COMPACTION_CHAIN = 10;
|
|
98
101
|
function createSessionController(deps) {
|
|
99
102
|
const now = deps.now ?? Date.now;
|
|
@@ -452,7 +455,10 @@ function createSessionController(deps) {
|
|
|
452
455
|
for (const entry of drained) {
|
|
453
456
|
const guarded = await guardQueuedSteering(entry.input);
|
|
454
457
|
if (guarded.ok) {
|
|
455
|
-
accepted.push({
|
|
458
|
+
accepted.push({
|
|
459
|
+
input: preservesVerbatimCoordinatorInput(entry.opts.submission) ? entry.input : guarded.prompt,
|
|
460
|
+
opts: entry.opts
|
|
461
|
+
});
|
|
456
462
|
} else {
|
|
457
463
|
emit({ type: "error", message: guarded.message });
|
|
458
464
|
}
|
|
@@ -462,7 +468,8 @@ function createSessionController(deps) {
|
|
|
462
468
|
if (entry.opts.submission?.origin === "coordinator") {
|
|
463
469
|
emit({
|
|
464
470
|
type: "info",
|
|
465
|
-
message: sanitizeCoordinatorDeliveryText(entry.opts.displayText)
|
|
471
|
+
message: sanitizeCoordinatorDeliveryText(entry.opts.displayText),
|
|
472
|
+
...entry.opts.submission.subagentReport === void 0 ? {} : { subagentReport: structuredClone(entry.opts.submission.subagentReport) }
|
|
466
473
|
});
|
|
467
474
|
} else if (!entry.opts.silent) {
|
|
468
475
|
emit({
|
|
@@ -503,16 +510,18 @@ function createSessionController(deps) {
|
|
|
503
510
|
emit({ type: "error", message: terminalMessage });
|
|
504
511
|
return;
|
|
505
512
|
}
|
|
506
|
-
finalInput = guarded.prompt;
|
|
513
|
+
finalInput = preservesVerbatimCoordinatorInput(opts.submission) ? input : guarded.prompt;
|
|
507
514
|
}
|
|
508
515
|
if (opts.coordinatorDisplayText !== void 0) {
|
|
509
516
|
emit({
|
|
510
517
|
type: "info",
|
|
511
|
-
message: sanitizeCoordinatorDeliveryText(opts.coordinatorDisplayText)
|
|
518
|
+
message: sanitizeCoordinatorDeliveryText(opts.coordinatorDisplayText),
|
|
519
|
+
...opts.submission.origin === "coordinator" && opts.submission.subagentReport !== void 0 ? { subagentReport: structuredClone(opts.submission.subagentReport) } : {}
|
|
512
520
|
});
|
|
513
521
|
}
|
|
514
522
|
const compactionSend = (text) => runTurn(text, {
|
|
515
523
|
systemInitiated: true,
|
|
524
|
+
transientInput: true,
|
|
516
525
|
allowSteering: opts.allowSteering,
|
|
517
526
|
submission: opts.submission,
|
|
518
527
|
...opts.signal === void 0 ? {} : { signal: opts.signal }
|
|
@@ -541,6 +550,7 @@ function createSessionController(deps) {
|
|
|
541
550
|
streaming: true,
|
|
542
551
|
signal: controller.signal,
|
|
543
552
|
submission: opts.submission,
|
|
553
|
+
...opts.transientInput === true ? { transientInput: true } : {},
|
|
544
554
|
...opts.allowSteering ? { drainSteering } : {}
|
|
545
555
|
});
|
|
546
556
|
if (typeof result === "object" && result !== null && "status" in result && result.status === "aborted") {
|
|
@@ -655,6 +665,21 @@ function createSessionController(deps) {
|
|
|
655
665
|
appendInfo(message) {
|
|
656
666
|
emit({ type: "info", message });
|
|
657
667
|
},
|
|
668
|
+
commitCompaction(messages) {
|
|
669
|
+
queue.length = 0;
|
|
670
|
+
rejectAllPending("Session compacted; pending interactions were cancelled.");
|
|
671
|
+
alwaysApproved.clear();
|
|
672
|
+
emit({
|
|
673
|
+
type: "state-reset",
|
|
674
|
+
state: {
|
|
675
|
+
...createSessionViewState(),
|
|
676
|
+
busy: abortController !== null || hostBusyCount > 0,
|
|
677
|
+
meta: state.meta,
|
|
678
|
+
mcp: state.mcp,
|
|
679
|
+
messages: createMessageStateFromMessages([...messages])
|
|
680
|
+
}
|
|
681
|
+
});
|
|
682
|
+
},
|
|
658
683
|
close() {
|
|
659
684
|
if (closePromise) return closePromise;
|
|
660
685
|
closing = true;
|
|
@@ -831,6 +856,15 @@ function createSessionController(deps) {
|
|
|
831
856
|
runningRunIds: [...status.runningRunIds]
|
|
832
857
|
});
|
|
833
858
|
},
|
|
859
|
+
publishBackgroundWorkActive(active) {
|
|
860
|
+
emit({
|
|
861
|
+
type: "background-work-active",
|
|
862
|
+
active: {
|
|
863
|
+
queued: active.queued.map((summary) => ({ ...summary, owner: { ...summary.owner } })),
|
|
864
|
+
running: active.running.map((summary) => ({ ...summary, owner: { ...summary.owner } }))
|
|
865
|
+
}
|
|
866
|
+
});
|
|
867
|
+
},
|
|
834
868
|
publishAuthFlow(flow) {
|
|
835
869
|
emit({ type: "auth-flow", flow });
|
|
836
870
|
},
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { AgentMetricsSnapshot } from "@nuvin/agent-core/agent";
|
|
2
2
|
import { type AgentInput, type AgentSubmission, type AskUserAnswers, type Message, type SteeringInputDrain } from "@nuvin/agent-core/shared";
|
|
3
|
-
import type { BackgroundAgentStatus, BashPolicyApprovalDiagnostics, McpAuthFlowState, McpViewState, PersistBashPermissionRequest, PersistBashPermissionResult, ServerEvent, SessionMeta, SessionSnapshot, SlashCommandDescriptor, WorkflowProgressDelta } from "../protocol/types.ts";
|
|
3
|
+
import type { BackgroundAgentStatus, BackgroundWorkActiveState, BashPolicyApprovalDiagnostics, McpAuthFlowState, McpViewState, PersistBashPermissionRequest, PersistBashPermissionResult, ServerEvent, SessionMeta, SessionSnapshot, SlashCommandDescriptor, WorkflowProgressDelta } from "../protocol/types.ts";
|
|
4
4
|
import { type SessionApprovalMode } from "../state/approvals.ts";
|
|
5
|
+
import { type TuiMessage } from "../state/messages.ts";
|
|
5
6
|
import type { AgentChannel } from "./agent-channel.ts";
|
|
6
7
|
export declare function formatBashPolicyDenial(diagnostics: BashPolicyApprovalDiagnostics): string;
|
|
7
8
|
/** Subset of Agent the controller needs — structurally satisfied by @nuvin/agent-core Agent. */
|
|
@@ -97,6 +98,12 @@ export interface SessionController {
|
|
|
97
98
|
appendError(message: string): void;
|
|
98
99
|
/** Emit an info line into the replicated transcript (slash output, system notices). */
|
|
99
100
|
appendInfo(message: string): void;
|
|
101
|
+
/**
|
|
102
|
+
* Synchronously install a compacted child transcript projection. Unlike a
|
|
103
|
+
* history load, this preserves the active turn that may be performing
|
|
104
|
+
* automatic compaction while dropping every parent-allocation message.
|
|
105
|
+
*/
|
|
106
|
+
commitCompaction(messages: readonly TuiMessage[]): void;
|
|
100
107
|
close(): Promise<void>;
|
|
101
108
|
/**
|
|
102
109
|
* Cancel a queued (not-yet-running) submission by its `turn-status.queued` id.
|
|
@@ -136,6 +143,8 @@ export interface SessionController {
|
|
|
136
143
|
publishMetrics(snapshot: AgentMetricsSnapshot): void;
|
|
137
144
|
/** Publish running and semaphore-queued background subagent counts. */
|
|
138
145
|
publishBackgroundAgentStatus(status: BackgroundAgentStatus): void;
|
|
146
|
+
/** Publish queued and running session-owned managed work. */
|
|
147
|
+
publishBackgroundWorkActive(active: BackgroundWorkActiveState): void;
|
|
139
148
|
/**
|
|
140
149
|
* Publish an MCP OAuth login flow update (spec §10/§12). The host calls this
|
|
141
150
|
* from its `McpAuthController` subscription; the controller sequences +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-controller.d.ts","sourceRoot":"","sources":["../../src/controller/session-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EACL,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,cAAc,EAEnB,KAAK,OAAO,EAEZ,KAAK,kBAAkB,EAGxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAGV,qBAAqB,EACrB,6BAA6B,EAC7B,gBAAgB,EAChB,YAAY,EAEZ,4BAA4B,EAC5B,2BAA2B,EAC3B,WAAW,EAEX,WAAW,EACX,eAAe,EACf,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAA6B,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"session-controller.d.ts","sourceRoot":"","sources":["../../src/controller/session-controller.ts"],"names":[],"mappings":"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"}
|
package/dist/grant/index.js
CHANGED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { BackgroundWorkInspection, BackgroundWorkPage } from "./types.ts";
|
|
2
|
+
/** Wire-facing managed-work bounds shared by every protocol producer and consumer. */
|
|
3
|
+
export declare const BACKGROUND_WORK_PROTOCOL_LIMITS: Readonly<{
|
|
4
|
+
idChars: 128;
|
|
5
|
+
kindChars: 64;
|
|
6
|
+
errorCodeChars: 64;
|
|
7
|
+
labelChars: 256;
|
|
8
|
+
descriptionChars: 256;
|
|
9
|
+
commandPreviewChars: 512;
|
|
10
|
+
cwdChars: 4096;
|
|
11
|
+
resultSummaryBytes: number;
|
|
12
|
+
resultSummaryDepth: 8;
|
|
13
|
+
cursorChars: 512;
|
|
14
|
+
pageItems: 100;
|
|
15
|
+
remoteOutputChars: 65536;
|
|
16
|
+
}>;
|
|
17
|
+
/** Truncate to a UTF-16-unit protocol bound without retaining half of a surrogate pair. */
|
|
18
|
+
export declare function truncateBackgroundWorkText(value: string, maximum: number): string;
|
|
19
|
+
export declare class BackgroundWorkResultValidationError extends Error {
|
|
20
|
+
constructor();
|
|
21
|
+
}
|
|
22
|
+
/** Validate and clone an untrusted managed-work page. */
|
|
23
|
+
export declare function parseBackgroundWorkPage(value: unknown): BackgroundWorkPage;
|
|
24
|
+
/** Validate and clone an untrusted managed-work inspection. */
|
|
25
|
+
export declare function parseBackgroundWorkInspection(value: unknown): BackgroundWorkInspection;
|
|
26
|
+
//# sourceMappingURL=background-work.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background-work.d.ts","sourceRoot":"","sources":["../../src/protocol/background-work.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,wBAAwB,EACxB,kBAAkB,EAGnB,MAAM,YAAY,CAAC;AAEpB,sFAAsF;AACtF,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;EAa1C,CAAC;AAEH,2FAA2F;AAC3F,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAQjF;AAID,qBAAa,mCAAoC,SAAQ,KAAK;;CAK7D;AAoND,yDAAyD;AACzD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,CAmB1E;AAED,+DAA+D;AAC/D,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,GAAG,wBAAwB,CAoCtF"}
|