@portel/photon 1.23.1 → 1.24.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 (57) hide show
  1. package/README.md +66 -0
  2. package/dist/auto-ui/streamable-http-transport.d.ts.map +1 -1
  3. package/dist/auto-ui/streamable-http-transport.js +262 -18
  4. package/dist/auto-ui/streamable-http-transport.js.map +1 -1
  5. package/dist/beam.bundle.js +58287 -56177
  6. package/dist/beam.bundle.js.map +4 -4
  7. package/dist/capability-negotiator.d.ts +9 -0
  8. package/dist/capability-negotiator.d.ts.map +1 -1
  9. package/dist/capability-negotiator.js +14 -0
  10. package/dist/capability-negotiator.js.map +1 -1
  11. package/dist/cli/commands/claim.d.ts +17 -0
  12. package/dist/cli/commands/claim.d.ts.map +1 -0
  13. package/dist/cli/commands/claim.js +124 -0
  14. package/dist/cli/commands/claim.js.map +1 -0
  15. package/dist/cli/commands/run.d.ts.map +1 -1
  16. package/dist/cli/commands/run.js +2 -0
  17. package/dist/cli/commands/run.js.map +1 -1
  18. package/dist/cli/index.d.ts.map +1 -1
  19. package/dist/cli/index.js +2 -0
  20. package/dist/cli/index.js.map +1 -1
  21. package/dist/daemon/claims.d.ts +108 -0
  22. package/dist/daemon/claims.d.ts.map +1 -0
  23. package/dist/daemon/claims.js +245 -0
  24. package/dist/daemon/claims.js.map +1 -0
  25. package/dist/daemon/client.d.ts.map +1 -1
  26. package/dist/daemon/client.js +15 -29
  27. package/dist/daemon/client.js.map +1 -1
  28. package/dist/daemon/cron.d.ts +36 -0
  29. package/dist/daemon/cron.d.ts.map +1 -0
  30. package/dist/daemon/cron.js +216 -0
  31. package/dist/daemon/cron.js.map +1 -0
  32. package/dist/daemon/schedule-loader.d.ts +76 -0
  33. package/dist/daemon/schedule-loader.d.ts.map +1 -0
  34. package/dist/daemon/schedule-loader.js +124 -0
  35. package/dist/daemon/schedule-loader.js.map +1 -0
  36. package/dist/daemon/server.js +76 -226
  37. package/dist/daemon/server.js.map +1 -1
  38. package/dist/deploy/cloudflare.d.ts.map +1 -1
  39. package/dist/deploy/cloudflare.js +68 -3
  40. package/dist/deploy/cloudflare.js.map +1 -1
  41. package/dist/loader.d.ts +22 -1
  42. package/dist/loader.d.ts.map +1 -1
  43. package/dist/loader.js +162 -7
  44. package/dist/loader.js.map +1 -1
  45. package/dist/photon-cli-runner.d.ts.map +1 -1
  46. package/dist/photon-cli-runner.js +17 -0
  47. package/dist/photon-cli-runner.js.map +1 -1
  48. package/dist/server.d.ts +10 -0
  49. package/dist/server.d.ts.map +1 -1
  50. package/dist/server.js +50 -1
  51. package/dist/server.js.map +1 -1
  52. package/dist/shared/memory-sqlite.d.ts +37 -0
  53. package/dist/shared/memory-sqlite.d.ts.map +1 -0
  54. package/dist/shared/memory-sqlite.js +143 -0
  55. package/dist/shared/memory-sqlite.js.map +1 -0
  56. package/package.json +2 -2
  57. package/templates/cloudflare/worker.ts.template +44 -73
@@ -1 +1 @@
1
- {"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../src/deploy/cloudflare.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmCH,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+LxF;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BnF"}
1
+ {"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../src/deploy/cloudflare.ts"],"names":[],"mappings":"AAAA;;GAEG;AAsFH,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4MxF;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BnF"}
@@ -6,6 +6,7 @@ import * as path from 'path';
6
6
  import { existsSync, readFileSync } from 'fs';
7
7
  import { execSync, spawn } from 'child_process';
8
8
  import { fileURLToPath } from 'url';
9
+ import { homedir } from 'node:os';
9
10
  import { detectPM, detectRunner } from '../shared-utils.js';
