mirror of
https://github.com/wu736139669/hapi.git
synced 2026-11-08 01:43:07 +00:00
feat(cli): add Codex-aware auto peer delivery
Default peer CLI and MCP messages to auto, steering eligible Codex turns and queueing otherwise. Preserve explicit delivery modes and uncertain-send safety, and clarify steer guidance for important time-sensitive findings.
This commit is contained in:
@@ -140,12 +140,13 @@ describe('runHappyMcpStdioBridge tool forwarding', () => {
|
||||
])
|
||||
})
|
||||
|
||||
it.each(['queue', 'steer'])('advertises and forwards ping_peer delivery mode %s', async (deliveryMode) => {
|
||||
it.each(['auto', 'queue', 'steer'])('advertises and forwards ping_peer delivery mode %s', async (deliveryMode) => {
|
||||
await runHappyMcpStdioBridge(['--url', 'http://127.0.0.1:43006', '--tools', 'ping_peer'])
|
||||
const schema = harness.configs.get('ping_peer')?.inputSchema as {
|
||||
parse(input: unknown): unknown
|
||||
}
|
||||
const args = { sessionIdPrefix: 'peer-id', message: 'hello', deliveryMode }
|
||||
expect(harness.configs.get('ping_peer')?.description).toContain('auto (default)')
|
||||
expect(schema.parse(args)).toEqual(args)
|
||||
expect(() => schema.parse({ ...args, deliveryMode: 'interrupt' })).toThrow()
|
||||
await harness.tools.get('ping_peer')?.(args)
|
||||
@@ -238,4 +239,4 @@ describe('runHappyMcpStdioBridge tool forwarding', () => {
|
||||
delete process.env.HAPI_DISABLE_PEER_TOOLS
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -16,10 +16,11 @@ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
|
||||
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
||||
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
||||
import { z } from 'zod';
|
||||
import { MessageDeliveryModeSchema } from '@hapi/protocol';
|
||||
import { PeerDeliveryModeSchema } from '@/modules/pingPeer/deliveryMode';
|
||||
import { DISPLAY_IMAGE_PROMPT_CURSOR, DISPLAY_MEDIA_PROMPT_CURSOR, DISPLAY_VIDEO_PROMPT_CURSOR } from '@/modules/common/displayImagePrompt';
|
||||
import {
|
||||
INSPECT_PEER_TOOL_DESCRIPTION,
|
||||
PEER_DELIVERY_MODE_DESCRIPTION,
|
||||
PING_PEER_TOOL_DESCRIPTION,
|
||||
SESSION_ID_PREFIX_PARAM_DESCRIPTION,
|
||||
} from '@hapi/protocol/sessionCitation';
|
||||
@@ -213,9 +214,7 @@ export async function runHappyMcpStdioBridge(argv: string[]): Promise<void> {
|
||||
const pingPeerInputSchema: z.ZodTypeAny = z.object({
|
||||
sessionIdPrefix: z.string().trim().min(1).describe(SESSION_ID_PREFIX_PARAM_DESCRIPTION),
|
||||
message: z.string().min(1).describe('Message text to deliver to the target session'),
|
||||
deliveryMode: MessageDeliveryModeSchema.optional().describe(
|
||||
'queue (default): next turn, resuming if needed. steer: insert into an active Pi, Codex, or Cursor ACP turn; idle/inactive targets are rejected. If steer fails after send, inspect the target before retrying; do not resend automatically.'
|
||||
),
|
||||
deliveryMode: PeerDeliveryModeSchema.optional().describe(PEER_DELIVERY_MODE_DESCRIPTION),
|
||||
});
|
||||
|
||||
if (toolNames.has('ping_peer')) {
|
||||
|
||||
Reference in New Issue
Block a user