{
  "version": 3,
  "sources": ["../src/runtime.ts", "../../../shared/harness-bridge.ts"],
  "sourcesContent": ["import { readFile, writeFile } from \"node:fs/promises\";\nimport { join, basename } from \"node:path\";\nimport { z } from \"zod\";\nimport {\n  createAgentSession, createExtensionRuntime, convertToLlm, ModelRuntime, SessionManager, SettingsManager,\n  type AgentSession, type ResourceLoader, type ToolDefinition,\n} from \"@earendil-works/pi-coding-agent\";\nimport type { AssistantMessage, Message as PiMessage, Model, UserMessage } from \"@earendil-works/pi-ai\";\nimport { createAssistantMessageEventStream } from \"@earendil-works/pi-ai/utils/event-stream\";\nimport { getCurrentSystemPrompt, getCurrentTools } from \"@earendil-works/pi-ai/utils/transcript\";\nimport type { AgentHarness, HarnessContext } from \"@aexhq/brain/harness\";\nimport type { ContentBlock, Message, ModelResult, Usage } from \"@aexhq/brain/harness\";\nimport { activationText, catalogue, placedTools } from \"../../../shared/harness-bridge.js\";\n\nconst optionsSchema = z.strictObject({\n  contextWindow: z.number().int().positive().optional(),\n  maxTokens: z.number().int().positive().optional(),\n  compaction: z.strictObject({\n    enabled: z.boolean().optional(), reserveTokens: z.number().int().positive().optional(),\n    keepRecentTokens: z.number().int().positive().optional(),\n  }).optional(),\n});\n\ntype SavedMessage = PiMessage & { brainMessage?: Message; brainUsage?: Usage };\n\n// Pi requires numeric counters for its own budgeting. Only Brain's original optional\n// counters enter the journal; these estimates remain private to the upstream runtime.\nfunction piUsage(usage: Usage, messages: unknown): AssistantMessage[\"usage\"] {\n  const input = usage.total_input_tokens ?? usage.input_tokens ?? Math.ceil(JSON.stringify(messages).length / 4);\n  const output = usage.output_tokens ?? 0;\n  return { input, output, cacheRead: 0, cacheWrite: 0, totalTokens: input + output,\n    cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 } };\n}\n\nfunction toBrainMessages(messages: PiMessage[]): Message[] {\n  return messages.filter(message => message.role !== \"system\").map(raw => {\n    const message = raw as SavedMessage;\n    if (message.brainMessage !== undefined) return message.brainMessage;\n    if (message.role === \"system\") throw new Error(\"system message must be carried by the request prompt\");\n    const content = typeof message.content === \"string\" ? [{ type: \"text\" as const, text: message.content }] : message.content;\n    if (message.role === \"toolResult\") {\n      const saved = message.details as { brainResult?: ContentBlock } | undefined;\n      return { role: \"user\", content: [saved?.brainResult ?? { type: \"tool_result\", tool_use_id: message.toolCallId,\n        content: content.every(block => block.type === \"text\")\n          ? content.map(block => block.type === \"text\" ? block.text : \"\").join(\"\\n\")\n          : content, is_error: message.isError }] };\n    }\n    return { role: message.role === \"assistant\" ? \"assistant\" : \"user\", content: content.flatMap((block): ContentBlock[] => {\n      if (block.type === \"text\") return [{ type: \"text\", text: block.text }];\n      if (block.type === \"toolCall\") return [{ type: \"tool_use\", id: block.id, name: block.name, input: block.arguments }];\n      if (block.type === \"thinking\") return block.thinking ? [{ type: \"text\", text: block.thinking }] : [];\n      throw new Error(\"Pi produced unmediated media; use Brain media URLs\");\n    }) };\n  });\n}\n\nfunction assistant(result: ModelResult, model: Model<any>): AssistantMessage & SavedMessage {\n  return {\n    role: \"assistant\", api: model.api, provider: model.provider, model: model.id, timestamp: Date.now(),\n    stopReason: result.stop_reason === \"tool_use\" ? \"toolUse\" : result.stop_reason === \"max_tokens\" ? \"length\" : \"stop\",\n    usage: piUsage(result.usage, result.message), brainMessage: result.message, brainUsage: result.usage,\n    content: result.message.content.flatMap((block): AssistantMessage[\"content\"] => {\n      if (block.type === \"text\") return [{ type: \"text\", text: block.text }];\n      if (block.type === \"tool_use\") return [{ type: \"toolCall\", id: block.id, name: block.name, arguments: block.input as Extract<AssistantMessage[\"content\"][number], { type: \"toolCall\" }>[\"arguments\"] }];\n      if (block.type === \"native\") return [{ type: \"thinking\", thinking: \"\", thinkingSignature: JSON.stringify(block) }];\n      throw new Error(`unsupported assistant content: ${block.type}`);\n    }),\n  };\n}\n\nfunction loader(system: string): ResourceLoader {\n  return {\n    getExtensions: () => ({ extensions: [], errors: [], runtime: createExtensionRuntime() }),\n    getSkills: () => ({ skills: [], diagnostics: [] }), getPrompts: () => ({ prompts: [], diagnostics: [] }),\n    getThemes: () => ({ themes: [], diagnostics: [] }), getAgentsFiles: () => ({ agentsFiles: [] }),\n    getSystemPrompt: () => system, getSystemPromptSource: () => undefined,\n    getAppendSystemPrompt: () => [], getAppendSystemPromptSources: () => [],\n    extendResources() {}, async reload() {},\n  };\n}\n\n/** The complete upstream Pi session SDK, with Brain as its provider and tool executor. */\nexport function piHarness(): AgentHarness {\n  return {\n    name: \"pi\", stateVersion: \"1\",\n    async open({ stateDirectory, configuration }) {\n      let session: AgentSession | undefined;\n      let current: HarnessContext | undefined;\n      let lastError: unknown;\n      let newInput: Message | undefined;\n      let unsubscribe: (() => void) | undefined;\n      let initialCatalogue: string | undefined;\n      async function start(ctx: HarnessContext) {\n        const options = optionsSchema.parse({ ...(configuration as object ?? {}), ...(ctx.configuration as object ?? {}) });\n        const contextWindow = options.contextWindow ?? ctx.modelInfo.context_window_tokens;\n        const maxTokens = options.maxTokens ?? ctx.modelInfo.max_output_tokens;\n        if (contextWindow === undefined || maxTokens === undefined) throw new Error(\"Pi requires model contextWindow and maxTokens; supply missing metadata in harness configuration\");\n        const runtime = await ModelRuntime.create({ authPath: join(stateDirectory, \"auth.json\"), modelsPath: null,\n          allowModelNetwork: false, refreshOnCreate: false });\n        runtime.registerProvider(\"brain\", {\n          api: \"brain\", baseUrl: \"http://brain.invalid\", apiKey: \"brain-mediated\",\n          models: [{ id: \"session\", name: ctx.modelInfo.id, reasoning: ctx.modelInfo.reasoning ?? false,\n            input: [\"text\"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow, maxTokens }],\n          streamSimple(model, context, streamOptions) {\n            const stream = createAssistantMessageEventStream();\n            void (async () => {\n              try {\n                if (current === undefined) throw new Error(\"model called outside an active Brain activation\");\n                const result = await current.model({\n                  system: getCurrentSystemPrompt(context.messages), messages: toBrainMessages(context.messages),\n                  tools: getCurrentTools(context.messages).map(tool => ({ name: tool.name, description: tool.description, input_schema: tool.parameters })),\n                  max_output_tokens: streamOptions?.maxTokens ?? maxTokens,\n                });\n                lastError = undefined;\n                const message = assistant(result, model);\n                stream.push({ type: \"start\", partial: { ...message, content: [] } });\n                stream.push({ type: \"done\", reason: message.stopReason as \"stop\" | \"length\" | \"toolUse\", message });\n                stream.end(message);\n              } catch (error) {\n                lastError = error;\n                const message: AssistantMessage = { role: \"assistant\", api: model.api, provider: model.provider, model: model.id,\n                  timestamp: Date.now(), content: [], usage: piUsage({}, []), stopReason: \"error\",\n                  errorMessage: error instanceof Error ? error.message : String(error) };\n                stream.push({ type: \"error\", reason: \"error\", error: message });\n                stream.end(message);\n              }\n            })();\n            return stream;\n          },\n        });\n        let manager: SessionManager;\n        const pointer = join(stateDirectory, \"native-session.json\");\n        let file: string | undefined;\n        try { file = JSON.parse(await readFile(pointer, \"utf8\")) as string; }\n        catch (error) { if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error; }\n        if (file !== undefined) {\n          if (basename(file) !== file) throw new Error(\"invalid Pi native session pointer\");\n          const path = join(stateDirectory, file);\n          await readFile(path); // SessionManager.open creates on missing files; resume must fail instead.\n          manager = SessionManager.open(path, stateDirectory, stateDirectory);\n        } else {\n          manager = SessionManager.create(stateDirectory, stateDirectory);\n          for (const message of ctx.transcript) {\n            if (message.role === \"assistant\") manager.appendMessage(assistant({ message, usage: {}, stop_reason: \"end_turn\" }, runtime.getModel(\"brain\", \"session\")!));\n            else manager.appendMessage({ role: \"user\", content: message.content.filter(block => block.type === \"text\"),\n              timestamp: Date.now(), brainMessage: message } as UserMessage & SavedMessage);\n          }\n          await writeFile(pointer, JSON.stringify(basename(manager.getSessionFile()!)));\n        }\n        const tools = placedTools(ctx.tools);\n        ({ session } = await createAgentSession({\n          cwd: stateDirectory, agentDir: stateDirectory, modelRuntime: runtime, model: runtime.getModel(\"brain\", \"session\"),\n          resourceLoader: loader(ctx.system), thinkingLevel: \"off\", sessionManager: manager,\n          settingsManager: SettingsManager.inMemory({ retry: { enabled: false }, compaction: options.compaction }),\n          tools: tools.map(tool => tool.name),\n          customTools: tools.map(tool => ({ name: tool.name, label: tool.name, description: tool.description,\n            parameters: tool.input_schema as ToolDefinition[\"parameters\"],\n            async execute(id, input) {\n              if (current === undefined) throw new Error(\"tool called outside an active Brain activation\");\n              const result = await tool.execute(current, id, input);\n              if (result.is_error) throw new Error(typeof result.content === \"string\" ? result.content : JSON.stringify(result.content));\n              return { content: [{ type: \"text\", text: typeof result.content === \"string\" ? result.content : JSON.stringify(result.content) }], details: { brainResult: result } };\n            },\n          })),\n        }));\n        const actual = session.getActiveToolNames().sort();\n        initialCatalogue = catalogue(ctx.tools);\n        if (JSON.stringify(actual) !== JSON.stringify(tools.map(tool => tool.name).sort())) throw new Error(\"Pi exposed an unexpected tool\");\n        // Preserve Brain's URL media and native continuation objects in upstream native\n        // storage without fetching media or turning projection writes into execution state.\n        unsubscribe = session.agent.subscribe(event => {\n          if (event.type === \"message_start\" && event.message.role === \"user\" && newInput !== undefined) {\n            (event.message as UserMessage & SavedMessage).brainMessage = newInput;\n            newInput = undefined;\n          }\n        });\n      }\n      return {\n        async run(ctx) {\n          current = ctx;\n          lastError = undefined;\n          const abort = () => session?.agent.abort();\n          ctx.signal.addEventListener(\"abort\", abort, { once: true });\n          try {\n            if (session === undefined) await start(ctx);\n            ctx.signal.throwIfAborted();\n            if (catalogue(ctx.tools) !== initialCatalogue) throw new Error(\"Pi requires fixed Tool placements for the native session\");\n            const text = await activationText(ctx);\n            if (text === undefined) return;\n            newInput = { role: \"user\", content: [{ type: \"text\", text }, ...(ctx.input?.media ?? [])] };\n            await session!.prompt(text, { expandPromptTemplates: false });\n            if (lastError !== undefined) throw lastError;\n            ctx.signal.throwIfAborted();\n            const transcript = toBrainMessages(convertToLlm(session!.messages));\n            await ctx.setTranscript(transcript);\n            const last = transcript.findLast(message => message.role === \"assistant\");\n            const message = last?.content.filter(block => block.type === \"text\").map(block => block.text).join(\"\") ?? \"\";\n            if (message) await ctx.emit(\"output_emitted\", { type: \"assistant_message\", message });\n          } finally { ctx.signal.removeEventListener(\"abort\", abort); current = undefined; newInput = undefined; }\n        },\n        cancel() { session?.agent.abort(); },\n        close() { unsubscribe?.(); session?.dispose(); },\n      };\n    },\n  };\n}\n", "import { z } from \"zod\";\nimport { harnessDefinitions as environmentDefinitions } from \"@aexhq/brain/harness\";\nimport type { ActivationTool, ContentBlock, Media, ToolResult, ToolReturn } from \"@aexhq/brain/harness\";\nimport type { HarnessContext } from \"@aexhq/brain/harness\";\n\nexport type ResultBlock = Extract<ContentBlock, { type: \"tool_result\" }>;\nconst mediaSchema = z.fromJSONSchema({ $defs: environmentDefinitions, $ref: \"#/$defs/Media\" });\nconst observedKey = \"brain.harness.observed\";\nconst observations = new WeakMap<HarnessContext, { seen: Promise<Set<number>>; pending: Promise<unknown> }>();\nfunction observed(context: HarnessContext) {\n  let state = observations.get(context);\n  if (state === undefined) {\n    state = { seen: context.kv.get<number[]>(observedKey).then(value => new Set(value ?? [])), pending: Promise.resolve() };\n    observations.set(context, state);\n  }\n  return state;\n}\nasync function consume(context: HarnessContext, sequences: number[]) {\n  const state = observed(context);\n  state.pending = state.pending.then(async () => {\n    const seen = await state.seen;\n    sequences.forEach(sequence => seen.add(sequence));\n    await context.kv.set(observedKey, [...seen]);\n  });\n  await state.pending;\n}\n\nexport function catalogue(tools: ActivationTool[]): string {\n  return JSON.stringify(tools.map(tool => ({ name: tool.name, environments: tool.environments })));\n}\n\n/** Preserve all returned observations, including execution that continues in the background. */\nexport function toolResult(returned: ToolReturn): ResultBlock {\n  const results: { content: unknown; is_error: boolean }[] = [];\n  const media: Media[] = [];\n  let terminal: Record<string, unknown> | undefined;\n  for (const event of returned.events) {\n    const data = event.data as { result: ToolResult; outcome: Record<string, unknown> };\n    if (event.event_type === \"tool_result_emitted\") {\n      const output = data.result.output as { type?: string; version?: number; content?: unknown; media?: unknown[] } | null;\n      if (!data.result.is_error && output?.type === \"aex_tool_output\" && output.version === 1) {\n        if (!Array.isArray(output.media)) throw new Error(\"aex_tool_output requires media array\");\n        media.push(...output.media.map(value => mediaSchema.parse(value) as Media));\n        results.push({ content: data.result.content ?? output.content, is_error: false });\n      } else results.push({ content: data.result.content ?? data.result.output, is_error: data.result.is_error });\n    }\n    if (event.event_type === \"tool_call_ended\") terminal = data.outcome;\n  }\n  if (terminal !== undefined && terminal.status !== \"ok\") {\n    results.push({ content: terminal.status === \"error\" ? terminal.error : terminal, is_error: true });\n  }\n  return {\n    type: \"tool_result\", tool_use_id: returned.call_id,\n    content: returned.finished && results.length === 1 ? results[0]!.content\n      : { status: returned.finished ? \"finished\" : \"running\", results },\n    is_error: results.some(result => result.is_error),\n    ...(media.length ? { media } : {}),\n  };\n}\n\n/** One visible tool per admitted placement; no upstream built-in tool is exposed. */\nexport function placedTools(tools: ActivationTool[]) {\n  const names = new Set<string>();\n  return tools.flatMap(tool => tool.environments.map((environment, index) => {\n    const name = tool.environments.length === 1 ? tool.name : `${tool.name.slice(0, 110)}__env${index + 1}`;\n    if (names.has(name)) throw new Error(`harness tool name collision: ${name}`);\n    names.add(name);\n    return {\n      name, description: `${tool.description}${tool.environments.length === 1 ? \"\" : ` (Environment: ${environment})`}`,\n      input_schema: tool.input_schema,\n      async execute(context: HarnessContext, callId: string, input: unknown) {\n        const available = context.tools.find(current => current.name === tool.name && current.environments.includes(environment));\n        if (available === undefined) throw new Error(`Tool ${tool.name} is no longer available in ${environment}`);\n        const reference = available.environment_refs?.find(ref => ref.name === environment);\n        const returned = await context.callTool({ call_id: callId, name: tool.name, environment, input,\n          ...(reference === undefined ? {} : { environment_sequence: reference.sequence }) });\n        await consume(context, returned.events.map(event => event.sequence));\n        return toolResult(returned);\n      },\n    };\n  }));\n}\n\nexport async function activationText(context: HarnessContext): Promise<string | undefined> {\n  const seen = await observed(context).seen;\n  const observations = context.events.filter(event => !seen.has(event.sequence) && [\n    \"tool_result_emitted\", \"tool_call_ended\", \"environment_observation\", \"environment_closed\",\n    \"environment_unreachable\", \"turn_failed\",\n  ].includes(event.event_type));\n  if (context.events.some(event => seen.has(event.sequence))) {\n    context.events.forEach(event => seen.delete(event.sequence));\n    await context.kv.set(observedKey, [...seen]);\n  }\n  const text = observations.length === 0 ? \"\" : `Runtime observations (data):\\n${JSON.stringify(observations)}\\n\\n`;\n  return context.input === undefined && !text ? undefined : `${text}${context.input?.message ?? \"Process the runtime observations.\"}`;\n}\n"],
  "mappings": "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",
  "names": ["z", "observations", "z", "message"]
}
