@sema-agent/client-core 0.84.1 → 0.85.0

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 (84) hide show
  1. package/CHANGELOG.md +149 -0
  2. package/README.md +18 -11
  3. package/dist/adapt/arms.js +1 -1
  4. package/dist/adapt.d.ts +1 -1
  5. package/dist/adapt.js +1 -1
  6. package/dist/adapter/downstream/terminalToSdkResult.js +9 -5
  7. package/dist/adapter/runStream.js +6 -2
  8. package/dist/agentSession/engineSessionBackgroundStop.d.ts +50 -0
  9. package/dist/agentSession/engineSessionBackgroundStop.js +291 -0
  10. package/dist/agentsWireCaps.d.ts +2 -1
  11. package/dist/cloudConfigWireCaps.js +2 -1
  12. package/dist/corruptSession.d.ts +3 -0
  13. package/dist/corruptSession.js +29 -0
  14. package/dist/corruptSessionCopy.d.ts +1 -0
  15. package/dist/corruptSessionCopy.js +4 -0
  16. package/dist/decideFailureNote.js +4 -1
  17. package/dist/decideReceipt.d.ts +6 -0
  18. package/dist/decideReceipt.js +30 -1
  19. package/dist/effortWire.d.ts +2 -1
  20. package/dist/effortWire.js +2 -4
  21. package/dist/engineErrorCodes.d.ts +9 -0
  22. package/dist/engineErrorCodes.js +29 -0
  23. package/dist/engineNoticeCodes.d.ts +9 -0
  24. package/dist/engineNoticeCodes.js +44 -156
  25. package/dist/engineWireFor.d.ts +43 -0
  26. package/dist/engineWireFor.js +399 -0
  27. package/dist/engineWireSdk.d.ts +4 -0
  28. package/dist/fileHistoryCaptureCapability.d.ts +4 -1
  29. package/dist/fileHistoryCaptureCapability.js +43 -9
  30. package/dist/gateVocabulary.d.ts +1 -2
  31. package/dist/gateVocabulary.js +1 -22
  32. package/dist/generated/engineNoticeTables.d.ts +3 -0
  33. package/dist/generated/engineNoticeTables.js +156 -0
  34. package/dist/generated/toolNameTables.d.ts +2 -0
  35. package/dist/generated/toolNameTables.js +43 -0
  36. package/dist/headlessPermissionModeWire.js +2 -4
  37. package/dist/hitl/frameRouter.js +4 -2
  38. package/dist/hitl/parkResolver.js +3 -1
  39. package/dist/hitl/planReviewWire.d.ts +11 -0
  40. package/dist/hitl/planReviewWire.js +177 -69
  41. package/dist/hitl/rosterMountedNames.d.ts +2 -0
  42. package/dist/hitl/rosterMountedNames.js +38 -0
  43. package/dist/hitl/sessionPolicyDeliverable.d.ts +6 -2
  44. package/dist/hitl/sessionPolicyDeliverable.js +25 -45
  45. package/dist/hitl/sessionPolicyWire.js +1 -38
  46. package/dist/hitl/toolApprovalWire.d.ts +4 -2
  47. package/dist/hitl/toolApprovalWire.js +4 -2
  48. package/dist/index.d.ts +9 -3
  49. package/dist/index.js +6 -2
  50. package/dist/permissionWireCaps.d.ts +2 -1
  51. package/dist/permissionWireCaps.js +2 -7
  52. package/dist/request/taskRequest.d.ts +2 -0
  53. package/dist/request/taskRequest.js +18 -1
  54. package/dist/resumeRefusalCopy.js +4 -2
  55. package/dist/runTerminal.js +4 -0
  56. package/dist/sandboxWire.js +1 -1
  57. package/dist/sealedKeyCapability.d.ts +17 -0
  58. package/dist/sealedKeyCapability.js +42 -0
  59. package/dist/seatContract.d.ts +2 -1
  60. package/dist/seatContract.js +5 -21
  61. package/dist/subagent/engineCompactWire.d.ts +13 -2
  62. package/dist/subagent/engineCompactWire.js +48 -37
  63. package/dist/subagent/engineDelegatedPrompt.d.ts +9 -1
  64. package/dist/subagent/engineDelegatedPrompt.js +16 -16
  65. package/dist/subagent/engineRowStopGate.d.ts +2 -2
  66. package/dist/subagent/engineRowStopGate.js +4 -4
  67. package/dist/subagent/engineSubagentOutput.d.ts +8 -0
  68. package/dist/subagent/engineSubagentOutput.js +37 -18
  69. package/dist/subagent/engineSubagentResume.d.ts +11 -2
  70. package/dist/subagent/engineSubagentResume.js +28 -14
  71. package/dist/subagent/engineSubagentSteer.d.ts +10 -1
  72. package/dist/subagent/engineSubagentSteer.js +16 -11
  73. package/dist/subagent/engineSubagentTail.d.ts +10 -1
  74. package/dist/subagent/engineSubagentTail.js +35 -17
  75. package/dist/subagent/engineTaskHandleWire.d.ts +13 -0
  76. package/dist/subagent/engineTaskHandleWire.js +41 -20
  77. package/dist/taskRequestWords.d.ts +5 -0
  78. package/dist/taskRequestWords.js +4 -0
  79. package/dist/wireErrorTriage.d.ts +1 -0
  80. package/dist/wireErrorTriage.js +3 -1
  81. package/dist/wireRefusalCopy.d.ts +10 -0
  82. package/dist/wireRefusalCopy.js +62 -2
  83. package/docs/INTEGRATION-CLIENTS.md +679 -18
  84. package/package.json +1 -1
