@productbrain/cli 0.1.0-beta.109 → 0.1.0-beta.1093

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) hide show
  1. package/dist/__tests__/audit.test.js +5 -0
  2. package/dist/__tests__/audit.test.js.map +1 -1
  3. package/dist/__tests__/config.test.js +272 -2
  4. package/dist/__tests__/config.test.js.map +1 -1
  5. package/dist/__tests__/handshake-augment.test.d.ts +2 -0
  6. package/dist/__tests__/handshake-augment.test.d.ts.map +1 -0
  7. package/dist/__tests__/handshake-augment.test.js +423 -0
  8. package/dist/__tests__/handshake-augment.test.js.map +1 -0
  9. package/dist/__tests__/handshake-dormancy.test.d.ts +2 -0
  10. package/dist/__tests__/handshake-dormancy.test.d.ts.map +1 -0
  11. package/dist/__tests__/handshake-dormancy.test.js +207 -0
  12. package/dist/__tests__/handshake-dormancy.test.js.map +1 -0
  13. package/dist/__tests__/handshake-formatter.test.d.ts +2 -0
  14. package/dist/__tests__/handshake-formatter.test.d.ts.map +1 -0
  15. package/dist/__tests__/handshake-formatter.test.js +67 -0
  16. package/dist/__tests__/handshake-formatter.test.js.map +1 -0
  17. package/dist/__tests__/handshake-preview.test.js +65 -3
  18. package/dist/__tests__/handshake-preview.test.js.map +1 -1
  19. package/dist/__tests__/handshake.e2e.test.js +998 -3
  20. package/dist/__tests__/handshake.e2e.test.js.map +1 -1
  21. package/dist/__tests__/handshake.test.js +4 -4
  22. package/dist/__tests__/handshake.test.js.map +1 -1
  23. package/dist/__tests__/notice-marker.test.d.ts +2 -0
  24. package/dist/__tests__/notice-marker.test.d.ts.map +1 -0
  25. package/dist/__tests__/notice-marker.test.js +41 -0
  26. package/dist/__tests__/notice-marker.test.js.map +1 -0
  27. package/dist/__tests__/onboarding-path-b.test.js +4 -4
  28. package/dist/__tests__/onboarding-path-b.test.js.map +1 -1
  29. package/dist/__tests__/orient.test.js +52 -2
  30. package/dist/__tests__/orient.test.js.map +1 -1
  31. package/dist/__tests__/perimeter.test.js +23 -1
  32. package/dist/__tests__/perimeter.test.js.map +1 -1
  33. package/dist/__tests__/preview-key-refresh.test.d.ts +2 -0
  34. package/dist/__tests__/preview-key-refresh.test.d.ts.map +1 -0
  35. package/dist/__tests__/preview-key-refresh.test.js +126 -0
  36. package/dist/__tests__/preview-key-refresh.test.js.map +1 -0
  37. package/dist/__tests__/profiles.test.js +106 -2
  38. package/dist/__tests__/profiles.test.js.map +1 -1
  39. package/dist/__tests__/proof-run.test.d.ts +2 -0
  40. package/dist/__tests__/proof-run.test.d.ts.map +1 -0
  41. package/dist/__tests__/proof-run.test.js +255 -0
  42. package/dist/__tests__/proof-run.test.js.map +1 -0
  43. package/dist/__tests__/session-reset.test.d.ts +2 -0
  44. package/dist/__tests__/session-reset.test.d.ts.map +1 -0
  45. package/dist/__tests__/session-reset.test.js +122 -0
  46. package/dist/__tests__/session-reset.test.js.map +1 -0
  47. package/dist/__tests__/session-resume-backstop.test.d.ts +2 -0
  48. package/dist/__tests__/session-resume-backstop.test.d.ts.map +1 -0
  49. package/dist/__tests__/session-resume-backstop.test.js +97 -0
  50. package/dist/__tests__/session-resume-backstop.test.js.map +1 -0
  51. package/dist/__tests__/session-start-key-refresh.test.d.ts +2 -0
  52. package/dist/__tests__/session-start-key-refresh.test.d.ts.map +1 -0
  53. package/dist/__tests__/session-start-key-refresh.test.js +178 -0
  54. package/dist/__tests__/session-start-key-refresh.test.js.map +1 -0
  55. package/dist/__tests__/session-state-machine.test.js +45 -1
  56. package/dist/__tests__/session-state-machine.test.js.map +1 -1
  57. package/dist/__tests__/session-switch.test.d.ts +2 -0
  58. package/dist/__tests__/session-switch.test.d.ts.map +1 -0
  59. package/dist/__tests__/session-switch.test.js +130 -0
  60. package/dist/__tests__/session-switch.test.js.map +1 -0
  61. package/dist/__tests__/update-check.test.js +160 -1
  62. package/dist/__tests__/update-check.test.js.map +1 -1
  63. package/dist/__tests__/upgrade-runner.test.js +12 -0
  64. package/dist/__tests__/upgrade-runner.test.js.map +1 -1
  65. package/dist/__tests__/upgrade.test.d.ts +2 -0
  66. package/dist/__tests__/upgrade.test.d.ts.map +1 -0
  67. package/dist/__tests__/upgrade.test.js +56 -0
  68. package/dist/__tests__/upgrade.test.js.map +1 -0
  69. package/dist/__tests__/vocabulary-leak.test.d.ts +27 -13
  70. package/dist/__tests__/vocabulary-leak.test.d.ts.map +1 -1
  71. package/dist/__tests__/vocabulary-leak.test.js +169 -14
  72. package/dist/__tests__/vocabulary-leak.test.js.map +1 -1
  73. package/dist/commands/__tests__/setup-detect-surfaces.test.d.ts +15 -0
  74. package/dist/commands/__tests__/setup-detect-surfaces.test.d.ts.map +1 -0
  75. package/dist/commands/__tests__/setup-detect-surfaces.test.js +149 -0
  76. package/dist/commands/__tests__/setup-detect-surfaces.test.js.map +1 -0
  77. package/dist/commands/admin/seedRegistryEntries.generated.js +2 -2
  78. package/dist/commands/admin/seedRegistryEntries.generated.js.map +1 -1
  79. package/dist/commands/admin/seedRegistryEntries.test.js +1 -1
  80. package/dist/commands/admin/seedRegistryEntries.test.js.map +1 -1
  81. package/dist/commands/audit.d.ts.map +1 -1
  82. package/dist/commands/audit.js +30 -3
  83. package/dist/commands/audit.js.map +1 -1
  84. package/dist/commands/authority-domains.d.ts.map +1 -1
  85. package/dist/commands/authority-domains.js +2 -1
  86. package/dist/commands/authority-domains.js.map +1 -1
  87. package/dist/commands/capture.d.ts +2 -0
  88. package/dist/commands/capture.d.ts.map +1 -1
  89. package/dist/commands/capture.js +5 -1
  90. package/dist/commands/capture.js.map +1 -1
  91. package/dist/commands/connect-config.test.d.ts +2 -0
  92. package/dist/commands/connect-config.test.d.ts.map +1 -0
  93. package/dist/commands/connect-config.test.js +44 -0
  94. package/dist/commands/connect-config.test.js.map +1 -0
  95. package/dist/commands/connect-context.d.ts +45 -0
  96. package/dist/commands/connect-context.d.ts.map +1 -0
  97. package/dist/commands/connect-context.js +64 -0
  98. package/dist/commands/connect-context.js.map +1 -0
  99. package/dist/commands/connect-context.test.d.ts +2 -0
  100. package/dist/commands/connect-context.test.d.ts.map +1 -0
  101. package/dist/commands/connect-context.test.js +110 -0
  102. package/dist/commands/connect-context.test.js.map +1 -0
  103. package/dist/commands/connect-screens.d.ts +5 -6
  104. package/dist/commands/connect-screens.d.ts.map +1 -1
  105. package/dist/commands/connect-screens.js +28 -35
  106. package/dist/commands/connect-screens.js.map +1 -1
  107. package/dist/commands/connect.d.ts +16 -0
  108. package/dist/commands/connect.d.ts.map +1 -1
  109. package/dist/commands/connect.js +21 -20
  110. package/dist/commands/connect.js.map +1 -1
  111. package/dist/commands/doctor.js +2 -2
  112. package/dist/commands/doctor.js.map +1 -1
  113. package/dist/commands/doctor.test.js +19 -0
  114. package/dist/commands/doctor.test.js.map +1 -1
  115. package/dist/commands/handshake.d.ts +59 -4
  116. package/dist/commands/handshake.d.ts.map +1 -1
  117. package/dist/commands/handshake.js +392 -97
  118. package/dist/commands/handshake.js.map +1 -1
  119. package/dist/commands/method.d.ts.map +1 -1
  120. package/dist/commands/method.js +2 -1
  121. package/dist/commands/method.js.map +1 -1
  122. package/dist/commands/orient.d.ts +48 -0
  123. package/dist/commands/orient.d.ts.map +1 -1
  124. package/dist/commands/orient.js +25 -5
  125. package/dist/commands/orient.js.map +1 -1
  126. package/dist/commands/profile.d.ts +1 -14
  127. package/dist/commands/profile.d.ts.map +1 -1
  128. package/dist/commands/profile.js +89 -72
  129. package/dist/commands/profile.js.map +1 -1
  130. package/dist/commands/proof-run.d.ts +51 -0
  131. package/dist/commands/proof-run.d.ts.map +1 -0
  132. package/dist/commands/proof-run.js +209 -0
  133. package/dist/commands/proof-run.js.map +1 -0
  134. package/dist/commands/reject.d.ts.map +1 -1
  135. package/dist/commands/reject.js +2 -1
  136. package/dist/commands/reject.js.map +1 -1
  137. package/dist/commands/relate.d.ts.map +1 -1
  138. package/dist/commands/relate.js +4 -2
  139. package/dist/commands/relate.js.map +1 -1
  140. package/dist/commands/session.d.ts +26 -2
  141. package/dist/commands/session.d.ts.map +1 -1
  142. package/dist/commands/session.js +216 -31
  143. package/dist/commands/session.js.map +1 -1
  144. package/dist/commands/setup-audit.d.ts +59 -0
  145. package/dist/commands/setup-audit.d.ts.map +1 -0
  146. package/dist/commands/setup-audit.js +250 -0
  147. package/dist/commands/setup-audit.js.map +1 -0
  148. package/dist/commands/setup-detect-surfaces.d.ts.map +1 -1
  149. package/dist/commands/setup-detect-surfaces.js +10 -1
  150. package/dist/commands/setup-detect-surfaces.js.map +1 -1
  151. package/dist/commands/update.d.ts.map +1 -1
  152. package/dist/commands/update.js +2 -1
  153. package/dist/commands/update.js.map +1 -1
  154. package/dist/commands/upgrade.d.ts.map +1 -1
  155. package/dist/commands/upgrade.js +31 -10
  156. package/dist/commands/upgrade.js.map +1 -1
  157. package/dist/commands/verify.d.ts.map +1 -1
  158. package/dist/commands/verify.js +2 -1
  159. package/dist/commands/verify.js.map +1 -1
  160. package/dist/commands/whoami.d.ts +12 -0
  161. package/dist/commands/whoami.d.ts.map +1 -0
  162. package/dist/commands/whoami.js +70 -0
  163. package/dist/commands/whoami.js.map +1 -0
  164. package/dist/commands/whoami.test.d.ts +2 -0
  165. package/dist/commands/whoami.test.d.ts.map +1 -0
  166. package/dist/commands/whoami.test.js +50 -0
  167. package/dist/commands/whoami.test.js.map +1 -0
  168. package/dist/formatters/__tests__/orient-provenance.test.d.ts +7 -0
  169. package/dist/formatters/__tests__/orient-provenance.test.d.ts.map +1 -0
  170. package/dist/formatters/__tests__/orient-provenance.test.js +454 -0
  171. package/dist/formatters/__tests__/orient-provenance.test.js.map +1 -0
  172. package/dist/formatters/audit.d.ts +6 -0
  173. package/dist/formatters/audit.d.ts.map +1 -1
  174. package/dist/formatters/audit.js.map +1 -1
  175. package/dist/formatters/entry.d.ts +21 -0
  176. package/dist/formatters/entry.d.ts.map +1 -1
  177. package/dist/formatters/entry.js +46 -5
  178. package/dist/formatters/entry.js.map +1 -1
  179. package/dist/formatters/handshake.d.ts +7 -3
  180. package/dist/formatters/handshake.d.ts.map +1 -1
  181. package/dist/formatters/handshake.js +26 -23
  182. package/dist/formatters/handshake.js.map +1 -1
  183. package/dist/formatters/orient.d.ts +54 -0
  184. package/dist/formatters/orient.d.ts.map +1 -1
  185. package/dist/formatters/orient.js +71 -2
  186. package/dist/formatters/orient.js.map +1 -1
  187. package/dist/generators/adapters.js +4 -4
  188. package/dist/generators/region-projections.d.ts +18 -0
  189. package/dist/generators/region-projections.d.ts.map +1 -0
  190. package/dist/generators/region-projections.js +49 -0
  191. package/dist/generators/region-projections.js.map +1 -0
  192. package/dist/generators/region-projections.test.d.ts +2 -0
  193. package/dist/generators/region-projections.test.d.ts.map +1 -0
  194. package/dist/generators/region-projections.test.js +63 -0
  195. package/dist/generators/region-projections.test.js.map +1 -0
  196. package/dist/generators/region.d.ts +24 -0
  197. package/dist/generators/region.d.ts.map +1 -0
  198. package/dist/generators/region.js +87 -0
  199. package/dist/generators/region.js.map +1 -0
  200. package/dist/generators/region.test.d.ts +2 -0
  201. package/dist/generators/region.test.d.ts.map +1 -0
  202. package/dist/generators/region.test.js +126 -0
  203. package/dist/generators/region.test.js.map +1 -0
  204. package/dist/index.js +111 -9
  205. package/dist/index.js.map +1 -1
  206. package/dist/lib/config.d.ts +101 -4
  207. package/dist/lib/config.d.ts.map +1 -1
  208. package/dist/lib/config.js +225 -11
  209. package/dist/lib/config.js.map +1 -1
  210. package/dist/lib/notice-marker.d.ts +3 -0
  211. package/dist/lib/notice-marker.d.ts.map +1 -0
  212. package/dist/lib/notice-marker.js +53 -0
  213. package/dist/lib/notice-marker.js.map +1 -0
  214. package/dist/lib/onboarding-path-b.d.ts.map +1 -1
  215. package/dist/lib/onboarding-path-b.js +0 -1
  216. package/dist/lib/onboarding-path-b.js.map +1 -1
  217. package/dist/lib/onboarding-shared.d.ts +0 -1
  218. package/dist/lib/onboarding-shared.d.ts.map +1 -1
  219. package/dist/lib/onboarding-shared.js +0 -16
  220. package/dist/lib/onboarding-shared.js.map +1 -1
  221. package/dist/lib/profiles.d.ts +3 -1
  222. package/dist/lib/profiles.d.ts.map +1 -1
  223. package/dist/lib/profiles.js +9 -6
  224. package/dist/lib/profiles.js.map +1 -1
  225. package/dist/lib/session.d.ts +10 -0
  226. package/dist/lib/session.d.ts.map +1 -1
  227. package/dist/lib/session.js +26 -1
  228. package/dist/lib/session.js.map +1 -1
  229. package/dist/lib/tokenConstants.d.ts +2 -0
  230. package/dist/lib/tokenConstants.d.ts.map +1 -1
  231. package/dist/lib/tokenConstants.js +2 -0
  232. package/dist/lib/tokenConstants.js.map +1 -1
  233. package/dist/lib/update-check.d.ts +26 -11
  234. package/dist/lib/update-check.d.ts.map +1 -1
  235. package/dist/lib/update-check.js +123 -73
  236. package/dist/lib/update-check.js.map +1 -1
  237. package/dist/lib/upgrade-runner.d.ts +2 -1
  238. package/dist/lib/upgrade-runner.d.ts.map +1 -1
  239. package/dist/lib/upgrade-runner.js +8 -7
  240. package/dist/lib/upgrade-runner.js.map +1 -1
  241. package/dist/setup/perimeter.d.ts +10 -0
  242. package/dist/setup/perimeter.d.ts.map +1 -1
  243. package/dist/setup/perimeter.js +21 -6
  244. package/dist/setup/perimeter.js.map +1 -1
  245. package/package.json +2 -1
  246. package/dist/__tests__/setup.test.d.ts +0 -2
  247. package/dist/__tests__/setup.test.d.ts.map +0 -1
  248. package/dist/__tests__/setup.test.js +0 -141
  249. package/dist/__tests__/setup.test.js.map +0 -1
  250. package/dist/generators/__tests__/surface-profiles.test.d.ts +0 -2
  251. package/dist/generators/__tests__/surface-profiles.test.d.ts.map +0 -1
  252. package/dist/generators/__tests__/surface-profiles.test.js +0 -89
  253. package/dist/generators/__tests__/surface-profiles.test.js.map +0 -1
  254. package/dist/lib/onboarding-phases.d.ts +0 -9
  255. package/dist/lib/onboarding-phases.d.ts.map +0 -1
  256. package/dist/lib/onboarding-phases.js +0 -120
  257. package/dist/lib/onboarding-phases.js.map +0 -1
