From 59645a8dac773fb3eb316caf76822505053afe32 Mon Sep 17 00:00:00 2001 From: Ellie Huxtable Date: Mon, 13 Apr 2026 22:41:07 +0100 Subject: fix: ensure we can publish to crates (#3403) include_str won't work outside of the crate boundary. Crates is so frustrating sometimes. ## Checks - [ ] I am happy for maintainers to push small adjustments to this PR, to speed up the review cycle - [ ] I have checked that there are no existing pull requests for the same thing --- contrib/pi/atuin.ts | 88 +---------------------------------------------------- 1 file changed, 1 insertion(+), 87 deletions(-) mode change 100644 => 120000 contrib/pi/atuin.ts (limited to 'contrib') diff --git a/contrib/pi/atuin.ts b/contrib/pi/atuin.ts deleted file mode 100644 index 55c17cb8..00000000 --- a/contrib/pi/atuin.ts +++ /dev/null @@ -1,87 +0,0 @@ -/** - * Atuin extension for pi. - * - * Tracks bash commands executed by pi in Atuin history with author `pi`. - * - * Install with: - * atuin hook install pi - * - * Then restart pi or run /reload. - */ - -import type { BashOperations, ExtensionAPI } from "@mariozechner/pi-coding-agent"; -import { createBashTool, createLocalBashOperations } from "@mariozechner/pi-coding-agent"; - -const ATUIN_AUTHOR = "pi"; -const ATUIN_TIMEOUT_MS = 10_000; - -async function startHistory( - pi: ExtensionAPI, - cwd: string, - command: string, -): Promise { - try { - const result = await pi.exec( - "atuin", - ["history", "start", "--author", ATUIN_AUTHOR, "--", command], - { cwd, timeout: ATUIN_TIMEOUT_MS }, - ); - - if (result.code !== 0) return undefined; - - const id = result.stdout.trim(); - return id.length > 0 ? id : undefined; - } catch { - return undefined; - } -} - -async function endHistory( - pi: ExtensionAPI, - cwd: string, - historyId: string, - exitCode: number, -): Promise { - try { - await pi.exec( - "atuin", - ["history", "end", historyId, "--exit", String(exitCode)], - { cwd, timeout: ATUIN_TIMEOUT_MS }, - ); - } catch { - // Ignore Atuin failures so command execution is never blocked. - } -} - -export default function atuinPiExtension(pi: ExtensionAPI) { - const cwd = process.cwd(); - const local = createLocalBashOperations(); - - const trackedOperations: BashOperations = { - async exec(command, commandCwd, options) { - const historyId = await startHistory(pi, commandCwd, command); - let exitCode: number | null = null; - - try { - const result = await local.exec(command, commandCwd, options); - exitCode = result.exitCode; - return result; - } finally { - if (historyId) { - await endHistory( - pi, - commandCwd, - historyId, - exitCode ?? (options.signal?.aborted ? 130 : 1), - ); - } - } - }, - }; - - pi.registerTool( - createBashTool(cwd, { - operations: trackedOperations, - }), - ); -} diff --git a/contrib/pi/atuin.ts b/contrib/pi/atuin.ts new file mode 120000 index 00000000..d5e7a533 --- /dev/null +++ b/contrib/pi/atuin.ts @@ -0,0 +1 @@ +../../crates/atuin/contrib/pi/atuin.ts \ No newline at end of file -- cgit v1.3.1