@bastani/atomic 0.9.57-alpha.1 → 0.9.58-alpha.1

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.
Files changed (117) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/dist/builtin/intercom/package.json +1 -1
  3. package/dist/builtin/mcp/package.json +1 -1
  4. package/dist/builtin/subagents/CHANGELOG.md +12 -0
  5. package/dist/builtin/subagents/package.json +1 -1
  6. package/dist/builtin/subagents/src/extension/index.bundle.mjs +39 -5
  7. package/dist/builtin/web-access/CHANGELOG.md +12 -0
  8. package/dist/builtin/web-access/index.bundle.mjs +2 -2
  9. package/dist/builtin/web-access/package.json +1 -1
  10. package/dist/builtin/workflows/CHANGELOG.md +42 -0
  11. package/dist/builtin/workflows/package.json +1 -1
  12. package/dist/builtin/workflows/src/extension/index.bundle.mjs +885 -228
  13. package/dist/builtin/workflows/src/extension/local-worker-entry.mjs +933 -175
  14. package/dist/builtin/workflows/src/index.js +630 -162
  15. package/dist/builtin/workflows/src/local-worker-entry.mjs +933 -175
  16. package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +1 -1
  17. package/dist/builtin/workflows/src/shared/workflow-infrastructure-error.d.ts +13 -0
  18. package/dist/builtin/workflows/src/workers/public-options.d.ts +10 -0
  19. package/dist/core/agent-session-persistent-custom-messages.d.ts +5 -0
  20. package/dist/core/agent-session-persistent-custom-messages.d.ts.map +1 -1
  21. package/dist/core/agent-session-persistent-custom-messages.js +16 -0
  22. package/dist/core/agent-session-persistent-custom-messages.js.map +1 -1
  23. package/dist/core/agent-session-tasks.d.ts.map +1 -1
  24. package/dist/core/agent-session-tasks.js +20 -0
  25. package/dist/core/agent-session-tasks.js.map +1 -1
  26. package/dist/core/settings-defaults.d.ts +4 -0
  27. package/dist/core/settings-defaults.d.ts.map +1 -1
  28. package/dist/core/settings-defaults.js +4 -0
  29. package/dist/core/settings-defaults.js.map +1 -1
  30. package/dist/core/settings-manager-resource-accessors.d.ts +2 -0
  31. package/dist/core/settings-manager-resource-accessors.d.ts.map +1 -1
  32. package/dist/core/settings-manager-resource-accessors.js +6 -0
  33. package/dist/core/settings-manager-resource-accessors.js.map +1 -1
  34. package/dist/core/settings-schema.d.ts +9 -0
  35. package/dist/core/settings-schema.d.ts.map +1 -1
  36. package/dist/core/settings-schema.js +11 -0
  37. package/dist/core/settings-schema.js.map +1 -1
  38. package/dist/core/settings-types.d.ts +1 -1
  39. package/dist/core/settings-types.d.ts.map +1 -1
  40. package/dist/core/settings-types.js.map +1 -1
  41. package/dist/core/tasks/agent-adapter.d.ts +10 -1
  42. package/dist/core/tasks/agent-adapter.d.ts.map +1 -1
  43. package/dist/core/tasks/agent-adapter.js +20 -0
  44. package/dist/core/tasks/agent-adapter.js.map +1 -1
  45. package/dist/core/tasks/contracts.d.ts +6 -0
  46. package/dist/core/tasks/contracts.d.ts.map +1 -1
  47. package/dist/core/tasks/contracts.js.map +1 -1
  48. package/dist/core/tasks/heartbeat-notice.d.ts +64 -0
  49. package/dist/core/tasks/heartbeat-notice.d.ts.map +1 -0
  50. package/dist/core/tasks/heartbeat-notice.js +98 -0
  51. package/dist/core/tasks/heartbeat-notice.js.map +1 -0
  52. package/dist/core/tasks/heartbeat.d.ts +75 -0
  53. package/dist/core/tasks/heartbeat.d.ts.map +1 -0
  54. package/dist/core/tasks/heartbeat.js +440 -0
  55. package/dist/core/tasks/heartbeat.js.map +1 -0
  56. package/dist/core/tasks/supervisor.d.ts +2 -0
  57. package/dist/core/tasks/supervisor.d.ts.map +1 -1
  58. package/dist/core/tasks/supervisor.js +32 -4
  59. package/dist/core/tasks/supervisor.js.map +1 -1
  60. package/dist/core/tasks/task-view-source.d.ts +72 -0
  61. package/dist/core/tasks/task-view-source.d.ts.map +1 -0
  62. package/dist/core/tasks/task-view-source.js +155 -0
  63. package/dist/core/tasks/task-view-source.js.map +1 -0
  64. package/dist/core/tools/bash-pty-native.d.ts +2 -0
  65. package/dist/core/tools/bash-pty-native.d.ts.map +1 -1
  66. package/dist/core/tools/bash-pty-native.js +1 -0
  67. package/dist/core/tools/bash-pty-native.js.map +1 -1
  68. package/dist/core/tools/bash.d.ts +3 -0
  69. package/dist/core/tools/bash.d.ts.map +1 -1
  70. package/dist/core/tools/bash.js +20 -2
  71. package/dist/core/tools/bash.js.map +1 -1
  72. package/dist/core/tools/powershell.d.ts +16 -8
  73. package/dist/core/tools/powershell.d.ts.map +1 -1
  74. package/dist/index.d.ts +5 -3
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +4 -2
  77. package/dist/index.js.map +1 -1
  78. package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -1
  79. package/dist/modes/interactive/components/chat-session-host-events.js +7 -0
  80. package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
  81. package/dist/modes/interactive/components/chat-session-host-state.d.ts +3 -0
  82. package/dist/modes/interactive/components/chat-session-host-state.d.ts.map +1 -1
  83. package/dist/modes/interactive/components/chat-session-host-state.js +4 -0
  84. package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -1
  85. package/dist/modes/interactive/components/chat-session-host-types.d.ts +11 -0
  86. package/dist/modes/interactive/components/chat-session-host-types.d.ts.map +1 -1
  87. package/dist/modes/interactive/components/chat-session-host-types.js.map +1 -1
  88. package/dist/modes/interactive/components/chat-session-host.d.ts +2 -0
  89. package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
  90. package/dist/modes/interactive/components/chat-session-host.js +15 -8
  91. package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
  92. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  93. package/dist/modes/interactive/components/custom-message.js +12 -0
  94. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  95. package/dist/modes/interactive/components/task-detail.d.ts.map +1 -1
  96. package/dist/modes/interactive/components/task-detail.js +5 -0
  97. package/dist/modes/interactive/components/task-detail.js.map +1 -1
  98. package/dist/modes/interactive/components/task-heartbeat-message.d.ts +14 -0
  99. package/dist/modes/interactive/components/task-heartbeat-message.d.ts.map +1 -0
  100. package/dist/modes/interactive/components/task-heartbeat-message.js +76 -0
  101. package/dist/modes/interactive/components/task-heartbeat-message.js.map +1 -0
  102. package/dist/modes/interactive/components/task-inspector.d.ts +6 -3
  103. package/dist/modes/interactive/components/task-inspector.d.ts.map +1 -1
  104. package/dist/modes/interactive/components/task-inspector.js +53 -100
  105. package/dist/modes/interactive/components/task-inspector.js.map +1 -1
  106. package/dist/modes/interactive/skill-command-autocomplete.d.ts +22 -2
  107. package/dist/modes/interactive/skill-command-autocomplete.d.ts.map +1 -1
  108. package/dist/modes/interactive/skill-command-autocomplete.js +28 -9
  109. package/dist/modes/interactive/skill-command-autocomplete.js.map +1 -1
  110. package/docs/background-tasks.md +65 -1
  111. package/docs/settings.md +12 -0
  112. package/docs/subagents.md +2 -0
  113. package/docs/tools.md +2 -1
  114. package/docs/workflows/operations.md +5 -3
  115. package/npm-shrinkwrap.json +32 -32
  116. package/package.json +3 -3
  117. package/schemas/settings.schema.json +24 -0
