mirror of
https://github.com/wu736139669/hapi.git
synced 2026-10-08 19:19:42 +00:00
34 new golden chat fixtures generated from the web pipeline, plus a machine-generated modes catalog: - Claude output: away_summary/microcompact_boundary/compact_boundary system subtypes, <task-notification> summary extraction, multi-block assistant message with an array-of-parts (text+image) tool_result - AgentEvent union completed: switch/message/error/title-changed(+dedupe)/ limit-warning(pipe text)/api-error folding/turn-duration/compact-summary/ abort-restore/unknown-type passthrough; thread-goal updated+cleared (silent) - Permission lifecycle via agentState.completedRequests: approved_for_session (mode+allowTools), denied with reason, canceled, AskUserQuestion flat answers, request_user_input nested answers (all with explicit createdAt) - Sidechain: Task tool_use with parentToolUseId-grouped subagent children - codex family: error, context_compacted, generated-image, review JSON, thread-goal messages, CodexBash call/result pair, exploration tool group - cli-output: cli-origin command block + stdout merge - agy flavor (output envelope): agy_message, agy_tool_action run_command mapping; cursor ACP plan snapshot (copilot skipped: identical codex shapes) - generator now also emits shared/fixtures/catalogs/modes.json from shared/src/modes.ts (per-flavor permission modes with labels/tones); self-conformance test covers it; README documents the catalogs contract
36 lines
1.3 KiB
TypeScript
36 lines
1.3 KiB
TypeScript
import {
|
|
AGENT_FLAVORS,
|
|
getCodexCollaborationModeOptions,
|
|
getPermissionModeOptionsForFlavor,
|
|
type CodexCollaborationModeOption,
|
|
type PermissionModeOption
|
|
} from '@hapi/protocol/modes'
|
|
|
|
export type ModesCatalog = {
|
|
/** Codex-only collaboration axis (independent of the permission mode). */
|
|
codexCollaborationModes: CodexCollaborationModeOption[]
|
|
/**
|
|
* Permission modes offered per agent flavor, in offer order, each with its
|
|
* display label and tone. An empty array means the flavor exposes no
|
|
* runtime permission switching (e.g. pi).
|
|
*/
|
|
permissionModesByFlavor: Record<string, PermissionModeOption[]>
|
|
}
|
|
|
|
/**
|
|
* Built directly from shared/src/modes.ts (the same module the web app
|
|
* imports), so the emitted catalog can never drift from the running web
|
|
* implementation. Emitted to shared/fixtures/catalogs/modes.json with the
|
|
* same canonical serialization as the chat fixtures.
|
|
*/
|
|
export function buildModesCatalog(): ModesCatalog {
|
|
const permissionModesByFlavor: Record<string, PermissionModeOption[]> = {}
|
|
for (const flavor of AGENT_FLAVORS) {
|
|
permissionModesByFlavor[flavor] = getPermissionModeOptionsForFlavor(flavor)
|
|
}
|
|
return {
|
|
codexCollaborationModes: getCodexCollaborationModeOptions(),
|
|
permissionModesByFlavor
|
|
}
|
|
}
|