10
11
  import { SchemaExtractor } from '@portel/photon-core';
11
12
  import { PHOTON_VERSION } from '../version.js';
@@ -32,6 +33,56 @@ function getPackageRoot() {
32
33
  // Fallback: assume we're in dist/deploy/
33
34
  return path.join(__dirname, '..', '..');
34
35
  }
36
+ /**
37
+ * Resolve a Cloudflare API token for wrangler, preferring an explicit
38
+ * CLOUDFLARE_API_TOKEN env var then falling back to the OAuth access token
39
+ * stored by the `cf` CLI at ~/.cf/config.toml. Returns undefined if no
40
+ * token is discoverable; callers fall through to the interactive
41
+ * `wrangler login` flow.
42
+ *
43
+ * The `cf` CLI's OAuth access token is accepted by the Cloudflare API as a
44
+ * Bearer credential, so wrangler recognizes it as a valid API token. This
45
+ * lets users who have authenticated once via `cf auth login` skip the
46
+ * separate `wrangler login` browser prompt.
47
+ */
48
+ function resolveCloudflareApiToken() {
49
+ if (process.env.CLOUDFLARE_API_TOKEN) {
50
+ return { token: process.env.CLOUDFLARE_API_TOKEN, source: 'env' };
51
+ }
52
+ const cfConfigPath = path.join(homedir(), '.cf', 'config.toml');
53
+ if (!existsSync(cfConfigPath))
54
+ return null;
55
+ // `cf auth whoami` has the side effect of refreshing an expired OAuth
56
+ // access token on disk using the stored refresh token. Run it silently
57
+ // first so wrangler receives a live token rather than an expired one.
58
+ // No error if `cf` is not installed; we fall through to reading whatever
59
+ // is on disk in that case.
60
+ try {
61
+ execSync('cf auth whoami', { stdio: 'pipe' });
62
+ }
63
+ catch {
64
+ // cf missing or refresh failed; try the on-disk token anyway.
65
+ }
66
+ try {
67
+ const toml = readFileSync(cfConfigPath, 'utf-8');
68
+ const match = toml.match(/^access_token\s*=\s*"([^"]+)"\s*$/m);
69
+ return match ? { token: match[1], source: 'cf-cli' } : null;
70
+ }
71
+ catch {
72
+ return null;
73
+ }
74
+ }
75
+ /**
76
+ * Build a subprocess env that includes the bridged Cloudflare API token
77
+ * when one is available. Callers use this when spawning wrangler so the
78
+ * token flows through without touching the parent process env.
79
+ */
80
+ function wranglerEnv() {
81
+ const resolved = resolveCloudflareApiToken();
82
+ if (!resolved)
83
+ return process.env;
84
+ return { ...process.env, CLOUDFLARE_API_TOKEN: resolved.token };
85
+ }
35
86
  export async function deployToCloudflare(options) {
36
87
  const { photonPath, devMode = false, dryRun = false } = options;
37
88
  // Resolve photon file
@@ -104,7 +155,7 @@ export async function deployToCloudflare(options) {
104
155
  },
105
156
  devDependencies: {
106
157
  '@cloudflare/workers-types': '^4.0.0',
107
- wrangler: '^3.0.0',
158
+ wrangler: '^4.0.0',
108
159
  typescript: '^5.0.0',
109
160
  },
110
161
  };
@@ -145,10 +196,21 @@ export async function deployToCloudflare(options) {
145
196
  logger.error('💡 Check your package manager installation and network connection');
146
197
  throw new Error(`Dependency installation failed: ${error instanceof Error ? error.message : String(error)}`);
147
198
  }
148
- // Check for wrangler authentication
199
+ // Check for wrangler authentication. If an OAuth token is available from
200
+ // the `cf` CLI, log that we're bridging it so the user sees why the
201
+ // interactive `wrangler login` prompt was skipped.
149
202
  logger.info('Checking Cloudflare authentication...');
