@myagentroam/agent 0.9.158 → 0.9.160
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-core/extensions/agents.d.ts +69 -0
- package/dist/agent-core/extensions/agents.js +160 -0
- package/dist/agent-core/extensions/contracts.d.ts +260 -0
- package/dist/agent-core/extensions/contracts.js +1 -0
- package/dist/agent-core/extensions/data.d.ts +84 -0
- package/dist/agent-core/extensions/data.js +83 -0
- package/dist/agent-core/extensions/environment.d.ts +27 -0
- package/dist/agent-core/extensions/environment.js +52 -0
- package/dist/agent-core/extensions/files.d.ts +64 -0
- package/dist/agent-core/extensions/files.js +26 -0
- package/dist/agent-core/extensions/hooks.d.ts +32 -0
- package/dist/agent-core/extensions/hooks.js +135 -0
- package/dist/agent-core/extensions/manager.d.ts +39 -0
- package/dist/agent-core/extensions/manager.js +458 -0
- package/dist/agent-core/extensions/mcp.d.ts +99 -0
- package/dist/agent-core/extensions/mcp.js +433 -0
- package/dist/agent-core/extensions/model-request.d.ts +60 -0
- package/dist/agent-core/extensions/model-request.js +167 -0
- package/dist/agent-core/extensions/model-stream.d.ts +9 -0
- package/dist/agent-core/extensions/model-stream.js +101 -0
- package/dist/agent-core/extensions/models.d.ts +43 -0
- package/dist/agent-core/extensions/models.js +1 -0
- package/dist/agent-core/extensions/network.d.ts +32 -0
- package/dist/agent-core/extensions/network.js +97 -0
- package/dist/agent-core/extensions/operation.d.ts +29 -0
- package/dist/agent-core/extensions/operation.js +98 -0
- package/dist/agent-core/extensions/processes.d.ts +52 -0
- package/dist/agent-core/extensions/processes.js +283 -0
- package/dist/agent-core/extensions/prompt-composition.d.ts +24 -0
- package/dist/agent-core/extensions/prompt-composition.js +106 -0
- package/dist/agent-core/extensions/prompt-input.d.ts +23 -0
- package/dist/agent-core/extensions/prompt-input.js +46 -0
- package/dist/agent-core/extensions/resources.d.ts +27 -0
- package/dist/agent-core/extensions/resources.js +221 -0
- package/dist/agent-core/extensions/services.d.ts +31 -0
- package/dist/agent-core/extensions/services.js +61 -0
- package/dist/agent-core/extensions/session-input.d.ts +151 -0
- package/dist/agent-core/extensions/session-input.js +351 -0
- package/dist/agent-core/extensions/session-messages.d.ts +41 -0
- package/dist/agent-core/extensions/session-messages.js +76 -0
- package/dist/agent-core/extensions/session.d.ts +68 -0
- package/dist/agent-core/extensions/session.js +593 -0
- package/dist/agent-core/extensions/settings.d.ts +59 -0
- package/dist/agent-core/extensions/settings.js +115 -0
- package/dist/agent-core/extensions/store.d.ts +10 -0
- package/dist/agent-core/extensions/store.js +131 -0
- package/dist/agent-core/extensions/tools.d.ts +61 -0
- package/dist/agent-core/extensions/tools.js +266 -0
- package/dist/agent-core/host/contracts.d.ts +25 -0
- package/dist/agent-core/host/local-agent-host.d.ts +10 -1
- package/dist/agent-core/host/local-agent-host.js +132 -20
- package/dist/agent-core/host/local-file-access.d.ts +30 -0
- package/dist/agent-core/host/local-file-access.js +107 -0
- package/dist/agent-core/host/local-network-access.d.ts +6 -0
- package/dist/agent-core/host/local-network-access.js +97 -0
- package/dist/agent-core/host/local-process-executor.d.ts +5 -1
- package/dist/agent-core/host/local-session-environment.d.ts +18 -0
- package/dist/agent-core/host/local-session-environment.js +102 -0
- package/dist/agent-core/model/anthropic-messages.js +73 -23
- package/dist/agent-core/model/contracts.d.ts +21 -0
- package/dist/agent-core/model/openai-responses.d.ts +3 -1
- package/dist/agent-core/model/openai-responses.js +248 -97
- package/dist/agent-core/model/text-blocks.d.ts +7 -0
- package/dist/agent-core/model/text-blocks.js +40 -0
- package/dist/agent-core/prompts/index.d.ts +6 -2
- package/dist/agent-core/prompts/index.js +38 -24
- package/dist/agent-core/runtime/context/gc-tokens.js +6 -1
- package/dist/agent-core/runtime/context/normalize.js +21 -1
- package/dist/agent-core/runtime/context/projection.js +35 -1
- package/dist/agent-core/runtime/context/request-budget.js +5 -2
- package/dist/agent-core/runtime/context/restore.d.ts +5 -0
- package/dist/agent-core/runtime/context/restore.js +47 -4
- package/dist/agent-core/runtime/context/usage.js +2 -3
- package/dist/agent-core/runtime/contracts.d.ts +2 -0
- package/dist/agent-core/runtime/execution.js +5 -2
- package/dist/agent-core/sdk/agent.js +177 -40
- package/dist/agent-core/sdk/extension-agents.d.ts +9 -0
- package/dist/agent-core/sdk/extension-agents.js +51 -0
- package/dist/agent-core/sdk/extension-models.d.ts +13 -0
- package/dist/agent-core/sdk/extension-models.js +128 -0
- package/dist/agent-core/sdk/extension-session.d.ts +30 -0
- package/dist/agent-core/sdk/extension-session.js +103 -0
- package/dist/agent-core/sdk/extension-tools.d.ts +16 -0
- package/dist/agent-core/sdk/extension-tools.js +126 -0
- package/dist/agent-core/sdk/session.d.ts +26 -2
- package/dist/agent-core/sdk/session.js +1215 -506
- package/dist/agent-core/sdk/types.d.ts +3 -0
- package/dist/agent-core/session/context-gc-checkpoint.js +1 -1
- package/dist/agent-core/session/jsonl-store.d.ts +28 -8
- package/dist/agent-core/session/jsonl-store.js +124 -84
- package/dist/agent-core/session/types.d.ts +4 -1
- package/dist/agent-core/storage/file-lock.d.ts +4 -0
- package/dist/agent-core/storage/file-lock.js +83 -0
- package/dist/agent-core/subagent/contracts.d.ts +11 -1
- package/dist/agent-core/subagent/scheduler.d.ts +8 -0
- package/dist/agent-core/subagent/session-controller.d.ts +22 -1
- package/dist/agent-core/subagent/session-controller.js +355 -98
- package/dist/agent-core/tools/agent/agent-start.d.ts +1 -1
- package/dist/agent-core/tools/code-mode/cells.js +5 -15
- package/dist/agent-core/tools/code-mode/dispatch.d.ts +1 -0
- package/dist/agent-core/tools/code-mode/dispatch.js +13 -1
- package/dist/agent-core/tools/code-mode/index.js +1 -2
- package/dist/agent-core/tools/code-mode/observations.d.ts +5 -0
- package/dist/agent-core/tools/code-mode/observations.js +16 -5
- package/dist/agent-core/tools/code-mode/quickjs-engine.js +10 -5
- package/dist/agent-core/tools/execution.d.ts +11 -2
- package/dist/agent-core/tools/execution.js +58 -21
- package/dist/agent-core/tools/input.d.ts +2 -0
- package/dist/agent-core/tools/input.js +36 -0
- package/dist/agent-core/tools/local/apply-patch.js +21 -17
- package/dist/agent-core/tools/local/exec.d.ts +4 -4
- package/dist/agent-core/tools/local/exec.js +234 -62
- package/dist/agent-core/tools/local/registry.d.ts +6 -0
- package/dist/agent-core/tools/local/registry.js +60 -9
- package/dist/agent-core/tools/local/view-image.js +108 -2
- package/dist/agent-core/tools/mcp/catalog.d.ts +6 -2
- package/dist/agent-core/tools/mcp/catalog.js +4 -4
- package/dist/agent-core/tools/mcp/history.js +2 -2
- package/dist/agent-core/tools/mcp/tool-search.d.ts +3 -1
- package/dist/agent-core/tools/mcp/tool-search.js +2 -2
- package/dist/agent-core/tools/output-projection.d.ts +3 -1
- package/dist/agent-core/tools/output-projection.js +11 -2
- package/dist/agent-core/tools/runtime-context.d.ts +1 -0
- package/dist/agent-core/tools/runtime.d.ts +3 -1
- package/dist/agent-core/tools/runtime.js +22 -7
- package/dist/agent-core/tools/scheduler.d.ts +2 -0
- package/dist/agent-core/tools/scheduler.js +43 -6
- package/dist/index.d.ts +21 -0
- package/dist/sandbox/linux/bubblewrap-sandbox-executor.js +5 -2
- package/package.json +1 -1
|
@@ -5,6 +5,7 @@ import { resolveModelDefaultReasoningEffort } from './configuration.js';
|
|
|
5
5
|
import { isRetryableUpstreamOverloadCode, number, parseSse, record, text, observeModelStreamEvent, modelStreamEventObservedAt } from './sse.js';
|
|
6
6
|
import { fetchModelResponse, modelRetryMaxAttempts, isRetryableModelRequestError, isRetryableModelTransportError, waitForModelRetry } from './http.js';
|
|
7
7
|
import { anthropicThinkingBlock, assertAnthropicThinkingBudget } from './anthropic-thinking.js';
|
|
8
|
+
import { resolveModelTextBlocks } from './text-blocks.js';
|
|
8
9
|
export class AnthropicMessagesAdapter {
|
|
9
10
|
configuration;
|
|
10
11
|
constructor(configuration) {
|
|
@@ -74,20 +75,25 @@ export class AnthropicMessagesAdapter {
|
|
|
74
75
|
},
|
|
75
76
|
body: JSON.stringify({
|
|
76
77
|
model: this.configuration.modelId,
|
|
77
|
-
system:
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
78
|
+
system: request.systemBlocks !== undefined
|
|
79
|
+
? anthropicTextBlocks(request.system, request.systemBlocks)
|
|
80
|
+
: request.system
|
|
81
|
+
? [
|
|
82
|
+
{
|
|
83
|
+
type: 'text',
|
|
84
|
+
text: request.system,
|
|
85
|
+
cache_control: { type: 'ephemeral' }
|
|
86
|
+
}
|
|
87
|
+
]
|
|
88
|
+
: [],
|
|
89
|
+
messages: anthropicMessages(request.messages, request.images, request.tools, this.configuration.id, request.systemBlocks === undefined &&
|
|
90
|
+
request.messages.every((message) => message.textBlocks === undefined), request.cachePrefixMessages),
|
|
85
91
|
tools,
|
|
86
92
|
...(request.toolChoice === undefined
|
|
87
93
|
? {}
|
|
88
94
|
: { tool_choice: { type: request.toolChoice } }),
|
|
89
95
|
stream: true,
|
|
90
|
-
max_tokens: this.configuration.maxOutputTokens,
|
|
96
|
+
max_tokens: Math.min(request.outputLimit ?? this.configuration.maxOutputTokens, this.configuration.maxOutputTokens),
|
|
91
97
|
output_config: {
|
|
92
98
|
effort: request.reasoningEffort?.trim() ||
|
|
93
99
|
resolveModelDefaultReasoningEffort(this.configuration)
|
|
@@ -452,12 +458,20 @@ function boundedError(value, maximum) {
|
|
|
452
458
|
return undefined;
|
|
453
459
|
return [...normalized].slice(0, maximum).join('');
|
|
454
460
|
}
|
|
455
|
-
function anthropicMessages(messages, images, tools = [], modelId) {
|
|
461
|
+
function anthropicMessages(messages, images, tools = [], modelId, automaticCache = true, cachePrefixMessages) {
|
|
462
|
+
if (cachePrefixMessages !== undefined &&
|
|
463
|
+
(!Number.isSafeInteger(cachePrefixMessages) ||
|
|
464
|
+
cachePrefixMessages < 0 ||
|
|
465
|
+
cachePrefixMessages > messages.length))
|
|
466
|
+
throw new MarAgentError('MAR_AGENT_MODEL_REQUEST_INVALID', 'The captured cache prefix is invalid.');
|
|
456
467
|
const imageMessage = messages.findLastIndex((message) => message.role === 'user');
|
|
457
468
|
const toolDefinitions = new Map(tools.map((tool) => [tool.name, tool]));
|
|
458
469
|
const result = [];
|
|
459
470
|
let thinkingBytes = 0;
|
|
460
471
|
for (const [index, message] of messages.entries()) {
|
|
472
|
+
if (index === cachePrefixMessages)
|
|
473
|
+
for (const prior of result.slice(-2))
|
|
474
|
+
prior.content = withCacheBreakpoint(prior.content);
|
|
461
475
|
const userImages = message.role === 'user'
|
|
462
476
|
? uniqueModelImages(message.images, index === imageMessage ? images : undefined)
|
|
463
477
|
: [];
|
|
@@ -494,6 +508,7 @@ function anthropicMessages(messages, images, tools = [], modelId) {
|
|
|
494
508
|
const block = {
|
|
495
509
|
type: 'tool_result',
|
|
496
510
|
tool_use_id: message.callId,
|
|
511
|
+
...(message.isError === undefined ? {} : { is_error: message.isError }),
|
|
497
512
|
content: observationModelParts(message)?.map((part) => part.type === 'text'
|
|
498
513
|
? { type: 'text', text: part.text }
|
|
499
514
|
: {
|
|
@@ -504,10 +519,10 @@ function anthropicMessages(messages, images, tools = [], modelId) {
|
|
|
504
519
|
data: part.image.dataBase64
|
|
505
520
|
}
|
|
506
521
|
}) ??
|
|
507
|
-
(message.
|
|
522
|
+
(message.textBlocks !== undefined
|
|
508
523
|
? [
|
|
509
|
-
|
|
510
|
-
...message.images.map((image) => ({
|
|
524
|
+
...anthropicTextBlocks(message.content, message.textBlocks),
|
|
525
|
+
...(message.images ?? []).map((image) => ({
|
|
511
526
|
type: 'image',
|
|
512
527
|
source: {
|
|
513
528
|
type: 'base64',
|
|
@@ -516,7 +531,19 @@ function anthropicMessages(messages, images, tools = [], modelId) {
|
|
|
516
531
|
}
|
|
517
532
|
}))
|
|
518
533
|
]
|
|
519
|
-
: message.
|
|
534
|
+
: message.images?.length
|
|
535
|
+
? [
|
|
536
|
+
{ type: 'text', text: message.content },
|
|
537
|
+
...message.images.map((image) => ({
|
|
538
|
+
type: 'image',
|
|
539
|
+
source: {
|
|
540
|
+
type: 'base64',
|
|
541
|
+
media_type: image.mimeType,
|
|
542
|
+
data: image.dataBase64
|
|
543
|
+
}
|
|
544
|
+
}))
|
|
545
|
+
]
|
|
546
|
+
: message.content)
|
|
520
547
|
};
|
|
521
548
|
const previous = result.at(-1);
|
|
522
549
|
if (previous?.role === 'user' && Array.isArray(previous.content))
|
|
@@ -526,19 +553,21 @@ function anthropicMessages(messages, images, tools = [], modelId) {
|
|
|
526
553
|
continue;
|
|
527
554
|
}
|
|
528
555
|
if (message.role === 'assistant') {
|
|
529
|
-
if (!message.content)
|
|
556
|
+
if (!message.content && message.textBlocks === undefined)
|
|
530
557
|
continue;
|
|
531
|
-
const
|
|
558
|
+
const blocks = message.textBlocks !== undefined
|
|
559
|
+
? anthropicTextBlocks(message.content, message.textBlocks)
|
|
560
|
+
: [{ type: 'text', text: message.content }];
|
|
532
561
|
const previous = result.at(-1);
|
|
533
562
|
if (previous?.role === 'assistant' && Array.isArray(previous.content))
|
|
534
|
-
previous.content.push(
|
|
563
|
+
previous.content.push(...blocks);
|
|
535
564
|
else
|
|
536
|
-
result.push({ role: 'assistant', content:
|
|
565
|
+
result.push({ role: 'assistant', content: blocks });
|
|
537
566
|
continue;
|
|
538
567
|
}
|
|
539
568
|
result.push({
|
|
540
569
|
role: message.role,
|
|
541
|
-
content:
|
|
570
|
+
content: message.textBlocks !== undefined
|
|
542
571
|
? [
|
|
543
572
|
...userImages.map((image) => ({
|
|
544
573
|
type: 'image',
|
|
@@ -548,15 +577,36 @@ function anthropicMessages(messages, images, tools = [], modelId) {
|
|
|
548
577
|
data: image.dataBase64
|
|
549
578
|
}
|
|
550
579
|
})),
|
|
551
|
-
|
|
580
|
+
...anthropicTextBlocks(message.content, message.textBlocks)
|
|
552
581
|
]
|
|
553
|
-
:
|
|
582
|
+
: userImages.length > 0
|
|
583
|
+
? [
|
|
584
|
+
...userImages.map((image) => ({
|
|
585
|
+
type: 'image',
|
|
586
|
+
source: {
|
|
587
|
+
type: 'base64',
|
|
588
|
+
media_type: image.mimeType,
|
|
589
|
+
data: image.dataBase64
|
|
590
|
+
}
|
|
591
|
+
})),
|
|
592
|
+
{ type: 'text', text: message.content }
|
|
593
|
+
]
|
|
594
|
+
: message.content
|
|
554
595
|
});
|
|
555
596
|
}
|
|
556
|
-
|
|
557
|
-
|
|
597
|
+
if (cachePrefixMessages === messages.length ||
|
|
598
|
+
(cachePrefixMessages === undefined && automaticCache))
|
|
599
|
+
for (const message of result.slice(-2))
|
|
600
|
+
message.content = withCacheBreakpoint(message.content);
|
|
558
601
|
return result;
|
|
559
602
|
}
|
|
603
|
+
function anthropicTextBlocks(text, blocks) {
|
|
604
|
+
return resolveModelTextBlocks(text, blocks).map((block) => ({
|
|
605
|
+
type: 'text',
|
|
606
|
+
text: block.text,
|
|
607
|
+
...(block.cache ? { cache_control: { type: 'ephemeral' } } : {})
|
|
608
|
+
}));
|
|
609
|
+
}
|
|
560
610
|
function uniqueModelImages(...groups) {
|
|
561
611
|
const seen = new Set();
|
|
562
612
|
return groups.flatMap((group) => (group ?? []).flatMap((image) => {
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
import type { ClientToolDefinition } from '../tools/contracts.js';
|
|
2
2
|
import type { MarAgentModelConfiguration, MarAgentReasoningEffort, ModelCredentialAcquireReason } from './configuration.js';
|
|
3
3
|
export type { ClientToolDefinition, ToolCaller } from '../tools/contracts.js';
|
|
4
|
+
export interface ModelTextBlock {
|
|
5
|
+
readonly text: string;
|
|
6
|
+
readonly cache?: true;
|
|
7
|
+
}
|
|
4
8
|
export interface ModelMessage {
|
|
9
|
+
/** Model-facing tool-result status; independent of the actual execution outcome. */
|
|
10
|
+
isError?: boolean;
|
|
5
11
|
calls?: readonly import('../tools/code-mode/observations.js').CodeToolCallRecord[];
|
|
6
12
|
role: 'user' | 'assistant' | 'tool' | 'tool_call' | 'provider';
|
|
7
13
|
content: string;
|
|
14
|
+
textBlocks?: readonly ModelTextBlock[];
|
|
8
15
|
contextKind?: 'environment' | 'private';
|
|
9
16
|
callId?: string;
|
|
10
17
|
name?: string;
|
|
@@ -36,6 +43,15 @@ export interface ModelAttemptDiagnostic {
|
|
|
36
43
|
connectionId?: string;
|
|
37
44
|
connectionReused?: boolean;
|
|
38
45
|
proxyType?: 'DIRECT' | 'SOCKS5';
|
|
46
|
+
/** Actual serialized WebSocket request size, including inline image Base64. */
|
|
47
|
+
requestBytes?: number;
|
|
48
|
+
imageCount?: number;
|
|
49
|
+
/** Decoded byte count of inline input images; external URLs do not add bytes. */
|
|
50
|
+
imageBytes?: number;
|
|
51
|
+
requestFrameCount?: number;
|
|
52
|
+
sentFrameCount?: number;
|
|
53
|
+
webSocketPhase?: 'CONNECT' | 'SEND' | 'RECEIVE';
|
|
54
|
+
webSocketCloseCode?: number;
|
|
39
55
|
durationMs?: number;
|
|
40
56
|
errorCode?: string;
|
|
41
57
|
errorMessage?: string;
|
|
@@ -55,8 +71,13 @@ export interface ModelRequest {
|
|
|
55
71
|
/** Shared local attempt accounting across Adapter retries and Runtime continuation. Never sent upstream. */
|
|
56
72
|
retryState?: ModelRetryState;
|
|
57
73
|
system: string;
|
|
74
|
+
systemBlocks?: readonly ModelTextBlock[];
|
|
75
|
+
/** Retain the automatic cache boundary of an actual captured prefix, excluding a fork tail. */
|
|
76
|
+
cachePrefixMessages?: number;
|
|
58
77
|
messages: readonly ModelMessage[];
|
|
59
78
|
tools: readonly ClientToolDefinition[];
|
|
79
|
+
/** Optional per-request cap; adapters never exceed their configured output ceiling. */
|
|
80
|
+
outputLimit?: number;
|
|
60
81
|
allowTools?: boolean;
|
|
61
82
|
/** Preserve the visible tool catalog while controlling whether the model may call it. */
|
|
62
83
|
toolChoice?: 'auto' | 'none';
|
|
@@ -25,6 +25,7 @@ interface PreparedResponsesRequest {
|
|
|
25
25
|
readonly body: ResponsesRequestBody;
|
|
26
26
|
readonly continuation: boolean;
|
|
27
27
|
}
|
|
28
|
+
type ResponsesWebSocketDiagnostic = Pick<ModelAttemptDiagnostic, 'requestBytes' | 'imageCount' | 'imageBytes' | 'requestFrameCount' | 'sentFrameCount' | 'webSocketPhase' | 'webSocketCloseCode'>;
|
|
28
29
|
export declare class OpenAiResponsesAdapter implements ModelAdapter {
|
|
29
30
|
#private;
|
|
30
31
|
constructor(configuration: MarAgentModelConfiguration);
|
|
@@ -51,7 +52,8 @@ declare class OpenAiResponsesTurnSession implements ModelTurnSession {
|
|
|
51
52
|
fullRequestBody(): ResponsesRequestBody;
|
|
52
53
|
currentTurnState(): string | undefined;
|
|
53
54
|
beginAttempt(): void;
|
|
54
|
-
|
|
55
|
+
captureWebSocketDiagnostic(diagnostic: ResponsesWebSocketDiagnostic): void;
|
|
56
|
+
connectionDiagnostic(): Pick<ModelAttemptDiagnostic, 'connectionId' | 'connectionReused' | 'proxyType'> & ResponsesWebSocketDiagnostic;
|
|
55
57
|
captureTurnState(value: unknown): void;
|
|
56
58
|
withTurnStateMetadata(body: ResponsesRequestBody): ResponsesRequestBody;
|
|
57
59
|
invalidateWebSocket(): void;
|