@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 +8 -0
- package/dist/mcp/agent-runner.d.ts +33 -0
- package/dist/mcp/agent-runner.d.ts.map +1 -0
- package/dist/mcp/agent-runner.js +117 -0
- package/dist/mcp/agent-runner.js.map +1 -0
- package/dist/mcp/index.d.ts +1 -0
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +1 -0
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/server.d.ts +4 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +48 -2
- package/dist/mcp/server.js.map +1 -1
- package/host/adapters/codex.js +7 -4
- package/package.json +1 -1
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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"}
|
package/dist/mcp/index.d.ts
CHANGED
|
@@ -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
|
package/dist/mcp/index.d.ts.map
CHANGED
|
@@ -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
package/dist/mcp/index.js.map
CHANGED
|
@@ -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"}
|
package/dist/mcp/server.d.ts
CHANGED
|
@@ -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
|
|
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
|
package/dist/mcp/server.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/mcp/server.js
CHANGED
|
@@ -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
|
-
|
|
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;
|
package/dist/mcp/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
package/host/adapters/codex.js
CHANGED
|
@@ -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