@amalgm/chat 0.2.4 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/PURPOSE.md CHANGED
@@ -31,6 +31,8 @@ automations, and third-party apps must all use the same public SDK.
31
31
  already-resolved host binding.
32
32
  - A **Chat MCP server** is a thin adapter over the same durable Chat
33
33
  capability, never a second session, turn, or transcript owner.
34
+ - An **agent run** is one idempotently named new conversation whose exact
35
+ installed-agent execution is resolved by the host before its first turn.
34
36
 
35
37
  ## Workstream 1 axioms
36
38
 
@@ -131,6 +133,12 @@ automations, and third-party apps must all use the same public SDK.
131
133
  port and preserves any approved structured input. A provider-specific
132
134
  request method never becomes an implicit denial merely because its effect
133
135
  arrived through MCP.
136
+ 36. A task-level agent run always creates its own durable conversation. A
137
+ stable retry key rejoins that conversation and its one turn; it never
138
+ searches for, invents, or reuses an unrelated conversation.
139
+ 37. Agent-run occurrence context is a separate official ACP JSON resource,
140
+ never system instructions or ambient host state. The host resolves the
141
+ installation to one exact execution contract before Chat starts it.
134
142
 
135
143
  ## North-star proof
136
144
 
@@ -0,0 +1,33 @@
1
+ import type { ConversationMessage, ConversationTurn } from '../conversations/types.js';
2
+ import type { ExecutionContract } from '../execution/contract.js';
3
+ import type { Chat } from '../sessions/chat.js';
4
+ export interface ChatAgentRunInput {
5
+ readonly agentInstallationId: string;
6
+ readonly message: string;
7
+ readonly context?: unknown;
8
+ readonly idempotencyKey?: string;
9
+ }
10
+ export interface ResolvedChatAgentRun {
11
+ readonly execution: ExecutionContract;
12
+ readonly title?: string;
13
+ }
14
+ export interface ChatAgentRunResult {
15
+ readonly conversationId: string;
16
+ readonly turn: ConversationTurn;
17
+ readonly reply: ConversationMessage | null;
18
+ }
19
+ export interface ChatAgentRunner {
20
+ run(input: ChatAgentRunInput): Promise<ChatAgentRunResult>;
21
+ }
22
+ export interface ChatAgentRunnerOptions {
23
+ readonly resolve: (agentInstallationId: string) => Promise<ResolvedChatAgentRun> | ResolvedChatAgentRun;
24
+ readonly newId?: () => string;
25
+ readonly digest?: (value: string) => Promise<string> | string;
26
+ }
27
+ export declare class ChatAgentRunError extends Error {
28
+ readonly code: string;
29
+ constructor(turn: ConversationTurn);
30
+ }
31
+ /** Compose host resolution with Chat's one durable conversation capability. */
32
+ export declare function createChatAgentRunner<Binding, RuntimeSession>(chat: Chat<Binding, RuntimeSession>, options: ChatAgentRunnerOptions): ChatAgentRunner;
33
+ //# sourceMappingURL=agent-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-runner.d.ts","sourceRoot":"","sources":["../../src/mcp/agent-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACvF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAEhD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI,CAAC;CAC5C;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,CAAC,mBAAmB,EAAE,MAAM,KAAK,OAAO,CAAC,oBAAoB,CAAC,GAAG,oBAAoB,CAAC;IACxG,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;CAC/D;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,gBAAgB;CAUnC;AAED,+EAA+E;AAC/E,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,EAC3D,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EACnC,OAAO,EAAE,sBAAsB,GAC9B,eAAe,CA4CjB"}
@@ -0,0 +1,117 @@
1
+ export class ChatAgentRunError extends Error {
2
+ code;
3
+ constructor(turn) {
4
+ const stored = turn.error;
5
+ super(typeof stored?.['message'] === 'string'
6
+ ? stored['message']
7
+ : `Agent run ended ${turn.status}: ${turn.id}`);
8
+ this.name = 'ChatAgentRunError';
9
+ this.code = typeof stored?.['code'] === 'string'
10
+ ? stored['code']
11
+ : `AGENT_RUN_${turn.status.toUpperCase()}`;
12
+ }
13
+ }
14
+ /** Compose host resolution with Chat's one durable conversation capability. */
15
+ export function createChatAgentRunner(chat, options) {
16
+ const newId = options.newId ?? (() => globalThis.crypto.randomUUID());
17
+ const digest = options.digest ?? sha256;
18
+ return Object.freeze({
19
+ async run(input) {
20
+ const agentInstallationId = required(input.agentInstallationId, 'agentInstallationId');
21
+ const message = required(input.message, 'message');
22
+ const key = input.idempotencyKey?.trim() || newId();
23
+ const suffix = await digest(key);
24
+ const conversationId = `agent-run-${suffix}`;
25
+ const existing = await priorResult(chat, conversationId);
26
+ if (existing)
27
+ return existing;
28
+ const resolved = await options.resolve(agentInstallationId);
29
+ const execution = await chat.prepareExecution(`agent-run:${conversationId}`, resolved.execution);
30
+ let session;
31
+ try {
32
+ session = await chat.startSession({
33
+ sessionId: conversationId,
34
+ execution,
35
+ title: resolved.title || `Agent run: ${agentInstallationId}`,
36
+ origin: 'agent_run',
37
+ originId: suffix,
38
+ metadata: { agentInstallationId },
39
+ });
40
+ }
41
+ catch (error) {
42
+ if (!hasCode(error, 'SESSION_ALREADY_EXISTS'))
43
+ throw error;
44
+ session = await chat.resumeSession({ sessionId: conversationId, execution });
45
+ }
46
+ try {
47
+ const stream = await session.send({
48
+ execution,
49
+ clientTurnId: `${conversationId}-turn`,
50
+ prompt: prompt(message, input.context, suffix),
51
+ });
52
+ await stream.completion;
53
+ }
54
+ catch (error) {
55
+ const prior = await priorResult(chat, conversationId);
56
+ if (prior)
57
+ return prior;
58
+ throw error;
59
+ }
60
+ return completedResult(chat, conversationId);
61
+ },
62
+ });
63
+ }
64
+ async function priorResult(chat, conversationId) {
65
+ try {
66
+ const turn = await chat.latestTurn(conversationId);
67
+ if (!turn)
68
+ return null;
69
+ if (turn.status === 'running') {
70
+ for await (const _update of chat.reconnectTurn(conversationId, turn.id)) { /* wait for seal */ }
71
+ }
72
+ return completedResult(chat, conversationId);
73
+ }
74
+ catch (error) {
75
+ if (hasCode(error, 'SESSION_NOT_FOUND'))
76
+ return null;
77
+ throw error;
78
+ }
79
+ }
80
+ async function completedResult(chat, conversationId) {
81
+ const turn = await chat.latestTurn(conversationId);
82
+ if (!turn)
83
+ throw new Error(`Agent run has no durable turn: ${conversationId}`);
84
+ if (turn.status !== 'completed')
85
+ throw new ChatAgentRunError(turn);
86
+ const messages = await chat.listMessages(conversationId);
87
+ const reply = [...messages].reverse().find((entry) => (entry.turnId === turn.id && entry.role === 'assistant')) || null;
88
+ return Object.freeze({ conversationId, turn, reply });
89
+ }
90
+ function prompt(message, context, id) {
91
+ return {
92
+ parts: [
93
+ { type: 'text', text: message },
94
+ ...(context === undefined ? [] : [{
95
+ type: 'resource',
96
+ resource: {
97
+ uri: `amalgm://agent-run/${id}/context.json`,
98
+ mimeType: 'application/json',
99
+ text: JSON.stringify(context),
100
+ },
101
+ }]),
102
+ ],
103
+ };
104
+ }
105
+ function required(value, name) {
106
+ if (typeof value !== 'string' || !value.trim())
107
+ throw new Error(`${name} is required`);
108
+ return value.trim();
109
+ }
110
+ function hasCode(error, code) {
111
+ return Boolean(error && typeof error === 'object' && error.code === code);
112
+ }
113
+ async function sha256(value) {
114
+ const bytes = await globalThis.crypto.subtle.digest('SHA-256', new TextEncoder().encode(value));
115
+ return [...new Uint8Array(bytes)].map((item) => item.toString(16).padStart(2, '0')).join('');
116
+ }
117
+ //# sourceMappingURL=agent-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-runner.js","sourceRoot":"","sources":["../../src/mcp/agent-runner.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  export { createChatMcpServer, chatMcpToolDescriptors } from './server.js';
2
+ export { ChatAgentRunError, createChatAgentRunner, type ChatAgentRunner, type ChatAgentRunnerOptions, type ChatAgentRunInput, type ChatAgentRunResult, type ResolvedChatAgentRun, } from './agent-runner.js';
2
3
  export type { ChatMcpRequest, ChatMcpServer, ChatMcpTool } from './types.js';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC1E,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,GAC1B,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
