@productbrain/cli 0.1.0-beta.5325 → 0.1.0-beta.5376
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/__tests__/client-binding-guard.test.d.ts +2 -0
- package/dist/__tests__/client-binding-guard.test.d.ts.map +1 -0
- package/dist/__tests__/client-binding-guard.test.js +84 -0
- package/dist/__tests__/client-binding-guard.test.js.map +1 -0
- package/dist/__tests__/migrate-setup-session-refusal.test.d.ts +2 -0
- package/dist/__tests__/migrate-setup-session-refusal.test.d.ts.map +1 -0
- package/dist/__tests__/migrate-setup-session-refusal.test.js +65 -0
- package/dist/__tests__/migrate-setup-session-refusal.test.js.map +1 -0
- package/dist/__tests__/read-target-notice.test.d.ts +2 -0
- package/dist/__tests__/read-target-notice.test.d.ts.map +1 -0
- package/dist/__tests__/read-target-notice.test.js +104 -0
- package/dist/__tests__/read-target-notice.test.js.map +1 -0
- package/dist/__tests__/session-resume-backstop.test.js +1 -1
- package/dist/__tests__/session-resume-backstop.test.js.map +1 -1
- package/dist/__tests__/session-start-key-refresh.test.js +1 -1
- package/dist/__tests__/session-start-key-refresh.test.js.map +1 -1
- package/dist/__tests__/session-switch.test.js +1 -1
- package/dist/__tests__/session-switch.test.js.map +1 -1
- package/dist/__tests__/workspaceNotice.test.js +121 -26
- package/dist/__tests__/workspaceNotice.test.js.map +1 -1
- package/dist/commands/capture.js +2 -2
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/migrate-setup.d.ts.map +1 -1
- package/dist/commands/migrate-setup.js +12 -10
- package/dist/commands/migrate-setup.js.map +1 -1
- package/dist/commands/organisation.test.js +1 -1
- package/dist/commands/organisation.test.js.map +1 -1
- package/dist/commands/organisationHierarchy.test.js +1 -1
- package/dist/commands/organisationHierarchy.test.js.map +1 -1
- package/dist/commands/organisationWrite.js +2 -2
- package/dist/commands/organisationWrite.js.map +1 -1
- package/dist/commands/promote.js +2 -2
- package/dist/commands/promote.js.map +1 -1
- package/dist/commands/relate.js +3 -3
- package/dist/commands/relate.js.map +1 -1
- package/dist/commands/restore.js +2 -2
- package/dist/commands/restore.js.map +1 -1
- package/dist/commands/session.js +2 -2
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/setup-ingest.d.ts.map +1 -1
- package/dist/commands/setup-ingest.js +3 -10
- package/dist/commands/setup-ingest.js.map +1 -1
- package/dist/commands/update.js +2 -2
- package/dist/commands/update.js.map +1 -1
- package/dist/lib/client.d.ts +3 -0
- package/dist/lib/client.d.ts.map +1 -1
- package/dist/lib/client.js +64 -76
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/sessionBinding.d.ts +3 -1
- package/dist/lib/sessionBinding.d.ts.map +1 -1
- package/dist/lib/sessionBinding.js +9 -2
- package/dist/lib/sessionBinding.js.map +1 -1
- package/dist/lib/workspaceNotice.d.ts +42 -13
- package/dist/lib/workspaceNotice.d.ts.map +1 -1
- package/dist/lib/workspaceNotice.js +96 -14
- package/dist/lib/workspaceNotice.js.map +1 -1
- package/package.json +1 -1
package/dist/lib/client.js
CHANGED
|
@@ -17,8 +17,10 @@ import { gatewayTimeoutError, isTimeoutAbort } from './gatewayTimeout.js';
|
|
|
17
17
|
// abort (WP-575 review). Split out under STD-2/DEC-1504; see ./kernelEnvelope.ts's header for
|
|
18
18
|
// why the seam is real and not a line-count dodge.
|
|
19
19
|
import { parseKernelEnvelope, recordLatestFromResponse } from './kernelEnvelope.js';
|
|
20
|
-
import { getConfig } from './config.js';
|
|
20
|
+
import { getConfig, resolveEffectiveProfile } from './config.js';
|
|
21
21
|
import { resolveAdminConfig } from './adminConfig.js';
|
|
22
|
+
import { isJsonMode } from './runner.js';
|
|
23
|
+
import { emitEffectiveTenantNotice } from './workspaceNotice.js';
|
|
22
24
|
import { readSession, readSessionBySessionId } from './session.js';
|
|
23
25
|
import { assertSessionStillBound } from './sessionBinding.js';
|
|
24
26
|
import { CLIError, ErrorCode } from './errors.js';
|
|
@@ -269,14 +271,44 @@ export async function adminCall(command, args) {
|
|
|
269
271
|
* the gateway defaults to `api` if it is ever absent.
|
|
270
272
|
*/
|
|
271
273
|
const PB_TELEMETRY_SOURCE = 'cli';
|
|
272
|
-
|
|
274
|
+
/**
|
|
275
|
+
* Resolve the session to check the binding guard against: the ambient marker, unless `args`
|
|
276
|
+
* names a DIFFERENT session explicitly (TEN-3315 — e.g. `pb rework report --conversation A`
|
|
277
|
+
* selects a session other than the ambient one, and judging the ambient marker there would
|
|
278
|
+
* judge the wrong session). No extra IO on the ordinary path: the lookup only runs when an
|
|
279
|
+
* explicit id names a session different from the ambient marker.
|
|
280
|
+
*/
|
|
281
|
+
function boundSessionFor(args) {
|
|
282
|
+
const session = readSession();
|
|
283
|
+
const explicitSessionId = typeof args.sessionId === 'string' ? args.sessionId : null;
|
|
284
|
+
return explicitSessionId && explicitSessionId !== session?.sessionId
|
|
285
|
+
? readSessionBySessionId(explicitSessionId)
|
|
286
|
+
: session;
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* The ONE gateway fetch every kernelCall path routes through (WP-711/712). Resolves config,
|
|
290
|
+
* runs the binding guard, POSTs to /api/aki, and returns the raw envelope.
|
|
291
|
+
*
|
|
292
|
+
* Before this slice only kernelCallWithSession ran assertSessionStillBound, so a moved tenant
|
|
293
|
+
* pin refused writes but not reads: `pb get`/`search`/`orient`/`context`/`brief`/`constellation`
|
|
294
|
+
* all go through plain kernelCall and silently followed a repointed pin. Two write commands
|
|
295
|
+
* (migrate-setup.ts, setup-ingest.ts) send their writes through plain kernelCall too and had
|
|
296
|
+
* each hand-duplicated the same guard call to cover that gap — exactly the "N copies of the pin
|
|
297
|
+
* cascade" shape WP-692's TEN-3239 warned about. Folding the check in here removes all three
|
|
298
|
+
* duplicates; every caller, read or write, now shares this one call site.
|
|
299
|
+
*/
|
|
300
|
+
async function fetchKernelEnvelope(fn, args, options) {
|
|
273
301
|
const { apiKey, siteUrl } = getConfig();
|
|
302
|
+
// The ONE guard call site. `resolveEffectiveProfile()` only runs inside the thunk, so it costs
|
|
303
|
+
// nothing on the ordinary (no session, or unchanged binding) path — it is invoked only once
|
|
304
|
+
// the guard has already decided to refuse.
|
|
305
|
+
assertSessionStillBound(boundSessionFor(args), undefined, () => resolveEffectiveProfile().profile ?? undefined);
|
|
274
306
|
const label = spinnerLabel(fn);
|
|
275
307
|
const budgetMs = latencyBudgetMsForRoute(fn);
|
|
276
308
|
// Spinner OUTSIDE the retry: withSpinner reports a terminal `— failed` line on any throw,
|
|
277
309
|
// so a spinner per attempt would paint up to MAX_RATE_LIMIT_RETRIES false failures for a
|
|
278
310
|
// call that ultimately succeeds, then sit silent through each Retry-After wait.
|
|
279
|
-
|
|
311
|
+
const envelope = await withSpinner(label, () => maybeRetry(async () => {
|
|
280
312
|
let res;
|
|
281
313
|
try {
|
|
282
314
|
res = await fetch(`${siteUrl}/api/aki`, {
|
|
@@ -294,12 +326,21 @@ export async function kernelCall(fn, args = {}, options) {
|
|
|
294
326
|
catch (err) {
|
|
295
327
|
rethrowWithGuidance(err, siteUrl, { fn, budgetMs, args });
|
|
296
328
|
}
|
|
297
|
-
const
|
|
298
|
-
if (!res.ok ||
|
|
299
|
-
throw new McpError(
|
|
329
|
+
const parsed = await parseKernelEnvelope(res, { fn, budgetMs, args });
|
|
330
|
+
if (!res.ok || parsed.ok === false) {
|
|
331
|
+
throw new McpError(parsed.message || parsed.error || res.statusText, parsed.code, parsed.details, parsed.retryAfterSeconds);
|
|
300
332
|
}
|
|
301
|
-
return
|
|
333
|
+
return parsed;
|
|
302
334
|
}, options));
|
|
335
|
+
// apiKey/siteUrl travel out alongside the envelope (PR #810 review, Copilot) — kernelCallWithSession
|
|
336
|
+
// needs them AFTER this resolves, for the post-write touch. Returning them here means getConfig()
|
|
337
|
+
// is called exactly ONCE per kernelCall*, never re-resolved by a caller that already has them.
|
|
338
|
+
return { envelope, apiKey, siteUrl };
|
|
339
|
+
}
|
|
340
|
+
export async function kernelCall(fn, args = {}, options) {
|
|
341
|
+
const { envelope } = await fetchKernelEnvelope(fn, args, options);
|
|
342
|
+
await emitEffectiveTenantNotice(isJsonMode()); // WP-714 S3: the read path announces too (once/process).
|
|
343
|
+
return envelope.data;
|
|
303
344
|
}
|
|
304
345
|
/**
|
|
305
346
|
* kernelCall variant that returns the full kernel envelope (data + summary + _meta) instead
|
|
@@ -309,32 +350,9 @@ export async function kernelCall(fn, args = {}, options) {
|
|
|
309
350
|
* shape — the reason `_meta` exists as a side-channel at all (convex/lib/envelopeContract.ts).
|
|
310
351
|
*/
|
|
311
352
|
export async function kernelCallEnvelope(fn, args = {}, options) {
|
|
312
|
-
const {
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
return withSpinner(label, () => maybeRetry(async () => {
|
|
316
|
-
let res;
|
|
317
|
-
try {
|
|
318
|
-
res = await fetch(`${siteUrl}/api/aki`, {
|
|
319
|
-
method: 'POST',
|
|
320
|
-
signal: AbortSignal.timeout(budgetMs),
|
|
321
|
-
headers: {
|
|
322
|
-
'Content-Type': 'application/json',
|
|
323
|
-
Authorization: `Bearer ${apiKey}`,
|
|
324
|
-
'x-pb-source': PB_TELEMETRY_SOURCE,
|
|
325
|
-
},
|
|
326
|
-
body: JSON.stringify({ fn, args }),
|
|
327
|
-
});
|
|
328
|
-
}
|
|
329
|
-
catch (err) {
|
|
330
|
-
rethrowWithGuidance(err, siteUrl, { fn, budgetMs, args });
|
|
331
|
-
}
|
|
332
|
-
const envelope = await parseKernelEnvelope(res, { fn, budgetMs, args });
|
|
333
|
-
if (!res.ok || envelope.ok === false) {
|
|
334
|
-
throw new McpError(envelope.message || envelope.error || res.statusText, envelope.code, envelope.details, envelope.retryAfterSeconds);
|
|
335
|
-
}
|
|
336
|
-
return { data: envelope.data, summary: envelope.summary, _meta: envelope._meta };
|
|
337
|
-
}, options));
|
|
353
|
+
const { envelope } = await fetchKernelEnvelope(fn, args, options);
|
|
354
|
+
await emitEffectiveTenantNotice(isJsonMode()); // WP-714 S3: the read path announces too (once/process).
|
|
355
|
+
return { data: envelope.data, summary: envelope.summary, _meta: envelope._meta };
|
|
338
356
|
}
|
|
339
357
|
/**
|
|
340
358
|
* Raw fetch to the gateway — no spinner, swallows errors.
|
|
@@ -367,6 +385,9 @@ async function mcpFetchRaw(fn, args, apiKey, siteUrl) {
|
|
|
367
385
|
* `X-Agent-Session-Id` header).
|
|
368
386
|
* All write commands (update, relate, unrelate, capture) should use this.
|
|
369
387
|
*
|
|
388
|
+
* WP-711/712: the binding guard itself now lives in the shared fetchKernelEnvelope, reached by
|
|
389
|
+
* every kernelCall path — this function only adds the post-write session-touch on top.
|
|
390
|
+
*
|
|
370
391
|
* After a successful write, fires a non-blocking `agent.touchSession` call to
|
|
371
392
|
* renew the session TTL — mirroring MCP server behavior (DEC-299, BET-181 Slice 1).
|
|
372
393
|
* The touch is fire-and-forget: it does not block the write response, and errors
|
|
@@ -374,50 +395,17 @@ async function mcpFetchRaw(fn, args, apiKey, siteUrl) {
|
|
|
374
395
|
* the write itself fails.
|
|
375
396
|
*/
|
|
376
397
|
export async function kernelCallWithSession(fn, args = {}, options) {
|
|
377
|
-
|
|
398
|
+
// Ambient session, for the post-write touch below — deliberately NOT `boundSessionFor(args)`:
|
|
399
|
+
// the touch always renews the marker actually in play locally, regardless of which session an
|
|
400
|
+
// explicit `sessionId` in `args` asked the guard to validate against.
|
|
378
401
|
const session = readSession();
|
|
379
|
-
//
|
|
380
|
-
//
|
|
381
|
-
//
|
|
382
|
-
//
|
|
383
|
-
//
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
const explicitSessionId = typeof args.sessionId === 'string' ? args.sessionId : null;
|
|
387
|
-
const bound = explicitSessionId && explicitSessionId !== session?.sessionId
|
|
388
|
-
? readSessionBySessionId(explicitSessionId)
|
|
389
|
-
: session;
|
|
390
|
-
assertSessionStillBound(bound);
|
|
391
|
-
const label = spinnerLabel(fn);
|
|
392
|
-
const headers = {
|
|
393
|
-
'Content-Type': 'application/json',
|
|
394
|
-
Authorization: `Bearer ${apiKey}`,
|
|
395
|
-
// DEC-1207: attribute this connector for the gateway's context.served seam.
|
|
396
|
-
'x-pb-source': PB_TELEMETRY_SOURCE,
|
|
397
|
-
};
|
|
398
|
-
// WP-575 + WP-579 compose deliberately: the budget is derived ONCE per route, but the
|
|
399
|
-
// AbortSignal is created inside the retried callback, so each 429 retry attempt gets its
|
|
400
|
-
// own full budget rather than sharing one deadline across all attempts.
|
|
401
|
-
const budgetMs = latencyBudgetMsForRoute(fn);
|
|
402
|
-
const result = await withSpinner(label, () => maybeRetry(async () => {
|
|
403
|
-
let res;
|
|
404
|
-
try {
|
|
405
|
-
res = await fetch(`${siteUrl}/api/aki`, {
|
|
406
|
-
method: 'POST',
|
|
407
|
-
signal: AbortSignal.timeout(budgetMs),
|
|
408
|
-
headers,
|
|
409
|
-
body: JSON.stringify({ fn, args }),
|
|
410
|
-
});
|
|
411
|
-
}
|
|
412
|
-
catch (err) {
|
|
413
|
-
rethrowWithGuidance(err, siteUrl, { fn, budgetMs, args });
|
|
414
|
-
}
|
|
415
|
-
const envelope = await parseKernelEnvelope(res, { fn, budgetMs, args });
|
|
416
|
-
if (!res.ok || envelope.ok === false) {
|
|
417
|
-
throw new McpError(envelope.message || envelope.error || res.statusText, envelope.code, envelope.details, envelope.retryAfterSeconds);
|
|
418
|
-
}
|
|
419
|
-
return envelope.data;
|
|
420
|
-
}, options));
|
|
402
|
+
// apiKey/siteUrl come back FROM fetchKernelEnvelope rather than a second getConfig() call here
|
|
403
|
+
// (PR #810 review, Copilot): the old code called getConfig() once here and again inside the
|
|
404
|
+
// shared fetch, so the touch below could in principle read a different resolution than the
|
|
405
|
+
// write it is renewing. Reusing the pair fetchKernelEnvelope already resolved makes that
|
|
406
|
+
// impossible by construction, not just unlikely.
|
|
407
|
+
const { envelope, apiKey, siteUrl } = await fetchKernelEnvelope(fn, args, options);
|
|
408
|
+
const result = envelope.data;
|
|
421
409
|
// Fire-and-forget session touch — best-effort, never blocks the write response.
|
|
422
410
|
// Uses mcpFetchRaw (not kernelCall) to avoid recursion and suppress the visible spinner
|
|
423
411
|
// that would appear if kernelCall were used here (background ops are silent noise).
|
package/dist/lib/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,uFAAuF;AACvF,sFAAsF;AACtF,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1E,4FAA4F;AAC5F,8FAA8F;AAC9F,mDAAmD;AACnD,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAEpF,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAA0B,MAAM,iBAAiB,CAAC;AAGzF;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,IAAa;IACtC,IAAI,CAAC,IAAI;QAAE,OAAO,UAAU,CAAC;IAC7B,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,cAAc;QAAE,OAAO,MAAM,CAAC;IACtE,IACE,IAAI,KAAK,mBAAmB;QAC5B,IAAI,KAAK,sBAAsB;QAC/B,IAAI,KAAK,wBAAwB;QACjC,IAAI,KAAK,+BAA+B;QACxC,sFAAsF;QACtF,uFAAuF;QACvF,gFAAgF;QAChF,IAAI,KAAK,uBAAuB;QAChC,6EAA6E;QAC7E,wFAAwF;QACxF,IAAI,KAAK,uBAAuB;QAChC,IAAI,KAAK,qBAAqB;QAC9B,wFAAwF;QACxF,+EAA+E;QAC/E,IAAI,KAAK,4BAA4B;QACrC,qFAAqF;QACrF,+EAA+E;QAC/E,8BAA8B;QAC9B,IAAI,KAAK,yBAAyB;QAClC,OAAO,YAAY,CAAC;IACtB,IAAI,IAAI,KAAK,kBAAkB;QAAE,OAAO,SAAS,CAAC;IAClD,sFAAsF;IACtF,oFAAoF;IACpF,wBAAwB;IACxB,IAAI,IAAI,KAAK,cAAc;QAAE,OAAO,SAAS,CAAC;IAC9C,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAa;IACtC,2EAA2E;IAC3E,mEAAmE;IACnE,wFAAwF;IACxF,2FAA2F;IAC3F,2FAA2F;IAC3F,8EAA8E;IAC9E,oEAAoE;IACpE,IAAI,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC,WAAW,CAAC;IAC7D,OAAQ,IAAmC,IAAI,SAAS,CAAC,QAAQ,CAAC;AACnE,CAAC;AAED,kGAAkG;AAClG,MAAM,OAAO,QAAS,SAAQ,QAAQ;IACpC,OAAO,CAA2B;IAClC,sFAAsF;IACtF,iBAAiB,CAAU;IAE3B,YAAY,OAAe,EAAE,IAAa,EAAE,OAAiC,EAAE,iBAA0B;QACvG,KAAK,CAAC,OAAO,EAAE;YAChB,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC;YACzB,QAAQ,EAAE,iBAAiB,CAAC,IAAI,CAAC;YACjC,iFAAiF;YACjF,gFAAgF;YAChF,oCAAoC;YACpC,QAAQ,EAAE,IAAI,KAAK,cAAc;gBAC/B,CAAC,CAAC,sLAAsL;gBACxL,CAAC,CAAC,SAAS;SACd,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC7C,CAAC;CACF;AAED,8EAA8E;AAC9E,0FAA0F;AAC1F,OAAO,EAAE,kBAAkB,EAA0B,MAAM,iBAAiB,CAAC;AAO7E,qEAAqE;AACrE,2EAA2E;AAC3E,yEAAyE;AACzE,iDAAiD;AACjD,IAAI,CAAC;IACH,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IAClE,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,EAAE,UAAU,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnE,mBAAmB,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAAC,MAAM,CAAC;IACP,8EAA8E;AAChF,CAAC;AAED,yEAAyE;AACzE,SAAS,mBAAmB,CAC1B,GAAY,EACZ,OAAe;AACf,yFAAyF;AACzF,sFAAsF;AACtF,gGAAgG;AAChG,KAAwD;IAExD,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAE7D,2FAA2F;IAC3F,wFAAwF;IACxF,IAAI,KAAK,IAAI,cAAc,CAAC,GAAG,CAAC;QAAE,MAAM,mBAAmB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAElG,IAAI,GAAG,KAAK,cAAc,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACxF,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;QACvC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QACjE,MAAM,SAAS,GAAG,KAAK;YACrB,CAAC,CAAC,0BAA0B,KAAK,0CAA0C;gBACzE,gEAAgE;gBAChE,+DAA+D;YACjE,CAAC,CAAC,oFAAoF;gBACpF,uDAAuD;gBACvD,aAAa,IAAI,wCAAwC;gBACzD,qDAAqD;gBACrD,uEAAuE,CAAC;QAC5E,MAAM,IAAI,QAAQ,CAAC,mBAAmB,IAAI,GAAG,EAAE;YAC7C,IAAI,EAAE,SAAS,CAAC,mBAAmB;YACnC,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;IACL,CAAC;IACD,MAAM,GAAG,CAAC;AACZ,CAAC;AAOD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAc,EACd,OAAe,EACf,SAAS,GAAG,uBAAuB,CAAC,kBAAkB,CAAC;IAEvD,OAAO,WAAW,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;QAE9D,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,UAAU,EAAE;gBAC5C,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,MAAM,EAAE;iBAClC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;gBAC1D,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,4GAA4G;YAC5G,wBAAwB,CAAC,GAAG,CAAC,CAAC;YAE9B,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC7C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;YACrD,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAmB,GAAG,CAAC,CAAC;YAElE,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;gBACrC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,KAAK,IAAI,iBAAiB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;YACvG,CAAC;YAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,IAAI,SAAS,EAAE,CAAC;QACvE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,sEAAsE;YACtE,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,cAAc,GAA2B;IAC7C,MAAM,EAAE,4BAA4B;IACpC,aAAa,EAAE,eAAe;IAC9B,gBAAgB,EAAE,mBAAmB;IACrC,gBAAgB,EAAE,gBAAgB;IAClC,gBAAgB,EAAE,gBAAgB;IAClC,eAAe,EAAE,oBAAoB;IACrC,iBAAiB,EAAE,mBAAmB;IACtC,cAAc,EAAE,kBAAkB;IAClC,oBAAoB,EAAE,kBAAkB;IACxC,oBAAoB,EAAE,iBAAiB;IACvC,oBAAoB,EAAE,oBAAoB;IAC1C,gBAAgB,EAAE,qBAAqB;IACvC,iBAAiB,EAAE,UAAU;IAC7B,OAAO,EAAE,iBAAiB;IAC1B,gBAAgB,EAAE,mBAAmB;IACrC,kBAAkB,EAAE,mBAAmB;IACvC,aAAa,EAAE,uBAAuB;IACtC,gBAAgB,EAAE,wBAAwB;IAC1C,mBAAmB,EAAE,mBAAmB;IACxC,mBAAmB,EAAE,2BAA2B;CACjD,CAAC;AAEF,mEAAmE;AACnE,MAAM,UAAU,YAAY,CAAC,EAAU;IACrC,OAAO,cAAc,CAAC,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;AACnE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAe,EACf,IAA8B;IAE9B,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,kBAAkB,EAAE,CAAC;IAEjD,yFAAyF;IACzF,sFAAsF;IACtF,2FAA2F;IAC3F,2FAA2F;IAC3F,uFAAuF;IACvF,yFAAyF;IACzF,mEAAmE;IACnE,4FAA4F;IAC5F,yFAAyF;IACzF,+FAA+F;IAC/F,IAAI,GAAa,CAAC;IAClB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,YAAY,EAAE;YACxC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,MAAM,EAAE;aAClC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;SACxC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC;IAEG,MAAM,QAAQ,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAsF,CAAC;IAC/I,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,QAAQ,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,KAAK,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,sBAAsB,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IACtH,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB,CAAC;AAED;;;;GAIG;AACH,MAAM,mBAAmB,GAAG,KAAK,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,EAAU,EACV,OAAgC,EAAE,EAClC,OAA2B;IAE3B,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,uBAAuB,CAAC,EAAE,CAAC,CAAC;IAE7C,0FAA0F;IAC1F,yFAAyF;IACzF,gFAAgF;IAChF,OAAO,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE;QACpD,IAAI,GAAa,CAAC;QAClB,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,UAAU,EAAE;gBACtC,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACrC,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,MAAM,EAAE;oBACjC,4EAA4E;oBAC5E,aAAa,EAAE,mBAAmB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;aACnC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAI,GAAG,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;YACrC,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,KAAK,IAAI,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QACxI,CAAC;QACD,OAAO,QAAQ,CAAC,IAAS,CAAC;IAC5B,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,EAAU,EACV,OAAgC,EAAE,EAClC,OAA2B;IAE3B,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,uBAAuB,CAAC,EAAE,CAAC,CAAC;IAE7C,OAAO,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE;QACpD,IAAI,GAAa,CAAC;QAClB,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,UAAU,EAAE;gBACtC,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACrC,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,MAAM,EAAE;oBACjC,aAAa,EAAE,mBAAmB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;aACnC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAI,GAAG,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;YACrC,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,KAAK,IAAI,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QACxI,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxF,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,WAAW,CACxB,EAAU,EACV,IAA6B,EAC7B,MAAc,EACd,OAAe;IAEf,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,GAAG,OAAO,UAAU,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,sFAAsF;YACtF,iFAAiF;YACjF,kFAAkF;YAClF,8DAA8D;YAC9D,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;YACxD,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,MAAM,EAAE;aAClC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;SACnC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,4CAA4C;IAC9C,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,EAAU,EACV,OAAgC,EAAE,EAClC,OAA2B;IAE3B,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAC;IACxC,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,oFAAoF;IACpF,+FAA+F;IAC/F,+FAA+F;IAC/F,6FAA6F;IAC7F,gGAAgG;IAChG,+FAA+F;IAC/F,mCAAmC;IACnC,MAAM,iBAAiB,GAAG,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IACrF,MAAM,KAAK,GAAG,iBAAiB,IAAI,iBAAiB,KAAK,OAAO,EAAE,SAAS;QACzE,CAAC,CAAC,sBAAsB,CAAC,iBAAiB,CAAC;QAC3C,CAAC,CAAC,OAAO,CAAC;IACZ,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;IAE/B,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,aAAa,EAAE,UAAU,MAAM,EAAE;QACjC,4EAA4E;QAC5E,aAAa,EAAE,mBAAmB;KACnC,CAAC;IAEF,sFAAsF;IACtF,yFAAyF;IACzF,wEAAwE;IACxE,MAAM,QAAQ,GAAG,uBAAuB,CAAC,EAAE,CAAC,CAAC;IAE7C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAI,KAAK,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE;QACrE,IAAI,GAAa,CAAC;QAClB,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,UAAU,EAAE;gBACtC,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACrC,OAAO;gBACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;aACnC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAI,GAAG,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;YACrC,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,KAAK,IAAI,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QACxI,CAAC;QACD,OAAO,QAAQ,CAAC,IAAS,CAAC;IAC5B,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IAEb,gFAAgF;IAChF,wFAAwF;IACxF,oFAAoF;IACpF,sFAAsF;IACtF,wFAAwF;IACxF,yFAAyF;IACzF,qFAAqF;IACrF,qEAAqE;IACrE,IAAI,CAAC,OAAO,EAAE,gBAAgB,IAAI,OAAO,EAAE,SAAS,IAAI,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9F,KAAK,WAAW,CAAC,oBAAoB,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5F,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -55,5 +55,7 @@ export declare function bindingChanged(existing: Pick<SessionState, 'profile' |
|
|
|
55
55
|
*/
|
|
56
56
|
export declare function assertSessionStillBound(session: {
|
|
57
57
|
bindingFingerprint?: string;
|
|
58
|
-
|
|
58
|
+
workspaceName?: string;
|
|
59
|
+
profile?: string;
|
|
60
|
+
} | null, current?: string | undefined, describeCurrent?: () => string | undefined): void;
|
|
59
61
|
//# sourceMappingURL=sessionBinding.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionBinding.d.ts","sourceRoot":"","sources":["../../src/lib/sessionBinding.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,SAAS,CAGvD;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAS9E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,oBAAoB,CAAC,EAC9D,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GACnE,OAAO,CAqBT;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE;IAAE,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"sessionBinding.d.ts","sourceRoot":"","sources":["../../src/lib/sessionBinding.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,SAAS,CAGvD;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAS9E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,oBAAoB,CAAC,EAC9D,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GACnE,OAAO,CAqBT;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE;IAAE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EAGzF,OAAO,GAAE,MAAM,GAAG,SAAgC,EAKlD,eAAe,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,GACzC,IAAI,CAmBN"}
|
|
@@ -99,7 +99,12 @@ export function bindingChanged(existing, current) {
|
|
|
99
99
|
export function assertSessionStillBound(session,
|
|
100
100
|
// Injectable for the same reason `fingerprintOf` takes arguments: a test must not mutate the
|
|
101
101
|
// shared process env to set this up (see that function's note).
|
|
102
|
-
current = fingerprintBinding()
|
|
102
|
+
current = fingerprintBinding(),
|
|
103
|
+
// WP-711/712: names the tenant CURRENTLY in play, for the refusal message only. A thunk, not
|
|
104
|
+
// a plain value — resolving it (e.g. via config.ts's resolveEffectiveProfile) can mean a local
|
|
105
|
+
// file read, and this function stays pure/offline on every PASSING call by invoking it only
|
|
106
|
+
// once it has already decided to refuse. Never called when nothing is bound or the two agree.
|
|
107
|
+
describeCurrent) {
|
|
103
108
|
// Nothing bound, or a match: nothing to object to.
|
|
104
109
|
if (!session || !current || current === session.bindingFingerprint)
|
|
105
110
|
return;
|
|
@@ -109,7 +114,9 @@ current = fingerprintBinding()) {
|
|
|
109
114
|
// (Codex P1 r15). Letting that through was the bigger hole of the two: `pb relate` sends no
|
|
110
115
|
// session id, so nothing downstream re-checks. `pb session start` restarts it once and stamps a
|
|
111
116
|
// fingerprint, after which this never fires again.
|
|
112
|
-
|
|
117
|
+
const expected = session.workspaceName || session.profile || "the session's workspace";
|
|
118
|
+
const found = describeCurrent?.() || 'a different, unrecorded workspace';
|
|
119
|
+
throw new CLIError(`The workspace credential changed after this session started — expected "${expected}", found "${found}" — so this call would land in a different workspace than the session belongs to.`, {
|
|
113
120
|
code: ErrorCode.SESSION_REQUIRED,
|
|
114
121
|
category: 'session',
|
|
115
122
|
guidance: 'Run `pb session start` to open a session against the current workspace.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionBinding.js","sourceRoot":"","sources":["../../src/lib/sessionBinding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGlD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAC7C,OAAO,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3E,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW,EAAE,OAA2B;IACpE,4FAA4F;IAC5F,+FAA+F;IAC/F,8FAA8F;IAC9F,wFAAwF;IACxF,8FAA8F;IAC9F,qFAAqF;IACrF,MAAM,UAAU,GAAG,CAAC,OAAO,IAAI,gBAAgB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACpE,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACxF,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,cAAc,CAC5B,QAA8D,EAC9D,OAAoE;IAEpE,MAAM,eAAe,GAAG,OAAO,CAC7B,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAC5E,CAAC;IACF,MAAM,kBAAkB,GAAG,OAAO,CAChC,QAAQ,CAAC,kBAAkB,IAAI,OAAO,CAAC,WAAW,IAAI,QAAQ,CAAC,kBAAkB,KAAK,OAAO,CAAC,WAAW,CAC1G,CAAC;IACF,iGAAiG;IACjG,oFAAoF;IACpF,kEAAkE;IAClE,EAAE;IACF,iGAAiG;IACjG,wFAAwF;IACxF,8FAA8F;IAC9F,2DAA2D;IAC3D,EAAE;IACF,2FAA2F;IAC3F,2FAA2F;IAC3F,oFAAoF;IACpF,MAAM,UAAU,GAAG,CAAC,QAAQ,CAAC,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAChF,OAAO,eAAe,IAAI,kBAAkB,IAAI,UAAU,CAAC;AAC7D,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,uBAAuB,CACrC,
|
|
1
|
+
{"version":3,"file":"sessionBinding.js","sourceRoot":"","sources":["../../src/lib/sessionBinding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGlD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAC7C,OAAO,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3E,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW,EAAE,OAA2B;IACpE,4FAA4F;IAC5F,+FAA+F;IAC/F,8FAA8F;IAC9F,wFAAwF;IACxF,8FAA8F;IAC9F,qFAAqF;IACrF,MAAM,UAAU,GAAG,CAAC,OAAO,IAAI,gBAAgB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACpE,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACxF,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,cAAc,CAC5B,QAA8D,EAC9D,OAAoE;IAEpE,MAAM,eAAe,GAAG,OAAO,CAC7B,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAC5E,CAAC;IACF,MAAM,kBAAkB,GAAG,OAAO,CAChC,QAAQ,CAAC,kBAAkB,IAAI,OAAO,CAAC,WAAW,IAAI,QAAQ,CAAC,kBAAkB,KAAK,OAAO,CAAC,WAAW,CAC1G,CAAC;IACF,iGAAiG;IACjG,oFAAoF;IACpF,kEAAkE;IAClE,EAAE;IACF,iGAAiG;IACjG,wFAAwF;IACxF,8FAA8F;IAC9F,2DAA2D;IAC3D,EAAE;IACF,2FAA2F;IAC3F,2FAA2F;IAC3F,oFAAoF;IACpF,MAAM,UAAU,GAAG,CAAC,QAAQ,CAAC,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAChF,OAAO,eAAe,IAAI,kBAAkB,IAAI,UAAU,CAAC;AAC7D,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAyF;AACzF,6FAA6F;AAC7F,gEAAgE;AAChE,UAA8B,kBAAkB,EAAE;AAClD,6FAA6F;AAC7F,+FAA+F;AAC/F,4FAA4F;AAC5F,8FAA8F;AAC9F,eAA0C;IAE1C,mDAAmD;IACnD,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,OAAO,CAAC,kBAAkB;QAAE,OAAO;IAC3E,6FAA6F;IAC7F,+FAA+F;IAC/F,iGAAiG;IACjG,4FAA4F;IAC5F,gGAAgG;IAChG,mDAAmD;IACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,OAAO,IAAI,yBAAyB,CAAC;IACvF,MAAM,KAAK,GAAG,eAAe,EAAE,EAAE,IAAI,mCAAmC,CAAC;IACzE,MAAM,IAAI,QAAQ,CAChB,2EAA2E,QAAQ,aAAa,KAAK,mFAAmF,EACxL;QACE,IAAI,EAAE,SAAS,CAAC,gBAAgB;QAChC,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,yEAAyE;KACpF,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* WP-1 — Loud workspace identity on every Chain write.
|
|
2
|
+
* WP-1 — Loud workspace identity on every Chain write. WP-714 S3 extended this to every
|
|
3
|
+
* Chain READ too (see `emitEffectiveTenantNotice`'s doc comment below for the read-path wiring).
|
|
3
4
|
*
|
|
4
5
|
* Running `pb` from a directory with no repo pin (e.g. `~/`) silently resolves the
|
|
5
6
|
* GLOBAL profile and writes to whichever Chain that points at — proven live: captures
|
|
6
|
-
* meant for one workspace landed on another. This module makes every Chain write
|
|
7
|
-
* its target workspace on stderr, and qualifies the line LOUDLY when the binding is an
|
|
8
|
-
* unpinned fallback (`global`/`default` — no repo pin) so a wrong-Chain
|
|
7
|
+
* meant for one workspace landed on another. This module makes every Chain read or write
|
|
8
|
+
* NAME its target workspace on stderr, and qualifies the line LOUDLY when the binding is an
|
|
9
|
+
* unpinned fallback (`global`/`default` — no repo pin) so a wrong-Chain call is never
|
|
9
10
|
* silent. An explicit binding (`local`/`env`) gets a plain, non-alarming line.
|
|
10
11
|
*
|
|
11
12
|
* Label source — the PROFILE SLUG only, via `resolveReportedProfile()`: it returns
|
|
@@ -31,16 +32,32 @@
|
|
|
31
32
|
* - The gate is the `json` flag alone — not `--quiet`: a quiet human run still names its
|
|
32
33
|
* target Chain.
|
|
33
34
|
*
|
|
34
|
-
* SSOT: one pure formatter + one thin emitter
|
|
35
|
-
*
|
|
35
|
+
* SSOT: one pure formatter + one thin emitter — called explicitly from the 7 write-command
|
|
36
|
+
* files (8 call sites) and once per process from the shared read-path kernel wrapper
|
|
37
|
+
* (`client.ts`'s `kernelCall`/`kernelCallEnvelope`) — no per-command copy-paste.
|
|
36
38
|
*/
|
|
37
39
|
import { type ReportedProfileSource } from './reportedProfile.js';
|
|
40
|
+
/** A repo-local pin that disagrees with the globally active `pb` profile (WP-714 S3). */
|
|
41
|
+
export interface TenantDisagreement {
|
|
42
|
+
/** The repo-local `.productbrain/config.local.json` pin — what THIS process actually uses. */
|
|
43
|
+
local: string;
|
|
44
|
+
/** The globally active profile — what `pb whoami` reports outside a pinned repo. */
|
|
45
|
+
global: string;
|
|
46
|
+
}
|
|
38
47
|
/** Inputs to the pure notice formatter. */
|
|
39
|
-
export interface
|
|
48
|
+
export interface EffectiveTenantNoticeInput {
|
|
40
49
|
/** Effective profile name (the configured pin / identity), or null when unconfigured. */
|
|
41
50
|
profile: string | null;
|
|
42
51
|
/** Where that profile came from — see resolveReportedProfile(). */
|
|
43
52
|
source: ReportedProfileSource;
|
|
53
|
+
/**
|
|
54
|
+
* WP-714 S3: set only when a repo-local pin disagrees with the globally active profile.
|
|
55
|
+
* `null`/`undefined` covers both "no repo-local pin" and "local and global agree" — in
|
|
56
|
+
* either case there is nothing to flag, and the base announcement above is unconditional
|
|
57
|
+
* either way (including the both-wrong case: local and global pinned to the SAME wrong
|
|
58
|
+
* tenant still announces that tenant, just without this second line).
|
|
59
|
+
*/
|
|
60
|
+
disagreement?: TenantDisagreement | null;
|
|
44
61
|
}
|
|
45
62
|
/**
|
|
46
63
|
* Build the one-line target-workspace notice — or null when there is nothing to say.
|
|
@@ -61,10 +78,20 @@ export interface WriteTargetNoticeInput {
|
|
|
61
78
|
* Pure: no IO. The display label is the profile slug — a single resolution path, so the
|
|
62
79
|
* label and the qualifier can never contradict each other.
|
|
63
80
|
*/
|
|
64
|
-
export declare function
|
|
81
|
+
export declare function formatEffectiveTenantNotice({ profile, source, disagreement }: EffectiveTenantNoticeInput): string | null;
|
|
82
|
+
/** Test-only: reset the once-per-process guard between cases (mirrors resetReportedProfileSnapshot). */
|
|
83
|
+
export declare function resetEffectiveTenantNoticeForTests(): void;
|
|
65
84
|
/**
|
|
66
|
-
* Resolve identity and write the target notice to STDERR
|
|
67
|
-
*
|
|
85
|
+
* Resolve identity and write the target notice to STDERR — for every Chain read OR write.
|
|
86
|
+
* Pass the SAME `json` value the caller computed (e.g. `isJsonMode() || options.json ===
|
|
87
|
+
* true`). WP-714 S3: originally called only from the 8 explicit write call sites; now ALSO
|
|
88
|
+
* called once per process from `client.ts`'s `kernelCall`/`kernelCallEnvelope` (the plain,
|
|
89
|
+
* non-session read path), so every read command that reaches the kernel announces too.
|
|
90
|
+
* Deliberately NOT wired into `kernelCallWithSession` (the write path): every write command
|
|
91
|
+
* already calls this explicitly, earlier in its own flow than any plain `kernelCall` it
|
|
92
|
+
* might also make (e.g. `update`'s post-write `chain.getEntry` refresh) — the
|
|
93
|
+
* once-per-process guard just makes that later plain call's attempt a no-op instead of a
|
|
94
|
+
* duplicate line, so write-command output is unchanged bit-for-bit.
|
|
68
95
|
*
|
|
69
96
|
* `json` suppresses only the PLAIN line for an explicit binding. The unpinned-fallback
|
|
70
97
|
* WARNING is never suppressed (TEN-3238): `--json` is how agents invoke pb, and agents are
|
|
@@ -74,10 +101,12 @@ export declare function formatWriteTargetNotice({ profile, source }: WriteTarget
|
|
|
74
101
|
* strict JSON on stdout stays byte-for-byte unchanged either way (and the CLI already writes
|
|
75
102
|
* unconditional stderr warnings elsewhere, e.g. the preview-scrub misroute in config.ts).
|
|
76
103
|
* The plain line stays human-only: it carries no warning, so it is pure noise in agent logs.
|
|
104
|
+
* The repo-local-vs-global disagreement line (WP-714 S3) rides the same suppression as its
|
|
105
|
+
* base line — it only ever attaches to the 'local' source, which json already silences.
|
|
77
106
|
*
|
|
78
107
|
* Never throws and does no network IO: a wrong/unreadable config degrades to silence, and
|
|
79
|
-
* the label comes from `resolveReportedProfile()` — only fast local config reads
|
|
80
|
-
*
|
|
108
|
+
* the label comes from `resolveReportedProfile()` — only fast local config reads (no probe)
|
|
109
|
+
* in front of the call. It is safe to call immediately before any Chain read or write.
|
|
81
110
|
*/
|
|
82
|
-
export declare function
|
|
111
|
+
export declare function emitEffectiveTenantNotice(json: boolean): Promise<void>;
|
|
83
112
|
//# sourceMappingURL=workspaceNotice.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspaceNotice.d.ts","sourceRoot":"","sources":["../../src/lib/workspaceNotice.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"workspaceNotice.d.ts","sourceRoot":"","sources":["../../src/lib/workspaceNotice.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,EAA0B,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAI1F,yFAAyF;AACzF,MAAM,WAAW,kBAAkB;IACjC,8FAA8F;IAC9F,KAAK,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,2CAA2C;AAC3C,MAAM,WAAW,0BAA0B;IACzC,yFAAyF;IACzF,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,mEAAmE;IACnE,MAAM,EAAE,qBAAqB,CAAC;IAC9B;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;CAC1C;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,2BAA2B,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,0BAA0B,GAAG,MAAM,GAAG,IAAI,CASxH;AA0ED,wGAAwG;AACxG,wBAAgB,kCAAkC,IAAI,IAAI,CAEzD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB5E"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* WP-1 — Loud workspace identity on every Chain write.
|
|
2
|
+
* WP-1 — Loud workspace identity on every Chain write. WP-714 S3 extended this to every
|
|
3
|
+
* Chain READ too (see `emitEffectiveTenantNotice`'s doc comment below for the read-path wiring).
|
|
3
4
|
*
|
|
4
5
|
* Running `pb` from a directory with no repo pin (e.g. `~/`) silently resolves the
|
|
5
6
|
* GLOBAL profile and writes to whichever Chain that points at — proven live: captures
|
|
6
|
-
* meant for one workspace landed on another. This module makes every Chain write
|
|
7
|
-
* its target workspace on stderr, and qualifies the line LOUDLY when the binding is an
|
|
8
|
-
* unpinned fallback (`global`/`default` — no repo pin) so a wrong-Chain
|
|
7
|
+
* meant for one workspace landed on another. This module makes every Chain read or write
|
|
8
|
+
* NAME its target workspace on stderr, and qualifies the line LOUDLY when the binding is an
|
|
9
|
+
* unpinned fallback (`global`/`default` — no repo pin) so a wrong-Chain call is never
|
|
9
10
|
* silent. An explicit binding (`local`/`env`) gets a plain, non-alarming line.
|
|
10
11
|
*
|
|
11
12
|
* Label source — the PROFILE SLUG only, via `resolveReportedProfile()`: it returns
|
|
@@ -31,10 +32,13 @@
|
|
|
31
32
|
* - The gate is the `json` flag alone — not `--quiet`: a quiet human run still names its
|
|
32
33
|
* target Chain.
|
|
33
34
|
*
|
|
34
|
-
* SSOT: one pure formatter + one thin emitter
|
|
35
|
-
*
|
|
35
|
+
* SSOT: one pure formatter + one thin emitter — called explicitly from the 7 write-command
|
|
36
|
+
* files (8 call sites) and once per process from the shared read-path kernel wrapper
|
|
37
|
+
* (`client.ts`'s `kernelCall`/`kernelCallEnvelope`) — no per-command copy-paste.
|
|
36
38
|
*/
|
|
37
39
|
import { resolveReportedProfile } from './reportedProfile.js';
|
|
40
|
+
import { readLocalProjectConfig } from './projectConfig.js';
|
|
41
|
+
import { getGlobalActiveProfile } from './profiles.js';
|
|
38
42
|
/**
|
|
39
43
|
* Build the one-line target-workspace notice — or null when there is nothing to say.
|
|
40
44
|
*
|
|
@@ -54,7 +58,17 @@ import { resolveReportedProfile } from './reportedProfile.js';
|
|
|
54
58
|
* Pure: no IO. The display label is the profile slug — a single resolution path, so the
|
|
55
59
|
* label and the qualifier can never contradict each other.
|
|
56
60
|
*/
|
|
57
|
-
export function
|
|
61
|
+
export function formatEffectiveTenantNotice({ profile, source, disagreement }) {
|
|
62
|
+
const base = formatBaseNotice(profile, source);
|
|
63
|
+
// WP-714 S3: the disagreement line rides the SAME notice, but only when there is a base
|
|
64
|
+
// line to attach it to (source === 'none'/'missing-pin' already returned null above — no
|
|
65
|
+
// target was named, so there is nothing to flag a disagreement against either).
|
|
66
|
+
if (base && disagreement) {
|
|
67
|
+
return `${base}\n NOTICE: repo-local pin ("${disagreement.local}") differs from the globally active Chain profile ("${disagreement.global}") — this process uses "${disagreement.local}" regardless of what \`pb whoami\` reports globally`;
|
|
68
|
+
}
|
|
69
|
+
return base;
|
|
70
|
+
}
|
|
71
|
+
function formatBaseNotice(profile, source) {
|
|
58
72
|
if (source === 'none' || source === 'missing-pin')
|
|
59
73
|
return null;
|
|
60
74
|
// Deliberately NOT `→ unknown`: that reads as "a workspace whose name we failed to look up".
|
|
@@ -81,8 +95,70 @@ export function formatWriteTargetNotice({ profile, source }) {
|
|
|
81
95
|
return `→ ${name}`;
|
|
82
96
|
}
|
|
83
97
|
/**
|
|
84
|
-
*
|
|
85
|
-
*
|
|
98
|
+
* WP-714 S3: does the repo-local PROFILE PIN — the credential this process actually binds
|
|
99
|
+
* to — disagree with the globally active `pb` profile (`~/.config/productbrain/active-profile`)?
|
|
100
|
+
* Mirrors `scripts/superset/chain-pin-notice.mjs`'s birth-time comparison (WP-713, untouched
|
|
101
|
+
* here) so both notices agree on what counts as a disagreement — but this runs on every
|
|
102
|
+
* process instead of once at worktree birth. Never throws: an unreadable/racing file on
|
|
103
|
+
* either side degrades to "nothing to compare" rather than crashing a read or write.
|
|
104
|
+
*
|
|
105
|
+
* `source` gates this to `'local'` ONLY (PR #816 review, Copilot-confirmed bug): the DEC-1607
|
|
106
|
+
* credential cascade lets a `config.local.json` `apiKey`/`env`/dotenv binding OUTRANK its own
|
|
107
|
+
* `profile` field (`resolveReportedProfile()` reports that as `local-key`/`env-key`/`cwd-key`,
|
|
108
|
+
* never `local`). A `profile` field can still be PRESENT and differ from the global marker in
|
|
109
|
+
* those cases even though this process is not using it — comparing the file's raw `profile`
|
|
110
|
+
* field against the global marker regardless of source would name a tenant the process does
|
|
111
|
+
* not actually touch, in the sentence an operator trusts most. This intentionally does NOT
|
|
112
|
+
* grow a second "your pin is being overridden by a key" notice — that is a different claim,
|
|
113
|
+
* out of scope for this slice.
|
|
114
|
+
*/
|
|
115
|
+
function resolveTenantDisagreement(source) {
|
|
116
|
+
if (source !== 'local')
|
|
117
|
+
return null;
|
|
118
|
+
let localProfile;
|
|
119
|
+
try {
|
|
120
|
+
localProfile = readLocalProjectConfig()?.profile?.trim() || undefined;
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
if (!localProfile)
|
|
126
|
+
return null; // no repo-local pin — nothing to compare against.
|
|
127
|
+
let globalProfile;
|
|
128
|
+
try {
|
|
129
|
+
globalProfile = getGlobalActiveProfile();
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
if (!globalProfile || globalProfile === localProfile)
|
|
135
|
+
return null;
|
|
136
|
+
return { local: localProfile, global: globalProfile };
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Once-per-PROCESS guard (WP-714 S3). A `pb` invocation is one process, so this is really
|
|
140
|
+
* "once per command" — but a single command can reach this function many times (`pb orient`
|
|
141
|
+
* alone makes three separate `kernelCall`s). Set on the FIRST call regardless of outcome
|
|
142
|
+
* (silent 'none'/'missing-pin', json-suppressed, or an actual print): the resolved identity
|
|
143
|
+
* cannot change mid-process, so re-attempting on later calls would only ever repeat the same
|
|
144
|
+
* verdict — or, for a printed notice, repeat the same line.
|
|
145
|
+
*/
|
|
146
|
+
let hasAttemptedEffectiveTenantNotice = false;
|
|
147
|
+
/** Test-only: reset the once-per-process guard between cases (mirrors resetReportedProfileSnapshot). */
|
|
148
|
+
export function resetEffectiveTenantNoticeForTests() {
|
|
149
|
+
hasAttemptedEffectiveTenantNotice = false;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Resolve identity and write the target notice to STDERR — for every Chain read OR write.
|
|
153
|
+
* Pass the SAME `json` value the caller computed (e.g. `isJsonMode() || options.json ===
|
|
154
|
+
* true`). WP-714 S3: originally called only from the 8 explicit write call sites; now ALSO
|
|
155
|
+
* called once per process from `client.ts`'s `kernelCall`/`kernelCallEnvelope` (the plain,
|
|
156
|
+
* non-session read path), so every read command that reaches the kernel announces too.
|
|
157
|
+
* Deliberately NOT wired into `kernelCallWithSession` (the write path): every write command
|
|
158
|
+
* already calls this explicitly, earlier in its own flow than any plain `kernelCall` it
|
|
159
|
+
* might also make (e.g. `update`'s post-write `chain.getEntry` refresh) — the
|
|
160
|
+
* once-per-process guard just makes that later plain call's attempt a no-op instead of a
|
|
161
|
+
* duplicate line, so write-command output is unchanged bit-for-bit.
|
|
86
162
|
*
|
|
87
163
|
* `json` suppresses only the PLAIN line for an explicit binding. The unpinned-fallback
|
|
88
164
|
* WARNING is never suppressed (TEN-3238): `--json` is how agents invoke pb, and agents are
|
|
@@ -92,19 +168,24 @@ export function formatWriteTargetNotice({ profile, source }) {
|
|
|
92
168
|
* strict JSON on stdout stays byte-for-byte unchanged either way (and the CLI already writes
|
|
93
169
|
* unconditional stderr warnings elsewhere, e.g. the preview-scrub misroute in config.ts).
|
|
94
170
|
* The plain line stays human-only: it carries no warning, so it is pure noise in agent logs.
|
|
171
|
+
* The repo-local-vs-global disagreement line (WP-714 S3) rides the same suppression as its
|
|
172
|
+
* base line — it only ever attaches to the 'local' source, which json already silences.
|
|
95
173
|
*
|
|
96
174
|
* Never throws and does no network IO: a wrong/unreadable config degrades to silence, and
|
|
97
|
-
* the label comes from `resolveReportedProfile()` — only fast local config reads
|
|
98
|
-
*
|
|
175
|
+
* the label comes from `resolveReportedProfile()` — only fast local config reads (no probe)
|
|
176
|
+
* in front of the call. It is safe to call immediately before any Chain read or write.
|
|
99
177
|
*/
|
|
100
|
-
export async function
|
|
178
|
+
export async function emitEffectiveTenantNotice(json) {
|
|
179
|
+
if (hasAttemptedEffectiveTenantNotice)
|
|
180
|
+
return;
|
|
181
|
+
hasAttemptedEffectiveTenantNotice = true;
|
|
101
182
|
let profile = null;
|
|
102
183
|
let source = 'none';
|
|
103
184
|
try {
|
|
104
185
|
({ profile, source } = resolveReportedProfile());
|
|
105
186
|
}
|
|
106
187
|
catch {
|
|
107
|
-
return; // unreadable/racing config — say nothing rather than crash a write.
|
|
188
|
+
return; // unreadable/racing config — say nothing rather than crash a read or write.
|
|
108
189
|
}
|
|
109
190
|
if (source === 'none' || source === 'missing-pin')
|
|
110
191
|
return;
|
|
@@ -115,7 +196,8 @@ export async function emitWriteTargetNotice(json) {
|
|
|
115
196
|
|| source === 'cwd-key' || source === 'local-key';
|
|
116
197
|
if (json && !isUnpinnedFallback)
|
|
117
198
|
return;
|
|
118
|
-
const
|
|
199
|
+
const disagreement = resolveTenantDisagreement(source);
|
|
200
|
+
const notice = formatEffectiveTenantNotice({ profile, source, disagreement });
|
|
119
201
|
if (notice)
|
|
120
202
|
process.stderr.write(notice + '\n');
|
|
121
203
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspaceNotice.js","sourceRoot":"","sources":["../../src/lib/workspaceNotice.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"workspaceNotice.js","sourceRoot":"","sources":["../../src/lib/workspaceNotice.ts"],"names":[],"mappings":"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"}
|