@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.
@@ -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 = parseSubagentReportHeader(event.message);
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,6 +1,6 @@
1
1
  import {
2
2
  GRANT_CAPABILITIES
3
- } from "./chunk-4UBSHJWS.js";
3
+ } from "./chunk-NDRIMBWT.js";
4
4
 
5
5
  // src/grant/index.ts
6
6
  import { createPrivateKey, createPublicKey, generateKeyPairSync, sign, verify } from "crypto";
@@ -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
@@ -1,10 +1,12 @@
1
1
  import {
2
2
  createSessionViewState,
3
3
  reduceSessionEvent
4
- } from "../chunk-VIUQI74J.js";
4
+ } from "../chunk-2IGB2A4W.js";
5
5
  import {
6
- PROTOCOL_VERSION
7
- } from "../chunk-H5OW7CDG.js";
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, ChatGptCredentialInput, 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";
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":"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"}
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;AAMtF,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,4BAA4B,EAC5B,wBAAwB,EACxB,kBAAkB,EAElB,aAAa,EACb,WAAW,EACX,yBAAyB,EACzB,0BAA0B,EAC1B,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,SAAS,EACT,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,4BAA4B,EAC5B,2BAA2B,EAC3B,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,sBAAsB,EAEtB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAQF;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,IAAI,gBAAgB,CAAC;IAC7B,MAAM,IAAI,MAAM,CAAC;IACjB,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAC5C,6EAA6E;IAC7E,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC5D,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,cAAc,CACZ,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EACzB,OAAO,CAAC,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,GAC/B,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,qBAAqB,CACnB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,4BAA4B,EACrC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,GAC/B,OAAO,CAAC,2BAA2B,CAAC,CAAC;IACxC,cAAc,CACZ,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,EACvB,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,GAC/B,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,gFAAgF;IAChF,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C;;;;OAIG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C;;;;OAIG;IACH,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,6EAA6E;IAC7E,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC3E,uDAAuD;IACvD,kBAAkB,CAAC,KAAK,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC5F,mEAAmE;IACnE,qBAAqB,CAAC,KAAK,EAAE;QAC3B,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACtC,0EAA0E;IAC1E,cAAc,IAAI,sBAAsB,EAAE,CAAC;IAC3C;;;;OAIG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD;;;;;OAKG;IACH,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC3F;;;;;;;OAOG;IACH,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5D,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAAC;IACvE,8DAA8D;IAC9D,UAAU,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC3C,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAChD,8DAA8D;IAC9D,UAAU,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC3C,kFAAkF;IAClF,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAChD,qFAAqF;IACrF,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACjD,uEAAuE;IACvE,cAAc,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAC3C,uDAAuD;IACvD,qBAAqB,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAC3D,wEAAwE;IACxE,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACjE,6CAA6C;IAC7C,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjF,wEAAwE;IACxE,wBAAwB,IAAI,OAAO,CAAC,0BAA0B,EAAE,CAAC,CAAC;IAClE,kDAAkD;IAClD,yBAAyB,CACvB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,SAAS,GAAG,QAAQ,EAC9B,oBAAoB,CAAC,EAAE,SAAS,MAAM,EAAE,GACvC,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5D,qEAAqE;IACrE,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAC/E,uEAAuE;IACvE,YAAY,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAChD;;;;OAIG;IACH,cAAc,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACjD;;;OAGG;IACH,yBAAyB,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC5D;;;OAGG;IACH,YAAY,IAAI,SAAS,eAAe,EAAE,CAAC;IAC3C;;;OAGG;IACH,iBAAiB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,KAAK,IAAI,IAAI,CAAC;CACf;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAE1C,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM;CAKlB;AAiID,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,eAAe,GAAG,aAAa,CA+W7E"}
@@ -11,7 +11,7 @@ import {
11
11
  sanitizeCoordinatorDeliveryText,
12
12
  scopedToolKey,
13
13
  summarizeToolCallInput
14
- } from "../chunk-VIUQI74J.js";
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({ input: guarded.prompt, opts: entry.opts });
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":"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"}
1
+ {"version":3,"file":"session-controller.d.ts","sourceRoot":"","sources":["../../src/controller/session-controller.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,8 @@ import {
3
3
  generateGrantKeyPair,
4
4
  signGrant,
5
5
  verifyGrant
6
- } from "../chunk-5XT7AOI2.js";
7
- import "../chunk-4UBSHJWS.js";
6
+ } from "../chunk-MKPANFIF.js";
7
+ import "../chunk-NDRIMBWT.js";
8
8
  export {
9
9
  DEFAULT_GRANT_SKEW_MS,
10
10
  generateGrantKeyPair,
@@ -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"}