@@ -325,7 +325,7 @@ export interface ToolNodeSnapshot extends WorkflowSerializableObject {
325
325
  */
326
326
  export interface RunFailureClassification extends WorkflowSerializableObject {
327
327
  readonly kind: "auth" | "rate_limit" | "provider" | "cancelled" | "unknown";
328
- readonly code?: "login_required" | "auth_timeout" | "missing_api_key" | "invalid_api_key" | "forbidden_config" | "unknown_model" | "rate_limited" | "quota_limited" | "provider_unavailable" | "pending_stage_delivery_failed" | "cancelled" | "unknown";
328
+ readonly code?: "login_required" | "auth_timeout" | "missing_api_key" | "invalid_api_key" | "forbidden_config" | "unknown_model" | "rate_limited" | "quota_limited" | "provider_unavailable" | "pending_stage_delivery_failed" | "worker_lost" | "worker_cleanup_unconfirmed" | "worker_retry_limit" | "worker_startup_failed" | "stale_work_lease" | "intercom_unavailable" | "storage_unavailable" | "cancelled" | "unknown";
329
329
  /** Whether retrying the same work can succeed, as for a rate limit or an outage. */
330
330
  readonly retryable: boolean;
331
331
  /** Whether the run can be resumed after this failure. */
@@ -1,4 +1,6 @@
1
1
  export type WorkflowInfrastructureFault = "worker_lost" | "worker_cleanup_unconfirmed" | "worker_retry_limit" | "worker_startup_failed" | "stale_work_lease" | "intercom_unavailable" | "storage_unavailable";
2
+ /** Every infrastructure fault, as a stage or run failure records it in `failureCode`. */
3
+ export declare const WORKFLOW_INFRASTRUCTURE_FAULTS: ReadonlySet<string>;
2
4
  export declare class WorkflowInfrastructureError extends Error {
3
5
  readonly name = "WorkflowInfrastructureError";
4
6
  readonly retryable = true;
@@ -8,3 +10,14 @@ export declare class WorkflowInfrastructureError extends Error {
8
10
  export declare function isRetryableWorkflowError(error: unknown): boolean;
9
11
  export declare function workflowInfrastructureFault(message: string): WorkflowInfrastructureFault | undefined;
10
12
  export declare function asWorkflowInfrastructureError(error: unknown): WorkflowInfrastructureError | undefined;
13
+ /**
14
+ * Whether a failed run result failed on infrastructure: its classified failure, its error, or the error or failure
15
+ * code of a failed stage names an infrastructure fault. Results recorded before stage failures were classified by
16
+ * fault carry only the fault's message, which this recognizes too.
17
+ */
18
+ export declare function failedOnInfrastructureFault(result: {
19
+ readonly status?: unknown;
20
+ readonly error?: unknown;
21
+ readonly failure?: unknown;
22
+ readonly stages?: unknown;
23
+ }): boolean;
@@ -21,7 +21,17 @@ export interface LocalWorkerOptions {
21
21
  }[];
22
22
  readonly startupTimeoutMs?: number;
23
23
  readonly leaseMs?: number;
24
+ /**
25
+ * Load per CPU (the one-minute load average divided by the CPU count) above which the stages of pooled children start
26
+ * one at a time, at most one every five seconds and in the order they asked, so an overloaded machine is not given
27
+ * a burst of stage starts while earlier ones are still starting. Running stages, the subagents they start and their
28
+ * tool processes are not held. Default {@link DEFAULT_POOLED_STAGE_START_MAX_LOAD_PER_CPU}; `0` turns the pacing
29
+ * off. Not saved with the root.
30
+ */
31
+ readonly maxLoadPerCpu?: number;
24
32
  }
33
+ /** Load per CPU above which pooled stages wait to start, unless `localWorkers.maxLoadPerCpu` says otherwise. */
34
+ export declare const DEFAULT_POOLED_STAGE_START_MAX_LOAD_PER_CPU = 3;
25
35
  export interface WorkflowExecutionResources {
26
36
  readonly localWorkers?: LocalWorkerOptions;
27
37
  /**
@@ -27,6 +27,11 @@ export declare function triggerProtectedStreamingCustomMessages(session: AgentSe
27
27
  /** Record that agent-core drained and consumed the hidden reconciliation. */
28
28
  export declare function markProtectedStreamingCustomMessageConsumed(session: AgentSession, message: CustomMessage): boolean;
29
29
  export declare function markProtectedStreamingCustomMessagePersistenceFailed(session: AgentSession, message: CustomMessage): void;
30
+ /**
31
+ * Whether a durable card of this custom type is admitted but its hidden turn is still queued, so the model has not
32
+ * read it yet. Clearing the queue restores protected turns, so a queued entry ends only when it is consumed.
33
+ */
34
+ export declare function hasUnreadProtectedCustomMessage(session: AgentSession, customType: string): boolean;
30
35
  export declare function isProtectedStreamingCustomMessage(session: AgentSession, message: CustomMessage): boolean;
31
36
  /**
32
37
  * Persist a consumed hidden reconciliation exactly once. Its visible card was
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-persistent-custom-messages.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-persistent-custom-messages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,2BAA2B,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC9F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAA8B,MAAM,eAAe,CAAC;AAE/E,KAAK,iBAAiB,GAAG,OAAO,GAAG,UAAU,CAAC;AAC9C,KAAK,cAAc,GAAG,QAAQ,GAAG,sBAAsB,GAAG,oBAAoB,CAAC;AAE/E,eAAO,MAAM,oCAAoC,8CAA8C,CAAC;AAQhG,MAAM,WAAW,+BAA+B;IAC/C,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,KAAK,EAAE,cAAc,CAAC;CACtB;AAgFD,2FAA2F;AAC3F,wBAAgB,uCAAuC,CAAC,OAAO,EAAE,YAAY,GAAG,uBAAuB,EAAE,CA+BxG;AAED,2EAA2E;AAC3E,wBAAgB,uCAAuC,CACtD,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,SAAS,uBAAuB,EAAE,GACzC,MAAM,CAeR;AAED,0FAA0F;AAC1F,wBAAsB,sCAAsC,CAC3D,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,uBAAuB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAQf;AAyCD,0EAA0E;AAC1E,wBAAsB,oCAAoC,CACzD,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,iBAAiB,GACzB,OAAO,CAAC,aAAa,CAAC,CAIxB;AAED,gFAAgF;AAChF,wBAAsB,oCAAoC,CACzD,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,iBAAiB,EAC3B,QAAQ,UAAQ,GACd,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,iFAAiF;AACjF,wBAAsB,qCAAqC,CAC1D,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,aAAa,EAAE,EACzB,QAAQ,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,gFAAgF;AAChF,wBAAsB,uCAAuC,CAC5D,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,aAAa,EAAE,EACzB,QAAQ,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAYf;AAED,6EAA6E;AAC7E,wBAAgB,2CAA2C,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAKlH;AAED,wBAAgB,oDAAoD,CACnE,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,aAAa,GACpB,IAAI,CAGN;AAED,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAExG;AAED;;;;GAIG;AACH,wBAAsB,sCAAsC,CAC3D,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,aAAa,GACpB,OAAO,CAAC,OAAO,CAAC,CAkBlB;AAED,+EAA+E;AAC/E,wBAAsB,6CAA6C,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAUxG;AAED,4EAA4E;AAC5E,wBAAsB,6CAA6C,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAOxG;AAgCD;;;;GAIG;AACH,wBAAsB,kDAAkD,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB7G;AAED,kFAAkF;AAClF,wBAAgB,uCAAuC,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAOhH;AAED,oFAAoF;AACpF,wBAAgB,wCAAwC,CACvD,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,kBAAkB,GAC7B,IAAI,CAUN"}
1
+ {"version":3,"file":"agent-session-persistent-custom-messages.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-persistent-custom-messages.ts"],"names":[],"mappings":"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"}
@@ -184,6 +184,22 @@ export function markProtectedStreamingCustomMessagePersistenceFailed(session, me
184
184
  if (entry?.phase === "consumed-unpersisted")
185
185
  entry.phase = "persistence-failed";
186
186
  }
187
+ /**
188
+ * Whether a durable card of this custom type is admitted but its hidden turn is still queued, so the model has not
189
+ * read it yet. Clearing the queue restores protected turns, so a queued entry ends only when it is consumed.
190
+ */
191
+ export function hasUnreadProtectedCustomMessage(session, customType) {
192
+ const owner = resolveWorkflowStageDeliveryTarget(session);
193
+ return protectedMessages(owner).some((entry) => {
194
+ if (entry.phase !== "queued")
195
+ return false;
196
+ const intent = completedReconciliationIntent(entry.message.details);
197
+ if (intent === undefined)
198
+ return false;
199
+ const card = owner.sessionManager.getEntry(intent);
200
+ return card?.type === "custom_message" && card.customType === customType;
201
+ });
202
+ }
187
203
  export function isProtectedStreamingCustomMessage(session, message) {
188
204
  return protectedMessages(session).some((entry) => entry.message === message);
189
205
  }
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-persistent-custom-messages.js","sourceRoot":"","sources":["../../src/core/agent-session-persistent-custom-messages.ts"],"names":[],"mappings":"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","sourcesContent":["import { resolveWorkflowStageDeliveryTarget } from \"./agent-session-delivery-forwarding.ts\";\nimport type { AgentSessionInternalSurface as AgentSession } from \"./agent-session-methods.ts\";\nimport type { DrainedAgentQueues } from \"./agent-session-types.js\";\nimport { customMessageExcludesContext } from \"./agent-session-types.js\";\nimport type { PendingRecoveryDelivery } from \"./extensions/index.js\";\nimport type { CustomMessage, StageAdmittedCustomMessage } from \"./messages.ts\";\n\ntype ProtectedDelivery = \"steer\" | \"followUp\";\ntype ProtectedPhase = \"queued\" | \"consumed-unpersisted\" | \"persistence-failed\";\n\nexport const PROTECTED_RECONCILIATION_CUSTOM_TYPE = \"atomic:protected-streaming-reconciliation\";\n\ninterface ProtectedReconciliationDetails {\n\tprotectedReconciliationOf: string;\n\t/** Set when resume recovery declined to replay the card to the model. */\n\trecovery?: \"dropped\";\n}\n\nexport interface ProtectedStreamingCustomMessage {\n\tmessage: CustomMessage;\n\tdelivery: ProtectedDelivery;\n\tphase: ProtectedPhase;\n}\n\nfunction protectedMessages(session: AgentSession): ProtectedStreamingCustomMessage[] {\n\tsession._protectedStreamingCustomMessages ??= [];\n\treturn session._protectedStreamingCustomMessages;\n}\n\nasync function appendDurableDisplayCard(\n\tsession: AgentSession,\n\tmessage: CustomMessage,\n\tdelivery: ProtectedDelivery,\n): Promise<{ readonly card: CustomMessage & { excludeFromContext: true }; readonly intentEntryId: string }> {\n\tconst card = { ...message, excludeFromContext: true } satisfies CustomMessage & { excludeFromContext: true };\n\tconst admitted = message as StageAdmittedCustomMessage;\n\t// A retry after a failed flush must complete the already-appended occurrence\n\t// rather than append a second visible card for the same stable key.\n\tconst partial =\n\t\tadmitted.stageAdmissionKey === undefined\n\t\t\t? undefined\n\t\t\t: session.sessionManager\n\t\t\t\t\t.getBranch()\n\t\t\t\t\t.find(\n\t\t\t\t\t\t(entry) =>\n\t\t\t\t\t\t\tentry.type === \"custom_message\" &&\n\t\t\t\t\t\t\tentry.stageAdmissionKey === admitted.stageAdmissionKey &&\n\t\t\t\t\t\t\tprotectedDelivery(entry.protectedReconciliation) !== undefined,\n\t\t\t\t\t);\n\t// The card and recovery marker share one append, so either both survive a\n\t// process exit or neither does.\n\tconst intentEntryId =\n\t\tpartial?.id ??\n\t\t(await session.sessionManager.appendCustomMessageEntry(\n\t\t\tcard.customType,\n\t\t\tcard.content,\n\t\t\tcard.display,\n\t\t\tcard.details,\n\t\t\ttrue,\n\t\t\t{ delivery },\n\t\t\tadmitted.stageAdmissionKey,\n\t\t));\n\tsession._entryIdsByMessage.set(card, intentEntryId);\n\tsession._refreshFinalizedContext();\n\treturn { card, intentEntryId };\n}\n\nfunction emitDurableDisplayCard(session: AgentSession, card: CustomMessage): void {\n\t// The card is already live and file-backed, and its protected reconciliation\n\t// is registered. Public listeners remain fallible, but their errors cannot\n\t// revoke admission or make the producer retry this committed occurrence.\n\ttry {\n\t\tsession._emit({ type: \"message_start\", message: card });\n\t} catch {}\n\ttry {\n\t\tsession._emit({ type: \"message_end\", message: card });\n\t} catch {}\n}\n\nfunction createProtectedReconciliation(message: CustomMessage, intentEntryId: string): CustomMessage {\n\treturn {\n\t\trole: \"custom\",\n\t\tcustomType: PROTECTED_RECONCILIATION_CUSTOM_TYPE,\n\t\tcontent: message.content,\n\t\tdisplay: false,\n\t\tdetails: { protectedReconciliationOf: intentEntryId } satisfies ProtectedReconciliationDetails,\n\t\ttimestamp: message.timestamp,\n\t};\n}\n\nfunction completedReconciliationIntent(details: unknown): string | undefined {\n\tif (details === null || typeof details !== \"object\") return undefined;\n\tconst intent = (details as { protectedReconciliationOf?: unknown }).protectedReconciliationOf;\n\treturn typeof intent === \"string\" ? intent : undefined;\n}\n\nfunction protectedDelivery(marker: unknown): ProtectedDelivery | undefined {\n\tif (marker === null || typeof marker !== \"object\") return undefined;\n\tconst delivery = (marker as { delivery?: unknown }).delivery;\n\treturn delivery === \"steer\" || delivery === \"followUp\" ? delivery : undefined;\n}\n\n/** Durable card intents with neither a persisted hidden completion nor a scheduled one. */\nexport function pendingProtectedStreamingCustomMessages(session: AgentSession): PendingRecoveryDelivery[] {\n\tconst branch = session.sessionManager.getBranch();\n\tconst completed = new Set(\n\t\tbranch.flatMap((entry) =>\n\t\t\tentry.type === \"custom_message\" && entry.customType === PROTECTED_RECONCILIATION_CUSTOM_TYPE\n\t\t\t\t? [completedReconciliationIntent(entry.details)].filter((intent): intent is string => intent !== undefined)\n\t\t\t\t: [],\n\t\t),\n\t);\n\tconst scheduled = new Set(\n\t\tprotectedMessages(session).flatMap((entry) => {\n\t\t\tconst intent = completedReconciliationIntent(entry.message.details);\n\t\t\treturn intent === undefined ? [] : [intent];\n\t\t}),\n\t);\n\tconst pending: PendingRecoveryDelivery[] = [];\n\tfor (const entry of branch) {\n\t\tif (entry.type !== \"custom_message\") continue;\n\t\tconst delivery = protectedDelivery(entry.protectedReconciliation);\n\t\tif (delivery === undefined || completed.has(entry.id) || scheduled.has(entry.id)) continue;\n\t\tpending.push({\n\t\t\tentryId: entry.id,\n\t\t\tcustomType: entry.customType,\n\t\t\tcontent: entry.content,\n\t\t\tdetails: entry.details,\n\t\t\ttimestamp: entry.timestamp,\n\t\t\t...(entry.stageAdmissionKey === undefined ? {} : { stageAdmissionKey: entry.stageAdmissionKey }),\n\t\t\tdelivery,\n\t\t});\n\t}\n\treturn pending;\n}\n\n/** Requeue the hidden model-facing turn of each recovered durable card. */\nexport function recoverProtectedStreamingCustomMessages(\n\tsession: AgentSession,\n\tpending: readonly PendingRecoveryDelivery[],\n): number {\n\tfor (const entry of pending) {\n\t\tconst parsedTimestamp = Date.parse(entry.timestamp);\n\t\tconst reconciliation: CustomMessage = {\n\t\t\trole: \"custom\",\n\t\t\tcustomType: PROTECTED_RECONCILIATION_CUSTOM_TYPE,\n\t\t\tcontent: entry.content,\n\t\t\tdisplay: false,\n\t\t\tdetails: { protectedReconciliationOf: entry.entryId } satisfies ProtectedReconciliationDetails,\n\t\t\ttimestamp: Number.isFinite(parsedTimestamp) ? parsedTimestamp : Date.now(),\n\t\t};\n\t\tprotectedMessages(session).push({ message: reconciliation, delivery: entry.delivery, phase: \"queued\" });\n\t\tsession._queueAgentMessage(reconciliation, entry.delivery);\n\t}\n\treturn pending.length;\n}\n\n/** Close a recovered card without a model turn, so later resumes never offer it again. */\nexport async function dismissProtectedStreamingCustomMessage(\n\tsession: AgentSession,\n\tpending: PendingRecoveryDelivery,\n): Promise<void> {\n\tawait session.sessionManager.appendCustomMessageEntry(\n\t\tPROTECTED_RECONCILIATION_CUSTOM_TYPE,\n\t\tpending.content,\n\t\tfalse,\n\t\t{ protectedReconciliationOf: pending.entryId, recovery: \"dropped\" } satisfies ProtectedReconciliationDetails,\n\t\ttrue,\n\t);\n}\n\ninterface ProtectedAdmission {\n\towner: AgentSession;\n\tcards: CustomMessage[];\n\treconciliations: CustomMessage[];\n}\n\nasync function prepareProtectedAdmission(\n\tsession: AgentSession,\n\tmessages: CustomMessage[],\n\tdelivery: ProtectedDelivery,\n): Promise<ProtectedAdmission> {\n\t// While the initiating workflow tool is still executing, its assistant call\n\t// may be ahead of SessionManager's async event writer. Wait only in that\n\t// protocol-sensitive phase; at ordinary turn boundaries the hidden steer must\n\t// be queued synchronously so agent-core's next native poll observes it.\n\tif (session.agent.state.pendingToolCalls.size > 0) await session._agentEventQueue;\n\tconst owner = resolveWorkflowStageDeliveryTarget(session);\n\tconst prepared = [];\n\tfor (const message of messages) {\n\t\tconst { card, intentEntryId } = await appendDurableDisplayCard(owner, message, delivery);\n\t\tprepared.push({ card, reconciliation: createProtectedReconciliation(message, intentEntryId) });\n\t}\n\tconst cards = prepared.map((entry) => entry.card);\n\tconst reconciliations = prepared.map((entry) => entry.reconciliation);\n\tprotectedMessages(owner).push(\n\t\t...reconciliations.map((message) => ({ message, delivery, phase: \"queued\" as const })),\n\t);\n\treturn { owner, cards, reconciliations };\n}\n\nfunction emitProtectedAdmission(admission: ProtectedAdmission): AgentSession {\n\tlet owner = admission.owner;\n\tfor (const card of admission.cards) {\n\t\towner = resolveWorkflowStageDeliveryTarget(owner);\n\t\temitDurableDisplayCard(owner, card);\n\t}\n\treturn resolveWorkflowStageDeliveryTarget(owner);\n}\n\n/** Persist one visible card and register its hidden model-facing turn. */\nexport async function admitProtectedStreamingCustomMessage(\n\tsession: AgentSession,\n\tmessage: CustomMessage,\n\tdelivery: ProtectedDelivery,\n): Promise<CustomMessage> {\n\tconst admission = await prepareProtectedAdmission(session, [message], delivery);\n\temitProtectedAdmission(admission);\n\treturn admission.reconciliations[0]!;\n}\n\n/** Queue one hidden turn before public listeners can transfer its ownership. */\nexport async function queueProtectedStreamingCustomMessage(\n\tsession: AgentSession,\n\tmessage: CustomMessage,\n\tdelivery: ProtectedDelivery,\n\tpriority = false,\n): Promise<void> {\n\tconst admission = await prepareProtectedAdmission(session, [message], delivery);\n\tadmission.owner._queueAgentMessage(admission.reconciliations[0]!, priority ? \"interrupt\" : delivery);\n\temitProtectedAdmission(admission);\n}\n\n/** Queue a whole hidden batch before public listeners can transfer ownership. */\nexport async function queueProtectedStreamingCustomMessages(\n\tsession: AgentSession,\n\tmessages: CustomMessage[],\n\tdelivery: ProtectedDelivery,\n): Promise<void> {\n\tconst admission = await prepareProtectedAdmission(session, messages, delivery);\n\tfor (const reconciliation of admission.reconciliations) {\n\t\tadmission.owner._queueAgentMessage(reconciliation, delivery);\n\t}\n\temitProtectedAdmission(admission);\n}\n\n/** Start or queue an idle protected batch before exposing its display cards. */\nexport async function triggerProtectedStreamingCustomMessages(\n\tsession: AgentSession,\n\tmessages: CustomMessage[],\n\tdelivery: ProtectedDelivery,\n): Promise<void> {\n\tconst admission = await prepareProtectedAdmission(session, messages, delivery);\n\tfor (const reconciliation of admission.reconciliations) {\n\t\tadmission.owner._queueAgentMessage(reconciliation, delivery);\n\t}\n\tconst owner = emitProtectedAdmission(admission);\n\tif (owner.isStreaming || owner._isPreparingRun || owner._queuedMessagesPaused) return;\n\tfor (const reconciliation of admission.reconciliations) {\n\t\tremoveQueuedProtectedReference(owner, reconciliation);\n\t}\n\tconst turn = owner._runAgentPrompt(admission.reconciliations);\n\tvoid turn.catch(() => {});\n}\n\n/** Record that agent-core drained and consumed the hidden reconciliation. */\nexport function markProtectedStreamingCustomMessageConsumed(session: AgentSession, message: CustomMessage): boolean {\n\tconst entry = protectedMessages(session).find((candidate) => candidate.message === message);\n\tif (!entry) return false;\n\tentry.phase = \"consumed-unpersisted\";\n\treturn true;\n}\n\nexport function markProtectedStreamingCustomMessagePersistenceFailed(\n\tsession: AgentSession,\n\tmessage: CustomMessage,\n): void {\n\tconst entry = protectedMessages(session).find((candidate) => candidate.message === message);\n\tif (entry?.phase === \"consumed-unpersisted\") entry.phase = \"persistence-failed\";\n}\n\nexport function isProtectedStreamingCustomMessage(session: AgentSession, message: CustomMessage): boolean {\n\treturn protectedMessages(session).some((entry) => entry.message === message);\n}\n\n/**\n * Persist a consumed hidden reconciliation exactly once. Its visible card was\n * already committed at admission, so a transient failure never re-adds a card\n * or re-injects another provider message.\n */\nexport async function persistProtectedStreamingCustomMessage(\n\tsession: AgentSession,\n\tmessage: CustomMessage,\n): Promise<boolean> {\n\tconst pending = protectedMessages(session);\n\tconst index = pending.findIndex((entry) => entry.message === message);\n\tif (index === -1) return false;\n\tconst entry = pending[index];\n\tconst admitted = message as StageAdmittedCustomMessage;\n\tif (entry.phase !== \"consumed-unpersisted\" && entry.phase !== \"persistence-failed\") return true;\n\tawait session.sessionManager.appendCustomMessageEntry(\n\t\tmessage.customType,\n\t\tmessage.content,\n\t\tmessage.display,\n\t\tmessage.details,\n\t\tcustomMessageExcludesContext(message),\n\t\tundefined,\n\t\tadmitted.stageAdmissionKey,\n\t);\n\tpending.splice(index, 1);\n\treturn true;\n}\n\n/** Retry only hidden reconciliation persistence; never queue another alias. */\nexport async function retryConsumedProtectedStreamingCustomMessages(session: AgentSession): Promise<void> {\n\tfor (const entry of [...protectedMessages(session)]) {\n\t\tif (entry.phase !== \"persistence-failed\") continue;\n\t\ttry {\n\t\t\tawait persistProtectedStreamingCustomMessage(session, entry.message);\n\t\t} catch {\n\t\t\t// The visible lifecycle card is already durable. Keep this consumed phase\n\t\t\t// for a later event rather than duplicating either the card or model turn.\n\t\t}\n\t}\n}\n\n/** Flush consumed reconciliations before session state can be discarded. */\nexport async function flushConsumedProtectedStreamingCustomMessages(session: AgentSession): Promise<void> {\n\tfor (const entry of [...protectedMessages(session)]) {\n\t\tif (entry.phase === \"queued\") continue;\n\t\t// Do not swallow the final write failure: callers must keep this session\n\t\t// alive rather than discard the only remaining recovery state.\n\t\tawait persistProtectedStreamingCustomMessage(session, entry.message);\n\t}\n}\n\nfunction removeReference<T>(items: T[], message: T): void {\n\tlet index = items.indexOf(message);\n\twhile (index >= 0) {\n\t\titems.splice(index, 1);\n\t\tindex = items.indexOf(message);\n\t}\n}\n\nfunction removeQueuedProtectedReference(session: AgentSession, message: CustomMessage): void {\n\tconst hold = session._activeInterruptQueueHold;\n\tif (hold !== undefined) {\n\t\tremoveReference(hold.steering, message);\n\t\tremoveReference(hold.followUp, message);\n\t}\n\tconst queues = session._drainQueuedAgentMessages();\n\tsession._restoreQueuedAgentMessages({\n\t\tsteering: queues.steering.filter((candidate) => candidate !== message),\n\t\tfollowUp: queues.followUp.filter((candidate) => candidate !== message),\n\t});\n}\n\nfunction isPausedHeldProtectedReference(session: AgentSession, message: CustomMessage): boolean {\n\tconst hold = session._activeInterruptQueueHold;\n\treturn (\n\t\tsession._queuedMessagesPaused &&\n\t\thold !== undefined &&\n\t\t(hold.steering.includes(message) || hold.followUp.includes(message))\n\t);\n}\n\n/**\n * Persist only reconciliation input already sealed inside an accepted pause\n * hold. Other queued input can still race an active protocol turn and must keep\n * the historical fail-closed disposal behavior.\n */\nexport async function prepareProtectedStreamingCustomMessagesForDisposal(session: AgentSession): Promise<void> {\n\tconst pending = protectedMessages(session);\n\tconst queued = pending.filter((entry) => entry.phase === \"queued\");\n\tif (queued.some((entry) => !isPausedHeldProtectedReference(session, entry.message))) {\n\t\tthrow new Error(\"Cannot dispose a session with a queued protected reconciliation\");\n\t}\n\tfor (const entry of queued) {\n\t\tconst admitted = entry.message as StageAdmittedCustomMessage;\n\t\tawait session.sessionManager.appendCustomMessageEntry(\n\t\t\tentry.message.customType,\n\t\t\tentry.message.content,\n\t\t\tentry.message.display,\n\t\t\tentry.message.details,\n\t\t\tcustomMessageExcludesContext(entry.message),\n\t\t\tundefined,\n\t\t\tadmitted.stageAdmissionKey,\n\t\t);\n\t\tremoveQueuedProtectedReference(session, entry.message);\n\t\tconst index = pending.indexOf(entry);\n\t\tif (index >= 0) pending.splice(index, 1);\n\t}\n\tawait flushConsumedProtectedStreamingCustomMessages(session);\n}\n\n/** Restore only protected references actually removed from native queues/hold. */\nexport function restoreProtectedStreamingCustomMessages(session: AgentSession, removed: DrainedAgentQueues): void {\n\tconst removedReferences = new Set([...removed.steering, ...removed.followUp]);\n\tfor (const entry of protectedMessages(session)) {\n\t\tif (entry.phase === \"queued\" && removedReferences.has(entry.message)) {\n\t\t\tsession._queueAgentMessage(entry.message, entry.delivery);\n\t\t}\n\t}\n}\n\n/** Move protection only for message references that transfer with native queues. */\nexport function transferProtectedStreamingCustomMessages(\n\tsource: AgentSession,\n\ttarget: AgentSession,\n\ttransferred: DrainedAgentQueues,\n): void {\n\tconst transferredReferences = new Set([...transferred.steering, ...transferred.followUp]);\n\tconst retained: ProtectedStreamingCustomMessage[] = [];\n\tconst moved: ProtectedStreamingCustomMessage[] = [];\n\tfor (const entry of protectedMessages(source)) {\n\t\tif (entry.phase === \"queued\" && transferredReferences.has(entry.message)) moved.push(entry);\n\t\telse retained.push(entry);\n\t}\n\tsource._protectedStreamingCustomMessages = retained;\n\tprotectedMessages(target).unshift(...moved);\n}\n"]}
1
+ {"version":3,"file":"agent-session-persistent-custom-messages.js","sourceRoot":"","sources":["../../src/core/agent-session-persistent-custom-messages.ts"],"names":[],"mappings":"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","sourcesContent":["import { resolveWorkflowStageDeliveryTarget } from \"./agent-session-delivery-forwarding.ts\";\nimport type { AgentSessionInternalSurface as AgentSession } from \"./agent-session-methods.ts\";\nimport type { DrainedAgentQueues } from \"./agent-session-types.js\";\nimport { customMessageExcludesContext } from \"./agent-session-types.js\";\nimport type { PendingRecoveryDelivery } from \"./extensions/index.js\";\nimport type { CustomMessage, StageAdmittedCustomMessage } from \"./messages.ts\";\n\ntype ProtectedDelivery = \"steer\" | \"followUp\";\ntype ProtectedPhase = \"queued\" | \"consumed-unpersisted\" | \"persistence-failed\";\n\nexport const PROTECTED_RECONCILIATION_CUSTOM_TYPE = \"atomic:protected-streaming-reconciliation\";\n\ninterface ProtectedReconciliationDetails {\n\tprotectedReconciliationOf: string;\n\t/** Set when resume recovery declined to replay the card to the model. */\n\trecovery?: \"dropped\";\n}\n\nexport interface ProtectedStreamingCustomMessage {\n\tmessage: CustomMessage;\n\tdelivery: ProtectedDelivery;\n\tphase: ProtectedPhase;\n}\n\nfunction protectedMessages(session: AgentSession): ProtectedStreamingCustomMessage[] {\n\tsession._protectedStreamingCustomMessages ??= [];\n\treturn session._protectedStreamingCustomMessages;\n}\n\nasync function appendDurableDisplayCard(\n\tsession: AgentSession,\n\tmessage: CustomMessage,\n\tdelivery: ProtectedDelivery,\n): Promise<{ readonly card: CustomMessage & { excludeFromContext: true }; readonly intentEntryId: string }> {\n\tconst card = { ...message, excludeFromContext: true } satisfies CustomMessage & { excludeFromContext: true };\n\tconst admitted = message as StageAdmittedCustomMessage;\n\t// A retry after a failed flush must complete the already-appended occurrence\n\t// rather than append a second visible card for the same stable key.\n\tconst partial =\n\t\tadmitted.stageAdmissionKey === undefined\n\t\t\t? undefined\n\t\t\t: session.sessionManager\n\t\t\t\t\t.getBranch()\n\t\t\t\t\t.find(\n\t\t\t\t\t\t(entry) =>\n\t\t\t\t\t\t\tentry.type === \"custom_message\" &&\n\t\t\t\t\t\t\tentry.stageAdmissionKey === admitted.stageAdmissionKey &&\n\t\t\t\t\t\t\tprotectedDelivery(entry.protectedReconciliation) !== undefined,\n\t\t\t\t\t);\n\t// The card and recovery marker share one append, so either both survive a\n\t// process exit or neither does.\n\tconst intentEntryId =\n\t\tpartial?.id ??\n\t\t(await session.sessionManager.appendCustomMessageEntry(\n\t\t\tcard.customType,\n\t\t\tcard.content,\n\t\t\tcard.display,\n\t\t\tcard.details,\n\t\t\ttrue,\n\t\t\t{ delivery },\n\t\t\tadmitted.stageAdmissionKey,\n\t\t));\n\tsession._entryIdsByMessage.set(card, intentEntryId);\n\tsession._refreshFinalizedContext();\n\treturn { card, intentEntryId };\n}\n\nfunction emitDurableDisplayCard(session: AgentSession, card: CustomMessage): void {\n\t// The card is already live and file-backed, and its protected reconciliation\n\t// is registered. Public listeners remain fallible, but their errors cannot\n\t// revoke admission or make the producer retry this committed occurrence.\n\ttry {\n\t\tsession._emit({ type: \"message_start\", message: card });\n\t} catch {}\n\ttry {\n\t\tsession._emit({ type: \"message_end\", message: card });\n\t} catch {}\n}\n\nfunction createProtectedReconciliation(message: CustomMessage, intentEntryId: string): CustomMessage {\n\treturn {\n\t\trole: \"custom\",\n\t\tcustomType: PROTECTED_RECONCILIATION_CUSTOM_TYPE,\n\t\tcontent: message.content,\n\t\tdisplay: false,\n\t\tdetails: { protectedReconciliationOf: intentEntryId } satisfies ProtectedReconciliationDetails,\n\t\ttimestamp: message.timestamp,\n\t};\n}\n\nfunction completedReconciliationIntent(details: unknown): string | undefined {\n\tif (details === null || typeof details !== \"object\") return undefined;\n\tconst intent = (details as { protectedReconciliationOf?: unknown }).protectedReconciliationOf;\n\treturn typeof intent === \"string\" ? intent : undefined;\n}\n\nfunction protectedDelivery(marker: unknown): ProtectedDelivery | undefined {\n\tif (marker === null || typeof marker !== \"object\") return undefined;\n\tconst delivery = (marker as { delivery?: unknown }).delivery;\n\treturn delivery === \"steer\" || delivery === \"followUp\" ? delivery : undefined;\n}\n\n/** Durable card intents with neither a persisted hidden completion nor a scheduled one. */\nexport function pendingProtectedStreamingCustomMessages(session: AgentSession): PendingRecoveryDelivery[] {\n\tconst branch = session.sessionManager.getBranch();\n\tconst completed = new Set(\n\t\tbranch.flatMap((entry) =>\n\t\t\tentry.type === \"custom_message\" && entry.customType === PROTECTED_RECONCILIATION_CUSTOM_TYPE\n\t\t\t\t? [completedReconciliationIntent(entry.details)].filter((intent): intent is string => intent !== undefined)\n\t\t\t\t: [],\n\t\t),\n\t);\n\tconst scheduled = new Set(\n\t\tprotectedMessages(session).flatMap((entry) => {\n\t\t\tconst intent = completedReconciliationIntent(entry.message.details);\n\t\t\treturn intent === undefined ? [] : [intent];\n\t\t}),\n\t);\n\tconst pending: PendingRecoveryDelivery[] = [];\n\tfor (const entry of branch) {\n\t\tif (entry.type !== \"custom_message\") continue;\n\t\tconst delivery = protectedDelivery(entry.protectedReconciliation);\n\t\tif (delivery === undefined || completed.has(entry.id) || scheduled.has(entry.id)) continue;\n\t\tpending.push({\n\t\t\tentryId: entry.id,\n\t\t\tcustomType: entry.customType,\n\t\t\tcontent: entry.content,\n\t\t\tdetails: entry.details,\n\t\t\ttimestamp: entry.timestamp,\n\t\t\t...(entry.stageAdmissionKey === undefined ? {} : { stageAdmissionKey: entry.stageAdmissionKey }),\n\t\t\tdelivery,\n\t\t});\n\t}\n\treturn pending;\n}\n\n/** Requeue the hidden model-facing turn of each recovered durable card. */\nexport function recoverProtectedStreamingCustomMessages(\n\tsession: AgentSession,\n\tpending: readonly PendingRecoveryDelivery[],\n): number {\n\tfor (const entry of pending) {\n\t\tconst parsedTimestamp = Date.parse(entry.timestamp);\n\t\tconst reconciliation: CustomMessage = {\n\t\t\trole: \"custom\",\n\t\t\tcustomType: PROTECTED_RECONCILIATION_CUSTOM_TYPE,\n\t\t\tcontent: entry.content,\n\t\t\tdisplay: false,\n\t\t\tdetails: { protectedReconciliationOf: entry.entryId } satisfies ProtectedReconciliationDetails,\n\t\t\ttimestamp: Number.isFinite(parsedTimestamp) ? parsedTimestamp : Date.now(),\n\t\t};\n\t\tprotectedMessages(session).push({ message: reconciliation, delivery: entry.delivery, phase: \"queued\" });\n\t\tsession._queueAgentMessage(reconciliation, entry.delivery);\n\t}\n\treturn pending.length;\n}\n\n/** Close a recovered card without a model turn, so later resumes never offer it again. */\nexport async function dismissProtectedStreamingCustomMessage(\n\tsession: AgentSession,\n\tpending: PendingRecoveryDelivery,\n): Promise<void> {\n\tawait session.sessionManager.appendCustomMessageEntry(\n\t\tPROTECTED_RECONCILIATION_CUSTOM_TYPE,\n\t\tpending.content,\n\t\tfalse,\n\t\t{ protectedReconciliationOf: pending.entryId, recovery: \"dropped\" } satisfies ProtectedReconciliationDetails,\n\t\ttrue,\n\t);\n}\n\ninterface ProtectedAdmission {\n\towner: AgentSession;\n\tcards: CustomMessage[];\n\treconciliations: CustomMessage[];\n}\n\nasync function prepareProtectedAdmission(\n\tsession: AgentSession,\n\tmessages: CustomMessage[],\n\tdelivery: ProtectedDelivery,\n): Promise<ProtectedAdmission> {\n\t// While the initiating workflow tool is still executing, its assistant call\n\t// may be ahead of SessionManager's async event writer. Wait only in that\n\t// protocol-sensitive phase; at ordinary turn boundaries the hidden steer must\n\t// be queued synchronously so agent-core's next native poll observes it.\n\tif (session.agent.state.pendingToolCalls.size > 0) await session._agentEventQueue;\n\tconst owner = resolveWorkflowStageDeliveryTarget(session);\n\tconst prepared = [];\n\tfor (const message of messages) {\n\t\tconst { card, intentEntryId } = await appendDurableDisplayCard(owner, message, delivery);\n\t\tprepared.push({ card, reconciliation: createProtectedReconciliation(message, intentEntryId) });\n\t}\n\tconst cards = prepared.map((entry) => entry.card);\n\tconst reconciliations = prepared.map((entry) => entry.reconciliation);\n\tprotectedMessages(owner).push(\n\t\t...reconciliations.map((message) => ({ message, delivery, phase: \"queued\" as const })),\n\t);\n\treturn { owner, cards, reconciliations };\n}\n\nfunction emitProtectedAdmission(admission: ProtectedAdmission): AgentSession {\n\tlet owner = admission.owner;\n\tfor (const card of admission.cards) {\n\t\towner = resolveWorkflowStageDeliveryTarget(owner);\n\t\temitDurableDisplayCard(owner, card);\n\t}\n\treturn resolveWorkflowStageDeliveryTarget(owner);\n}\n\n/** Persist one visible card and register its hidden model-facing turn. */\nexport async function admitProtectedStreamingCustomMessage(\n\tsession: AgentSession,\n\tmessage: CustomMessage,\n\tdelivery: ProtectedDelivery,\n): Promise<CustomMessage> {\n\tconst admission = await prepareProtectedAdmission(session, [message], delivery);\n\temitProtectedAdmission(admission);\n\treturn admission.reconciliations[0]!;\n}\n\n/** Queue one hidden turn before public listeners can transfer its ownership. */\nexport async function queueProtectedStreamingCustomMessage(\n\tsession: AgentSession,\n\tmessage: CustomMessage,\n\tdelivery: ProtectedDelivery,\n\tpriority = false,\n): Promise<void> {\n\tconst admission = await prepareProtectedAdmission(session, [message], delivery);\n\tadmission.owner._queueAgentMessage(admission.reconciliations[0]!, priority ? \"interrupt\" : delivery);\n\temitProtectedAdmission(admission);\n}\n\n/** Queue a whole hidden batch before public listeners can transfer ownership. */\nexport async function queueProtectedStreamingCustomMessages(\n\tsession: AgentSession,\n\tmessages: CustomMessage[],\n\tdelivery: ProtectedDelivery,\n): Promise<void> {\n\tconst admission = await prepareProtectedAdmission(session, messages, delivery);\n\tfor (const reconciliation of admission.reconciliations) {\n\t\tadmission.owner._queueAgentMessage(reconciliation, delivery);\n\t}\n\temitProtectedAdmission(admission);\n}\n\n/** Start or queue an idle protected batch before exposing its display cards. */\nexport async function triggerProtectedStreamingCustomMessages(\n\tsession: AgentSession,\n\tmessages: CustomMessage[],\n\tdelivery: ProtectedDelivery,\n): Promise<void> {\n\tconst admission = await prepareProtectedAdmission(session, messages, delivery);\n\tfor (const reconciliation of admission.reconciliations) {\n\t\tadmission.owner._queueAgentMessage(reconciliation, delivery);\n\t}\n\tconst owner = emitProtectedAdmission(admission);\n\tif (owner.isStreaming || owner._isPreparingRun || owner._queuedMessagesPaused) return;\n\tfor (const reconciliation of admission.reconciliations) {\n\t\tremoveQueuedProtectedReference(owner, reconciliation);\n\t}\n\tconst turn = owner._runAgentPrompt(admission.reconciliations);\n\tvoid turn.catch(() => {});\n}\n\n/** Record that agent-core drained and consumed the hidden reconciliation. */\nexport function markProtectedStreamingCustomMessageConsumed(session: AgentSession, message: CustomMessage): boolean {\n\tconst entry = protectedMessages(session).find((candidate) => candidate.message === message);\n\tif (!entry) return false;\n\tentry.phase = \"consumed-unpersisted\";\n\treturn true;\n}\n\nexport function markProtectedStreamingCustomMessagePersistenceFailed(\n\tsession: AgentSession,\n\tmessage: CustomMessage,\n): void {\n\tconst entry = protectedMessages(session).find((candidate) => candidate.message === message);\n\tif (entry?.phase === \"consumed-unpersisted\") entry.phase = \"persistence-failed\";\n}\n\n/**\n * Whether a durable card of this custom type is admitted but its hidden turn is still queued, so the model has not\n * read it yet. Clearing the queue restores protected turns, so a queued entry ends only when it is consumed.\n */\nexport function hasUnreadProtectedCustomMessage(session: AgentSession, customType: string): boolean {\n\tconst owner = resolveWorkflowStageDeliveryTarget(session);\n\treturn protectedMessages(owner).some((entry) => {\n\t\tif (entry.phase !== \"queued\") return false;\n\t\tconst intent = completedReconciliationIntent(entry.message.details);\n\t\tif (intent === undefined) return false;\n\t\tconst card = owner.sessionManager.getEntry(intent);\n\t\treturn card?.type === \"custom_message\" && card.customType === customType;\n\t});\n}\n\nexport function isProtectedStreamingCustomMessage(session: AgentSession, message: CustomMessage): boolean {\n\treturn protectedMessages(session).some((entry) => entry.message === message);\n}\n\n/**\n * Persist a consumed hidden reconciliation exactly once. Its visible card was\n * already committed at admission, so a transient failure never re-adds a card\n * or re-injects another provider message.\n */\nexport async function persistProtectedStreamingCustomMessage(\n\tsession: AgentSession,\n\tmessage: CustomMessage,\n): Promise<boolean> {\n\tconst pending = protectedMessages(session);\n\tconst index = pending.findIndex((entry) => entry.message === message);\n\tif (index === -1) return false;\n\tconst entry = pending[index];\n\tconst admitted = message as StageAdmittedCustomMessage;\n\tif (entry.phase !== \"consumed-unpersisted\" && entry.phase !== \"persistence-failed\") return true;\n\tawait session.sessionManager.appendCustomMessageEntry(\n\t\tmessage.customType,\n\t\tmessage.content,\n\t\tmessage.display,\n\t\tmessage.details,\n\t\tcustomMessageExcludesContext(message),\n\t\tundefined,\n\t\tadmitted.stageAdmissionKey,\n\t);\n\tpending.splice(index, 1);\n\treturn true;\n}\n\n/** Retry only hidden reconciliation persistence; never queue another alias. */\nexport async function retryConsumedProtectedStreamingCustomMessages(session: AgentSession): Promise<void> {\n\tfor (const entry of [...protectedMessages(session)]) {\n\t\tif (entry.phase !== \"persistence-failed\") continue;\n\t\ttry {\n\t\t\tawait persistProtectedStreamingCustomMessage(session, entry.message);\n\t\t} catch {\n\t\t\t// The visible lifecycle card is already durable. Keep this consumed phase\n\t\t\t// for a later event rather than duplicating either the card or model turn.\n\t\t}\n\t}\n}\n\n/** Flush consumed reconciliations before session state can be discarded. */\nexport async function flushConsumedProtectedStreamingCustomMessages(session: AgentSession): Promise<void> {\n\tfor (const entry of [...protectedMessages(session)]) {\n\t\tif (entry.phase === \"queued\") continue;\n\t\t// Do not swallow the final write failure: callers must keep this session\n\t\t// alive rather than discard the only remaining recovery state.\n\t\tawait persistProtectedStreamingCustomMessage(session, entry.message);\n\t}\n}\n\nfunction removeReference<T>(items: T[], message: T): void {\n\tlet index = items.indexOf(message);\n\twhile (index >= 0) {\n\t\titems.splice(index, 1);\n\t\tindex = items.indexOf(message);\n\t}\n}\n\nfunction removeQueuedProtectedReference(session: AgentSession, message: CustomMessage): void {\n\tconst hold = session._activeInterruptQueueHold;\n\tif (hold !== undefined) {\n\t\tremoveReference(hold.steering, message);\n\t\tremoveReference(hold.followUp, message);\n\t}\n\tconst queues = session._drainQueuedAgentMessages();\n\tsession._restoreQueuedAgentMessages({\n\t\tsteering: queues.steering.filter((candidate) => candidate !== message),\n\t\tfollowUp: queues.followUp.filter((candidate) => candidate !== message),\n\t});\n}\n\nfunction isPausedHeldProtectedReference(session: AgentSession, message: CustomMessage): boolean {\n\tconst hold = session._activeInterruptQueueHold;\n\treturn (\n\t\tsession._queuedMessagesPaused &&\n\t\thold !== undefined &&\n\t\t(hold.steering.includes(message) || hold.followUp.includes(message))\n\t);\n}\n\n/**\n * Persist only reconciliation input already sealed inside an accepted pause\n * hold. Other queued input can still race an active protocol turn and must keep\n * the historical fail-closed disposal behavior.\n */\nexport async function prepareProtectedStreamingCustomMessagesForDisposal(session: AgentSession): Promise<void> {\n\tconst pending = protectedMessages(session);\n\tconst queued = pending.filter((entry) => entry.phase === \"queued\");\n\tif (queued.some((entry) => !isPausedHeldProtectedReference(session, entry.message))) {\n\t\tthrow new Error(\"Cannot dispose a session with a queued protected reconciliation\");\n\t}\n\tfor (const entry of queued) {\n\t\tconst admitted = entry.message as StageAdmittedCustomMessage;\n\t\tawait session.sessionManager.appendCustomMessageEntry(\n\t\t\tentry.message.customType,\n\t\t\tentry.message.content,\n\t\t\tentry.message.display,\n\t\t\tentry.message.details,\n\t\t\tcustomMessageExcludesContext(entry.message),\n\t\t\tundefined,\n\t\t\tadmitted.stageAdmissionKey,\n\t\t);\n\t\tremoveQueuedProtectedReference(session, entry.message);\n\t\tconst index = pending.indexOf(entry);\n\t\tif (index >= 0) pending.splice(index, 1);\n\t}\n\tawait flushConsumedProtectedStreamingCustomMessages(session);\n}\n\n/** Restore only protected references actually removed from native queues/hold. */\nexport function restoreProtectedStreamingCustomMessages(session: AgentSession, removed: DrainedAgentQueues): void {\n\tconst removedReferences = new Set([...removed.steering, ...removed.followUp]);\n\tfor (const entry of protectedMessages(session)) {\n\t\tif (entry.phase === \"queued\" && removedReferences.has(entry.message)) {\n\t\t\tsession._queueAgentMessage(entry.message, entry.delivery);\n\t\t}\n\t}\n}\n\n/** Move protection only for message references that transfer with native queues. */\nexport function transferProtectedStreamingCustomMessages(\n\tsource: AgentSession,\n\ttarget: AgentSession,\n\ttransferred: DrainedAgentQueues,\n): void {\n\tconst transferredReferences = new Set([...transferred.steering, ...transferred.followUp]);\n\tconst retained: ProtectedStreamingCustomMessage[] = [];\n\tconst moved: ProtectedStreamingCustomMessage[] = [];\n\tfor (const entry of protectedMessages(source)) {\n\t\tif (entry.phase === \"queued\" && transferredReferences.has(entry.message)) moved.push(entry);\n\t\telse retained.push(entry);\n\t}\n\tsource._protectedStreamingCustomMessages = retained;\n\tprotectedMessages(target).unshift(...moved);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-tasks.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-tasks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,2BAA2B,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG9F,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAYzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAOzE,oGAAoG;AACpG,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,iBAAiB,CAAC,GAAG,OAAO,CAE9F;AAUD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAMnE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,CAwIlE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,sBAAsB,GAAG,SAAS,CAY3F;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAMzE;AAED,mFAAmF;AACnF,wBAAsB,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAElE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAEpD;AAED,eAAO,MAAM,uBAAuB;;;;;;CAMnC,CAAC"}
1
+ {"version":3,"file":"agent-session-tasks.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-tasks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,2BAA2B,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAI9F,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAazD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAOzE,oGAAoG;AACpG,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,iBAAiB,CAAC,GAAG,OAAO,CAE9F;AAUD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAMnE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,CAyJlE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,sBAAsB,GAAG,SAAS,CAY3F;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAMzE;AAED,mFAAmF;AACnF,wBAAsB,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAElE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAEpD;AAED,eAAO,MAAM,uBAAuB;;;;;;CAMnC,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { randomUUID } from "node:crypto";
2
+ import { hasUnreadProtectedCustomMessage } from "./agent-session-persistent-custom-messages.js";
2
3
  import { getExtensionRuntimeEventBus } from "./extensions/loader-core.js";
3
4
  import { sessionGenerationClosing } from "./session-lifecycle-work.js";
4
5
  import { AgentTaskHost } from "./tasks/agent-adapter.js";
@@ -6,6 +7,7 @@ import { childTaskCompletionRoute } from "./tasks/child-command-owner.js";
6
7
  import { COMMAND_DETAIL_TAIL_BYTES, taskOutputText } from "./tasks/command-output.js";
7
8
  import { formatTaskCompletion, TASK_COMPLETION_MESSAGE_TYPE, TaskCompletionOutbox, taskCompletionNotice, } from "./tasks/completion.js";
8
9
  import { flushTaskCompletionMessages } from "./tasks/completion-ordering.js";
10
+ import { TASK_HEARTBEAT_MESSAGE_TYPE } from "./tasks/heartbeat.js";
9
11
  import { bindOwnerTaskStore, OwnerTaskStore } from "./tasks/owner-store.js";
10
12
  import { taskOwnTranscriptEntries, taskTranscriptSource } from "./tasks/supervisor.js";
11
13
  import { WorkflowStageAdmissionBoundary } from "./workflow-stage-admission.js";
@@ -119,8 +121,26 @@ export function getAgentTaskHost() {
119
121
  }
120
122
  });
121
123
  this._taskCompletionOutbox = outbox;
124
+ const heartbeat = {
125
+ defaultIntervalMs: () => this.settingsManager.getTaskHeartbeatMs(),
126
+ hasUnreadHeartbeat: () => hasUnreadProtectedCustomMessage(this, TASK_HEARTBEAT_MESSAGE_TYPE),
127
+ deliver: async (message) => {
128
+ if (this._disposed || !admission.isOpen())
129
+ throw new Error("Task owner is closed");
130
+ // The workflow heartbeat delivery: a visible card plus a steer that waits for the next safe boundary,
131
+ // never interrupting a response in progress.
132
+ const deliver = () => this.sendCustomMessage(message, { triggerTurn: true, deliverAs: "steer", persistWhenStreaming: true });
133
+ if (stageAdmission)
134
+ await deliver();
135
+ else
136
+ await admission.admit(undefined, deliver, () => {
137
+ throw new Error("Task owner is closed");
138
+ }).completion;
139
+ },
140
+ };
122
141
  const binding = {
123
142
  resourceAdmission: this._resourceAdmission,
143
+ heartbeat,
124
144
  authorizeLaunch: () => {
125
145
  if (this._disposed || sessionGenerationClosing.has(this) || !admission.isOpen())
126
146
  throw new Error("Task owner is closed");
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session-tasks.js","sourceRoot":"","sources":["../../src/core/agent-session-tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAiC,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AACzG,OAAO,EAAE,yBAAyB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACtF,OAAO,EACN,oBAAoB,EACpB,4BAA4B,EAC5B,oBAAoB,EACpB,oBAAoB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAEvF,OAAO,EAAE,8BAA8B,EAAE,MAAM,+BAA+B,CAAC;AAE/E,6EAA6E;AAC7E,6EAA6E;AAC7E,MAAM,sBAAsB,GAAG,IAAI,OAAO,EAAkB,CAAC;AAE7D,oGAAoG;AACpG,MAAM,UAAU,sBAAsB,CAAC,OAA8C;IACpF,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AACnD,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB,CAAC,OAAqB;IAChD,OAAO,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAqB;IAC5D,IAAI,kBAAkB,CAAC,OAAO,CAAC;QAAE,OAAO;IACxC,sBAAsB,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IACnC,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IACnC,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC/B,IAAI,IAAI,CAAC,SAAS,IAAI,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAClG,IAAI,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC,cAAc,CAAC;IACpD,MAAM,cAAc,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,cAAc,IAAI,8BAA8B,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC;IAC7G,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,oBAAoB,CACtC,IAAI,CAAC,cAAc,EACnB,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,EAAE,EAC3C,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;QAC5B,wEAAwE;QACxE,sEAAsE;QACtE,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC;QACjC,MAAM,OAAO,GAAG,IAAI,EAAE,eAAe,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,OAAO,EAAE,EAAE;YACvB,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CACjC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO,CACtF;YACF,CAAC,CAAC,SAAS,CAAC;QACb,IAAI,OAAO,EAAE,EAAE;YAAE,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACzC,0EAA0E;QAC1E,yEAAyE;QACzE,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,MAAM,MAAM,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,MAAM,UAAU,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,wBAAwB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACjF,MAAM,QAAQ,GAAG,UAAU;YAC1B,CAAC,CAAC,UAAU;iBACT,KAAK,EAAE;iBACP,OAAO,EAAE;iBACT,IAAI,CACJ,CAAC,KAAK,EAAE,EAAE,CACT,KAAK,CAAC,IAAI,KAAK,SAAS;gBACxB,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;gBAClC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAClF;YACH,CAAC,CAAC,SAAS,CAAC;QACb,IAAI,MAAM,GACT,QAAQ,EAAE,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;YACpE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO;iBACvB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;iBACxC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;iBAC1B,IAAI,CAAC,IAAI,CAAC;YACb,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS,IAAI,KAAK,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC;YACnD,IAAI,CAAC;gBACJ,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC5C,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzG,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE;oBAC3E,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;oBACpB,YAAY,EAAE,yBAAyB;iBACvC,CAAC,CAAC;gBACH,MAAM,GAAG,IAAI,CAAC,EAAE;oBACf,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;oBAClF,CAAC,CAAC,oBAAoB,CAAC;YACzB,CAAC;YAAC,MAAM,CAAC;gBACR,qEAAqE;gBACrE,MAAM,GAAG,oBAAoB,CAAC;YAC/B,CAAC;QACF,CAAC;QACD,MAAM,OAAO,GAAG;YACf,UAAU,EAAE,4BAA4B;YACxC,OAAO,EAAE,oBAAoB,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC;YACrD,OAAO,EAAE,EAAE,GAAG,QAAQ,EAAE,YAAY,EAAE,oBAAoB,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE;YACpF,OAAO,EAAE,IAAa;SACtB,CAAC;QACF,MAAM,UAAU,GACf,IAAI,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAChG,IAAI,UAAU,EAAE,CAAC;YAChB,IAAI,CAAC;gBACJ,MAAM,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAClC,OAAO;YACR,CAAC;YAAC,MAAM,CAAC;gBACR,oFAAoF;YACrF,CAAC;QACF,CAAC;QACD,MAAM,gBAAgB,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;QACxF,IAAI,gBAAgB,EAAE,CAAC;YACtB,MAAM,2BAA2B,CAChC,2BAA2B,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,EACzE,gBAAgB,EAChB,QAAQ,CAAC,YAAY,CACrB,CAAC;QACH,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,EAAE,CACpB,IAAI,CAAC,iBAAiB,CACrB,OAAO,EACP,QAAQ;YACP,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,iBAAiB,EAAE,QAAQ,CAAC,YAAY,EAAE;YAClE,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,CAAC,YAAY,EAAE,CAC9F,CAAC;QACH,IAAI,cAAc;YAAE,MAAM,OAAO,EAAE,CAAC;aAC/B,CAAC;YACL,MAAM,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,EAAE,GAAG,EAAE;gBAC1D,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC,UAAU,CAAC;QACf,CAAC;IACF,CAAC,CACD,CAAC;IACF,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC;IACpC,MAAM,OAAO,GAAG;QACf,iBAAiB,EAAE,IAAI,CAAC,kBAAkB;QAC1C,eAAe,EAAE,GAAG,EAAE;YACrB,IAAI,IAAI,CAAC,SAAS,IAAI,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;gBAC9E,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACzC,IAAI,sBAAsB,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC7G,CAAC;QACD,aAAa,EAAE,CACd,GAAG,CAAC,GAAG,EAAE,OAAO,CAA4F,EAC3G,EAAE;YACH,8GAA8G;YAC9G,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,eAAe,EAAE,CAAC;YACvD,MAAM,IAAI,GAAG,OAAO,EAAE,EAAE;gBACvB,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI;gBACvF,CAAC,CAAC,SAAS,CAAC;YACb,IAAI,OAAO,EAAE,EAAE;gBAAE,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YAC1C,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;KACD,CAAC;IACF,IAAI,CAAC,cAAc,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,sBAAsB,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IACzG,IAAI,CAAC,cAAc,GAAG,cAAc;QACnC,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,OAAO,CAAC;QAC3C,CAAC,CAAC,IAAI,aAAa,CAAC;YAClB,GAAG,OAAO;YACV,KAAK,EAAE;gBACN,IAAI,EAAE,SAAS;gBACf,SAAS,EAAE,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAE;aAC5C;SACD,CAAC,CAAC;IACL,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;IAC/D,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;IAClC,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5D,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAChC,OAAO,IAAI,CAAC,cAAc,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IACnC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,YAAY,CAAC;IAC/E,IAAI,CAAC,IAAI,CAAC,uBAAuB,IAAI,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IACtE,MAAM,KAAK,GAA6B;QACvC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,eAAe,EAAE,gBAAgB,EAAE,MAAM,EAAE,KAAK,IAAI;QAC1F,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC;YACzD,IAAI,CAAC,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC7E,MAAM,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/G,CAAC;KACD,CAAC;IACF,OAAO,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AAC3G,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACtC,uFAAuF;IACvF,IAAI,kBAAkB,CAAC,IAAI,CAAC;QAAE,OAAO;IACrC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;IACjE,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AAC5F,CAAC;AAED,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,UAAU;IAC/B,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,UAAU,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,WAAW;IAC1B,IAAI,CAAC,cAAc,EAAE,WAAW,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACtC,gBAAgB;IAChB,oBAAoB;IACpB,iBAAiB;IACjB,UAAU;IACV,WAAW;CACX,CAAC","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport type { AgentSessionInternalSurface as AgentSession } from \"./agent-session-methods.ts\";\nimport { getExtensionRuntimeEventBus } from \"./extensions/loader-core.js\";\nimport { sessionGenerationClosing } from \"./session-lifecycle-work.ts\";\nimport { AgentTaskHost } from \"./tasks/agent-adapter.js\";\nimport { type ChildTaskCompletionRoute, childTaskCompletionRoute } from \"./tasks/child-command-owner.js\";\nimport { COMMAND_DETAIL_TAIL_BYTES, taskOutputText } from \"./tasks/command-output.js\";\nimport {\n\tformatTaskCompletion,\n\tTASK_COMPLETION_MESSAGE_TYPE,\n\tTaskCompletionOutbox,\n\ttaskCompletionNotice,\n} from \"./tasks/completion.js\";\nimport { flushTaskCompletionMessages } from \"./tasks/completion-ordering.js\";\nimport { bindOwnerTaskStore, OwnerTaskStore } from \"./tasks/owner-store.js\";\nimport { taskOwnTranscriptEntries, taskTranscriptSource } from \"./tasks/supervisor.js\";\nimport type { SupervisedCommandOwner } from \"./tools/bash-pty-native.js\";\nimport { WorkflowStageAdmissionBoundary } from \"./workflow-stage-admission.ts\";\n\n// Native owners identify live generations, never borrowed persisted storage.\n// Explicit workflow-stage owners remain borrowed across session replacement.\nconst replacementOwnerScopes = new WeakMap<object, string>();\n\n/** An admitted in-process subagent child; top-level sessions may carry a policy without `depth`. */\nexport function isSubagentChildSession(session: Pick<AgentSession, \"_subagentPolicy\">): boolean {\n\treturn (session._subagentPolicy?.depth ?? 0) >= 1;\n}\n\n/**\n * A child launched from a workflow stage inherits the stage's admission boundary for\n * message delivery, but must never bind or rebind the stage's own task owner.\n */\nfunction stageTaskAdmission(session: AgentSession) {\n\treturn isSubagentChildSession(session) ? undefined : session._workflowStageAdmission;\n}\n\nexport function replaceSessionTaskOwner(session: AgentSession): void {\n\tif (stageTaskAdmission(session)) return;\n\treplacementOwnerScopes.set(session, randomUUID());\n\tsession._agentTaskHost = undefined;\n\tsession._taskAdmission = undefined;\n\tsession._taskCompletionOutbox = undefined;\n}\n\nexport function getAgentTaskHost(this: AgentSession): AgentTaskHost {\n\tif (this._disposed || sessionGenerationClosing.has(this)) throw new Error(\"Task owner is closed\");\n\tif (this._agentTaskHost) return this._agentTaskHost;\n\tconst stageAdmission = stageTaskAdmission(this);\n\tconst admission = stageAdmission ?? WorkflowStageAdmissionBoundary.restore(this.sessionManager.getEntries());\n\tthis._taskAdmission = admission;\n\tconst outbox = new TaskCompletionOutbox(\n\t\tthis.sessionManager,\n\t\t() => !this._disposed && admission.isOpen(),\n\t\tasync (envelope, restored) => {\n\t\t\t// Settlement can precede the UI projection's next drain. Read the owner\n\t\t\t// snapshot, not the display store, when attaching completion context.\n\t\t\tconst host = this._agentTaskHost;\n\t\t\tconst watched = host?.watchOwnerTasks();\n\t\t\tconst task = watched?.ok\n\t\t\t\t? watched.value.snapshot.tasks.find(\n\t\t\t\t\t\t(item) => item.ref.taskId === envelope.taskId && item.ref.ownerId === envelope.ownerId,\n\t\t\t\t\t)\n\t\t\t\t: undefined;\n\t\t\tif (watched?.ok) watched.value.dispose();\n\t\t\t// Foreground shell results already return through their tool call. Do not\n\t\t\t// create a second model turn or background card for that same execution.\n\t\t\tif (task?.kind === \"command\" && !task.wasBackground) return;\n\t\t\tconst lease = task ? host?.resolveTask(envelope.taskId) : undefined;\n\t\t\tconst source = lease?.ok ? taskTranscriptSource(lease.value) : undefined;\n\t\t\tconst ownEntries = lease?.ok ? taskOwnTranscriptEntries(lease.value) : undefined;\n\t\t\tconst response = ownEntries\n\t\t\t\t? ownEntries\n\t\t\t\t\t\t.slice()\n\t\t\t\t\t\t.reverse()\n\t\t\t\t\t\t.find(\n\t\t\t\t\t\t\t(entry) =>\n\t\t\t\t\t\t\t\tentry.type === \"message\" &&\n\t\t\t\t\t\t\t\tentry.message.role === \"assistant\" &&\n\t\t\t\t\t\t\t\tentry.message.content.some((block) => block.type === \"text\" && block.text.trim()),\n\t\t\t\t\t\t)\n\t\t\t\t: undefined;\n\t\t\tlet output =\n\t\t\t\tresponse?.type === \"message\" && response.message.role === \"assistant\"\n\t\t\t\t\t? response.message.content\n\t\t\t\t\t\t\t.filter((block) => block.type === \"text\")\n\t\t\t\t\t\t\t.map((block) => block.text)\n\t\t\t\t\t\t\t.join(\"\\n\")\n\t\t\t\t\t: undefined;\n\t\t\tif (task?.kind === \"command\" && lease?.ok && host) {\n\t\t\t\ttry {\n\t\t\t\t\tconst bytes = BigInt(task.output.byteCount);\n\t\t\t\t\tconst start = bytes > BigInt(COMMAND_DETAIL_TAIL_BYTES) ? bytes - BigInt(COMMAND_DETAIL_TAIL_BYTES) : 0n;\n\t\t\t\t\tconst page = await host.ownerBinding.supervisor.readTaskOutput(lease.value, {\n\t\t\t\t\t\tstart: String(start),\n\t\t\t\t\t\tmaximumBytes: COMMAND_DETAIL_TAIL_BYTES,\n\t\t\t\t\t});\n\t\t\t\t\toutput = page.ok\n\t\t\t\t\t\t? `${start > 0n ? \"[Earlier output omitted]\\n\" : \"\"}${taskOutputText(page.value)}`\n\t\t\t\t\t\t: \"Output unavailable\";\n\t\t\t\t} catch {\n\t\t\t\t\t// Missing retained output must not suppress a terminal notification.\n\t\t\t\t\toutput = \"Output unavailable\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst message = {\n\t\t\t\tcustomType: TASK_COMPLETION_MESSAGE_TYPE,\n\t\t\t\tcontent: formatTaskCompletion(envelope, task, output),\n\t\t\t\tdetails: { ...envelope, notification: taskCompletionNotice(envelope, task, output) },\n\t\t\t\tdisplay: true as const,\n\t\t\t};\n\t\t\tconst childRoute =\n\t\t\t\thost && task?.kind === \"command\" ? childTaskCompletionRoute(host, envelope.taskId) : undefined;\n\t\t\tif (childRoute) {\n\t\t\t\ttry {\n\t\t\t\t\tawait childRoute.deliver(message);\n\t\t\t\t\treturn;\n\t\t\t\t} catch {\n\t\t\t\t\t// The launching child ended before delivery; the owning parent receives the notice.\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst completionSource = source?.ok ? source.value.session.completionSource : undefined;\n\t\t\tif (completionSource) {\n\t\t\t\tawait flushTaskCompletionMessages(\n\t\t\t\t\tgetExtensionRuntimeEventBus(this._resourceLoader.getExtensions().runtime),\n\t\t\t\t\tcompletionSource,\n\t\t\t\t\tenvelope.completionId,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst deliver = () =>\n\t\t\t\tthis.sendCustomMessage(\n\t\t\t\t\tmessage,\n\t\t\t\t\trestored\n\t\t\t\t\t\t? { triggerTurn: false, stageAdmissionKey: envelope.completionId }\n\t\t\t\t\t\t: { triggerTurn: true, persistWhenStreaming: true, stageAdmissionKey: envelope.completionId },\n\t\t\t\t);\n\t\t\tif (stageAdmission) await deliver();\n\t\t\telse {\n\t\t\t\tawait admission.admit(envelope.completionId, deliver, () => {\n\t\t\t\t\tthrow new Error(\"Task owner is closed\");\n\t\t\t\t}).completion;\n\t\t\t}\n\t\t},\n\t);\n\tthis._taskCompletionOutbox = outbox;\n\tconst binding = {\n\t\tresourceAdmission: this._resourceAdmission,\n\t\tauthorizeLaunch: () => {\n\t\t\tif (this._disposed || sessionGenerationClosing.has(this) || !admission.isOpen())\n\t\t\t\tthrow new Error(\"Task owner is closed\");\n\t\t\tif (isSubagentChildSession(this)) throw new Error(\"Subagent delegation is not available inside a subagent\");\n\t\t},\n\t\tonTaskSettled: (\n\t\t\t...[ref, receipt]: Parameters<NonNullable<import(\"./tasks/supervisor.js\").TrustedTaskHost[\"onTaskSettled\"]>>\n\t\t) => {\n\t\t\t// Save the task's kind with the intent: a notice replayed after a restart has no task record to read it from.\n\t\t\tconst watched = this._agentTaskHost?.watchOwnerTasks();\n\t\t\tconst kind = watched?.ok\n\t\t\t\t? watched.value.snapshot.tasks.find((task) => task.ref.taskId === receipt.taskId)?.kind\n\t\t\t\t: undefined;\n\t\t\tif (watched?.ok) watched.value.dispose();\n\t\t\toutbox.record(ref.ownerId, receipt, kind);\n\t\t\tvoid outbox.flush();\n\t\t},\n\t};\n\tif (!stageAdmission && !replacementOwnerScopes.has(this)) replacementOwnerScopes.set(this, randomUUID());\n\tthis._agentTaskHost = stageAdmission\n\t\t? stageAdmission.bindAgentTaskHost(binding)\n\t\t: new AgentTaskHost({\n\t\t\t\t...binding,\n\t\t\t\tscope: {\n\t\t\t\t\tkind: \"session\",\n\t\t\t\t\tsessionId: replacementOwnerScopes.get(this)!,\n\t\t\t\t},\n\t\t\t});\n\tconst { supervisor, owner } = this._agentTaskHost.ownerBinding;\n\tconst store = new OwnerTaskStore(supervisor, owner);\n\tconst connected = store.connect();\n\tif (!connected.ok) throw new Error(connected.error.message);\n\tbindOwnerTaskStore(this, store);\n\treturn this._agentTaskHost;\n}\n\n/**\n * Shell task owner for this session. A subagent child runs shells in its parent's owner,\n * so they appear in the parent's `/tasks` and outlive the child.\n */\nexport function _getCommandTaskOwner(this: AgentSession): SupervisedCommandOwner | undefined {\n\tif (!isSubagentChildSession(this)) return this.getAgentTaskHost().ownerBinding;\n\tif (!this._parentCommandTaskOwner || this._disposed) return undefined;\n\tconst route: ChildTaskCompletionRoute = {\n\t\tisOpen: () => !this._disposed && this._subagentPolicy?.messageAdmission?.isOpen() === true,\n\t\tdeliver: async (message) => {\n\t\t\tconst admission = this._subagentPolicy?.messageAdmission;\n\t\t\tif (!admission) throw new Error(\"Subagent execution cannot accept messages\");\n\t\t\tawait admission.run(() => this.sendCustomMessage(message, { triggerTurn: true, persistWhenStreaming: true }));\n\t\t},\n\t};\n\treturn this._parentCommandTaskOwner.bind(this.sessionManager.getSessionId(), route, this._childTaskWaits);\n}\n\nexport async function closeSessionTasks(this: AgentSession): Promise<void> {\n\t// Replacement stage sessions share generation lifetime; disposal is not stage closure.\n\tif (stageTaskAdmission(this)) return;\n\tthis._taskAdmission?.seal();\n\tconst closed = await this._agentTaskHost?.close(\"session-close\");\n\tif (closed && !closed.ok) throw new Error(`${closed.error.code}: ${closed.error.message}`);\n}\n\n/** Workflow controller only: main-chat message pause does not stop owned tasks. */\nexport async function pauseTasks(this: AgentSession): Promise<void> {\n\tawait this.getAgentTaskHost().pauseTasks();\n}\n\nexport function resumeTasks(this: AgentSession): void {\n\tthis._agentTaskHost?.resumeTasks();\n}\n\nexport const agentSessionTaskMethods = {\n\tgetAgentTaskHost,\n\t_getCommandTaskOwner,\n\tcloseSessionTasks,\n\tpauseTasks,\n\tresumeTasks,\n};\n"]}
1
+ {"version":3,"file":"agent-session-tasks.js","sourceRoot":"","sources":["../../src/core/agent-session-tasks.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport type { AgentSessionInternalSurface as AgentSession } from \"./agent-session-methods.ts\";\nimport { hasUnreadProtectedCustomMessage } from \"./agent-session-persistent-custom-messages.ts\";\nimport { getExtensionRuntimeEventBus } from \"./extensions/loader-core.js\";\nimport { sessionGenerationClosing } from \"./session-lifecycle-work.ts\";\nimport { AgentTaskHost } from \"./tasks/agent-adapter.js\";\nimport { type ChildTaskCompletionRoute, childTaskCompletionRoute } from \"./tasks/child-command-owner.js\";\nimport { COMMAND_DETAIL_TAIL_BYTES, taskOutputText } from \"./tasks/command-output.js\";\nimport {\n\tformatTaskCompletion,\n\tTASK_COMPLETION_MESSAGE_TYPE,\n\tTaskCompletionOutbox,\n\ttaskCompletionNotice,\n} from \"./tasks/completion.js\";\nimport { flushTaskCompletionMessages } from \"./tasks/completion-ordering.js\";\nimport { TASK_HEARTBEAT_MESSAGE_TYPE, type TaskHeartbeatDelivery } from \"./tasks/heartbeat.js\";\nimport { bindOwnerTaskStore, OwnerTaskStore } from \"./tasks/owner-store.js\";\nimport { taskOwnTranscriptEntries, taskTranscriptSource } from \"./tasks/supervisor.js\";\nimport type { SupervisedCommandOwner } from \"./tools/bash-pty-native.js\";\nimport { WorkflowStageAdmissionBoundary } from \"./workflow-stage-admission.ts\";\n\n// Native owners identify live generations, never borrowed persisted storage.\n// Explicit workflow-stage owners remain borrowed across session replacement.\nconst replacementOwnerScopes = new WeakMap<object, string>();\n\n/** An admitted in-process subagent child; top-level sessions may carry a policy without `depth`. */\nexport function isSubagentChildSession(session: Pick<AgentSession, \"_subagentPolicy\">): boolean {\n\treturn (session._subagentPolicy?.depth ?? 0) >= 1;\n}\n\n/**\n * A child launched from a workflow stage inherits the stage's admission boundary for\n * message delivery, but must never bind or rebind the stage's own task owner.\n */\nfunction stageTaskAdmission(session: AgentSession) {\n\treturn isSubagentChildSession(session) ? undefined : session._workflowStageAdmission;\n}\n\nexport function replaceSessionTaskOwner(session: AgentSession): void {\n\tif (stageTaskAdmission(session)) return;\n\treplacementOwnerScopes.set(session, randomUUID());\n\tsession._agentTaskHost = undefined;\n\tsession._taskAdmission = undefined;\n\tsession._taskCompletionOutbox = undefined;\n}\n\nexport function getAgentTaskHost(this: AgentSession): AgentTaskHost {\n\tif (this._disposed || sessionGenerationClosing.has(this)) throw new Error(\"Task owner is closed\");\n\tif (this._agentTaskHost) return this._agentTaskHost;\n\tconst stageAdmission = stageTaskAdmission(this);\n\tconst admission = stageAdmission ?? WorkflowStageAdmissionBoundary.restore(this.sessionManager.getEntries());\n\tthis._taskAdmission = admission;\n\tconst outbox = new TaskCompletionOutbox(\n\t\tthis.sessionManager,\n\t\t() => !this._disposed && admission.isOpen(),\n\t\tasync (envelope, restored) => {\n\t\t\t// Settlement can precede the UI projection's next drain. Read the owner\n\t\t\t// snapshot, not the display store, when attaching completion context.\n\t\t\tconst host = this._agentTaskHost;\n\t\t\tconst watched = host?.watchOwnerTasks();\n\t\t\tconst task = watched?.ok\n\t\t\t\t? watched.value.snapshot.tasks.find(\n\t\t\t\t\t\t(item) => item.ref.taskId === envelope.taskId && item.ref.ownerId === envelope.ownerId,\n\t\t\t\t\t)\n\t\t\t\t: undefined;\n\t\t\tif (watched?.ok) watched.value.dispose();\n\t\t\t// Foreground shell results already return through their tool call. Do not\n\t\t\t// create a second model turn or background card for that same execution.\n\t\t\tif (task?.kind === \"command\" && !task.wasBackground) return;\n\t\t\tconst lease = task ? host?.resolveTask(envelope.taskId) : undefined;\n\t\t\tconst source = lease?.ok ? taskTranscriptSource(lease.value) : undefined;\n\t\t\tconst ownEntries = lease?.ok ? taskOwnTranscriptEntries(lease.value) : undefined;\n\t\t\tconst response = ownEntries\n\t\t\t\t? ownEntries\n\t\t\t\t\t\t.slice()\n\t\t\t\t\t\t.reverse()\n\t\t\t\t\t\t.find(\n\t\t\t\t\t\t\t(entry) =>\n\t\t\t\t\t\t\t\tentry.type === \"message\" &&\n\t\t\t\t\t\t\t\tentry.message.role === \"assistant\" &&\n\t\t\t\t\t\t\t\tentry.message.content.some((block) => block.type === \"text\" && block.text.trim()),\n\t\t\t\t\t\t)\n\t\t\t\t: undefined;\n\t\t\tlet output =\n\t\t\t\tresponse?.type === \"message\" && response.message.role === \"assistant\"\n\t\t\t\t\t? response.message.content\n\t\t\t\t\t\t\t.filter((block) => block.type === \"text\")\n\t\t\t\t\t\t\t.map((block) => block.text)\n\t\t\t\t\t\t\t.join(\"\\n\")\n\t\t\t\t\t: undefined;\n\t\t\tif (task?.kind === \"command\" && lease?.ok && host) {\n\t\t\t\ttry {\n\t\t\t\t\tconst bytes = BigInt(task.output.byteCount);\n\t\t\t\t\tconst start = bytes > BigInt(COMMAND_DETAIL_TAIL_BYTES) ? bytes - BigInt(COMMAND_DETAIL_TAIL_BYTES) : 0n;\n\t\t\t\t\tconst page = await host.ownerBinding.supervisor.readTaskOutput(lease.value, {\n\t\t\t\t\t\tstart: String(start),\n\t\t\t\t\t\tmaximumBytes: COMMAND_DETAIL_TAIL_BYTES,\n\t\t\t\t\t});\n\t\t\t\t\toutput = page.ok\n\t\t\t\t\t\t? `${start > 0n ? \"[Earlier output omitted]\\n\" : \"\"}${taskOutputText(page.value)}`\n\t\t\t\t\t\t: \"Output unavailable\";\n\t\t\t\t} catch {\n\t\t\t\t\t// Missing retained output must not suppress a terminal notification.\n\t\t\t\t\toutput = \"Output unavailable\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst message = {\n\t\t\t\tcustomType: TASK_COMPLETION_MESSAGE_TYPE,\n\t\t\t\tcontent: formatTaskCompletion(envelope, task, output),\n\t\t\t\tdetails: { ...envelope, notification: taskCompletionNotice(envelope, task, output) },\n\t\t\t\tdisplay: true as const,\n\t\t\t};\n\t\t\tconst childRoute =\n\t\t\t\thost && task?.kind === \"command\" ? childTaskCompletionRoute(host, envelope.taskId) : undefined;\n\t\t\tif (childRoute) {\n\t\t\t\ttry {\n\t\t\t\t\tawait childRoute.deliver(message);\n\t\t\t\t\treturn;\n\t\t\t\t} catch {\n\t\t\t\t\t// The launching child ended before delivery; the owning parent receives the notice.\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst completionSource = source?.ok ? source.value.session.completionSource : undefined;\n\t\t\tif (completionSource) {\n\t\t\t\tawait flushTaskCompletionMessages(\n\t\t\t\t\tgetExtensionRuntimeEventBus(this._resourceLoader.getExtensions().runtime),\n\t\t\t\t\tcompletionSource,\n\t\t\t\t\tenvelope.completionId,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst deliver = () =>\n\t\t\t\tthis.sendCustomMessage(\n\t\t\t\t\tmessage,\n\t\t\t\t\trestored\n\t\t\t\t\t\t? { triggerTurn: false, stageAdmissionKey: envelope.completionId }\n\t\t\t\t\t\t: { triggerTurn: true, persistWhenStreaming: true, stageAdmissionKey: envelope.completionId },\n\t\t\t\t);\n\t\t\tif (stageAdmission) await deliver();\n\t\t\telse {\n\t\t\t\tawait admission.admit(envelope.completionId, deliver, () => {\n\t\t\t\t\tthrow new Error(\"Task owner is closed\");\n\t\t\t\t}).completion;\n\t\t\t}\n\t\t},\n\t);\n\tthis._taskCompletionOutbox = outbox;\n\tconst heartbeat: TaskHeartbeatDelivery = {\n\t\tdefaultIntervalMs: () => this.settingsManager.getTaskHeartbeatMs(),\n\t\thasUnreadHeartbeat: () => hasUnreadProtectedCustomMessage(this, TASK_HEARTBEAT_MESSAGE_TYPE),\n\t\tdeliver: async (message) => {\n\t\t\tif (this._disposed || !admission.isOpen()) throw new Error(\"Task owner is closed\");\n\t\t\t// The workflow heartbeat delivery: a visible card plus a steer that waits for the next safe boundary,\n\t\t\t// never interrupting a response in progress.\n\t\t\tconst deliver = () =>\n\t\t\t\tthis.sendCustomMessage(message, { triggerTurn: true, deliverAs: \"steer\", persistWhenStreaming: true });\n\t\t\tif (stageAdmission) await deliver();\n\t\t\telse\n\t\t\t\tawait admission.admit(undefined, deliver, () => {\n\t\t\t\t\tthrow new Error(\"Task owner is closed\");\n\t\t\t\t}).completion;\n\t\t},\n\t};\n\tconst binding = {\n\t\tresourceAdmission: this._resourceAdmission,\n\t\theartbeat,\n\t\tauthorizeLaunch: () => {\n\t\t\tif (this._disposed || sessionGenerationClosing.has(this) || !admission.isOpen())\n\t\t\t\tthrow new Error(\"Task owner is closed\");\n\t\t\tif (isSubagentChildSession(this)) throw new Error(\"Subagent delegation is not available inside a subagent\");\n\t\t},\n\t\tonTaskSettled: (\n\t\t\t...[ref, receipt]: Parameters<NonNullable<import(\"./tasks/supervisor.js\").TrustedTaskHost[\"onTaskSettled\"]>>\n\t\t) => {\n\t\t\t// Save the task's kind with the intent: a notice replayed after a restart has no task record to read it from.\n\t\t\tconst watched = this._agentTaskHost?.watchOwnerTasks();\n\t\t\tconst kind = watched?.ok\n\t\t\t\t? watched.value.snapshot.tasks.find((task) => task.ref.taskId === receipt.taskId)?.kind\n\t\t\t\t: undefined;\n\t\t\tif (watched?.ok) watched.value.dispose();\n\t\t\toutbox.record(ref.ownerId, receipt, kind);\n\t\t\tvoid outbox.flush();\n\t\t},\n\t};\n\tif (!stageAdmission && !replacementOwnerScopes.has(this)) replacementOwnerScopes.set(this, randomUUID());\n\tthis._agentTaskHost = stageAdmission\n\t\t? stageAdmission.bindAgentTaskHost(binding)\n\t\t: new AgentTaskHost({\n\t\t\t\t...binding,\n\t\t\t\tscope: {\n\t\t\t\t\tkind: \"session\",\n\t\t\t\t\tsessionId: replacementOwnerScopes.get(this)!,\n\t\t\t\t},\n\t\t\t});\n\tconst { supervisor, owner } = this._agentTaskHost.ownerBinding;\n\tconst store = new OwnerTaskStore(supervisor, owner);\n\tconst connected = store.connect();\n\tif (!connected.ok) throw new Error(connected.error.message);\n\tbindOwnerTaskStore(this, store);\n\treturn this._agentTaskHost;\n}\n\n/**\n * Shell task owner for this session. A subagent child runs shells in its parent's owner,\n * so they appear in the parent's `/tasks` and outlive the child.\n */\nexport function _getCommandTaskOwner(this: AgentSession): SupervisedCommandOwner | undefined {\n\tif (!isSubagentChildSession(this)) return this.getAgentTaskHost().ownerBinding;\n\tif (!this._parentCommandTaskOwner || this._disposed) return undefined;\n\tconst route: ChildTaskCompletionRoute = {\n\t\tisOpen: () => !this._disposed && this._subagentPolicy?.messageAdmission?.isOpen() === true,\n\t\tdeliver: async (message) => {\n\t\t\tconst admission = this._subagentPolicy?.messageAdmission;\n\t\t\tif (!admission) throw new Error(\"Subagent execution cannot accept messages\");\n\t\t\tawait admission.run(() => this.sendCustomMessage(message, { triggerTurn: true, persistWhenStreaming: true }));\n\t\t},\n\t};\n\treturn this._parentCommandTaskOwner.bind(this.sessionManager.getSessionId(), route, this._childTaskWaits);\n}\n\nexport async function closeSessionTasks(this: AgentSession): Promise<void> {\n\t// Replacement stage sessions share generation lifetime; disposal is not stage closure.\n\tif (stageTaskAdmission(this)) return;\n\tthis._taskAdmission?.seal();\n\tconst closed = await this._agentTaskHost?.close(\"session-close\");\n\tif (closed && !closed.ok) throw new Error(`${closed.error.code}: ${closed.error.message}`);\n}\n\n/** Workflow controller only: main-chat message pause does not stop owned tasks. */\nexport async function pauseTasks(this: AgentSession): Promise<void> {\n\tawait this.getAgentTaskHost().pauseTasks();\n}\n\nexport function resumeTasks(this: AgentSession): void {\n\tthis._agentTaskHost?.resumeTasks();\n}\n\nexport const agentSessionTaskMethods = {\n\tgetAgentTaskHost,\n\t_getCommandTaskOwner,\n\tcloseSessionTasks,\n\tpauseTasks,\n\tresumeTasks,\n};\n"]}
@@ -76,5 +76,9 @@ export declare const SETTINGS_DEFAULTS: {
76
76
  };
77
77
  readonly httpIdleTimeoutMs: 600000;
78
78
  readonly cacheWarming: "streaming";
79
+ readonly tasks: {
80
+ /** Same 15-minute default as workflow heartbeats. */
81
+ readonly heartbeatMs: number;
82
+ };
79
83
  };
80
84
  //# sourceMappingURL=settings-defaults.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings-defaults.d.ts","sourceRoot":"","sources":["../../src/core/settings-defaults.ts"],"names":[],"mappings":"AAEA,mFAAmF;AACnF,eAAO,MAAM,iBAAiB;aAC7B,WAAW,EAAE,EAAE;aACf,SAAS,EAAE,MAAM;aACjB,YAAY,EAAE,eAAe;aAC7B,YAAY,EAAE,eAAe;aAC7B,UAAU;iBACT,OAAO;iBACP,aAAa,EAAE,KAAK;iBACpB,iBAAiB,EAAE,GAAG;iBACtB,eAAe,EAAE,CAAC;;aAEnB,aAAa;iBACZ,aAAa,EAAE,KAAK;iBACpB,UAAU;;aAEX,cAAc;iBACb,OAAO;;aAER,KAAK;iBACJ,OAAO;iBACP,UAAU,EAAE,CAAC;iBACb,WAAW,EAAE,IAAI;iBACjB,eAAe;iBACf,QAAQ;qBACP,eAAe,EAAE,KAAK;;;aAGxB,iBAAiB;aACjB,oBAAoB;aACpB,YAAY;aACZ,mBAAmB,EAAE,KAAK;aAC1B,eAAe;iBACd,OAAO;;aAER,MAAM;iBACL,aAAa,EAAE,CAAC;iBAChB,YAAY,EAAE,CAAC;;aAEhB,iBAAiB;aACjB,sBAAsB;aACtB,mBAAmB;aACnB,KAAK;iBACJ,OAAO;;aAER,QAAQ;iBACP,UAAU;iBACV,eAAe,EAAE,EAAE;iBACnB,aAAa;iBACb,oBAAoB;;aAErB,MAAM;iBACL,UAAU;iBACV,WAAW;;aAEZ,kBAAkB,EAAE,MAAM;aAC1B,cAAc,EAAE,SAAS;aACzB,cAAc,EAAE,CAAC;aACjB,SAAS,EAAE,CAAC;aACZ,sBAAsB,EAAE,CAAC;aACzB,mBAAmB,EAAE,MAAM;aAC3B,oBAAoB,EAAE,YAAY;aAClC,sBAAsB;aACtB,0BAA0B,EAAE,MAAM;aAClC,QAAQ;iBACP,IAAI,EAAE,IAAI;iBACV,YAAY,EAAE,IAAI;;aAEnB,QAAQ;iBACP,eAAe,EAAE,IAAI;iBACrB,OAAO,EAAE,WAAW;iBACpB,KAAK;;aAEN,QAAQ;iBACP,mBAAmB;;aAEpB,iBAAiB,EAAE,MAAO;aAC1B,YAAY,EAAE,WAAW;CAChB,CAAC"}
1
+ {"version":3,"file":"settings-defaults.d.ts","sourceRoot":"","sources":["../../src/core/settings-defaults.ts"],"names":[],"mappings":"AAEA,mFAAmF;AACnF,eAAO,MAAM,iBAAiB;aAC7B,WAAW,EAAE,EAAE;aACf,SAAS,EAAE,MAAM;aACjB,YAAY,EAAE,eAAe;aAC7B,YAAY,EAAE,eAAe;aAC7B,UAAU;iBACT,OAAO;iBACP,aAAa,EAAE,KAAK;iBACpB,iBAAiB,EAAE,GAAG;iBACtB,eAAe,EAAE,CAAC;;aAEnB,aAAa;iBACZ,aAAa,EAAE,KAAK;iBACpB,UAAU;;aAEX,cAAc;iBACb,OAAO;;aAER,KAAK;iBACJ,OAAO;iBACP,UAAU,EAAE,CAAC;iBACb,WAAW,EAAE,IAAI;iBACjB,eAAe;iBACf,QAAQ;qBACP,eAAe,EAAE,KAAK;;;aAGxB,iBAAiB;aACjB,oBAAoB;aACpB,YAAY;aACZ,mBAAmB,EAAE,KAAK;aAC1B,eAAe;iBACd,OAAO;;aAER,MAAM;iBACL,aAAa,EAAE,CAAC;iBAChB,YAAY,EAAE,CAAC;;aAEhB,iBAAiB;aACjB,sBAAsB;aACtB,mBAAmB;aACnB,KAAK;iBACJ,OAAO;;aAER,QAAQ;iBACP,UAAU;iBACV,eAAe,EAAE,EAAE;iBACnB,aAAa;iBACb,oBAAoB;;aAErB,MAAM;iBACL,UAAU;iBACV,WAAW;;aAEZ,kBAAkB,EAAE,MAAM;aAC1B,cAAc,EAAE,SAAS;aACzB,cAAc,EAAE,CAAC;aACjB,SAAS,EAAE,CAAC;aACZ,sBAAsB,EAAE,CAAC;aACzB,mBAAmB,EAAE,MAAM;aAC3B,oBAAoB,EAAE,YAAY;aAClC,sBAAsB;aACtB,0BAA0B,EAAE,MAAM;aAClC,QAAQ;iBACP,IAAI,EAAE,IAAI;iBACV,YAAY,EAAE,IAAI;;aAEnB,QAAQ;iBACP,eAAe,EAAE,IAAI;iBACrB,OAAO,EAAE,WAAW;iBACpB,KAAK;;aAEN,QAAQ;iBACP,mBAAmB;;aAEpB,iBAAiB,EAAE,MAAO;aAC1B,YAAY,EAAE,WAAW;aACzB,KAAK;QACJ,qDAAqD;iBACrD,WAAW;;CAEH,CAAC"}
@@ -77,5 +77,9 @@ export const SETTINGS_DEFAULTS = {
77
77
  },
78
78
  httpIdleTimeoutMs: 600_000,
79
79
  cacheWarming: "streaming",
80
+ tasks: {
81
+ /** Same 15-minute default as workflow heartbeats. */
82
+ heartbeatMs: 15 * 60_000,
83
+ },
80
84
  };
