1const s="running/human-input",n={title:"Human input",group:"Running agents",order:4,description:"Pause a run for a human answer with ask_user, then resume it from its durable checkpoint. Either manually or through a single callback."},a=[{id:"two-ways-to-handle-it",text:"Two ways to handle it",level:2},{id:"the-callback",text:"The callback",level:2},{id:"resuming-manually",text:"Resuming manually",level:2},{id:"the-required-action",text:"The required action",level:2},{id:"across-processes",text:"Across processes",level:2},{id:"design-guidance",text:"Design guidance",level:2}],e=` 2# Human input 3 4When an agent calls the hosted \`ask_user\` tool, the run pauses **durably** with 5status \`awaiting_input\`. It is not blocked on an open connection and it is not 6burning model tokens while it waits. The pause is a checkpoint, and it can 7outlive your process. 8 9This is what makes long-running agents workable in real applications: the agent can ask for a decision at hour three without you having to hold a socket open for three hours. 10 11## Two ways to handle it 12 13| Approach | Use when | 14| --- | --- | 15| \`run()\` with \`onInputRequired\` | The answer is available in-process, a request handler, a CLI prompt | 16| \`start()\` + \`resume()\` | The answer arrives later while the process holding the handle is active | 17| HTTP \`/runs/{id}/resume\` | A different process or service answers by run id | 18 19## The callback 20 21For request/response applications, one callback handles every pause. 22 23\`\`\`ts 24import { createAgent } from '@coresourceai/sdk'; 25 26const agent = createAgent({ 27 type: 'saga', 28 systemPrompt: 'Ask before making irreversible choices.' 29}); 30 31const result = await agent.run('Prepare the launch plan.', { 32 onInputRequired: async ({ question }) => { 33 return askYourUser(question); 34 } 35}); 36 37console.log(result.status, result.text); 38await agent.close(); 39 40declare function askYourUser(question: string): Promise<string>; 41\`\`\` 42 43The callback may be invoked more than once (a run can pause repeatedly) and each answer resumes the same durable run from the same state. 44 45Without \`onInputRequired\`, \`run()\` does **not** wait indefinitely. It returns the paused result, and it is your job to notice: 46 47\`\`\`ts 48import { createAgent } from '@coresourceai/sdk'; 49 50const agent = createAgent({ type: 'agent' }); 51const result = await agent.run('Pick a launch date and proceed.'); 52 53if (result.status === 'awaiting_input') { 54 console.log('The run is waiting:', result.requiredAction?.question); 55} 56 57await agent.close(); 58\`\`\` 59 60Checking \`status\` before using \`text\` matters here specifically. A paused run's \`text\` is not the answer to your prompt. 61 62## Resuming manually 63 64When the answer comes from elsewhere (a Slack message, a support queue, a person who is not online yet) use \`start()\` and drive the loop yourself. 65 66\`\`\`ts 67import { createAgent } from '@coresourceai/sdk'; 68 69const agent = createAgent({ type: 'saga' }); 70const run = await agent.start('Prepare the launch plan and ask before choosing a date.'); 71 72let result = await run.result(); 73 74while (result.status === 'awaiting_input') { 75 const action = result.requiredAction; 76 77 if (!action) { 78 throw new Error('The run paused without a question.'); 79 } 80 81 console.log(action.question); 82 const answer = await collectAnswer(action.question); 83 84 await run.resume(answer); 85 result = await run.result(); 86} 87 88console.log(result.status, result.text); 89await agent.close(); 90 91declare function collectAnswer(question: string): Promise<string>; 92\`\`\` 93 94\`result()\` returns as soon as the run pauses, so this loop does not spin. Each \`resume()\` continues the run from its checkpoint. 95 96## The required action 97 98\`\`\`ts 99import type { AgentRequiredAction } from '@coresourceai/sdk'; 100 101function describe(action: AgentRequiredAction) { 102 return { 103 type: action.type, // always 'provide_input' 104 question: action.question, 105 callId: action.callId, // correlates the answer with the tool call 106 schema: action.inputSchema // JSON Schema, when the answer is structured 107 }; 108} 109\`\`\` 110 111\`inputSchema\` is worth handling. When present, the agent is not asking for prose. It wants a structured value, and \`resume()\` accepts any JSON value, not only a string: 112 113\`\`\`ts 114import { createAgent } from '@coresourceai/sdk'; 115 116const agent = createAgent({ type: 'saga' }); 117const run = await agent.start('Plan the migration; confirm the window with me.'); 118 119const result = await run.result(); 120 121if (result.status === 'awaiting_input' && result.requiredAction?.inputSchema) { 122 // The agent asked for a shape, not a sentence.
123 await run.resume({ start: '2026-08-03T22:00:00Z', durationHours: 4 }); 124} 125 126await agent.close(); 127\`\`\` 128 129## Across processes 130 131Because the pause is durable, the process that resumes a run does not have to 132be the process that started it. Persist the run id before the first process 133exits: 134 135\`\`\`ts 136import { createAgent } from '@coresourceai/sdk'; 137 138// Process A: start the work and hand the run id to your queue. 139const agent = createAgent({ type: 'agent' }); 140const run = await agent.start('Audit the vendor contracts and ask before filing the report.'); 141await saveRunId(run.id); 142await agent.close(); 143 144declare function saveRunId(id: string): Promise<void>; 145\`\`\` 146 147A later process addresses the run through HTTP: 148 149\`\`\`ts 150import process from 'node:process'; 151 152// Process B: answer the paused run by its id. 153const runId = await loadRunId(); 154const answer = await waitForHumanReply(runId); 155 156const response = await fetch( 157 \`https://api.coresource.ai/v1/runs/\${encodeURIComponent(runId)}/resume\`, 158 { 159 method: 'POST', 160 headers: { 161 Authorization: \`Bearer \${process.env.CORESOURCE_API_KEY}\`, 162 'Content-Type': 'application/json' 163 }, 164 body: JSON.stringify({ input: answer }) 165 } 166); 167 168if (!response.ok) { 169 throw new Error(\`Resume failed with HTTP \${response.status}\`); 170} 171 172declare function loadRunId(): Promise<string>; 173declare function waitForHumanReply(runId: string): Promise<string>; 174\`\`\` 175 176Continue polling or streaming that same run id. See [HTTP API](/docs/api). 177 178## Design guidance 179 180**Ask for decisions, not for data.** If the agent can look something up with a tool, give it the tool. Pauses are for judgement calls and approvals. 181 182**Make questions self-contained.** The person answering may see the question in a Slack notification with none of the run's context. 183 184**Expect repeats.** Write the handler as a loop or a callback, never as a single \`if\`. 185 186**Set a policy for stale pauses.** Decide when your application should cancel a run that remains in \`awaiting_input\`. Do not rely on the waiting client process to stay alive. 187`,o=JSON.parse(`[{"lang":"ts","code":"import { createAgent } from '@coresourceai/sdk';\\n\\nconst agent = createAgent({\\n type: 'saga',\\n systemPrompt: 'Ask before making irreversible choices.'\\n});\\n\\nconst result = await agent.run('Prepare the launch plan.', {\\n onInputRequired: async ({ question }) => {\\n return askYourUser(question);\\n }\\n});\\n\\nconsole.log(result.status, result.text);\\nawait agent.close();\\n\\ndeclare function askYourUser(question: string): Promise<string>;","html":"<pre data-language=\\"ts\\" class=\\"shiki github-dark-high-contrast\\" style=\\"background-color:#0a0c10;color:#f0f3f6\\" tabindex=\\"0\\"><code><span class=\\"line\\"><span style=\\"color:#FF9492\\">import</span><span style=\\"color:#F0F3F6\\"> { createAgent } </span><span style=\\"color:#FF9492\\">from</span><span style=\\"color:#ADDCFF\\"> '@coresourceai/sdk'</span><span style=\\"color:#F0F3F6\\">;</span></span>\\n<span class=\\"line\\"></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">const</span><span style=\\"color:#91CBFF\\"> agent</span><span style=\\"color:#FF9492\\"> =</span><span style=\\"color:#DBB7FF\\"> createAgent</span><span style=\\"color:#F0F3F6\\">({</span></span>\\n<span class=\\"line\\"><span style=\\"color:#F0F3F6\\"> type: </span><span style=\\"color:#ADDCFF\\">'saga'</span><span style=\\"color:#F0F3F6\\">,</span></span>\\n<span class=\\"line\\"><span style=\\"color:#F0F3F6\\"> systemPrompt: </span><span style=\\"color:#ADDCFF\\">'Ask before making irreversible choices.'</span></span>\\n<span class=\\"line\\"><span style=\\"color:#F0F3F6\\">});</span></span>\\n<span class=\\"line\\"></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">const</span><span style=\\"color:#91CBFF\\"> result</span><span style=\\"color:#FF9492\\"> =</span><span style=\\"color:#FF9492\\"> await</span><span style=\\"color:#F0F3F6\\"> agent.</span><span style=\\"color:#DBB7FF\\">run</span><span style=\\"color:#F0F3F6\\">(</span><span style=\\"color:#ADDCFF\\">'Prepare the launch plan.'</span><span style=\\"color:#F0F3F6\\">, {</span></span>\\n<span class=\\"line\\"><span style=\\"color:#DBB7FF\\"> onInputRequired</span><span style=\\"color:#F0F3F6\\">: </span><span style=\\"color:#FF9492\\">async</span><span style=\\"color:#F0F3F6\\"> ({ </span><span style=\\"color:#FFB757\\">question</span><span style=\\"color:#F0F3F6\\"> }) </span><span style=\\"color:#FF9492\\">=></span><span style=\\"color:#F0F3F6\\"> {</span></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\"> return</span><span style=\\"color:#DBB7FF\\">
187 askYourUser</span><span style=\\"color:#F0F3F6\\">(question);</span></span>\\n<span class=\\"line\\"><span style=\\"color:#F0F3F6\\"> }</span></span>\\n<span class=\\"line\\"><span style=\\"color:#F0F3F6\\">});</span></span>\\n<span class=\\"line\\"></span>\\n<span class=\\"line\\"><span style=\\"color:#F0F3F6\\">console.</span><span style=\\"color:#DBB7FF\\">log</span><span style=\\"color:#F0F3F6\\">(result.status, result.text);</span></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">await</span><span style=\\"color:#F0F3F6\\"> agent.</span><span style=\\"color:#DBB7FF\\">close</span><span style=\\"color:#F0F3F6\\">();</span></span>\\n<span class=\\"line\\"></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">declare</span><span style=\\"color:#FF9492\\"> function</span><span style=\\"color:#DBB7FF\\"> askYourUser</span><span style=\\"color:#F0F3F6\\">(</span><span style=\\"color:#FFB757\\">question</span><span style=\\"color:#FF9492\\">:</span><span style=\\"color:#91CBFF\\"> string</span><span style=\\"color:#F0F3F6\\">)</span><span style=\\"color:#FF9492\\">:</span><span style=\\"color:#FFB757\\"> Promise</span><span style=\\"color:#F0F3F6\\"><</span><span style=\\"color:#91CBFF\\">string</span><span style=\\"color:#F0F3F6\\">>;</span></span></code></pre>"},{"lang":"ts","code":"import { createAgent } from '@coresourceai/sdk';\\n\\nconst agent = createAgent({ type: 'agent' });\\nconst result = await agent.run('Pick a launch date and proceed.');\\n\\nif (result.status === 'awaiting_input') {\\n console.log('The run is waiting:', result.requiredAction?.question);\\n}\\n\\nawait agent.close();","html":"<pre data-language=\\"ts\\" class=\\"shiki github-dark-high-contrast\\" style=\\"background-color:#0a0c10;color:#f0f3f6\\" tabindex=\\"0\\"><code><span class=\\"line\\"><span style=\\"color:#FF9492\\">import</span><span style=\\"color:#F0F3F6\\"> { createAgent } </span><span style=\\"color:#FF9492\\">from</span><span style=\\"color:#ADDCFF\\"> '@coresourceai/sdk'</span><span style=\\"color:#F0F3F6\\">;</span></span>\\n<span class=\\"line\\"></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">const</span><span style=\\"color:#91CBFF\\"> agent</span><span style=\\"color:#FF9492\\"> =</span><span style=\\"color:#DBB7FF\\"> createAgent</span><span style=\\"color:#F0F3F6\\">({ type: </span><span style=\\"color:#ADDCFF\\">'agent'</span><span style=\\"color:#F0F3F6\\"> });</span></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">const</span><span style=\\"color:#91CBFF\\"> result</span><span style=\\"color:#FF9492\\"> =</span><span style=\\"color:#FF9492\\"> await</span><span style=\\"color:#F0F3F6\\"> agent.</span><span style=\\"color:#DBB7FF\\">run</span><span style=\\"color:#F0F3F6\\">(</span><span style=\\"color:#ADDCFF\\">'Pick a launch date and proceed.'</span><span style=\\"color:#F0F3F6\\">);</span></span>\\n<span class=\\"line\\"></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">if</span><span style=\\"color:#F0F3F6\\"> (result.status </span><span style=\\"color:#FF9492\\">===</span><span style=\\"color:#ADDCFF\\"> 'awaiting_input'</span><span style=\\"color:#F0F3F6\\">) {</span></span>\\n<span class=\\"line\\"><span style=\\"color:#F0F3F6\\"> console.</span><span style=\\"color:#DBB7FF\\">log</span><span style=\\"color:#F0F3F6\\">(</span><span style=\\"color:#ADDCFF\\">'The run is waiting:'</span><span style=\\"color:#F0F3F6\\">, result.requiredAction?.question);</span></span>\\n<span class=\\"line\\"><span style=\\"color:#F0F3F6\\">}</span></span>\\n<span class=\\"line\\"></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">await</span><span style=\\"color:#F0F3F6\\"> agent.</span><span style=\\"color:#DBB7FF\\">close</span><span style=\\"color:#F0F3F6\\">();</span></span></code></pre>"},{"lang":"ts","code":"import { createAgent } from '@coresourceai/sdk';\\n\\nconst agent = createAgent({ type: 'saga' });\\nconst run = await agent.start('Prepare the launch plan and ask before choosing a date.');\\n\\nlet result = await run.result();\\n\\nwhile (result.status === 'awaiting_input') {\\n const action = result.requiredAction;\\n\\n if (!action) {\\n throw new Error('The run paused without a question.');\\n }\\n\\n console.log(action.question);\\n const answer = await collectAnswer(action.question);\\n\\n await run.resume(answer);\\n result = await run.result();\\n}\\n\\nconsole.log(result.status, result.text);\\nawait agent.close();\\n\\ndeclare function collectAnswer(question: string): Promise<string>;","html":"<pre data-language=\\"ts\\" class=\\"shiki github-dark-high-contrast\\" style=\\"background-color:#0a0c10;color:#f0f3f6\\" tabindex=\\"0\\"><code><span class=\\"line\\"><span style=\\"color:#FF9492\\">
187import</span><span style=\\"color:#F0F3F6\\"> { createAgent } </span><span style=\\"color:#FF9492\\">from</span><span style=\\"color:#ADDCFF\\"> '@coresourceai/sdk'</span><span style=\\"color:#F0F3F6\\">;</span></span>\\n<span class=\\"line\\"></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">const</span><span style=\\"color:#91CBFF\\"> agent</span><span style=\\"color:#FF9492\\"> =</span><span style=\\"color:#DBB7FF\\"> createAgent</span><span style=\\"color:#F0F3F6\\">({ type: </span><span style=\\"color:#ADDCFF\\">'saga'</span><span style=\\"color:#F0F3F6\\"> });</span></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">const</span><span style=\\"color:#91CBFF\\"> run</span><span style=\\"color:#FF9492\\"> =</span><span style=\\"color:#FF9492\\"> await</span><span style=\\"color:#F0F3F6\\"> agent.</span><span style=\\"color:#DBB7FF\\">start</span><span style=\\"color:#F0F3F6\\">(</span><span style=\\"color:#ADDCFF\\">'Prepare the launch plan and ask before choosing a date.'</span><span style=\\"color:#F0F3F6\\">);</span></span>\\n<span class=\\"line\\"></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">let</span><span style=\\"color:#F0F3F6\\"> result </span><span style=\\"color:#FF9492\\">=</span><span style=\\"color:#FF9492\\"> await</span><span style=\\"color:#F0F3F6\\"> run.</span><span style=\\"color:#DBB7FF\\">result</span><span style=\\"color:#F0F3F6\\">();</span></span>\\n<span class=\\"line\\"></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">while</span><span style=\\"color:#F0F3F6\\"> (result.status </span><span style=\\"color:#FF9492\\">===</span><span style=\\"color:#ADDCFF\\"> 'awaiting_input'</span><span style=\\"color:#F0F3F6\\">) {</span></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\"> const</span><span style=\\"color:#91CBFF\\"> action</span><span style=\\"color:#FF9492\\"> =</span><span style=\\"color:#F0F3F6\\"> result.requiredAction;</span></span>\\n<span class=\\"line\\"></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\"> if</span><span style=\\"color:#F0F3F6\\"> (</span><span style=\\"color:#FF9492\\">!</span><span style=\\"color:#F0F3F6\\">action) {</span></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\"> throw</span><span style=\\"color:#FF9492\\"> new</span><span style=\\"color:#DBB7FF\\"> Error</span><span style=\\"color:#F0F3F6\\">(</span><span style=\\"color:#ADDCFF\\">'The run paused without a question.'</span><span style=\\"color:#F0F3F6\\">);</span></span>\\n<span class=\\"line\\"><span style=\\"color:#F0F3F6\\"> }</span></span>\\n<span class=\\"line\\"></span>\\n<span class=\\"line\\"><span style=\\"color:#F0F3F6\\"> console.</span><span style=\\"color:#DBB7FF\\">log</span><span style=\\"color:#F0F3F6\\">(action.question);</span></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\"> const</span><span style=\\"color:#91CBFF\\"> answer</span><span style=\\"color:#FF9492\\"> =</span><span style=\\"color:#FF9492\\"> await</span><span style=\\"color:#DBB7FF\\"> collectAnswer</span><span style=\\"color:#F0F3F6\\">(action.question);</span></span>\\n<span class=\\"line\\"></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\"> await</span><span style=\\"color:#F0F3F6\\"> run.</span><span style=\\"color:#DBB7FF\\">resume</span><span style=\\"color:#F0F3F6\\">(answer);</span></span>\\n<span class=\\"line\\"><span style=\\"color:#F0F3F6\\"> result </span><span style=\\"color:#FF9492\\">=</span><span style=\\"color:#FF9492\\"> await</span><span style=\\"color:#F0F3F6\\"> run.</span><span style=\\"color:#DBB7FF\\">result</span><span style=\\"color:#F0F3F6\\">();</span></span>\\n<span class=\\"line\\"><span style=\\"color:#F0F3F6\\">}</span></span>\\n<span class=\\"line\\"></span>\\n<span class=\\"line\\"><span style=\\"color:#F0F3F6\\">console.</span><span style=\\"color:#DBB7FF\\">log</span><span style=\\"color:#F0F3F6\\">(result.status, result.text);</span></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">await</span><span style=\\"color:#F0F3F6\\"> agent.</span><span style=\\"color:#DBB7FF\\">close</span><span style=\\"color:#F0F3F6\\">();</span></span>\\n<span class=\\"line\\"></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">declare</span><span style=\\"color:#FF9492\\"> function</span><span style=\\"color:#DBB7FF\\"> collectAnswer</span><span style=\\"color:#F0F3F6\\">(</span><span style=\\"color:#FFB757\\">question</span><span style=\\"color:#FF9492\\">:</span><span style=\\"color:#91CBFF\\"> string</span><span style=\\"color:#F0F3F6\\">)</span><span style=\\"color:#FF9492\\">:</span><span style=\\"color:#FFB757\\"> Promise</span><span style=\\"color:#F0F3F6\\"><</span><span style=\\"color:#91CBFF\\">string</span><span style=\\"color:#F0F3F6\\">>;</span></span></code></pre>"},{"lang":"ts","code":"import type { AgentRequiredAction } from '@coresourceai/sdk';\\n\\nfunction describe(action: AgentRequiredAction) {\\n return {\\n type: action.type, // always 'provide_input'\\n question: action.question,\\n callId: action.callId, // correlates the answer with the tool call\\n schema: action.inputSchema // JSON Schema, when the answer is structured\\n };\\n}","html":"<pre data-language=\\"ts\\" class=\\"shiki github-dark-high-contrast\\" style=\\"background-color:#0a0c10;color:#f0f3f6\\" tabindex=\\"0\\"><code><span class=\\"line\\"><span style=\\"color:#FF9492\\">
187import</span><span style=\\"color:#FF9492\\"> type</span><span style=\\"color:#F0F3F6\\"> { AgentRequiredAction } </span><span style=\\"color:#FF9492\\">from</span><span style=\\"color:#ADDCFF\\"> '@coresourceai/sdk'</span><span style=\\"color:#F0F3F6\\">;</span></span>\\n<span class=\\"line\\"></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">function</span><span style=\\"color:#DBB7FF\\"> describe</span><span style=\\"color:#F0F3F6\\">(</span><span style=\\"color:#FFB757\\">action</span><span style=\\"color:#FF9492\\">:</span><span style=\\"color:#FFB757\\"> AgentRequiredAction</span><span style=\\"color:#F0F3F6\\">) {</span></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\"> return</span><span style=\\"color:#F0F3F6\\"> {</span></span>\\n<span class=\\"line\\"><span style=\\"color:#F0F3F6\\"> type: action.type, </span><span style=\\"color:#BDC4CC\\">// always 'provide_input'</span></span>\\n<span class=\\"line\\"><span style=\\"color:#F0F3F6\\"> question: action.question,</span></span>\\n<span class=\\"line\\"><span style=\\"color:#F0F3F6\\"> callId: action.callId, </span><span style=\\"color:#BDC4CC\\">// correlates the answer with the tool call</span></span>\\n<span class=\\"line\\"><span style=\\"color:#F0F3F6\\"> schema: action.inputSchema </span><span style=\\"color:#BDC4CC\\">// JSON Schema, when the answer is structured</span></span>\\n<span class=\\"line\\"><span style=\\"color:#F0F3F6\\"> };</span></span>\\n<span class=\\"line\\"><span style=\\"color:#F0F3F6\\">}</span></span></code></pre>"},{"lang":"ts","code":"import { createAgent } from '@coresourceai/sdk';\\n\\nconst agent = createAgent({ type: 'saga' });\\nconst run = await agent.start('Plan the migration; confirm the window with me.');\\n\\nconst result = await run.result();\\n\\nif (result.status === 'awaiting_input' && result.requiredAction?.inputSchema) {\\n // The agent asked for a shape, not a sentence.\\n await run.resume({ start: '2026-08-03T22:00:00Z', durationHours: 4 });\\n}\\n\\nawait agent.close();","html":"<pre data-language=\\"ts\\" class=\\"shiki github-dark-high-contrast\\" style=\\"background-color:#0a0c10;color:#f0f3f6\\" tabindex=\\"0\\"><code><span class=\\"line\\"><span style=\\"color:#FF9492\\">import</span><span style=\\"color:#F0F3F6\\"> { createAgent } </span><span style=\\"color:#FF9492\\">from</span><span style=\\"color:#ADDCFF\\"> '@coresourceai/sdk'</span><span style=\\"color:#F0F3F6\\">;</span></span>\\n<span class=\\"line\\"></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">const</span><span style=\\"color:#91CBFF\\"> agent</span><span style=\\"color:#FF9492\\"> =</span><span style=\\"color:#DBB7FF\\"> createAgent</span><span style=\\"color:#F0F3F6\\">({ type: </span><span style=\\"color:#ADDCFF\\">'saga'</span><span style=\\"color:#F0F3F6\\"> });</span></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">const</span><span style=\\"color:#91CBFF\\"> run</span><span style=\\"color:#FF9492\\"> =</span><span style=\\"color:#FF9492\\"> await</span><span style=\\"color:#F0F3F6\\"> agent.</span><span style=\\"color:#DBB7FF\\">start</span><span style=\\"color:#F0F3F6\\">(</span><span style=\\"color:#ADDCFF\\">'Plan the migration; confirm the window with me.'</span><span style=\\"color:#F0F3F6\\">);</span></span>\\n<span class=\\"line\\"></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">const</span><span style=\\"color:#91CBFF\\"> result</span><span style=\\"color:#FF9492\\"> =</span><span style=\\"color:#FF9492\\"> await</span><span style=\\"color:#F0F3F6\\"> run.</span><span style=\\"color:#DBB7FF\\">result</span><span style=\\"color:#F0F3F6\\">();</span></span>\\n<span class=\\"line\\"></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">if</span><span style=\\"color:#F0F3F6\\"> (result.status </span><span style=\\"color:#FF9492\\">===</span><span style=\\"color:#ADDCFF\\"> 'awaiting_input'</span><span style=\\"color:#FF9492\\"> &&</span><span style=\\"color:#F0F3F6\\"> result.requiredAction?.inputSchema) {</span></span>\\n<span class=\\"line\\"><span style=\\"color:#BDC4CC\\"> // The agent asked for a shape, not a sentence.</span></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\"> await</span><span style=\\"color:#F0F3F6\\"> run.</span><span style=\\"color:#DBB7FF\\">resume</span><span style=\\"color:#F0F3F6\\">({ start: </span><span style=\\"color:#ADDCFF\\">'2026-08-03T22:00:00Z'</span><span style=\\"color:#F0F3F6\\">, durationHours: </span><span style=\\"color:#91CBFF\\">4</span><span style=\\"color:#F0F3F6\\"> });</span></span>\\n<span class=\\"line\\"><span style=\\"color:#F0F3F6\\">}</span></span>\\n<span class=\\"line\\"></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">await</span><span style=\\"color:#F0F3F6\\"> agent.</span><span style=\\"color:#DBB7FF\\">close</span><span style=\\"color:#F0F3F6\\">();</span></span></code></pre>"},{"lang":"ts","code":"import { createAgent } from '@coresourceai/sdk';\\n\\n// Process A: start the work and hand the run id to your queue.\\nconst agent = createAgent({ type: 'agent' });\\nconst run = await agent.start('Audit the vendor contracts and ask before filing the report.');\\nawait saveRunId(run.id);\\nawait agent.close();\\n\\ndeclare function saveRunId(id: string): Promise<void>;","html":"<pre data-language=\\"ts\\" class=\\"shiki github-dark-high-contrast\\" style=\\"background-color:#0a0c10;color:#f0f3f6\\" tabindex=\\"0\\"><code><span class=\\"line\\"><span style=\\"color:#FF9492\\">
187import</span><span style=\\"color:#F0F3F6\\"> { createAgent } </span><span style=\\"color:#FF9492\\">from</span><span style=\\"color:#ADDCFF\\"> '@coresourceai/sdk'</span><span style=\\"color:#F0F3F6\\">;</span></span>\\n<span class=\\"line\\"></span>\\n<span class=\\"line\\"><span style=\\"color:#BDC4CC\\">// Process A: start the work and hand the run id to your queue.</span></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">const</span><span style=\\"color:#91CBFF\\"> agent</span><span style=\\"color:#FF9492\\"> =</span><span style=\\"color:#DBB7FF\\"> createAgent</span><span style=\\"color:#F0F3F6\\">({ type: </span><span style=\\"color:#ADDCFF\\">'agent'</span><span style=\\"color:#F0F3F6\\"> });</span></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">const</span><span style=\\"color:#91CBFF\\"> run</span><span style=\\"color:#FF9492\\"> =</span><span style=\\"color:#FF9492\\"> await</span><span style=\\"color:#F0F3F6\\"> agent.</span><span style=\\"color:#DBB7FF\\">start</span><span style=\\"color:#F0F3F6\\">(</span><span style=\\"color:#ADDCFF\\">'Audit the vendor contracts and ask before filing the report.'</span><span style=\\"color:#F0F3F6\\">);</span></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">await</span><span style=\\"color:#DBB7FF\\"> saveRunId</span><span style=\\"color:#F0F3F6\\">(run.id);</span></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">await</span><span style=\\"color:#F0F3F6\\"> agent.</span><span style=\\"color:#DBB7FF\\">close</span><span style=\\"color:#F0F3F6\\">();</span></span>\\n<span class=\\"line\\"></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">declare</span><span style=\\"color:#FF9492\\"> function</span><span style=\\"color:#DBB7FF\\"> saveRunId</span><span style=\\"color:#F0F3F6\\">(</span><span style=\\"color:#FFB757\\">id</span><span style=\\"color:#FF9492\\">:</span><span style=\\"color:#91CBFF\\"> string</span><span style=\\"color:#F0F3F6\\">)</span><span style=\\"color:#FF9492\\">:</span><span style=\\"color:#FFB757\\"> Promise</span><span style=\\"color:#F0F3F6\\"><</span><span style=\\"color:#91CBFF\\">void</span><span style=\\"color:#F0F3F6\\">>;</span></span></code></pre>"},{"lang":"ts","code":"import process from 'node:process';\\n\\n// Process B: answer the paused run by its id.\\nconst runId = await loadRunId();\\nconst answer = await waitForHumanReply(runId);\\n\\nconst response = await fetch(\\n \`https://api.coresource.ai/v1/runs/\${encodeURIComponent(runId)}/resume\`,\\n {\\n method: 'POST',\\n headers: {\\n Authorization: \`Bearer \${process.env.CORESOURCE_API_KEY}\`,\\n 'Content-Type': 'application/json'\\n },\\n body: JSON.stringify({ input: answer })\\n }\\n);\\n\\nif (!response.ok) {\\n throw new Error(\`Resume failed with HTTP \${response.status}\`);\\n}\\n\\ndeclare function loadRunId(): Promise<string>;\\ndeclare function waitForHumanReply(runId: string): Promise<string>;","html":"<pre data-language=\\"ts\\" class=\\"shiki github-dark-high-contrast\\" style=\\"background-color:#0a0c10;color:#f0f3f6\\" tabindex=\\"0\\"><code><span class=\\"line\\"><span style=\\"color:#FF9492\\">import</span><span style=\\"color:#F0F3F6\\"> process </span><span style=\\"color:#FF9492\\">from</span><span style=\\"color:#ADDCFF\\"> 'node:process'</span><span style=\\"color:#F0F3F6\\">;</span></span>\\n<span class=\\"line\\"></span>\\n<span class=\\"line\\"><span style=\\"color:#BDC4CC\\">// Process B: answer the paused run by its id.</span></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">const</span><span style=\\"color:#91CBFF\\"> runId</span><span style=\\"color:#FF9492\\"> =</span><span style=\\"color:#FF9492\\"> await</span><span style=\\"color:#DBB7FF\\"> loadRunId</span><span style=\\"color:#F0F3F6\\">();</span></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">const</span><span style=\\"color:#91CBFF\\"> answer</span><span style=\\"color:#FF9492\\"> =</span><span style=\\"color:#FF9492\\"> await</span><span style=\\"color:#DBB7FF\\"> waitForHumanReply</span><span style=\\"color:#F0F3F6\\">(runId);
187</span></span>\\n<span class=\\"line\\"></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">const</span><span style=\\"color:#91CBFF\\"> response</span><span style=\\"color:#FF9492\\"> =</span><span style=\\"color:#FF9492\\"> await</span><span style=\\"color:#DBB7FF\\"> fetch</span><span style=\\"color:#F0F3F6\\">(</span></span>\\n<span class=\\"line\\"><span style=\\"color:#ADDCFF\\"> \`https://api.coresource.ai/v1/runs/\${</span><span style=\\"color:#DBB7FF\\">encodeURIComponent</span><span style=\\"color:#ADDCFF\\">(</span><span style=\\"color:#F0F3F6\\">runId</span><span style=\\"color:#ADDCFF\\">)</span><span style=\\"color:#ADDCFF\\">}/resume\`</span><span style=\\"color:#F0F3F6\\">,</span></span>\\n<span class=\\"line\\"><span style=\\"color:#F0F3F6\\"> {</span></span>\\n<span class=\\"line\\"><span style=\\"color:#F0F3F6\\"> method: </span><span style=\\"color:#ADDCFF\\">'POST'</span><span style=\\"color:#F0F3F6\\">,</span></span>\\n<span class=\\"line\\"><span style=\\"color:#F0F3F6\\"> headers: {</span></span>\\n<span class=\\"line\\"><span style=\\"color:#F0F3F6\\"> Authorization: </span><span style=\\"color:#ADDCFF\\">\`Bearer \${</span><span style=\\"color:#F0F3F6\\">process</span><span style=\\"color:#ADDCFF\\">.</span><span style=\\"color:#F0F3F6\\">env</span><span style=\\"color:#ADDCFF\\">.</span><span style=\\"color:#91CBFF\\">CORESOURCE_API_KEY</span><span style=\\"color:#ADDCFF\\">}\`</span><span style=\\"color:#F0F3F6\\">,</span></span>\\n<span class=\\"line\\"><span style=\\"color:#ADDCFF\\"> 'Content-Type'</span><span style=\\"color:#F0F3F6\\">: </span><span style=\\"color:#ADDCFF\\">'application/json'</span></span>\\n<span class=\\"line\\"><span style=\\"color:#F0F3F6\\"> },</span></span>\\n<span class=\\"line\\"><span style=\\"color:#F0F3F6\\"> body: </span><span style=\\"color:#91CBFF\\">JSON</span><span style=\\"color:#F0F3F6\\">.</span><span style=\\"color:#DBB7FF\\">stringify</span><span style=\\"color:#F0F3F6\\">({ input: answer })</span></span>\\n<span class=\\"line\\"><span style=\\"color:#F0F3F6\\"> }</span></span>\\n<span class=\\"line\\"><span style=\\"color:#F0F3F6\\">);</span></span>\\n<span class=\\"line\\"></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">if</span><span style=\\"color:#F0F3F6\\"> (</span><span style=\\"color:#FF9492\\">!</span><span style=\\"color:#F0F3F6\\">response.ok) {</span></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\"> throw</span><span style=\\"color:#FF9492\\"> new</span><span style=\\"color:#DBB7FF\\"> Error</span><span style=\\"color:#F0F3F6\\">(</span><span style=\\"color:#ADDCFF\\">\`Resume failed with HTTP \${</span><span style=\\"color:#F0F3F6\\">response</span><span style=\\"color:#ADDCFF\\">.</span><span style=\\"color:#F0F3F6\\">status</span><span style=\\"color:#ADDCFF\\">}\`</span><span style=\\"color:#F0F3F6\\">);</span></span>\\n<span class=\\"line\\"><span style=\\"color:#F0F3F6\\">}</span></span>\\n<span class=\\"line\\"></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">declare</span><span style=\\"color:#FF9492\\"> function</span><span style=\\"color:#DBB7FF\\"> loadRunId</span><span style=\\"color:#F0F3F6\\">()</span><span style=\\"color:#FF9492\\">:</span><span style=\\"color:#FFB757\\"> Promise</span><span style=\\"color:#F0F3F6\\"><</span><span style=\\"color:#91CBFF\\">string</span><span style=\\"color:#F0F3F6\\">>;</span></span>\\n<span class=\\"line\\"><span style=\\"color:#FF9492\\">declare</span><span style=\\"color:#FF9492\\"> function</span><span style=\\"color:#DBB7FF\\"> waitForHumanReply</span><span style=\\"color:#F0F3F6\\">(</span><span style=\\"color:#FFB757\\">runId</span><span style=\\"color:#FF9492\\">:</span><span style=\\"color:#91CBFF\\"> string</span><span style=\\"color:#F0F3F6\\">)</span><span style=\\"color:#FF9492\\">:</span><span style=\\"color:#FFB757\\"> Promise</span><span style=\\"color:#F0F3F6\\"><</span><span style=\\"color:#91CBFF\\">string</span><span style=\\"color:#F0F3F6\\">>;</span></span></code></pre>"}]`),t={slug:s,meta:n,headings:a,markdown:e,highlighted:o};export{t as default,a as headings,o as highlighted,e as markdown,n as meta,s as slug};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.