@@ -7,40 +7,144 @@
7
7
  */
8
8
  import { getConfigOrGuide } from '../lib/config.js';
9
9
  import { kernelCall } from '../lib/client.js';
10
- import { readSession, writeSession, clearSession, readClosedMarker } from '../lib/session.js';
10
+ import { readSession, writeSession, clearSession, discardSession, sessionFileExists, readClosedMarker } from '../lib/session.js';
11
11
  import { isJsonMode } from '../lib/runner.js';
12
+ import { confirm, isInteractive } from '../lib/prompts.js';
12
13
  import { formatSessionStart, formatSessionClose } from '../formatters/session.js';
13
14
  import { runHandshake } from './handshake.js';
14
15
  import { CLIError, ErrorCode } from '../lib/errors.js';
15
16
  import { getActiveProfile } from '../lib/profiles.js';
16
- import { readLocalProjectConfig } from '../lib/config.js';
17
+ import { readLocalProjectConfig, resolveEffectiveProfile, refreshPreviewApiKeyFromDisk } from '../lib/config.js';
17
18
  /** 2-hour window for auto-resume (WP-322 E1). */
18
19
  const RESUME_WINDOW_MS = 2 * 60 * 60 * 1000;
20
+ /**
21
+ * True for the auth/INTERNAL failure a stale preview apiKey produces (WP-458 E2). The server
22
+ * returns an opaque INTERNAL for a rejected key, and a true 401 maps to category 'auth' — either
23
+ * is a candidate for the one-shot preview-key refresh. Scoped to CLIError so plain Errors fall
24
+ * through to a normal rethrow.
25
+ */
26
+ function isStalePreviewKeyError(err) {
27
+ return err instanceof CLIError && (err.category === 'auth' || err.code === ErrorCode.INTERNAL);
28
+ }
29
+ /**
30
+ * The OPAQUE INTERNAL a server-rejected key produces — the one failure doneWhen #1 exists to
31
+ * replace with a clean message. Narrower than isStalePreviewKeyError on purpose: it is the predicate
32
+ * for relabelling a POST-refresh retry failure, which is NOT disk-gated. A retry that fails with a
33
+ * specific, already-actionable auth error (e.g. the read-only-key guard's AUTH_INVALID) must keep
34
+ * its own guidance instead of being rewritten "reseed/rebind" (Codex P2). Only the opaque INTERNAL,
35
+ * which carries no useful guidance of its own, is worth converting.
36
+ */
37
+ function isOpaqueKeyRejection(err) {
38
+ return err instanceof CLIError && err.code === ErrorCode.INTERNAL;
39
+ }
40
+ /**
41
+ * Clean, actionable replacement for the opaque INTERNAL a rejected preview key produces (WP-458
42
+ * doneWhen #1: no opaque INTERNAL). Thrown only when the worktree is preview-bound and the key
43
+ * could not be recovered from preview.json.
44
+ */
45
+ function stalePreviewKeyError() {
46
+ return new CLIError('Preview API key was rejected and no fresh key could be loaded from .productbrain/preview.json.', {
47
+ code: ErrorCode.AUTH_INVALID,
48
+ category: 'auth',
49
+ guidance: 'Reseed the preview (npm run convex:reprovision), re-bind (npm run pb:preview), then retry.',
50
+ });
51
+ }
19
52
  export async function runSessionStart(options = {}) {
20
53
  const config = await getConfigOrGuide(() => runSessionStart(options));
21
54
  if (!config)
22
55
  return;
56
+ let post;
57
+ try {
58
+ post = await establishSession(options);
59
+ }
60
+ catch (err) {
61
+ post = await recoverStalePreviewKey(err, options);
62
+ }
63
+ // Context refresh runs OUTSIDE the recovery scope above. runHandshake throws ErrorCode.INTERNAL
64
+ // for a body-fetch failure that has nothing to do with the apiKey; keeping it here means such a
65
+ // failure surfaces as itself instead of being misread as a stale-key rejection and swallowed by
66
+ // the retry or relabelled "preview key rejected" (no-masking; R2 honesty).
67
+ if (post.run) {
68
+ await runHandshake({ force: false, apply: true, quiet: post.quiet });
69
+ }
70
+ }
71
+ /**
72
+ * E2 (WP-458) stale-preview-key recovery, scoped to the session-establishing kernel calls only.
73
+ * A reseeded preview mints a fresh apiKey (seed Step 6); the locally-bound key is now stale and
74
+ * resolveWorkspace / agent.startSession fail (opaque INTERNAL / 401). Recovery runs ONLY when the
75
+ * worktree is preview-bound — on the real Chain the error is rethrown untouched so a genuine
76
+ * failure is never masked (R2). The retry runs at most once.
77
+ */
78
+ async function recoverStalePreviewKey(err, options) {
79
+ const previewBound = readLocalProjectConfig()?.preview === true;
80
+ if (!previewBound || !isStalePreviewKeyError(err))
81
+ throw err;
82
+ const outcome = refreshPreviewApiKeyFromDisk();
83
+ if (outcome === 'refreshed') {
84
+ try {
85
+ return await establishSession(options); // one-shot retry with the freshly-read key
86
+ }
87
+ catch (retryErr) {
88
+ // The retry ran with a genuinely fresh key. Only convert it to the clean stale-key error if
89
+ // it is itself an OPAQUE INTERNAL (the failure doneWhen #1 targets). Any other failure —
90
+ // backend unreachable (plain Error), or an already-actionable auth error like the read-only
91
+ // -key guard's AUTH_INVALID — must surface its own error + remedy, never be rewritten
92
+ // "reseed/rebind" (Codex P2: an auth-shaped retry failure is not necessarily a stale key).
93
+ if (isOpaqueKeyRejection(retryErr))
94
+ throw stalePreviewKeyError();
95
+ throw retryErr;
96
+ }
97
+ }
98
+ if (outcome === 'unavailable') {
99
+ // Preview-bound but no fresh key to recover with — name the situation cleanly (doneWhen #1).
100
+ throw stalePreviewKeyError();
101
+ }
102
+ // 'unchanged' / 'not-bound': the bound key is current, or a genuine env override is in play, so
103
+ // this auth/INTERNAL failure is NOT a stale-key problem. Surface the original error rather than
104
+ // relabel it as a key rejection (no-masking; R2 honesty; Codex P2 env-override + unrelated-INTERNAL).
105
+ throw err;
106
+ }
107
+ async function establishSession(options) {
23
108
  // Support both legacy --json flag and global output mode (DEC-299, backward compat)
24
109
  const json = isJsonMode() || options.json === true;
110
+ // Effective profile for this start — used both for the switch-backstop decision and to
111
+ // stamp the session (one read, one value, so they can't disagree mid-start).
112
+ const effectiveProfile = resolveEffectiveProfile().profile;
25
113
  // Check for existing session
26
114
  const existing = readSession();
27
115
  if (existing) {
28
- if (json) {
29
- process.stdout.write(JSON.stringify({
30
- sessionId: existing.sessionId,
31
- workspaceName: existing.workspaceName,
32
- startedAt: existing.startedAt,
33
- alreadyActive: true,
34
- activeProfile: readLocalProjectConfig()?.profile ?? getActiveProfile(),
35
- }) + '\n');
36
- return;
116
+ // Backstop (TEN-2163): if the effective profile changed since this session started,
117
+ // it's pinned to the old workspace — discard it and start fresh. Local, offline-safe.
118
+ const currentProfile = effectiveProfile;
119
+ const switched = existing.profile && currentProfile && existing.profile !== currentProfile;
120
+ if (switched) {
121
+ discardSession();
122
+ // fall through to the fresh-start path below
123
+ }
124
+ else {
125
+ // Codex P2: an already-active session returns here without any kernel call, so the
126
+ // catch-based recovery never fires. After a reseed the locally-bound preview key is stale,
127
+ // and leaving it bound would make the NEXT pb write fail with the rejected key. Proactively
128
+ // re-read the fresh key from preview.json — disk-to-disk, no network, so the offline-safe
129
+ // status report stays offline-safe (refreshPreviewApiKeyFromDisk no-ops off a preview binding).
130
+ refreshPreviewApiKeyFromDisk();
131
+ if (json) {
132
+ process.stdout.write(JSON.stringify({
133
+ sessionId: existing.sessionId,
134
+ workspaceName: existing.workspaceName,
135
+ startedAt: existing.startedAt,
136
+ alreadyActive: true,
137
+ activeProfile: readLocalProjectConfig()?.profile ?? getActiveProfile(),
138
+ }) + '\n');
139
+ return { run: false, quiet: json };
140
+ }
141
+ process.stdout.write(`Session already active: ${existing.sessionId}\n`);
142
+ process.stdout.write(`Started: ${existing.startedAt}\n`);
143
+ process.stdout.write(`Entries captured: ${existing.entriesCaptured.length}\n`);
144
+ process.stdout.write('\n');
145
+ process.stdout.write('Run `pb session close` to end it, or `pb session close --force` to force-close.\n');
146
+ return { run: false, quiet: false };
37
147
  }
38
- process.stdout.write(`Session already active: ${existing.sessionId}\n`);
39
- process.stdout.write(`Started: ${existing.startedAt}\n`);
40
- process.stdout.write(`Entries captured: ${existing.entriesCaptured.length}\n`);
41
- process.stdout.write('\n');
42
- process.stdout.write('Run `pb session close` to end it, or `pb session close --force` to force-close.\n');
43
- return;
44
148
  }
45
149
  // WP-322 E1: Check for a recent closed session — auto-resume within 2h window
46
150
  const closedMarker = readClosedMarker();
@@ -49,7 +153,17 @@ export async function runSessionStart(options = {}) {
49
153
  if (elapsed < RESUME_WINDOW_MS) {
50
154
  // Resolve workspace to get keyId (needed for resumeSession)
51
155
  const wsForResume = await kernelCall('resolveWorkspace', {});
52
- if (wsForResume?.keyId) {
156
+ // Backstop (TEN-2189): the closed marker is pinned to a workspace. If the current binding
157
+ // now resolves to a DIFFERENT workspace (a pb:preview/pb:real flip or profile switch since
158
+ // close), resuming would call agent.resumeSession with a foreign session id and the
159
+ // deployment rejects the cross-workspace resume. Discard the stale marker and fall through
160
+ // to a fresh start instead. This mirrors the active-session profile backstop above, keyed
161
+ // on workspaceId — the resume path previously had no such guard, which is the gap E2 closes.
162
+ if (wsForResume?._id && closedMarker.workspaceId !== wsForResume._id) {
163
+ discardSession();
164
+ // fall through to the fresh-start path below
165
+ }
166
+ else if (wsForResume?.keyId) {
53
167
  if (!json)
54
168
  process.stdout.write('Resuming session...\n');
55
169
  const resumed = await kernelCall('agent.resumeSession', {
@@ -65,6 +179,7 @@ export async function runSessionStart(options = {}) {
65
179
  workspaceName: resumed.workspaceName,
66
180
  startedAt: new Date().toISOString(),
67
181
  entriesCaptured: [],
182
+ profile: effectiveProfile ?? undefined,
68
183
  };
69
184
  writeSession(state);
70
185
  if (json) {
@@ -76,8 +191,7 @@ export async function runSessionStart(options = {}) {
76
191
  linkedPreviousSessionId: closedMarker.sessionId,
77
192
  activeProfile: readLocalProjectConfig()?.profile ?? getActiveProfile(),
78
193
  }) + '\n');
79
- await runHandshake({ force: false, apply: true, quiet: true });
80
- return;
194
+ return { run: true, quiet: true };
81
195
  }
82
196
  const elapsedMins = Math.round(elapsed / 60_000);
83
197
  const elapsedLabel = elapsedMins < 60
@@ -86,8 +200,7 @@ export async function runSessionStart(options = {}) {
86
200
  process.stdout.write(`Resuming session (linked from ${shortPrevId}, closed ${elapsedLabel})\n`);
87
201
  process.stdout.write(formatSessionStart(state, undefined, readLocalProjectConfig()?.profile ?? getActiveProfile()) + '\n');
88
202
  process.stdout.write('Refreshing context...\n');
89
- await runHandshake({ force: false, apply: true });
90
- return;
203
+ return { run: true, quiet: false };
91
204
  }
92
205
  }
93
206
  else {
@@ -119,6 +232,7 @@ export async function runSessionStart(options = {}) {
119
232
  workspaceName: result.workspaceName,
120
233
  startedAt: new Date().toISOString(),
121
234
  entriesCaptured: [],
235
+ profile: effectiveProfile ?? undefined,
122
236
  };
123
237
  writeSession(state);
124
238
  if (json) {
@@ -128,14 +242,13 @@ export async function runSessionStart(options = {}) {
128
242
  startedAt: state.startedAt,
129
243
  activeProfile: getActiveProfile(),
130
244
  }) + '\n');
131
- // Refresh silently in JSON mode
132
- await runHandshake({ force: false, apply: true, quiet: true });
133
- return;
245
+ // Refresh silently in JSON mode (runs in the caller, outside the recovery scope).
246
+ return { run: true, quiet: true };
134
247
  }
135
248
  process.stdout.write(formatSessionStart(state, result.superseded, readLocalProjectConfig()?.profile ?? getActiveProfile()) + '\n');
136
- // Refresh context files
249
+ // Refresh context files (runHandshake runs in the caller, outside the recovery scope).
137
250
  process.stdout.write('Refreshing context...\n');
138
- await runHandshake({ force: false, apply: true });
251
+ return { run: true, quiet: false };
139
252
  }
140
253
  /**
141
254
  * pb session id — print current session ID bare to stdout (machine-readable).
@@ -152,6 +265,56 @@ export function runSessionId() {
152
265
  }
153
266
  process.stdout.write(session.sessionId + '\n');
154
267
  }
268
+ /**
269
+ * pb session reset — hard-reset the worktree-local pb SESSION state. TEN-2189 / WP-456 E2.
270
+ *
271
+ * Discards session.json outright (via discardSession — NO resume marker, unlike
272
+ * `pb session close`). Purely local: no network call, no key needed — this is the recovery
273
+ * path when a session is stranded pinned to the wrong workspace (e.g. left over after a
274
+ * pb:preview/pb:real binding flip), so it must work even when the current binding is broken.
275
+ *
276
+ * Scope: SESSION state only. The preview *binding* (config.local.json keys + the
277
+ * .productbrain/PREVIEW_MODE marker) is owned end-to-end by `npm run pb:preview` /
278
+ * `npm run pb:real` — reset never touches it, so the marker can never disagree with the keys
279
+ * that actually route writes (codex PR #145 review: clearing the marker without the keys left
280
+ * the worktree silently still preview-bound). To return a preview-bound worktree to the real
281
+ * Chain: `pb session reset` (clear the session) then `npm run pb:real` (clear the binding).
282
+ *
283
+ * Guard (R4): if there IS an active session, confirm before discarding so in-flight captures
284
+ * aren't silently stranded. `--force` skips the prompt. In a non-interactive context the prompt
285
+ * can't run, so `--force` is required there.
286
+ */
287
+ export async function runSessionReset(options = {}) {
288
+ const active = readSession();
289
+ // Nothing local to reset — neither an active session nor a closed marker. (A lone
290
+ // PREVIEW_MODE marker is binding state, not session state — `npm run pb:real` clears it.)
291
+ if (!active && !sessionFileExists()) {
292
+ process.stdout.write('Nothing to reset — no local session state.\n');
293
+ return;
294
+ }
295
+ // Active session present: confirm before discarding (R4) unless --force.
296
+ if (active && !options.force) {
297
+ if (!isInteractive()) {
298
+ throw new CLIError('Active session present — refusing to reset without confirmation.', {
299
+ code: ErrorCode.NON_INTERACTIVE,
300
+ category: 'session',
301
+ guidance: 'Re-run with `pb session reset --force` to discard the active session.',
302
+ });
303
+ }
304
+ process.stdout.write(`Active session: ${active.sessionId} (${active.entriesCaptured.length} entries captured)\n`);
305
+ const ok = await confirm({
306
+ message: 'Discard this active session and any in-flight captures?',
307
+ initialValue: false,
308
+ });
309
+ if (!ok) {
310
+ process.stdout.write('Reset cancelled — session left intact.\n');
311
+ return;
312
+ }
313
+ }
314
+ // Hard-reset: discard session.json (no resume marker). Binding state is left untouched.
315
+ discardSession();
316
+ process.stdout.write('Session state reset — session.json cleared.\n');
317
+ }
155
318
  export async function runSessionClose(options = {}) {
156
319
  const config = await getConfigOrGuide(() => runSessionClose(options));
157
320
  if (!config)
@@ -186,18 +349,40 @@ export async function runSessionClose(options = {}) {
186
349
  }
187
350
  catch (err) {
188
351
  if (!options.force) {
189
- throw new CLIError(`Failed to close session: ${err instanceof Error ? err.message : String(err)}`, {
352
+ const detail = err instanceof Error ? err.message : String(err);
353
+ throw new CLIError(`Failed to close session: ${detail}. Run \`pb session close --force\` to clear local state anyway.`, {
190
354
  code: ErrorCode.NETWORK_UNREACHABLE,
191
355
  category: 'network',
192
- guidance: 'Use `pb session close --force` to clear local state anyway.',
356
+ guidance: 'Run `pb session close --force` to clear local state anyway.',
193
357
  });
194
358
  }
195
359
  }
196
360
  process.stdout.write(formatSessionClose(session) + '\n');
361
+ // WP-439 S6: surface unrepaired setup-asset receipts as a non-blocking
362
+ // advisory. Failures here are silent — never let a network blip or schema
363
+ // gap prevent a session from closing.
364
+ try {
365
+ const advisory = await kernelCall('setup.listFailedAuditReceipts', {});
366
+ if (advisory.total > 0) {
367
+ const preview = advisory.entries
368
+ .slice(0, 3)
369
+ .map((e) => `${e.entryId} (${e.status})`)
370
+ .join(', ');
371
+ const more = advisory.total > 3 ? ` and ${advisory.total - 3} more` : '';
372
+ process.stdout.write(`\nNote: ${advisory.total} unrepaired setup-asset receipt(s) on file — ${preview}${more}.\n` +
373
+ 'Run `pb setup-audit` to inspect; `pb setup-audit --repair` to retry.\n');
374
+ }
375
+ }
376
+ catch {
377
+ // Advisory call failure is non-fatal.
378
+ }
197
379
  // Clear local state
198
380
  clearSession();
199
- // Refresh context files so next session starts with updated knowledge
381
+ // Refresh context files so next session starts with updated knowledge.
382
+ // WP-439 S4: internal handshake runs lenient — strict-mode failures from an
383
+ // automatic refresh would block close; orphans are surfaced via the
384
+ // advisory above + `pb handshake` (called directly) instead.
200
385
  process.stdout.write('Refreshing context...\n');
201
- await runHandshake({ force: false, apply: true });
386
+ await runHandshake({ force: false, apply: true, lenient: true });
202
387
  }
203
388
  //# sourceMappingURL=session.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * `pb setup-audit` — WP-439 S2 (audit) + S3 (--repair).
3
+ *
4
+ * Operator preflight for handshake: classifies every setup_asset row in the
5
+ * caller's active workspace and surfaces orphaned bodies BEFORE handshake
6
+ * runs. With --repair, attempts a transactional fix for each orphan that has
7
+ * a canonical body in STARTER_* (class III and class II rows).
8
+ *
9
+ * Modes:
10
+ * pb setup-audit — human table; exit 1 if orphans > 0.
11
+ * pb setup-audit --json — machine-readable JSON; exit 1 if orphans > 0.
12
+ * pb setup-audit --repair — audit + attempt repair on III/II rows.
13
+ * Exit 1 if any repair genuinely fails (not
14
+ * counted: 'unrecoverable' — those are
15
+ * expected when no STARTER_* match exists).
16
+ *
17
+ * Server contract (see convex/setup.ts:auditAssetBodies, repairAssetBody):
18
+ * - Gateway derives workspaceId from the API key / JWT (injectSessionAuth).
19
+ * - Audit returns { summary, rows[] }. See `AuditResult` below.
20
+ * - Repair returns { status, newBodyStorageId, error, receiptId }.
21
+ *
22
+ * Notes:
23
+ * - Class 'i_inline_only' rows are NOT repaired by this slice (their body
24
+ * recovery comes from the inline `data.body` via a future bet, not from
25
+ * STARTER_*).
26
+ * - Class 'iv_hash_drift' rows are NOT repaired by this slice (out of scope
27
+ * for S3; resolution is per-row operator review).
28
+ *
29
+ * Auth: requires `pb login` / API key. No active write session needed.
30
+ */
31
+ export interface AuditRow {
32
+ entryId: string;
33
+ entryDocId: string;
34
+ assetKind: 'skill' | 'rule' | 'hook' | 'bundle';
35
+ name: string;
36
+ class: 'ok' | 'i_inline_only' | 'ii_unrecoverable' | 'iii_blob_missing' | 'iv_hash_drift';
37
+ bodyStorageId: string | null;
38
+ inlineBytes: number;
39
+ }
40
+ export interface AuditResult {
41
+ summary: {
42
+ total: number;
43
+ ok: number;
44
+ orphans: number;
45
+ byClass: {
46
+ i: number;
47
+ ii: number;
48
+ iii: number;
49
+ iv: number;
50
+ };
51
+ };
52
+ rows: AuditRow[];
53
+ }
54
+ export interface RunSetupAuditOptions {
55
+ json?: boolean;
56
+ repair?: boolean;
57
+ }
58
+ export declare function runSetupAudit(opts?: RunSetupAuditOptions): Promise<void>;
59
+ //# sourceMappingURL=setup-audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-audit.d.ts","sourceRoot":"","sources":["../../src/commands/setup-audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAkBH,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,IAAI,GAAG,eAAe,GAAG,kBAAkB,GAAG,kBAAkB,GAAG,eAAe,CAAC;IAC1F,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC;KAC7D,CAAC;IACF,IAAI,EAAE,QAAQ,EAAE,CAAC;CAClB;AAsKD,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAcD,wBAAsB,aAAa,CAAC,IAAI,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8FlF"}