@agents-ensemble/core 0.7.0 → 0.8.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.
Files changed (92) hide show
  1. package/dist/conductor/conductor-auth.d.ts +36 -6
  2. package/dist/conductor/conductor-auth.d.ts.map +1 -1
  3. package/dist/conductor/conductor-auth.js +59 -7
  4. package/dist/conductor/conductor-auth.js.map +1 -1
  5. package/dist/conductor/conductor-pi-auth.d.ts +75 -0
  6. package/dist/conductor/conductor-pi-auth.d.ts.map +1 -0
  7. package/dist/conductor/conductor-pi-auth.js +524 -0
  8. package/dist/conductor/conductor-pi-auth.js.map +1 -0
  9. package/dist/conductor/conductor-session-driver.d.ts +2 -0
  10. package/dist/conductor/conductor-session-driver.d.ts.map +1 -1
  11. package/dist/conductor/conductor-session-driver.js +18 -1
  12. package/dist/conductor/conductor-session-driver.js.map +1 -1
  13. package/dist/conductor/conductor-session.d.ts.map +1 -1
  14. package/dist/conductor/conductor-session.js +61 -4
  15. package/dist/conductor/conductor-session.js.map +1 -1
  16. package/dist/conductor/index.d.ts +6 -4
  17. package/dist/conductor/index.d.ts.map +1 -1
  18. package/dist/conductor/index.js +3 -2
  19. package/dist/conductor/index.js.map +1 -1
  20. package/dist/conductor/list-conductor-models.d.ts +7 -2
  21. package/dist/conductor/list-conductor-models.d.ts.map +1 -1
  22. package/dist/conductor/list-conductor-models.js +9 -1
  23. package/dist/conductor/list-conductor-models.js.map +1 -1
  24. package/dist/conductor/pi-conductor-agent.d.ts +1 -0
  25. package/dist/conductor/pi-conductor-agent.d.ts.map +1 -1
  26. package/dist/conductor/pi-conductor-agent.js +59 -67
  27. package/dist/conductor/pi-conductor-agent.js.map +1 -1
  28. package/dist/conductor/pi-resource-loader.d.ts +7 -4
  29. package/dist/conductor/pi-resource-loader.d.ts.map +1 -1
  30. package/dist/conductor/pi-resource-loader.js +6 -4
  31. package/dist/conductor/pi-resource-loader.js.map +1 -1
  32. package/dist/conductor/session/dispatch-hold.d.ts +14 -0
  33. package/dist/conductor/session/dispatch-hold.d.ts.map +1 -1
  34. package/dist/conductor/session/dispatch-hold.js +30 -0
  35. package/dist/conductor/session/dispatch-hold.js.map +1 -1
  36. package/dist/conductor/session/events/index.d.ts +1 -1
  37. package/dist/conductor/session/events/index.d.ts.map +1 -1
  38. package/dist/conductor/session/events/index.js.map +1 -1
  39. package/dist/conductor/session/events/session-log-event-groups.d.ts +2 -2
  40. package/dist/conductor/session/events/session-log-event-groups.d.ts.map +1 -1
  41. package/dist/conductor/session/events/session-log-event-groups.js +1 -0
  42. package/dist/conductor/session/events/session-log-event-groups.js.map +1 -1
  43. package/dist/conductor/session/events/session-log-event.d.ts +10 -1
  44. package/dist/conductor/session/events/session-log-event.d.ts.map +1 -1
  45. package/dist/conductor/session/format-session-event.js +3 -0
  46. package/dist/conductor/session/format-session-event.js.map +1 -1
  47. package/dist/conductor/session/session-logger.d.ts.map +1 -1
  48. package/dist/conductor/session/session-logger.js +1 -0
  49. package/dist/conductor/session/session-logger.js.map +1 -1
  50. package/dist/github/fetch-github-updates.d.ts.map +1 -1
  51. package/dist/github/fetch-github-updates.js +109 -80
  52. package/dist/github/fetch-github-updates.js.map +1 -1
  53. package/dist/github/github-client.d.ts.map +1 -1
  54. package/dist/github/github-client.js +8 -0
  55. package/dist/github/github-client.js.map +1 -1
  56. package/dist/github/github-monitor-cursor.d.ts +19 -8
  57. package/dist/github/github-monitor-cursor.d.ts.map +1 -1
  58. package/dist/github/github-monitor-cursor.js +8 -52
  59. package/dist/github/github-monitor-cursor.js.map +1 -1
  60. package/dist/github/github-monitor.d.ts +2 -0
  61. package/dist/github/github-monitor.d.ts.map +1 -1
  62. package/dist/github/github-monitor.js +13 -0
  63. package/dist/github/github-monitor.js.map +1 -1
  64. package/dist/github/github-test-fixtures.d.ts +9 -0
  65. package/dist/github/github-test-fixtures.d.ts.map +1 -1
  66. package/dist/github/github-test-fixtures.js +6 -0
  67. package/dist/github/github-test-fixtures.js.map +1 -1
  68. package/dist/github/github-update-types.d.ts +10 -0
  69. package/dist/github/github-update-types.d.ts.map +1 -1
  70. package/dist/github/index.d.ts +3 -1
  71. package/dist/github/index.d.ts.map +1 -1
  72. package/dist/github/index.js +1 -0
  73. package/dist/github/index.js.map +1 -1
  74. package/dist/github/register-github-watch-tool.d.ts +5 -0
  75. package/dist/github/register-github-watch-tool.d.ts.map +1 -1
  76. package/dist/github/register-github-watch-tool.js +30 -24
  77. package/dist/github/register-github-watch-tool.js.map +1 -1
  78. package/dist/github/unregister-github-watch-tool.d.ts +11 -0
  79. package/dist/github/unregister-github-watch-tool.d.ts.map +1 -0
  80. package/dist/github/unregister-github-watch-tool.js +52 -0
  81. package/dist/github/unregister-github-watch-tool.js.map +1 -0
  82. package/dist/prompt/modules/ensemble/base-module.d.ts.map +1 -1
  83. package/dist/prompt/modules/ensemble/base-module.js +2 -1
  84. package/dist/prompt/modules/ensemble/base-module.js.map +1 -1
  85. package/dist/prompt/modules/ensemble/conductor-base-module.d.ts.map +1 -1
  86. package/dist/prompt/modules/ensemble/conductor-base-module.js +4 -1
  87. package/dist/prompt/modules/ensemble/conductor-base-module.js.map +1 -1
  88. package/dist/runtime/worker-session.d.ts +5 -0
  89. package/dist/runtime/worker-session.d.ts.map +1 -1
  90. package/dist/runtime/worker-session.js +5 -1
  91. package/dist/runtime/worker-session.js.map +1 -1
  92. package/package.json +2 -1