203
+ const resolvedToken = resolveCloudflareApiToken();
204
+ if (resolvedToken?.source === 'cf-cli') {
205
+ logger.info('Using OAuth token from ~/.cf/config.toml for wrangler authentication');
206
+ }
207
+ const envForWrangler = wranglerEnv();
150
208
  try {
151
- execSync(`${detectRunner()} wrangler whoami`, { cwd: outputDir, stdio: 'pipe' });
209
+ execSync(`${detectRunner()} wrangler whoami`, {
210
+ cwd: outputDir,
211
+ stdio: 'pipe',
212
+ env: envForWrangler,
213
+ });
152
214
  }
153
215
  catch {
154
216
  logger.warn('Not logged in to Cloudflare');
@@ -157,6 +219,7 @@ export async function deployToCloudflare(options) {
157
219
  const login = spawn(detectRunner(), ['wrangler', 'login'], {
158
220
  cwd: outputDir,
159
221
  stdio: 'inherit',
222
+ env: envForWrangler,
160
223
  });
161
224
  await new Promise((resolve, reject) => {
162
225
  login.on('close', (code) => {
@@ -172,6 +235,7 @@ export async function deployToCloudflare(options) {
172
235
  const deploy = spawn(detectRunner(), ['wrangler', 'deploy'], {
173
236
  cwd: outputDir,
174
237
  stdio: 'inherit',
238
+ env: envForWrangler,
175
239
  });
176
240
  await new Promise((resolve, reject) => {
177
241
  deploy.on('close', (code) => {
@@ -204,6 +268,7 @@ export async function devCloudflare(options) {
204
268
  const dev = spawn(detectRunner(), ['wrangler', 'dev'], {
205
269
  cwd: outputDir,
206
270
  stdio: 'inherit',
271
+ env: wranglerEnv(),
207
272
  });
208
273
  await new Promise((resolve) => {
209
274
  dev.on('close', () => resolve());
@@ -1 +1 @@
1
- {"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../../src/deploy/cloudflare.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../../src/deploy/cloudflare.ts"],"names":[],"mappings":"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"}
package/dist/loader.d.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Loads a single .photon.ts file and extracts tools
5
5
  */
6
- import { ConstructorParam, PhotonClass, PhotonClassExtended, type InputProvider, type OutputHandler, type MCPClientFactory, type CallerInfo } from '@portel/photon-core';
6
+ import { ConstructorParam, PhotonClass, PhotonClassExtended, type InputProvider, type OutputHandler, type SamplingProvider, type MCPClientFactory, type CallerInfo } from '@portel/photon-core';
7
7
  import { Logger } from './shared/logger.js';
8
8
  /**
9
9
  * Clear any intermediate render output before printing final results.
@@ -34,6 +34,14 @@ export declare class PhotonLoader {
34
34
  private marketplaceManager?;
35
35
  private marketplaceManagerPromise?;
36
36
  private logger;
37
+ /**
38
+ * Per-instance call queue. Two tool invocations targeting the same photon
39
+ * instance are serialized: the second starts only after the first returns.
40
+ * Prevents lost-update and read-after-write races between methods that share
41
+ * state via `this.memory` or instance fields. Keyed on the instance object
42
+ * via WeakMap so hot-reload drops the queue automatically.
43
+ */
44
+ private _instanceCallTails;
37
45
  /** Per-middleware-name state stores (caches, throttle windows, queues, etc.) */
38
46
  private middlewareStates;
39
47
  /** Per-photon custom middleware definitions discovered from module exports */
@@ -322,10 +330,23 @@ export declare class PhotonLoader {
322
330
  resumeRunId?: string;
323
331
  outputHandler?: OutputHandler;
324
332
  inputProvider?: InputProvider;
333
+ /**
334
+ * MCP sampling provider — the runtime attaches this when the
335
+ * client supports `sampling`. Photons read it from the execution
336
+ * context via `this.sample()`.
337
+ */
338
+ samplingProvider?: SamplingProvider;
325
339
  caller?: CallerInfo;
326
340
  traceId?: string;
327
341
  parentTraceparent?: string;
328
342
  }): Promise<any>;
343
+ /**
344
+ * Serialize calls targeting the same photon instance. Concurrent callers
345
+ * queue behind the current in-flight call; each invocation gets an exclusive
346
+ * slot for the duration of its method body (including all awaits), so two
347
+ * methods that touch shared state via `this.memory` cannot interleave.
348
+ */
349
+ private _withInstanceGate;
329
350
  private _executeToolInner;
330
351
  private normalizeNestedParamsTool;
331
352
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
package/dist/loader.js CHANGED
@@ -164,6 +164,68 @@ function injectEmitHelpers(instance) {
164
164
  function detectEmitHelperUsage(source) {
165
165
  return /this\.(toast|log|status|progress|thinking)\s*\(/.test(source);
166
166
  }
167
+ /**
168
+ * Always-inject `this.sample`, `this.confirm`, and `this.elicit` on plain
169
+ * classes. Each pulls its provider out of the ALS execution context
170
+ * (set by the loader when it invokes a tool). User-defined methods on
171
+ * the class win — these wrappers only fill in when absent.
172
+ *
173
+ * Mirrors the Photon base class implementations in photon-core/base.ts,
174
+ * so a plain class and a class that extends Photon behave identically.
175
+ */
176
+ function injectSamplingAndElicitation(instance) {
177
+ if (!instance.confirm) {
178
+ instance.confirm = async (question) => {
179
+ const store = executionContext.getStore();
180
+ if (!store?.inputProvider) {
181
+ throw new Error('this.confirm() requires a connected MCP client that supports ' +
182
+ 'elicitation. None is attached to the current invocation.');
183
+ }
184
+ const result = await store.inputProvider({
185
+ ask: 'confirm',
186
+ question,
187
+ message: question,
188
+ });
189
+ return Boolean(result);
190
+ };
191
+ }
192
+ if (!instance.elicit) {
193
+ instance.elicit = async (params) => {
194
+ const store = executionContext.getStore();
195
+ if (!store?.inputProvider) {
196
+ throw new Error('this.elicit() requires a connected MCP client that supports ' +
197
+ 'elicitation. None is attached to the current invocation.');
198
+ }
199
+ return await store.inputProvider(params);
200
+ };
201
+ }
202
+ if (!instance.sample) {
203
+ instance.sample = async (params) => {
204
+ const store = executionContext.getStore();
205
+ if (!store?.samplingProvider) {
206
+ throw new Error('this.sample() requires the connected MCP client to declare the ' +
207
+ '`sampling` capability. None is available in this invocation.');
208
+ }
209
+ if (!params.prompt && !params.messages?.length) {
210
+ throw new Error('this.sample() requires either `prompt` or `messages`.');
211
+ }
212
+ const messages = params.messages ?? [
213
+ { role: 'user', content: { type: 'text', text: params.prompt } },
214
+ ];
215
+ const result = await store.samplingProvider({
216
+ messages,
217
+ systemPrompt: params.systemPrompt,
218
+ maxTokens: params.maxTokens ?? 1024,
219
+ temperature: params.temperature,
220
+ modelPreferences: params.modelPreferences,
221
+ stopSequences: params.stopSequences,
222
+ includeContext: params.includeContext,
223
+ });
224
+ const first = Array.isArray(result.content) ? result.content[0] : result.content;
225
+ return first?.type === 'text' ? first.text : '';
226
+ };
227
+ }
228
+ }
167
229
  /**
168
230
  * Render a formatted value in the CLI using @portel/cli's formatOutput.
169
231
  * Uses clear-and-replace semantics — each call overwrites the previous render.
@@ -230,6 +292,14 @@ export class PhotonLoader {
230
292
  marketplaceManager;
231
293
  marketplaceManagerPromise;
232
294
  logger;
295
+ /**
296
+ * Per-instance call queue. Two tool invocations targeting the same photon
297
+ * instance are serialized: the second starts only after the first returns.
298
+ * Prevents lost-update and read-after-write races between methods that share
299
+ * state via `this.memory` or instance fields. Keyed on the instance object
300
+ * via WeakMap so hot-reload drops the queue automatically.
301
+ */
302
+ _instanceCallTails = new WeakMap();
233
303
  // ════════════════════════════════════════════════════════════════════════════
234
304
  // MIDDLEWARE STATE
235
305
  // ════════════════════════════════════════════════════════════════════════════
@@ -695,6 +765,31 @@ export class PhotonLoader {
695
765
  instance.instanceName = options?.instanceName ?? '';
696
766
  // Inject file path for storage()/assets() resolution
697
767
  instance._photonFilePath = absolutePath;
768
+ // Inject schedule-unschedule hook so `this.schedule.cancel()` evicts
769
+ // the in-memory cron registration at the same time as unlinking
770
+ // the file. Prevents ghost schedule registrations — the scenario
771
+ // where a cancel + re-enable under the same name leaves the old
772
+ // cron firing in parallel with the new one until the next daemon
773
+ // restart. The hook is best-effort: if the daemon is unreachable
774
+ // the fire-time phantom-prune (daemon checks sourceFile before
775
+ // running) catches the ghost on its next tick.
776
+ const photonNameForSchedule = name;
777
+ const scheduleLogger = this.logger;
778
+ instance._scheduleUnscheduleHook = async (jobId) => {
779
+ try {
780
+ const { unscheduleJob } = await import('./daemon/client.js');
781
+ return await unscheduleJob(photonNameForSchedule, jobId);
782
+ }
783
+ catch (err) {
784
+ // Daemon unreachable or IPC failure — log loudly so operators
785
+ // notice. Phantom-prune (daemon checks sourceFile before
786
+ // running) still evicts the ghost on its next fire, but for
787
+ // low-frequency schedules that may be hours away. Returning
788
+ // false lets `schedule.cancel` surface the outcome too.
789
+ scheduleLogger.warn(`[schedule] failed to evict in-memory cron registration for ${photonNameForSchedule}:${jobId}`, { error: err instanceof Error ? err.message : String(err) });
790
+ return false;
791
+ }
792
+ };
698
793
  // Inject this.shell — execSync wrapper with cwd defaulted to the
699
794
  // photon's own folder. Shelling out from a photon method should run
700
795
  // from where the photon lives, not the daemon's cwd, so that
@@ -866,8 +961,18 @@ export class PhotonLoader {
866
961
  // Inject convenience helpers (render, toast, log, status, progress, thinking)
867
962
  injectEmitHelpers(instance);
868
963
  }
869
- if (caps.has('memory')) {
870
- // Inject lazy memory provider capture baseDir from loader context
964
+ // Always-inject lazy memory provider. The getter is a pure closure
965
+ // that constructs MemoryProvider on first access zero cost until
966
+ // used. Gating this on a regex (`detectCapabilities`) missed TS
967
+ // cast shapes with function-type parens like
968
+ // `(this as unknown as { memory: { set: (k: string) => void } })` —
969
+ // the classic TypeScript workaround when memory isn't on the
970
+ // declared class — and silently left `this.memory` undefined. That
971
+ // turned every `.memory.set(...)` call into a data-loss bug that
972
+ // only surfaced on daemon cold start.
973
+ // User-defined memory wins; `in` walks the prototype chain
974
+ // so Photon-base getters aren't silently shadowed.
975
+ if (!('memory' in instance)) {
871
976
  const memoryBaseDir = this.baseDir;
872
977
  Object.defineProperty(instance, 'memory', {
873
978
  get() {
@@ -915,6 +1020,13 @@ export class PhotonLoader {
915
1020
  return client;
916
1021
  };
917
1022
  }
1023
+ // Always-inject sample/confirm/elicit helpers. These read the
1024
+ // relevant provider from the ALS execution context the loader
1025
+ // populates when it invokes a tool. Injections are pure closures —
1026
+ // zero cost until the method uses them. Matches the always-inject
1027
+ // philosophy: detection-gate misses mean silent breakage, so don't
1028
+ // gate cheap capabilities. User-defined methods win.
1029
+ injectSamplingAndElicitation(instance);
918
1030
  // Always-inject caller getter. The prototype check preserves any
919
1031
  // user-defined getter on the class (e.g. Photon base class has its
920
1032
  // own) so we don't clobber.
@@ -955,8 +1067,10 @@ export class PhotonLoader {
955
1067
  },
956
1068
  };
957
1069
  }
958
- if (caps.has('instanceMeta')) {
959
- // Inject instance metadata (file-stat-based timestamps)
1070
+ // Always-inject instance metadata. One file-stat call per load is
1071
+ // cheap and avoids the same detection-gate trap as memory. User-
1072
+ // defined instanceMeta on the class wins.
1073
+ if (!instance.instanceMeta) {
960
1074
  const instanceName = options?.instanceName || 'default';
961
1075
  const stateFile = getInstanceStatePath(name, instanceName, this.baseDir);
962
1076
  try {
@@ -1359,7 +1473,8 @@ export class PhotonLoader {
1359
1473
  // Inject convenience helpers (render, toast, log, status, progress, thinking)
1360
1474
  injectEmitHelpers(instance);
1361
1475
  }
1362
- if (caps.has('memory')) {
1476
+ // Always-inject memory (see primary load path for rationale).
1477
+ if (!('memory' in instance)) {
1363
1478
  const memoryBaseDir = this.baseDir;
1364
1479
  Object.defineProperty(instance, 'memory', {
1365
1480
  get() {
@@ -1384,6 +1499,8 @@ export class PhotonLoader {
1384
1499
  return instance._callHandler(target.slice(0, dotIndex), target.slice(dotIndex + 1), params, opts?.instance);
1385
1500
  };
1386
1501
  }
1502
+ // Always-inject sample/confirm/elicit (see primary load path).
1503
+ injectSamplingAndElicitation(instance);
1387
1504
  }
1388
1505
  // Channel event capability: inject on()/off()/_dispatch()/_matchesFilter()
1389
1506
  // when source uses this._dispatch( — the universal channel dispatch pattern.
@@ -2902,7 +3019,7 @@ Run: photon mcp ${mcpName} --config
2902
3019
  resolvedParentTraceparent = metaPeek.traceparent;
2903
3020
  }
2904
3021
  }
2905
- return runWithRequestContext({
3022
+ const run = () => runWithRequestContext({
2906
3023
  photon: mcp.name,
2907
3024
  tool: toolName,
2908
3025
  traceId: options?.traceId,
@@ -2913,6 +3030,34 @@ Run: photon mcp ${mcpName} --config
2913
3030
  ...options,
2914
3031
  parentTraceparent: resolvedParentTraceparent,
2915
3032
  }));
3033
+ const gateKey = mcp.instance;
3034
+ if (!gateKey)
3035
+ return run();
3036
+ return this._withInstanceGate(gateKey, run);
3037
+ }
3038
+ /**
3039
+ * Serialize calls targeting the same photon instance. Concurrent callers
3040
+ * queue behind the current in-flight call; each invocation gets an exclusive
3041
+ * slot for the duration of its method body (including all awaits), so two
3042
+ * methods that touch shared state via `this.memory` cannot interleave.
3043
+ */
3044
+ async _withInstanceGate(instance, fn) {
3045
+ const prev = this._instanceCallTails.get(instance) ?? Promise.resolve();
3046
+ let release;
3047
+ const tail = new Promise((r) => {
3048
+ release = r;
3049
+ });
3050
+ this._instanceCallTails.set(instance, tail);
3051
+ try {
3052
+ await prev;
3053
+ return await fn();
3054
+ }
3055
+ finally {
3056
+ release();
3057
+ if (this._instanceCallTails.get(instance) === tail) {
3058
+ this._instanceCallTails.delete(instance);
3059
+ }
3060
+ }
2916
3061
  }
2917
3062
  async _executeToolInner(mcp, toolName, parameters, options) {
2918
3063
  // Start audit trail recording
@@ -3210,9 +3355,19 @@ Run: photon mcp ${mcpName} --config
3210
3355
  }
3211
3356
  let generatorFn = isStatic
3212
3357
  ? () => method.call(null, ...args)
3213
- : () => executionContext.run({
3358
+ : () => executionContext.run(
3359
+ // inputProvider and samplingProvider are attached to the ALS
3360
+ // store so photon-core's `this.confirm()`, `this.elicit()`,
3361
+ // and `this.sample()` can find them without every method
3362
+ // having to accept runtime plumbing as an argument. The
3363
+ // @portel/cli ExecutionContext type doesn't declare these
3364
+ // optional fields, so the object is cast through `unknown`;
3365
+ // photon-core reads them back with matching casts.
3366
+ {
3214
3367
  outputHandler: outputHandler,
3215
3368
  caller: options?.caller,
3369
+ inputProvider,
3370
+ samplingProvider: options?.samplingProvider,
3216
3371
  }, () => {
3217
3372
  return method.call(mcp.instance, ...args);
3218
3373
  });