@@ -73,6 +73,14 @@ export interface InstructionsSourceChangedFactsView {
73
73
  sessionId: string;
74
74
  }
75
75
  export declare function readInstructionsSourceChanged(notice: unknown): InstructionsSourceChangedFactsView | undefined;
76
+ export type NoticeCountReading = number | 'unknown';
77
+ export interface SessionRecordsSkippedFactsView {
78
+ dropped: NoticeCountReading;
79
+ entriesKept: NoticeCountReading;
80
+ sessionId: string;
81
+ }
82
+ export declare function readSessionRecordsSkipped(notice: unknown): SessionRecordsSkippedFactsView | undefined;
83
+ export declare function sessionRecordsSkippedNote(facts: Pick<SessionRecordsSkippedFactsView, 'entriesKept'>): string | undefined;
76
84
  export declare const ENGINE_NOTICE_FACT_READERS: Readonly<{
77
85
  readonly 'mcp.injection_dropped': typeof readMcpInjectionDrop;
78
86
  readonly 'delegation.ask_unresolvable': typeof readAskUnresolvable;
@@ -82,6 +90,7 @@ export declare const ENGINE_NOTICE_FACT_READERS: Readonly<{
82
90
  readonly 'instructions.source_changed': typeof readInstructionsSourceChanged;
83
91
  readonly 'approval.read_root_granted': typeof readReadRootGrantNotice;
84
92
  readonly 'approval.read_root_grant_rejected': typeof readReadRootGrantNotice;
93
+ readonly 'session.records_skipped': typeof readSessionRecordsSkipped;
85
94
  }>;
86
95
  type FactReaderTable = typeof ENGINE_NOTICE_FACT_READERS;
87
96
  export type EngineNoticeFactsCode = keyof FactReaderTable;
@@ -1,82 +1,10 @@
1
- export const ENGINE_NOTICE_CODES = Object.freeze([
2
- 'config.autocompact_window_clamped',
3
- 'config.env_timeout_discarded',
4
- 'config.materialize_env_discarded',
5
- 'config.models_swapped',
6
- 'config.context_settings_swapped',
7
- 'config.read_face_swapped',
8
- 'config.read_face_deployment_clamped',
9
- 'config.write_face_swapped',
10
- 'config.write_face_deployment_clamped',
11
- 'config.tool_model_gate_removed',
12
- 'config.tool_model_gate_unknown_class',
13
- 'config.tool_model_gate_env_invalid',
14
- 'config.artifact_host_invalid',
15
- 'config.task_root_not_canonical',
16
- 'config.write_protection_target_view_absent',
17
- 'config.write_protection_unresolved',
18
- 'config.execution_env_capability_invalid',
19
- 'config.tool_card_undeclared',
20
- 'config.tool_face_undeclared',
21
- 'config.tool_face_invalid',
22
- 'config.forward_sink_failed',
23
- 'config.durable_gate_unavailable',
24
- 'config.peer_admission_out_of_range',
25
- 'config.peer_lane_unmounted',
26
- 'config.secret_env_scrubbed',
27
- 'peer.inbound_disposition',
28
- 'peer.held_settled',
29
- 'peer.idle_subscription',
30
- 'classifier.denial_limit',
31
- 'classifier.fallback',
32
- 'classifier.role_defaulted',
33
- 'classifier.contract_broken',
34
- 'checkpoint.execution_outcome_unrecorded',
35
- 'delegation.transcript_integrity',
36
- 'delegation.ask_unresolvable',
37
- 'mcp.injection_dropped',
38
- 'mcp.revocation_probe_failed',
39
- 'mcp.server_redialed',
40
- 'workflow.governance_key_stripped',
41
- 'workflow.agent_option_ignored',
42
- 'memory.session_polluted',
43
- 'memory.harvest_quarantined',
44
- 'memory.delegation_static_mark_waived',
45
- 'memory.content_class_declared',
46
- 'memory.hold_opened',
47
- 'memory.hold_released',
48
- 'memory.hold_disposed',
49
- 'memory.consolidation_recommended',
50
- 'memory.consolidation_committed',
51
- 'memory.consolidation_conflict',
52
- 'memory.consolidation_incomplete',
53
- 'memory.consolidation_refused',
54
- 'memory.consolidation_withheld',
55
- 'memory.restore_withheld',
56
- 'memory.project_scope_absent',
57
- 'route.fallback_to_primary',
58
- 'route.classifier_unroutable',
59
- 'route.base_url_changed_key_unchanged',
60
- 'route.response_model_mismatch',
61
- 'task.user_steer_undrained',
62
- 'task.user_followup_undrained',
63
- 'steering.parked_input_blocked',
64
- 'task.turn_interrupted',
65
- 'task.halt_unconsumed',
66
- 'task.late_approval',
67
- 'task.interrupt_unconsumed',
68
- 'approval.read_root_granted',
69
- 'approval.read_root_grant_rejected',
70
- 'memory.capture_opted_out',
71
- 'memory.capture_optout_unpersisted',
72
- 'skills.listing_truncated',
73
- 'agents.listing_truncated',
74
- 'tool_result.offload_put_failed',
75
- ]);
1
+ import { CORE_ENGINE_NOTICE_CODES, CORE_MCP_INJECTION_DROP_REASONS, CORE_NOTICE_AUDIENCE } from './generated/engineNoticeTables.js';
2
+ export const ENGINE_NOTICE_CODES = CORE_ENGINE_NOTICE_CODES;
76
3
  const CATALOG = new Set(ENGINE_NOTICE_CODES);
77
4
  export const SERVER_NOTICE_AUDIENCE = Object.freeze({
78
5
  'instructions.source_changed': 'user',
79
6
  'memory.layer_locked_legacy': 'operator',
7
+ 'session.records_skipped': 'user',
80
8
  });
81
9
  function audienceRow(table, code) {
82
10
  return Object.hasOwn(table, code) ? table[code] : undefined;
@@ -84,92 +12,13 @@ function audienceRow(table, code) {
84
12
  export function engineNoticeInCatalog(code) {
85
13
  return typeof code === 'string' && (CATALOG.has(code) || Object.hasOwn(SERVER_NOTICE_AUDIENCE, code));
86
14
  }
87
- export const ENGINE_NOTICE_AUDIENCE = Object.freeze({
88
- 'config.autocompact_window_clamped': 'operator',
89
- 'config.env_timeout_discarded': 'operator',
90
- 'config.materialize_env_discarded': 'operator',
91
- 'config.models_swapped': 'operator',
92
- 'config.context_settings_swapped': 'operator',
93
- 'config.read_face_swapped': 'operator',
94
- 'config.read_face_deployment_clamped': 'operator',
95
- 'config.write_face_swapped': 'operator',
96
- 'config.write_face_deployment_clamped': 'operator',
97
- 'config.tool_model_gate_removed': 'operator',
98
- 'config.tool_model_gate_unknown_class': 'operator',
99
- 'config.tool_model_gate_env_invalid': 'operator',
100
- 'config.artifact_host_invalid': 'operator',
101
- 'config.task_root_not_canonical': 'operator',
102
- 'config.write_protection_target_view_absent': 'operator',
103
- 'config.write_protection_unresolved': 'operator',
104
- 'config.execution_env_capability_invalid': 'operator',
105
- 'config.tool_card_undeclared': 'operator',
106
- 'config.tool_face_undeclared': 'operator',
107
- 'config.tool_face_invalid': 'operator',
108
- 'config.forward_sink_failed': 'operator',
109
- 'config.durable_gate_unavailable': 'user',
110
- 'config.peer_admission_out_of_range': 'operator',
111
- 'config.peer_lane_unmounted': 'operator',
112
- 'config.secret_env_scrubbed': 'operator',
113
- 'peer.inbound_disposition': 'user',
114
- 'peer.held_settled': 'user',
115
- 'peer.idle_subscription': 'user',
116
- 'classifier.denial_limit': 'user',
117
- 'classifier.fallback': 'operator',
118
- 'classifier.role_defaulted': 'operator',
119
- 'classifier.contract_broken': 'operator',
120
- 'checkpoint.execution_outcome_unrecorded': 'operator',
121
- 'delegation.transcript_integrity': 'operator',
122
- 'delegation.ask_unresolvable': 'user',
123
- 'mcp.injection_dropped': 'user',
124
- 'mcp.revocation_probe_failed': 'operator',
125
- 'mcp.server_redialed': 'operator',
126
- 'workflow.governance_key_stripped': 'operator',
127
- 'workflow.agent_option_ignored': 'operator',
128
- 'memory.session_polluted': 'user',
129
- 'memory.harvest_quarantined': 'user',
130
- 'memory.delegation_static_mark_waived': 'user',
131
- 'memory.content_class_declared': 'operator',
132
- 'memory.hold_opened': 'user',
133
- 'memory.hold_released': 'user',
134
- 'memory.hold_disposed': 'user',
135
- 'memory.consolidation_recommended': 'operator',
136
- 'memory.consolidation_committed': 'operator',
137
- 'memory.consolidation_conflict': 'operator',
138
- 'memory.consolidation_incomplete': 'operator',
139
- 'memory.consolidation_refused': 'operator',
140
- 'memory.consolidation_withheld': 'operator',
141
- 'memory.restore_withheld': 'operator',
142
- 'memory.project_scope_absent': 'operator',
143
- 'route.fallback_to_primary': 'operator',
144
- 'route.classifier_unroutable': 'operator',
145
- 'route.base_url_changed_key_unchanged': 'operator',
146
- 'route.response_model_mismatch': 'operator',
147
- 'task.user_steer_undrained': 'user',
148
- 'task.user_followup_undrained': 'user',
149
- 'steering.parked_input_blocked': 'user',
150
- 'task.turn_interrupted': 'user',
151
- 'task.halt_unconsumed': 'user',
152
- 'task.late_approval': 'user',
153
- 'task.interrupt_unconsumed': 'user',
154
- 'approval.read_root_granted': 'user',
155
- 'approval.read_root_grant_rejected': 'user',
156
- 'memory.capture_opted_out': 'user',
157
- 'memory.capture_optout_unpersisted': 'user',
158
- 'skills.listing_truncated': 'operator',
159
- 'agents.listing_truncated': 'operator',
160
- 'tool_result.offload_put_failed': 'operator',
161
- });
15
+ export const ENGINE_NOTICE_AUDIENCE = CORE_NOTICE_AUDIENCE;
162
16
  export function noticeAudienceOf(code) {
163
17
  if (typeof code !== 'string')
164
18
  return 'operator';
165
19
  return audienceRow(ENGINE_NOTICE_AUDIENCE, code) ?? audienceRow(SERVER_NOTICE_AUDIENCE, code) ?? 'operator';
166
20
  }
167
- export const MCP_INJECTION_DROP_REASONS = Object.freeze([
168
- 'malformed_entry',
169
- 'name_reserved_by_deployment',
170
- 'gate_closed',
171
- 'over_cap',
172
- ]);
21
+ export const MCP_INJECTION_DROP_REASONS = CORE_MCP_INJECTION_DROP_REASONS;
173
22
  const DROP_REASONS = new Set(MCP_INJECTION_DROP_REASONS);
174
23
  export function readMcpInjectionDrop(notice) {
175
24
  if (typeof notice !== 'object' || notice === null || Array.isArray(notice))
@@ -384,6 +233,44 @@ export function readInstructionsSourceChanged(notice) {
384
233
  return undefined;
385
234
  }
386
235
  }
236
+ function countReading(v) {
237
+ return typeof v === 'number' && Number.isInteger(v) && v >= 0 ? v : 'unknown';
238
+ }
239
+ export function readSessionRecordsSkipped(notice) {
240
+ if (typeof notice !== 'object' || notice === null || Array.isArray(notice))
241
+ return undefined;
242
+ try {
243
+ const n = notice;
244
+ if (n.code !== 'session.records_skipped')
245
+ return undefined;
246
+ const d = n.detail;
247
+ if (typeof d !== 'object' || d === null || Array.isArray(d))
248
+ return undefined;
249
+ const o = d;
250
+ const own = (k) => (Object.hasOwn(o, k) ? o[k] : undefined);
251
+ const sid = own('sessionId');
252
+ const sessionId = typeof sid === 'string' && sid.length > 0 ? sid : undefined;
253
+ if (sessionId === undefined)
254
+ return undefined;
255
+ return { dropped: countReading(own('dropped')), entriesKept: countReading(own('entriesKept')), sessionId };
256
+ }
257
+ catch {
258
+ return undefined;
259
+ }
260
+ }
261
+ export function sessionRecordsSkippedNote(facts) {
262
+ let kept;
263
+ try {
264
+ kept = facts !== null && typeof facts === 'object' ? facts.entriesKept : undefined;
265
+ }
266
+ catch {
267
+ kept = undefined;
268
+ }
269
+ if (kept !== 0)
270
+ return undefined;
271
+ return ("None of this session's earlier entries could be read, so this turn runs with an empty context — the model sees nothing of the earlier conversation. " +
272
+ 'If that history matters, whoever operates this engine has to repair the stored log of this session.');
273
+ }
387
274
  export const ENGINE_NOTICE_FACT_READERS = Object.freeze({
388
275
  'mcp.injection_dropped': readMcpInjectionDrop,
389
276
  'delegation.ask_unresolvable': readAskUnresolvable,
@@ -393,6 +280,7 @@ export const ENGINE_NOTICE_FACT_READERS = Object.freeze({
393
280
  'instructions.source_changed': readInstructionsSourceChanged,
394
281
  'approval.read_root_granted': readReadRootGrantNotice,
395
282
  'approval.read_root_grant_rejected': readReadRootGrantNotice,
283
+ 'session.records_skipped': readSessionRecordsSkipped,
396
284
  });
397
285
  const _factReaderTablePin = true;
398
286
  void _factReaderTablePin;
@@ -0,0 +1,43 @@
1
+ import type { AgentClient } from '@sema-agent/sdk';
2
+ import { type EngineWireClientConfig, type EngineWireInjection } from './engineWireSdk.js';
3
+ import { type EngineWireTarget } from './engineWireTarget.js';
4
+ export declare const INJECTED_WIRE_SETTLE_MS = 60000;
5
+ export type EngineWireTargetClientOptions = Pick<EngineWireClientConfig, 'timeoutMs' | 'maxRetries'>;
6
+ export interface EngineWireInjected<C> {
7
+ kind: 'injected';
8
+ client: C;
9
+ capsBaseUrl: string | undefined;
10
+ }
11
+ export interface EngineWireFromTarget {
12
+ kind: 'target';
13
+ target: EngineWireTarget;
14
+ make: (opts?: EngineWireTargetClientOptions) => AgentClient | null;
15
+ }
16
+ export interface EngineWireInjectedUnusable {
17
+ kind: 'injected-unusable';
18
+ }
19
+ export interface EngineWireNoTarget {
20
+ kind: 'no-target';
21
+ }
22
+ export type EngineWireResolution<C> = EngineWireInjected<C> | EngineWireFromTarget | EngineWireInjectedUnusable | EngineWireNoTarget;
23
+ export declare function engineWireFor<C extends object>(wire: EngineWireInjection<C> | undefined, sessionKey: string, usable: (client: object) => client is C): EngineWireResolution<C>;
24
+ export declare function clientHasVerbs(client: object, verbs: ReadonlyArray<ReadonlyArray<string>>): boolean;
25
+ export interface LinkedAbortSignal {
26
+ signal: AbortSignal;
27
+ dispose: () => void;
28
+ }
29
+ export declare function linkedAbortSignal(caller: AbortSignal | null | undefined, deadline: AbortSignal): LinkedAbortSignal;
30
+ export declare function injectedDeadlineDetail(ms?: number): string;
31
+ export declare class EngineWireNoAnswerError extends Error {
32
+ constructor(message: string);
33
+ }
34
+ export declare function cancelledWaitDetail(): string;
35
+ export declare class EngineWireCancelledError extends Error {
36
+ constructor();
37
+ }
38
+ export declare function connectionLostDetail(): string;
39
+ export type EngineWireNoAnswerKind = 'deadline' | 'time-limit' | 'connection-lost' | 'cancelled';
40
+ export declare function noAnswerKindOf(e: object | null | undefined): EngineWireNoAnswerKind | null;
41
+ export declare function noAnswerDetailFrom(e: object | null | undefined): string | null;
42
+ export declare function sendOnce<T>(signal: AbortSignal | null | undefined, run: () => Promise<T>): Promise<T>;
43
+ export declare function settleInjected<T>(ms: number, signal: AbortSignal | null | undefined, run: (signal: AbortSignal) => Promise<T>): Promise<T>;