@@ -0,0 +1,524 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { AuthStorage, ModelRegistry, } from '@earendil-works/pi-coding-agent';
4
+ import { findEnvKeys, getEnvApiKey, } from '@earendil-works/pi-ai/compat';
5
+ import { loadPiResources, resolvePiResourceRoots, } from './pi-resource-loader.js';
6
+ /** Create the Pi credential store and model registry for the user root. */
7
+ export function createPiConductorAuthContext(options) {
8
+ const roots = resolvePiResourceRoots(options);
9
+ const authPath = join(roots.agentDir, 'auth.json');
10
+ const modelsPath = join(roots.agentDir, 'models.json');
11
+ const authStorage = AuthStorage.create(authPath);
12
+ return {
13
+ agentDir: roots.agentDir,
14
+ authPath,
15
+ modelsPath,
16
+ authStorage,
17
+ modelRegistry: ModelRegistry.create(authStorage, modelsPath),
18
+ };
19
+ }
20
+ /** Resolve the provider used by `ensemble auth` from an explicit/default model. */
21
+ export async function resolvePiConductorProvider(options) {
22
+ const resources = await loadPiResources(options);
23
+ const context = createPiConductorAuthContext(options);
24
+ return resolvePiConductorProviderFromResources(options, resources, context);
25
+ }
26
+ /** Login to a Pi provider. API-key login persists only in the user auth file. */
27
+ export async function loginPiConductor(options) {
28
+ const resources = await loadPiResources(options);
29
+ const context = createPiConductorAuthContext(options);
30
+ const provider = resolveConductorProviderOrThrow(options, resources, context);
31
+ const oauthProvider = context.authStorage
32
+ .getOAuthProviders()
33
+ .some((candidate) => candidate.id === provider);
34
+ if (oauthProvider) {
35
+ if (!options.oauthCallbacks) {
36
+ throw new Error(`Pi provider "${provider}" uses OAuth. Run this command from a TTY so the OAuth login flow can interact with you.`);
37
+ }
38
+ await context.authStorage.login(provider, options.oauthCallbacks);
39
+ return {
40
+ backend: 'pi',
41
+ provider,
42
+ method: 'oauth',
43
+ authPath: context.authPath,
44
+ };
45
+ }
46
+ const apiKey = options.apiKey?.trim();
47
+ if (!apiKey) {
48
+ throw new Error(`Pi provider "${provider}" requires an API key. Pass a secret API-key prompt value or set ${formatPiProviderEnvHint(provider)}.`);
49
+ }
50
+ context.authStorage.set(provider, { type: 'api_key', key: apiKey });
51
+ return {
52
+ backend: 'pi',
53
+ provider,
54
+ method: 'api_key',
55
+ authPath: context.authPath,
56
+ };
57
+ }
58
+ /** Whether the selected Pi provider exposes Pi's native OAuth login flow. */
59
+ export async function isPiConductorOAuthProvider(options) {
60
+ const resources = await loadPiResources(options);
61
+ const context = createPiConductorAuthContext(options);
62
+ const provider = resolveConductorProviderOrThrow(options, resources, context);
63
+ return context.authStorage
64
+ .getOAuthProviders()
65
+ .some((candidate) => candidate.id === provider);
66
+ }
67
+ /** Remove a Pi provider's user-layer credential. */
68
+ export async function logoutPiConductor(options) {
69
+ const resources = await loadPiResources(options);
70
+ const context = createPiConductorAuthContext(options);
71
+ const provider = resolveConductorProviderOrThrow(options, resources, context);
72
+ context.authStorage.logout(provider);
73
+ return {
74
+ backend: 'pi',
75
+ provider,
76
+ authPath: context.authPath,
77
+ };
78
+ }
79
+ /** Return non-secret Pi auth metadata for the selected/default provider. */
80
+ export async function getPiConductorAuthStatus(options) {
81
+ const resources = await loadPiResources(options);
82
+ const context = createPiConductorAuthContext(options);
83
+ const providers = resolveStatusProviders(options, resources, context);
84
+ return {
85
+ backend: 'pi',
86
+ authPath: context.authPath,
87
+ providers: providers.map((provider) => getPiProviderAuthStatus(provider, context, resources, options.env ?? process.env)),
88
+ };
89
+ }
90
+ /** List only Pi models whose provider has usable configured auth. */
91
+ export async function listPiConductorModels(options = { cwd: process.cwd() }) {
92
+ const resources = await loadPiResources(options);
93
+ const context = createPiConductorAuthContext(options);
94
+ const requestedProvider = normalizeProvider(options.provider) ?? providerFromModelId(options.modelId);
95
+ const entries = new Map();
96
+ // ModelRegistry's fast `getAvailable()` only sees its user AuthStorage. The
97
+ // conductor also honors project auth.json, so filter the complete registry
98
+ // through the merged project-over-user auth view before listing models.
99
+ for (const model of context.modelRegistry.getAll()) {
100
+ if (requestedProvider && model.provider !== requestedProvider)
101
+ continue;
102
+ if (!hasPiProviderAuth(model.provider, context, resources, options.env ?? process.env)) {
103
+ continue;
104
+ }
105
+ addPiModelEntry(entries, model);
106
+ }
107
+ // ModelRegistry reads the user models.json. Project models remain governed by
108
+ // the existing resource loader, so add those merged definitions explicitly.
109
+ for (const [provider, config] of Object.entries(resources.models.providers)) {
110
+ if (requestedProvider && provider !== requestedProvider)
111
+ continue;
112
+ if (!hasPiProviderAuth(provider, context, resources, options.env ?? process.env)) {
113
+ continue;
114
+ }
115
+ for (const model of config.models ?? []) {
116
+ addPiCustomModelEntry(entries, provider, model);
117
+ }
118
+ }
119
+ const result = [...entries.values()].sort((left, right) => left.id.localeCompare(right.id));
120
+ if (result.length === 0) {
121
+ const providerHint = requestedProvider ? ` for provider "${requestedProvider}"` : '';
122
+ throw new Error(`No authenticated Pi models are available${providerHint}. ` +
123
+ `Run ensemble auth login --provider <provider>, set provider credentials in ${context.agentDir}, ` +
124
+ 'or configure a provider environment variable.');
125
+ }
126
+ return result;
127
+ }
128
+ /** Resolve a key while retaining project-over-user auth precedence. */
129
+ export async function resolvePiConductorApiKey(options) {
130
+ const env = options.env ?? process.env;
131
+ if (options.explicitApiKey !== undefined)
132
+ return options.explicitApiKey;
133
+ // A project auth file intentionally remains above the user auth layer. When
134
+ // both roots point at the same file, AuthStorage is the canonical reader so
135
+ // OAuth refresh is not bypassed by the resource-layer compatibility parser.
136
+ if (options.resources.roots.agentDir !== options.resources.roots.projectDir) {
137
+ const projectEntry = options.resources.authLayers.at(-1)?.[options.provider];
138
+ if (isPiOAuthAuthEntry(projectEntry)) {
139
+ throw new Error(formatProjectOAuthAuthError(options.provider));
140
+ }
141
+ const projectKey = resolvePiAuthEntry(projectEntry, env);
142
+ if (projectKey !== undefined)
143
+ return projectKey;
144
+ }
145
+ const userStatus = options.authStorage.getAuthStatus(options.provider);
146
+ if (userStatus.source === 'stored' || userStatus.source === 'runtime') {
147
+ // AuthStorage owns OAuth refresh and locking. Keep this call dynamic per
148
+ // request rather than capturing its result during agent construction.
149
+ return options.authStorage.getApiKey(options.provider);
150
+ }
151
+ const settingsKey = resolvePiSettingsApiKey(options.resources.settings, options.provider, env);
152
+ if (settingsKey !== undefined)
153
+ return settingsKey;
154
+ const modelsKey = resolvePiModelsApiKey(options.resources.models.providers[options.provider], env);
155
+ if (modelsKey !== undefined)
156
+ return modelsKey;
157
+ return getEnvApiKey(options.provider, toProviderEnv(env));
158
+ }
159
+ /** Return whether a provider has configured auth without exposing its value. */
160
+ export function hasPiProviderAuth(provider, context, resources, env = process.env) {
161
+ const status = getPiProviderAuthStatus(provider, context, resources, env);
162
+ return status.configured;
163
+ }
164
+ /** Synchronous readiness check used by CLI/e2e guards before async loading. */
165
+ export function hasPiConductorAuth(options) {
166
+ const context = createPiConductorAuthContext(options);
167
+ const env = options.env ?? process.env;
168
+ const roots = resolvePiResourceRoots(options);
169
+ const projectAuth = readPiJsonSync(join(roots.projectDir, 'auth.json'));
170
+ const settings = readPiSettingsSync(roots);
171
+ const models = readPiModelsSync(roots);
172
+ const selection = resolvePiConductorSelectionSync(options, settings, models, context);
173
+ if (selection.provider) {
174
+ return hasPiProviderAuthSync({
175
+ provider: selection.provider,
176
+ context,
177
+ roots,
178
+ projectAuth,
179
+ settings,
180
+ models,
181
+ env,
182
+ });
183
+ }
184
+ // A configured model that cannot be mapped to one provider is not a
185
+ // usable conductor selection, even if another provider happens to have
186
+ // credentials.
187
+ if (selection.modelId)
188
+ return false;
189
+ return hasAnyPiConductorAuthSync({
190
+ context,
191
+ roots,
192
+ projectAuth,
193
+ settings,
194
+ models,
195
+ env,
196
+ });
197
+ }
198
+ /**
199
+ * Mirror PiConductorAgent's synchronous provider/model selection for guards.
200
+ * The async agent receives the same merged settings and model layers.
201
+ */
202
+ function resolvePiConductorSelectionSync(options, settings, models, context) {
203
+ const requestedModel = normalizeModelId(options.modelId);
204
+ const configuredModel = normalizeModelId(firstString(settings.defaultModel, settings.model, settings.modelId));
205
+ const selectedModel = requestedModel ?? configuredModel;
206
+ let provider = normalizeProvider(options.provider);
207
+ let modelId = selectedModel;
208
+ if (selectedModel?.includes('/')) {
209
+ const separator = selectedModel.indexOf('/');
210
+ if (!provider) {
211
+ provider = normalizeProvider(selectedModel.slice(0, separator));
212
+ }
213
+ modelId = normalizeModelId(selectedModel.slice(separator + 1));
214
+ }
215
+ if (!provider)
216
+ provider = normalizeProvider(settings.defaultProvider);
217
+ if (!provider && modelId) {
218
+ const matches = new Set();
219
+ for (const model of context.modelRegistry.getAll()) {
220
+ if (model.id === modelId)
221
+ matches.add(model.provider);
222
+ }
223
+ for (const [candidate, config] of Object.entries(models.providers)) {
224
+ if (config.models?.some((model) => model.id === modelId)) {
225
+ matches.add(candidate);
226
+ }
227
+ }
228
+ if (matches.size === 1)
229
+ provider = [...matches][0];
230
+ }
231
+ return {
232
+ ...(provider ? { provider } : {}),
233
+ ...(modelId ? { modelId } : {}),
234
+ };
235
+ }
236
+ function hasPiProviderAuthSync(options) {
237
+ const projectEntry = options.projectAuth?.[options.provider];
238
+ if (options.roots.agentDir !== options.roots.projectDir &&
239
+ isPiOAuthAuthEntry(projectEntry)) {
240
+ return false;
241
+ }
242
+ if (resolvePiAuthEntry(projectEntry, options.env) !== undefined)
243
+ return true;
244
+ if (options.context.authStorage.has(options.provider))
245
+ return true;
246
+ // Keep readiness aligned with ModelRegistry, including command-backed or
247
+ // otherwise registry-native user models, while the explicit checks below
248
+ // honor the injected test/runtime environment.
249
+ if (options.context.modelRegistry
250
+ .getAvailable()
251
+ .some((model) => model.provider === options.provider)) {
252
+ return true;
253
+ }
254
+ if (resolvePiSettingsApiKey(options.settings, options.provider, options.env) !== undefined) {
255
+ return true;
256
+ }
257
+ if (resolvePiModelsApiKey(options.models.providers[options.provider], options.env) !== undefined) {
258
+ return true;
259
+ }
260
+ return getEnvApiKey(options.provider, toProviderEnv(options.env)) !== undefined;
261
+ }
262
+ function hasAnyPiConductorAuthSync(options) {
263
+ if (options.context.modelRegistry.getAvailable().length > 0)
264
+ return true;
265
+ const providers = new Set([
266
+ ...options.context.authStorage.list(),
267
+ ...options.context.modelRegistry.getAll().map((model) => model.provider),
268
+ ...Object.keys(options.models.providers),
269
+ ...Object.keys(options.projectAuth ?? {}),
270
+ ...options.context.authStorage.getOAuthProviders().map((provider) => provider.id),
271
+ ]);
272
+ for (const provider of providers) {
273
+ if (hasPiProviderAuthSync({ ...options, provider }))
274
+ return true;
275
+ }
276
+ if (typeof options.settings.apiKey === 'string' ||
277
+ (isRecord(options.settings.apiKeys) &&
278
+ Object.values(options.settings.apiKeys).some((entry) => typeof entry === 'string'))) {
279
+ return true;
280
+ }
281
+ return false;
282
+ }
283
+ function readPiSettingsSync(roots) {
284
+ return mergePiRecords(readPiJsonSync(join(roots.agentDir, 'settings.json')) ?? {}, readPiJsonSync(join(roots.projectDir, 'settings.json')) ?? {});
285
+ }
286
+ function readPiModelsSync(roots) {
287
+ const merged = mergePiRecords(readPiJsonSync(join(roots.agentDir, 'models.json')) ?? {}, readPiJsonSync(join(roots.projectDir, 'models.json')) ?? {});
288
+ return {
289
+ providers: isRecord(merged.providers)
290
+ ? merged.providers
291
+ : {},
292
+ };
293
+ }
294
+ function resolveConductorProviderOrThrow(options, resources, context) {
295
+ const provider = resolvePiConductorProviderFromResources(options, resources, context);
296
+ if (provider)
297
+ return provider;
298
+ throw new Error(`Pi provider is not configured. Set defaultProvider in ${join(context.agentDir, 'settings.json')} or pass --provider <id>.`);
299
+ }
300
+ function resolvePiConductorProviderFromResources(options, resources, context) {
301
+ const explicit = normalizeProvider(options.provider);
302
+ if (explicit)
303
+ return explicit;
304
+ const requestedModel = normalizeModelId(options.modelId);
305
+ const configuredModel = normalizeModelId(firstString(resources.settings.defaultModel, resources.settings.model, resources.settings.modelId));
306
+ const selectedModel = requestedModel ?? configuredModel;
307
+ if (selectedModel?.includes('/')) {
308
+ return selectedModel.slice(0, selectedModel.indexOf('/'));
309
+ }
310
+ const configuredProvider = normalizeProvider(resources.settings.defaultProvider);
311
+ if (configuredProvider)
312
+ return configuredProvider;
313
+ if (selectedModel) {
314
+ const matches = new Set();
315
+ for (const model of context.modelRegistry.getAll()) {
316
+ if (model.id === selectedModel)
317
+ matches.add(model.provider);
318
+ }
319
+ for (const [provider, config] of Object.entries(resources.models.providers)) {
320
+ if (config.models?.some((model) => model.id === selectedModel)) {
321
+ matches.add(provider);
322
+ }
323
+ }
324
+ if (matches.size === 1)
325
+ return [...matches][0];
326
+ }
327
+ return '';
328
+ }
329
+ function resolveStatusProviders(options, resources, context) {
330
+ const explicit = normalizeProvider(options.provider);
331
+ if (explicit)
332
+ return [explicit];
333
+ const configured = resolvePiConductorProviderFromResources(options, resources, context);
334
+ if (configured)
335
+ return [configured];
336
+ const providers = new Set([
337
+ ...context.authStorage.list(),
338
+ ...context.modelRegistry.getAll().map((model) => model.provider),
339
+ ...Object.keys(resources.models.providers),
340
+ ...context.authStorage.getOAuthProviders().map((provider) => provider.id),
341
+ ]);
342
+ return [...providers].sort();
343
+ }
344
+ function getPiProviderAuthStatus(provider, context, resources, env) {
345
+ if (resources.roots.agentDir !== resources.roots.projectDir) {
346
+ const projectEntry = resources.authLayers.at(-1)?.[provider];
347
+ if (isPiOAuthAuthEntry(projectEntry)) {
348
+ return {
349
+ provider,
350
+ configured: false,
351
+ source: 'project_oauth_unsupported',
352
+ };
353
+ }
354
+ const projectKey = resolvePiAuthEntry(projectEntry, env);
355
+ if (projectKey !== undefined) {
356
+ return { provider, configured: true, source: 'project_stored' };
357
+ }
358
+ }
359
+ const registryStatus = context.modelRegistry.getProviderAuthStatus(provider);
360
+ if (registryStatus.configured || registryStatus.source === 'stored') {
361
+ return normalizePiAuthStatus(provider, registryStatus, true);
362
+ }
363
+ const settingsKey = resolvePiSettingsApiKey(resources.settings, provider, env);
364
+ if (settingsKey !== undefined) {
365
+ return { provider, configured: true, source: 'settings_json' };
366
+ }
367
+ const modelsKey = resolvePiModelsApiKey(resources.models.providers[provider], env);
368
+ if (modelsKey !== undefined) {
369
+ return { provider, configured: true, source: 'models_json_key' };
370
+ }
371
+ const envKey = getEnvApiKey(provider, toProviderEnv(env));
372
+ if (envKey !== undefined) {
373
+ return {
374
+ provider,
375
+ configured: true,
376
+ source: 'environment',
377
+ label: formatPiProviderEnvHint(provider),
378
+ };
379
+ }
380
+ return normalizePiAuthStatus(provider, registryStatus, false);
381
+ }
382
+ function normalizePiAuthStatus(provider, status, configured) {
383
+ return {
384
+ provider,
385
+ configured,
386
+ ...(status.source ? { source: status.source } : {}),
387
+ ...(status.label ? { label: status.label } : {}),
388
+ };
389
+ }
390
+ function addPiModelEntry(entries, model) {
391
+ const id = `${model.provider}/${model.id}`;
392
+ entries.set(id, {
393
+ id,
394
+ displayName: model.name || model.id,
395
+ provider: model.provider,
396
+ });
397
+ }
398
+ function addPiCustomModelEntry(entries, provider, model) {
399
+ const id = `${provider}/${model.id}`;
400
+ entries.set(id, {
401
+ id,
402
+ displayName: model.name ?? model.id,
403
+ provider,
404
+ });
405
+ }
406
+ function resolvePiAuthEntry(entry, env) {
407
+ if (typeof entry === 'string')
408
+ return expandEnvReference(entry, env);
409
+ if (!isRecord(entry))
410
+ return undefined;
411
+ if (isPiOAuthAuthEntry(entry))
412
+ return undefined;
413
+ for (const key of ['key', 'apiKey', 'token', 'accessToken', 'access']) {
414
+ const value = entry[key];
415
+ if (typeof value === 'string')
416
+ return expandEnvReference(value, env);
417
+ }
418
+ return undefined;
419
+ }
420
+ function isPiOAuthAuthEntry(entry) {
421
+ return isRecord(entry) && entry.type === 'oauth';
422
+ }
423
+ function formatProjectOAuthAuthError(provider) {
424
+ return (`Project Pi OAuth credentials for provider "${provider}" are not supported in ` +
425
+ 'project .ensemble/pi/auth.json because that layer cannot refresh them safely. ' +
426
+ `Run ensemble auth login --provider ${provider} to store the credential in the user AuthStorage.`);
427
+ }
428
+ function resolvePiSettingsApiKey(settings, provider, env) {
429
+ if (typeof settings.apiKey === 'string') {
430
+ return expandEnvReference(settings.apiKey, env);
431
+ }
432
+ if (!isRecord(settings.apiKeys))
433
+ return undefined;
434
+ const value = settings.apiKeys[provider];
435
+ return typeof value === 'string' ? expandEnvReference(value, env) : undefined;
436
+ }
437
+ function resolvePiModelsApiKey(providerConfig, env) {
438
+ return providerConfig?.apiKey
439
+ ? expandEnvReference(providerConfig.apiKey, env)
440
+ : undefined;
441
+ }
442
+ function expandEnvReference(value, env) {
443
+ if (value.startsWith('!'))
444
+ return undefined;
445
+ const variable = /^\$\{([^}]+)\}$/.exec(value) ?? /^\$([A-Za-z_][A-Za-z0-9_]*)$/.exec(value);
446
+ return variable ? env[variable[1]] : value;
447
+ }
448
+ function toProviderEnv(env) {
449
+ return Object.fromEntries(Object.entries(env).filter((entry) => typeof entry[1] === 'string'));
450
+ }
451
+ function normalizeProvider(value) {
452
+ if (typeof value !== 'string')
453
+ return undefined;
454
+ const normalized = value.trim();
455
+ return normalized && normalized !== 'default' && normalized !== 'auto'
456
+ ? normalized
457
+ : undefined;
458
+ }
459
+ function normalizeModelId(value) {
460
+ if (typeof value !== 'string')
461
+ return undefined;
462
+ const normalized = value.trim();
463
+ return normalized && normalized !== 'default' && normalized !== 'auto'
464
+ ? normalized
465
+ : undefined;
466
+ }
467
+ function providerFromModelId(value) {
468
+ const modelId = normalizeModelId(value);
469
+ if (!modelId?.includes('/'))
470
+ return undefined;
471
+ return normalizeProvider(modelId.slice(0, modelId.indexOf('/')));
472
+ }
473
+ function firstString(...values) {
474
+ for (const value of values) {
475
+ if (typeof value !== 'string')
476
+ continue;
477
+ const normalized = value.trim();
478
+ if (normalized && normalized !== 'default' && normalized !== 'auto')
479
+ return normalized;
480
+ }
481
+ return undefined;
482
+ }
483
+ /** Return the concrete environment variables recognised by Pi for a provider. */
484
+ export function formatPiProviderEnvHint(provider) {
485
+ // `findEnvKeys` normally reports only variables that are currently set. A
486
+ // truthy probe lets the SDK expose its existing provider mapping even for a
487
+ // missing credential, which is the case where this recovery hint is used.
488
+ const envKeys = findEnvKeys(provider, PI_ENV_HINT_PROBE);
489
+ if (envKeys)
490
+ return envKeys.join(' / ');
491
+ if (provider === 'google-vertex') {
492
+ return 'GOOGLE_APPLICATION_CREDENTIALS / GOOGLE_CLOUD_PROJECT / GOOGLE_CLOUD_LOCATION';
493
+ }
494
+ if (provider === 'amazon-bedrock') {
495
+ return ('AWS_PROFILE / AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY / ' +
496
+ 'AWS_BEARER_TOKEN_BEDROCK');
497
+ }
498
+ return `${provider.toUpperCase().replace(/[^A-Z0-9]+/g, '_')}_API_KEY`;
499
+ }
500
+ const PI_ENV_HINT_PROBE = new Proxy({}, { get: (_target, property) => (typeof property === 'string' ? 'configured' : undefined) });
501
+ function isRecord(value) {
502
+ return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
503
+ }
504
+ function readPiJsonSync(path) {
505
+ try {
506
+ const value = JSON.parse(readFileSync(path, 'utf8'));
507
+ return isRecord(value) ? value : undefined;
508
+ }
509
+ catch {
510
+ return undefined;
511
+ }
512
+ }
513
+ function mergePiRecords(base, override) {
514
+ const merged = { ...base };
515
+ for (const [key, value] of Object.entries(override)) {
516
+ const previous = merged[key];
517
+ merged[key] =
518
+ isRecord(previous) && isRecord(value)
519
+ ? mergePiRecords(previous, value)
520
+ : value;
521
+ }
522
+ return merged;
523
+ }
524
+ //# sourceMappingURL=conductor-pi-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conductor-pi-auth.js","sourceRoot":"","sources":["../../src/conductor/conductor-pi-auth.ts"],"names":[],"mappings":"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"}
@@ -44,6 +44,8 @@ export interface ConductorSessionDriverOptions {
44
44
  eventQueue: SessionEventQueue;
45
45
  workerSession: WorkerSession;
46
46
  permissionPipeline: PermissionPipeline;
47
+ /** PermissionPipeline.pending を dispatch の authoritative source として参照する predicate。 */
48
+ isPermissionPending?: (requestId: string) => boolean;
47
49
  openQuestions: OpenQuestionRegistry;
48
50
  shutdownSignal: AbortSignal;
49
51
  maxTurns: number;
@@ -1 +1 @@
1
- {"version":3,"file":"conductor-session-driver.d.ts","sourceRoot":"","sources":["../../src/conductor/conductor-session-driver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conductor-session-driver.d.ts","sourceRoot":"","sources":["../../src/conductor/conductor-session-driver.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { ensureMaxTurnsOpenQuestion } from '../escalation/enqueue-max-turns-question.js';
2
2
  import { reconnectConductorAgent, sendConductorWithReconnect, } from './conductor-send-reconnect.js';
3
3
  import { formatSessionEventsForConductor } from './session/format-session-event.js';
4
- import { bufferDispatchHoldEvents, createDispatchHoldState, } from './session/dispatch-hold.js';
4
+ import { bufferDispatchHoldEvents, createDispatchHoldState, pruneStalePermissionEvents, } from './session/dispatch-hold.js';
5
5
  import { countWorkerOutcomesInBatch, dispatchBatchStateAfterSend, markContinuationConsumed, selectDispatchBatch, } from './session/select-dispatch-batch.js';
6
6
  import { autonomousTurnsAfterConductorBatch, buildIssueLoopStopInput, canDispatchConductorSend, isMaxTurnsLimited, resolveIssueLoopStopReason, shouldStopIssueLoop, } from './session-policy.js';
7
7
  /**
@@ -96,6 +96,14 @@ export async function runConductorSessionDriver(options) {
96
96
  });
97
97
  }
98
98
  while (true) {
99
+ if (options.isPermissionPending) {
100
+ pruneStalePermissionEvents({
101
+ state: dispatchHoldState,
102
+ eventQueue: options.eventQueue,
103
+ isPermissionPending: options.isPermissionPending,
104
+ onChanged: options.onDispatchHoldChanged,
105
+ });
106
+ }
99
107
  if (!inFlightSend &&
100
108
  isMaxTurnsLimited(options.maxTurns) &&
101
109
  autonomousTurns >= options.maxTurns) {
@@ -163,6 +171,7 @@ export async function runConductorSessionDriver(options) {
163
171
  signal: options.shutdownSignal,
164
172
  dispatchHoldState,
165
173
  onDispatchHoldChanged: options.onDispatchHoldChanged,
174
+ isPermissionPending: options.isPermissionPending,
166
175
  });
167
176
  }
168
177
  catch (error) {
@@ -270,6 +279,14 @@ async function waitForDispatchBatch(input) {
270
279
  onChanged: input.onDispatchHoldChanged,
271
280
  });
272
281
  }
282
+ if (input.isPermissionPending) {
283
+ pruneStalePermissionEvents({
284
+ state: input.dispatchHoldState,
285
+ eventQueue: input.eventQueue,
286
+ isPermissionPending: input.isPermissionPending,
287
+ onChanged: input.onDispatchHoldChanged,
288
+ });
289
+ }
273
290
  const selected = selectDispatchBatch({
274
291
  queue: input.eventQueue.snapshot(),
275
292
  state: input.dispatchBatchState,