81
85
  //# sourceMappingURL=settings-defaults.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings-defaults.js","sourceRoot":"","sources":["../../src/core/settings-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAE9E,mFAAmF;AACnF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAChC,WAAW,EAAE,EAAE;IACf,SAAS,EAAE,MAAM;IACjB,YAAY,EAAE,eAAe;IAC7B,YAAY,EAAE,eAAe;IAC7B,UAAU,EAAE;QACX,OAAO,EAAE,IAAI;QACb,aAAa,EAAE,KAAK;QACpB,iBAAiB,EAAE,GAAG;QACtB,eAAe,EAAE,CAAC;KAClB;IACD,aAAa,EAAE;QACd,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,KAAK;KACjB;IACD,cAAc,EAAE;QACf,OAAO,EAAE,IAAI;KACb;IACD,KAAK,EAAE;QACN,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,CAAC;QACb,WAAW,EAAE,IAAI;QACjB,eAAe,EAAE,gCAAgC;QACjD,QAAQ,EAAE;YACT,eAAe,EAAE,KAAK;SACtB;KACD;IACD,iBAAiB,EAAE,KAAK;IACxB,oBAAoB,EAAE,KAAK;IAC3B,YAAY,EAAE,KAAK;IACnB,mBAAmB,EAAE,KAAK;IAC1B,eAAe,EAAE;QAChB,OAAO,EAAE,KAAK;KACd;IACD,MAAM,EAAE;QACP,aAAa,EAAE,CAAC;QAChB,YAAY,EAAE,CAAC;KACf;IACD,iBAAiB,EAAE,KAAK;IACxB,sBAAsB,EAAE,IAAI;IAC5B,mBAAmB,EAAE,IAAI;IACzB,KAAK,EAAE;QACN,OAAO,EAAE,IAAI;KACb;IACD,QAAQ,EAAE;QACT,UAAU,EAAE,IAAI;QAChB,eAAe,EAAE,EAAE;QACnB,aAAa,EAAE,KAAK;QACpB,oBAAoB,EAAE,KAAK;KAC3B;IACD,MAAM,EAAE;QACP,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,KAAK;KAClB;IACD,kBAAkB,EAAE,MAAM;IAC1B,cAAc,EAAE,SAAS;IACzB,cAAc,EAAE,CAAC;IACjB,SAAS,EAAE,CAAC;IACZ,sBAAsB,EAAE,CAAC;IACzB,mBAAmB,EAAE,MAAM;IAC3B,oBAAoB,EAAE,YAAY;IAClC,sBAAsB,EAAE,IAAI;IAC5B,0BAA0B,EAAE,MAAM;IAClC,QAAQ,EAAE;QACT,IAAI,EAAE,IAAI;QACV,YAAY,EAAE,IAAI;KAClB;IACD,QAAQ,EAAE;QACT,eAAe,EAAE,IAAI;QACrB,OAAO,EAAE,WAAW;QACpB,KAAK,EAAE,IAAI;KACX;IACD,QAAQ,EAAE;QACT,mBAAmB,EAAE,IAAI;KACzB;IACD,iBAAiB,EAAE,OAAO;IAC1B,YAAY,EAAE,WAAW;CAChB,CAAC","sourcesContent":["import { DEFAULT_MAX_AGENT_RETRY_DELAY_MS } from \"@bastani/pi-ai/utils/retry\";\n\n/** Runtime defaults shared by settings accessors and the published JSON Schema. */\nexport const SETTINGS_DEFAULTS = {\n\trouterModel: \"\",\n\ttransport: \"auto\",\n\tsteeringMode: \"one-at-a-time\",\n\tfollowUpMode: \"one-at-a-time\",\n\tcompaction: {\n\t\tenabled: true,\n\t\treserveTokens: 16384,\n\t\tcompression_ratio: 0.5,\n\t\tpreserve_recent: 2,\n\t},\n\tbranchSummary: {\n\t\treserveTokens: 16384,\n\t\tskipPrompt: false,\n\t},\n\tsessionSummary: {\n\t\tenabled: true,\n\t},\n\tretry: {\n\t\tenabled: true,\n\t\tmaxRetries: 3,\n\t\tbaseDelayMs: 2000,\n\t\tmaxAgentDelayMs: DEFAULT_MAX_AGENT_RETRY_DELAY_MS,\n\t\tprovider: {\n\t\t\tmaxRetryDelayMs: 60000,\n\t\t},\n\t},\n\thideThinkingBlock: false,\n\tshowCacheMissNotices: false,\n\tquietStartup: false,\n\tdefaultProjectTrust: \"ask\",\n\tbashInterceptor: {\n\t\tenabled: false,\n\t},\n\tsearch: {\n\t\tcontextBefore: 1,\n\t\tcontextAfter: 3,\n\t},\n\tcollapseChangelog: false,\n\tenableInstallTelemetry: true,\n\tenableSkillCommands: true,\n\therdr: {\n\t\tenabled: true,\n\t},\n\tterminal: {\n\t\tshowImages: true,\n\t\timageWidthCells: 60,\n\t\tclearOnShrink: false,\n\t\tshowTerminalProgress: false,\n\t},\n\timages: {\n\t\tautoResize: true,\n\t\tblockImages: false,\n\t},\n\tdoubleEscapeAction: \"tree\",\n\ttreeFilterMode: \"default\",\n\teditorPaddingX: 0,\n\toutputPad: 1,\n\tautocompleteMaxVisible: 5,\n\tfullscreenScrollbar: \"auto\",\n\tfullscreenExitOutput: \"transcript\",\n\tfullscreenCopyOnSelect: true,\n\tfullscreenWheelScrollLines: \"auto\",\n\tcodemode: {\n\t\tmode: \"on\",\n\t\tinlineBudget: 3000,\n\t},\n\tmarkdown: {\n\t\tcodeBlockIndent: \" \",\n\t\tmermaid: \"streaming\",\n\t\tlatex: true,\n\t},\n\twarnings: {\n\t\tanthropicExtraUsage: true,\n\t},\n\thttpIdleTimeoutMs: 600_000,\n\tcacheWarming: \"streaming\",\n} as const;\n"]}
