@myagentroam/agent 0.9.61 → 0.9.64
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/LICENSE +202 -0
- package/NOTICE +4 -0
- package/dist/cli/codex-auth-file.js +268 -3
- package/dist/cli/main.js +427 -2
- package/dist/error.js +66 -2
- package/dist/host/contracts.js +20 -2
- package/dist/host/local-agent-host.js +146 -2
- package/dist/host/local-process-executor.js +39 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +12 -2
- package/dist/model/anthropic-messages.js +474 -2
- package/dist/model/anthropic-thinking.js +33 -2
- package/dist/model/catalog-file.js +88 -2
- package/dist/model/configuration.js +137 -2
- package/dist/model/contracts.d.ts +2 -0
- package/dist/model/contracts.js +1 -2
- package/dist/model/http.js +529 -2
- package/dist/model/openai-responses.d.ts +2 -0
- package/dist/model/openai-responses.js +1602 -2
- package/dist/model/runtime-credential.js +35 -2
- package/dist/model/sse.js +199 -2
- package/dist/prompts/compact.js +25 -2
- package/dist/prompts/core.js +37 -2
- package/dist/prompts/execution-budget.js +10 -2
- package/dist/prompts/index.d.ts +3 -2
- package/dist/prompts/index.js +47 -2
- package/dist/prompts/modes.js +25 -2
- package/dist/prompts/output.js +1 -2
- package/dist/prompts/resources.d.ts +1 -1
- package/dist/prompts/resources.js +31 -2
- package/dist/prompts/subagent.d.ts +6 -0
- package/dist/prompts/subagent.js +29 -2
- package/dist/prompts/title.js +9 -2
- package/dist/prompts/workflow.js +32 -2
- package/dist/runtime/async-queue.js +62 -2
- package/dist/runtime/builtin-skills.js +19 -2
- package/dist/runtime/byted-ark-imagegen-skill.js +18 -2
- package/dist/runtime/codex-imagegen-skill.js +35 -2
- package/dist/runtime/compact.js +225 -2
- package/dist/runtime/context-gc-runtime.d.ts +35 -0
- package/dist/runtime/context-gc-runtime.js +163 -0
- package/dist/runtime/context-gc-tokens.d.ts +24 -0
- package/dist/runtime/context-gc-tokens.js +83 -0
- package/dist/runtime/context-gc.d.ts +66 -0
- package/dist/runtime/context-gc.js +909 -0
- package/dist/runtime/context-projection.d.ts +23 -0
- package/dist/runtime/context-projection.js +203 -0
- package/dist/runtime/environment-context.js +41 -2
- package/dist/runtime/execution-policy.js +13 -2
- package/dist/runtime/instructions.js +298 -2
- package/dist/runtime/normalize.js +40 -2
- package/dist/runtime/plan-output.js +95 -2
- package/dist/runtime/rollout-budget.d.ts +2 -0
- package/dist/runtime/rollout-budget.js +92 -2
- package/dist/runtime/token-budget.d.ts +2 -0
- package/dist/runtime/token-budget.js +44 -2
- package/dist/sdk/agent.js +1804 -2
- package/dist/sdk/types.d.ts +15 -5
- package/dist/sdk/types.js +1 -2
- package/dist/session/catalog.d.ts +5 -4
- package/dist/session/catalog.js +133 -2
- package/dist/session/context-gc-checkpoint.d.ts +148 -0
- package/dist/session/context-gc-checkpoint.js +665 -0
- package/dist/session/context-gc-replacements.d.ts +52 -0
- package/dist/session/context-gc-replacements.js +226 -0
- package/dist/session/context-gc-subagent.d.ts +43 -0
- package/dist/session/context-gc-subagent.js +267 -0
- package/dist/session/jsonl-store.d.ts +42 -4
- package/dist/session/jsonl-store.js +1657 -2
- package/dist/subagent/scheduler.d.ts +35 -2
- package/dist/subagent/scheduler.js +249 -2
- package/dist/subagent/session-controller.d.ts +94 -0
- package/dist/subagent/session-controller.js +675 -0
- package/dist/tools/agent-cancel.js +28 -2
- package/dist/tools/{task.d.ts → agent-message.d.ts} +2 -2
- package/dist/tools/agent-message.js +51 -0
- package/dist/tools/agent-start.js +84 -2
- package/dist/tools/agent-wait.js +53 -2
- package/dist/tools/apply-patch.js +478 -2
- package/dist/tools/code-mode.js +370 -2
- package/dist/tools/codex-image-gen.js +312 -2
- package/dist/tools/exec.js +455 -2
- package/dist/tools/execution-limits.d.ts +1 -0
- package/dist/tools/execution-limits.js +44 -2
- package/dist/tools/local-registry.js +233 -2
- package/dist/tools/local-workspace-tools.js +28 -2
- package/dist/tools/question.js +124 -2
- package/dist/tools/read-context.d.ts +16 -0
- package/dist/tools/read-context.js +85 -0
- package/dist/tools/read.d.ts +13 -0
- package/dist/tools/read.js +294 -2
- package/dist/tools/registry.js +76 -2
- package/dist/tools/runtime-context.d.ts +9 -2
- package/dist/tools/runtime-context.js +1 -2
- package/dist/tools/runtime.js +21 -2
- package/dist/tools/scheduler.js +41 -2
- package/dist/tools/shared/path-resolver.js +133 -2
- package/dist/tools/skill.js +37 -2
- package/dist/tools/todo-read.js +10 -2
- package/dist/tools/todo-write.js +65 -2
- package/dist/tools/todo.js +67 -2
- package/dist/tools/view-image.js +81 -2
- package/dist/tools/web-fetch.js +11 -2
- package/dist/tools/web-search.js +14 -2
- package/package.json +17 -15
- package/README.md +0 -3
- package/dist/runtime/prompt.d.ts +0 -9
- package/dist/runtime/prompt.js +0 -2
- package/dist/tools/shared/secret-redaction.d.ts +0 -4
- package/dist/tools/shared/secret-redaction.js +0 -2
- package/dist/tools/task-cancel.d.ts +0 -7
- package/dist/tools/task-cancel.js +0 -2
- package/dist/tools/task-output.d.ts +0 -7
- package/dist/tools/task-output.js +0 -2
- package/dist/tools/task-tools.d.ts +0 -36
- package/dist/tools/task-tools.js +0 -2
- package/dist/tools/task.js +0 -2
- package/dist/tools/todo-tools.d.ts +0 -25
- package/dist/tools/todo-tools.js +0 -2
|
@@ -1,2 +1,88 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { mkdir, readFile, rename, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { MarAgentError } from '../error.js';
|
|
5
|
+
import { parseModelCatalog } from './configuration.js';
|
|
6
|
+
export const modelCatalogPath = (home) => join(home, '.mar', 'agent', 'models.json');
|
|
7
|
+
export async function readModelCatalog(home) {
|
|
8
|
+
try {
|
|
9
|
+
return parseCliModelCatalog(JSON.parse(await readFile(modelCatalogPath(home), 'utf8')), {
|
|
10
|
+
allowLoopbackHttp: true
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
catch (cause) {
|
|
14
|
+
if (cause instanceof MarAgentError)
|
|
15
|
+
throw cause;
|
|
16
|
+
if (cause.code === 'ENOENT')
|
|
17
|
+
return { version: 1, models: [] };
|
|
18
|
+
throw new MarAgentError('MAR_AGENT_MODEL_CONFIG_INVALID', 'Model catalog cannot be read.', {
|
|
19
|
+
cause
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export async function writeModelCatalog(home, catalog) {
|
|
24
|
+
const path = modelCatalogPath(home);
|
|
25
|
+
await mkdir(join(home, '.mar', 'agent'), { recursive: true });
|
|
26
|
+
const raw = {
|
|
27
|
+
version: 1,
|
|
28
|
+
...(catalog.defaultModelId ? { defaultModelId: catalog.defaultModelId } : {}),
|
|
29
|
+
models: catalog.models.map(serializeModel)
|
|
30
|
+
};
|
|
31
|
+
parseCliModelCatalog(raw, { allowLoopbackHttp: true });
|
|
32
|
+
const temporary = `${path}.${randomUUID()}.tmp`;
|
|
33
|
+
await writeFile(temporary, `${JSON.stringify(raw, null, 2)}\n`, { mode: 0o600 });
|
|
34
|
+
await rename(temporary, path);
|
|
35
|
+
}
|
|
36
|
+
export function serializeModel(model) {
|
|
37
|
+
const { apiKey, credentialProvider, credentialSource, ...configuration } = model;
|
|
38
|
+
if (apiKey !== undefined) {
|
|
39
|
+
if (credentialProvider !== undefined || credentialSource !== undefined)
|
|
40
|
+
throw new MarAgentError('MAR_AGENT_MODEL_CONFIG_INVALID', 'Model credential sources are ambiguous.');
|
|
41
|
+
return { ...configuration, apiKey: apiKey.reveal() };
|
|
42
|
+
}
|
|
43
|
+
if (credentialSource !== undefined)
|
|
44
|
+
return {
|
|
45
|
+
...configuration,
|
|
46
|
+
credential: { type: credentialSource }
|
|
47
|
+
};
|
|
48
|
+
throw new MarAgentError('MAR_AGENT_MODEL_CONFIG_INVALID', 'Dynamic model credentials cannot be persisted without an external credential marker.');
|
|
49
|
+
}
|
|
50
|
+
function parseCliModelCatalog(input, options = {}) {
|
|
51
|
+
if (!isRecord(input) || !Array.isArray(input.models))
|
|
52
|
+
return parseModelCatalog(input, options);
|
|
53
|
+
const externalCredentialModels = new Set();
|
|
54
|
+
const normalizedModels = input.models.map((model, index) => {
|
|
55
|
+
if (!isRecord(model) || !Object.hasOwn(model, 'credential'))
|
|
56
|
+
return model;
|
|
57
|
+
const credential = model.credential;
|
|
58
|
+
if (!isRecord(credential) ||
|
|
59
|
+
credential.type !== 'CODEX_AUTH_FILE' ||
|
|
60
|
+
Object.keys(credential).length !== 1)
|
|
61
|
+
throw invalidCatalog();
|
|
62
|
+
if (Object.hasOwn(model, 'apiKey'))
|
|
63
|
+
throw invalidCatalog();
|
|
64
|
+
externalCredentialModels.add(index);
|
|
65
|
+
const { credential: _credential, ...configuration } = model;
|
|
66
|
+
void _credential;
|
|
67
|
+
return { ...configuration, apiKey: '__MAR_AGENT_EXTERNAL_CREDENTIAL__' };
|
|
68
|
+
});
|
|
69
|
+
const parsed = parseModelCatalog({ ...input, models: normalizedModels }, options);
|
|
70
|
+
return {
|
|
71
|
+
...parsed,
|
|
72
|
+
models: parsed.models.map((model, index) => {
|
|
73
|
+
if (!externalCredentialModels.has(index))
|
|
74
|
+
return model;
|
|
75
|
+
if (model.protocol !== 'OPENAI_RESPONSES')
|
|
76
|
+
throw invalidCatalog();
|
|
77
|
+
const { apiKey: _apiKey, ...configuration } = model;
|
|
78
|
+
void _apiKey;
|
|
79
|
+
return { ...configuration, credentialSource: 'CODEX_AUTH_FILE' };
|
|
80
|
+
})
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
function isRecord(value) {
|
|
84
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
85
|
+
}
|
|
86
|
+
function invalidCatalog() {
|
|
87
|
+
return new MarAgentError('MAR_AGENT_MODEL_CONFIG_INVALID', 'Model catalog is invalid.');
|
|
88
|
+
}
|
|
@@ -1,2 +1,137 @@
|
|
|
1
|
-
|
|
2
|
-
const _0x33cee9=_0x5b24;(function(_0x307ef6,_0xfb7657){const _0x815a29=_0x5b24,_0x2e5df6=_0x307ef6();while(!![]){try{const _0x12c9fa=-parseInt(_0x815a29(0x168))/(0x2243*-0x1+0x124*-0xc+0x2ff4)+parseInt(_0x815a29(0x15e))/(-0x1*0x1048+-0x1ad3+0x2b1d)*(-parseInt(_0x815a29(0x178))/(0xfdb+0x1020+-0x7c*0x42))+-parseInt(_0x815a29(0x12b))/(0x1*-0x21a9+-0x26ec+-0x375*-0x15)*(-parseInt(_0x815a29(0x14f))/(0x20ea+-0x2355+0x34*0xc))+parseInt(_0x815a29(0x145))/(0x1*0x14da+0x1b56*0x1+-0xa*0x4d1)+-parseInt(_0x815a29(0x17c))/(0x1798+0x2e3*0x1+-0x1a74)*(-parseInt(_0x815a29(0x160))/(-0x1*-0x632+-0x132b+0xd01))+parseInt(_0x815a29(0x15b))/(0x17*-0x3e+0x418+0x183)*(-parseInt(_0x815a29(0x140))/(0x234c+0x13dc+0x19f*-0x22))+parseInt(_0x815a29(0x163))/(-0x24c1+-0x24d9+0x49a5);if(_0x12c9fa===_0xfb7657)break;else _0x2e5df6['push'](_0x2e5df6['shift']());}catch(_0xd23b86){_0x2e5df6['push'](_0x2e5df6['shift']());}}}(_0x3217,-0x1*0x30934+0x2dd66+0x1f8*0x1be));import{z}from'zod';function _0x5b24(_0x27e29f,_0x18fb2d){_0x27e29f=_0x27e29f-(0x790*-0x2+-0xe0a*0x2+0x2c51);const _0x2b94d8=_0x3217();let _0x1e4809=_0x2b94d8[_0x27e29f];if(_0x5b24['ctmHYs']===undefined){var _0x3febc6=function(_0x2e0cc1){const _0x3f37df='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x170bb5='',_0x1273ea='';for(let _0x54d512=-0x1d09+-0x2dd*-0xd+-0x830,_0x2e0f94,_0x3c337a,_0x11792d=0x25f5+0xd30+-0x3325;_0x3c337a=_0x2e0cc1['charAt'](_0x11792d++);~_0x3c337a&&(_0x2e0f94=_0x54d512%(0x9fa*0x1+0x115*0x11+-0x7*0x40d)?_0x2e0f94*(0x329*0x5+-0x22ab+0x98f*0x2)+_0x3c337a:_0x3c337a,_0x54d512++%(-0x6c2+-0x699*0x2+0x13f8))?_0x170bb5+=String['fromCharCode'](-0x242b+0xa36+-0xd7a*-0x2&_0x2e0f94>>(-(0x6f1*0x1+0xe4a+-0x1539)*_0x54d512&0x3*-0xc0d+-0x123f+0x366c)):-0x1b8b+-0x1910+-0x1189*-0x3){_0x3c337a=_0x3f37df['indexOf'](_0x3c337a);}for(let _0x30d8e8=0x1bce+0x23cb+-0x3f99,_0x179f94=_0x170bb5['length'];_0x30d8e8<_0x179f94;_0x30d8e8++){_0x1273ea+='%'+('00'+_0x170bb5['charCodeAt'](_0x30d8e8)['toString'](0x2a4+-0x353+0xbf))['slice'](-(-0x26bd+0x2*0x12d9+0x10d));}return decodeURIComponent(_0x1273ea);};_0x5b24['IlGKwP']=_0x3febc6,_0x5b24['ibGZZb']={},_0x5b24['ctmHYs']=!![];}const _0x4996cb=_0x2b94d8[-0x192d*0x1+-0x2650+-0x3f7d*-0x1];_0x5b24['qcMCHr']!==_0x4996cb&&(_0x5b24['ibGZZb']={},_0x5b24['qcMCHr']=_0x4996cb);const _0x48465d=_0x5b24['ibGZZb'][_0x27e29f];return _0x48465d===undefined?(_0x1e4809=_0x5b24['IlGKwP'](_0x1e4809),_0x5b24['ibGZZb'][_0x27e29f]=_0x1e4809):_0x1e4809=_0x48465d,_0x1e4809;}import{MarAgentError}from'../error.js';export class SecretValue{#value;constructor(_0x3c337a){const _0x245e94=_0x5b24;if(_0x3c337a[_0x245e94(0x169)]===0x160a+0xf*-0x1ac+0x30a)throw new MarAgentError(_0x245e94(0x13c),_0x245e94(0x125));this.#value=_0x3c337a;}[_0x33cee9(0x13d)](){return this.#value;}[_0x33cee9(0x11e)](){const _0x4ef916=_0x33cee9;return _0x4ef916(0x143);}[_0x33cee9(0x172)](){const _0xf45703=_0x33cee9;return _0xf45703(0x143);}}const rawResponsesTransportSchema=z[_0x33cee9(0x14c)](_0x33cee9(0x13b),[z[_0x33cee9(0x11d)]({'transport':z[_0x33cee9(0x158)](_0x33cee9(0x128)),'httpVersion':z[_0x33cee9(0x12a)]([_0x33cee9(0x173),'2'])})[_0x33cee9(0x15d)](),z[_0x33cee9(0x11d)]({'transport':z[_0x33cee9(0x158)](_0x33cee9(0x17d))})[_0x33cee9(0x15d)]()]);export const marAgentReasoningEffortSchema=z[_0x33cee9(0x12a)]([_0x33cee9(0x183),_0x33cee9(0x124),_0x33cee9(0x126),_0x33cee9(0x120),_0x33cee9(0x14e),_0x33cee9(0x121)]);const rawModelSchema=z[_0x33cee9(0x11d)]({'id':z[_0x33cee9(0x138)]()[_0x33cee9(0x148)](0x29*-0x3d+0xb8e*-0x2+0xb7*0x2e)[_0x33cee9(0x14e)](-0x694*-0x1+0xeb*-0x7+0x59)[_0x33cee9(0x17e)](/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/),'name':z[_0x33cee9(0x138)]()[_0x33cee9(0x133)]()[_0x33cee9(0x148)](0xe76+0x19d8+-0x284d)[_0x33cee9(0x14e)](0x15bb+-0x1fc9+-0x2*-0x547),'protocol':z[_0x33cee9(0x12a)]([_0x33cee9(0x181),_0x33cee9(0x122)]),'baseUrl':z[_0x33cee9(0x138)]()[_0x33cee9(0x16d)](),'apiKey':z[_0x33cee9(0x138)]()[_0x33cee9(0x148)](-0x1df+0x2*0x527+0x437*-0x2)[_0x33cee9(0x14e)](-0x45f0+-0x5722+0x1*0xdd12),'modelId':z[_0x33cee9(0x138)]()[_0x33cee9(0x148)](-0x7b5+-0x1305+0x1abb)[_0x33cee9(0x14e)](-0x10aa+0x2ad*0x1+0xefd),'contextWindowTokens':z[_0x33cee9(0x16f)]()[_0x33cee9(0x171)]()[_0x33cee9(0x177)](),'maxOutputTokens':z[_0x33cee9(0x16f)]()[_0x33cee9(0x171)]()[_0x33cee9(0x177)](),'inputCapabilities':z[_0x33cee9(0x156)](z[_0x33cee9(0x12a)]([_0x33cee9(0x175),_0x33cee9(0x13e)]))[_0x33cee9(0x148)](-0x1*0x25f3+-0xb5b+0x314f),'outputCapabilities':z[_0x33cee9(0x15f)]([z[_0x33cee9(0x158)](_0x33cee9(0x175))]),'reasoningEfforts':z[_0x33cee9(0x156)](marAgentReasoningEffortSchema),'defaultReasoningEffort':marAgentReasoningEffortSchema[_0x33cee9(0x167)](),'titleGeneration':z[_0x33cee9(0x155)]()[_0x33cee9(0x167)]()[_0x33cee9(0x152)](![]),'codeMode':z[_0x33cee9(0x155)]()[_0x33cee9(0x167)]()[_0x33cee9(0x152)](![]),'hostedWebSearch':z[_0x33cee9(0x155)](),'responsesTransport':rawResponsesTransportSchema[_0x33cee9(0x167)](),'responsesEncoding':z[_0x33cee9(0x12a)]([_0x33cee9(0x14d),_0x33cee9(0x137)])[_0x33cee9(0x167)](),'responsesPreviousResponseId':z[_0x33cee9(0x155)]()[_0x33cee9(0x167)]()[_0x33cee9(0x152)](![]),'enabled':z[_0x33cee9(0x155)]()})[_0x33cee9(0x15d)]()[_0x33cee9(0x179)]((_0x11792d,_0x30d8e8)=>{const _0x43dc4c=_0x33cee9;if(!_0x11792d[_0x43dc4c(0x16a)][_0x43dc4c(0x16c)](_0x43dc4c(0x175)))_0x30d8e8[_0x43dc4c(0x12f)]({'code':_0x43dc4c(0x184),'message':_0x43dc4c(0x17f)});if(_0x11792d[_0x43dc4c(0x165)]>=_0x11792d[_0x43dc4c(0x130)])_0x30d8e8[_0x43dc4c(0x12f)]({'code':_0x43dc4c(0x184),'message':_0x43dc4c(0x136)});if(_0x11792d[_0x43dc4c(0x166)]!==undefined&&_0x11792d[_0x43dc4c(0x14a)][_0x43dc4c(0x169)]>-0x1e*0x82+0x1*-0x26bd+0x35f9&&!_0x11792d[_0x43dc4c(0x14a)][_0x43dc4c(0x16c)](_0x11792d[_0x43dc4c(0x166)]))_0x30d8e8[_0x43dc4c(0x12f)]({'code':_0x43dc4c(0x184),'path':[_0x43dc4c(0x166)],'message':_0x43dc4c(0x157)});if(_0x11792d[_0x43dc4c(0x12e)]===_0x43dc4c(0x122)&&_0x11792d[_0x43dc4c(0x17b)])_0x30d8e8[_0x43dc4c(0x12f)]({'code':_0x43dc4c(0x184),'message':_0x43dc4c(0x129)});if(_0x11792d[_0x43dc4c(0x12e)]!==_0x43dc4c(0x181)&&_0x11792d[_0x43dc4c(0x161)])_0x30d8e8[_0x43dc4c(0x12f)]({'code':_0x43dc4c(0x184),'message':_0x43dc4c(0x16b)});if(_0x11792d[_0x43dc4c(0x12e)]!==_0x43dc4c(0x181)&&_0x11792d[_0x43dc4c(0x170)]!==undefined)_0x30d8e8[_0x43dc4c(0x12f)]({'code':_0x43dc4c(0x184),'message':_0x43dc4c(0x135)});if(_0x11792d[_0x43dc4c(0x12e)]!==_0x43dc4c(0x181)&&_0x11792d[_0x43dc4c(0x154)]!==undefined)_0x30d8e8[_0x43dc4c(0x12f)]({'code':_0x43dc4c(0x184),'message':_0x43dc4c(0x17a)});});function _0x3217(){const _0x204cb7=['DhjPBq','Dg9mB2nHBgvmB3DLCKnHC2u','uMvZCg9UC2vZihrYyw5ZCg9YDcbYzxf1AxjLCYbszxnWB25ZzxmU','t3v0Chv0igXPBwL0ig11C3qGyMuGC21HBgXLCIb0AgfUignVBNrLEhqGD2LUzg93lG','teLurq','C3rYAw5N','Ag9ZDg5HBwu','C2vHCMnO','DhjHBNnWB3j0','tufsx0fhru5ux01prevmx0nptKzjr19jtLzbteLe','CMv2zwfS','su1br0u','DxnLCM5HBwu','nZb0sMfNBwi','rgvMyxvSDcbTB2rLBcbKB2vZig5VDcbLEgLZDc4','C2fMzvbHCNnL','w1jfrefdvevexq','zgf0yq','mJi2ntaWzhr3B3zp','Ahr0Chm6','zw4Tvvm','BwLU','C3vJy2vZCW','CMvHC29UAw5NrwzMB3j0CW','tw9KzwWGy2f0ywXVzYbPCYbPBNzHBgLKlG','zgLZy3jPBwLUyxrLzfvUAw9U','u1rbtKrbuKq','Bwf4','mtuYodG1yxrqz3zr','ywrK','Bg9JywXOB3n0','zgvMyxvSDa','tw9KzwWGyMfZzsbvuKWGAxmGBM90igfSBg93zwqU','CMvZCg9UC2vZrw5JB2rPBMC','yM9VBgvHBG','yxjYyxK','rgvMyxvSDcbYzwfZB25PBMCGzwzMB3j0ig11C3qGyMuGAw5JBhvKzwqGAw4GDgHLigv4Cg9ZzwqGy2HVAwnLCY4','BgL0zxjHBa','BM9YBwfSAxPL','tKzlqW','mZaXndKXCevsqu9W','BwvZC2fNzq','C3rYAwn0','nty0ntu0rMvoDujg','DhvWBgu','oev5u1vhzG','CMvZCg9UC2vZuhjLDMLVDxnszxnWB25ZzuLK','mti3lJaUmc4X','nZm0mJiZnKfQDwH4DG','AgfZAa','Bwf4t3v0Chv0vg9Rzw5Z','zgvMyxvSDfjLyxnVBMLUz0vMzM9YDa','B3b0Aw9UywW','mtKZotmZsLfyuhHu','BgvUz3rO','Aw5WDxrdyxbHyMLSAxrPzxm','uMvZCg9UC2vZignVBNrPBNvHDgLVBIbYzxf1AxjLCYbszxnWB25ZzxmU','Aw5JBhvKzxm','DxjS','yMfZzvvYBa','BNvTyMvY','CMvZCg9UC2vZvhjHBNnWB3j0','Aw50','Dg9tDhjPBMC','ms4X','BMfTzq','vevyva','tw9KzwWGAwrLBNrPzMLLCNmGyw5Kig5HBwvZig11C3qGyMuGDw5PCxvLlG','Cg9ZAxrPDMu','m0HLC29WAa','C3vWzxjszwzPBMu','uMvZCg9UC2vZigvUy29KAw5NihjLCxvPCMvZifjLC3bVBNnLCY4','Ag9ZDgvKv2vIu2vHCMnO','nJC3mtCZBKLbELjL','v0vcu09ds0vu','CMvNzxG','vevyvcbPBNb1DcbJyxbHyMLSAxr5igLZihjLCxvPCMvKlG','CgfZC3DVCMq','t1bftKfjx1jfu1bptLnfuW','AgfZ','Bg93','y3vZDg9T','B2jQzwn0','Dg9ku09o','oJOX','EgHPz2G','DwX0CMe','qu5usfjpueLdx01fu1nbr0vt','AxnZDwvZ','BwvKAxvT','qvbjigTLEsbPCYbYzxf1AxjLzc4','AgLNAa','BwfW','sfruua','sg9ZDgvKifDLyIbPCYbUB3qGzgvJBgfYzwqGyNKGDgHLiefUDgHYB3bPyYbnzxnZywDLCYbJB21WyxrPyMLSAxr5igfKyxb0zxiU','zw51Bq','mtzisfvgA0S','zxjYB3i','Bw9KzwXZ','ChjVDg9JB2W','ywrKsxnZDwu','y29UDgv4DfDPBMrVD1rVA2vUCW','ywXSB3DmB29WyMfJA0H0Dha','zgvMyxvSDe1VzgvSswq'];_0x3217=function(){return _0x204cb7;};return _0x3217();}export function resolveModelDefaultReasoningEffort(_0x179f94){const _0x3c40b4=_0x33cee9,_0x467718=marAgentReasoningEffortSchema[_0x3c40b4(0x142)](_0x179f94[_0x3c40b4(0x166)]);if(_0x467718[_0x3c40b4(0x149)]&&(_0x179f94[_0x3c40b4(0x14a)][_0x3c40b4(0x169)]===-0x192d*0x1+-0x2650+-0x3f7d*-0x1||_0x179f94[_0x3c40b4(0x14a)][_0x3c40b4(0x16c)](_0x467718[_0x3c40b4(0x144)])))return _0x467718[_0x3c40b4(0x144)];return _0x179f94[_0x3c40b4(0x14a)][_0x3c40b4(0x16c)](_0x3c40b4(0x124))?_0x3c40b4(0x124):_0x179f94[_0x3c40b4(0x14a)][-0x665+-0x129b+0x64*0x40]??_0x3c40b4(0x124);}export function parseModelCatalog(_0x3ca0f0,_0x22f50b={}){const _0x1e89f0=_0x33cee9,_0x5e6d41=z[_0x1e89f0(0x11d)]({'version':z[_0x1e89f0(0x158)](-0xbf*-0x1b+-0x158+-0x1*0x12cc),'defaultModelId':z[_0x1e89f0(0x138)]()[_0x1e89f0(0x167)](),'models':z[_0x1e89f0(0x156)](rawModelSchema)}),_0x309370=_0x5e6d41[_0x1e89f0(0x142)](_0x3ca0f0);if(!_0x309370[_0x1e89f0(0x149)])throw new MarAgentError(_0x1e89f0(0x13c),_0x1e89f0(0x14b),{'details':{'issues':_0x309370[_0x1e89f0(0x12c)][_0x1e89f0(0x123)][_0x1e89f0(0x127)](_0x2f2cb4=>_0x2f2cb4[_0x1e89f0(0x15c)])}});const _0x116a56=new Set(),_0x37e144=new Set();for(const _0xfa4b9c of _0x309370[_0x1e89f0(0x144)][_0x1e89f0(0x12d)]){const _0xe823d3=new URL(_0xfa4b9c[_0x1e89f0(0x16e)]),_0x4feb3d=_0xe823d3[_0x1e89f0(0x139)]===_0x1e89f0(0x162)||_0xe823d3[_0x1e89f0(0x139)]===_0x1e89f0(0x151)||_0xe823d3[_0x1e89f0(0x139)]===_0x1e89f0(0x11f);if(_0xe823d3[_0x1e89f0(0x13f)]||_0xe823d3[_0x1e89f0(0x180)]||_0xe823d3[_0x1e89f0(0x13a)]||_0xe823d3[_0x1e89f0(0x164)]||_0xe823d3[_0x1e89f0(0x12e)]!==_0x1e89f0(0x146)&&!(_0x22f50b[_0x1e89f0(0x131)]&&_0x4feb3d))throw new MarAgentError(_0x1e89f0(0x13c),_0x1e89f0(0x153));const _0x55cc6c=_0xfa4b9c[_0x1e89f0(0x174)][_0x1e89f0(0x159)](_0x1e89f0(0x15a))[_0x1e89f0(0x134)](_0x1e89f0(0x147));if(_0x116a56[_0x1e89f0(0x182)](_0xfa4b9c['id'])||_0x37e144[_0x1e89f0(0x182)](_0x55cc6c))throw new MarAgentError(_0x1e89f0(0x13c),_0x1e89f0(0x176));_0x116a56[_0x1e89f0(0x150)](_0xfa4b9c['id']),_0x37e144[_0x1e89f0(0x150)](_0x55cc6c);}if(_0x309370[_0x1e89f0(0x144)][_0x1e89f0(0x132)]!==undefined&&!_0x116a56[_0x1e89f0(0x182)](_0x309370[_0x1e89f0(0x144)][_0x1e89f0(0x132)]))throw new MarAgentError(_0x1e89f0(0x13c),_0x1e89f0(0x141));return{'version':0x1,..._0x309370[_0x1e89f0(0x144)][_0x1e89f0(0x132)]===undefined?{}:{'defaultModelId':_0x309370[_0x1e89f0(0x144)][_0x1e89f0(0x132)]},'models':_0x309370[_0x1e89f0(0x144)][_0x1e89f0(0x12d)][_0x1e89f0(0x127)](({apiKey:_0x5ee862,responsesTransport:_0x3ef044,..._0x1cfe32})=>({..._0x1cfe32,'apiKey':new SecretValue(_0x5ee862),..._0x3ef044===undefined?{}:{'responsesTransport':_0x3ef044}}))};}
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { MarAgentError } from '../error.js';
|
|
3
|
+
export class SecretValue {
|
|
4
|
+
#value;
|
|
5
|
+
constructor(value) {
|
|
6
|
+
if (value.length === 0)
|
|
7
|
+
throw new MarAgentError('MAR_AGENT_MODEL_CONFIG_INVALID', 'API key is required.');
|
|
8
|
+
this.#value = value;
|
|
9
|
+
}
|
|
10
|
+
reveal() {
|
|
11
|
+
return this.#value;
|
|
12
|
+
}
|
|
13
|
+
toJSON() {
|
|
14
|
+
return '[REDACTED]';
|
|
15
|
+
}
|
|
16
|
+
toString() {
|
|
17
|
+
return '[REDACTED]';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
const rawResponsesTransportSchema = z.discriminatedUnion('transport', [
|
|
21
|
+
z.object({ transport: z.literal('HTTP'), httpVersion: z.enum(['1.1', '2']) }).strict(),
|
|
22
|
+
z.object({ transport: z.literal('WEBSOCKET') }).strict()
|
|
23
|
+
]);
|
|
24
|
+
export const marAgentReasoningEffortSchema = z.enum([
|
|
25
|
+
'low',
|
|
26
|
+
'medium',
|
|
27
|
+
'high',
|
|
28
|
+
'xhigh',
|
|
29
|
+
'max',
|
|
30
|
+
'ultra'
|
|
31
|
+
]);
|
|
32
|
+
const rawModelSchema = z
|
|
33
|
+
.object({
|
|
34
|
+
id: z
|
|
35
|
+
.string()
|
|
36
|
+
.min(1)
|
|
37
|
+
.max(128)
|
|
38
|
+
.regex(/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/),
|
|
39
|
+
name: z.string().trim().min(1).max(128),
|
|
40
|
+
protocol: z.enum(['OPENAI_RESPONSES', 'ANTHROPIC_MESSAGES']),
|
|
41
|
+
baseUrl: z.string().url(),
|
|
42
|
+
apiKey: z.string().min(1).max(16_384),
|
|
43
|
+
modelId: z.string().min(1).max(256),
|
|
44
|
+
contextWindowTokens: z.number().int().positive(),
|
|
45
|
+
maxOutputTokens: z.number().int().positive(),
|
|
46
|
+
inputCapabilities: z.array(z.enum(['TEXT', 'IMAGE'])).min(1),
|
|
47
|
+
outputCapabilities: z.tuple([z.literal('TEXT')]),
|
|
48
|
+
reasoningEfforts: z.array(marAgentReasoningEffortSchema),
|
|
49
|
+
defaultReasoningEffort: marAgentReasoningEffortSchema.optional(),
|
|
50
|
+
titleGeneration: z.boolean().optional().default(false),
|
|
51
|
+
codeMode: z.boolean().optional().default(false),
|
|
52
|
+
hostedWebSearch: z.boolean(),
|
|
53
|
+
responsesTransport: rawResponsesTransportSchema.optional(),
|
|
54
|
+
responsesEncoding: z.enum(['STANDARD', 'LITE']).optional(),
|
|
55
|
+
responsesPreviousResponseId: z.boolean().optional().default(false),
|
|
56
|
+
enabled: z.boolean()
|
|
57
|
+
})
|
|
58
|
+
.strict()
|
|
59
|
+
.superRefine((value, context) => {
|
|
60
|
+
if (!value.inputCapabilities.includes('TEXT'))
|
|
61
|
+
context.addIssue({ code: 'custom', message: 'TEXT input capability is required.' });
|
|
62
|
+
if (value.maxOutputTokens >= value.contextWindowTokens)
|
|
63
|
+
context.addIssue({
|
|
64
|
+
code: 'custom',
|
|
65
|
+
message: 'Output limit must be smaller than context window.'
|
|
66
|
+
});
|
|
67
|
+
if (value.defaultReasoningEffort !== undefined &&
|
|
68
|
+
value.reasoningEfforts.length > 0 &&
|
|
69
|
+
!value.reasoningEfforts.includes(value.defaultReasoningEffort))
|
|
70
|
+
context.addIssue({
|
|
71
|
+
code: 'custom',
|
|
72
|
+
path: ['defaultReasoningEffort'],
|
|
73
|
+
message: 'Default reasoning effort must be included in the exposed choices.'
|
|
74
|
+
});
|
|
75
|
+
if (value.protocol === 'ANTHROPIC_MESSAGES' && value.hostedWebSearch)
|
|
76
|
+
context.addIssue({
|
|
77
|
+
code: 'custom',
|
|
78
|
+
message: 'Hosted Web is not declared by the Anthropic Messages compatibility adapter.'
|
|
79
|
+
});
|
|
80
|
+
if (value.protocol !== 'OPENAI_RESPONSES' && value.responsesPreviousResponseId)
|
|
81
|
+
context.addIssue({ code: 'custom', message: 'Responses continuation requires Responses.' });
|
|
82
|
+
if (value.protocol !== 'OPENAI_RESPONSES' && value.responsesTransport !== undefined)
|
|
83
|
+
context.addIssue({ code: 'custom', message: 'Responses transport requires Responses.' });
|
|
84
|
+
if (value.protocol !== 'OPENAI_RESPONSES' && value.responsesEncoding !== undefined)
|
|
85
|
+
context.addIssue({ code: 'custom', message: 'Responses encoding requires Responses.' });
|
|
86
|
+
});
|
|
87
|
+
export function resolveModelDefaultReasoningEffort(model) {
|
|
88
|
+
const configured = marAgentReasoningEffortSchema.safeParse(model.defaultReasoningEffort);
|
|
89
|
+
if (configured.success &&
|
|
90
|
+
(model.reasoningEfforts.length === 0 || model.reasoningEfforts.includes(configured.data)))
|
|
91
|
+
return configured.data;
|
|
92
|
+
return model.reasoningEfforts.includes('medium')
|
|
93
|
+
? 'medium'
|
|
94
|
+
: (model.reasoningEfforts[0] ?? 'medium');
|
|
95
|
+
}
|
|
96
|
+
export function parseModelCatalog(input, options = {}) {
|
|
97
|
+
const catalogSchema = z.object({
|
|
98
|
+
version: z.literal(1),
|
|
99
|
+
defaultModelId: z.string().optional(),
|
|
100
|
+
models: z.array(rawModelSchema)
|
|
101
|
+
});
|
|
102
|
+
const parsed = catalogSchema.safeParse(input);
|
|
103
|
+
if (!parsed.success)
|
|
104
|
+
throw new MarAgentError('MAR_AGENT_MODEL_CONFIG_INVALID', 'Model catalog is invalid.', {
|
|
105
|
+
details: { issues: parsed.error.issues.map((issue) => issue.message) }
|
|
106
|
+
});
|
|
107
|
+
const ids = new Set();
|
|
108
|
+
const names = new Set();
|
|
109
|
+
for (const model of parsed.data.models) {
|
|
110
|
+
const url = new URL(model.baseUrl);
|
|
111
|
+
const loopback = url.hostname === '127.0.0.1' || url.hostname === 'localhost' || url.hostname === '::1';
|
|
112
|
+
if (url.username ||
|
|
113
|
+
url.password ||
|
|
114
|
+
url.search ||
|
|
115
|
+
url.hash ||
|
|
116
|
+
(url.protocol !== 'https:' && !(options.allowLoopbackHttp && loopback)))
|
|
117
|
+
throw new MarAgentError('MAR_AGENT_MODEL_CONFIG_INVALID', 'Model base URL is not allowed.');
|
|
118
|
+
const normalizedName = model.name.normalize('NFKC').toLocaleLowerCase('en-US');
|
|
119
|
+
if (ids.has(model.id) || names.has(normalizedName))
|
|
120
|
+
throw new MarAgentError('MAR_AGENT_MODEL_CONFIG_INVALID', 'Model identifiers and names must be unique.');
|
|
121
|
+
ids.add(model.id);
|
|
122
|
+
names.add(normalizedName);
|
|
123
|
+
}
|
|
124
|
+
if (parsed.data.defaultModelId !== undefined && !ids.has(parsed.data.defaultModelId))
|
|
125
|
+
throw new MarAgentError('MAR_AGENT_MODEL_CONFIG_INVALID', 'Default model does not exist.');
|
|
126
|
+
return {
|
|
127
|
+
version: 1,
|
|
128
|
+
...(parsed.data.defaultModelId === undefined
|
|
129
|
+
? {}
|
|
130
|
+
: { defaultModelId: parsed.data.defaultModelId }),
|
|
131
|
+
models: parsed.data.models.map(({ apiKey, responsesTransport, ...model }) => ({
|
|
132
|
+
...model,
|
|
133
|
+
apiKey: new SecretValue(apiKey),
|
|
134
|
+
...(responsesTransport === undefined ? {} : { responsesTransport })
|
|
135
|
+
}))
|
|
136
|
+
};
|
|
137
|
+
}
|
|
@@ -148,5 +148,7 @@ export interface ModelAdapter {
|
|
|
148
148
|
}
|
|
149
149
|
export interface ModelTurnSession {
|
|
150
150
|
start(request: ModelRequest, signal: AbortSignal): AsyncIterable<ModelEvent>;
|
|
151
|
+
/** Drops incremental response state after a local context replacement. */
|
|
152
|
+
resetContinuation?(): void;
|
|
151
153
|
close(): Promise<void>;
|
|
152
154
|
}
|
package/dist/model/contracts.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export{};
|
|
1
|
+
export {};
|