PageSourceSearch

https://coresource.ai/assets/human-input.generated-xkZNwHqZ.js

js coresource.ai collected 2026-10-05 15:15:23 UTC 33,513 bytes, 187 lines download raw bytes

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\\">&#x3C;</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\\">&#x3C;</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\\"> &#x26;&#x26;</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\\">&#x3C;</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\\">&#x3C;</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\\">&#x3C;</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.