@alvin0/ai-agent-sdk-core 0.1.4 → 0.1.5

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 (105) hide show
  1. package/README.md +13 -1
  2. package/dist/agent/define/definition.d.ts +1 -1
  3. package/dist/agent/define/definition.js +1 -1
  4. package/dist/agent/define/definition.js.map +1 -1
  5. package/dist/agent/define/session/types.d.ts +6 -0
  6. package/dist/agent/define/session/types.d.ts.map +1 -1
  7. package/dist/agent/define/session.d.ts +25 -2
  8. package/dist/agent/define/session.d.ts.map +1 -1
  9. package/dist/agent/define/session.js +1 -1
  10. package/dist/agent/define/session.js.map +1 -1
  11. package/dist/agent/loop/admission.js +2 -0
  12. package/dist/agent/loop/admission.js.map +1 -0
  13. package/dist/agent/loop/events.d.ts +4 -0
  14. package/dist/agent/loop/events.d.ts.map +1 -1
  15. package/dist/agent/loop/program.js +2 -0
  16. package/dist/agent/loop/program.js.map +1 -0
  17. package/dist/agent/loop/run-turn.d.ts.map +1 -1
  18. package/dist/agent/loop/run-turn.js +1 -1
  19. package/dist/agent/loop/run-turn.js.map +1 -1
  20. package/dist/agent/loop/schedule.d.ts.map +1 -1
  21. package/dist/agent/loop/schedule.js +2 -2
  22. package/dist/agent/loop/schedule.js.map +1 -1
  23. package/dist/agent/loop/tool-call-support.js +2 -0
  24. package/dist/agent/loop/tool-call-support.js.map +1 -0
  25. package/dist/agent/loop/turn/hooks.js +1 -1
  26. package/dist/agent/loop/turn/hooks.js.map +1 -1
  27. package/dist/agent/loop/turn/model-request-boundary.js +2 -0
  28. package/dist/agent/loop/turn/model-request-boundary.js.map +1 -0
  29. package/dist/agent/loop/turn/model-round.js +1 -1
  30. package/dist/agent/loop/turn/model-round.js.map +1 -1
  31. package/dist/agent/loop/turn/step-projection.js +2 -0
  32. package/dist/agent/loop/turn/step-projection.js.map +1 -0
  33. package/dist/agent/loop/turn/types.d.ts +6 -0
  34. package/dist/agent/loop/turn/types.d.ts.map +1 -1
  35. package/dist/agent/memory/context-optimizer.d.ts +61 -0
  36. package/dist/agent/memory/context-optimizer.d.ts.map +1 -0
  37. package/dist/agent/memory/context-optimizer.js +4 -0
  38. package/dist/agent/memory/context-optimizer.js.map +1 -0
  39. package/dist/agent/memory/memory.js +1 -1
  40. package/dist/agent/memory/memory.js.map +1 -1
  41. package/dist/agent/mode/run-agent.d.ts +15 -1
  42. package/dist/agent/mode/run-agent.d.ts.map +1 -1
  43. package/dist/agent/mode/run-agent.js +2 -2
  44. package/dist/agent/mode/run-agent.js.map +1 -1
  45. package/dist/agent/skill/provider/snapshot.js +1 -1
  46. package/dist/agent/team/managed.d.ts +33 -64
  47. package/dist/agent/team/managed.d.ts.map +1 -1
  48. package/dist/agent/team/managed.js +6 -3
  49. package/dist/agent/team/managed.js.map +1 -1
  50. package/dist/agent/team/team.d.ts +2 -0
  51. package/dist/agent/team/team.d.ts.map +1 -1
  52. package/dist/agent/team/team.js +1 -1
  53. package/dist/agent/team/team.js.map +1 -1
  54. package/dist/agent/team/types.d.ts +1 -0
  55. package/dist/agent/team/types.d.ts.map +1 -1
  56. package/dist/agent/tool/action-fusion.d.ts +30 -0
  57. package/dist/agent/tool/action-fusion.d.ts.map +1 -0
  58. package/dist/agent/tool/action-fusion.js +2 -0
  59. package/dist/agent/tool/action-fusion.js.map +1 -0
  60. package/dist/agent/tool/capture.js +1 -1
  61. package/dist/agent/tool/capture.js.map +1 -1
  62. package/dist/agent/tool/definition.d.ts +8 -0
  63. package/dist/agent/tool/definition.d.ts.map +1 -1
  64. package/dist/agent/tool/definition.js.map +1 -1
  65. package/dist/agent/tool/evidence-reducer.d.ts +41 -0
  66. package/dist/agent/tool/evidence-reducer.d.ts.map +1 -0
  67. package/dist/agent/tool/evidence-reducer.js +7 -0
  68. package/dist/agent/tool/evidence-reducer.js.map +1 -0
  69. package/dist/agent/tool/nested.d.ts +117 -0
  70. package/dist/agent/tool/nested.d.ts.map +1 -0
  71. package/dist/agent/tool/nested.js +2 -0
  72. package/dist/agent/tool/nested.js.map +1 -0
  73. package/dist/agent/tool/output-budget.d.ts.map +1 -1
  74. package/dist/agent/tool/output-budget.js +2 -2
  75. package/dist/agent/tool/output-budget.js.map +1 -1
  76. package/dist/agent/tool/output-schema.js +2 -0
  77. package/dist/agent/tool/output-schema.js.map +1 -0
  78. package/dist/agent/tool/pipeline.d.ts +7 -0
  79. package/dist/agent/tool/pipeline.d.ts.map +1 -1
  80. package/dist/agent/tool/pipeline.js +2 -2
  81. package/dist/agent/tool/pipeline.js.map +1 -1
  82. package/dist/agent/tool/program-results.js +2 -0
  83. package/dist/agent/tool/program-results.js.map +1 -0
  84. package/dist/agent.d.ts +6 -2
  85. package/dist/agent.js +1 -1
  86. package/dist/composition/agent/definition.js +1 -1
  87. package/dist/composition/agent/options.js +1 -1
  88. package/dist/composition/agent/options.js.map +1 -1
  89. package/dist/composition/agent/session.js +1 -1
  90. package/dist/composition/agent/session.js.map +1 -1
  91. package/dist/composition/agent/types.d.ts +6 -0
  92. package/dist/composition/agent/types.d.ts.map +1 -1
  93. package/dist/composition/tool-source/snapshot.js +1 -1
  94. package/dist/index.d.ts +2 -1
  95. package/dist/index.js +1 -1
  96. package/dist/memory.d.ts +2 -1
  97. package/dist/memory.js +1 -1
  98. package/dist/observability/bus.js +1 -1
  99. package/dist/primitives/version.d.ts +1 -1
  100. package/dist/primitives/version.js +1 -1
  101. package/dist/primitives/version.js.map +1 -1
  102. package/dist/runtime/registry.js +1 -1
  103. package/dist/tools.d.ts +4 -1
  104. package/dist/tools.js +1 -1
  105. package/package.json +1 -1
package/README.md CHANGED
@@ -48,5 +48,17 @@ const report = await call.report
48
48
  The package includes message and stream contracts, model registry and retry primitives, normalized errors, usage accounting, explicit observation/correlation ports, and transactional provider-plugin registration. Provider HTTP/SSE transport, concrete exporters, filesystem skills, environment credentials, and protocol implementations belong to separate capability packages.
49
49
 
50
50
  The documented root plus `/agent`, `/memory`, `/observability`, `/provider`,
51
- `/skills`, `/tools`, and `./package.json` are public. Internal source paths are
51
+ `/skills`, `/tools`, `/embedding`, and `./package.json` are public. Internal source paths are
52
52
  not compatibility contracts.
