@chopin-ai/harness-pi 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/acp.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import type { StopReason, ToolCallContent, SessionUpdate, Usage as AcpUsage } from "@agentclientprotocol/sdk";
2
2
  import type { AssistantMessage, UserMessage } from "@earendil-works/pi-ai";
3
3
  import type { ConversationView, EntryRecord } from "@earendil-works/pi-durable";
4
- import type { TranscriptEntry } from "@chopin-ai/core";
4
+ import { type TranscriptEntry } from "@chopin-ai/core";
5
5
  /** A tool call's input as clients show it: its JSON, or nothing when it has none or no JSON says it. */
6
6
  export declare function inputText(rawInput: unknown): string;
7
7
  /** The text of what a user sent, its text blocks one after another. */
@@ -33,10 +33,3 @@ export declare function totalUsage(messages: readonly AssistantMessage[]): {
33
33
  usage: AcpUsage;
34
34
  cost: number;
35
35
  };
36
- /** Why a submission got no answer, with the harness's detail, such as the provider's own message, when it gave one. */
37
- export declare function unansweredText(settled: {
38
- reason: string;
39
- detail?: unknown;
40
- }): string;
41
- /** The detail the harness gave with an unanswered submission, as text. */
42
- export declare function detailText(detail: unknown): string | undefined;
package/dist/acp.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { withChopinMeta } from "@chopin-ai/core";
1
2
  /** A tool call's input as clients show it: its JSON, or nothing when it has none or no JSON says it. */