package/dist/mcp/index.js CHANGED
@@ -1,2 +1,3 @@
1
1
  export { createChatMcpServer, chatMcpToolDescriptors } from './server.js';
2
+ export { ChatAgentRunError, createChatAgentRunner, } from './agent-runner.js';
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EACL,iBAAiB,EACjB,qBAAqB,GAMtB,MAAM,mBAAmB,CAAC"}
@@ -1,7 +1,10 @@
1
1
  import type { Chat } from '../sessions/chat.js';
2
+ import type { ChatAgentRunner } from './agent-runner.js';
2
3
  import type { ChatMcpServer, ChatMcpTool } from './types.js';
3
4
  declare function toolDescriptors(): readonly Omit<ChatMcpTool, 'handler'>[];
4
5
  /** Thin MCP projection over Chat's one durable conversation capability. */
5
- declare function createChatMcpServer<Binding, RuntimeSession>(chat: Chat<Binding, RuntimeSession>): ChatMcpServer;
6
+ declare function createChatMcpServer<Binding, RuntimeSession>(chat: Chat<Binding, RuntimeSession>, options?: Readonly<{
7
+ agentRunner?: ChatAgentRunner;
8
+ }>): ChatMcpServer;
6
9
  export { createChatMcpServer, toolDescriptors as chatMcpToolDescriptors };