53
+
54
+ Opt-in optimization helpers added in 0.1.5 (currently unreleased) include `defineActionFusion` and
55
+ `createModelEvidenceReducer` from `/tools`, and `createContextOptimizer` from
56
+ `/memory`. Applications select pipeline steps, milestone summaries, log storage,
57
+ and reducer models. See the [application guide](https://github.com/alvin0/ai-agent-sdk/blob/main/docs/context-optimization.md)
58
+ for configuration, exact-evidence fallback, and runnable validation.
59
+
60
+ Existing agent, tool, and session imports remain available. Review the
61
+ [upgrade guide](https://github.com/alvin0/ai-agent-sdk/blob/main/docs/upgrading-from-0.1.4.md)
62
+ for narration defaults, queued steering receipts, and managed-team validation
63
+ changes after the published 0.1.4 release. Program tools additionally require
64
+ session-level `experimentalPrograms` grants; ordinary tools do not.
@@ -78,7 +78,7 @@ interface AgentDefinitionInput {
78
78
  readonly maxTurns?: number | 'auto';
79
79
  /** Maximum host tool calls for one user turn; defaults to 64. */
80
80
  readonly maxToolCalls?: number;
81
- /** Public progress narration policy; defaults to `concise`. */
81
+ /** Public progress narration policy; defaults to `auto` (caller-defined style). */
82
82
  readonly commentary?: 'auto' | 'concise' | 'off';
83
83
  /** Durable task facts injected outside compactable conversation history. */
84
84
  readonly memory?: AgentMemoryConfigInput;
@@ -1,2 +1,2 @@
1
- import{ReasoningEffortId as e}from"../../primitives/brand.js";import{resolveMemoryConfig as t}from"../memory/memory.js";import{resolveCompactionConfig as n}from"../memory/compaction-config.js";import{validateSkillId as r,validateSkillSource as i}from"../skill/definition.js";import{SKILL_TOOL_NAMES as a,resolveSkillOptions as o}from"../skill/tools.js";import{captureContextSections as s}from"../context/section.js";import{AgentSession as c}from"./session.js";import{captureOutputFormat as l}from"./output-format.js";const u=/^[a-zA-Z][a-zA-Z0-9_-]*$/;var d=class{id;name;description;provider;model;effort;maxTokens;contextWindow;inputModalities;instructions;mode;tools;nativeTools;skills;skillIds;skillOptions;contextSections;toolChoice;outputFormat;maxTurns;maxToolCalls;commentary;memory;compaction;providerOptions;constructor(r){g(r),this.id=r.id,this.name=r.name??r.id,this.description=r.description,this.provider=r.provider??`codex`,this.model=r.model??`gpt-5.6-luna`,this.effort=r.effort===void 0?void 0:e(r.effort),this.maxTokens=r.maxTokens,this.contextWindow=r.contextWindow,this.inputModalities=r.inputModalities===void 0?void 0:Object.freeze([...r.inputModalities]),this.instructions=r.instructions,this.mode=r.mode??`basic`,this.tools=Object.freeze([...r.tools??[]]),this.nativeTools=Object.freeze((r.nativeTools??[]).map(e=>Object.freeze({...e}))),this.skills=Object.freeze([...r.skills??[]]),this.skillIds=r.skillIds===void 0?void 0:Object.freeze([...r.skillIds]),this.skillOptions=o(r.skillOptions),this.contextSections=s(r.contextSections)??Object.freeze([]),this.toolChoice=r.toolChoice,this.outputFormat=l(r.outputFormat),this.maxTurns=r.maxTurns??16,this.maxToolCalls=r.maxToolCalls??64,this.commentary=r.commentary??`concise`,this.memory=t(r.memory),this.compaction=r.compaction!==!1&&n(r.compaction),this.providerOptions=r.providerOptions===void 0?void 0:Object.freeze({...r.providerOptions.headers===void 0?{}:{headers:Object.freeze({...r.providerOptions.headers})},...r.providerOptions.body===void 0?{}:{body:Object.freeze({...r.providerOptions.body})}}),Object.freeze(this)}createSession(e){return new c(this,e)}resumeSession(e){return c.fromSnapshot(this,e)}with(e){return f(m(this,e))}};function f(e){return new d(e)}function p(e,t){return f(m(e,t))}function m(e,t){let n=t.description??e.description,r=t.toolChoice??e.toolChoice,i=t.outputFormat??e.outputFormat,a=t.skillIds??e.skillIds,o=t.maxTokens??e.maxTokens,s=t.contextWindow??e.contextWindow,c=t.inputModalities??e.inputModalities,l=t.providerOptions??e.providerOptions;return{id:t.id??e.id,name:t.name??e.name,...n===void 0?{}:{description:n},provider:t.provider??e.provider,model:t.model??e.model,...(t.effort??e.effort)===void 0?{}:{effort:t.effort??e.effort},...o===void 0?{}:{maxTokens:o},...s===void 0?{}:{contextWindow:s},...c===void 0?{}:{inputModalities:c},instructions:t.instructions??e.instructions,mode:t.mode??e.mode,tools:t.tools??e.tools,nativeTools:t.nativeTools??e.nativeTools,skills:t.skills??e.skills,...a===void 0?{}:{skillIds:a},skillOptions:t.skillOptions??e.skillOptions,contextSections:t.contextSections??e.contextSections,...r===void 0?{}:{toolChoice:r},...i===void 0?{}:{outputFormat:i},maxTurns:t.maxTurns??e.maxTurns,maxToolCalls:t.maxToolCalls??e.maxToolCalls,commentary:t.commentary??e.commentary,memory:t.memory??e.memory,compaction:t.compaction??h(e.compaction),...l===void 0?{}:{providerOptions:l}}}function h(e){return e!==!1&&{auto:e.auto,...e.maxInputTokens===void 0?{}:{maxInputTokens:e.maxInputTokens},thresholdRatio:e.thresholdRatio,...e.retainRatio===void 0?{}:{retainRatio:e.retainRatio},...e.retainTokens===void 0?{}:{retainTokens:e.retainTokens},...e.summarizationProvider===void 0?{}:{summarizationProvider:e.summarizationProvider},...e.summarizationModel===void 0?{}:{summarizationModel:e.summarizationModel},...e.summarizationEffort===void 0?{}:{summarizationEffort:e.summarizationEffort},maxSummaryTokens:e.maxSummaryTokens,compactionRetries:e.compactionRetries,maxOverflowRetries:e.maxOverflowRetries,maxSummaryInputChars:e.maxSummaryInputChars,maxSummaryRequestChars:e.maxSummaryRequestChars,maxSummaryRequestBytes:e.maxSummaryRequestBytes,maxSummaryResponseBytes:e.maxSummaryResponseBytes,maxSummaryStreamEvents:e.maxSummaryStreamEvents,summaryTimeoutMs:e.summaryTimeoutMs,teardownTimeoutMs:e.teardownTimeoutMs,maxToolResultChars:e.maxToolResultChars}}function g(e){if(!u.test(e.id))throw TypeError(`agent id must start with a letter and contain only letters, numbers, _ or -`);for(let[t,n]of[[`name`,e.name],[`description`,e.description],[`provider`,e.provider],[`model`,e.model],[`effort`,e.effort]])if(n!==void 0&&n.trim().length===0)throw TypeError(`agent ${t} must be a non-empty string`);if(e.instructions.trim().length===0)throw TypeError(`agent instructions must be a non-empty string`);if(e.maxTurns!==void 0&&e.maxTurns!==`auto`&&(!Number.isSafeInteger(e.maxTurns)||e.maxTurns<1))throw RangeError(`agent maxTurns must be a positive safe integer or 'auto'`);if(e.maxTokens!==void 0&&(!Number.isSafeInteger(e.maxTokens)||e.maxTokens<1))throw RangeError(`agent maxTokens must be a positive safe integer`);if(e.contextWindow!==void 0&&(!Number.isSafeInteger(e.contextWindow)||e.contextWindow<1))throw RangeError(`agent contextWindow must be a positive safe integer`);if(e.inputModalities!==void 0&&(e.inputModalities.length===0||new Set(e.inputModalities).size!==e.inputModalities.length))throw RangeError(`agent inputModalities must be non-empty and unique`);if(e.maxToolCalls!==void 0&&(!Number.isInteger(e.maxToolCalls)||e.maxToolCalls<1))throw RangeError(`agent maxToolCalls must be a positive integer`);let t=new Set;for(let n of e.tools??[]){if(typeof n.name!=`string`||n.name.trim().length===0)throw TypeError(`agent host tools must have a non-empty name`);if(typeof n.description!=`string`||n.description.trim().length===0)throw TypeError(`agent host tool '${n.name}' must have a non-empty description`);if(typeof n.parameters!=`object`||n.parameters===null)throw TypeError(`agent host tool '${n.name}' must declare JSON Schema parameters`);if(typeof n.execute!=`function`)throw TypeError(`agent host tool '${n.name}' must implement execute()`);if(n.timeoutMs!==void 0&&(!Number.isFinite(n.timeoutMs)||n.timeoutMs<=0))throw RangeError(`agent host tool '${n.name}' must have a positive timeoutMs`);if(t.has(n.name))throw TypeError(`agent has duplicate host tool '${n.name}'`);t.add(n.name)}for(let n of e.nativeTools??[]){if(typeof n.name!=`string`||n.name.trim().length===0)throw TypeError(`agent native tools must have a non-empty name`);if(t.has(n.name))throw TypeError(`agent has duplicate tool '${n.name}'`);t.add(n.name)}if((e.skills?.length??0)>0||(e.skillIds?.length??0)>0){for(let e of a)if(t.has(e))throw TypeError(`agent tool '${e}' collides with the skill runtime`)}let n=new Set,o=new Set,s=new Set;for(let t of e.skillIds??[]){if(r(t,`agent skill`),s.has(t))throw TypeError(`agent has duplicate allowed skill '${t}'`);s.add(t)}for(let t of e.skills??[])if(i(t),t.kind===`skill`){if(n.has(t.id))throw TypeError(`agent has duplicate inline skill '${t.id}'`);n.add(t.id)}else{if(o.has(t.id))throw TypeError(`agent has duplicate skill provider '${t.id}'`);o.add(t.id)}}export{p as cloneAgent,f as defineAgent};
1
+ import{ReasoningEffortId as e}from"../../primitives/brand.js";import{resolveMemoryConfig as t}from"../memory/memory.js";import{resolveCompactionConfig as n}from"../memory/compaction-config.js";import{validateSkillId as r,validateSkillSource as i}from"../skill/definition.js";import{SKILL_TOOL_NAMES as a,resolveSkillOptions as o}from"../skill/tools.js";import{captureContextSections as s}from"../context/section.js";import{AgentSession as c}from"./session.js";import{captureOutputFormat as l}from"./output-format.js";const u=/^[a-zA-Z][a-zA-Z0-9_-]*$/;var d=class{id;name;description;provider;model;effort;maxTokens;contextWindow;inputModalities;instructions;mode;tools;nativeTools;skills;skillIds;skillOptions;contextSections;toolChoice;outputFormat;maxTurns;maxToolCalls;commentary;memory;compaction;providerOptions;constructor(r){g(r),this.id=r.id,this.name=r.name??r.id,this.description=r.description,this.provider=r.provider??`codex`,this.model=r.model??`gpt-5.6-luna`,this.effort=r.effort===void 0?void 0:e(r.effort),this.maxTokens=r.maxTokens,this.contextWindow=r.contextWindow,this.inputModalities=r.inputModalities===void 0?void 0:Object.freeze([...r.inputModalities]),this.instructions=r.instructions,this.mode=r.mode??`basic`,this.tools=Object.freeze([...r.tools??[]]),this.nativeTools=Object.freeze((r.nativeTools??[]).map(e=>Object.freeze({...e}))),this.skills=Object.freeze([...r.skills??[]]),this.skillIds=r.skillIds===void 0?void 0:Object.freeze([...r.skillIds]),this.skillOptions=o(r.skillOptions),this.contextSections=s(r.contextSections)??Object.freeze([]),this.toolChoice=r.toolChoice,this.outputFormat=l(r.outputFormat),this.maxTurns=r.maxTurns??16,this.maxToolCalls=r.maxToolCalls??64,this.commentary=r.commentary??`auto`,this.memory=t(r.memory),this.compaction=r.compaction!==!1&&n(r.compaction),this.providerOptions=r.providerOptions===void 0?void 0:Object.freeze({...r.providerOptions.headers===void 0?{}:{headers:Object.freeze({...r.providerOptions.headers})},...r.providerOptions.body===void 0?{}:{body:Object.freeze({...r.providerOptions.body})}}),Object.freeze(this)}createSession(e){return new c(this,e)}resumeSession(e){return c.fromSnapshot(this,e)}with(e){return f(m(this,e))}};function f(e){return new d(e)}function p(e,t){return f(m(e,t))}function m(e,t){let n=t.description??e.description,r=t.toolChoice??e.toolChoice,i=t.outputFormat??e.outputFormat,a=t.skillIds??e.skillIds,o=t.maxTokens??e.maxTokens,s=t.contextWindow??e.contextWindow,c=t.inputModalities??e.inputModalities,l=t.providerOptions??e.providerOptions;return{id:t.id??e.id,name:t.name??e.name,...n===void 0?{}:{description:n},provider:t.provider??e.provider,model:t.model??e.model,...(t.effort??e.effort)===void 0?{}:{effort:t.effort??e.effort},...o===void 0?{}:{maxTokens:o},...s===void 0?{}:{contextWindow:s},...c===void 0?{}:{inputModalities:c},instructions:t.instructions??e.instructions,mode:t.mode??e.mode,tools:t.tools??e.tools,nativeTools:t.nativeTools??e.nativeTools,skills:t.skills??e.skills,...a===void 0?{}:{skillIds:a},skillOptions:t.skillOptions??e.skillOptions,contextSections:t.contextSections??e.contextSections,...r===void 0?{}:{toolChoice:r},...i===void 0?{}:{outputFormat:i},maxTurns:t.maxTurns??e.maxTurns,maxToolCalls:t.maxToolCalls??e.maxToolCalls,commentary:t.commentary??e.commentary,memory:t.memory??e.memory,compaction:t.compaction??h(e.compaction),...l===void 0?{}:{providerOptions:l}}}function h(e){return e!==!1&&{auto:e.auto,...e.maxInputTokens===void 0?{}:{maxInputTokens:e.maxInputTokens},thresholdRatio:e.thresholdRatio,...e.retainRatio===void 0?{}:{retainRatio:e.retainRatio},...e.retainTokens===void 0?{}:{retainTokens:e.retainTokens},...e.summarizationProvider===void 0?{}:{summarizationProvider:e.summarizationProvider},...e.summarizationModel===void 0?{}:{summarizationModel:e.summarizationModel},...e.summarizationEffort===void 0?{}:{summarizationEffort:e.summarizationEffort},maxSummaryTokens:e.maxSummaryTokens,compactionRetries:e.compactionRetries,maxOverflowRetries:e.maxOverflowRetries,maxSummaryInputChars:e.maxSummaryInputChars,maxSummaryRequestChars:e.maxSummaryRequestChars,maxSummaryRequestBytes:e.maxSummaryRequestBytes,maxSummaryResponseBytes:e.maxSummaryResponseBytes,maxSummaryStreamEvents:e.maxSummaryStreamEvents,summaryTimeoutMs:e.summaryTimeoutMs,teardownTimeoutMs:e.teardownTimeoutMs,maxToolResultChars:e.maxToolResultChars}}function g(e){if(!u.test(e.id))throw TypeError(`agent id must start with a letter and contain only letters, numbers, _ or -`);for(let[t,n]of[[`name`,e.name],[`description`,e.description],[`provider`,e.provider],[`model`,e.model],[`effort`,e.effort]])if(n!==void 0&&n.trim().length===0)throw TypeError(`agent ${t} must be a non-empty string`);if(e.instructions.trim().length===0)throw TypeError(`agent instructions must be a non-empty string`);if(e.maxTurns!==void 0&&e.maxTurns!==`auto`&&(!Number.isSafeInteger(e.maxTurns)||e.maxTurns<1))throw RangeError(`agent maxTurns must be a positive safe integer or 'auto'`);if(e.maxTokens!==void 0&&(!Number.isSafeInteger(e.maxTokens)||e.maxTokens<1))throw RangeError(`agent maxTokens must be a positive safe integer`);if(e.contextWindow!==void 0&&(!Number.isSafeInteger(e.contextWindow)||e.contextWindow<1))throw RangeError(`agent contextWindow must be a positive safe integer`);if(e.inputModalities!==void 0&&(e.inputModalities.length===0||new Set(e.inputModalities).size!==e.inputModalities.length))throw RangeError(`agent inputModalities must be non-empty and unique`);if(e.maxToolCalls!==void 0&&(!Number.isInteger(e.maxToolCalls)||e.maxToolCalls<1))throw RangeError(`agent maxToolCalls must be a positive integer`);let t=new Set;for(let n of e.tools??[]){if(typeof n.name!=`string`||n.name.trim().length===0)throw TypeError(`agent host tools must have a non-empty name`);if(typeof n.description!=`string`||n.description.trim().length===0)throw TypeError(`agent host tool '${n.name}' must have a non-empty description`);if(typeof n.parameters!=`object`||n.parameters===null)throw TypeError(`agent host tool '${n.name}' must declare JSON Schema parameters`);if(typeof n.execute!=`function`)throw TypeError(`agent host tool '${n.name}' must implement execute()`);if(n.timeoutMs!==void 0&&(!Number.isFinite(n.timeoutMs)||n.timeoutMs<=0))throw RangeError(`agent host tool '${n.name}' must have a positive timeoutMs`);if(t.has(n.name))throw TypeError(`agent has duplicate host tool '${n.name}'`);t.add(n.name)}for(let n of e.nativeTools??[]){if(typeof n.name!=`string`||n.name.trim().length===0)throw TypeError(`agent native tools must have a non-empty name`);if(t.has(n.name))throw TypeError(`agent has duplicate tool '${n.name}'`);t.add(n.name)}if((e.skills?.length??0)>0||(e.skillIds?.length??0)>0){for(let e of a)if(t.has(e))throw TypeError(`agent tool '${e}' collides with the skill runtime`)}let n=new Set,o=new Set,s=new Set;for(let t of e.skillIds??[]){if(r(t,`agent skill`),s.has(t))throw TypeError(`agent has duplicate allowed skill '${t}'`);s.add(t)}for(let t of e.skills??[])if(i(t),t.kind===`skill`){if(n.has(t.id))throw TypeError(`agent has duplicate inline skill '${t.id}'`);n.add(t.id)}else{if(o.has(t.id))throw TypeError(`agent has duplicate skill provider '${t.id}'`);o.add(t.id)}}export{p as cloneAgent,f as defineAgent};
2
2
  //# sourceMappingURL=definition.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"definition.js","names":[],"sources":["../../../src/agent/define/definition.ts"],"sourcesContent":["/** Declarative, code-first agent definitions. */\n\nimport type { ModelOutputFormat, ToolChoice, NativeToolSchema, ModelModality } from '../../contract/index.ts'\nimport { ReasoningEffortId, type ReasoningEffortId as ReasoningEffort } from '../../primitives/index.ts'\nimport type { AgentMode } from '../mode/run-agent.ts'\nimport type { ToolDefinition } from '../tool/definition.ts'\nimport { captureContextSections } from '../context/section.ts'\nimport type { ContextSection } from '../context/types.ts'\nimport {\n SKILL_TOOL_NAMES,\n resolveSkillOptions,\n validateSkillId,\n validateSkillSource,\n type AgentSkillOptions,\n type ResolvedAgentSkillOptions,\n type SkillSource,\n} from '../skill/index.ts'\nimport {\n resolveCompactionConfig,\n type AgentCompactionConfig,\n type AgentCompactionOptions,\n} from '../memory/compaction-config.ts'\nimport {\n resolveMemoryConfig,\n type AgentMemoryConfig,\n type AgentMemoryConfigInput,\n} from '../memory/memory.ts'\nimport {\n AgentSession,\n type AgentResumeSessionOptions,\n type AgentSessionOptions,\n} from './session.ts'\nimport { captureOutputFormat } from './output-format.ts'\n\n/**\n * Fields to hand a provider's HTTP adapter for this agent's calls: extra\n * headers, or fields deep-merged into the serialized request body. The\n * caller's value always wins, even over a field the route itself set;\n * `null` in `body` deletes a field the route set.\n */\nexport interface AgentProviderOptions {\n readonly headers?: Readonly<Record<string, string>>\n readonly body?: Readonly<Record<string, unknown>>\n}\n\nexport interface AgentDefinitionInput {\n /** Stable code-owned identity used by traces and catalogs. */\n readonly id: string\n /** Human-readable display name; defaults to `id`. */\n readonly name?: string\n readonly description?: string\n /** Provider route; defaults to `codex`. */\n readonly provider?: string\n /** Provider model id; defaults to `gpt-5.6-luna`. */\n readonly model?: string\n /**\n * Provider reasoning effort. Omitted means no preference.\n *\n * Pure pass-through: omitted, no effort field reaches the wire request at\n * all; set, the exact string is forwarded to the provider's own effort\n * field verbatim. The SDK never validates it against a ladder or invents a\n * default — an unsupported value is the provider's rejection to make, in\n * its own error shape, not a guess this package would get stale.\n */\n readonly effort?: string\n /** Requested output budget; omission uses the selected model's declared default/cap. */\n readonly maxTokens?: number\n /** Overrides the model/route/runtime-defaults tiers, same precedence as `maxTokens`. */\n readonly contextWindow?: number\n /** Overrides the model/route/runtime-defaults tiers, same precedence as `maxTokens`. */\n readonly inputModalities?: readonly ModelModality[]\n /** The agent's stable system instructions. */\n readonly instructions: string\n /** Execution policy; defaults to `basic`. */\n readonly mode?: AgentMode\n /** Host-executed tools owned by this definition. */\n readonly tools?: readonly ToolDefinition<any>[]\n /** Provider-executed tools such as web search or image generation. */\n readonly nativeTools?: readonly NativeToolSchema[]\n /** Inline web skills and/or lazy providers such as filesystem discovery. */\n readonly skills?: readonly SkillSource[]\n /** Optional allowlist resolved across definition and per-session skill sources. */\n readonly skillIds?: readonly string[]\n /** Progressive-disclosure catalog and resource limits. */\n readonly skillOptions?: AgentSkillOptions\n /**\n * Model-visible context this agent always recomputes before a model round.\n *\n * Sections are platform-neutral callbacks. A filesystem-backed one (project\n * instruction files, working-tree state) is built by a platform package and\n * mounted here or per session.\n */\n readonly contextSections?: readonly ContextSection[]\n readonly toolChoice?: ToolChoice\n /** Constrain visible model output to plain text or a named JSON Schema. */\n readonly outputFormat?: ModelOutputFormat\n /** Maximum model iterations for one user turn; defaults to 16. */\n /** Model steps per prompt; 'auto' continues without a fixed step ceiling. */\n readonly maxTurns?: number | 'auto'\n /** Maximum host tool calls for one user turn; defaults to 64. */\n readonly maxToolCalls?: number\n /** Public progress narration policy; defaults to `concise`. */\n readonly commentary?: 'auto' | 'concise' | 'off'\n /** Durable task facts injected outside compactable conversation history. */\n readonly memory?: AgentMemoryConfigInput\n /** Automatic context checkpointing; false disables it. Defaults to enabled. */\n readonly compaction?: AgentCompactionOptions | false\n /** Extra headers/body fields for this agent's provider requests; this agent's value wins where it collides with the route's own. */\n readonly providerOptions?: AgentProviderOptions\n}\n\nexport interface AgentDefinition {\n readonly id: string\n readonly name: string\n readonly description: string | undefined\n readonly provider: string\n readonly model: string\n readonly effort: ReasoningEffort | undefined\n readonly maxTokens: number | undefined\n readonly contextWindow: number | undefined\n readonly inputModalities: readonly ModelModality[] | undefined\n readonly instructions: string\n readonly mode: AgentMode\n readonly tools: readonly ToolDefinition<any>[]\n readonly nativeTools: readonly NativeToolSchema[]\n readonly skills: readonly SkillSource[]\n readonly skillIds: readonly string[] | undefined\n readonly skillOptions: ResolvedAgentSkillOptions\n readonly contextSections: readonly ContextSection[]\n readonly toolChoice: ToolChoice | undefined\n readonly outputFormat: ModelOutputFormat | undefined\n readonly maxTurns: number | 'auto'\n readonly maxToolCalls: number\n readonly commentary: 'auto' | 'concise' | 'off'\n readonly memory: AgentMemoryConfig\n readonly compaction: AgentCompactionConfig | false\n readonly providerOptions: AgentProviderOptions | undefined\n}\n\nexport interface DefinedAgent extends AgentDefinition {\n /** Start an isolated, multi-turn conversation for this definition. */\n createSession(options: AgentSessionOptions): AgentSession\n /** Resume a snapshot without manually hydrating history and memory. */\n resumeSession(options: AgentResumeSessionOptions): AgentSession\n /** Derive a definition while preserving all unspecified settings. */\n with(overrides: AgentDefinitionOverrides): DefinedAgent\n}\n\nexport type AgentDefinitionOverrides = Partial<Omit<AgentDefinitionInput, 'id'>>\nexport type CloneAgentOverrides = AgentDefinitionOverrides & { readonly id: string }\ntype MergeAgentOverrides = AgentDefinitionOverrides & { readonly id?: string }\n\nconst ID_PATTERN = /^[a-zA-Z][a-zA-Z0-9_-]*$/\n\nclass DefinedAgentValue implements DefinedAgent {\n readonly id: string\n readonly name: string\n readonly description: string | undefined\n readonly provider: string\n readonly model: string\n readonly effort: ReasoningEffort | undefined\n readonly maxTokens: number | undefined\n readonly contextWindow: number | undefined\n readonly inputModalities: readonly ModelModality[] | undefined\n readonly instructions: string\n readonly mode: AgentMode\n readonly tools: readonly ToolDefinition<any>[]\n readonly nativeTools: readonly NativeToolSchema[]\n readonly skills: readonly SkillSource[]\n readonly skillIds: readonly string[] | undefined\n readonly skillOptions: ResolvedAgentSkillOptions\n readonly contextSections: readonly ContextSection[]\n readonly toolChoice: ToolChoice | undefined\n readonly outputFormat: ModelOutputFormat | undefined\n readonly maxTurns: number | 'auto'\n readonly maxToolCalls: number\n readonly commentary: 'auto' | 'concise' | 'off'\n readonly memory: AgentMemoryConfig\n readonly compaction: AgentCompactionConfig | false\n readonly providerOptions: AgentProviderOptions | undefined\n\n constructor(input: AgentDefinitionInput) {\n validate(input)\n this.id = input.id\n this.name = input.name ?? input.id\n this.description = input.description\n this.provider = input.provider ?? 'codex'\n this.model = input.model ?? 'gpt-5.6-luna'\n this.effort = input.effort === undefined ? undefined : ReasoningEffortId(input.effort)\n this.maxTokens = input.maxTokens\n this.contextWindow = input.contextWindow\n this.inputModalities = input.inputModalities === undefined ? undefined : Object.freeze([...input.inputModalities])\n this.instructions = input.instructions\n this.mode = input.mode ?? 'basic'\n this.tools = Object.freeze([...(input.tools ?? [])])\n this.nativeTools = Object.freeze((input.nativeTools ?? []).map(tool => Object.freeze({ ...tool })))\n this.skills = Object.freeze([...(input.skills ?? [])])\n this.skillIds = input.skillIds === undefined ? undefined : Object.freeze([...input.skillIds])\n this.skillOptions = resolveSkillOptions(input.skillOptions)\n this.contextSections = captureContextSections(input.contextSections) ?? Object.freeze([])\n this.toolChoice = input.toolChoice\n this.outputFormat = captureOutputFormat(input.outputFormat)\n this.maxTurns = input.maxTurns ?? 16\n this.maxToolCalls = input.maxToolCalls ?? 64\n this.commentary = input.commentary ?? 'concise'\n this.memory = resolveMemoryConfig(input.memory)\n this.compaction = input.compaction === false ? false : resolveCompactionConfig(input.compaction)\n this.providerOptions = input.providerOptions === undefined ? undefined : Object.freeze({\n ...(input.providerOptions.headers === undefined ? {} : { headers: Object.freeze({ ...input.providerOptions.headers }) }),\n ...(input.providerOptions.body === undefined ? {} : { body: Object.freeze({ ...input.providerOptions.body }) }),\n })\n Object.freeze(this)\n }\n\n createSession(options: AgentSessionOptions): AgentSession {\n return new AgentSession(this, options)\n }\n\n resumeSession(options: AgentResumeSessionOptions): AgentSession {\n return AgentSession.fromSnapshot(this, options)\n }\n\n with(overrides: AgentDefinitionOverrides): DefinedAgent {\n return defineAgent(mergedInput(this, overrides))\n }\n}\n\n/** Define and validate one reusable agent. */\nexport function defineAgent(input: AgentDefinitionInput): DefinedAgent {\n return new DefinedAgentValue(input)\n}\n\n/** Clone an agent under a new stable id. */\nexport function cloneAgent(source: AgentDefinition, overrides: CloneAgentOverrides): DefinedAgent {\n return defineAgent(mergedInput(source, overrides))\n}\n\nfunction mergedInput(\n source: AgentDefinition,\n overrides: MergeAgentOverrides,\n): AgentDefinitionInput {\n const description = overrides.description ?? source.description\n const toolChoice = overrides.toolChoice ?? source.toolChoice\n const outputFormat = overrides.outputFormat ?? source.outputFormat\n const skillIds = overrides.skillIds ?? source.skillIds\n const maxTokens = overrides.maxTokens ?? source.maxTokens\n const contextWindow = overrides.contextWindow ?? source.contextWindow\n const inputModalities = overrides.inputModalities ?? source.inputModalities\n const providerOptions = overrides.providerOptions ?? source.providerOptions\n return {\n id: overrides.id ?? source.id,\n name: overrides.name ?? source.name,\n ...(description === undefined ? {} : { description }),\n provider: overrides.provider ?? source.provider,\n model: overrides.model ?? source.model,\n ...(overrides.effort ?? source.effort) === undefined\n ? {}\n : { effort: (overrides.effort ?? source.effort) as string },\n ...(maxTokens === undefined ? {} : { maxTokens }),\n ...(contextWindow === undefined ? {} : { contextWindow }),\n ...(inputModalities === undefined ? {} : { inputModalities }),\n instructions: overrides.instructions ?? source.instructions,\n mode: overrides.mode ?? source.mode,\n tools: overrides.tools ?? source.tools,\n nativeTools: overrides.nativeTools ?? source.nativeTools,\n skills: overrides.skills ?? source.skills,\n ...(skillIds === undefined ? {} : { skillIds }),\n skillOptions: overrides.skillOptions ?? source.skillOptions,\n contextSections: overrides.contextSections ?? source.contextSections,\n ...(toolChoice === undefined ? {} : { toolChoice }),\n ...(outputFormat === undefined ? {} : { outputFormat }),\n maxTurns: overrides.maxTurns ?? source.maxTurns,\n maxToolCalls: overrides.maxToolCalls ?? source.maxToolCalls,\n commentary: overrides.commentary ?? source.commentary,\n memory: overrides.memory ?? source.memory,\n compaction: overrides.compaction ?? compactionInput(source.compaction),\n ...(providerOptions === undefined ? {} : { providerOptions }),\n }\n}\n\nfunction compactionInput(value: AgentCompactionConfig | false): AgentCompactionOptions | false {\n if (value === false) return false\n return {\n auto: value.auto,\n ...(value.maxInputTokens === undefined ? {} : { maxInputTokens: value.maxInputTokens }),\n thresholdRatio: value.thresholdRatio,\n ...(value.retainRatio === undefined ? {} : { retainRatio: value.retainRatio }),\n ...(value.retainTokens === undefined ? {} : { retainTokens: value.retainTokens }),\n ...(value.summarizationProvider === undefined ? {} : { summarizationProvider: value.summarizationProvider }),\n ...(value.summarizationModel === undefined ? {} : { summarizationModel: value.summarizationModel }),\n ...(value.summarizationEffort === undefined ? {} : { summarizationEffort: value.summarizationEffort }),\n maxSummaryTokens: value.maxSummaryTokens,\n compactionRetries: value.compactionRetries,\n maxOverflowRetries: value.maxOverflowRetries,\n maxSummaryInputChars: value.maxSummaryInputChars,\n maxSummaryRequestChars: value.maxSummaryRequestChars,\n maxSummaryRequestBytes: value.maxSummaryRequestBytes,\n maxSummaryResponseBytes: value.maxSummaryResponseBytes,\n maxSummaryStreamEvents: value.maxSummaryStreamEvents,\n summaryTimeoutMs: value.summaryTimeoutMs,\n teardownTimeoutMs: value.teardownTimeoutMs,\n maxToolResultChars: value.maxToolResultChars,\n }\n}\n\nfunction validate(input: AgentDefinitionInput): void {\n if (!ID_PATTERN.test(input.id)) {\n throw new TypeError('agent id must start with a letter and contain only letters, numbers, _ or -')\n }\n for (const [field, value] of [\n ['name', input.name], ['description', input.description], ['provider', input.provider],\n ['model', input.model], ['effort', input.effort],\n ] as const) {\n if (value !== undefined && value.trim().length === 0) {\n throw new TypeError(`agent ${field} must be a non-empty string`)\n }\n }\n if (input.instructions.trim().length === 0) {\n throw new TypeError('agent instructions must be a non-empty string')\n }\n if (input.maxTurns !== undefined && input.maxTurns !== 'auto'\n && (!Number.isSafeInteger(input.maxTurns) || input.maxTurns < 1)) {\n throw new RangeError(\"agent maxTurns must be a positive safe integer or 'auto'\")\n }\n if (input.maxTokens !== undefined\n && (!Number.isSafeInteger(input.maxTokens) || input.maxTokens < 1)) {\n throw new RangeError('agent maxTokens must be a positive safe integer')\n }\n if (input.contextWindow !== undefined\n && (!Number.isSafeInteger(input.contextWindow) || input.contextWindow < 1)) {\n throw new RangeError('agent contextWindow must be a positive safe integer')\n }\n if (input.inputModalities !== undefined\n && (input.inputModalities.length === 0\n || new Set(input.inputModalities).size !== input.inputModalities.length)) {\n throw new RangeError('agent inputModalities must be non-empty and unique')\n }\n if (input.maxToolCalls !== undefined\n && (!Number.isInteger(input.maxToolCalls) || input.maxToolCalls < 1)) {\n throw new RangeError('agent maxToolCalls must be a positive integer')\n }\n const names = new Set<string>()\n for (const tool of input.tools ?? []) {\n if (typeof tool.name !== 'string' || tool.name.trim().length === 0) {\n throw new TypeError('agent host tools must have a non-empty name')\n }\n if (typeof tool.description !== 'string' || tool.description.trim().length === 0) {\n throw new TypeError(`agent host tool '${tool.name}' must have a non-empty description`)\n }\n if (typeof tool.parameters !== 'object' || tool.parameters === null) {\n throw new TypeError(`agent host tool '${tool.name}' must declare JSON Schema parameters`)\n }\n if (typeof tool.execute !== 'function') {\n throw new TypeError(`agent host tool '${tool.name}' must implement execute()`)\n }\n if (tool.timeoutMs !== undefined && (!Number.isFinite(tool.timeoutMs) || tool.timeoutMs <= 0)) {\n throw new RangeError(`agent host tool '${tool.name}' must have a positive timeoutMs`)\n }\n if (names.has(tool.name)) throw new TypeError(`agent has duplicate host tool '${tool.name}'`)\n names.add(tool.name)\n }\n for (const tool of input.nativeTools ?? []) {\n if (typeof tool.name !== 'string' || tool.name.trim().length === 0) {\n throw new TypeError('agent native tools must have a non-empty name')\n }\n if (names.has(tool.name)) throw new TypeError(`agent has duplicate tool '${tool.name}'`)\n names.add(tool.name)\n }\n if ((input.skills?.length ?? 0) > 0 || (input.skillIds?.length ?? 0) > 0) {\n for (const reserved of SKILL_TOOL_NAMES) {\n if (names.has(reserved)) throw new TypeError(`agent tool '${reserved}' collides with the skill runtime`)\n }\n }\n const directSkills = new Set<string>()\n const providers = new Set<string>()\n const allowedSkills = new Set<string>()\n for (const id of input.skillIds ?? []) {\n validateSkillId(id, 'agent skill')\n if (allowedSkills.has(id)) throw new TypeError(`agent has duplicate allowed skill '${id}'`)\n allowedSkills.add(id)\n }\n for (const source of input.skills ?? []) {\n validateSkillSource(source)\n if (source.kind === 'skill') {\n if (directSkills.has(source.id)) throw new TypeError(`agent has duplicate inline skill '${source.id}'`)\n directSkills.add(source.id)\n } else {\n if (providers.has(source.id)) throw new TypeError(`agent has duplicate skill provider '${source.id}'`)\n providers.add(source.id)\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"definition.js","names":[],"sources":["../../../src/agent/define/definition.ts"],"sourcesContent":["/** Declarative, code-first agent definitions. */\n\nimport type { ModelOutputFormat, ToolChoice, NativeToolSchema, ModelModality } from '../../contract/index.ts'\nimport { ReasoningEffortId, type ReasoningEffortId as ReasoningEffort } from '../../primitives/index.ts'\nimport type { AgentMode } from '../mode/run-agent.ts'\nimport type { ToolDefinition } from '../tool/definition.ts'\nimport { captureContextSections } from '../context/section.ts'\nimport type { ContextSection } from '../context/types.ts'\nimport {\n SKILL_TOOL_NAMES,\n resolveSkillOptions,\n validateSkillId,\n validateSkillSource,\n type AgentSkillOptions,\n type ResolvedAgentSkillOptions,\n type SkillSource,\n} from '../skill/index.ts'\nimport {\n resolveCompactionConfig,\n type AgentCompactionConfig,\n type AgentCompactionOptions,\n} from '../memory/compaction-config.ts'\nimport {\n resolveMemoryConfig,\n type AgentMemoryConfig,\n type AgentMemoryConfigInput,\n} from '../memory/memory.ts'\nimport {\n AgentSession,\n type AgentResumeSessionOptions,\n type AgentSessionOptions,\n} from './session.ts'\nimport { captureOutputFormat } from './output-format.ts'\n\n/**\n * Fields to hand a provider's HTTP adapter for this agent's calls: extra\n * headers, or fields deep-merged into the serialized request body. The\n * caller's value always wins, even over a field the route itself set;\n * `null` in `body` deletes a field the route set.\n */\nexport interface AgentProviderOptions {\n readonly headers?: Readonly<Record<string, string>>\n readonly body?: Readonly<Record<string, unknown>>\n}\n\nexport interface AgentDefinitionInput {\n /** Stable code-owned identity used by traces and catalogs. */\n readonly id: string\n /** Human-readable display name; defaults to `id`. */\n readonly name?: string\n readonly description?: string\n /** Provider route; defaults to `codex`. */\n readonly provider?: string\n /** Provider model id; defaults to `gpt-5.6-luna`. */\n readonly model?: string\n /**\n * Provider reasoning effort. Omitted means no preference.\n *\n * Pure pass-through: omitted, no effort field reaches the wire request at\n * all; set, the exact string is forwarded to the provider's own effort\n * field verbatim. The SDK never validates it against a ladder or invents a\n * default — an unsupported value is the provider's rejection to make, in\n * its own error shape, not a guess this package would get stale.\n */\n readonly effort?: string\n /** Requested output budget; omission uses the selected model's declared default/cap. */\n readonly maxTokens?: number\n /** Overrides the model/route/runtime-defaults tiers, same precedence as `maxTokens`. */\n readonly contextWindow?: number\n /** Overrides the model/route/runtime-defaults tiers, same precedence as `maxTokens`. */\n readonly inputModalities?: readonly ModelModality[]\n /** The agent's stable system instructions. */\n readonly instructions: string\n /** Execution policy; defaults to `basic`. */\n readonly mode?: AgentMode\n /** Host-executed tools owned by this definition. */\n readonly tools?: readonly ToolDefinition<any>[]\n /** Provider-executed tools such as web search or image generation. */\n readonly nativeTools?: readonly NativeToolSchema[]\n /** Inline web skills and/or lazy providers such as filesystem discovery. */\n readonly skills?: readonly SkillSource[]\n /** Optional allowlist resolved across definition and per-session skill sources. */\n readonly skillIds?: readonly string[]\n /** Progressive-disclosure catalog and resource limits. */\n readonly skillOptions?: AgentSkillOptions\n /**\n * Model-visible context this agent always recomputes before a model round.\n *\n * Sections are platform-neutral callbacks. A filesystem-backed one (project\n * instruction files, working-tree state) is built by a platform package and\n * mounted here or per session.\n */\n readonly contextSections?: readonly ContextSection[]\n readonly toolChoice?: ToolChoice\n /** Constrain visible model output to plain text or a named JSON Schema. */\n readonly outputFormat?: ModelOutputFormat\n /** Maximum model iterations for one user turn; defaults to 16. */\n /** Model steps per prompt; 'auto' continues without a fixed step ceiling. */\n readonly maxTurns?: number | 'auto'\n /** Maximum host tool calls for one user turn; defaults to 64. */\n readonly maxToolCalls?: number\n /** Public progress narration policy; defaults to `auto` (caller-defined style). */\n readonly commentary?: 'auto' | 'concise' | 'off'\n /** Durable task facts injected outside compactable conversation history. */\n readonly memory?: AgentMemoryConfigInput\n /** Automatic context checkpointing; false disables it. Defaults to enabled. */\n readonly compaction?: AgentCompactionOptions | false\n /** Extra headers/body fields for this agent's provider requests; this agent's value wins where it collides with the route's own. */\n readonly providerOptions?: AgentProviderOptions\n}\n\nexport interface AgentDefinition {\n readonly id: string\n readonly name: string\n readonly description: string | undefined\n readonly provider: string\n readonly model: string\n readonly effort: ReasoningEffort | undefined\n readonly maxTokens: number | undefined\n readonly contextWindow: number | undefined\n readonly inputModalities: readonly ModelModality[] | undefined\n readonly instructions: string\n readonly mode: AgentMode\n readonly tools: readonly ToolDefinition<any>[]\n readonly nativeTools: readonly NativeToolSchema[]\n readonly skills: readonly SkillSource[]\n readonly skillIds: readonly string[] | undefined\n readonly skillOptions: ResolvedAgentSkillOptions\n readonly contextSections: readonly ContextSection[]\n readonly toolChoice: ToolChoice | undefined\n readonly outputFormat: ModelOutputFormat | undefined\n readonly maxTurns: number | 'auto'\n readonly maxToolCalls: number\n readonly commentary: 'auto' | 'concise' | 'off'\n readonly memory: AgentMemoryConfig\n readonly compaction: AgentCompactionConfig | false\n readonly providerOptions: AgentProviderOptions | undefined\n}\n\nexport interface DefinedAgent extends AgentDefinition {\n /** Start an isolated, multi-turn conversation for this definition. */\n createSession(options: AgentSessionOptions): AgentSession\n /** Resume a snapshot without manually hydrating history and memory. */\n resumeSession(options: AgentResumeSessionOptions): AgentSession\n /** Derive a definition while preserving all unspecified settings. */\n with(overrides: AgentDefinitionOverrides): DefinedAgent\n}\n\nexport type AgentDefinitionOverrides = Partial<Omit<AgentDefinitionInput, 'id'>>\nexport type CloneAgentOverrides = AgentDefinitionOverrides & { readonly id: string }\ntype MergeAgentOverrides = AgentDefinitionOverrides & { readonly id?: string }\n\nconst ID_PATTERN = /^[a-zA-Z][a-zA-Z0-9_-]*$/\n\nclass DefinedAgentValue implements DefinedAgent {\n readonly id: string\n readonly name: string\n readonly description: string | undefined\n readonly provider: string\n readonly model: string\n readonly effort: ReasoningEffort | undefined\n readonly maxTokens: number | undefined\n readonly contextWindow: number | undefined\n readonly inputModalities: readonly ModelModality[] | undefined\n readonly instructions: string\n readonly mode: AgentMode\n readonly tools: readonly ToolDefinition<any>[]\n readonly nativeTools: readonly NativeToolSchema[]\n readonly skills: readonly SkillSource[]\n readonly skillIds: readonly string[] | undefined\n readonly skillOptions: ResolvedAgentSkillOptions\n readonly contextSections: readonly ContextSection[]\n readonly toolChoice: ToolChoice | undefined\n readonly outputFormat: ModelOutputFormat | undefined\n readonly maxTurns: number | 'auto'\n readonly maxToolCalls: number\n readonly commentary: 'auto' | 'concise' | 'off'\n readonly memory: AgentMemoryConfig\n readonly compaction: AgentCompactionConfig | false\n readonly providerOptions: AgentProviderOptions | undefined\n\n constructor(input: AgentDefinitionInput) {\n validate(input)\n this.id = input.id\n this.name = input.name ?? input.id\n this.description = input.description\n this.provider = input.provider ?? 'codex'\n this.model = input.model ?? 'gpt-5.6-luna'\n this.effort = input.effort === undefined ? undefined : ReasoningEffortId(input.effort)\n this.maxTokens = input.maxTokens\n this.contextWindow = input.contextWindow\n this.inputModalities = input.inputModalities === undefined ? undefined : Object.freeze([...input.inputModalities])\n this.instructions = input.instructions\n this.mode = input.mode ?? 'basic'\n this.tools = Object.freeze([...(input.tools ?? [])])\n this.nativeTools = Object.freeze((input.nativeTools ?? []).map(tool => Object.freeze({ ...tool })))\n this.skills = Object.freeze([...(input.skills ?? [])])\n this.skillIds = input.skillIds === undefined ? undefined : Object.freeze([...input.skillIds])\n this.skillOptions = resolveSkillOptions(input.skillOptions)\n this.contextSections = captureContextSections(input.contextSections) ?? Object.freeze([])\n this.toolChoice = input.toolChoice\n this.outputFormat = captureOutputFormat(input.outputFormat)\n this.maxTurns = input.maxTurns ?? 16\n this.maxToolCalls = input.maxToolCalls ?? 64\n this.commentary = input.commentary ?? 'auto'\n this.memory = resolveMemoryConfig(input.memory)\n this.compaction = input.compaction === false ? false : resolveCompactionConfig(input.compaction)\n this.providerOptions = input.providerOptions === undefined ? undefined : Object.freeze({\n ...(input.providerOptions.headers === undefined ? {} : { headers: Object.freeze({ ...input.providerOptions.headers }) }),\n ...(input.providerOptions.body === undefined ? {} : { body: Object.freeze({ ...input.providerOptions.body }) }),\n })\n Object.freeze(this)\n }\n\n createSession(options: AgentSessionOptions): AgentSession {\n return new AgentSession(this, options)\n }\n\n resumeSession(options: AgentResumeSessionOptions): AgentSession {\n return AgentSession.fromSnapshot(this, options)\n }\n\n with(overrides: AgentDefinitionOverrides): DefinedAgent {\n return defineAgent(mergedInput(this, overrides))\n }\n}\n\n/** Define and validate one reusable agent. */\nexport function defineAgent(input: AgentDefinitionInput): DefinedAgent {\n return new DefinedAgentValue(input)\n}\n\n/** Clone an agent under a new stable id. */\nexport function cloneAgent(source: AgentDefinition, overrides: CloneAgentOverrides): DefinedAgent {\n return defineAgent(mergedInput(source, overrides))\n}\n\nfunction mergedInput(\n source: AgentDefinition,\n overrides: MergeAgentOverrides,\n): AgentDefinitionInput {\n const description = overrides.description ?? source.description\n const toolChoice = overrides.toolChoice ?? source.toolChoice\n const outputFormat = overrides.outputFormat ?? source.outputFormat\n const skillIds = overrides.skillIds ?? source.skillIds\n const maxTokens = overrides.maxTokens ?? source.maxTokens\n const contextWindow = overrides.contextWindow ?? source.contextWindow\n const inputModalities = overrides.inputModalities ?? source.inputModalities\n const providerOptions = overrides.providerOptions ?? source.providerOptions\n return {\n id: overrides.id ?? source.id,\n name: overrides.name ?? source.name,\n ...(description === undefined ? {} : { description }),\n provider: overrides.provider ?? source.provider,\n model: overrides.model ?? source.model,\n ...(overrides.effort ?? source.effort) === undefined\n ? {}\n : { effort: (overrides.effort ?? source.effort) as string },\n ...(maxTokens === undefined ? {} : { maxTokens }),\n ...(contextWindow === undefined ? {} : { contextWindow }),\n ...(inputModalities === undefined ? {} : { inputModalities }),\n instructions: overrides.instructions ?? source.instructions,\n mode: overrides.mode ?? source.mode,\n tools: overrides.tools ?? source.tools,\n nativeTools: overrides.nativeTools ?? source.nativeTools,\n skills: overrides.skills ?? source.skills,\n ...(skillIds === undefined ? {} : { skillIds }),\n skillOptions: overrides.skillOptions ?? source.skillOptions,\n contextSections: overrides.contextSections ?? source.contextSections,\n ...(toolChoice === undefined ? {} : { toolChoice }),\n ...(outputFormat === undefined ? {} : { outputFormat }),\n maxTurns: overrides.maxTurns ?? source.maxTurns,\n maxToolCalls: overrides.maxToolCalls ?? source.maxToolCalls,\n commentary: overrides.commentary ?? source.commentary,\n memory: overrides.memory ?? source.memory,\n compaction: overrides.compaction ?? compactionInput(source.compaction),\n ...(providerOptions === undefined ? {} : { providerOptions }),\n }\n}\n\nfunction compactionInput(value: AgentCompactionConfig | false): AgentCompactionOptions | false {\n if (value === false) return false\n return {\n auto: value.auto,\n ...(value.maxInputTokens === undefined ? {} : { maxInputTokens: value.maxInputTokens }),\n thresholdRatio: value.thresholdRatio,\n ...(value.retainRatio === undefined ? {} : { retainRatio: value.retainRatio }),\n ...(value.retainTokens === undefined ? {} : { retainTokens: value.retainTokens }),\n ...(value.summarizationProvider === undefined ? {} : { summarizationProvider: value.summarizationProvider }),\n ...(value.summarizationModel === undefined ? {} : { summarizationModel: value.summarizationModel }),\n ...(value.summarizationEffort === undefined ? {} : { summarizationEffort: value.summarizationEffort }),\n maxSummaryTokens: value.maxSummaryTokens,\n compactionRetries: value.compactionRetries,\n maxOverflowRetries: value.maxOverflowRetries,\n maxSummaryInputChars: value.maxSummaryInputChars,\n maxSummaryRequestChars: value.maxSummaryRequestChars,\n maxSummaryRequestBytes: value.maxSummaryRequestBytes,\n maxSummaryResponseBytes: value.maxSummaryResponseBytes,\n maxSummaryStreamEvents: value.maxSummaryStreamEvents,\n summaryTimeoutMs: value.summaryTimeoutMs,\n teardownTimeoutMs: value.teardownTimeoutMs,\n maxToolResultChars: value.maxToolResultChars,\n }\n}\n\nfunction validate(input: AgentDefinitionInput): void {\n if (!ID_PATTERN.test(input.id)) {\n throw new TypeError('agent id must start with a letter and contain only letters, numbers, _ or -')\n }\n for (const [field, value] of [\n ['name', input.name], ['description', input.description], ['provider', input.provider],\n ['model', input.model], ['effort', input.effort],\n ] as const) {\n if (value !== undefined && value.trim().length === 0) {\n throw new TypeError(`agent ${field} must be a non-empty string`)\n }\n }\n if (input.instructions.trim().length === 0) {\n throw new TypeError('agent instructions must be a non-empty string')\n }\n if (input.maxTurns !== undefined && input.maxTurns !== 'auto'\n && (!Number.isSafeInteger(input.maxTurns) || input.maxTurns < 1)) {\n throw new RangeError(\"agent maxTurns must be a positive safe integer or 'auto'\")\n }\n if (input.maxTokens !== undefined\n && (!Number.isSafeInteger(input.maxTokens) || input.maxTokens < 1)) {\n throw new RangeError('agent maxTokens must be a positive safe integer')\n }\n if (input.contextWindow !== undefined\n && (!Number.isSafeInteger(input.contextWindow) || input.contextWindow < 1)) {\n throw new RangeError('agent contextWindow must be a positive safe integer')\n }\n if (input.inputModalities !== undefined\n && (input.inputModalities.length === 0\n || new Set(input.inputModalities).size !== input.inputModalities.length)) {\n throw new RangeError('agent inputModalities must be non-empty and unique')\n }\n if (input.maxToolCalls !== undefined\n && (!Number.isInteger(input.maxToolCalls) || input.maxToolCalls < 1)) {\n throw new RangeError('agent maxToolCalls must be a positive integer')\n }\n const names = new Set<string>()\n for (const tool of input.tools ?? []) {\n if (typeof tool.name !== 'string' || tool.name.trim().length === 0) {\n throw new TypeError('agent host tools must have a non-empty name')\n }\n if (typeof tool.description !== 'string' || tool.description.trim().length === 0) {\n throw new TypeError(`agent host tool '${tool.name}' must have a non-empty description`)\n }\n if (typeof tool.parameters !== 'object' || tool.parameters === null) {\n throw new TypeError(`agent host tool '${tool.name}' must declare JSON Schema parameters`)\n }\n if (typeof tool.execute !== 'function') {\n throw new TypeError(`agent host tool '${tool.name}' must implement execute()`)\n }\n if (tool.timeoutMs !== undefined && (!Number.isFinite(tool.timeoutMs) || tool.timeoutMs <= 0)) {\n throw new RangeError(`agent host tool '${tool.name}' must have a positive timeoutMs`)\n }\n if (names.has(tool.name)) throw new TypeError(`agent has duplicate host tool '${tool.name}'`)\n names.add(tool.name)\n }\n for (const tool of input.nativeTools ?? []) {\n if (typeof tool.name !== 'string' || tool.name.trim().length === 0) {\n throw new TypeError('agent native tools must have a non-empty name')\n }\n if (names.has(tool.name)) throw new TypeError(`agent has duplicate tool '${tool.name}'`)\n names.add(tool.name)\n }\n if ((input.skills?.length ?? 0) > 0 || (input.skillIds?.length ?? 0) > 0) {\n for (const reserved of SKILL_TOOL_NAMES) {\n if (names.has(reserved)) throw new TypeError(`agent tool '${reserved}' collides with the skill runtime`)\n }\n }\n const directSkills = new Set<string>()\n const providers = new Set<string>()\n const allowedSkills = new Set<string>()\n for (const id of input.skillIds ?? []) {\n validateSkillId(id, 'agent skill')\n if (allowedSkills.has(id)) throw new TypeError(`agent has duplicate allowed skill '${id}'`)\n allowedSkills.add(id)\n }\n for (const source of input.skills ?? []) {\n validateSkillSource(source)\n if (source.kind === 'skill') {\n if (directSkills.has(source.id)) throw new TypeError(`agent has duplicate inline skill '${source.id}'`)\n directSkills.add(source.id)\n } else {\n if (providers.has(source.id)) throw new TypeError(`agent has duplicate skill provider '${source.id}'`)\n providers.add(source.id)\n }\n }\n}\n"],"mappings":"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"}
@@ -13,6 +13,7 @@ import { ToolCatalog } from "../../tool/registry.js";
13
13
  import { ToolInterceptor } from "../../tool/pipeline.js";
14
14
  import { RunLedgerLimits, UsagePolicy } from "../../accounting/report.js";
15
15
  import { TurnHooks } from "../../loop/events.js";
16
+ import { ExperimentalProgramGrant } from "../../tool/nested.js";
16
17
  import { ModelRegistry } from "../../../runtime/registry.js";
17
18
  import { ContextSection } from "../../context/types.js";
18
19
  import { UserInputBroker } from "../../mode/user-input.js";
@@ -109,6 +110,11 @@ interface AgentSessionOptions {
109
110
  * back what was taken out of its context.
110
111
  */
111
112
  readonly spillStore?: SpillStore;
113
+ /**
114
+ * Experimental: program tools and the tools each may call. Off by default.
115
+ * Child calls spend this turn's tool budget and never enter model history.
116
+ */
117
+ readonly experimentalPrograms?: readonly ExperimentalProgramGrant[];
112
118
  readonly interceptors?: readonly ToolInterceptor[];
113
119
  /**
114
120
  * Model-visible context recomputed before every model round.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../../../../src/agent/define/session/types.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;KAsBY,sBAAsB;;UAGjB;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;;;;WAKA;;;;;;;;WAQA,qBAAqB;;;;;;;;;;;WAWrB;;;;;WAKA;;WAEA;WACA;WACA;;WAEA;;WAEA;;UAGM;WACN;WACA;;UAGM;WACN,UAAU;;WAEV;;WAEA,UAAU;;WAEV,gBAAgB;;WAEhB,gBAAgB;;WAEhB,QAAQ,uBAAuB;;WAE/B,kBAAkB;;WAElB;WACA,YAAY;WACZ,YAAY;;;;;;;;WAQZ,aAAa;WACb,wBAAwB;;;;;;;;WAQxB,2BAA2B;WAC3B,QAAQ;;WAER,cAAc;;WAEd,sBAAsB;;WAEtB,cAAc;;WAEd,eAAe;;WAEf,oBAAoB;;WAEpB,SAAS,cAAc;;WAEvB,aAAa;WACb;aACE,UAAU;aACV,eAAe;;;WAGjB,OAAO;;UAGD;EACf,OAAO,SAAS,cAAc,UAAU;EACxC,SAAS,gBAAgB,yCAAyC;EAClE,gBAAgB;;UAGD;WACN;WACA;WACA;WACA;;;;;;;;;;WAUA;;;UAIM,+BAA+B;WACrC,MAAM;;;UAIA;WACN;WACA;WACA;WACA,SAAS;WACT,QAAQ;;WAER;;aAEE,oBAAoB;;;UAIhB;WACN;WACA;WACA;WACA;WACA,UAAU;;WAEV,eAAe;;;UAIT,kCACP,KAAK;WACJ,UAAU;;UAGJ;;;;;;;;;;;WAWN;aAAmB;aAA2B;;;WAE9C;WACA,eAdM;WAeN,kBAAkB;;WAElB;;WAEA;WACA,SAAS;;WAET,WAAW,OAAO,yBAAyB;;UAGrC;WACN;WACA,SAAS;WACT,QAAQ;WACR,UAAU;;;UAIJ,uBAAuB,cAAc;WAC3C;WACA,QAAQ,QAAQ;WAChB,QAAQ,QAAQ"}
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../../../src/agent/define/session/types.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;KAuBY,sBAAsB;;UAGjB;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;;;;WAKA;;;;;;;;WAQA,qBAAqB;;;;;;;;;;;WAWrB;;;;;WAKA;;WAEA;WACA;WACA;;WAEA;;WAEA;;UAGM;WACN;WACA;;UAGM;WACN,UAAU;;WAEV;;WAEA,UAAU;;WAEV,gBAAgB;;WAEhB,gBAAgB;;WAEhB,QAAQ,uBAAuB;;WAE/B,kBAAkB;;WAElB;WACA,YAAY;WACZ,YAAY;;;;;;;;WAQZ,aAAa;;;;;WAKb,gCAAgC;WAChC,wBAAwB;;;;;;;;WAQxB,2BAA2B;WAC3B,QAAQ;;WAER,cAAc;;WAEd,sBAAsB;;WAEtB,cAAc;;WAEd,eAAe;;WAEf,oBAAoB;;WAEpB,SAAS,cAAc;;WAEvB,aAAa;WACb;aACE,UAAU;aACV,eAAe;;;WAGjB,OAAO;;UAGD;EACf,OAAO,SAAS,cAAc,UAAU;EACxC,SAAS,gBAAgB,yCAAyC;EAClE,gBAAgB;;UAGD;WACN;WACA;WACA;WACA;;;;;;;;;;WAUA;;;UAIM,+BAA+B;WACrC,MAAM;;;UAIA;WACN;WACA;WACA;WACA,SAAS;WACT,QAAQ;;WAER;;aAEE,oBAAoB;;;UAIhB;WACN;WACA;WACA;WACA;WACA,UAAU;;WAEV,eAAe;;;UAIT,kCACP,KAAK;WACJ,UAAU;;UAGJ;;;;;;;;;;;WAWN;aAAmB;aAA2B;;;WAE9C;WACA,eAdM;WAeN,kBAAkB;;WAElB;;WAEA;WACA,SAAS;;WAET,WAAW,OAAO,yBAAyB;;UAGrC;WACN;WACA,SAAS;WACT,QAAQ;WACR,UAAU;;;UAIJ,uBAAuB,cAAc;WAC3C;WACA,QAAQ,QAAQ;WAChB,QAAQ,QAAQ"}
@@ -24,6 +24,19 @@ declare class AgentSession {
24
24
  /** The overlay of the run that owns the session, so maintenance follows the same model. */
25
25
  private activeInvocation;
26
26
  private readonly idleWaiters;
27
+ /**
28
+ * Messages injected while a run is in flight, waiting for the next model
29
+ * request. Appending them at once put them AHEAD of the assistant output of
30
+ * the round already streaming, a round that never saw them; the next round
31
+ * then read "steer, then the work that ignored it" as work that answered it.
32
+ */
33
+ private pendingInjections;
34
+ /**
35
+ * A model request has been built and its output is not yet fully recorded.
36
+ * Only then is an injection held: hooks and team notices that inject between
37
+ * rounds still append at once, as they always have.
38
+ */
39
+ private roundInFlight;
27
40
  constructor(definition: AgentDefinition, options: AgentSessionOptions);
28
41
  /** Restore a JSON-round-tripped session snapshot with fresh runtime dependencies. */
29
42
  static fromSnapshot(definition: AgentDefinition, options: AgentResumeSessionOptions): AgentSession;
@@ -47,10 +60,20 @@ declare class AgentSession {
47
60
  /**
48
61
  * Append attributed context without starting a turn.
49
62
  *
50
- * A2A quiet delivery uses this primitive. The returned history sequence is a
51
- * delivery receipt and lets wake-up schedulers coalesce messages safely.
63
+ * A2A quiet delivery uses this primitive. The returned count includes queued
64
+ * inputs and lets wake-up schedulers coalesce messages safely; a mid-round
65
+ * receipt is provisional rather than the eventual persisted entry sequence.
52
66
  */
53
67
  inject(input: AgentInput): number;
68
+ /**
69
+ * Close the in-flight window once a round's output is fully recorded: after
70
+ * its tool results (`step-end`), after a final answer with no tool calls, or
71
+ * when the turn ends. The loop waits on this consumer, so held messages land
72
+ * exactly there, never between a tool call and its result.
73
+ */
74
+ private observeRoundBoundary;
75
+ /** Deliver held injections, in arrival order, at the chronological tail. */
76
+ private drainInjections;
54
77
  /** Resolve after the current run releases the session. */
55
78
  whenIdle(signal?: AbortSignal): Promise<void>;
56
79
  /** Start an eager run and expose both public events and its canonical terminal report. */
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","names":[],"sources":["../../../src/agent/define/session.ts"],"mappings":";;;;;;;cAkDa;WACF,YAAY;mBACJ;mBACA;UACT;mBACS;mBACA;;mBAEA;UACT;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;mBACS;EAEjB,YAAY,YAAY,iBAAiB,SAAS;;SA0F3C,aACL,YAAY,iBACZ,SAAS,4BACR;;MAcC;;MAGA,WAAW;;MAGX,UAAU;;MAGV,UAAU;;MAGV;;EAGJ,YAAY;;EAkBZ;;EAWM,QAAQ,aAAY,yBAA8B,QAAQ;UAYlD;;;;;;;EAyBd,OAAO,OAAO;;EAOd,SAAS,SAAS,cAAc;;EAyBhC,OAAO,OAAO,YAAY,aAAY,yBAA8B;;EAKpE,cAAc,aAAY,yBAA8B;;EAKlD,IAAI,OAAO,YAAY,aAAY,yBAA8B,QAAQ;;EAOzE,WAAW,aAAY,yBAA8B,QAAQ;UAM3D;UA8MA;UAYA;UAWA;UA0GA;UAuBA;UAIA;UAwCA;UAIA;UAeA;UAOA;UAkBM"}
1
+ {"version":3,"file":"session.d.ts","names":[],"sources":["../../../src/agent/define/session.ts"],"mappings":";;;;;;;cAoDa;WACF,YAAY;mBACJ;mBACA;UACT;mBACS;mBACA;;mBAEA;UACT;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;mBACS;;;;;;;UAOT;;;;;;UAMA;EAER,YAAY,YAAY,iBAAiB,SAAS;;SA0F3C,aACL,YAAY,iBACZ,SAAS,4BACR;;MAcC;;MAGA,WAAW;;MAGX,UAAU;;MAGV,UAAU;;MAGV;;EAGJ,YAAY;;EA6BZ;;EAYM,QAAQ,aAAY,yBAA8B,QAAQ;UAYlD;;;;;;;;EA0Bd,OAAO,OAAO;;;;;;;UAqBN;;UAiBA;;EAUR,SAAS,SAAS,cAAc;;EAyBhC,OAAO,OAAO,YAAY,aAAY,yBAA8B;;EAKpE,cAAc,aAAY,yBAA8B;;EAKlD,IAAI,OAAO,YAAY,aAAY,yBAA8B,QAAQ;;EAOzE,WAAW,aAAY,yBAA8B,QAAQ;UAM3D;UAsNA;UAkBA;UAWA;UA2GA;UAuBA;UAIA;UA6CA;UAIA;UAeA;UAOA;UAkBM"}
@@ -1,2 +1,2 @@
1
- import{waitForSettlement as e}from"../../async/settlement.js";import{ModelError as t}from"../../errors/model-error.js";import{contentHasDocument as n,contentHasImage as r}from"../../message/projection.js";import{AgentMemory as i}from"../memory/memory.js";import{normalizeToolPairing as a}from"../history/normalize.js";import{bindCompactionAccounting as o}from"../memory/accounting-binding.js";import{ContextCompactor as s}from"../memory/compaction.js";import{resolveCompactionConfig as c}from"../memory/compaction-config.js";import{bindSkillProviderLogger as l}from"../skill/provider/context.js";import{SkillCatalog as u}from"../skill/catalog.js";import{createSkillTools as d,renderSkillCatalog as f}from"../skill/tools.js";import{createRunTerminalRecord as p,withTerminalDelivery as m}from"../accounting/delivery/terminal.js";import{captureContextSections as h}from"../context/section.js";import{History as g}from"../history/history.js";import{AGENT_ACCOUNTING_ERROR_CODES as _,AgentRunError as v}from"../accounting/error.js";import{runAgent as y}from"../mode/run-agent.js";import{RunEventBuffer as b}from"../accounting/event-buffer.js";import{validateSessionSnapshot as x}from"./session/validation.js";import{resolveRuntimeLimits as S}from"./session/config.js";import{conversationId as C,deferred as w,errorCodeOf as T,messageOf as E,newConversationId as D,toolCatalog as O,userMessage as k}from"./session/common.js";import{captureResumedSkillActivations as A,prepareSkills as j}from"./session/skills.js";import{appendRunInstructions as M}from"./instructions.js";import{accountTraceEvent as N}from"./session/trace-accounting.js";import{captureResumedObjective as P,commitRuntimeMemory as F,loadRuntimeMemory as I,renderRuntimeMemory as L}from"./session/runtime-memory.js";import{attachRuntimeSession as R,configureRuntimeSessionModel as z,runtimeSessionConfiguration as B,streamRuntimeSession as V}from"./session/runtime-binding.js";import{createSessionLedger as H}from"./session/accounting.js";import{runRuntimeCompaction as U}from"./session/runtime-compaction.js";import{sessionCallConfig as W}from"./session/model-config.js";import{consumeSessionEvents as G}from"./session/observer.js";import{sealRuntimeRun as K}from"./session/run-seal.js";var q=class z{definition;options;catalog;activeRuntimeCatalog;skillCatalog;runtimeLimits;contextSections;currentHistory;currentMemory;currentConversationId;compactor;pendingSkillActivations=Object.freeze([]);active=!1;activeAdditionalInstructions;activeInvocation;idleWaiters=new Set;constructor(e,t){if(e.mode===`deep-human-in-loop`&&t.userInput===void 0)throw TypeError(`agent '${e.id}' requires a userInput broker in deep-human-in-loop mode`);this.definition=e;let n=t.historyLimits===void 0?void 0:Object.freeze({...t.historyLimits});t.history!==void 0&&n!==void 0&&new g(n);let r=t.compaction===void 0||t.compaction===!1?t.compaction:Object.freeze({...t.compaction}),a=t.trace===void 0?void 0:Object.freeze({...t.trace}),o=t.team===void 0?void 0:Object.freeze({...t.team}),s=t.ledgerLimits===void 0?void 0:Object.freeze({...t.ledgerLimits}),c=t.eventBufferLimits===void 0?void 0:Object.freeze({...t.eventBufferLimits});this.options=Object.freeze({...t,...n===void 0?{}:{historyLimits:n},...r===void 0?{}:{compaction:r},...a===void 0?{}:{trace:a},...o===void 0?{}:{team:o},...s===void 0?{}:{ledgerLimits:s},...c===void 0?{}:{eventBufferLimits:c},...t.skills===void 0?{}:{skills:Object.freeze([...t.skills])},...Array.isArray(t.tools)?{tools:Object.freeze([...t.tools])}:{},...t.interceptors===void 0?{}:{interceptors:Object.freeze([...t.interceptors])}}),this.runtimeLimits=S(t.runtimeLimits);let l=h(t.contextSections)??[],f=h(e.contextSections)??[],p=[...f.map(e=>l.find(t=>t.id===e.id)??e),...l.filter(e=>!f.some(t=>t.id===e.id))];this.contextSections=p.length===0?void 0:Object.freeze(p),this.currentConversationId=C(t.conversationId),this.currentHistory=t.history??new g(n);let m=[...e.skills,...t.skills??[]],_=e.skillIds?.length===0,v=m.length>0||(e.skillIds?.length??0)>0;this.skillCatalog=_||!v?void 0:new u(m,{...e.skillIds===void 0?{}:{allowedSkillIds:e.skillIds},maxSkills:e.skillOptions.maxSkills,maxCatalogBytes:e.skillOptions.maxDiscoveryBytes});let y=this.skillCatalog===void 0?[]:d(this.skillCatalog,e.skillOptions,()=>this.skillLookup()),b=t.team?.tools===`reporting`?`reporting`:`full`,x=t.team?.tools===!1?[]:t.team?.team.toolsFor(t.team.name??e.id,b)??[];this.catalog=O(e.tools,t.tools,[...y,...x]),this.currentMemory=t.memory instanceof i?t.memory:t.memory===void 0?new i(e.memory.seed,e.memory):i.fromSnapshot(t.memory,e.memory),P(this.currentMemory,this.currentHistory,this.definition.memory.autoCaptureObjective),this.compactor=this.createCompactor(),R(this,(e,t,n)=>this.createRunHandle(e,t,n),e=>this.createRunHandle(void 0,e),e=>this.compactForRuntime(e),()=>{this.compactor=this.createCompactor()}),t.team?.team.attach(this,{...t.team.name===void 0?{}:{name:t.team.name},...t.team.description===void 0?{}:{description:t.team.description},...t.team.instructions===void 0?{}:{instructions:t.team.instructions},...t.team.role===void 0?{}:{role:t.team.role},...t.team.tools===void 0?{}:{tools:t.team.tools}})}static fromSnapshot(e,t){let{snapshot:n,...r}=t;x(n,e.id,e.skillOptions.maxSkills);let a=new z(e,{...r,conversationId:n.conversationId,history:g.fromSnapshot(n.history,r.historyLimits),memory:i.fromSnapshot(n.memory,e.memory)});return a.pendingSkillActivations=A(n.skills,a.skillCatalog),a}get conversationId(){return this.currentConversationId}get history(){return this.currentHistory}get memory(){return this.currentMemory}get skills(){return this.skillCatalog}get isRunning(){return this.active}snapshot(){let e=this.activationSnapshot();return Object.freeze({version:1,conversationId:this.currentConversationId,agentId:this.definition.id,history:this.currentHistory.snapshot(),memory:this.currentMemory.snapshot(),...B(this)?.memory===void 0?{}:{memoryBindingId:B(this).memory.bindingId},...e.length===0?{}:{skills:Object.freeze({activated:e})}})}reset(){if(this.active)throw Error(`cannot reset an agent session while a run is active`);this.currentConversationId=D(),this.currentHistory=new g(this.options.historyLimits),this.currentMemory=new i(this.definition.memory.seed,this.definition.memory),this.pendingSkillActivations=Object.freeze([]),this.skillCatalog?.clearActivations(),this.compactor=this.createCompactor()}async compact(e={}){if(this.active)throw Error(`cannot compact an agent session while a run is active`);this.active=!0,this.activeInvocation=e;try{return await this.prepareSkills(e.signal),await this.compactor?.compactNow(e.signal)??null}finally{this.releaseRun()}}async compactForRuntime(e){if(this.active)throw Error(`cannot compact an agent session while a run is active`);let t=this.createLedger();this.active=!0,this.activeInvocation=e,this.compactor!==void 0&&o(this.compactor,t),this.skillCatalog!==void 0&&l(this.skillCatalog,t.modelInvocation.logger);try{return await U({...this.compactor===void 0?{}:{compactor:this.compactor},invocation:e,accounting:t,prepare:()=>this.prepareSkills(e.signal,t)})}finally{this.releaseRun()}}inject(e){let t=k(e);return this.currentHistory.append({kind:`user`,message:t}),this.currentHistory.entries().length}whenIdle(e){return this.active?e?.aborted?Promise.reject(e.reason):new Promise((t,n)=>{let r=!1,i=()=>{r||(r=!0,this.idleWaiters.delete(i),e?.removeEventListener(`abort`,a),t())},a=()=>{r||(r=!0,this.idleWaiters.delete(i),n(e?.reason))};this.idleWaiters.add(i),e?.addEventListener(`abort`,a,{once:!0}),this.active||i()}):Promise.resolve()}stream(e,t={}){return this.createRunHandle(e,t)}streamPending(e={}){return this.createRunHandle(void 0,e)}async run(e,t={}){let n=this.stream(e,t);return await G(n,t.onEvent,this.runtimeLimits.observerTimeoutMs??3e4),await n.result}async runPending(e={}){let t=this.streamPending(e);return await G(t,e.onEvent,this.runtimeLimits.observerTimeoutMs??3e4),await t.result}createRunHandle(i,a,s){if(this.active)throw Error(`agent session '${this.definition.id}' is already running`);let c=this.currentHistory.entries().length+1,u=new AbortController,d=!1,f=a.signal===void 0?u.signal:AbortSignal.any([a.signal,u.signal]),h=new b(this.options.eventBufferLimits?.maxEvents,this.options.eventBufferLimits?.maxBytes),g=w(),y=w(),x=w(),S=this.createLedger(),C=Object.freeze([]);this.compactor!==void 0&&o(this.compactor,S),this.skillCatalog!==void 0&&l(this.skillCatalog,S.modelInvocation.logger),this.active=!0,this.activeAdditionalInstructions=s,this.activeInvocation=a;let D=new Map,A=(async()=>{let e,o,s;try{let e=B(this);if(e?.memory!==void 0){let t=await I(e.memory,this.currentConversationId,this.definition.memory,f,S);s=t.state,t.memory!==void 0&&(this.currentMemory=t.memory)}if(e?.prepareTools!==void 0){let t=S.modelInvocation.logger;if(t===void 0)throw Error(`runtime tool source logger is unavailable`);let n=e.prepareTools(f,t,[...this.catalog?.names()??[],...this.definition.nativeTools.map(e=>e.name)]);this.activeRuntimeCatalog=O([],this.catalog,n.tools),C=n.references}if(x.resolve(C),await this.prepareSkills(f,S),i!==void 0){let e=k(i);if(this.definition.memory.autoCaptureObjective){let t=S.startOperation(`memory`,{data:{action:`capture-objective`}});try{this.currentMemory.captureOriginalObjective(e),S.endOperation(t,`success`)}catch(e){throw S.endOperation(t,`error`,{error:e}),e}}this.currentHistory.append({kind:`user`,message:e})}if(a.imagePolicy===`strict`&&this.history.messages().some(e=>r(e.content))){let e=this.callConfig(a),n=await this.options.registry.resolveModelInfo(e.provider,e.model,f);if(n.inputModalities!==void 0&&!n.inputModalities.includes(`image`))throw new t(`model ${n.id} does not support required image input`,`UNSUPPORTED_IMAGE_INPUT`)}if(a.documentPolicy===`strict`&&this.history.messages().some(e=>n(e.content))){let e=this.callConfig(a),n=await this.options.registry.resolveModelInfo(e.provider,e.model,f);if(n.inputModalities!==void 0&&!n.inputModalities.includes(`document`))throw new t(`model ${n.id} does not support required document input`,`UNSUPPORTED_DOCUMENT_INPUT`)}for await(let e of this.runDefinition({...a,signal:f},S))N(S,D,e),e.type===`agent-end`&&(o=e.outcome),h.push(e);if(o===void 0)throw Error(`agent session '${this.definition.id}' ended without agent-end`);if(f.aborted)throw f.reason??Error(`agent run was aborted`);if(o.reason.kind===`error`&&o.reason.failure.code===`USAGE_REQUIRED`){let e=Error(o.reason.failure.message);throw e.code=`USAGE_REQUIRED`,e}e?.memory!==void 0&&s!==void 0&&s.status!==`disabled`&&await F(e.memory,this.currentConversationId,this.currentMemory.snapshot(),s,f,S)}catch(t){e=t,x.resolve(C)}let l;try{let t=f.aborted||o?.reason.kind===`aborted`?`aborted`:e!==void 0||o?.reason.kind===`error`?`error`:`success`,n=await S.finalize(t,o?.completed??!1,e);l=m(p(n),n.delivery),g.resolve(l)}catch(e){g.reject(e),y.reject(e),h.fail(e),d=!0,this.releaseRun();return}if(!d){if(e===void 0&&S.terminalAuditFailure){let t=Error(`audit observation checkpoint failed after run finalization`);t.code=`OBSERVABILITY_AUDIT_UNAVAILABLE`,e=t}if(e!==void 0){let t=new v(E(e),T(e)??_.RUN_FAILED,l,{cause:e});y.reject(t),h.fail(t)}else{let e=o,t=[...this.currentHistory.entries()].reverse().find(e=>e.seq>=c&&e.event.kind===`assistant`)?.event,n=t?.kind===`assistant`?t.message:void 0,r=Object.freeze({text:e.text,outcome:e,report:l,...n===void 0?{}:{message:n}});y.resolve(r),h.close()}d=!0,this.releaseRun()}})();A.catch(e=>{d||(g.reject(e),y.reject(e),h.fail(e),d=!0,this.releaseRun())}),y.promise.catch(()=>void 0),g.promise.catch(()=>void 0);let j=!1;return Object.freeze({runId:S.runId,traceId:S.traceId,toolSourceSnapshots:x.promise,eventsSettled:A.then(()=>void 0,()=>void 0),result:y.promise,report:g.promise,seal:()=>K({ledger:S,buffer:h,report:g,result:y,toolSources:x,currentToolSources:()=>C,isTerminal:()=>d,markTerminal:()=>{d=!0},abort:()=>u.abort(Error(`Agent run was sealed`)),release:()=>this.releaseRun()}),abort(e){!d&&!u.signal.aborted&&u.abort(Error(`Agent run was aborted`))},[Symbol.asyncIterator](){return j?(async function*(){throw Error(`an agent run handle can only be iterated once`)})():(j=!0,(async function*(){let t=!1;try{for(;;){let e=await h.take();if(e.done){t=!0;break}yield e.value}}finally{t||(u.abort(Error(`agent event consumer stopped`)),h.stop(),await e(A,3e4))}})())}})}releaseRun(){this.active=!1,this.activeAdditionalInstructions=void 0,this.activeInvocation=void 0,this.activeRuntimeCatalog=void 0,this.skillCatalog!==void 0&&l(this.skillCatalog,void 0),this.compactor!==void 0&&o(this.compactor,void 0);let e=[...this.idleWaiters];this.idleWaiters.clear();for(let t of e)t()}createLedger(){let e=B(this);return H({definition:this.definition,options:this.options,runtimeLimits:this.runtimeLimits,conversationId:this.currentConversationId,...e===void 0?{}:{runtime:e}})}runDefinition(e,t){let n=this.definition,r=this.combinedHooks(t),i=this.effectiveCatalog(),a=e.outputFormat??n.outputFormat,o={registry:this.options.registry,config:this.callConfig(e),history:this.history,...i===void 0?{}:{tools:i},...n.nativeTools.length===0?{}:{nativeTools:n.nativeTools},...n.toolChoice===void 0?{}:{toolChoice:n.toolChoice},...e.imagePolicy===void 0?{}:{imagePolicy:e.imagePolicy},...e.documentPolicy===void 0?{}:{documentPolicy:e.documentPolicy},...a===void 0?{}:{outputFormat:a},...e.validateOutput===void 0?{}:{validateOutput:e.validateOutput},system:this.systemInstructions(this.activeAdditionalInstructions),maxTurns:n.maxTurns,bounds:{maxToolCalls:n.maxToolCalls,...this.runtimeLimits.maxParallelToolCalls===void 0?{}:{maxParallel:this.runtimeLimits.maxParallelToolCalls},...this.runtimeLimits.maxConsecutiveToolErrors===void 0?{}:{maxConsecutiveToolErrors:this.runtimeLimits.maxConsecutiveToolErrors},...this.runtimeLimits.repeatToolWarningAt===void 0?{}:{repeatToolWarningAt:this.runtimeLimits.repeatToolWarningAt},...this.runtimeLimits.repeatToolLimit===void 0?{}:{repeatToolLimit:this.runtimeLimits.repeatToolLimit},...this.runtimeLimits.toolCycleWarningAt===void 0?{}:{toolCycleWarningAt:this.runtimeLimits.toolCycleWarningAt},...this.runtimeLimits.toolCycleLimit===void 0?{}:{toolCycleLimit:this.runtimeLimits.toolCycleLimit},...this.runtimeLimits.onExhausted===void 0?{}:{onExhausted:this.runtimeLimits.onExhausted},...this.runtimeLimits.maxToolResultTokens===void 0?{}:{maxToolResultTokens:this.runtimeLimits.maxToolResultTokens},...this.runtimeLimits.toolResultOverflow===void 0?{}:{toolResultOverflow:this.runtimeLimits.toolResultOverflow},...this.runtimeLimits.maxToolCycleLength===void 0?{}:{maxToolCycleLength:this.runtimeLimits.maxToolCycleLength},...this.runtimeLimits.finalReportReserveTokens===void 0?{}:{finalReportReserveTokens:this.runtimeLimits.finalReportReserveTokens},...this.runtimeLimits.maxTotalTokens===void 0?{}:{maxTotalTokens:this.runtimeLimits.maxTotalTokens},...this.runtimeLimits.maxToolResultBytes===void 0?{}:{maxToolResultBytes:this.runtimeLimits.maxToolResultBytes},...this.runtimeLimits.maxToolDurationMs===void 0?{}:{maxToolDurationMs:this.runtimeLimits.maxToolDurationMs},...this.runtimeLimits.toolTeardownTimeoutMs===void 0?{}:{toolTeardownTimeoutMs:this.runtimeLimits.toolTeardownTimeoutMs}},commentary:n.commentary,...this.runtimeLimits.teardownTimeoutMs===void 0?{}:{teardownTimeoutMs:this.runtimeLimits.teardownTimeoutMs},...this.runtimeLimits.modelTimeoutMs===void 0?{}:{modelTimeoutMs:this.runtimeLimits.modelTimeoutMs},...this.runtimeLimits.maxModelRequestBytes===void 0?{}:{maxModelRequestBytes:this.runtimeLimits.maxModelRequestBytes},...this.runtimeLimits.maxModelResponseBytes===void 0?{}:{maxModelResponseBytes:this.runtimeLimits.maxModelResponseBytes},...this.runtimeLimits.maxModelStreamEvents===void 0?{}:{maxModelStreamEvents:this.runtimeLimits.maxModelStreamEvents},...this.runtimeLimits.hookTimeoutMs===void 0?{}:{hookTimeoutMs:this.runtimeLimits.hookTimeoutMs},...this.runtimeLimits.hookTeardownTimeoutMs===void 0?{}:{hookTeardownTimeoutMs:this.runtimeLimits.hookTeardownTimeoutMs},...this.options.approvals===void 0?{}:{approvals:this.options.approvals},...this.options.spillStore===void 0?{}:{spillStore:this.options.spillStore},...this.options.interceptors===void 0?{}:{interceptors:this.options.interceptors},...this.contextSections===void 0?{}:{contextSections:this.contextSections},...r===void 0?{}:{hooks:r},...e.signal===void 0?{}:{signal:e.signal},...t===void 0?{}:{accounting:t},...t?.modelInvocation.logger===void 0?{}:{logger:t.modelInvocation.logger},trace:{...this.options.trace,conversationId:this.currentConversationId,agentId:n.id,agentName:n.name}};return n.mode===`deep-human-in-loop`?y({...o,mode:n.mode,userInput:this.options.userInput}):n.mode===`deep`?y({...o,mode:n.mode,...this.options.userInput===void 0?{}:{userInput:this.options.userInput}}):y({...o,mode:`basic`})}createCompactor(){let e=this.options.compaction===!1?!1:this.options.compaction===void 0?this.definition.compaction:c(this.options.compaction);if(e!==!1)return new s({registry:this.options.registry,config:()=>this.callConfig(this.activeInvocation),history:()=>this.currentHistory,system:()=>this.systemInstructions(this.activeAdditionalInstructions),pinnedMessages:()=>L(this.currentMemory,this.definition.memory.maxInjectedChars),tools:()=>[...this.effectiveCatalog()?.schemas()??[],...this.definition.nativeTools],policy:e})}effectiveCatalog(){return this.activeRuntimeCatalog??this.catalog}combinedHooks(e){let t=this.options.hooks;if(this.compactor!==void 0||t!==void 0||this.currentMemory.items().length!==0)return{...t,beforeStep:async n=>{let r=this.currentHistory.generation();if(this.compactor!==void 0&&o(this.compactor,e),await this.compactor?.beforeStep(n),e?.usageStop!==void 0)return{kind:`proceed`};let i=this.currentHistory.generation()===r?n:{...n,messages:a(this.currentHistory.messages()),snapshot:this.currentHistory.snapshot()},s=L(this.currentMemory,this.definition.memory.maxInjectedChars,e),c=s.length===0?i:{...i,messages:Object.freeze([...s,...i.messages])},l=await t?.beforeStep?.(c)??{kind:`proceed`};if(l.kind===`reject`)return l;let u=[...s,...l.prepend??[]];return u.length===0?l:{kind:`proceed`,prepend:u}},onRequestError:async n=>{this.compactor!==void 0&&o(this.compactor,e);let r=await this.compactor?.onRequestError(n);return e?.usageStop===void 0?r===`retry`?`retry`:await t?.onRequestError?.(n)??`fail`:`fail`}}}callConfig(e){return W(this.definition,B(this),e)}systemInstructions(e){let t=this.skillCatalog===void 0?this.definition.instructions:f(this.definition.instructions,this.skillCatalog.summaries(),this.definition.skillOptions),n=this.options.team,r=n===void 0?t:`${t}\n\n${n.team.instructionsFor(n.name??this.definition.id)}`;return M(r,e)}skillLookup(e){return{...this.options.skillCwd===void 0?{}:{cwd:this.options.skillCwd},...e===void 0?{}:{signal:e}}}activationSnapshot(){let e=new Map;for(let t of this.pendingSkillActivations)e.set(t.id,t);for(let t of this.skillCatalog?.activatedSkillReferences()??[])e.set(t.id,t);for(let t of this.skillCatalog?.activatedSummaries()??[])e.has(t.id)||e.set(t.id,Object.freeze({id:t.id,provider:t.provider,source:t.source,...t.resourceBase===void 0?{}:{resourceBase:Object.freeze({...t.resourceBase})}}));return Object.freeze([...e.values()].sort((e,t)=>e.id.localeCompare(t.id)))}async prepareSkills(e,t){await j(this.definition,this.skillCatalog,this.pendingSkillActivations,e=>this.skillLookup(e),()=>{this.pendingSkillActivations=Object.freeze([])},e,t)}};export{q as AgentSession,z as configureRuntimeSessionModel,V as streamRuntimeSession};
1
+ import{waitForSettlement as e}from"../../async/settlement.js";import{ModelError as t}from"../../errors/model-error.js";import{contentHasDocument as n,contentHasImage as r}from"../../message/projection.js";import{AgentMemory as i}from"../memory/memory.js";import{normalizeToolPairing as a}from"../history/normalize.js";import{bindCompactionAccounting as o}from"../memory/accounting-binding.js";import{ContextCompactor as s}from"../memory/compaction.js";import{resolveCompactionConfig as c}from"../memory/compaction-config.js";import{bindSkillProviderLogger as l}from"../skill/provider/context.js";import{SkillCatalog as u}from"../skill/catalog.js";import{createSkillTools as d,renderSkillCatalog as f}from"../skill/tools.js";import{createRunTerminalRecord as p,withTerminalDelivery as m}from"../accounting/delivery/terminal.js";import{captureContextSections as h}from"../context/section.js";import{History as g}from"../history/history.js";import{bindModelRequestBoundary as _}from"../loop/turn/model-request-boundary.js";import{bindStepProjectionSources as v}from"../loop/turn/step-projection.js";import{AGENT_ACCOUNTING_ERROR_CODES as y,AgentRunError as b}from"../accounting/error.js";import{runAgent as x}from"../mode/run-agent.js";import{RunEventBuffer as S}from"../accounting/event-buffer.js";import{validateSessionSnapshot as C}from"./session/validation.js";import{resolveRuntimeLimits as w}from"./session/config.js";import{conversationId as T,deferred as E,errorCodeOf as D,messageOf as O,newConversationId as k,toolCatalog as A,userMessage as j}from"./session/common.js";import{captureResumedSkillActivations as M,prepareSkills as N}from"./session/skills.js";import{appendRunInstructions as P}from"./instructions.js";import{accountTraceEvent as F}from"./session/trace-accounting.js";import{captureResumedObjective as I,commitRuntimeMemory as L,loadRuntimeMemory as R,renderRuntimeMemory as z}from"./session/runtime-memory.js";import{attachRuntimeSession as B,configureRuntimeSessionModel as V,runtimeSessionConfiguration as H,streamRuntimeSession as U}from"./session/runtime-binding.js";import{createSessionLedger as W}from"./session/accounting.js";import{runRuntimeCompaction as G}from"./session/runtime-compaction.js";import{sessionCallConfig as K}from"./session/model-config.js";import{consumeSessionEvents as q}from"./session/observer.js";import{sealRuntimeRun as J}from"./session/run-seal.js";var Y=class V{definition;options;catalog;activeRuntimeCatalog;skillCatalog;runtimeLimits;contextSections;currentHistory;currentMemory;currentConversationId;compactor;pendingSkillActivations=Object.freeze([]);active=!1;activeAdditionalInstructions;activeInvocation;idleWaiters=new Set;pendingInjections;roundInFlight=!1;constructor(e,t){if(e.mode===`deep-human-in-loop`&&t.userInput===void 0)throw TypeError(`agent '${e.id}' requires a userInput broker in deep-human-in-loop mode`);this.definition=e;let n=t.historyLimits===void 0?void 0:Object.freeze({...t.historyLimits});t.history!==void 0&&n!==void 0&&new g(n);let r=t.compaction===void 0||t.compaction===!1?t.compaction:Object.freeze({...t.compaction}),a=t.trace===void 0?void 0:Object.freeze({...t.trace}),o=t.team===void 0?void 0:Object.freeze({...t.team}),s=t.ledgerLimits===void 0?void 0:Object.freeze({...t.ledgerLimits}),c=t.eventBufferLimits===void 0?void 0:Object.freeze({...t.eventBufferLimits});this.options=Object.freeze({...t,...n===void 0?{}:{historyLimits:n},...r===void 0?{}:{compaction:r},...a===void 0?{}:{trace:a},...o===void 0?{}:{team:o},...s===void 0?{}:{ledgerLimits:s},...c===void 0?{}:{eventBufferLimits:c},...t.skills===void 0?{}:{skills:Object.freeze([...t.skills])},...Array.isArray(t.tools)?{tools:Object.freeze([...t.tools])}:{},...t.interceptors===void 0?{}:{interceptors:Object.freeze([...t.interceptors])}}),this.runtimeLimits=w(t.runtimeLimits);let l=h(t.contextSections)??[],f=h(e.contextSections)??[],p=[...f.map(e=>l.find(t=>t.id===e.id)??e),...l.filter(e=>!f.some(t=>t.id===e.id))];this.contextSections=p.length===0?void 0:Object.freeze(p),this.currentConversationId=T(t.conversationId),this.currentHistory=t.history??new g(n);let m=[...e.skills,...t.skills??[]],_=e.skillIds?.length===0,v=m.length>0||(e.skillIds?.length??0)>0;this.skillCatalog=_||!v?void 0:new u(m,{...e.skillIds===void 0?{}:{allowedSkillIds:e.skillIds},maxSkills:e.skillOptions.maxSkills,maxCatalogBytes:e.skillOptions.maxDiscoveryBytes});let y=this.skillCatalog===void 0?[]:d(this.skillCatalog,e.skillOptions,()=>this.skillLookup()),b=t.team?.tools===`reporting`?`reporting`:`full`,x=t.team?.tools===!1?[]:t.team?.team.toolsFor(t.team.name??e.id,b)??[];this.catalog=A(e.tools,t.tools,[...y,...x]),this.currentMemory=t.memory instanceof i?t.memory:t.memory===void 0?new i(e.memory.seed,e.memory):i.fromSnapshot(t.memory,e.memory),I(this.currentMemory,this.currentHistory,this.definition.memory.autoCaptureObjective),this.compactor=this.createCompactor(),B(this,(e,t,n)=>this.createRunHandle(e,t,n),e=>this.createRunHandle(void 0,e),e=>this.compactForRuntime(e),()=>{this.compactor=this.createCompactor()}),t.team?.team.attach(this,{...t.team.name===void 0?{}:{name:t.team.name},...t.team.description===void 0?{}:{description:t.team.description},...t.team.instructions===void 0?{}:{instructions:t.team.instructions},...t.team.role===void 0?{}:{role:t.team.role},...t.team.tools===void 0?{}:{tools:t.team.tools}})}static fromSnapshot(e,t){let{snapshot:n,...r}=t;C(n,e.id,e.skillOptions.maxSkills);let a=new V(e,{...r,conversationId:n.conversationId,history:g.fromSnapshot(n.history,r.historyLimits),memory:i.fromSnapshot(n.memory,e.memory)});return a.pendingSkillActivations=M(n.skills,a.skillCatalog),a}get conversationId(){return this.currentConversationId}get history(){return this.currentHistory}get memory(){return this.currentMemory}get skills(){return this.skillCatalog}get isRunning(){return this.active}snapshot(){let e=this.activationSnapshot(),t=this.currentHistory.snapshot(),n=this.pendingInjections?.entries()??[],r=n.length===0?t:Object.freeze({version:1,entries:Object.freeze([...t.entries,...n.map((e,n)=>Object.freeze({...e,seq:t.entries.length+n+1}))])});return Object.freeze({version:1,conversationId:this.currentConversationId,agentId:this.definition.id,history:r,memory:this.currentMemory.snapshot(),...H(this)?.memory===void 0?{}:{memoryBindingId:H(this).memory.bindingId},...e.length===0?{}:{skills:Object.freeze({activated:e})}})}reset(){if(this.active)throw Error(`cannot reset an agent session while a run is active`);this.currentConversationId=k(),this.currentHistory=new g(this.options.historyLimits),this.currentMemory=new i(this.definition.memory.seed,this.definition.memory),this.pendingInjections=void 0,this.pendingSkillActivations=Object.freeze([]),this.skillCatalog?.clearActivations(),this.compactor=this.createCompactor()}async compact(e={}){if(this.active)throw Error(`cannot compact an agent session while a run is active`);this.active=!0,this.activeInvocation=e;try{return await this.prepareSkills(e.signal),await this.compactor?.compactNow(e.signal)??null}finally{this.releaseRun()}}async compactForRuntime(e){if(this.active)throw Error(`cannot compact an agent session while a run is active`);let t=this.createLedger();this.active=!0,this.activeInvocation=e,this.compactor!==void 0&&o(this.compactor,t),this.skillCatalog!==void 0&&l(this.skillCatalog,t.modelInvocation.logger);try{return await G({...this.compactor===void 0?{}:{compactor:this.compactor},invocation:e,accounting:t,prepare:()=>this.prepareSkills(e.signal,t)})}finally{this.releaseRun()}}inject(e){let t=j(e);if(this.active&&this.roundInFlight){let e=this.pendingInjections??=new g(this.options.historyLimits);return e.append({kind:`user`,message:t}),this.currentHistory.entries().length+e.entries().length}return this.drainInjections(),this.currentHistory.append({kind:`user`,message:t}),this.currentHistory.entries().length}observeRoundBoundary(e){if(e.type===`span-start`&&e.kind===`chat`){this.roundInFlight=!0;return}if(!this.roundInFlight)return;let t=e.type===`assistant-message`&&e.message?.content.every(e=>e.type!==`tool-call`)===!0;(e.type===`step-end`||e.type===`turn-end`||e.type===`agent-end`||t)&&(this.roundInFlight=!1,this.drainInjections())}drainInjections(){if(this.pendingInjections===void 0)return;let e=this.pendingInjections;this.currentHistory.appendBatch(e.entries().map(e=>({event:e.event}))),this.pendingInjections=void 0}whenIdle(e){return this.active?e?.aborted?Promise.reject(e.reason):new Promise((t,n)=>{let r=!1,i=()=>{r||(r=!0,this.idleWaiters.delete(i),e?.removeEventListener(`abort`,a),t())},a=()=>{r||(r=!0,this.idleWaiters.delete(i),n(e?.reason))};this.idleWaiters.add(i),e?.addEventListener(`abort`,a,{once:!0}),this.active||i()}):Promise.resolve()}stream(e,t={}){return this.createRunHandle(e,t)}streamPending(e={}){return this.createRunHandle(void 0,e)}async run(e,t={}){let n=this.stream(e,t);return await q(n,t.onEvent,this.runtimeLimits.observerTimeoutMs??3e4),await n.result}async runPending(e={}){let t=this.streamPending(e);return await q(t,e.onEvent,this.runtimeLimits.observerTimeoutMs??3e4),await t.result}createRunHandle(i,a,s){if(this.active)throw Error(`agent session '${this.definition.id}' is already running`);this.drainInjections();let c=this.currentHistory.entries().length+1,u=new AbortController,d=!1,f=a.signal===void 0?u.signal:AbortSignal.any([a.signal,u.signal]),h=new S(this.options.eventBufferLimits?.maxEvents,this.options.eventBufferLimits?.maxBytes),g=E(),v=E(),x=E(),C=this.createLedger(),w=Object.freeze([]);this.compactor!==void 0&&o(this.compactor,C),this.skillCatalog!==void 0&&l(this.skillCatalog,C.modelInvocation.logger),this.active=!0,_(this.currentHistory,e=>{this.roundInFlight=e,e||this.drainInjections()}),this.activeAdditionalInstructions=s,this.activeInvocation=a;let T=new Map,k=(async()=>{let e,o,s;try{let e=H(this);if(e?.memory!==void 0){let t=await R(e.memory,this.currentConversationId,this.definition.memory,f,C);s=t.state,t.memory!==void 0&&(this.currentMemory=t.memory)}if(e?.prepareTools!==void 0){let t=C.modelInvocation.logger;if(t===void 0)throw Error(`runtime tool source logger is unavailable`);let n=e.prepareTools(f,t,[...this.catalog?.names()??[],...this.definition.nativeTools.map(e=>e.name)]);this.activeRuntimeCatalog=A([],this.catalog,n.tools),w=n.references}if(x.resolve(w),await this.prepareSkills(f,C),i!==void 0){let e=j(i);if(this.definition.memory.autoCaptureObjective){let t=C.startOperation(`memory`,{data:{action:`capture-objective`}});try{this.currentMemory.captureOriginalObjective(e),C.endOperation(t,`success`)}catch(e){throw C.endOperation(t,`error`,{error:e}),e}}this.currentHistory.append({kind:`user`,message:e})}if(a.imagePolicy===`strict`&&this.history.messages().some(e=>r(e.content))){let e=this.callConfig(a),n=await this.options.registry.resolveModelInfo(e.provider,e.model,f);if(n.inputModalities!==void 0&&!n.inputModalities.includes(`image`))throw new t(`model ${n.id} does not support required image input`,`UNSUPPORTED_IMAGE_INPUT`)}if(a.documentPolicy===`strict`&&this.history.messages().some(e=>n(e.content))){let e=this.callConfig(a),n=await this.options.registry.resolveModelInfo(e.provider,e.model,f);if(n.inputModalities!==void 0&&!n.inputModalities.includes(`document`))throw new t(`model ${n.id} does not support required document input`,`UNSUPPORTED_DOCUMENT_INPUT`)}for await(let e of this.runDefinition({...a,signal:f},C))this.observeRoundBoundary(e),F(C,T,e),e.type===`agent-end`&&(o=e.outcome),h.push(e);if(o===void 0)throw Error(`agent session '${this.definition.id}' ended without agent-end`);if(f.aborted)throw f.reason??Error(`agent run was aborted`);if(o.reason.kind===`error`&&o.reason.failure.code===`USAGE_REQUIRED`){let e=Error(o.reason.failure.message);throw e.code=`USAGE_REQUIRED`,e}e?.memory!==void 0&&s!==void 0&&s.status!==`disabled`&&await L(e.memory,this.currentConversationId,this.currentMemory.snapshot(),s,f,C)}catch(t){e=t,x.resolve(w)}try{this.drainInjections()}catch(t){e??=t}let l;try{let t=f.aborted||o?.reason.kind===`aborted`?`aborted`:e!==void 0||o?.reason.kind===`error`?`error`:`success`,n=await C.finalize(t,o?.completed??!1,e);l=m(p(n),n.delivery),g.resolve(l)}catch(e){g.reject(e),v.reject(e),h.fail(e),d=!0,this.releaseRun();return}if(!d){if(e===void 0&&C.terminalAuditFailure){let t=Error(`audit observation checkpoint failed after run finalization`);t.code=`OBSERVABILITY_AUDIT_UNAVAILABLE`,e=t}if(e!==void 0){let t=new b(O(e),D(e)??y.RUN_FAILED,l,{cause:e});v.reject(t),h.fail(t)}else{let e=o,t=[...this.currentHistory.entries()].reverse().find(e=>e.seq>=c&&e.event.kind===`assistant`)?.event,n=t?.kind===`assistant`?t.message:void 0,r=Object.freeze({text:e.text,outcome:e,report:l,...n===void 0?{}:{message:n}});v.resolve(r),h.close()}d=!0,this.releaseRun()}})();k.catch(e=>{d||(g.reject(e),v.reject(e),h.fail(e),d=!0,this.releaseRun())}),v.promise.catch(()=>void 0),g.promise.catch(()=>void 0);let M=!1;return Object.freeze({runId:C.runId,traceId:C.traceId,toolSourceSnapshots:x.promise,eventsSettled:k.then(()=>void 0,()=>void 0),result:v.promise,report:g.promise,seal:()=>J({ledger:C,buffer:h,report:g,result:v,toolSources:x,currentToolSources:()=>w,isTerminal:()=>d,markTerminal:()=>{d=!0},abort:()=>u.abort(Error(`Agent run was sealed`)),release:()=>this.releaseRun()}),abort(e){!d&&!u.signal.aborted&&u.abort(Error(`Agent run was aborted`))},[Symbol.asyncIterator](){return M?(async function*(){throw Error(`an agent run handle can only be iterated once`)})():(M=!0,(async function*(){let t=!1;try{for(;;){let e=await h.take();if(e.done){t=!0;break}yield e.value}}finally{t||(u.abort(Error(`agent event consumer stopped`)),h.stop(),await e(k,3e4))}})())}})}releaseRun(){try{this.drainInjections()}finally{_(this.currentHistory),this.roundInFlight=!1,this.active=!1,this.activeAdditionalInstructions=void 0,this.activeInvocation=void 0,this.activeRuntimeCatalog=void 0,this.skillCatalog!==void 0&&l(this.skillCatalog,void 0),this.compactor!==void 0&&o(this.compactor,void 0);let e=[...this.idleWaiters];this.idleWaiters.clear();for(let t of e)t()}}createLedger(){let e=H(this);return W({definition:this.definition,options:this.options,runtimeLimits:this.runtimeLimits,conversationId:this.currentConversationId,...e===void 0?{}:{runtime:e}})}runDefinition(e,t){let n=this.definition,r=this.combinedHooks(t),i=this.effectiveCatalog(),a=e.outputFormat??n.outputFormat,o={registry:this.options.registry,config:this.callConfig(e),history:this.history,...i===void 0?{}:{tools:i},...n.nativeTools.length===0?{}:{nativeTools:n.nativeTools},...n.toolChoice===void 0?{}:{toolChoice:n.toolChoice},...e.imagePolicy===void 0?{}:{imagePolicy:e.imagePolicy},...e.documentPolicy===void 0?{}:{documentPolicy:e.documentPolicy},...a===void 0?{}:{outputFormat:a},...e.validateOutput===void 0?{}:{validateOutput:e.validateOutput},system:this.systemInstructions(this.activeAdditionalInstructions),maxTurns:n.maxTurns,bounds:{maxToolCalls:n.maxToolCalls,...this.runtimeLimits.maxParallelToolCalls===void 0?{}:{maxParallel:this.runtimeLimits.maxParallelToolCalls},...this.runtimeLimits.maxConsecutiveToolErrors===void 0?{}:{maxConsecutiveToolErrors:this.runtimeLimits.maxConsecutiveToolErrors},...this.runtimeLimits.repeatToolWarningAt===void 0?{}:{repeatToolWarningAt:this.runtimeLimits.repeatToolWarningAt},...this.runtimeLimits.repeatToolLimit===void 0?{}:{repeatToolLimit:this.runtimeLimits.repeatToolLimit},...this.runtimeLimits.toolCycleWarningAt===void 0?{}:{toolCycleWarningAt:this.runtimeLimits.toolCycleWarningAt},...this.runtimeLimits.toolCycleLimit===void 0?{}:{toolCycleLimit:this.runtimeLimits.toolCycleLimit},...this.runtimeLimits.onExhausted===void 0?{}:{onExhausted:this.runtimeLimits.onExhausted},...this.runtimeLimits.maxToolResultTokens===void 0?{}:{maxToolResultTokens:this.runtimeLimits.maxToolResultTokens},...this.runtimeLimits.toolResultOverflow===void 0?{}:{toolResultOverflow:this.runtimeLimits.toolResultOverflow},...this.runtimeLimits.maxToolCycleLength===void 0?{}:{maxToolCycleLength:this.runtimeLimits.maxToolCycleLength},...this.runtimeLimits.finalReportReserveTokens===void 0?{}:{finalReportReserveTokens:this.runtimeLimits.finalReportReserveTokens},...this.runtimeLimits.maxTotalTokens===void 0?{}:{maxTotalTokens:this.runtimeLimits.maxTotalTokens},...this.runtimeLimits.maxToolResultBytes===void 0?{}:{maxToolResultBytes:this.runtimeLimits.maxToolResultBytes},...this.runtimeLimits.maxToolDurationMs===void 0?{}:{maxToolDurationMs:this.runtimeLimits.maxToolDurationMs},...this.runtimeLimits.toolTeardownTimeoutMs===void 0?{}:{toolTeardownTimeoutMs:this.runtimeLimits.toolTeardownTimeoutMs}},commentary:n.commentary,...this.runtimeLimits.teardownTimeoutMs===void 0?{}:{teardownTimeoutMs:this.runtimeLimits.teardownTimeoutMs},...this.runtimeLimits.modelTimeoutMs===void 0?{}:{modelTimeoutMs:this.runtimeLimits.modelTimeoutMs},...this.runtimeLimits.maxModelRequestBytes===void 0?{}:{maxModelRequestBytes:this.runtimeLimits.maxModelRequestBytes},...this.runtimeLimits.maxModelResponseBytes===void 0?{}:{maxModelResponseBytes:this.runtimeLimits.maxModelResponseBytes},...this.runtimeLimits.maxModelStreamEvents===void 0?{}:{maxModelStreamEvents:this.runtimeLimits.maxModelStreamEvents},...this.runtimeLimits.hookTimeoutMs===void 0?{}:{hookTimeoutMs:this.runtimeLimits.hookTimeoutMs},...this.runtimeLimits.hookTeardownTimeoutMs===void 0?{}:{hookTeardownTimeoutMs:this.runtimeLimits.hookTeardownTimeoutMs},...this.options.approvals===void 0?{}:{approvals:this.options.approvals},...this.options.spillStore===void 0?{}:{spillStore:this.options.spillStore},...this.options.experimentalPrograms===void 0?{}:{experimentalPrograms:this.options.experimentalPrograms},...this.options.interceptors===void 0?{}:{interceptors:this.options.interceptors},...this.contextSections===void 0?{}:{contextSections:this.contextSections},...r===void 0?{}:{hooks:r},...e.signal===void 0?{}:{signal:e.signal},...t===void 0?{}:{accounting:t},...t?.modelInvocation.logger===void 0?{}:{logger:t.modelInvocation.logger},trace:{...this.options.trace,conversationId:this.currentConversationId,agentId:n.id,agentName:n.name}};return n.mode===`deep-human-in-loop`?x({...o,mode:n.mode,userInput:this.options.userInput}):n.mode===`deep`?x({...o,mode:n.mode,...this.options.userInput===void 0?{}:{userInput:this.options.userInput}}):x({...o,mode:`basic`})}createCompactor(){let e=this.options.compaction===!1?!1:this.options.compaction===void 0?this.definition.compaction:c(this.options.compaction);if(e!==!1)return new s({registry:this.options.registry,config:()=>this.callConfig(this.activeInvocation),history:()=>this.currentHistory,system:()=>this.systemInstructions(this.activeAdditionalInstructions),pinnedMessages:()=>z(this.currentMemory,this.definition.memory.maxInjectedChars),tools:()=>[...this.effectiveCatalog()?.schemas()??[],...this.definition.nativeTools],policy:e})}effectiveCatalog(){return this.activeRuntimeCatalog??this.catalog}combinedHooks(e){let t=this.options.hooks;return{...t,beforeStep:async n=>{let r=this.currentHistory.generation(),i=this.currentHistory.entries().length;this.drainInjections();let s=this.currentHistory.entries().length===i?n:{...n,messages:a(this.currentHistory.messages()),snapshot:this.currentHistory.snapshot()};if(this.compactor!==void 0&&o(this.compactor,e),await this.compactor?.beforeStep(s),e?.usageStop!==void 0)return{kind:`proceed`};let c=this.currentHistory.generation()===r&&this.currentHistory.entries().length===i?n:{...n,messages:a(this.currentHistory.messages()),snapshot:this.currentHistory.snapshot()},l=z(this.currentMemory,this.definition.memory.maxInjectedChars,e),u=l.length===0?c:{...c,messages:Object.freeze([...l,...c.messages])},d=await t?.beforeStep?.(u)??{kind:`proceed`};if(d.kind===`reject`)return d;let f=[...d.messages===void 0?l:[],...d.prepend??[]];return v(f.length===0?d:{...d,prepend:f},c.messages)},onRequestError:async n=>{this.compactor!==void 0&&o(this.compactor,e);let r=await this.compactor?.onRequestError(n);return e?.usageStop===void 0?r===`retry`?`retry`:await t?.onRequestError?.(n)??`fail`:`fail`}}}callConfig(e){return K(this.definition,H(this),e)}systemInstructions(e){let t=this.skillCatalog===void 0?this.definition.instructions:f(this.definition.instructions,this.skillCatalog.summaries(),this.definition.skillOptions),n=this.options.team,r=n===void 0?t:`${t}\n\n${n.team.instructionsFor(n.name??this.definition.id)}`;return P(r,e)}skillLookup(e){return{...this.options.skillCwd===void 0?{}:{cwd:this.options.skillCwd},...e===void 0?{}:{signal:e}}}activationSnapshot(){let e=new Map;for(let t of this.pendingSkillActivations)e.set(t.id,t);for(let t of this.skillCatalog?.activatedSkillReferences()??[])e.set(t.id,t);for(let t of this.skillCatalog?.activatedSummaries()??[])e.has(t.id)||e.set(t.id,Object.freeze({id:t.id,provider:t.provider,source:t.source,...t.resourceBase===void 0?{}:{resourceBase:Object.freeze({...t.resourceBase})}}));return Object.freeze([...e.values()].sort((e,t)=>e.id.localeCompare(t.id)))}async prepareSkills(e,t){await N(this.definition,this.skillCatalog,this.pendingSkillActivations,e=>this.skillLookup(e),()=>{this.pendingSkillActivations=Object.freeze([])},e,t)}};export{Y as AgentSession,V as configureRuntimeSessionModel,U as streamRuntimeSession};
2
2
  //# sourceMappingURL=session.js.map