1
+ {"version":3,"file":"settings-defaults.js","sourceRoot":"","sources":["../../src/core/settings-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAE9E,mFAAmF;AACnF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAChC,WAAW,EAAE,EAAE;IACf,SAAS,EAAE,MAAM;IACjB,YAAY,EAAE,eAAe;IAC7B,YAAY,EAAE,eAAe;IAC7B,UAAU,EAAE;QACX,OAAO,EAAE,IAAI;QACb,aAAa,EAAE,KAAK;QACpB,iBAAiB,EAAE,GAAG;QACtB,eAAe,EAAE,CAAC;KAClB;IACD,aAAa,EAAE;QACd,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,KAAK;KACjB;IACD,cAAc,EAAE;QACf,OAAO,EAAE,IAAI;KACb;IACD,KAAK,EAAE;QACN,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,CAAC;QACb,WAAW,EAAE,IAAI;QACjB,eAAe,EAAE,gCAAgC;QACjD,QAAQ,EAAE;YACT,eAAe,EAAE,KAAK;SACtB;KACD;IACD,iBAAiB,EAAE,KAAK;IACxB,oBAAoB,EAAE,KAAK;IAC3B,YAAY,EAAE,KAAK;IACnB,mBAAmB,EAAE,KAAK;IAC1B,eAAe,EAAE;QAChB,OAAO,EAAE,KAAK;KACd;IACD,MAAM,EAAE;QACP,aAAa,EAAE,CAAC;QAChB,YAAY,EAAE,CAAC;KACf;IACD,iBAAiB,EAAE,KAAK;IACxB,sBAAsB,EAAE,IAAI;IAC5B,mBAAmB,EAAE,IAAI;IACzB,KAAK,EAAE;QACN,OAAO,EAAE,IAAI;KACb;IACD,QAAQ,EAAE;QACT,UAAU,EAAE,IAAI;QAChB,eAAe,EAAE,EAAE;QACnB,aAAa,EAAE,KAAK;QACpB,oBAAoB,EAAE,KAAK;KAC3B;IACD,MAAM,EAAE;QACP,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,KAAK;KAClB;IACD,kBAAkB,EAAE,MAAM;IAC1B,cAAc,EAAE,SAAS;IACzB,cAAc,EAAE,CAAC;IACjB,SAAS,EAAE,CAAC;IACZ,sBAAsB,EAAE,CAAC;IACzB,mBAAmB,EAAE,MAAM;IAC3B,oBAAoB,EAAE,YAAY;IAClC,sBAAsB,EAAE,IAAI;IAC5B,0BAA0B,EAAE,MAAM;IAClC,QAAQ,EAAE;QACT,IAAI,EAAE,IAAI;QACV,YAAY,EAAE,IAAI;KAClB;IACD,QAAQ,EAAE;QACT,eAAe,EAAE,IAAI;QACrB,OAAO,EAAE,WAAW;QACpB,KAAK,EAAE,IAAI;KACX;IACD,QAAQ,EAAE;QACT,mBAAmB,EAAE,IAAI;KACzB;IACD,iBAAiB,EAAE,OAAO;IAC1B,YAAY,EAAE,WAAW;IACzB,KAAK,EAAE;QACN,qDAAqD;QACrD,WAAW,EAAE,EAAE,GAAG,MAAM;KACxB;CACQ,CAAC","sourcesContent":["import { DEFAULT_MAX_AGENT_RETRY_DELAY_MS } from \"@bastani/pi-ai/utils/retry\";\n\n/** Runtime defaults shared by settings accessors and the published JSON Schema. */\nexport const SETTINGS_DEFAULTS = {\n\trouterModel: \"\",\n\ttransport: \"auto\",\n\tsteeringMode: \"one-at-a-time\",\n\tfollowUpMode: \"one-at-a-time\",\n\tcompaction: {\n\t\tenabled: true,\n\t\treserveTokens: 16384,\n\t\tcompression_ratio: 0.5,\n\t\tpreserve_recent: 2,\n\t},\n\tbranchSummary: {\n\t\treserveTokens: 16384,\n\t\tskipPrompt: false,\n\t},\n\tsessionSummary: {\n\t\tenabled: true,\n\t},\n\tretry: {\n\t\tenabled: true,\n\t\tmaxRetries: 3,\n\t\tbaseDelayMs: 2000,\n\t\tmaxAgentDelayMs: DEFAULT_MAX_AGENT_RETRY_DELAY_MS,\n\t\tprovider: {\n\t\t\tmaxRetryDelayMs: 60000,\n\t\t},\n\t},\n\thideThinkingBlock: false,\n\tshowCacheMissNotices: false,\n\tquietStartup: false,\n\tdefaultProjectTrust: \"ask\",\n\tbashInterceptor: {\n\t\tenabled: false,\n\t},\n\tsearch: {\n\t\tcontextBefore: 1,\n\t\tcontextAfter: 3,\n\t},\n\tcollapseChangelog: false,\n\tenableInstallTelemetry: true,\n\tenableSkillCommands: true,\n\therdr: {\n\t\tenabled: true,\n\t},\n\tterminal: {\n\t\tshowImages: true,\n\t\timageWidthCells: 60,\n\t\tclearOnShrink: false,\n\t\tshowTerminalProgress: false,\n\t},\n\timages: {\n\t\tautoResize: true,\n\t\tblockImages: false,\n\t},\n\tdoubleEscapeAction: \"tree\",\n\ttreeFilterMode: \"default\",\n\teditorPaddingX: 0,\n\toutputPad: 1,\n\tautocompleteMaxVisible: 5,\n\tfullscreenScrollbar: \"auto\",\n\tfullscreenExitOutput: \"transcript\",\n\tfullscreenCopyOnSelect: true,\n\tfullscreenWheelScrollLines: \"auto\",\n\tcodemode: {\n\t\tmode: \"on\",\n\t\tinlineBudget: 3000,\n\t},\n\tmarkdown: {\n\t\tcodeBlockIndent: \" \",\n\t\tmermaid: \"streaming\",\n\t\tlatex: true,\n\t},\n\twarnings: {\n\t\tanthropicExtraUsage: true,\n\t},\n\thttpIdleTimeoutMs: 600_000,\n\tcacheWarming: \"streaming\",\n\ttasks: {\n\t\t/** Same 15-minute default as workflow heartbeats. */\n\t\theartbeatMs: 15 * 60_000,\n\t},\n} as const;\n"]}
@@ -15,6 +15,8 @@ interface SettingsManagerResourceAccessors {
15
15
  setBashInterceptorEnabled(enabled: boolean): void;
16
16
  getSearchContextBefore(): number;
17
17
  getSearchContextAfter(): number;
18
+ /** Default task heartbeat cadence in milliseconds; `0` disables. Invalid values use the default. */
19
+ getTaskHeartbeatMs(): number;
18
20
  getNpmCommand(): string[] | undefined;
19
21
  setNpmCommand(command: string[] | undefined): void;
20
22
  getCollapseChangelog(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"settings-manager-resource-accessors.d.ts","sourceRoot":"","sources":["../../src/core/settings-manager-resource-accessors.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAErH,UAAU,gCAAgC;IACzC,oBAAoB,IAAI,OAAO,CAAC;IAChC,wBAAwB,IAAI,MAAM,GAAG,SAAS,CAAC;IAC/C,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1C,YAAY,IAAI,MAAM,GAAG,SAAS,CAAC;IACnC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAC7C,sBAAsB,IAAI,mBAAmB,CAAC;IAC9C,sBAAsB,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACvE,eAAe,IAAI,YAAY,CAAC;IAChC,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3C,qBAAqB,IAAI,MAAM,GAAG,SAAS,CAAC;IAC5C,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACxD,yBAAyB,IAAI,OAAO,CAAC;IACrC,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAClD,sBAAsB,IAAI,MAAM,CAAC;IACjC,qBAAqB,IAAI,MAAM,CAAC;IAChC,aAAa,IAAI,MAAM,EAAE,GAAG,SAAS,CAAC;IACtC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC;IACnD,oBAAoB,IAAI,OAAO,CAAC;IAChC,oBAAoB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9C,yBAAyB,IAAI,OAAO,CAAC;IACrC,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAClD,WAAW,IAAI,aAAa,EAAE,CAAC;IAC/B,WAAW,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IAC7C,kBAAkB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IACpD,iBAAiB,IAAI,MAAM,EAAE,CAAC;IAC9B,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACzC,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAChD,aAAa,IAAI,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACrC,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5C,sBAAsB,IAAI,MAAM,EAAE,CAAC;IACnC,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC9C,6BAA6B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACrD,aAAa,IAAI,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACrC,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5C,gBAAgB,IAAI,MAAM,EAAE,CAAC;IAC7B,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxC,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC/C,sBAAsB,IAAI,OAAO,CAAC;IAClC,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/C,kBAAkB,IAAI,uBAAuB,GAAG,SAAS,CAAC;CAC1D;AAED,OAAO,QAAQ,4BAA4B,CAAC;IAC3C,UAAU,eAAgB,SAAQ,gCAAgC;KAAG;CACrE"}
1
+ {"version":3,"file":"settings-manager-resource-accessors.d.ts","sourceRoot":"","sources":["../../src/core/settings-manager-resource-accessors.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAErH,UAAU,gCAAgC;IACzC,oBAAoB,IAAI,OAAO,CAAC;IAChC,wBAAwB,IAAI,MAAM,GAAG,SAAS,CAAC;IAC/C,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1C,YAAY,IAAI,MAAM,GAAG,SAAS,CAAC;IACnC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAC7C,sBAAsB,IAAI,mBAAmB,CAAC;IAC9C,sBAAsB,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACvE,eAAe,IAAI,YAAY,CAAC;IAChC,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3C,qBAAqB,IAAI,MAAM,GAAG,SAAS,CAAC;IAC5C,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACxD,yBAAyB,IAAI,OAAO,CAAC;IACrC,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAClD,sBAAsB,IAAI,MAAM,CAAC;IACjC,qBAAqB,IAAI,MAAM,CAAC;IAChC,oGAAoG;IACpG,kBAAkB,IAAI,MAAM,CAAC;IAC7B,aAAa,IAAI,MAAM,EAAE,GAAG,SAAS,CAAC;IACtC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC;IACnD,oBAAoB,IAAI,OAAO,CAAC;IAChC,oBAAoB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9C,yBAAyB,IAAI,OAAO,CAAC;IACrC,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAClD,WAAW,IAAI,aAAa,EAAE,CAAC;IAC/B,WAAW,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IAC7C,kBAAkB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IACpD,iBAAiB,IAAI,MAAM,EAAE,CAAC;IAC9B,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACzC,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAChD,aAAa,IAAI,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACrC,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5C,sBAAsB,IAAI,MAAM,EAAE,CAAC;IACnC,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC9C,6BAA6B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACrD,aAAa,IAAI,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACrC,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5C,gBAAgB,IAAI,MAAM,EAAE,CAAC;IAC7B,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxC,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC/C,sBAAsB,IAAI,OAAO,CAAC;IAClC,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/C,kBAAkB,IAAI,uBAAuB,GAAG,SAAS,CAAC;CAC1D;AAED,OAAO,QAAQ,4BAA4B,CAAC;IAC3C,UAAU,eAAgB,SAAQ,gCAAgC;KAAG;CACrE"}
@@ -75,6 +75,12 @@ const resourceAccessors = {
75
75
  getSearchContextAfter() {
76
76
  return settingsInternals(this).settings.search?.contextAfter ?? SETTINGS_DEFAULTS.search.contextAfter;
77
77
  },
78
+ getTaskHeartbeatMs() {
79
+ const value = settingsInternals(this).settings.tasks?.heartbeatMs;
80
+ return typeof value === "number" && Number.isFinite(value) && (value === 0 || value >= 60_000)
81
+ ? value
82
+ : SETTINGS_DEFAULTS.tasks.heartbeatMs;
83
+ },
78
84
  getNpmCommand() {
79
85
  const command = settingsInternals(this).settings.npmCommand;
80
86
  return command ? [...command] : undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"settings-manager-resource-accessors.js","sourceRoot":"","sources":["../../src/core/settings-manager-resource-accessors.ts"],"names":[],"mappings":"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","sourcesContent":["import { SETTINGS_DEFAULTS } from \"./settings-defaults.ts\";\nimport { SettingsManager } from \"./settings-manager-core.ts\";\nimport { settingsInternals } from \"./settings-manager-internals.ts\";\nimport type { DefaultProjectTrust, PackageSource, QuietStartup, ThinkingBudgetsSettings } from \"./settings-types.ts\";\n\ninterface SettingsManagerResourceAccessors {\n\tgetHideThinkingBlock(): boolean;\n\tgetExternalEditorCommand(): string | undefined;\n\tsetHideThinkingBlock(hide: boolean): void;\n\tgetShellPath(): string | undefined;\n\tsetShellPath(path: string | undefined): void;\n\tgetDefaultProjectTrust(): DefaultProjectTrust;\n\tsetDefaultProjectTrust(defaultProjectTrust: DefaultProjectTrust): void;\n\tgetQuietStartup(): QuietStartup;\n\tsetQuietStartup(quiet: QuietStartup): void;\n\tgetShellCommandPrefix(): string | undefined;\n\tsetShellCommandPrefix(prefix: string | undefined): void;\n\tgetBashInterceptorEnabled(): boolean;\n\tsetBashInterceptorEnabled(enabled: boolean): void;\n\tgetSearchContextBefore(): number;\n\tgetSearchContextAfter(): number;\n\tgetNpmCommand(): string[] | undefined;\n\tsetNpmCommand(command: string[] | undefined): void;\n\tgetCollapseChangelog(): boolean;\n\tsetCollapseChangelog(collapse: boolean): void;\n\tgetEnableInstallTelemetry(): boolean;\n\tsetEnableInstallTelemetry(enabled: boolean): void;\n\tgetPackages(): PackageSource[];\n\tsetPackages(packages: PackageSource[]): void;\n\tsetProjectPackages(packages: PackageSource[]): void;\n\tgetExtensionPaths(): string[];\n\tsetExtensionPaths(paths: string[]): void;\n\tsetProjectExtensionPaths(paths: string[]): void;\n\tgetSkillPaths(): string[];\n\tsetSkillPaths(paths: string[]): void;\n\tsetProjectSkillPaths(paths: string[]): void;\n\tgetPromptTemplatePaths(): string[];\n\tsetPromptTemplatePaths(paths: string[]): void;\n\tsetProjectPromptTemplatePaths(paths: string[]): void;\n\tgetThemePaths(): string[];\n\tsetThemePaths(paths: string[]): void;\n\tsetProjectThemePaths(paths: string[]): void;\n\tgetWorkflowPaths(): string[];\n\tsetWorkflowPaths(paths: string[]): void;\n\tsetProjectWorkflowPaths(paths: string[]): void;\n\tgetEnableSkillCommands(): boolean;\n\tsetEnableSkillCommands(enabled: boolean): void;\n\tgetThinkingBudgets(): ThinkingBudgetsSettings | undefined;\n}\n\ndeclare module \"./settings-manager-core.ts\" {\n\tinterface SettingsManager extends SettingsManagerResourceAccessors {}\n}\n\nconst resourceAccessors: SettingsManagerResourceAccessors = {\n\tgetHideThinkingBlock() {\n\t\treturn settingsInternals(this).settings.hideThinkingBlock ?? SETTINGS_DEFAULTS.hideThinkingBlock;\n\t},\n\n\tgetExternalEditorCommand() {\n\t\tconst configuredEditor = settingsInternals(this).settings.externalEditor;\n\t\tif (typeof configuredEditor === \"string\" && configuredEditor.trim() !== \"\") {\n\t\t\treturn configuredEditor;\n\t\t}\n\t\tconst environmentEditor = process.env.VISUAL || process.env.EDITOR;\n\t\tif (environmentEditor) {\n\t\t\treturn environmentEditor;\n\t\t}\n\t\treturn process.platform === \"win32\" ? \"notepad\" : \"nano\";\n\t},\n\n\tsetHideThinkingBlock(hide) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.hideThinkingBlock = hide;\n\t\tstate.markModified(\"hideThinkingBlock\");\n\t\tstate.save();\n\t},\n\n\tgetShellPath() {\n\t\treturn settingsInternals(this).settings.shellPath;\n\t},\n\n\tsetShellPath(path) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.shellPath = path;\n\t\tstate.markModified(\"shellPath\");\n\t\tstate.save();\n\t},\n\n\tgetDefaultProjectTrust() {\n\t\tconst value = settingsInternals(this).globalSettings.defaultProjectTrust;\n\t\treturn value === \"always\" || value === \"never\" ? value : SETTINGS_DEFAULTS.defaultProjectTrust;\n\t},\n\n\tsetDefaultProjectTrust(defaultProjectTrust) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.defaultProjectTrust = defaultProjectTrust;\n\t\tstate.markModified(\"defaultProjectTrust\");\n\t\tstate.save();\n\t},\n\n\tgetQuietStartup() {\n\t\tconst value = settingsInternals(this).settings.quietStartup;\n\t\treturn value === true || value === \"header\" ? value : SETTINGS_DEFAULTS.quietStartup;\n\t},\n\n\tsetQuietStartup(quiet) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.quietStartup = quiet;\n\t\tstate.markModified(\"quietStartup\");\n\t\tstate.save();\n\t},\n\n\tgetShellCommandPrefix() {\n\t\treturn settingsInternals(this).settings.shellCommandPrefix;\n\t},\n\n\tsetShellCommandPrefix(prefix) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.shellCommandPrefix = prefix;\n\t\tstate.markModified(\"shellCommandPrefix\");\n\t\tstate.save();\n\t},\n\n\tgetBashInterceptorEnabled() {\n\t\treturn settingsInternals(this).settings.bashInterceptor?.enabled ?? SETTINGS_DEFAULTS.bashInterceptor.enabled;\n\t},\n\n\tsetBashInterceptorEnabled(enabled) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.bashInterceptor = { ...(state.globalSettings.bashInterceptor ?? {}), enabled };\n\t\tstate.markModified(\"bashInterceptor\");\n\t\tstate.save();\n\t},\n\n\tgetSearchContextBefore() {\n\t\treturn settingsInternals(this).settings.search?.contextBefore ?? SETTINGS_DEFAULTS.search.contextBefore;\n\t},\n\n\tgetSearchContextAfter() {\n\t\treturn settingsInternals(this).settings.search?.contextAfter ?? SETTINGS_DEFAULTS.search.contextAfter;\n\t},\n\n\tgetNpmCommand() {\n\t\tconst command = settingsInternals(this).settings.npmCommand;\n\t\treturn command ? [...command] : undefined;\n\t},\n\n\tsetNpmCommand(command) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.npmCommand = command ? [...command] : undefined;\n\t\tstate.markModified(\"npmCommand\");\n\t\tstate.save();\n\t},\n\n\tgetCollapseChangelog() {\n\t\treturn settingsInternals(this).settings.collapseChangelog ?? SETTINGS_DEFAULTS.collapseChangelog;\n\t},\n\n\tsetCollapseChangelog(collapse) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.collapseChangelog = collapse;\n\t\tstate.markModified(\"collapseChangelog\");\n\t\tstate.save();\n\t},\n\n\tgetEnableInstallTelemetry() {\n\t\treturn settingsInternals(this).settings.enableInstallTelemetry ?? SETTINGS_DEFAULTS.enableInstallTelemetry;\n\t},\n\n\tsetEnableInstallTelemetry(enabled) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.enableInstallTelemetry = enabled;\n\t\tstate.markModified(\"enableInstallTelemetry\");\n\t\tstate.save();\n\t},\n\n\tgetPackages() {\n\t\treturn [...(settingsInternals(this).settings.packages ?? [])];\n\t},\n\n\tsetPackages(packages) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.packages = packages;\n\t\tstate.markModified(\"packages\");\n\t\tstate.save();\n\t},\n\n\tsetProjectPackages(packages) {\n\t\tconst state = settingsInternals(this);\n\t\tconst projectSettings = structuredClone(state.projectSettings);\n\t\tprojectSettings.packages = packages;\n\t\tstate.markProjectModified(\"packages\");\n\t\tstate.saveProjectSettings(projectSettings);\n\t},\n\n\tgetExtensionPaths() {\n\t\treturn [...(settingsInternals(this).settings.extensions ?? [])];\n\t},\n\n\tsetExtensionPaths(paths) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.extensions = paths;\n\t\tstate.markModified(\"extensions\");\n\t\tstate.save();\n\t},\n\n\tsetProjectExtensionPaths(paths) {\n\t\tconst state = settingsInternals(this);\n\t\tconst projectSettings = structuredClone(state.projectSettings);\n\t\tprojectSettings.extensions = paths;\n\t\tstate.markProjectModified(\"extensions\");\n\t\tstate.saveProjectSettings(projectSettings);\n\t},\n\n\tgetSkillPaths() {\n\t\treturn [...(settingsInternals(this).settings.skills ?? [])];\n\t},\n\n\tsetSkillPaths(paths) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.skills = paths;\n\t\tstate.markModified(\"skills\");\n\t\tstate.save();\n\t},\n\n\tsetProjectSkillPaths(paths) {\n\t\tconst state = settingsInternals(this);\n\t\tconst projectSettings = structuredClone(state.projectSettings);\n\t\tprojectSettings.skills = paths;\n\t\tstate.markProjectModified(\"skills\");\n\t\tstate.saveProjectSettings(projectSettings);\n\t},\n\n\tgetPromptTemplatePaths() {\n\t\treturn [...(settingsInternals(this).settings.prompts ?? [])];\n\t},\n\n\tsetPromptTemplatePaths(paths) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.prompts = paths;\n\t\tstate.markModified(\"prompts\");\n\t\tstate.save();\n\t},\n\n\tsetProjectPromptTemplatePaths(paths) {\n\t\tconst state = settingsInternals(this);\n\t\tconst projectSettings = structuredClone(state.projectSettings);\n\t\tprojectSettings.prompts = paths;\n\t\tstate.markProjectModified(\"prompts\");\n\t\tstate.saveProjectSettings(projectSettings);\n\t},\n\n\tgetThemePaths() {\n\t\treturn [...(settingsInternals(this).settings.themes ?? [])];\n\t},\n\n\tsetThemePaths(paths) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.themes = paths;\n\t\tstate.markModified(\"themes\");\n\t\tstate.save();\n\t},\n\n\tsetProjectThemePaths(paths) {\n\t\tconst state = settingsInternals(this);\n\t\tconst projectSettings = structuredClone(state.projectSettings);\n\t\tprojectSettings.themes = paths;\n\t\tstate.markProjectModified(\"themes\");\n\t\tstate.saveProjectSettings(projectSettings);\n\t},\n\n\tgetWorkflowPaths() {\n\t\tconst workflows = settingsInternals(this).settings.workflows;\n\t\treturn [...(Array.isArray(workflows) ? workflows : (workflows?.paths ?? []))];\n\t},\n\n\tsetWorkflowPaths(paths) {\n\t\tconst state = settingsInternals(this);\n\t\tconst workflows = state.globalSettings.workflows;\n\t\tstate.globalSettings.workflows =\n\t\t\tArray.isArray(workflows) || workflows === undefined ? paths : { ...workflows, paths };\n\t\tstate.markModified(\"workflows\");\n\t\tstate.save();\n\t},\n\n\tsetProjectWorkflowPaths(paths) {\n\t\tconst state = settingsInternals(this);\n\t\tconst projectSettings = structuredClone(state.projectSettings);\n\t\tconst workflows = projectSettings.workflows;\n\t\tprojectSettings.workflows = Array.isArray(workflows) || workflows === undefined ? paths : { ...workflows, paths };\n\t\tstate.markProjectModified(\"workflows\");\n\t\tstate.saveProjectSettings(projectSettings);\n\t},\n\n\tgetEnableSkillCommands() {\n\t\treturn settingsInternals(this).settings.enableSkillCommands ?? SETTINGS_DEFAULTS.enableSkillCommands;\n\t},\n\n\tsetEnableSkillCommands(enabled) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.enableSkillCommands = enabled;\n\t\tstate.markModified(\"enableSkillCommands\");\n\t\tstate.save();\n\t},\n\n\tgetThinkingBudgets() {\n\t\treturn settingsInternals(this).settings.thinkingBudgets;\n\t},\n};\n\nObject.assign(SettingsManager.prototype, resourceAccessors);\n"]}
1
+ {"version":3,"file":"settings-manager-resource-accessors.js","sourceRoot":"","sources":["../../src/core/settings-manager-resource-accessors.ts"],"names":[],"mappings":"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","sourcesContent":["import { SETTINGS_DEFAULTS } from \"./settings-defaults.ts\";\nimport { SettingsManager } from \"./settings-manager-core.ts\";\nimport { settingsInternals } from \"./settings-manager-internals.ts\";\nimport type { DefaultProjectTrust, PackageSource, QuietStartup, ThinkingBudgetsSettings } from \"./settings-types.ts\";\n\ninterface SettingsManagerResourceAccessors {\n\tgetHideThinkingBlock(): boolean;\n\tgetExternalEditorCommand(): string | undefined;\n\tsetHideThinkingBlock(hide: boolean): void;\n\tgetShellPath(): string | undefined;\n\tsetShellPath(path: string | undefined): void;\n\tgetDefaultProjectTrust(): DefaultProjectTrust;\n\tsetDefaultProjectTrust(defaultProjectTrust: DefaultProjectTrust): void;\n\tgetQuietStartup(): QuietStartup;\n\tsetQuietStartup(quiet: QuietStartup): void;\n\tgetShellCommandPrefix(): string | undefined;\n\tsetShellCommandPrefix(prefix: string | undefined): void;\n\tgetBashInterceptorEnabled(): boolean;\n\tsetBashInterceptorEnabled(enabled: boolean): void;\n\tgetSearchContextBefore(): number;\n\tgetSearchContextAfter(): number;\n\t/** Default task heartbeat cadence in milliseconds; `0` disables. Invalid values use the default. */\n\tgetTaskHeartbeatMs(): number;\n\tgetNpmCommand(): string[] | undefined;\n\tsetNpmCommand(command: string[] | undefined): void;\n\tgetCollapseChangelog(): boolean;\n\tsetCollapseChangelog(collapse: boolean): void;\n\tgetEnableInstallTelemetry(): boolean;\n\tsetEnableInstallTelemetry(enabled: boolean): void;\n\tgetPackages(): PackageSource[];\n\tsetPackages(packages: PackageSource[]): void;\n\tsetProjectPackages(packages: PackageSource[]): void;\n\tgetExtensionPaths(): string[];\n\tsetExtensionPaths(paths: string[]): void;\n\tsetProjectExtensionPaths(paths: string[]): void;\n\tgetSkillPaths(): string[];\n\tsetSkillPaths(paths: string[]): void;\n\tsetProjectSkillPaths(paths: string[]): void;\n\tgetPromptTemplatePaths(): string[];\n\tsetPromptTemplatePaths(paths: string[]): void;\n\tsetProjectPromptTemplatePaths(paths: string[]): void;\n\tgetThemePaths(): string[];\n\tsetThemePaths(paths: string[]): void;\n\tsetProjectThemePaths(paths: string[]): void;\n\tgetWorkflowPaths(): string[];\n\tsetWorkflowPaths(paths: string[]): void;\n\tsetProjectWorkflowPaths(paths: string[]): void;\n\tgetEnableSkillCommands(): boolean;\n\tsetEnableSkillCommands(enabled: boolean): void;\n\tgetThinkingBudgets(): ThinkingBudgetsSettings | undefined;\n}\n\ndeclare module \"./settings-manager-core.ts\" {\n\tinterface SettingsManager extends SettingsManagerResourceAccessors {}\n}\n\nconst resourceAccessors: SettingsManagerResourceAccessors = {\n\tgetHideThinkingBlock() {\n\t\treturn settingsInternals(this).settings.hideThinkingBlock ?? SETTINGS_DEFAULTS.hideThinkingBlock;\n\t},\n\n\tgetExternalEditorCommand() {\n\t\tconst configuredEditor = settingsInternals(this).settings.externalEditor;\n\t\tif (typeof configuredEditor === \"string\" && configuredEditor.trim() !== \"\") {\n\t\t\treturn configuredEditor;\n\t\t}\n\t\tconst environmentEditor = process.env.VISUAL || process.env.EDITOR;\n\t\tif (environmentEditor) {\n\t\t\treturn environmentEditor;\n\t\t}\n\t\treturn process.platform === \"win32\" ? \"notepad\" : \"nano\";\n\t},\n\n\tsetHideThinkingBlock(hide) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.hideThinkingBlock = hide;\n\t\tstate.markModified(\"hideThinkingBlock\");\n\t\tstate.save();\n\t},\n\n\tgetShellPath() {\n\t\treturn settingsInternals(this).settings.shellPath;\n\t},\n\n\tsetShellPath(path) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.shellPath = path;\n\t\tstate.markModified(\"shellPath\");\n\t\tstate.save();\n\t},\n\n\tgetDefaultProjectTrust() {\n\t\tconst value = settingsInternals(this).globalSettings.defaultProjectTrust;\n\t\treturn value === \"always\" || value === \"never\" ? value : SETTINGS_DEFAULTS.defaultProjectTrust;\n\t},\n\n\tsetDefaultProjectTrust(defaultProjectTrust) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.defaultProjectTrust = defaultProjectTrust;\n\t\tstate.markModified(\"defaultProjectTrust\");\n\t\tstate.save();\n\t},\n\n\tgetQuietStartup() {\n\t\tconst value = settingsInternals(this).settings.quietStartup;\n\t\treturn value === true || value === \"header\" ? value : SETTINGS_DEFAULTS.quietStartup;\n\t},\n\n\tsetQuietStartup(quiet) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.quietStartup = quiet;\n\t\tstate.markModified(\"quietStartup\");\n\t\tstate.save();\n\t},\n\n\tgetShellCommandPrefix() {\n\t\treturn settingsInternals(this).settings.shellCommandPrefix;\n\t},\n\n\tsetShellCommandPrefix(prefix) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.shellCommandPrefix = prefix;\n\t\tstate.markModified(\"shellCommandPrefix\");\n\t\tstate.save();\n\t},\n\n\tgetBashInterceptorEnabled() {\n\t\treturn settingsInternals(this).settings.bashInterceptor?.enabled ?? SETTINGS_DEFAULTS.bashInterceptor.enabled;\n\t},\n\n\tsetBashInterceptorEnabled(enabled) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.bashInterceptor = { ...(state.globalSettings.bashInterceptor ?? {}), enabled };\n\t\tstate.markModified(\"bashInterceptor\");\n\t\tstate.save();\n\t},\n\n\tgetSearchContextBefore() {\n\t\treturn settingsInternals(this).settings.search?.contextBefore ?? SETTINGS_DEFAULTS.search.contextBefore;\n\t},\n\n\tgetSearchContextAfter() {\n\t\treturn settingsInternals(this).settings.search?.contextAfter ?? SETTINGS_DEFAULTS.search.contextAfter;\n\t},\n\n\tgetTaskHeartbeatMs() {\n\t\tconst value = settingsInternals(this).settings.tasks?.heartbeatMs;\n\t\treturn typeof value === \"number\" && Number.isFinite(value) && (value === 0 || value >= 60_000)\n\t\t\t? value\n\t\t\t: SETTINGS_DEFAULTS.tasks.heartbeatMs;\n\t},\n\n\tgetNpmCommand() {\n\t\tconst command = settingsInternals(this).settings.npmCommand;\n\t\treturn command ? [...command] : undefined;\n\t},\n\n\tsetNpmCommand(command) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.npmCommand = command ? [...command] : undefined;\n\t\tstate.markModified(\"npmCommand\");\n\t\tstate.save();\n\t},\n\n\tgetCollapseChangelog() {\n\t\treturn settingsInternals(this).settings.collapseChangelog ?? SETTINGS_DEFAULTS.collapseChangelog;\n\t},\n\n\tsetCollapseChangelog(collapse) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.collapseChangelog = collapse;\n\t\tstate.markModified(\"collapseChangelog\");\n\t\tstate.save();\n\t},\n\n\tgetEnableInstallTelemetry() {\n\t\treturn settingsInternals(this).settings.enableInstallTelemetry ?? SETTINGS_DEFAULTS.enableInstallTelemetry;\n\t},\n\n\tsetEnableInstallTelemetry(enabled) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.enableInstallTelemetry = enabled;\n\t\tstate.markModified(\"enableInstallTelemetry\");\n\t\tstate.save();\n\t},\n\n\tgetPackages() {\n\t\treturn [...(settingsInternals(this).settings.packages ?? [])];\n\t},\n\n\tsetPackages(packages) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.packages = packages;\n\t\tstate.markModified(\"packages\");\n\t\tstate.save();\n\t},\n\n\tsetProjectPackages(packages) {\n\t\tconst state = settingsInternals(this);\n\t\tconst projectSettings = structuredClone(state.projectSettings);\n\t\tprojectSettings.packages = packages;\n\t\tstate.markProjectModified(\"packages\");\n\t\tstate.saveProjectSettings(projectSettings);\n\t},\n\n\tgetExtensionPaths() {\n\t\treturn [...(settingsInternals(this).settings.extensions ?? [])];\n\t},\n\n\tsetExtensionPaths(paths) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.extensions = paths;\n\t\tstate.markModified(\"extensions\");\n\t\tstate.save();\n\t},\n\n\tsetProjectExtensionPaths(paths) {\n\t\tconst state = settingsInternals(this);\n\t\tconst projectSettings = structuredClone(state.projectSettings);\n\t\tprojectSettings.extensions = paths;\n\t\tstate.markProjectModified(\"extensions\");\n\t\tstate.saveProjectSettings(projectSettings);\n\t},\n\n\tgetSkillPaths() {\n\t\treturn [...(settingsInternals(this).settings.skills ?? [])];\n\t},\n\n\tsetSkillPaths(paths) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.skills = paths;\n\t\tstate.markModified(\"skills\");\n\t\tstate.save();\n\t},\n\n\tsetProjectSkillPaths(paths) {\n\t\tconst state = settingsInternals(this);\n\t\tconst projectSettings = structuredClone(state.projectSettings);\n\t\tprojectSettings.skills = paths;\n\t\tstate.markProjectModified(\"skills\");\n\t\tstate.saveProjectSettings(projectSettings);\n\t},\n\n\tgetPromptTemplatePaths() {\n\t\treturn [...(settingsInternals(this).settings.prompts ?? [])];\n\t},\n\n\tsetPromptTemplatePaths(paths) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.prompts = paths;\n\t\tstate.markModified(\"prompts\");\n\t\tstate.save();\n\t},\n\n\tsetProjectPromptTemplatePaths(paths) {\n\t\tconst state = settingsInternals(this);\n\t\tconst projectSettings = structuredClone(state.projectSettings);\n\t\tprojectSettings.prompts = paths;\n\t\tstate.markProjectModified(\"prompts\");\n\t\tstate.saveProjectSettings(projectSettings);\n\t},\n\n\tgetThemePaths() {\n\t\treturn [...(settingsInternals(this).settings.themes ?? [])];\n\t},\n\n\tsetThemePaths(paths) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.themes = paths;\n\t\tstate.markModified(\"themes\");\n\t\tstate.save();\n\t},\n\n\tsetProjectThemePaths(paths) {\n\t\tconst state = settingsInternals(this);\n\t\tconst projectSettings = structuredClone(state.projectSettings);\n\t\tprojectSettings.themes = paths;\n\t\tstate.markProjectModified(\"themes\");\n\t\tstate.saveProjectSettings(projectSettings);\n\t},\n\n\tgetWorkflowPaths() {\n\t\tconst workflows = settingsInternals(this).settings.workflows;\n\t\treturn [...(Array.isArray(workflows) ? workflows : (workflows?.paths ?? []))];\n\t},\n\n\tsetWorkflowPaths(paths) {\n\t\tconst state = settingsInternals(this);\n\t\tconst workflows = state.globalSettings.workflows;\n\t\tstate.globalSettings.workflows =\n\t\t\tArray.isArray(workflows) || workflows === undefined ? paths : { ...workflows, paths };\n\t\tstate.markModified(\"workflows\");\n\t\tstate.save();\n\t},\n\n\tsetProjectWorkflowPaths(paths) {\n\t\tconst state = settingsInternals(this);\n\t\tconst projectSettings = structuredClone(state.projectSettings);\n\t\tconst workflows = projectSettings.workflows;\n\t\tprojectSettings.workflows = Array.isArray(workflows) || workflows === undefined ? paths : { ...workflows, paths };\n\t\tstate.markProjectModified(\"workflows\");\n\t\tstate.saveProjectSettings(projectSettings);\n\t},\n\n\tgetEnableSkillCommands() {\n\t\treturn settingsInternals(this).settings.enableSkillCommands ?? SETTINGS_DEFAULTS.enableSkillCommands;\n\t},\n\n\tsetEnableSkillCommands(enabled) {\n\t\tconst state = settingsInternals(this);\n\t\tstate.globalSettings.enableSkillCommands = enabled;\n\t\tstate.markModified(\"enableSkillCommands\");\n\t\tstate.save();\n\t},\n\n\tgetThinkingBudgets() {\n\t\treturn settingsInternals(this).settings.thinkingBudgets;\n\t},\n};\n\nObject.assign(SettingsManager.prototype, resourceAccessors);\n"]}