@productbrain/cli 0.1.0-beta.10904 → 0.1.0-beta.10914

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 (47) hide show
  1. package/dist/__tests__/capture-receipt-role-hint.test.js +2 -5
  2. package/dist/__tests__/capture-receipt-role-hint.test.js.map +1 -1
  3. package/dist/__tests__/capture.test.js +83 -621
  4. package/dist/__tests__/capture.test.js.map +1 -1
  5. package/dist/__tests__/rate-limit-resilience.test.js +2 -36
  6. package/dist/__tests__/rate-limit-resilience.test.js.map +1 -1
  7. package/dist/__tests__/removed-commands.test.js +8 -2
  8. package/dist/__tests__/removed-commands.test.js.map +1 -1
  9. package/dist/__tests__/session-touch.test.js +48 -112
  10. package/dist/__tests__/session-touch.test.js.map +1 -1
  11. package/dist/__tests__/workspaceNotice.test.js +3 -15
  12. package/dist/__tests__/workspaceNotice.test.js.map +1 -1
  13. package/dist/commands/capture.d.ts +4 -9
  14. package/dist/commands/capture.d.ts.map +1 -1
  15. package/dist/commands/capture.js +30 -151
  16. package/dist/commands/capture.js.map +1 -1
  17. package/dist/handleCliError.d.ts +0 -2
  18. package/dist/handleCliError.d.ts.map +1 -1
  19. package/dist/handleCliError.js +3 -0
  20. package/dist/handleCliError.js.map +1 -1
  21. package/dist/index.js +1 -2
  22. package/dist/index.js.map +1 -1
  23. package/dist/lib/client.d.ts +9 -10
  24. package/dist/lib/client.d.ts.map +1 -1
  25. package/dist/lib/client.js +19 -62
  26. package/dist/lib/client.js.map +1 -1
  27. package/dist/lib/rate-limit.js +1 -1
  28. package/dist/registerEntryCommands.d.ts.map +1 -1
  29. package/dist/registerEntryCommands.js +1 -2
  30. package/dist/registerEntryCommands.js.map +1 -1
  31. package/package.json +1 -1
  32. package/dist/__tests__/collection-registry-seed-drift.test.d.ts +0 -2
  33. package/dist/__tests__/collection-registry-seed-drift.test.d.ts.map +0 -1
  34. package/dist/__tests__/collection-registry-seed-drift.test.js +0 -102
  35. package/dist/__tests__/collection-registry-seed-drift.test.js.map +0 -1
  36. package/dist/lib/captureGrounding.d.ts +0 -48
  37. package/dist/lib/captureGrounding.d.ts.map +0 -1
  38. package/dist/lib/captureGrounding.js +0 -54
  39. package/dist/lib/captureGrounding.js.map +0 -1
  40. package/dist/lib/captureGrounding.test.d.ts +0 -2
  41. package/dist/lib/captureGrounding.test.d.ts.map +0 -1
  42. package/dist/lib/captureGrounding.test.js +0 -74
  43. package/dist/lib/captureGrounding.test.js.map +0 -1
  44. package/dist/lib/collectionRegistry.d.ts +0 -73
  45. package/dist/lib/collectionRegistry.d.ts.map +0 -1
  46. package/dist/lib/collectionRegistry.js +0 -135
  47. package/dist/lib/collectionRegistry.js.map +0 -1
