@productbrain/cli 0.1.0-beta.5402 → 0.1.0-beta.5408
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__/read-target-notice.test.js +24 -7
- package/dist/__tests__/read-target-notice.test.js.map +1 -1
- package/dist/__tests__/tenant-notice-write-path.test.d.ts +2 -0
- package/dist/__tests__/tenant-notice-write-path.test.d.ts.map +1 -0
- package/dist/__tests__/tenant-notice-write-path.test.js +154 -0
- package/dist/__tests__/tenant-notice-write-path.test.js.map +1 -0
- package/dist/commands/admin/probe.d.ts +27 -0
- package/dist/commands/admin/probe.d.ts.map +1 -1
- package/dist/commands/admin/probe.js +33 -0
- package/dist/commands/admin/probe.js.map +1 -1
- package/dist/commands/admin/probe.test.js +49 -2
- package/dist/commands/admin/probe.test.js.map +1 -1
- package/dist/lib/client.d.ts +2 -2
- package/dist/lib/client.d.ts.map +1 -1
- package/dist/lib/client.js +11 -5
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/workspaceNotice.d.ts +61 -8
- package/dist/lib/workspaceNotice.d.ts.map +1 -1
- package/dist/lib/workspaceNotice.js +106 -8
- package/dist/lib/workspaceNotice.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* WP-714 S3 — read commands announce their effective tenant too.
|
|
3
|
+
* TEN-3398 (WP-711 follow-up) — the write path (`kernelCallWithSession`) announces too, closing
|
|
4
|
+
* the gap this file used to assert as intentional (see the last two tests below).
|
|
3
5
|
*
|
|
4
|
-
* Before
|
|
6
|
+
* Before WP-714 S3, `emitEffectiveTenantNotice` was called only from the 8 explicit write call
|
|
5
7
|
* sites (relate x2, restore, organisationWrite, promote, capture, session, update) — every
|
|
6
8
|
* plain read (`pb get`/`search`/`orient`/`context`/`brief`/`constellation`/...) went through
|
|
7
|
-
* `client.ts`'s `kernelCall`/`kernelCallEnvelope` silently.
|
|
9
|
+
* `client.ts`'s `kernelCall`/`kernelCallEnvelope` silently. Before TEN-3398, `kernelCallWithSession`
|
|
10
|
+
* itself never called the notice at all — a write command that was not one of those 8 explicit
|
|
11
|
+
* call sites (e.g. `chain.verifyEntry`/`rework.report`) was silent. This file exercises the REAL
|
|
8
12
|
* `kernelCall`/`kernelCallEnvelope`/`kernelCallWithSession` implementations from client.ts —
|
|
9
13
|
* only their dependencies (config, session, sessionBinding, reportedProfile, fetch) are
|
|
10
|
-
* mocked — so removing the notice call from
|
|
11
|
-
*
|
|
12
|
-
*
|
|
14
|
+
* mocked — so removing the notice call from either path, or the once-per-process guard, turns
|
|
15
|
+
* one of these red. Mirrors the mocking shape of `client-binding-guard.test.ts` (WP-711/712),
|
|
16
|
+
* which proved the binding guard the same way.
|
|
13
17
|
*/
|
|
14
18
|
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
15
19
|
const assertSessionStillBoundMock = vi.fn();
|
|
@@ -95,10 +99,23 @@ describe('read path announces the effective tenant (WP-714 S3)', () => {
|
|
|
95
99
|
expect(jsonStderr).toBe('');
|
|
96
100
|
expect(jsonStderr).not.toBe(prettyStderr);
|
|
97
101
|
});
|
|
98
|
-
|
|
102
|
+
// TEN-3398 (WP-711 follow-up): this used to assert the OPPOSITE — that kernelCallWithSession
|
|
103
|
+
// never announces, because "every write command already calls this explicitly" (a premise
|
|
104
|
+
// that was false: verify.ts, rework.ts, and 9 other write commands never called it at all —
|
|
105
|
+
// see the corrected doc comment on workspaceNotice.ts's emitEffectiveTenantNotice). The write
|
|
106
|
+
// path now shares the SAME notice call site as the read path.
|
|
107
|
+
it('DOES auto-announce from kernelCallWithSession too — the write path shares the read path\'s notice call site (TEN-3398)', async () => {
|
|
99
108
|
resolveEffectiveProfileMock.mockReturnValue({ profile: 'funcode', source: 'local' });
|
|
100
109
|
await kernelCallWithSession('chain.createEntry', { description: 'x' });
|
|
101
|
-
expect(stderr.join('')).toBe('');
|
|
110
|
+
expect(stderr.join('')).toBe('→ funcode\n');
|
|
111
|
+
});
|
|
112
|
+
it('the 8 pre-existing explicit write call sites still print exactly once — kernelCallWithSession\'s own (later) attempt is a no-op under the once-per-process guard', async () => {
|
|
113
|
+
// Mirrors what capture.ts/relate.ts/etc. do: call the notice explicitly BEFORE the write.
|
|
114
|
+
const { emitEffectiveTenantNotice } = await import('../lib/workspaceNotice.js');
|
|
115
|
+
await emitEffectiveTenantNotice(false); // the command's own explicit, earlier call
|
|
116
|
+
await kernelCallWithSession('chain.createEntry', { description: 'x' }); // its internal call
|
|
117
|
+
const lines = stderr.join('').split('\n').filter((l) => l.startsWith('→'));
|
|
118
|
+
expect(lines).toHaveLength(1);
|
|
102
119
|
});
|
|
103
120
|
});
|
|
104
121
|
//# sourceMappingURL=read-target-notice.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-target-notice.test.js","sourceRoot":"","sources":["../../src/__tests__/read-target-notice.test.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"read-target-notice.test.js","sourceRoot":"","sources":["../../src/__tests__/read-target-notice.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-notice-write-path.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/tenant-notice-write-path.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TEN-3398 (WP-711 follow-up) — the write path (`kernelCallWithSession`) and the admin surface
|
|
3
|
+
* (`adminCall`) now announce their effective tenant, and `adminCall` is refused when the
|
|
4
|
+
* resolved credential has moved out from under an active session.
|
|
5
|
+
*
|
|
6
|
+
* Before this slice, `pb verify` / `pb rework report` (and 9 other write commands — see
|
|
7
|
+
* workspaceNotice.ts's doc comment on `emitEffectiveTenantNotice`) ran through
|
|
8
|
+
* `kernelCallWithSession` without ever printing a target-workspace line, and `pb admin`
|
|
9
|
+
* carried NEITHER the notice nor the tenant-binding guard at all — the one destructive door
|
|
10
|
+
* left both silent and unguarded.
|
|
11
|
+
*
|
|
12
|
+
* These tests exercise the REAL `client.ts`/`workspaceNotice.ts` implementations, mocking only
|
|
13
|
+
* their inputs (config/session resolution, the reportedProfile/adminConfig identity cascades,
|
|
14
|
+
* and global fetch) — so a regression that drops the notice call, re-splits the guard, or
|
|
15
|
+
* reverts to a per-command fix instead of the shared choke point turns one of these red.
|
|
16
|
+
*/
|
|
17
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
18
|
+
const effectiveState = { value: { profile: 'acme', source: 'local' } };
|
|
19
|
+
vi.mock('../lib/reportedProfile.js', () => ({
|
|
20
|
+
resolveReportedProfile: () => effectiveState.value,
|
|
21
|
+
}));
|
|
22
|
+
vi.mock('../lib/projectConfig.js', () => ({
|
|
23
|
+
readLocalProjectConfig: () => null,
|
|
24
|
+
}));
|
|
25
|
+
vi.mock('../lib/profiles.js', () => ({
|
|
26
|
+
getGlobalActiveProfile: () => null,
|
|
27
|
+
}));
|
|
28
|
+
const adminState = {
|
|
29
|
+
value: { apiKey: 'pb_sk_admin', siteUrl: 'https://admin.convex.site', source: 'local-profile', profileName: 'acme-admin' },
|
|
30
|
+
};
|
|
31
|
+
vi.mock('../lib/adminConfig.js', () => ({
|
|
32
|
+
resolveAdminConfig: () => adminState.value,
|
|
33
|
+
}));
|
|
34
|
+
// --- config / session -----------------------------------------------------------------------
|
|
35
|
+
const getConfigMock = vi.fn();
|
|
36
|
+
vi.mock('../lib/config.js', () => ({
|
|
37
|
+
getConfig: (...a) => getConfigMock(...a),
|
|
38
|
+
getConfigOrGuide: vi.fn(async () => ({ apiKey: 'pb_sk_test', siteUrl: 'https://test.convex.site' })),
|
|
39
|
+
}));
|
|
40
|
+
let mockSession;
|
|
41
|
+
const readSessionMock = vi.fn();
|
|
42
|
+
const readSessionBySessionIdMock = vi.fn();
|
|
43
|
+
vi.mock('../lib/session.js', () => ({
|
|
44
|
+
readSession: (...a) => readSessionMock(...a),
|
|
45
|
+
readSessionBySessionId: (...a) => readSessionBySessionIdMock(...a),
|
|
46
|
+
}));
|
|
47
|
+
// --- binding guard: keep the REAL fingerprintOf (pure), control only the assertion ----------
|
|
48
|
+
const assertSessionStillBoundMock = vi.fn();
|
|
49
|
+
vi.mock('../lib/sessionBinding.js', async (importOriginal) => {
|
|
50
|
+
const actual = await importOriginal();
|
|
51
|
+
return {
|
|
52
|
+
...actual,
|
|
53
|
+
assertSessionStillBound: (...a) => assertSessionStillBoundMock(...a),
|
|
54
|
+
};
|
|
55
|
+
});
|
|
56
|
+
import { kernelCallWithSession, adminCall } from '../lib/client.js';
|
|
57
|
+
import { runVerify } from '../commands/verify.js';
|
|
58
|
+
import { runReworkReport } from '../commands/rework.js';
|
|
59
|
+
import { resetEffectiveTenantNoticeForTests, resetAdminTenantNoticeForTests } from '../lib/workspaceNotice.js';
|
|
60
|
+
import { fingerprintOf } from '../lib/sessionBinding.js';
|
|
61
|
+
import { setOutputMode } from '../lib/runner.js';
|
|
62
|
+
describe('write-path + admin tenant notice (TEN-3398)', () => {
|
|
63
|
+
let stderr;
|
|
64
|
+
let stderrSpy;
|
|
65
|
+
let fetchSpy;
|
|
66
|
+
beforeEach(() => {
|
|
67
|
+
vi.clearAllMocks();
|
|
68
|
+
resetEffectiveTenantNoticeForTests();
|
|
69
|
+
resetAdminTenantNoticeForTests();
|
|
70
|
+
setOutputMode('pretty'); // avoid --json's no-warning suppression for an explicit binding.
|
|
71
|
+
effectiveState.value = { profile: 'acme', source: 'local' };
|
|
72
|
+
adminState.value = { apiKey: 'pb_sk_admin', siteUrl: 'https://admin.convex.site', source: 'local-profile', profileName: 'acme-admin' };
|
|
73
|
+
assertSessionStillBoundMock.mockImplementation(() => { });
|
|
74
|
+
getConfigMock.mockReturnValue({ apiKey: 'pb_sk_test', siteUrl: 'https://test.convex.site' });
|
|
75
|
+
mockSession = { sessionId: 'sess-1', workspaceId: 'ws-1', workspaceName: 'Test WS', conversationId: 'conv-1' };
|
|
76
|
+
readSessionMock.mockImplementation(() => mockSession);
|
|
77
|
+
stderr = [];
|
|
78
|
+
stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation((c) => { stderr.push(String(c)); return true; });
|
|
79
|
+
fetchSpy = vi.fn();
|
|
80
|
+
vi.stubGlobal('fetch', fetchSpy);
|
|
81
|
+
});
|
|
82
|
+
afterEach(() => {
|
|
83
|
+
setOutputMode('auto');
|
|
84
|
+
stderrSpy.mockRestore();
|
|
85
|
+
vi.unstubAllGlobals();
|
|
86
|
+
});
|
|
87
|
+
it('pb verify announces its effective tenant (TEN-3398: was silent — chain.verifyEntry never called the notice)', async () => {
|
|
88
|
+
fetchSpy.mockResolvedValue({
|
|
89
|
+
ok: true, status: 200, headers: { get: () => null },
|
|
90
|
+
json: async () => ({ ok: true, data: { entryId: 'DEC-1', verificationStatus: 'verified', alreadyVerified: false } }),
|
|
91
|
+
});
|
|
92
|
+
await runVerify({ entryId: 'DEC-1' });
|
|
93
|
+
expect(stderr.join('')).toContain('→ acme');
|
|
94
|
+
});
|
|
95
|
+
it('pb rework report announces its effective tenant (TEN-3398: was silent — rework.report never called the notice)', async () => {
|
|
96
|
+
fetchSpy.mockResolvedValue({
|
|
97
|
+
ok: true, status: 200, headers: { get: () => null },
|
|
98
|
+
json: async () => ({ ok: true, data: { recorded: true, rowId: 'row-1' } }),
|
|
99
|
+
});
|
|
100
|
+
await runReworkReport({ entryId: 'STD-12', classification: 'revision' });
|
|
101
|
+
expect(stderr.join('')).toContain('→ acme');
|
|
102
|
+
});
|
|
103
|
+
it('ROOT PROPERTY: ANY call through kernelCallWithSession emits the notice — pins the fix at the shared choke point, not a per-command patch', async () => {
|
|
104
|
+
fetchSpy.mockResolvedValue({
|
|
105
|
+
ok: true, status: 200, headers: { get: () => null },
|
|
106
|
+
json: async () => ({ ok: true, data: {} }),
|
|
107
|
+
});
|
|
108
|
+
// A synthetic route name, deliberately not a real gateway route — the point is that
|
|
109
|
+
// kernelCallWithSession announces for ANY fn it is given, not just the ones a command file
|
|
110
|
+
// happens to call the notice around explicitly.
|
|
111
|
+
await kernelCallWithSession('test.rootPropertyRoute', {});
|
|
112
|
+
expect(stderr.join('')).toContain('→ acme');
|
|
113
|
+
});
|
|
114
|
+
it('kernelCallWithSession still fires the notice only ONCE per process across multiple write calls', async () => {
|
|
115
|
+
fetchSpy.mockResolvedValue({
|
|
116
|
+
ok: true, status: 200, headers: { get: () => null },
|
|
117
|
+
json: async () => ({ ok: true, data: {} }),
|
|
118
|
+
});
|
|
119
|
+
await kernelCallWithSession('test.rootPropertyRoute.a', {});
|
|
120
|
+
await kernelCallWithSession('test.rootPropertyRoute.b', {});
|
|
121
|
+
const lines = stderr.join('').split('\n').filter((l) => l.startsWith('→'));
|
|
122
|
+
expect(lines).toHaveLength(1);
|
|
123
|
+
});
|
|
124
|
+
describe('pb admin (adminCall)', () => {
|
|
125
|
+
it('announces its OWN effective tenant (TEN-3398: adminCall previously carried no notice at all)', async () => {
|
|
126
|
+
fetchSpy.mockResolvedValue({ ok: true, json: async () => ({ ok: true, data: { done: true } }) });
|
|
127
|
+
await adminCall('inspect:list-workspaces', {});
|
|
128
|
+
expect(stderr.join('')).toContain('→ acme-admin');
|
|
129
|
+
});
|
|
130
|
+
it('is refused when the admin credential has moved since the session started (TEN-3398: adminCall previously carried no binding guard at all)', async () => {
|
|
131
|
+
assertSessionStillBoundMock.mockImplementation(() => {
|
|
132
|
+
throw new Error('CREDENTIAL_MOVED_FOR_TEST');
|
|
133
|
+
});
|
|
134
|
+
await expect(adminCall('manage:delete-workspace', { workspaceId: 'ws-x' })).rejects.toThrow('CREDENTIAL_MOVED_FOR_TEST');
|
|
135
|
+
expect(fetchSpy).not.toHaveBeenCalled();
|
|
136
|
+
});
|
|
137
|
+
it("fingerprints admin's OWN resolved apiKey/siteUrl — never the generic env-based default the read/write path uses", async () => {
|
|
138
|
+
fetchSpy.mockResolvedValue({ ok: true, json: async () => ({ ok: true, data: {} }) });
|
|
139
|
+
await adminCall('inspect:list-workspaces', {});
|
|
140
|
+
const expectedFingerprint = fingerprintOf(adminState.value.apiKey, adminState.value.siteUrl);
|
|
141
|
+
expect(assertSessionStillBoundMock).toHaveBeenCalledWith(mockSession, expectedFingerprint, expect.any(Function));
|
|
142
|
+
});
|
|
143
|
+
it("names admin's tenant in the refusal message via its OWN resolved identity, not the generic cascade", async () => {
|
|
144
|
+
let describeCurrentArg;
|
|
145
|
+
assertSessionStillBoundMock.mockImplementation((_session, _current, describeCurrent) => {
|
|
146
|
+
describeCurrentArg = describeCurrent;
|
|
147
|
+
throw new Error('refused');
|
|
148
|
+
});
|
|
149
|
+
await expect(adminCall('manage:delete-workspace', {})).rejects.toThrow();
|
|
150
|
+
expect(describeCurrentArg?.()).toBe('acme-admin');
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
//# sourceMappingURL=tenant-notice-write-path.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-notice-write-path.test.js","sourceRoot":"","sources":["../../src/__tests__/tenant-notice-write-path.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,6 +41,33 @@ export declare function resolveProbeEnv(envName: string): {
|
|
|
41
41
|
apiKey: string;
|
|
42
42
|
siteUrl: string;
|
|
43
43
|
};
|
|
44
|
+
/**
|
|
45
|
+
* Announce every `--env` this invocation targets (TEN-3398 / WP-711 follow-up: `probe` reached
|
|
46
|
+
* the gateway via `fetchProbePage`'s raw `fetch` with NO notice and NO binding guard at all —
|
|
47
|
+
* the one gateway door the rest of this lane's census missed). Called once per env in the
|
|
48
|
+
* command's action handler, alongside `adminBanner` — never inside `fetchProbePage`/`fetchProbe`,
|
|
49
|
+
* so a paginated `migrationLedger` probe (up to `MAX_PAGES` requests) still announces once per
|
|
50
|
+
* env, not once per page. Exported for unit testing, mirroring `resolveProbeEnv`/`fetchProbe`.
|
|
51
|
+
*
|
|
52
|
+
* Uses `source: 'local-profile'` (renders as a PLAIN "→ <name>" line, no qualifier): every
|
|
53
|
+
* `--env <name>` is an explicit, deliberate binding the operator typed — never an unpinned
|
|
54
|
+
* fallback — so the "global default" hint `'global-profile'` would attach is actively wrong
|
|
55
|
+
* here.
|
|
56
|
+
*
|
|
57
|
+
* Deliberately does NOT call `guardAdminCall`/`assertSessionStillBound`. Guarding "has the
|
|
58
|
+
* credential moved since the session started" makes sense for `adminCall`/`kernelCallWithSession`
|
|
59
|
+
* because those resolve ONE ambient credential the session is presumed to still be operating
|
|
60
|
+
* within. `probe --env <name>` is structurally different: `resolveNamedProfileConfig(name)`
|
|
61
|
+
* reads ONE named profile FILE directly, entirely independent of the session's own
|
|
62
|
+
* ambient-cascade credential (env var > local pin > global active profile > legacy) that
|
|
63
|
+
* `session.bindingFingerprint` was stamped against. Comparing the two would false-positive-
|
|
64
|
+
* refuse the tool's own core feature — `--env prod --env dev` — the moment ANY session is
|
|
65
|
+
* active, since at most one of the two named envs can ever match the session's single bound
|
|
66
|
+
* fingerprint. There is no credential "drift" to catch here: the operator names the target
|
|
67
|
+
* explicitly, every time. (On the record per TEN-3398 PR review: this is the one gateway path
|
|
68
|
+
* in this lane that stays announce-only, not guard-and-announce.)
|
|
69
|
+
*/
|
|
70
|
+
export declare function announceProbeEnvs(envs: string[]): void;
|
|
44
71
|
/** Exported for unit testing the page-following loop (Copilot review, PR #574) — mocks global
|
|
45
72
|
* fetch and asserts the CLI accumulates every page before returning. */
|
|
46
73
|
export declare function fetchProbe(env: string, name: string): Promise<ProbeEnvResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"probe.d.ts","sourceRoot":"","sources":["../../../src/commands/admin/probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"probe.d.ts","sourceRoot":"","sources":["../../../src/commands/admin/probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,MAAM,MAAM,cAAc,GAAG;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAkCF,MAAM,MAAM,aAAa,GAAG;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAC7C,IAAI,EAAE,OAAO,CAAC;CACd,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG;IAAE,IAAI,EAAE,aAAa,EAAE,CAAA;CAAE,CAqB/F;AAED;wEACwE;AACxE,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAgBpF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAItD;AAsBD;wEACwE;AACxE,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAsCnF;AA8CD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAwBvD"}
|
|
@@ -2,6 +2,7 @@ import { resolveNamedProfileConfig } from '../../lib/profiles.js';
|
|
|
2
2
|
import { CLIError, ErrorCode } from '../../lib/errors.js';
|
|
3
3
|
import { adminBanner, bold, cyan, dim, green, heading, red } from '../../lib/style.js';
|
|
4
4
|
import { isJsonMode } from '../../lib/runner.js';
|
|
5
|
+
import { emitAdminTenantNotice } from '../../lib/workspaceNotice.js';
|
|
5
6
|
function isLedgerPayload(data) {
|
|
6
7
|
return (!!data &&
|
|
7
8
|
typeof data === 'object' &&
|
|
@@ -70,6 +71,37 @@ export function resolveProbeEnv(envName) {
|
|
|
70
71
|
}
|
|
71
72
|
return { apiKey: config.apiKey, siteUrl };
|
|
72
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Announce every `--env` this invocation targets (TEN-3398 / WP-711 follow-up: `probe` reached
|
|
76
|
+
* the gateway via `fetchProbePage`'s raw `fetch` with NO notice and NO binding guard at all —
|
|
77
|
+
* the one gateway door the rest of this lane's census missed). Called once per env in the
|
|
78
|
+
* command's action handler, alongside `adminBanner` — never inside `fetchProbePage`/`fetchProbe`,
|
|
79
|
+
* so a paginated `migrationLedger` probe (up to `MAX_PAGES` requests) still announces once per
|
|
80
|
+
* env, not once per page. Exported for unit testing, mirroring `resolveProbeEnv`/`fetchProbe`.
|
|
81
|
+
*
|
|
82
|
+
* Uses `source: 'local-profile'` (renders as a PLAIN "→ <name>" line, no qualifier): every
|
|
83
|
+
* `--env <name>` is an explicit, deliberate binding the operator typed — never an unpinned
|
|
84
|
+
* fallback — so the "global default" hint `'global-profile'` would attach is actively wrong
|
|
85
|
+
* here.
|
|
86
|
+
*
|
|
87
|
+
* Deliberately does NOT call `guardAdminCall`/`assertSessionStillBound`. Guarding "has the
|
|
88
|
+
* credential moved since the session started" makes sense for `adminCall`/`kernelCallWithSession`
|
|
89
|
+
* because those resolve ONE ambient credential the session is presumed to still be operating
|
|
90
|
+
* within. `probe --env <name>` is structurally different: `resolveNamedProfileConfig(name)`
|
|
91
|
+
* reads ONE named profile FILE directly, entirely independent of the session's own
|
|
92
|
+
* ambient-cascade credential (env var > local pin > global active profile > legacy) that
|
|
93
|
+
* `session.bindingFingerprint` was stamped against. Comparing the two would false-positive-
|
|
94
|
+
* refuse the tool's own core feature — `--env prod --env dev` — the moment ANY session is
|
|
95
|
+
* active, since at most one of the two named envs can ever match the session's single bound
|
|
96
|
+
* fingerprint. There is no credential "drift" to catch here: the operator names the target
|
|
97
|
+
* explicitly, every time. (On the record per TEN-3398 PR review: this is the one gateway path
|
|
98
|
+
* in this lane that stays announce-only, not guard-and-announce.)
|
|
99
|
+
*/
|
|
100
|
+
export function announceProbeEnvs(envs) {
|
|
101
|
+
for (const env of envs) {
|
|
102
|
+
emitAdminTenantNotice({ profileName: env, source: 'local-profile' });
|
|
103
|
+
}
|
|
104
|
+
}
|
|
73
105
|
async function fetchProbePage(siteUrl, apiKey, name, cursor) {
|
|
74
106
|
const url = new URL('/api/admin/probe', siteUrl);
|
|
75
107
|
url.searchParams.set('name', name);
|
|
@@ -173,6 +205,7 @@ export function attachProbeCommand(admin) {
|
|
|
173
205
|
.option('--env <name>', 'profile name to query (repeatable)', (v, prev) => [...prev, v], [])
|
|
174
206
|
.action(async (name, options) => {
|
|
175
207
|
const envs = options.env.length > 0 ? options.env : ['default'];
|
|
208
|
+
announceProbeEnvs(envs);
|
|
176
209
|
for (const env of envs) {
|
|
177
210
|
const { siteUrl } = resolveProbeEnv(env);
|
|
178
211
|
adminBanner(siteUrl);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"probe.js","sourceRoot":"","sources":["../../../src/commands/admin/probe.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"probe.js","sourceRoot":"","sources":["../../../src/commands/admin/probe.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Task 11 Step 1 — pb admin probe tests (WP-608, parent WP-604).
|
|
3
|
+
* TEN-3398 (WP-711 follow-up, PR #827 review) — probe now announces its tenant.
|
|
3
4
|
*
|
|
4
5
|
* `--env prod --env dev` must print both side by side and diff per scope handle — the exact
|
|
5
6
|
* question being asked on 2026-08-02 ("did it run everywhere"). diffMigrationLedgerResults and
|
|
6
7
|
* resolveProbeEnv are pure, network-free, and exported specifically for this.
|
|
7
8
|
*/
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
9
|
+
import { readFileSync } from 'fs';
|
|
10
|
+
import { fileURLToPath } from 'url';
|
|
11
|
+
import { describe, expect, it, vi, afterEach, beforeEach } from 'vitest';
|
|
12
|
+
import { diffMigrationLedgerResults, resolveProbeEnv, fetchProbe, announceProbeEnvs } from './probe.js';
|
|
13
|
+
import { resetAdminTenantNoticeForTests } from '../../lib/workspaceNotice.js';
|
|
10
14
|
vi.mock('../../lib/profiles.js', () => ({
|
|
11
15
|
resolveNamedProfileConfig: vi.fn((name) => {
|
|
12
16
|
if (name === 'prod')
|
|
@@ -143,4 +147,47 @@ describe('fetchProbe — migrationLedger page-following (Copilot review, PR #574
|
|
|
143
147
|
expect(result.error).toBe('boom');
|
|
144
148
|
});
|
|
145
149
|
});
|
|
150
|
+
describe('announceProbeEnvs (TEN-3398 / WP-711 follow-up) — probe was the one gateway door with no notice at all', () => {
|
|
151
|
+
let stderr;
|
|
152
|
+
let stderrSpy;
|
|
153
|
+
beforeEach(() => {
|
|
154
|
+
resetAdminTenantNoticeForTests();
|
|
155
|
+
stderr = [];
|
|
156
|
+
stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation((c) => { stderr.push(String(c)); return true; });
|
|
157
|
+
});
|
|
158
|
+
afterEach(() => {
|
|
159
|
+
stderrSpy.mockRestore();
|
|
160
|
+
});
|
|
161
|
+
it('announces a single --env plainly — no "global default" qualifier, since --env is always an explicit binding', () => {
|
|
162
|
+
announceProbeEnvs(['prod']);
|
|
163
|
+
expect(stderr.join('')).toBe('→ prod\n');
|
|
164
|
+
});
|
|
165
|
+
it('announces BOTH names for a multi-env compare — the identity-keyed guard must not swallow the second, DIFFERENT env (regression pin for the Set-based fix)', () => {
|
|
166
|
+
announceProbeEnvs(['prod', 'dev']);
|
|
167
|
+
expect(stderr.join('')).toBe('→ prod\n→ dev\n');
|
|
168
|
+
});
|
|
169
|
+
it('still announces the SAME env only once if called twice in one process (per-identity dedup, not per-call)', () => {
|
|
170
|
+
announceProbeEnvs(['prod']);
|
|
171
|
+
announceProbeEnvs(['prod']);
|
|
172
|
+
expect(stderr.join('')).toBe('→ prod\n');
|
|
173
|
+
});
|
|
174
|
+
// TEN-3398 PR #827 review: the coordinator asked for the same "refused when the credential
|
|
175
|
+
// moved" coverage the other admin surfaces got. That guard does not apply here — see
|
|
176
|
+
// announceProbeEnvs' doc comment for why (an explicit --env is not ambient drift, and
|
|
177
|
+
// fingerprinting it against session.bindingFingerprint would false-positive-refuse the
|
|
178
|
+
// tool's own core feature, --env prod --env dev, the moment any session is active). This
|
|
179
|
+
// pins that decision structurally so a future add-back is a deliberate, reviewed change,
|
|
180
|
+
// never a silent drift in either direction.
|
|
181
|
+
it('does not import the session-binding guard — the exclusion is enforced structurally, not just documented in prose', () => {
|
|
182
|
+
const src = readFileSync(fileURLToPath(new URL('./probe.ts', import.meta.url)), 'utf8');
|
|
183
|
+
// Checks the actual IMPORT STATEMENTS, not a bare identifier match: the doc comment above
|
|
184
|
+
// legitimately names `assertSessionStillBound`/`guardAdminCall` in prose to explain why
|
|
185
|
+
// they're absent, so a whole-file identifier search would false-fail on its own
|
|
186
|
+
// explanation. Neither function is reachable at all without one of these two imports.
|
|
187
|
+
expect(src).not.toContain("from '../../lib/sessionBinding.js'");
|
|
188
|
+
const workspaceNoticeImport = src.split('\n').find((l) => l.includes("from '../../lib/workspaceNotice.js'"));
|
|
189
|
+
expect(workspaceNoticeImport).toContain('emitAdminTenantNotice');
|
|
190
|
+
expect(workspaceNoticeImport).not.toContain('guardAdminCall');
|
|
191
|
+
});
|
|
192
|
+
});
|
|
146
193
|
//# sourceMappingURL=probe.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"probe.test.js","sourceRoot":"","sources":["../../../src/commands/admin/probe.test.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"probe.test.js","sourceRoot":"","sources":["../../../src/commands/admin/probe.test.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/client.d.ts
CHANGED
|
@@ -80,8 +80,8 @@ export declare function kernelCallEnvelope<T = unknown>(fn: string, args?: Recor
|
|
|
80
80
|
* `X-Agent-Session-Id` header).
|
|
81
81
|
* All write commands (update, relate, unrelate, capture) should use this.
|
|
82
82
|
*
|
|
83
|
-
* WP-711/712: the binding guard
|
|
84
|
-
*
|
|
83
|
+
* WP-711/712: the binding guard lives in the shared fetchKernelEnvelope. TEN-3398 (follow-up)
|
|
84
|
+
* added the effective-tenant notice here too, alongside the post-write session-touch below.
|
|
85
85
|
*
|
|
86
86
|
* After a successful write, fires a non-blocking `agent.touchSession` call to
|
|
87
87
|
* renew the session TTL — mirroring MCP server behavior (DEC-299, BET-181 Slice 1).
|
package/dist/lib/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAUH,OAAO,KAAK,EAAkB,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAOjF,OAAO,EAAE,QAAQ,EAAa,MAAM,aAAa,CAAC;AAGlD,OAAO,EAAkC,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAoDzF,kGAAkG;AAClG,qBAAa,QAAS,SAAQ,QAAQ;IACpC,OAAO,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAClC,sFAAsF;IACtF,iBAAiB,CAAC,EAAE,MAAM,CAAC;gBAEf,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,EAAE,EAAE,iBAAiB,CAAC,EAAE,MAAM;CAe1G;AAID,OAAO,EAAE,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAK7E,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAoDjF,gFAAgF;AAChF,MAAM,MAAM,iBAAiB,GACzB;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,SAAS,SAA8C,GACtD,OAAO,CAAC,iBAAiB,CAAC,CAqC5B;AA6BD,mEAAmE;AACnE,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAUH,OAAO,KAAK,EAAkB,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAOjF,OAAO,EAAE,QAAQ,EAAa,MAAM,aAAa,CAAC;AAGlD,OAAO,EAAkC,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAoDzF,kGAAkG;AAClG,qBAAa,QAAS,SAAQ,QAAQ;IACpC,OAAO,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAClC,sFAAsF;IACtF,iBAAiB,CAAC,EAAE,MAAM,CAAC;gBAEf,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,EAAE,EAAE,iBAAiB,CAAC,EAAE,MAAM;CAe1G;AAID,OAAO,EAAE,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAK7E,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAoDjF,gFAAgF;AAChF,MAAM,MAAM,iBAAiB,GACzB;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,SAAS,SAA8C,GACtD,OAAO,CAAC,iBAAiB,CAAC,CAqC5B;AA6BD,mEAAmE;AACnE,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,OAAO,CAAC,CAoClB;AAqFD,wBAAsB,UAAU,CAAC,CAAC,GAAG,OAAO,EAC1C,EAAE,EAAE,MAAM,EACV,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAClC,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,CAAC,CAAC,CAIZ;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,GAAG,OAAO,EAClD,EAAE,EAAE,MAAM,EACV,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAClC,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAAE,CAAC,CAI9F;AA+BD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,qBAAqB,CAAC,CAAC,GAAG,OAAO,EACrD,EAAE,EAAE,MAAM,EACV,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAClC,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,CAAC,CAAC,CA8BZ"}
|
package/dist/lib/client.js
CHANGED
|
@@ -20,9 +20,9 @@ import { parseKernelEnvelope, recordLatestFromResponse } from './kernelEnvelope.
|
|
|
20
20
|
import { getConfig } from './config.js';
|
|
21
21
|
import { resolveAdminConfig } from './adminConfig.js';
|
|
22
22
|
import { isJsonMode } from './runner.js';
|
|
23
|
-
import { emitEffectiveTenantNotice, describeCurrentTenantForRefusal } from './workspaceNotice.js';
|
|
23
|
+
import { emitEffectiveTenantNotice, describeCurrentTenantForRefusal, guardAdminCall } from './workspaceNotice.js';
|
|
24
24
|
import { readSession, readSessionBySessionId } from './session.js';
|
|
25
|
-
import { assertSessionStillBound } from './sessionBinding.js';
|
|
25
|
+
import { assertSessionStillBound, fingerprintOf } from './sessionBinding.js';
|
|
26
26
|
import { CLIError, ErrorCode } from './errors.js';
|
|
27
27
|
import { withSpinner } from './spinner.js';
|
|
28
28
|
import { maybeRetry, shouldTouchSession } from './rate-limit.js';
|
|
@@ -234,7 +234,10 @@ export function spinnerLabel(fn) {
|
|
|
234
234
|
* Throws CLIError on auth failure or non-OK response.
|
|
235
235
|
*/
|
|
236
236
|
export async function adminCall(command, args) {
|
|
237
|
-
const { apiKey, siteUrl } = resolveAdminConfig();
|
|
237
|
+
const { apiKey, siteUrl, source, profileName } = resolveAdminConfig();
|
|
238
|
+
// TEN-3398 (follow-up): `pb admin` previously carried neither the notice nor the binding
|
|
239
|
+
// guard — see workspaceNotice.ts's `guardAdminCall` doc comment for the full story.
|
|
240
|
+
guardAdminCall({ profileName, source }, boundSessionFor(args ?? {}), fingerprintOf(apiKey, siteUrl));
|
|
238
241
|
// WP-575 deliberately leaves /api/admin UNBOUNDED (PR #533 review, Codex P2 — an earlier
|
|
239
242
|
// round bounded it and that was the regression). Admin commands are long-running BULK
|
|
240
243
|
// operations (`manage:delete-workspace` cascading 100-row batches, `seed:backfill-starter`
|
|
@@ -387,8 +390,8 @@ async function mcpFetchRaw(fn, args, apiKey, siteUrl) {
|
|
|
387
390
|
* `X-Agent-Session-Id` header).
|
|
388
391
|
* All write commands (update, relate, unrelate, capture) should use this.
|
|
389
392
|
*
|
|
390
|
-
* WP-711/712: the binding guard
|
|
391
|
-
*
|
|
393
|
+
* WP-711/712: the binding guard lives in the shared fetchKernelEnvelope. TEN-3398 (follow-up)
|
|
394
|
+
* added the effective-tenant notice here too, alongside the post-write session-touch below.
|
|
392
395
|
*
|
|
393
396
|
* After a successful write, fires a non-blocking `agent.touchSession` call to
|
|
394
397
|
* renew the session TTL — mirroring MCP server behavior (DEC-299, BET-181 Slice 1).
|
|
@@ -407,6 +410,9 @@ export async function kernelCallWithSession(fn, args = {}, options) {
|
|
|
407
410
|
// write it is renewing. Reusing the pair fetchKernelEnvelope already resolved makes that
|
|
408
411
|
// impossible by construction, not just unlikely.
|
|
409
412
|
const { envelope, apiKey, siteUrl } = await fetchKernelEnvelope(fn, args, options);
|
|
413
|
+
// TEN-3398 (follow-up): the write path announces too — see workspaceNotice.ts's doc comment
|
|
414
|
+
// on emitEffectiveTenantNotice for what this closes and why it's safe to call here.
|
|
415
|
+
await emitEffectiveTenantNotice(isJsonMode());
|
|
410
416
|
const result = envelope.data;
|
|
411
417
|
// Fire-and-forget session touch — best-effort, never blocks the write response.
|
|
412
418
|
// Uses mcpFetchRaw (not kernelCall) to avoid recursion and suppress the visible spinner
|
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,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AAClG,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;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,IAA6B;IACpD,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,MAAM,iBAAiB,GAAG,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IACrF,OAAO,iBAAiB,IAAI,iBAAiB,KAAK,OAAO,EAAE,SAAS;QAClE,CAAC,CAAC,sBAAsB,CAAC,iBAAiB,CAAC;QAC3C,CAAC,CAAC,OAAO,CAAC;AACd,CAAC;AAED;;;;;;;;;;;GAWG;AACH,KAAK,UAAU,mBAAmB,CAChC,EAAU,EACV,IAA6B,EAC7B,OAA2B;IAE3B,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAC;IACxC,8FAA8F;IAC9F,0FAA0F;IAC1F,yFAAyF;IACzF,oFAAoF;IACpF,gDAAgD;IAChD,uBAAuB,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,+BAA+B,CAAC,CAAC;IAC3F,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,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE;QACpE,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,MAAM,GAAG,MAAM,mBAAmB,CAAI,GAAG,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,MAAM,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;YACnC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAC9H,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IAEb,qGAAqG;IACrG,kGAAkG;IAClG,+FAA+F;IAC/F,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,EAAU,EACV,OAAgC,EAAE,EAClC,OAA2B;IAE3B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,mBAAmB,CAAI,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACrE,MAAM,yBAAyB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,yDAAyD;IACxG,OAAO,QAAQ,CAAC,IAAS,CAAC;AAC5B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,EAAU,EACV,OAAgC,EAAE,EAClC,OAA2B;IAE3B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,mBAAmB,CAAI,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACrE,MAAM,yBAAyB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,yDAAyD;IACxG,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;AACxF,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;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,EAAU,EACV,OAAgC,EAAE,EAClC,OAA2B;IAE3B,8FAA8F;IAC9F,8FAA8F;IAC9F,sEAAsE;IACtE,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAE9B,+FAA+F;IAC/F,4FAA4F;IAC5F,2FAA2F;IAC3F,yFAAyF;IACzF,iDAAiD;IACjD,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,mBAAmB,CAAI,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACtF,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAS,CAAC;IAElC,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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"}
|
|
@@ -35,10 +35,20 @@
|
|
|
35
35
|
* target Chain.
|
|
36
36
|
*
|
|
37
37
|
* SSOT: one pure formatter + one thin emitter — called explicitly from the 7 write-command
|
|
38
|
-
* files (8 call sites) and once per process from the shared
|
|
39
|
-
*
|
|
38
|
+
* files (8 call sites) and once per process from the shared kernel wrapper (`client.ts`'s
|
|
39
|
+
* `kernelCall`/`kernelCallEnvelope`/`kernelCallWithSession` — TEN-3398/WP-711 follow-up wired
|
|
40
|
+
* the write path in too, see `emitEffectiveTenantNotice`'s doc comment below) — no per-command
|
|
41
|
+
* copy-paste.
|
|
42
|
+
*
|
|
43
|
+
* `pb admin` is a SEPARATE credential cascade (`adminConfig.ts`'s `resolveAdminConfig`) that
|
|
44
|
+
* deliberately excludes committed `config.json` siteUrl + CWD env files (TEN-1334) — it can
|
|
45
|
+
* resolve a different tenant than the cascade above, so it gets its own formatter-reusing
|
|
46
|
+
* emitter (`emitAdminTenantNotice`/`describeAdminTenantForRefusal` below) rather than sharing
|
|
47
|
+
* `emitEffectiveTenantNotice`'s guard or resolution path.
|
|
40
48
|
*/
|
|
41
49
|
import { type ReportedProfileSource } from './reportedProfile.js';
|
|
50
|
+
import type { AdminConfigSource } from './adminConfig.js';
|
|
51
|
+
import { assertSessionStillBound } from './sessionBinding.js';
|
|
42
52
|
/** A repo-local pin that disagrees with the globally active `pb` profile (WP-714 S3). */
|
|
43
53
|
export interface TenantDisagreement {
|
|
44
54
|
/** The repo-local `.productbrain/config.local.json` pin — what THIS process actually uses. */
|
|
@@ -117,14 +127,23 @@ export declare function resetEffectiveTenantNoticeForTests(): void;
|
|
|
117
127
|
/**
|
|
118
128
|
* Resolve identity and write the target notice to STDERR — for every Chain read OR write.
|
|
119
129
|
* Pass the SAME `json` value the caller computed (e.g. `isJsonMode() || options.json ===
|
|
120
|
-
* true`). WP-714 S3: originally called only from the 8 explicit write call sites;
|
|
130
|
+
* true`). WP-714 S3: originally called only from the 8 explicit write call sites; then ALSO
|
|
121
131
|
* called once per process from `client.ts`'s `kernelCall`/`kernelCallEnvelope` (the plain,
|
|
122
132
|
* non-session read path), so every read command that reaches the kernel announces too.
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
*
|
|
126
|
-
*
|
|
127
|
-
*
|
|
133
|
+
*
|
|
134
|
+
* ALSO wired into `kernelCallWithSession` (the write path) directly (TEN-3398 / WP-711
|
|
135
|
+
* follow-up). This comment used to claim that wiring was unnecessary because "every write
|
|
136
|
+
* command already calls this explicitly" — that premise was false: a census of every command
|
|
137
|
+
* module reaching `kernelCallWithSession` found 11 write commands (`accept-policy.ts`,
|
|
138
|
+
* `audit.ts`, `conflicts.ts`, `direction.ts`, `feedback.ts`, `handshake.ts`, `method.ts`,
|
|
139
|
+
* `questions.ts`, `rework.ts`, `shape.ts`, `verify.ts`) that never called this at all — a
|
|
140
|
+
* silent write with no target-workspace line, `chain.verifyEntry` and `rework.report` among
|
|
141
|
+
* them. A handful of write commands (`capture`/`promote`/`relate`/`restore`/`session`/
|
|
142
|
+
* `update`, plus the shared `organisationWrite.ts`/`runOrganisationWrite` helper used by
|
|
143
|
+
* `organisation.ts`/`organisationHierarchy.ts`) still call it explicitly, earlier in their own
|
|
144
|
+
* flow than any call `kernelCallWithSession` makes (e.g. `update`'s post-write
|
|
145
|
+
* `chain.getEntry` refresh) — the once-per-process guard makes `kernelCallWithSession`'s own
|
|
146
|
+
* call a no-op for those, so their output is unchanged bit-for-bit.
|
|
128
147
|
*
|
|
129
148
|
* `json` suppresses only the PLAIN line for an explicit binding. The unpinned-fallback
|
|
130
149
|
* WARNING is never suppressed (TEN-3238): `--json` is how agents invoke pb, and agents are
|
|
@@ -146,4 +165,38 @@ export declare function resetEffectiveTenantNoticeForTests(): void;
|
|
|
146
165
|
* in front of the call. It is safe to call immediately before any Chain read or write.
|
|
147
166
|
*/
|
|
148
167
|
export declare function emitEffectiveTenantNotice(json: boolean): Promise<void>;
|
|
168
|
+
/**
|
|
169
|
+
* `pb admin`'s own identity, as `resolveAdminConfig()` actually resolved it — for
|
|
170
|
+
* `emitAdminTenantNotice`/`describeAdminTenantForRefusal` below (TEN-3398 / WP-711 follow-up).
|
|
171
|
+
*/
|
|
172
|
+
export interface AdminTenantIdentity {
|
|
173
|
+
profileName: string | null;
|
|
174
|
+
source: AdminConfigSource;
|
|
175
|
+
}
|
|
176
|
+
/** Test-only: reset admin's once-per-identity guard between cases. */
|
|
177
|
+
export declare function resetAdminTenantNoticeForTests(): void;
|
|
178
|
+
/**
|
|
179
|
+
* Resolve identity and write `pb admin`'s target notice to STDERR — once per DISTINCT identity
|
|
180
|
+
* per process (TEN-3398 / WP-711 follow-up: `adminCall` previously carried no notice at all,
|
|
181
|
+
* the one gap left after WP-712/WP-714 S3 covered every other kernel path).
|
|
182
|
+
*
|
|
183
|
+
* Unlike `emitEffectiveTenantNotice`, this NEVER suppresses under `--json` and has no
|
|
184
|
+
* "unpinned fallback" vs "explicit binding" distinction: every `pb admin` command can be a
|
|
185
|
+
* destructive bulk operation (`manage:delete-workspace`, `seed:backfill-starter`), so the
|
|
186
|
+
* identity line is never noise to cut, in any mode.
|
|
187
|
+
*/
|
|
188
|
+
export declare function emitAdminTenantNotice(admin: AdminTenantIdentity): void;
|
|
189
|
+
/**
|
|
190
|
+
* Prose description of `pb admin`'s CURRENT tenant, for embedding in the
|
|
191
|
+
* `assertSessionStillBound` refusal message — mirrors `describeCurrentTenantForRefusal`'s role
|
|
192
|
+
* on the non-admin path, but resolved off `resolveAdminConfig()`'s own identity rather than
|
|
193
|
+
* `resolveReportedProfile()`, for the same reason `adminSourceToReportedSource` exists.
|
|
194
|
+
*/
|
|
195
|
+
export declare function describeAdminTenantForRefusal(admin: AdminTenantIdentity): string;
|
|
196
|
+
/**
|
|
197
|
+
* Announce AND guard one `pb admin` call in a single call (TEN-3398 / WP-711 follow-up) — kept
|
|
198
|
+
* here, not `client.ts`'s `adminCall` (STD-2/DEC-1504 module-health budget), so `adminCall`
|
|
199
|
+
* stays a one-liner and this module owns the whole admin-identity story end to end.
|
|
200
|
+
*/
|
|
201
|
+
export declare function guardAdminCall(admin: AdminTenantIdentity, session: Parameters<typeof assertSessionStillBound>[0], fingerprint: string): void;
|
|
149
202
|
//# 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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAEH,OAAO,EAA0B,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAG1F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,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;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,qBAAqB,GAAG,MAAM,GAAG,IAAI,CAuB3G;AAyBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAInG;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,IAAI,MAAM,CAGxD;AAiDD,wGAAwG;AACxG,wBAAgB,kCAAkC,IAAI,IAAI,CAEzD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B5E;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAwCD,sEAAsE;AACtE,wBAAgB,8BAA8B,IAAI,IAAI,CAErD;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI,CAUtE;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM,CAEhF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,mBAAmB,EAC1B,OAAO,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC,CAAC,CAAC,EACtD,WAAW,EAAE,MAAM,GAClB,IAAI,CAGN"}
|
|
@@ -35,12 +35,21 @@
|
|
|
35
35
|
* target Chain.
|
|
36
36
|
*
|
|
37
37
|
* SSOT: one pure formatter + one thin emitter — called explicitly from the 7 write-command
|
|
38
|
-
* files (8 call sites) and once per process from the shared
|
|
39
|
-
*
|
|
38
|
+
* files (8 call sites) and once per process from the shared kernel wrapper (`client.ts`'s
|
|
39
|
+
* `kernelCall`/`kernelCallEnvelope`/`kernelCallWithSession` — TEN-3398/WP-711 follow-up wired
|
|
40
|
+
* the write path in too, see `emitEffectiveTenantNotice`'s doc comment below) — no per-command
|
|
41
|
+
* copy-paste.
|
|
42
|
+
*
|
|
43
|
+
* `pb admin` is a SEPARATE credential cascade (`adminConfig.ts`'s `resolveAdminConfig`) that
|
|
44
|
+
* deliberately excludes committed `config.json` siteUrl + CWD env files (TEN-1334) — it can
|
|
45
|
+
* resolve a different tenant than the cascade above, so it gets its own formatter-reusing
|
|
46
|
+
* emitter (`emitAdminTenantNotice`/`describeAdminTenantForRefusal` below) rather than sharing
|
|
47
|
+
* `emitEffectiveTenantNotice`'s guard or resolution path.
|
|
40
48
|
*/
|
|
41
49
|
import { resolveReportedProfile } from './reportedProfile.js';
|
|
42
50
|
import { readLocalProjectConfig } from './projectConfig.js';
|
|
43
51
|
import { getGlobalActiveProfile } from './profiles.js';
|
|
52
|
+
import { assertSessionStillBound } from './sessionBinding.js';
|
|
44
53
|
/**
|
|
45
54
|
* Build the one-line target-workspace notice — or null when there is nothing to say.
|
|
46
55
|
*
|
|
@@ -213,14 +222,23 @@ export function resetEffectiveTenantNoticeForTests() {
|
|
|
213
222
|
/**
|
|
214
223
|
* Resolve identity and write the target notice to STDERR — for every Chain read OR write.
|
|
215
224
|
* Pass the SAME `json` value the caller computed (e.g. `isJsonMode() || options.json ===
|
|
216
|
-
* true`). WP-714 S3: originally called only from the 8 explicit write call sites;
|
|
225
|
+
* true`). WP-714 S3: originally called only from the 8 explicit write call sites; then ALSO
|
|
217
226
|
* called once per process from `client.ts`'s `kernelCall`/`kernelCallEnvelope` (the plain,
|
|
218
227
|
* non-session read path), so every read command that reaches the kernel announces too.
|
|
219
|
-
*
|
|
220
|
-
*
|
|
221
|
-
*
|
|
222
|
-
*
|
|
223
|
-
*
|
|
228
|
+
*
|
|
229
|
+
* ALSO wired into `kernelCallWithSession` (the write path) directly (TEN-3398 / WP-711
|
|
230
|
+
* follow-up). This comment used to claim that wiring was unnecessary because "every write
|
|
231
|
+
* command already calls this explicitly" — that premise was false: a census of every command
|
|
232
|
+
* module reaching `kernelCallWithSession` found 11 write commands (`accept-policy.ts`,
|
|
233
|
+
* `audit.ts`, `conflicts.ts`, `direction.ts`, `feedback.ts`, `handshake.ts`, `method.ts`,
|
|
234
|
+
* `questions.ts`, `rework.ts`, `shape.ts`, `verify.ts`) that never called this at all — a
|
|
235
|
+
* silent write with no target-workspace line, `chain.verifyEntry` and `rework.report` among
|
|
236
|
+
* them. A handful of write commands (`capture`/`promote`/`relate`/`restore`/`session`/
|
|
237
|
+
* `update`, plus the shared `organisationWrite.ts`/`runOrganisationWrite` helper used by
|
|
238
|
+
* `organisation.ts`/`organisationHierarchy.ts`) still call it explicitly, earlier in their own
|
|
239
|
+
* flow than any call `kernelCallWithSession` makes (e.g. `update`'s post-write
|
|
240
|
+
* `chain.getEntry` refresh) — the once-per-process guard makes `kernelCallWithSession`'s own
|
|
241
|
+
* call a no-op for those, so their output is unchanged bit-for-bit.
|
|
224
242
|
*
|
|
225
243
|
* `json` suppresses only the PLAIN line for an explicit binding. The unpinned-fallback
|
|
226
244
|
* WARNING is never suppressed (TEN-3238): `--json` is how agents invoke pb, and agents are
|
|
@@ -273,4 +291,84 @@ export async function emitEffectiveTenantNotice(json) {
|
|
|
273
291
|
if (notice)
|
|
274
292
|
process.stderr.write(notice + '\n');
|
|
275
293
|
}
|
|
294
|
+
/**
|
|
295
|
+
* Map `resolveAdminConfig()`'s `AdminConfigSource` onto the read/write notice's
|
|
296
|
+
* `ReportedProfileSource` vocabulary, so `pb admin` reuses the SAME formatter and label rules
|
|
297
|
+
* (`formatEffectiveTenantNotice`/`describeReportedTenant`) instead of a parallel copy. This is
|
|
298
|
+
* deliberately NOT a call to `resolveReportedProfile()` — that walks a DIFFERENT cascade
|
|
299
|
+
* (`config.ts`'s `resolveConfig`, which DOES read committed `config.json` siteUrl + CWD env
|
|
300
|
+
* files) and can disagree with what `resolveAdminConfig()` actually resolved, which would name
|
|
301
|
+
* a tenant this admin call is not actually about to use. `'legacy'` (the nameless
|
|
302
|
+
* `~/.config/productbrain/.env` fallback) has no direct analog in `ReportedProfileSource` — it
|
|
303
|
+
* maps to `'default'`, the closest existing "implicit, no deliberate per-repo pin" qualifier.
|
|
304
|
+
*/
|
|
305
|
+
function adminSourceToReportedSource(source) {
|
|
306
|
+
switch (source) {
|
|
307
|
+
case 'env': return 'env-key';
|
|
308
|
+
case 'local-profile': return 'local';
|
|
309
|
+
case 'global-profile': return 'global';
|
|
310
|
+
case 'legacy': return 'default';
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
/** Admin's own once-per-process guard — separate from `hasAttemptedEffectiveTenantNotice`
|
|
314
|
+
* above, because `resolveAdminConfig()`'s cascade is a different resolution than the one that
|
|
315
|
+
* guard's notice announces.
|
|
316
|
+
*
|
|
317
|
+
* Keyed by IDENTITY (`source:profileName`), not a single boolean (TEN-3398 follow-up,
|
|
318
|
+
* `admin/probe.ts`): `pb admin probe --env prod --env dev` resolves TWO genuinely different
|
|
319
|
+
* named-profile identities in one process, by design (the whole point is comparing them side
|
|
320
|
+
* by side) — a single shared flag would announce the first and silently swallow the second,
|
|
321
|
+
* hiding exactly which tenant the comparison's second half hit. A Set still gives every OTHER
|
|
322
|
+
* admin command (one identity resolved once via `resolveAdminConfig()`, called through
|
|
323
|
+
* `adminCall` any number of times) the same "announce once" behavior a boolean gave, since
|
|
324
|
+
* repeat calls carry the identical key. */
|
|
325
|
+
const announcedAdminTenantKeys = new Set();
|
|
326
|
+
function adminIdentityKey(admin) {
|
|
327
|
+
return `${admin.source}:${admin.profileName ?? ''}`;
|
|
328
|
+
}
|
|
329
|
+
/** Test-only: reset admin's once-per-identity guard between cases. */
|
|
330
|
+
export function resetAdminTenantNoticeForTests() {
|
|
331
|
+
announcedAdminTenantKeys.clear();
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Resolve identity and write `pb admin`'s target notice to STDERR — once per DISTINCT identity
|
|
335
|
+
* per process (TEN-3398 / WP-711 follow-up: `adminCall` previously carried no notice at all,
|
|
336
|
+
* the one gap left after WP-712/WP-714 S3 covered every other kernel path).
|
|
337
|
+
*
|
|
338
|
+
* Unlike `emitEffectiveTenantNotice`, this NEVER suppresses under `--json` and has no
|
|
339
|
+
* "unpinned fallback" vs "explicit binding" distinction: every `pb admin` command can be a
|
|
340
|
+
* destructive bulk operation (`manage:delete-workspace`, `seed:backfill-starter`), so the
|
|
341
|
+
* identity line is never noise to cut, in any mode.
|
|
342
|
+
*/
|
|
343
|
+
export function emitAdminTenantNotice(admin) {
|
|
344
|
+
const key = adminIdentityKey(admin);
|
|
345
|
+
if (announcedAdminTenantKeys.has(key))
|
|
346
|
+
return;
|
|
347
|
+
announcedAdminTenantKeys.add(key);
|
|
348
|
+
const notice = formatEffectiveTenantNotice({
|
|
349
|
+
profile: admin.profileName,
|
|
350
|
+
source: adminSourceToReportedSource(admin.source),
|
|
351
|
+
disagreement: null,
|
|
352
|
+
});
|
|
353
|
+
if (notice)
|
|
354
|
+
process.stderr.write(notice + '\n');
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Prose description of `pb admin`'s CURRENT tenant, for embedding in the
|
|
358
|
+
* `assertSessionStillBound` refusal message — mirrors `describeCurrentTenantForRefusal`'s role
|
|
359
|
+
* on the non-admin path, but resolved off `resolveAdminConfig()`'s own identity rather than
|
|
360
|
+
* `resolveReportedProfile()`, for the same reason `adminSourceToReportedSource` exists.
|
|
361
|
+
*/
|
|
362
|
+
export function describeAdminTenantForRefusal(admin) {
|
|
363
|
+
return describeCurrentTenant(admin.profileName, adminSourceToReportedSource(admin.source));
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Announce AND guard one `pb admin` call in a single call (TEN-3398 / WP-711 follow-up) — kept
|
|
367
|
+
* here, not `client.ts`'s `adminCall` (STD-2/DEC-1504 module-health budget), so `adminCall`
|
|
368
|
+
* stays a one-liner and this module owns the whole admin-identity story end to end.
|
|
369
|
+
*/
|
|
370
|
+
export function guardAdminCall(admin, session, fingerprint) {
|
|
371
|
+
emitAdminTenantNotice(admin);
|
|
372
|
+
assertSessionStillBound(session, fingerprint, () => describeAdminTenantForRefusal(admin));
|
|
373
|
+
}
|
|
276
374
|
//# sourceMappingURL=workspaceNotice.js.map
|
|
@@ -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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"}
|