mirror of
https://github.com/earendil-works/pi.git
synced 2026-10-02 00:35:27 +08:00
Generation offers active registered tools through positional system entries and hands a tool-calling answer to parallel or sequential pi.tool tasks and a pi.post-tools task that applies addTools/terminate and continues the run. Tool tasks validate, run beforeTool/afterTool, record intent with the replay policy, publish bounded, sanitized, adaptively throttled progress in pi.live.tools, and write results with a rendered diagnostics block. Hook dispatch with conversation and subtree scopes, prepareArguments, HarnessOptions.env, and read/bash/edit/write tools in pi-durable/tools. The env shell now streams raw output and spills past thresholds; its bounded capture and publisher are removed.
25 lines
1.3 KiB
TypeScript
25 lines
1.3 KiB
TypeScript
import type { JsonValue } from "@earendil-works/chord";
|
|
import type { ToolDiagnostic } from "./harness/types.ts";
|
|
import type { Entry, EntryRecord, TypedEntry } from "./types.ts";
|
|
|
|
/** Define a typed entry kind whose `is()` guard narrows by `EntryRecord.kind`. */
|
|
export function defineEntry<D extends JsonValue = never>(kind: string): Entry<D> {
|
|
if (typeof kind !== "string" || kind.length === 0) throw new TypeError("Entry kind must be a non-empty string");
|
|
return {
|
|
kind,
|
|
is: (entry: EntryRecord | undefined): entry is TypedEntry<D> => entry !== undefined && entry.kind === kind,
|
|
};
|
|
}
|
|
|
|
/** User input: `model` is `[UserMessage]`. Written by submissions. */
|
|
export const UserEntry = defineEntry("pi.user");
|
|
/** Provider result with any stop reason: `model` is `[AssistantMessage]`. Written by generation. */
|
|
export const AssistantEntry = defineEntry("pi.assistant");
|
|
/** Positional prompt and tool change: `model` is `[SystemMessage]` with empty `content`. */
|
|
export const SystemEntry = defineEntry("pi.system");
|
|
/**
|
|
* Tool result: `model` is `[ToolResultMessage]`, whose content ends with the rendered diagnostics block; `data` holds
|
|
* the structured diagnostics, possibly none. Written by tool tasks, and by generation for calls it did not offer.
|
|
*/
|
|
export const ToolResultEntry = defineEntry<{ diagnostics: ToolDiagnostic[] }>("pi.tool-result");
|