@@ -1,73 +0,0 @@
1
- /**
2
- * Runtime collection registry — fetches from chain.listCollections via kernelCall
3
- * and memoizes per process invocation (module-scope singleton).
4
- *
5
- * Fails open to a build-time SEED snapshot (mirrors PREFIX_TO_COLLECTION in
6
- * capture.ts) so CLI commands continue to work even when the backend is
7
- * unreachable or chain.listCollections is unavailable.
8
- *
9
- * FEAT-885 / TEN-1406: Replaces hardcoded PREFIX_TO_COLLECTION + datedCollections
10
- * constants with runtime-derived data. BR-108: CLI cannot import from convex/,
11
- * so registry uses kernelCall (HTTP gateway).
12
- */
13
- export interface CollectionMeta {
14
- slug: string;
15
- idPrefix?: string;
16
- classificationCheck?: string;
17
- classificationSignals?: string[];
18
- navGroup?: string;
19
- governed?: boolean;
20
- governanceFunction?: string;
21
- /** WP-707 S1 round 3 (operator ruling #13): the collection's declared canonical kind — lets
22
- * `--entry-type` derive its drawer from the SAME 1:1 registry the server enforces
23
- * (`getRequiredCollectionSlugForKind`, convex/lib/seedTypeRegistry.ts), instead of a
24
- * hand-picked pair of literal branches. Present on the live `chain.listCollections` payload
25
- * (`collections.defaultCanonicalKey`); populated on the offline SEED fallback only where
26
- * added below. */
27
- defaultCanonicalKey?: string;
28
- }
29
- /**
30
- * SEED — the OFFLINE FAIL-OPEN FALLBACK only (WP-480 S2, TEN-2219).
31
- * The online path derives from `chain.listCollections` (getCollections below);
32
- * this snapshot exists solely so CLI commands keep working when the backend is
33
- * unreachable. It therefore only needs day-zero accuracy, and is content-pinned
34
- * against the canonical day-zero seed truth —
35
- * `convex/lib/seedClassificationRegistry.ts` on the {slug, idPrefix} projection
36
- * (see src/__tests__/collection-registry-seed-drift.test.ts). Two carve-outs
37
- * have no canonical counterpart and are excluded from the pin:
38
- * - `work-packages → BET` (BET-230 rename backward compat; canonical maps only WP).
39
- * - `objectives → KEY` (P1 review PRRT_kwDORS4ils6cUz6M, WP-686 S6; rationale corrected PR
40
- * #824, 2026-09-04): the canonical registry flipped `objectives`'s idPrefix from KEY to OBJ
41
- * in place (S5, TASK-91) rather than adding a parallel row, so there is no canonical KEY
42
- * entry to pin against — but a version-skewed CLI running OFFLINE (this SEED's only use
43
- * case) against a STALE local cache or export predating the fleet-wide id-rewrite (now
44
- * `applied` everywhere — live-scope-subset, live:8 dead:0, per artifact generatedAt
45
- * 2026-09-04T19:43:27.412Z; wp686_key_to_obj_prefix_rewrite.md no longer exists) can still
46
- * see `KEY`, so `pb capture "KEY: ..."` still needs to route to `objectives`, same reasoning
47
- * as the BET alias above.
48
- */
49
- export declare const SEED: CollectionMeta[];
50
- /**
51
- * Fetch all collections for the current workspace.
52
- * Module-scope memoized — calls kernelCall once per process, then returns
53
- * the cached result. Fails open to SEED on any error.
54
- */
55
- export declare function getCollections(): Promise<CollectionMeta[]>;
56
- /**
57
- * Build a prefix → collection slug map from the runtime registry.
58
- * Falls back to SEED-derived map on failure.
59
- */
60
- export declare function getPrefixToCollection(): Promise<Record<string, string>>;
61
- /**
62
- * WP-707 S1 round 3 (operator ruling #13): build a canonicalKey → collection slug map from the
63
- * runtime registry — the CLI-side mirror of `getRequiredCollectionSlugForKind`
64
- * (convex/lib/seedTypeRegistry.ts). Used by capture.ts's `--entry-type` fast path so ANY kind
65
- * with its own 1:1 drawer resolves automatically, instead of a hand-picked pair of literal
66
- * branches that needs a new one hand-added for every future drawer. Only a kind with EXACTLY ONE
67
- * collection declaring it as `defaultCanonicalKey` resolves — consistent with the
68
- * one-type-one-collection invariant this PR establishes server-side; a kind with zero or more
69
- * than one owner slug resolves to undefined so the caller falls through to server-side
70
- * classification instead of guessing.
71
- */
72
- export declare function getCanonicalKeyToCollection(): Promise<Record<string, string>>;
73
- //# sourceMappingURL=collectionRegistry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"collectionRegistry.d.ts","sourceRoot":"","sources":["../../src/lib/collectionRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;uBAKmB;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AAWH,eAAO,MAAM,IAAI,EAAE,cAAc,EA+BhC,CAAC;AAIF;;;;GAIG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAkBhE;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAO7E;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAcnF"}
@@ -1,135 +0,0 @@
1
- /**
2
- * Runtime collection registry — fetches from chain.listCollections via kernelCall
3
- * and memoizes per process invocation (module-scope singleton).
4
- *
5
- * Fails open to a build-time SEED snapshot (mirrors PREFIX_TO_COLLECTION in
6
- * capture.ts) so CLI commands continue to work even when the backend is
7
- * unreachable or chain.listCollections is unavailable.
8
- *
9
- * FEAT-885 / TEN-1406: Replaces hardcoded PREFIX_TO_COLLECTION + datedCollections
10
- * constants with runtime-derived data. BR-108: CLI cannot import from convex/,
11
- * so registry uses kernelCall (HTTP gateway).
12
- */
13
- import { kernelCall } from './client.js';
14
- /**
15
- * SEED — the OFFLINE FAIL-OPEN FALLBACK only (WP-480 S2, TEN-2219).
16
- * The online path derives from `chain.listCollections` (getCollections below);
17
- * this snapshot exists solely so CLI commands keep working when the backend is
18
- * unreachable. It therefore only needs day-zero accuracy, and is content-pinned
19
- * against the canonical day-zero seed truth —
20
- * `convex/lib/seedClassificationRegistry.ts` on the {slug, idPrefix} projection
21
- * (see src/__tests__/collection-registry-seed-drift.test.ts). Two carve-outs
22
- * have no canonical counterpart and are excluded from the pin:
23
- * - `work-packages → BET` (BET-230 rename backward compat; canonical maps only WP).
24
- * - `objectives → KEY` (P1 review PRRT_kwDORS4ils6cUz6M, WP-686 S6; rationale corrected PR
25
- * #824, 2026-09-04): the canonical registry flipped `objectives`'s idPrefix from KEY to OBJ
26
- * in place (S5, TASK-91) rather than adding a parallel row, so there is no canonical KEY
27
- * entry to pin against — but a version-skewed CLI running OFFLINE (this SEED's only use
28
- * case) against a STALE local cache or export predating the fleet-wide id-rewrite (now
29
- * `applied` everywhere — live-scope-subset, live:8 dead:0, per artifact generatedAt
30
- * 2026-09-04T19:43:27.412Z; wp686_key_to_obj_prefix_rewrite.md no longer exists) can still
31
- * see `KEY`, so `pb capture "KEY: ..."` still needs to route to `objectives`, same reasoning
32
- * as the BET alias above.
33
- */
34
- // WP-690 S7 (TASK-120, twice-corrected): pinned to
35
- // convex/lib/seedClassificationRegistry.ts's corrected 30 -> 27 list (see that file's header for
36
- // the full correction history).
37
- // WP-780 (DEC-1962, PR #1543 review): SEED carries no slug the catalog (dev-system-collections.json) marks
38
- // retired — a prefixed capture would skip classification only to be refused by the server's retirement check.
39
- // principles, standards, business-rules, architecture, maps, flows, milestones, workstreams and initiatives are
40
- // removed with the collections; collection-registry-seed-drift.test.ts reads retirement from the catalog.
41
- // P3b U0 review round 2 (TASK-401, WP-780): 'features'/'audiences'/'opportunities' (pack-owned,
42
- // same MODULE_ONTOLOGY_PACKS) and 'policies'/'patterns' are now retired in the catalog — removed
43
- // from SEED below, not merely pack-owned-and-kept.
44
- export const SEED = [
45
- // P3b U0 review round 2 (Codex, PRRT_kwDORS4ils6lyk4l, TASK-401, WP-780): 'policies' (POL),
46
- // 'patterns' (PAT) and 'features' (FEAT) removed — all three retired in the catalog; a
47
- // prefixed capture would skip classification only to have the server's retirement check
48
- // refuse the write.
49
- { slug: 'glossary', idPrefix: 'GLO' },
50
- { slug: 'decisions', idPrefix: 'DEC' },
51
- { slug: 'strategy', idPrefix: 'STR', defaultCanonicalKey: 'strategy' }, // WP-707 S1 (DEC-1622): strategy is a normal 1:1 collection now — round 3 ruling #13's generalized --entry-type derivation exercises this kind (never a hand-picked branch).
52
- { slug: 'semantic-types', idPrefix: 'ST' },
53
- { slug: 'tensions', idPrefix: 'TEN' },
54
- { slug: 'teams', idPrefix: 'TEAM' },
55
- { slug: 'roles', idPrefix: 'ROL' },
56
- { slug: 'insights', idPrefix: 'INS' },
57
- { slug: 'tasks', idPrefix: 'TASK' },
58
- { slug: 'questions', idPrefix: 'QUE', defaultCanonicalKey: 'question' },
59
- // WP-707 S1 round 3.1 (Codex post-round-3 P2): vision/purpose are NEW 1:1 drawers this same PR
60
- // adds (DEC-1622) — no canonical seedClassificationRegistry.ts row exists yet (see the
61
- // matching carve-outs in collection-registry-seed-drift.test.ts), but the offline
62
- // --entry-type derivation (getCanonicalKeyToCollection, ruling #13) and "VIS:"/"PUR:"
63
- // capture-prefix routing both need them present even during a chain.listCollections outage.
64
- { slug: 'vision', idPrefix: 'VIS', defaultCanonicalKey: 'vision' },
65
- { slug: 'purpose', idPrefix: 'PUR', defaultCanonicalKey: 'purpose' },
66
- { slug: 'work-packages', idPrefix: 'WP' },
67
- { slug: 'work-packages', idPrefix: 'BET' }, // legacy alias — BET-230 rename backward compat
68
- { slug: 'objectives', idPrefix: 'OBJ', defaultCanonicalKey: 'objective' }, // WP-686 S3 (TASK-89) slug rename + S5 (TASK-91) idPrefix flip in place; old KEY-<n> ENTRY ids resolve via entryIdAliases regardless
69
- { slug: 'objectives', idPrefix: 'KEY' }, // legacy alias — P1 review PRRT_kwDORS4ils6cUz6M (WP-686 S6): keeps "KEY: ..." capture-prefix routing working for a version-skewed offline CLI against a not-yet-migrated (e.g. prod, pre-SW-3) workspace
70
- { slug: 'key-results', idPrefix: 'KR', defaultCanonicalKey: 'key_result' }, // WP-707 S1 round 2 (DEC-1622): key_result now files into its OWN 1:1 drawer, split out of the objectives drawer it used to share — keeps "KR: ..." capture-prefix routing (and the --entry-type derivation, round 3 ruling #13) working offline too.
71
- { slug: 'products', idPrefix: 'PROD' },
72
- // P3b U0 review round 2 (Codex, PRRT_kwDORS4ils6lyk4l, TASK-401, WP-780): 'audiences'
73
- // (AUD) and 'opportunities' (OPP) removed — same reason as policies/patterns above.
74
- { slug: 'rules', idPrefix: 'RULE' }, // PR #778 review round 2 (P2, PRRT_kwDORS4ils6c4_9J): legacy-alias-shaped carve-out — 'rules' is launch-14-v1's fold target (SEED_TYPE_REGISTRY, not SEED_CLASSIFICATION_REGISTRY, so it has no canonical {slug,idPrefix} row to pin against), but a launch-only workspace needs "RULE: ..." to take the prefix fast path even during a transient chain.listCollections failure. The STD/BR/PRI/PAT/ARCH rows that used to sit beside it are gone with their retired collections (WP-780).
75
- ];
76
- let _cache = null;
77
- /**
78
- * Fetch all collections for the current workspace.
79
- * Module-scope memoized — calls kernelCall once per process, then returns
80
- * the cached result. Fails open to SEED on any error.
81
- */
82
- export async function getCollections() {
83
- if (_cache !== null)
84
- return _cache;
85
- try {
86
- const result = await kernelCall('chain.listCollections');
87
- _cache = Array.isArray(result) && result.length > 0 ? result : SEED;
88
- }
89
- catch {
90
- _cache = SEED;
91
- }
92
- return _cache;
93
- }
94
- /**
95
- * Build a prefix → collection slug map from the runtime registry.
96
- * Falls back to SEED-derived map on failure.
97
- */
98
- export async function getPrefixToCollection() {
99
- const cols = await getCollections();
100
- const map = {};
101
- for (const col of cols) {
102
- if (col.idPrefix)
103
- map[col.idPrefix] = col.slug;
104
- }
105
- return map;
106
- }
107
- /**
108
- * WP-707 S1 round 3 (operator ruling #13): build a canonicalKey → collection slug map from the
109
- * runtime registry — the CLI-side mirror of `getRequiredCollectionSlugForKind`
110
- * (convex/lib/seedTypeRegistry.ts). Used by capture.ts's `--entry-type` fast path so ANY kind
111
- * with its own 1:1 drawer resolves automatically, instead of a hand-picked pair of literal
112
- * branches that needs a new one hand-added for every future drawer. Only a kind with EXACTLY ONE
113
- * collection declaring it as `defaultCanonicalKey` resolves — consistent with the
114
- * one-type-one-collection invariant this PR establishes server-side; a kind with zero or more
115
- * than one owner slug resolves to undefined so the caller falls through to server-side
116
- * classification instead of guessing.
117
- */
118
- export async function getCanonicalKeyToCollection() {
119
- const cols = await getCollections();
120
- const slugsByKey = new Map();
121
- for (const col of cols) {
122
- if (!col.defaultCanonicalKey)
123
- continue;
124
- const slugs = slugsByKey.get(col.defaultCanonicalKey) ?? [];
125
- slugs.push(col.slug);
126
- slugsByKey.set(col.defaultCanonicalKey, slugs);
127
- }
128
- const map = {};
129
- for (const [key, slugs] of slugsByKey) {
130
- if (slugs.length === 1)
131
- map[key] = slugs[0];
132
- }
133
- return map;
134
- }
135
- //# sourceMappingURL=collectionRegistry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"collectionRegistry.js","sourceRoot":"","sources":["../../src/lib/collectionRegistry.ts"],"names":[],"mappings":"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"}