2
3
  export function inputText(rawInput) {
3
4
  const text = rawInput === undefined ? undefined : JSON.stringify(rawInput);
@@ -21,7 +22,12 @@ export function entryTranscript(sessionId, entries, now = new Date().toISOString
21
22
  }
22
23
  /** What a committed entry says, in ACP. Entries without a model-facing message say nothing. */
23
24
  export function entryUpdates(entry) {
24
- return (entry.model ?? []).flatMap(messageUpdates);
25
+ const codes = diagnosticCodes(entry);
26
+ return (entry.model ?? []).flatMap(messageUpdates).map((update) => codes.length > 0 && update.sessionUpdate === "tool_call_update" ? withChopinMeta(update, { diagnostics: codes }) : update);
27
+ }
28
+ function diagnosticCodes(entry) {
29
+ const diagnostics = entry.data?.diagnostics;
30
+ return Array.isArray(diagnostics) ? diagnostics.flatMap((d) => (typeof d.code === "string" ? [d.code] : [])) : [];
25
31
  }
26
32
  /** What the agent is generating right now, in ACP; nothing between generations. */
27
33
  export function liveUpdates(view) {
@@ -110,13 +116,4 @@ export function totalUsage(messages) {
110
116
  cost: sum((u) => u.cost.total),
111
117
  };
112
118
  }
113
- /** Why a submission got no answer, with the harness's detail, such as the provider's own message, when it gave one. */
114
- export function unansweredText(settled) {
115
- const detail = detailText(settled.detail);
116
- return detail === undefined ? settled.reason : `${settled.reason}: ${detail}`;
117
- }
118
- /** The detail the harness gave with an unanswered submission, as text. */
119
- export function detailText(detail) {
120
- return detail === undefined ? undefined : typeof detail === "string" ? detail : JSON.stringify(detail);
121
- }
122
119
  //# sourceMappingURL=acp.js.map
package/dist/acp.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"acp.js","sourceRoot":"","sources":["../src/acp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acp.js","sourceRoot":"","sources":["../src/acp.ts"],"names":[],"mappings":"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"}
package/dist/auth.d.ts CHANGED
@@ -3,15 +3,7 @@ import { jwtVerify } from "jose";
3
3
  import type { Principal } from "./protocol.js";
4
4
  /** Names the owner a credential stands for, or refuses it with `undefined`. */
5
5
  export type Authenticate = (credential: string) => Principal | undefined | Promise<Principal | undefined>;
6
- /**
7
- * The cookie a browser keeps its credential in, set when it first presents one as `?token=`. Browsers share cookies
8
- * across the ports of a host, so each service names its own by port.
9
- */
10
- export declare function credentialCookie(request: IncomingMessage): string;
11
- /**
12
- * The credential a request presents. Browsers cannot set headers on a WebSocket, so besides a bearer header it may
13
- * travel as `?token=` or, once a page has presented it, as a cookie.
14
- */
6
+ /** The credential a request presents: a bearer header, or `?token=` from a client that cannot set headers. */
15
7
  export declare function credentialOf(request: IncomingMessage): string | undefined;
16
8
  /** Single-user mode: whoever presents the launch token is the one local owner. */
17
9
  export declare function launchToken(token: string, owner?: string): Authenticate;
package/dist/auth.js CHANGED
@@ -1,31 +1,11 @@
1
1
  import { timingSafeEqual } from "node:crypto";
2
2
  import { jwtVerify } from "jose";
3
- /**
4
- * The cookie a browser keeps its credential in, set when it first presents one as `?token=`. Browsers share cookies
5
- * across the ports of a host, so each service names its own by port.
6
- */
7
- export function credentialCookie(request) {
8
- try {
9
- const port = new URL(`http://${request.headers.host ?? "localhost"}`).port;
10
- return port === "" ? "chopin" : `chopin-${port}`;
11
- }
12
- catch {
13
- return "chopin";
14
- }
15
- }
16
- /**
17
- * The credential a request presents. Browsers cannot set headers on a WebSocket, so besides a bearer header it may
18
- * travel as `?token=` or, once a page has presented it, as a cookie.
19
- */
3
+ /** The credential a request presents: a bearer header, or `?token=` from a client that cannot set headers. */
20
4
  export function credentialOf(request) {
21
- // Any page of the host can plant a malformed cookie; it must refuse the request, not end the service.
5
+ // An address that cannot be read presents nothing; it must refuse the request, not end the service.
22
6
  try {
23
7
  const bearer = /^Bearer (.+)$/.exec(request.headers.authorization ?? "")?.[1];
24
- const query = new URL(request.url ?? "/", "http://localhost").searchParams.get("token");
25
- const name = credentialCookie(request);
26
- const cookie = (request.headers.cookie ?? "").split(";").map((part) => part.trim().split("="))
27
- .find(([key]) => key === name)?.[1];
28
- return bearer ?? query ?? (cookie === undefined ? undefined : decodeURIComponent(cookie));
8
+ return bearer ?? new URL(request.url ?? "/", "http://localhost").searchParams.get("token") ?? undefined;
29
9
  }
30
10
  catch {
31
11
  return undefined;
package/dist/auth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAMjC,8GAA8G;AAC9G,MAAM,UAAU,YAAY,CAAC,OAAwB;IACnD,oGAAoG;IACpG,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9E,OAAO,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC;IAC1G,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,KAAK,GAAG,OAAO;IACxD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,OAAO,CAAC,UAAU,EAAE,EAAE;QACpB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtC,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,IAAI,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACrH,CAAC,CAAC;AACJ,CAAC;AASD,4HAA4H;AAC5H,MAAM,UAAU,gBAAgB,CAAC,OAA+B;IAC9D,MAAM,MAAM,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;IAC9H,OAAO,KAAK,EAAE,UAAU,EAAE,EAAE;QAC1B,IAAI,CAAC;YACH,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,MAAM,EAAE,cAAc,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5G,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC;YAC1B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACnH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
package/dist/bridge.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { AgentSideConnection, PROTOCOL_VERSION, RequestError } from "@agentclientprotocol/sdk";
2
2
  import { setTimeout as sleep } from "node:timers/promises";
3
- import { entryUpdates, runInputs, stopReason, unansweredText } from "./acp.js";
4
- import { call, CALL_TIMEOUT_MS, CallTimeout, heldList, randomId, startConversation, within, } from "./protocol.js";
3
+ import { entryUpdates, runInputs, stopReason } from "./acp.js";
4
+ import { call, CALL_TIMEOUT_MS, CallTimeout, heldList, randomId, startConversation, unansweredText, within, } from "./protocol.js";
5
5
  import { lost as lostOutcome } from "./submissions.js";
6
6
  const AWAY = "the service stopped answering";
7
7
  const RESEND_WAIT_MS = 250;
@@ -1 +1 @@
1
- {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type Extension } from "@earendil-works/pi-durable";
2
+ /** What a client shows its user beside a conversation, in the client's own words, such as the page they are on. */
3
+ export declare const ClientContextDoc: import("@earendil-works/pi-durable").ConversationDocToken<{
4
+ text: string;
5
+ }>;
6
+ /** Gives the model the client's context as it stands at each request; nothing while the client has set none. */
7
+ export declare const clientContext: Extension;
@@ -0,0 +1,20 @@
1
+ import { defineDoc, defineExtension, section } from "@earendil-works/pi-durable";
2
+ /** What a client shows its user beside a conversation, in the client's own words, such as the page they are on. */
3
+ export const ClientContextDoc = defineDoc({
4
+ kind: "chopin.client-context",
5
+ version: 1,
6
+ scope: "conversation",
7
+ history: "latest",
8
+ fork: "current",
9
+ initial: () => ({ text: "" }),
10
+ checkpointWhen: () => false,
11
+ });
12
+ /** Gives the model the client's context as it stands at each request; nothing while the client has set none. */
13
+ export const clientContext = defineExtension({
14
+ name: "chopin-client-context",
15
+ sections: [section("client_context", async ({ read, conversationId }, context) => {
16
+ const text = (await read.snapshot(ClientContextDoc, conversationId, context))?.text ?? "";
17
+ return text === "" ? undefined : text;
18
+ })],
19
+ });
20
+ //# sourceMappingURL=client-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-context.js","sourceRoot":"","sources":["../src/client-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAkB,MAAM,4BAA4B,CAAC;AAEjG,mHAAmH;AACnH,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,CAAmB;IAC1D,IAAI,EAAE,uBAAuB;IAC7B,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,cAAc;IACrB,OAAO,EAAE,QAAQ;IACjB,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAC7B,cAAc,EAAE,GAAG,EAAE,CAAC,KAAK;CAC5B,CAAC,CAAC;AAEH,gHAAgH;AAChH,MAAM,CAAC,MAAM,aAAa,GAAc,eAAe,CAAC;IACtD,IAAI,EAAE,uBAAuB;IAC7B,QAAQ,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,EAAE;YAC/E,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;YAC1F,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QACxC,CAAC,CAAC,CAAC;CACJ,CAAC,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { type TranscriptEntry } from "@chopin-ai/core";
2
+ import type { Api, AssistantMessage, Message, Model, Models } from "@earendil-works/pi-ai";
3
+ import type { Extension } from "@earendil-works/pi-durable";
4
+ /** A decision point to continue from: what came before it, and what the request carries. */
5
+ export interface ContinuationInput {
6
+ /** The session before the decision point, as model messages. */
7
+ messages: readonly Message[];
8
+ /** The extensions whose sections and tools the request carries, the layer's among them, in install order. */
9
+ extensions: readonly Extension[];
10
+ model: Model<Api>;
11
+ models: Models;
12
+ signal?: AbortSignal;
13
+ }
14
+ /**
15
+ * The agent's next step at a decision point, from one request: the system prompt rendered from `extensions` as a
16
+ * session's would be, the tools they offer, and the session so far. Nothing it asks for is run. Two versions of a
17
+ * layer continued this way differ only in the layer.
18
+ */
19
+ export declare function continueAt(input: ContinuationInput): Promise<AssistantMessage>;
20
+ /**
21
+ * What a provider would refuse in a conversation continued at a step: it must open with the user, give every call its
22
+ * result right after it and no result without its call, and end with the user's or a tool's last word.
23
+ */
24
+ export declare function conversationProblems(messages: readonly Message[]): string[];
25
+ /** The step as a judge reads it: what it said and the calls it asked for. */
26
+ export declare function stepText(step: AssistantMessage): string;
27
+ /**
28
+ * The model messages of an ACP transcript: the user's text, the agent's text and calls, and the calls' results.
29
+ * Thoughts are left out, as no provider takes back another's. Assistant turns carry `model`'s identity, so the
30
+ * provider reads them as its own. A provider takes a result only right after its call, so a result whose call is not
31
+ * here is left out, as is a call that never got one, and what the user said while calls were running follows their
32
+ * results.
33
+ */
34
+ export declare function transcriptMessages(entries: readonly TranscriptEntry[], model: Model<Api>): Message[];
@@ -0,0 +1,171 @@
1
+ import { LoopFault } from "@chopin-ai/core";
2
+ import { BACKGROUND_CONTEXT } from "@earendil-works/chord/context";
3
+ /**
4
+ * The agent's next step at a decision point, from one request: the system prompt rendered from `extensions` as a
5
+ * session's would be, the tools they offer, and the session so far. Nothing it asks for is run. Two versions of a
6
+ * layer continued this way differ only in the layer.
7
+ */
8
+ export async function continueAt(input) {
9
+ const systemPrompt = await renderSections(input);
10
+ const tools = input.extensions.flatMap((extension) => (extension.tools ?? []).map((tool) => ({ name: tool.name, description: tool.description, parameters: tool.parameters })));
11
+ // The step is asked for after the last word of the user or a tool; text the agent had begun it with is part of it.
12
+ const messages = [...input.messages];
13
+ while (messages.at(-1)?.role === "assistant")
14
+ messages.pop();
15
+ const problems = conversationProblems(messages);
16
+ if (problems.length > 0)
17
+ throw new LoopFault(`a provider would refuse this continuation: ${problems.join("; ")}`);
18
+ return input.models.completeSimple(input.model, { systemPrompt, messages, tools }, {
19
+ ...(input.signal && { signal: input.signal }),
20
+ });
21
+ }
22
+ /**
23
+ * What a provider would refuse in a conversation continued at a step: it must open with the user, give every call its
24
+ * result right after it and no result without its call, and end with the user's or a tool's last word.
25
+ */
26
+ export function conversationProblems(messages) {
27
+ const problems = [];
28
+ if (messages[0]?.role !== "user")
29
+ problems.push("it does not open with the user");
30
+ const last = messages.at(-1)?.role;
31
+ if (last !== "user" && last !== "toolResult")
32
+ problems.push("it ends with the agent");
33
+ messages.forEach((message, at) => {
34
+ if (message.role === "toolResult")
35
+ return;
36
+ const calls = message.role === "assistant" ? message.content.flatMap((block) => (block.type === "toolCall" ? [block.id] : [])) : [];
37
+ const results = [];
38
+ for (let next = at + 1; messages[next]?.role === "toolResult"; next += 1)
39
+ results.push(messages[next].toolCallId);
40
+ if (calls.some((id) => !results.includes(id)))
41
+ problems.push(`a call in message ${at} has no result right after it`);
42
+ if (results.some((id) => !calls.includes(id)))
43
+ problems.push(`a result after message ${at} answers no call in it`);
44
+ });
45
+ return problems;
46
+ }
47
+ /** The step as a judge reads it: what it said and the calls it asked for. */
48
+ export function stepText(step) {
49
+ return JSON.stringify(step.content.flatMap((block) => {
50
+ if (block.type === "text")
51
+ return [{ text: block.text }];
52
+ if (block.type === "toolCall")
53
+ return [{ call: block.name, arguments: block.arguments }];
54
+ return [];
55
+ }));
56
+ }
57
+ /**
58
+ * The model messages of an ACP transcript: the user's text, the agent's text and calls, and the calls' results.
59
+ * Thoughts are left out, as no provider takes back another's. Assistant turns carry `model`'s identity, so the
60
+ * provider reads them as its own. A provider takes a result only right after its call, so a result whose call is not
61
+ * here is left out, as is a call that never got one, and what the user said while calls were running follows their
62
+ * results.
63
+ */
64
+ export function transcriptMessages(entries, model) {
65
+ const messages = [];
66
+ const names = new Map();
67
+ const waiting = new Set();
68
+ let held = [];
69
+ const assistant = () => {
70
+ const last = messages.at(-1);
71
+ if (last?.role === "assistant")
72
+ return last;
73
+ const made = {
74
+ role: "assistant", content: [], api: model.api, provider: model.provider, model: model.id, stopReason: "stop",
75
+ usage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, totalTokens: 0, cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 } },
76
+ timestamp: 0,
77
+ };
78
+ messages.push(made);
79
+ return made;
80
+ };
81
+ const say = (text) => {
82
+ const last = messages.at(-1);
83
+ if (last?.role === "user" && typeof last.content === "string")
84
+ last.content = `${last.content}\n${text}`;
85
+ else
86
+ messages.push({ role: "user", content: text, timestamp: 0 });
87
+ };
88
+ const flush = () => {
89
+ for (const text of held)
90
+ say(text);
91
+ held = [];
92
+ };
93
+ // Calls still waiting when the agent moves on never got a result.
94
+ const settle = () => {
95
+ if (waiting.size > 0) {
96
+ for (let at = messages.length - 1; at >= 0; at -= 1) {
97
+ const message = messages[at];
98
+ if (message.role !== "assistant")
99
+ continue;
100
+ message.content = message.content.filter((block) => block.type !== "toolCall" || !waiting.has(block.id));
101
+ if (message.content.length === 0)
102
+ messages.splice(at, 1);
103
+ else if (!message.content.some((block) => block.type === "toolCall"))
104
+ message.stopReason = "stop";
105
+ }
106
+ waiting.clear();
107
+ }
108
+ flush();
109
+ };
110
+ for (const entry of entries) {
111
+ if (!("notification" in entry))
112
+ continue;
113
+ const update = entry.notification.update;
114
+ if (update.sessionUpdate === "user_message_chunk" && update.content.type === "text") {
115
+ if (waiting.size > 0)
116
+ held.push(update.content.text);
117
+ else
118
+ say(update.content.text);
119
+ }
120
+ else if (update.sessionUpdate === "agent_message_chunk" && update.content.type === "text") {
121
+ settle();
122
+ assistant().content.push({ type: "text", text: update.content.text });
123
+ }
124
+ else if (update.sessionUpdate === "tool_call") {
125
+ if (messages.at(-1)?.role !== "assistant")
126
+ settle();
127
+ names.set(update.toolCallId, update.title);
128
+ const call = { type: "toolCall", id: update.toolCallId, name: update.title, arguments: (update.rawInput ?? {}) };
129
+ const turn = assistant();
130
+ turn.content.push(call);
131
+ turn.stopReason = "toolUse";
132
+ waiting.add(update.toolCallId);
133
+ }
134
+ else if (update.sessionUpdate === "tool_call_update" && (update.status === "completed" || update.status === "failed")) {
135
+ if (!waiting.delete(update.toolCallId))
136
+ continue;
137
+ const text = (update.content ?? []).flatMap((item) => (item.type === "content" && item.content.type === "text" ? [item.content.text] : [])).join("\n");
138
+ messages.push({
139
+ role: "toolResult", toolCallId: update.toolCallId, toolName: names.get(update.toolCallId) ?? update.title ?? "",
140
+ content: [{ type: "text", text }], isError: update.status === "failed", timestamp: 0,
141
+ });
142
+ if (waiting.size === 0)
143
+ flush();
144
+ }
145
+ }
146
+ settle();
147
+ return messages;
148
+ }
149
+ const NO_DOCUMENTS = { snapshot: async () => undefined, snapshotAsOf: async () => undefined };
150
+ async function renderSections(input) {
151
+ const sections = input.extensions.flatMap((extension) => extension.sections ?? []);
152
+ const prompt = {
153
+ conversationId: 0,
154
+ agent: {
155
+ model: { provider: input.model.provider, modelId: input.model.id }, thinkingLevel: "off", extensions: input.extensions,
156
+ tools: input.extensions.flatMap((extension) => extension.tools ?? []), callable: [], deferred: [], sections,
157
+ },
158
+ env: undefined,
159
+ shown: {},
160
+ read: NO_DOCUMENTS,
161
+ };
162
+ const rendered = [];
163
+ for (const section of sections) {
164
+ const text = await section.render(prompt, BACKGROUND_CONTEXT);
165
+ if (text === undefined || text === "")
166
+ continue;
167
+ rendered.push(section.tag === false ? text : `<${section.key}>\n${text}\n</${section.key}>`);
168
+ }
169
+ return rendered.join("\n\n");
170
+ }
171
+ //# sourceMappingURL=continuation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"continuation.js","sourceRoot":"","sources":["../src/continuation.ts"],"names":[],"mappings":"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"}
package/dist/http.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import type { IncomingMessage, ServerResponse } from "node:http";
2
2
  import { type Authenticate } from "./auth.js";
3
3
  /**
4
- * The HTTP side of the service: it turns a credential presented in the address into a cookie, then serves the web
5
- * app from `root`, if any. Data only ever travels over the authenticated WebSocket.
4
+ * Whether the service has work in hand, as `GET /status` tells whoever runs it, so a workspace is reclaimed only once
5
+ * it has none. Asking is not using: it keeps nothing awake.
6
6
  */
7
- export declare function httpHandler(authenticate: Authenticate, root: string | undefined): (request: IncomingMessage, response: ServerResponse) => Promise<void>;
7
+ export declare function statusHandler(authenticate: Authenticate, busy: () => Promise<boolean>): (request: IncomingMessage, response: ServerResponse) => Promise<void>;
package/dist/http.js CHANGED
@@ -1,73 +1,14 @@
1
- import { open, stat } from "node:fs/promises";
2
- import { extname, join, relative, resolve, sep } from "node:path";
3
- import { pipeline } from "node:stream";
4
- import { credentialCookie } from "./auth.js";
5
- const TYPES = {
6
- ".html": "text/html; charset=utf-8",
7
- ".js": "text/javascript; charset=utf-8",
8
- ".css": "text/css; charset=utf-8",
9
- ".json": "application/json",
10
- ".svg": "image/svg+xml",
11
- ".png": "image/png",
12
- ".ico": "image/x-icon",
13
- ".woff2": "font/woff2",
14
- };
1
+ import { credentialOf } from "./auth.js";
15
2
  /**
16
- * The HTTP side of the service: it turns a credential presented in the address into a cookie, then serves the web
17
- * app from `root`, if any. Data only ever travels over the authenticated WebSocket.
3
+ * Whether the service has work in hand, as `GET /status` tells whoever runs it, so a workspace is reclaimed only once
4
+ * it has none. Asking is not using: it keeps nothing awake.
18
5
  */
19
- export function httpHandler(authenticate, root) {
6
+ export function statusHandler(authenticate, busy) {
20
7
  return async (request, response) => {
21
- const url = new URL(request.url ?? "/", "http://localhost");
22
- const token = url.searchParams.get("token");
23
- if (token !== null) {
24
- if ((await authenticate(token)) === undefined)
25
- return void response.writeHead(401).end("unauthorized");
26
- url.searchParams.delete("token");
27
- // The credential moves into a cookie, so it stays neither in the address bar nor in the history. A relative
28
- // redirect never leaves this service, and keeps any path a proxy in front adds.
29
- response.writeHead(303, {
30
- location: `./${url.pathname.slice(url.pathname.lastIndexOf("/") + 1)}${url.search}`,
31
- // With no Path, the browser keeps the cookie for the page's own directory, so services a proxy serves under
32
- // different paths of one host each keep their own.
33
- "set-cookie": `${credentialCookie(request)}=${encodeURIComponent(token)}; HttpOnly; SameSite=Strict${overTls(request) ? "; Secure" : ""}`,
34
- });
35
- return void response.end();
36
- }
37
- const pathname = decoded(url.pathname);
38
- const file = root === undefined || pathname === undefined ? undefined : await asset(resolve(root), pathname);
39
- if (file === undefined)
40
- return void response.writeHead(404).end("not found");
41
- const handle = await open(file).catch(() => undefined);
42
- if (handle === undefined)
43
- return void response.writeHead(404).end("not found");
44
- response.writeHead(200, { "content-type": TYPES[extname(file)] ?? "application/octet-stream" });
45
- // A client that leaves mid-download closes the file with it.
46
- pipeline(handle.createReadStream(), response, () => { });
8
+ const credential = credentialOf(request);
9
+ if (credential === undefined || (await authenticate(credential)) === undefined)
10
+ return void response.writeHead(401).end("unauthorized");
11
+ response.writeHead(200, { "content-type": "application/json" }).end(JSON.stringify({ busy: await busy() }));
47
12
  };
48
13
  }
49
- /**
50
- * The file a path names inside `root`, and the app's page for the root itself; the page loads its files relative to
51
- * where it is, so it is served nowhere else.
52
- */
53
- async function asset(root, pathname) {
54
- const path = join(root, pathname === "/" ? "index.html" : pathname);
55
- if (relative(root, path).split(sep)[0] === "..")
56
- return undefined;
57
- return (await stat(path).catch(() => undefined))?.isFile() === true ? path : undefined;
58
- }
59
- function decoded(pathname) {
60
- try {
61
- return decodeURIComponent(pathname);
62
- }
63
- catch {
64
- return undefined;
65
- }
66
- }
67
- /** Whether the browser reached the service over TLS, itself or through a proxy that says so. */
68
- function overTls(request) {
69
- const forwarded = request.headers["x-forwarded-proto"];
70
- const proto = (Array.isArray(forwarded) ? forwarded[0] : forwarded)?.split(",")[0]?.trim();
71
- return proto === "https" || request.socket.encrypted === true;
72
- }
73
14
  //# sourceMappingURL=http.js.map
package/dist/http.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAqB,MAAM,WAAW,CAAC;AAE5D;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,YAA0B,EAAE,IAA4B;IACpF,OAAO,KAAK,EAAE,OAAwB,EAAE,QAAwB,EAAiB,EAAE;QACjF,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC,KAAK,SAAS;YAAE,OAAO,KAAK,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACxI,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IAC9G,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { Models } from "@earendil-works/pi-ai";
2
+ import { type ConversationId, type Extension, type Harness } from "@earendil-works/pi-durable";
3
+ /** Where a conversation was compacted for being idle; the model never reads it. */
4
+ export declare const IdleCompactionEntry: import("@earendil-works/pi-durable").Entry<never>;
5
+ export interface IdleCompactionOptions {
6
+ /** The models the harness asks, with its credentials. */
7
+ models: Models;
8
+ /** Whether people come back to `conversation`; no other is compacted for being idle. */
9
+ eligible(conversation: ConversationId): Promise<boolean>;
10
+ report?: (error: unknown) => void;
11
+ }
12
+ /**
13
+ * Compacts a conversation left idle just before its prompt cache expires. The summary is asked for in a request that
14
+ * repeats the conversation's own and adds one message, so the provider reads all but that from its cache.
15
+ */
16
+ export declare class IdleCompaction {
17
+ #private;
18
+ readonly extension: Extension;
19
+ constructor(options: IdleCompactionOptions);
20
+ /** Starts on `harness`, which runs this extension. */
21
+ attach(harness: Harness): void;
22
+ /** Drops what is scheduled for `conversation`, and stops its compaction if one is asking for a summary. */
23
+ cancel(conversation: ConversationId): void;
24
+ close(): void;
25
+ }