7
10
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAkB,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA6B7E,iBAAS,eAAe,IAAI,SAAS,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE,CAyClE;AAED,2EAA2E;AAC3E,iBAAS,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAClD,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,GAClC,aAAa,CAiEf;AAED,OAAO,EAAE,mBAAmB,EAAE,eAAe,IAAI,sBAAsB,EAAE,CAAC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAkB,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAyC7E,iBAAS,eAAe,IAAI,SAAS,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE,CAwDlE;AAED,2EAA2E;AAC3E,iBAAS,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAClD,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EACnC,OAAO,GAAE,QAAQ,CAAC;IAAE,WAAW,CAAC,EAAE,eAAe,CAAA;CAAE,CAAM,GACxD,aAAa,CAoFf;AAED,OAAO,EAAE,mBAAmB,EAAE,eAAe,IAAI,sBAAsB,EAAE,CAAC"}
@@ -22,8 +22,34 @@ function result(value) {
22
22
  structuredContent: value,
23
23
  });
24
24
  }
25
+ function failure(error) {
26
+ const message = error instanceof Error ? error.message : String(error);
27
+ const code = error && typeof error === 'object' && typeof error.code === 'string'
28
+ ? String(error.code)
29
+ : 'CHAT_TOOL_FAILED';
30
+ return Object.freeze({
31
+ isError: true,
32
+ content: Object.freeze([{ type: 'text', text: `${code}: ${message}` }]),
33
+ structuredContent: Object.freeze({ error: Object.freeze({ code, message }) }),
34
+ });
35
+ }
25
36
  function toolDescriptors() {
26
37
  return Object.freeze([
38
+ Object.freeze({
39
+ name: 'chat_agent_run',
40
+ description: 'Run one installed agent in a new durable conversation and wait for its committed reply.',
41
+ inputSchema: Object.freeze({
42
+ type: 'object',
43
+ properties: Object.freeze({
44
+ agent_installation_id: Object.freeze({ type: 'string', description: 'Installed agent identity.' }),
45
+ message: Object.freeze({ type: 'string', description: 'Task for the agent.' }),
46
+ context: Object.freeze({ description: 'Optional exact JSON context supplied as an ACP resource.' }),
47
+ idempotency_key: Object.freeze({ type: 'string', description: 'Optional stable retry identity.' }),
48
+ }),
49
+ required: Object.freeze(['agent_installation_id', 'message']),
50
+ additionalProperties: false,
51
+ }),
52
+ }),
27
53
  Object.freeze({
28
54
  name: 'chat_conversations_list',
29
55
  description: 'List durable conversations owned by the current Amalgm user.',
@@ -65,11 +91,26 @@ function toolDescriptors() {
65
91
  ]);
66
92
  }
67
93
  /** Thin MCP projection over Chat's one durable conversation capability. */
68
- function createChatMcpServer(chat) {
94
+ function createChatMcpServer(chat, options = {}) {
69
95
  const descriptors = toolDescriptors();
70
96
  const tools = Object.freeze(descriptors.map((descriptor) => Object.freeze({
71
97
  ...descriptor,
72
98
  handler: async (input = EMPTY_INPUT) => {
99
+ if (descriptor.name === 'chat_agent_run') {
100
+ if (!options.agentRunner) {
101
+ throw Object.assign(new Error('This Chat host cannot resolve installed agents'), {
102
+ code: 'AGENT_RUN_UNAVAILABLE',
103
+ });
104
+ }
105
+ return result(await options.agentRunner.run({
106
+ agentInstallationId: requiredString(input, 'agent_installation_id'),
107
+ message: requiredString(input, 'message'),
108
+ ...(input.context === undefined ? {} : { context: input.context }),
109
+ ...(typeof input.idempotency_key === 'string' && input.idempotency_key.trim()
110
+ ? { idempotencyKey: input.idempotency_key.trim() }
111
+ : {}),
112
+ }));
113
+ }
73
114
  if (descriptor.name === 'chat_conversations_list') {
74
115
  const agentInstallationId = typeof input.agent_installation_id === 'string'
75
116
  ? input.agent_installation_id.trim() || undefined
@@ -124,7 +165,12 @@ function createChatMcpServer(chat) {
124
165
  if (!selected)
125
166
  throw Object.assign(new Error(`Unknown Chat tool: ${name}`), { rpcCode: -32602 });
126
167
  const args = request.params?.arguments;
127
- return selected.handler(args && typeof args === 'object' && !Array.isArray(args) ? args : {});
168
+ try {
169
+ return await selected.handler(args && typeof args === 'object' && !Array.isArray(args) ? args : {});
170
+ }
171
+ catch (error) {
172
+ return failure(error);
173
+ }
128
174
  }
129
175
  if (request.method.startsWith('notifications/'))
130
176
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -649,6 +649,13 @@ class CodexAdapter {
649
649
  complete = true;
650
650
  push(done({ providerSessionId: session.providerSessionId, stopReason: 'cancelled' }));
651
651
  };
652
+ // Subscription can synchronously deliver already-buffered provider
653
+ // notifications. Everything the handler reads must therefore be fixed
654
+ // before `on` opens that door.
655
+ const nativeInput = codexPromptInput(input);
656
+ const compactCommand = nativeInput.length === 1
657
+ && nativeInput[0].type === 'text'
658
+ && isCompactCommand(nativeInput[0].text);
652
659
  const off = session.client.on((msg) => {
653
660
  const p = msg.params || {};
654
661
  if (p.threadId && p.threadId !== session.providerSessionId) return;
@@ -684,10 +691,6 @@ class CodexAdapter {
684
691
  });
685
692
  session.activeTurnId = null;
686
693
  session.activeTurnHadAssistant = false;
687
- const nativeInput = codexPromptInput(input);
688
- const compactCommand = nativeInput.length === 1
689
- && nativeInput[0].type === 'text'
690
- && isCompactCommand(nativeInput[0].text);
691
694
  const startRequest = compactCommand
692
695
  ? session.client.request('thread/compact/start', { threadId: session.providerSessionId })
693
696
  : session.client.request('turn/start', {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amalgm/chat",
3
- "version": "0.2.4",
3
+ "version": "0.2.6",
4
4
  "description": "A provider-agnostic agent chat SDK with ACP content, prepared execution, normalized streams, and usage.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",