@astrosheep/keiyaku 4.6.1 → 4.6.2

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.
@@ -1,12 +1,11 @@
1
- import type { createAgentSession, createBashToolDefinition, DefaultResourceLoader, getAgentDir, ModelRuntime, SessionManager, CreateAgentSessionOptions } from "@earendil-works/pi-coding-agent";
1
+ import type { createAgentSessionFromServices, createAgentSessionServices, createBashToolDefinition, getAgentDir, SessionManager } from "@earendil-works/pi-coding-agent";
2
2
  import type { ProviderExecution } from "../../provider-recipe.js";
3
3
  import { type ProviderAdapter } from "../../provider.js";
4
4
  export type PiSdk = Readonly<{
5
- createAgentSession(options?: CreateAgentSessionOptions): ReturnType<typeof createAgentSession>;
5
+ createAgentSessionFromServices: typeof createAgentSessionFromServices;
6
+ createAgentSessionServices: typeof createAgentSessionServices;
6
7
  createBashToolDefinition: typeof createBashToolDefinition;
7
- DefaultResourceLoader: typeof DefaultResourceLoader;
8
8
  getAgentDir: typeof getAgentDir;
9
- ModelRuntime: typeof ModelRuntime;
10
9
  SessionManager: typeof SessionManager;
11
10
  }>;
12
11
  export declare function createPiProvider(execution?: ProviderExecution, load?: () => Promise<PiSdk>): ProviderAdapter;
@@ -21,26 +21,14 @@ function admitPiOptions(options) {
21
21
  options: Object.freeze({ ...options }),
22
22
  };
23
23
  }
24
- async function piCreateOptions(sdk, input) {
24
+ function piCreateOptions(sdk, input, services) {
25
25
  let model;
26
- let modelRuntime;
27
26
  if (input.options.model !== undefined) {
28
27
  const slash = input.options.model.indexOf("/");
29
- modelRuntime = await sdk.ModelRuntime.create();
30
- model = modelRuntime.getModel(input.options.model.slice(0, slash), input.options.model.slice(slash + 1));
28
+ model = services.modelRuntime.getModel(input.options.model.slice(0, slash), input.options.model.slice(slash + 1));
31
29
  if (model === undefined)
32
30
  throw new Error(`Pi model '${input.options.model}' is unavailable`);
33
31
  }
34
- const resourceLoader = input.options.systemPrompt === undefined
35
- ? undefined
36
- : new sdk.DefaultResourceLoader({
37
- cwd: input.cwd,
38
- agentDir: sdk.getAgentDir(),
39
- ...(input.options.systemPromptMode === "append"
40
- ? { appendSystemPromptOverride: (base) => [...base, input.options.systemPrompt] }
41
- : { systemPromptOverride: () => input.options.systemPrompt }),
42
- });
43
- await resourceLoader?.reload();
44
32
  const sessionManager = input.session.kind === "fresh"
45
33
  ? sdk.SessionManager.create(input.cwd)
46
34
  : "sessionFile" in input.session.coordinate
@@ -59,22 +47,39 @@ async function piCreateOptions(sdk, input) {
59
47
  }),
60
48
  ];
61
49
  return {
62
- cwd: input.cwd,
50
+ services,
63
51
  sessionManager,
64
- ...(model === undefined || modelRuntime === undefined ? {} : { model, modelRuntime }),
65
- ...(resourceLoader === undefined ? {} : { resourceLoader }),
52
+ ...(model === undefined ? {} : { model }),
66
53
  ...(input.options.effort === undefined ? {} : { thinkingLevel: input.options.effort }),
67
54
  ...(customTools === undefined ? {} : { customTools }),
68
55
  };
69
56
  }
70
57
  async function createPiSession(sdk, execution, input) {
71
- const setup = piCreateOptions(sdk, input).then(async (options) => {
72
- if (execution.config !== undefined) {
73
- throw new TypeError("Pi provider config cannot be consumed by native CreateAgentSessionOptions");
74
- }
75
- return await sdk.createAgentSession(options);
58
+ if (execution.config !== undefined) {
59
+ throw new TypeError("Pi provider config cannot be consumed by native CreateAgentSessionOptions");
60
+ }
61
+ const services = await sdk.createAgentSessionServices({
62
+ cwd: input.cwd,
63
+ agentDir: sdk.getAgentDir(),
64
+ modelRuntimeSignal: input.signal,
65
+ ...(input.options.systemPrompt === undefined
66
+ ? {}
67
+ : {
68
+ resourceLoaderOptions: input.options.systemPromptMode === "append"
69
+ ? { appendSystemPromptOverride: (base) => [...base, input.options.systemPrompt] }
70
+ : { systemPromptOverride: () => input.options.systemPrompt },
71
+ }),
76
72
  });
77
- return await setup;
73
+ try {
74
+ input.signal?.throwIfAborted();
75
+ return await sdk.createAgentSessionFromServices(piCreateOptions(sdk, input, services));
76
+ }
77
+ catch (error) {
78
+ // Before a session owns the extension runtime, failed selection/setup must
79
+ // retire registrations and event-bus subscriptions loaded by the services.
80
+ services.resourceLoader.getExtensions().runtime.invalidate();
81
+ throw error;
82
+ }
78
83
  }
79
84
  async function runPiPrompt(native, input, events, state, settle) {
80
85
  try {
@@ -273,11 +278,10 @@ async function forkPi(sdk, input) {
273
278
  async function loadPiSdk() {
274
279
  const sdk = await import("@earendil-works/pi-coding-agent");
275
280
  return {
276
- createAgentSession: sdk.createAgentSession,
281
+ createAgentSessionFromServices: sdk.createAgentSessionFromServices,
282
+ createAgentSessionServices: sdk.createAgentSessionServices,
277
283
  createBashToolDefinition: sdk.createBashToolDefinition,
278
- DefaultResourceLoader: sdk.DefaultResourceLoader,
279
284
  getAgentDir: sdk.getAgentDir,
280
- ModelRuntime: sdk.ModelRuntime,
281
285
  SessionManager: sdk.SessionManager,
282
286
  };
283
287
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astrosheep/keiyaku",
3
- "version": "4.6.1",
3
+ "version": "4.6.2",
4
4
  "workspaces": [
5
5
  "plugins/*"
6
6
  ],