@productbrain/cli 0.1.0-beta.92 → 0.1.0-beta.95
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__/authority-domains.test.d.ts +2 -0
- package/dist/__tests__/authority-domains.test.d.ts.map +1 -0
- package/dist/__tests__/authority-domains.test.js +45 -0
- package/dist/__tests__/authority-domains.test.js.map +1 -0
- package/dist/__tests__/config.test.d.ts +1 -1
- package/dist/__tests__/config.test.js +139 -9
- package/dist/__tests__/config.test.js.map +1 -1
- package/dist/__tests__/envelope-contract.test.d.ts +15 -0
- package/dist/__tests__/envelope-contract.test.d.ts.map +1 -0
- package/dist/__tests__/envelope-contract.test.js +126 -0
- package/dist/__tests__/envelope-contract.test.js.map +1 -0
- package/dist/__tests__/handshake-preview.test.js +123 -0
- package/dist/__tests__/handshake-preview.test.js.map +1 -1
- package/dist/__tests__/profiles.test.js +38 -5
- package/dist/__tests__/profiles.test.js.map +1 -1
- package/dist/__tests__/setup-ingest.test.d.ts +2 -0
- package/dist/__tests__/setup-ingest.test.d.ts.map +1 -0
- package/dist/__tests__/setup-ingest.test.js +55 -0
- package/dist/__tests__/setup-ingest.test.js.map +1 -0
- package/dist/__tests__/setup-resolver.test.d.ts +14 -0
- package/dist/__tests__/setup-resolver.test.d.ts.map +1 -0
- package/dist/__tests__/setup-resolver.test.js +228 -0
- package/dist/__tests__/setup-resolver.test.js.map +1 -0
- package/dist/commands/authority-domains.d.ts +122 -0
- package/dist/commands/authority-domains.d.ts.map +1 -0
- package/dist/commands/authority-domains.js +235 -0
- package/dist/commands/authority-domains.js.map +1 -0
- package/dist/commands/connect.d.ts.map +1 -1
- package/dist/commands/connect.js +29 -9
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/connect.test.js +47 -0
- package/dist/commands/connect.test.js.map +1 -1
- package/dist/commands/handshake.d.ts.map +1 -1
- package/dist/commands/handshake.js +188 -3
- package/dist/commands/handshake.js.map +1 -1
- package/dist/commands/migrate-setup.d.ts +18 -0
- package/dist/commands/migrate-setup.d.ts.map +1 -0
- package/dist/commands/migrate-setup.js +198 -0
- package/dist/commands/migrate-setup.js.map +1 -0
- package/dist/commands/profile.d.ts +24 -1
- package/dist/commands/profile.d.ts.map +1 -1
- package/dist/commands/profile.js +72 -6
- package/dist/commands/profile.js.map +1 -1
- package/dist/commands/session.js +5 -5
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/setup-ingest.d.ts +17 -0
- package/dist/commands/setup-ingest.d.ts.map +1 -0
- package/dist/commands/setup-ingest.js +224 -0
- package/dist/commands/setup-ingest.js.map +1 -0
- package/dist/commands/setup-resolver.d.ts +58 -0
- package/dist/commands/setup-resolver.d.ts.map +1 -0
- package/dist/commands/setup-resolver.js +150 -0
- package/dist/commands/setup-resolver.js.map +1 -0
- package/dist/commands/workspace.d.ts +51 -0
- package/dist/commands/workspace.d.ts.map +1 -1
- package/dist/commands/workspace.js +24 -0
- package/dist/commands/workspace.js.map +1 -1
- package/dist/formatters/orient.d.ts +25 -0
- package/dist/formatters/orient.d.ts.map +1 -1
- package/dist/formatters/orient.js +16 -0
- package/dist/formatters/orient.js.map +1 -1
- package/dist/index.js +105 -4
- package/dist/index.js.map +1 -1
- package/dist/lib/canonicalRefs.d.ts +43 -0
- package/dist/lib/canonicalRefs.d.ts.map +1 -0
- package/dist/lib/canonicalRefs.js +83 -0
- package/dist/lib/canonicalRefs.js.map +1 -0
- package/dist/lib/client.js +16 -16
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/config.d.ts +32 -9
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +93 -46
- package/dist/lib/config.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb migrate:setup — Migrate .productbrain/skills|rules|hooks/*.md into the DB as SSOT.
|
|
3
|
+
*
|
|
4
|
+
* WP-345 S0b: FS→DB migration command. Reads frontmatter from each .md file under
|
|
5
|
+
* .productbrain/skills/, .productbrain/rules/, and .productbrain/hooks/, then upserts
|
|
6
|
+
* each asset into the workspace's setup-assets collection via setup.ingestSetupAsset.
|
|
7
|
+
*
|
|
8
|
+
* Idempotent: re-running produces created/updated/unchanged counts, never duplicates.
|
|
9
|
+
* The stable entryId per file: SETUP-{KIND}-{SCREAMING_SNAKE_CASE_FILENAME}
|
|
10
|
+
*
|
|
11
|
+
* Chain: WP-345, TEN-1459 (handshake reads FS — this fixes it).
|
|
12
|
+
*/
|
|
13
|
+
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
14
|
+
import { join, basename } from 'node:path';
|
|
15
|
+
import { kernelCall } from '../lib/client.js';
|
|
16
|
+
import { readSession } from '../lib/session.js';
|
|
17
|
+
import { isJsonMode } from '../lib/runner.js';
|
|
18
|
+
import { CLIError, ErrorCode } from '../lib/errors.js';
|
|
19
|
+
import { trackEvent } from '../lib/telemetry.js';
|
|
20
|
+
/**
|
|
21
|
+
* Parse minimal frontmatter from a .md file.
|
|
22
|
+
* Supports YAML-style --- fences. Fields: name, description.
|
|
23
|
+
* Array fields: triggers, semanticRefs (comma-separated or YAML list).
|
|
24
|
+
*/
|
|
25
|
+
function parseFrontmatter(raw) {
|
|
26
|
+
const fmMatch = raw.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);
|
|
27
|
+
if (!fmMatch) {
|
|
28
|
+
// No frontmatter — derive name from H1, empty description
|
|
29
|
+
const h1 = raw.match(/^# (.+)$/m);
|
|
30
|
+
return { name: h1?.[1] ?? '', description: '', triggers: [], semanticRefs: [], body: raw };
|
|
31
|
+
}
|
|
32
|
+
const fmBlock = fmMatch[1];
|
|
33
|
+
const body = fmMatch[2];
|
|
34
|
+
const fields = new Map();
|
|
35
|
+
const arrayFields = new Map();
|
|
36
|
+
// Parse simple key: value and key:\n - item YAML arrays
|
|
37
|
+
const lines = fmBlock.split('\n');
|
|
38
|
+
let currentArrayKey = null;
|
|
39
|
+
let currentArrayValues = [];
|
|
40
|
+
for (const line of lines) {
|
|
41
|
+
const arrayItemMatch = line.match(/^\s+-\s+(.+)$/);
|
|
42
|
+
const keyValueMatch = line.match(/^(\w+):\s*(.*)$/);
|
|
43
|
+
if (arrayItemMatch && currentArrayKey) {
|
|
44
|
+
currentArrayValues.push(arrayItemMatch[1].trim());
|
|
45
|
+
}
|
|
46
|
+
else if (keyValueMatch) {
|
|
47
|
+
if (currentArrayKey) {
|
|
48
|
+
arrayFields.set(currentArrayKey, currentArrayValues);
|
|
49
|
+
currentArrayKey = null;
|
|
50
|
+
currentArrayValues = [];
|
|
51
|
+
}
|
|
52
|
+
const [, key, value] = keyValueMatch;
|
|
53
|
+
if (value.trim() === '') {
|
|
54
|
+
// Start of array block
|
|
55
|
+
currentArrayKey = key;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
fields.set(key, value.trim().replace(/^['"]|['"]$/g, ''));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (currentArrayKey) {
|
|
63
|
+
arrayFields.set(currentArrayKey, currentArrayValues);
|
|
64
|
+
}
|
|
65
|
+
const name = fields.get('name') ?? body.match(/^# (.+)$/m)?.[1] ?? '';
|
|
66
|
+
const description = fields.get('description') ?? '';
|
|
67
|
+
const triggers = arrayFields.get('triggers') ?? [];
|
|
68
|
+
const semanticRefs = arrayFields.get('semanticRefs') ?? [];
|
|
69
|
+
return { name, description, triggers, semanticRefs, body };
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Derive a stable entryId from the filename and assetKind.
|
|
73
|
+
* Example: skills/triage.md, kind=skill → SETUP-SKILL-TRIAGE
|
|
74
|
+
*/
|
|
75
|
+
function deriveEntryId(filename, kind) {
|
|
76
|
+
const base = basename(filename, '.md');
|
|
77
|
+
const snakeCase = base.toUpperCase().replace(/[^A-Z0-9]+/g, '_');
|
|
78
|
+
return `SETUP-${kind.toUpperCase()}-${snakeCase}`;
|
|
79
|
+
}
|
|
80
|
+
export async function runMigrateSetup(opts = {}) {
|
|
81
|
+
const cwd = opts.cwd ?? process.cwd();
|
|
82
|
+
const dryRun = opts.dryRun ?? false;
|
|
83
|
+
const json = isJsonMode();
|
|
84
|
+
const session = readSession();
|
|
85
|
+
if (!session?.workspaceId) {
|
|
86
|
+
throw new CLIError('No active session found. Run `pb session start` first.', { code: ErrorCode.SESSION_REQUIRED, category: 'session' });
|
|
87
|
+
}
|
|
88
|
+
const workspaceId = session.workspaceId;
|
|
89
|
+
const pbDir = join(cwd, '.productbrain');
|
|
90
|
+
if (!existsSync(pbDir)) {
|
|
91
|
+
throw new CLIError('.productbrain directory not found. Run from a repo root containing a .productbrain directory.', { code: ErrorCode.VALIDATION_FAILED, category: 'validation' });
|
|
92
|
+
}
|
|
93
|
+
// Collect all .md files per kind
|
|
94
|
+
const kinds = [
|
|
95
|
+
{ dir: join(pbDir, 'skills'), kind: 'skill' },
|
|
96
|
+
{ dir: join(pbDir, 'rules'), kind: 'rule' },
|
|
97
|
+
{ dir: join(pbDir, 'hooks'), kind: 'hook' },
|
|
98
|
+
];
|
|
99
|
+
const assets = [];
|
|
100
|
+
for (const { dir, kind } of kinds) {
|
|
101
|
+
if (!existsSync(dir))
|
|
102
|
+
continue;
|
|
103
|
+
const files = readdirSync(dir).filter((f) => f.endsWith('.md'));
|
|
104
|
+
for (const file of files) {
|
|
105
|
+
const filePath = join(dir, file);
|
|
106
|
+
const raw = readFileSync(filePath, 'utf-8');
|
|
107
|
+
const { name, description, body, triggers, semanticRefs } = parseFrontmatter(raw);
|
|
108
|
+
const entryId = deriveEntryId(file, kind);
|
|
109
|
+
assets.push({
|
|
110
|
+
entryId,
|
|
111
|
+
name: name || basename(file, '.md'),
|
|
112
|
+
description,
|
|
113
|
+
body,
|
|
114
|
+
assetKind: kind,
|
|
115
|
+
triggers,
|
|
116
|
+
semanticRefs,
|
|
117
|
+
filename: file,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
if (assets.length === 0) {
|
|
122
|
+
const msg = 'No .md files found in .productbrain/skills/, rules/, or hooks/. Nothing to migrate.';
|
|
123
|
+
if (json) {
|
|
124
|
+
process.stdout.write(JSON.stringify({ ok: true, message: msg, created: 0, updated: 0, unchanged: 0 }) + '\n');
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
process.stdout.write(msg + '\n');
|
|
128
|
+
}
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
if (dryRun) {
|
|
132
|
+
const msg = `[dry-run] Would migrate ${assets.length} assets. Use without --dry-run to apply.`;
|
|
133
|
+
if (json) {
|
|
134
|
+
process.stdout.write(JSON.stringify({ ok: true, dryRun: true, total: assets.length, assets: assets.map((a) => ({ entryId: a.entryId, name: a.name, assetKind: a.assetKind })) }) + '\n');
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
process.stdout.write(msg + '\n');
|
|
138
|
+
for (const a of assets) {
|
|
139
|
+
process.stdout.write(` ${a.entryId} ${a.name} (${a.assetKind})\n`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
// Upsert each asset via setup.ingestSetupAsset
|
|
145
|
+
let created = 0;
|
|
146
|
+
let updated = 0;
|
|
147
|
+
let unchanged = 0;
|
|
148
|
+
const errors = [];
|
|
149
|
+
for (const asset of assets) {
|
|
150
|
+
try {
|
|
151
|
+
const result = await kernelCall('setup.ingestSetupAsset', {
|
|
152
|
+
workspaceId,
|
|
153
|
+
entryId: asset.entryId,
|
|
154
|
+
name: asset.name,
|
|
155
|
+
description: asset.description,
|
|
156
|
+
body: asset.body,
|
|
157
|
+
assetKind: asset.assetKind,
|
|
158
|
+
triggers: asset.triggers,
|
|
159
|
+
semanticRefs: asset.semanticRefs,
|
|
160
|
+
});
|
|
161
|
+
if (result.action === 'created')
|
|
162
|
+
created++;
|
|
163
|
+
else if (result.action === 'updated')
|
|
164
|
+
updated++;
|
|
165
|
+
else
|
|
166
|
+
unchanged++;
|
|
167
|
+
if (!json) {
|
|
168
|
+
const icon = result.action === 'created' ? '+' : result.action === 'updated' ? '~' : '=';
|
|
169
|
+
process.stdout.write(` [${icon}] ${asset.entryId} (${result.action})\n`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
catch (err) {
|
|
173
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
174
|
+
errors.push({ entryId: asset.entryId, error: msg });
|
|
175
|
+
if (!json) {
|
|
176
|
+
process.stderr.write(` [!] ${asset.entryId} ERROR: ${msg}\n`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
if (json) {
|
|
181
|
+
process.stdout.write(JSON.stringify({ ok: errors.length === 0, created, updated, unchanged, errors }) + '\n');
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
process.stdout.write(`\nMigration complete: ${created} created, ${updated} updated, ${unchanged} unchanged.\n`);
|
|
185
|
+
if (errors.length > 0) {
|
|
186
|
+
process.stderr.write(`${errors.length} error(s) — check output above.\n`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// NG11: emit observability event caller-side (WP-345)
|
|
190
|
+
trackEvent('setup.migration.completed', { created, updated, unchanged, errorCount: errors.length });
|
|
191
|
+
if (errors.length > 0) {
|
|
192
|
+
throw new CLIError(`migrate:setup completed with ${errors.length} error(s).`, {
|
|
193
|
+
code: ErrorCode.INTERNAL,
|
|
194
|
+
category: 'internal',
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=migrate-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-setup.js","sourceRoot":"","sources":["../../src/commands/migrate-setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,14 @@
|
|
|
5
5
|
* Uses runCliCommand pattern from runner.ts for JSON/pretty output.
|
|
6
6
|
* Uses CLIError from errors.ts for structured error reporting.
|
|
7
7
|
*/
|
|
8
|
+
type ProfileListResult = {
|
|
9
|
+
profiles: string[];
|
|
10
|
+
active: string | null;
|
|
11
|
+
globalActive: string | null;
|
|
12
|
+
localActive: string | null;
|
|
13
|
+
activeSource: 'local' | 'global' | 'none';
|
|
14
|
+
};
|
|
15
|
+
export declare function resolveProfileListState(): ProfileListResult;
|
|
8
16
|
/** pb profile list — show all profiles, mark active one. */
|
|
9
17
|
export declare function runProfileList(): Promise<void>;
|
|
10
18
|
/** pb profile create <name> --api-key <key> [--url <url>] */
|
|
@@ -13,12 +21,27 @@ export declare function runProfileCreate(opts: {
|
|
|
13
21
|
apiKey: string;
|
|
14
22
|
url?: string;
|
|
15
23
|
}): Promise<void>;
|
|
16
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* pb profile use <name> [--local]
|
|
26
|
+
*
|
|
27
|
+
* Without --local (default): switch global active profile.
|
|
28
|
+
* - Closes any active session (TEN-1277: session orphaning)
|
|
29
|
+
* - Resets config cache so next getConfig() reads the new profile
|
|
30
|
+
* - Clears env vars so they get re-read from the new profile
|
|
31
|
+
*
|
|
32
|
+
* With --local: write profile pin to .productbrain/config.local.json
|
|
33
|
+
* in the walked-up project root.
|
|
34
|
+
* - Does NOT update global active-profile
|
|
35
|
+
* - Does NOT close session (local switch doesn't orphan server session)
|
|
36
|
+
* - Throws CLIError if no project root found
|
|
37
|
+
*/
|
|
17
38
|
export declare function runProfileUse(opts: {
|
|
18
39
|
name: string;
|
|
40
|
+
local?: boolean;
|
|
19
41
|
}): Promise<void>;
|
|
20
42
|
/** pb profile delete <name> */
|
|
21
43
|
export declare function runProfileDelete(opts: {
|
|
22
44
|
name: string;
|
|
23
45
|
}): Promise<void>;
|
|
46
|
+
export {};
|
|
24
47
|
//# sourceMappingURL=profile.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgBH,KAAK,iBAAiB,GAAG;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;CAC3C,CAAC;AAEF,wBAAgB,uBAAuB,IAAI,iBAAiB,CAQ3D;AAED,4DAA4D;AAC5D,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAuBpD;AAED,6DAA6D;AAC7D,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,IAAI,CAAC,CAQhB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA2E1F;AAED,+BAA+B;AAC/B,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ5E"}
|
package/dist/commands/profile.js
CHANGED
|
@@ -5,26 +5,42 @@
|
|
|
5
5
|
* Uses runCliCommand pattern from runner.ts for JSON/pretty output.
|
|
6
6
|
* Uses CLIError from errors.ts for structured error reporting.
|
|
7
7
|
*/
|
|
8
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
9
|
+
import { resolve } from 'path';
|
|
8
10
|
import { runCliCommand } from '../lib/runner.js';
|
|
9
11
|
import { listProfiles, getActiveProfile, createProfile, useProfile, deleteProfile, } from '../lib/profiles.js';
|
|
10
12
|
import { readSession, clearSession } from '../lib/session.js';
|
|
11
|
-
import { resetConfigCache } from '../lib/config.js';
|
|
13
|
+
import { resetConfigCache, findProjectRoot, readLocalProjectConfig } from '../lib/config.js';
|
|
14
|
+
import { CLIError, ErrorCode } from '../lib/errors.js';
|
|
15
|
+
export function resolveProfileListState() {
|
|
16
|
+
const profiles = listProfiles();
|
|
17
|
+
const globalActive = getActiveProfile();
|
|
18
|
+
const localActive = readLocalProjectConfig()?.profile ?? null;
|
|
19
|
+
const active = localActive ?? globalActive;
|
|
20
|
+
const activeSource = localActive ? 'local' : globalActive ? 'global' : 'none';
|
|
21
|
+
return { profiles, active, globalActive, localActive, activeSource };
|
|
22
|
+
}
|
|
12
23
|
/** pb profile list — show all profiles, mark active one. */
|
|
13
24
|
export async function runProfileList() {
|
|
14
25
|
await runCliCommand({
|
|
15
26
|
fn: async () => {
|
|
16
|
-
|
|
17
|
-
const active = getActiveProfile();
|
|
18
|
-
return { profiles, active };
|
|
27
|
+
return resolveProfileListState();
|
|
19
28
|
},
|
|
20
29
|
formatPretty: (data) => {
|
|
21
30
|
if (data.profiles.length === 0) {
|
|
22
31
|
return 'No profiles configured. Run: pb profile create <name> --api-key <key>';
|
|
23
32
|
}
|
|
24
33
|
const lines = data.profiles.map((name) => {
|
|
25
|
-
const marker = name === data.active
|
|
34
|
+
const marker = name === data.active
|
|
35
|
+
? data.activeSource === 'local' ? ' (active, local)' : ' (active)'
|
|
36
|
+
: '';
|
|
26
37
|
return ` ${name}${marker}`;
|
|
27
38
|
});
|
|
39
|
+
if (data.localActive && data.globalActive && data.localActive !== data.globalActive) {
|
|
40
|
+
lines.push('');
|
|
41
|
+
lines.push(`Repo local profile: ${data.localActive}`);
|
|
42
|
+
lines.push(`Global profile: ${data.globalActive}`);
|
|
43
|
+
}
|
|
28
44
|
return `Profiles:\n${lines.join('\n')}`;
|
|
29
45
|
},
|
|
30
46
|
});
|
|
@@ -39,8 +55,58 @@ export async function runProfileCreate(opts) {
|
|
|
39
55
|
formatPretty: (data) => `Profile "${data.name}" created.`,
|
|
40
56
|
});
|
|
41
57
|
}
|
|
42
|
-
/**
|
|
58
|
+
/**
|
|
59
|
+
* pb profile use <name> [--local]
|
|
60
|
+
*
|
|
61
|
+
* Without --local (default): switch global active profile.
|
|
62
|
+
* - Closes any active session (TEN-1277: session orphaning)
|
|
63
|
+
* - Resets config cache so next getConfig() reads the new profile
|
|
64
|
+
* - Clears env vars so they get re-read from the new profile
|
|
65
|
+
*
|
|
66
|
+
* With --local: write profile pin to .productbrain/config.local.json
|
|
67
|
+
* in the walked-up project root.
|
|
68
|
+
* - Does NOT update global active-profile
|
|
69
|
+
* - Does NOT close session (local switch doesn't orphan server session)
|
|
70
|
+
* - Throws CLIError if no project root found
|
|
71
|
+
*/
|
|
43
72
|
export async function runProfileUse(opts) {
|
|
73
|
+
if (opts.local) {
|
|
74
|
+
await runCliCommand({
|
|
75
|
+
fn: async () => {
|
|
76
|
+
const projectRoot = findProjectRoot(process.cwd());
|
|
77
|
+
if (!projectRoot) {
|
|
78
|
+
throw new CLIError('No .productbrain/ directory found in this directory tree. Run `pb connect` first or use `pb profile use <name>` (without --local) to switch globally.', {
|
|
79
|
+
code: ErrorCode.CONFIG_INVALID,
|
|
80
|
+
category: 'config',
|
|
81
|
+
guidance: 'Run `pb connect <token>` to set up a project workspace, or omit --local to switch globally.',
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
const configDir = resolve(projectRoot, '.productbrain');
|
|
85
|
+
const localConfigPath = resolve(configDir, 'config.local.json');
|
|
86
|
+
// Read existing local config to preserve other fields
|
|
87
|
+
let existingLocal = {};
|
|
88
|
+
if (existsSync(localConfigPath)) {
|
|
89
|
+
try {
|
|
90
|
+
existingLocal = JSON.parse(readFileSync(localConfigPath, 'utf8'));
|
|
91
|
+
}
|
|
92
|
+
catch { /* ignore parse errors */ }
|
|
93
|
+
}
|
|
94
|
+
const localConfig = { ...existingLocal, profile: opts.name };
|
|
95
|
+
mkdirSync(configDir, { recursive: true });
|
|
96
|
+
writeFileSync(localConfigPath, JSON.stringify(localConfig, null, 2) + '\n');
|
|
97
|
+
return {
|
|
98
|
+
name: opts.name,
|
|
99
|
+
local: true,
|
|
100
|
+
projectRoot,
|
|
101
|
+
};
|
|
102
|
+
},
|
|
103
|
+
formatPretty: (data) => {
|
|
104
|
+
return `Local profile set to "${data.name}" in ${data.projectRoot}/.productbrain/config.local.json`;
|
|
105
|
+
},
|
|
106
|
+
});
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
// Default: global profile switch
|
|
44
110
|
await runCliCommand({
|
|
45
111
|
fn: async () => {
|
|
46
112
|
// Close active session before switching (TEN-1277: session orphaning)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,aAAa,GACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/session.js
CHANGED
|
@@ -13,7 +13,7 @@ import { formatSessionStart, formatSessionClose } from '../formatters/session.js
|
|
|
13
13
|
import { runHandshake } from './handshake.js';
|
|
14
14
|
import { CLIError, ErrorCode } from '../lib/errors.js';
|
|
15
15
|
import { getActiveProfile } from '../lib/profiles.js';
|
|
16
|
-
import {
|
|
16
|
+
import { readLocalProjectConfig } from '../lib/config.js';
|
|
17
17
|
/** 2-hour window for auto-resume (WP-322 E1). */
|
|
18
18
|
const RESUME_WINDOW_MS = 2 * 60 * 60 * 1000;
|
|
19
19
|
export async function runSessionStart(options = {}) {
|
|
@@ -31,7 +31,7 @@ export async function runSessionStart(options = {}) {
|
|
|
31
31
|
workspaceName: existing.workspaceName,
|
|
32
32
|
startedAt: existing.startedAt,
|
|
33
33
|
alreadyActive: true,
|
|
34
|
-
activeProfile:
|
|
34
|
+
activeProfile: readLocalProjectConfig()?.profile ?? getActiveProfile(),
|
|
35
35
|
}) + '\n');
|
|
36
36
|
return;
|
|
37
37
|
}
|
|
@@ -74,7 +74,7 @@ export async function runSessionStart(options = {}) {
|
|
|
74
74
|
startedAt: state.startedAt,
|
|
75
75
|
resumed: true,
|
|
76
76
|
linkedPreviousSessionId: closedMarker.sessionId,
|
|
77
|
-
activeProfile:
|
|
77
|
+
activeProfile: readLocalProjectConfig()?.profile ?? getActiveProfile(),
|
|
78
78
|
}) + '\n');
|
|
79
79
|
await runHandshake({ force: false, apply: true, quiet: true });
|
|
80
80
|
return;
|
|
@@ -84,7 +84,7 @@ export async function runSessionStart(options = {}) {
|
|
|
84
84
|
? `${elapsedMins}m ago`
|
|
85
85
|
: `${Math.round(elapsedMins / 60)}h ago`;
|
|
86
86
|
process.stdout.write(`Resuming session (linked from ${shortPrevId}, closed ${elapsedLabel})\n`);
|
|
87
|
-
process.stdout.write(formatSessionStart(state, undefined,
|
|
87
|
+
process.stdout.write(formatSessionStart(state, undefined, readLocalProjectConfig()?.profile ?? getActiveProfile()) + '\n');
|
|
88
88
|
process.stdout.write('Refreshing context...\n');
|
|
89
89
|
await runHandshake({ force: false, apply: true });
|
|
90
90
|
return;
|
|
@@ -132,7 +132,7 @@ export async function runSessionStart(options = {}) {
|
|
|
132
132
|
await runHandshake({ force: false, apply: true, quiet: true });
|
|
133
133
|
return;
|
|
134
134
|
}
|
|
135
|
-
process.stdout.write(formatSessionStart(state, result.superseded,
|
|
135
|
+
process.stdout.write(formatSessionStart(state, result.superseded, readLocalProjectConfig()?.profile ?? getActiveProfile()) + '\n');
|
|
136
136
|
// Refresh context files
|
|
137
137
|
process.stdout.write('Refreshing context...\n');
|
|
138
138
|
await runHandshake({ force: false, apply: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAqB,MAAM,mBAAmB,CAAC;AACjH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pb setup:ingest <path> — Push a single .productbrain skill/rule/hook file to the DB SSOT.
|
|
3
|
+
*
|
|
4
|
+
* WP-345 S3: Single-file push from disk to DB for workspace-managed setup assets.
|
|
5
|
+
* Lets users explicitly push an edited skill/rule/hook file to the DB rather than
|
|
6
|
+
* waiting for a full `migrate:setup` run.
|
|
7
|
+
*
|
|
8
|
+
* Idempotent: re-running produces created/updated/unchanged — never duplicates.
|
|
9
|
+
* entryId rule: SETUP-{KIND}-{SCREAMING_SNAKE_CASE_BASENAME}
|
|
10
|
+
*
|
|
11
|
+
* Chain: WP-345, TEN-1459 (handshake reads FS — this fixes it).
|
|
12
|
+
*/
|
|
13
|
+
export interface SetupIngestOptions {
|
|
14
|
+
dryRun?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare function runSetupIngest(filePath: string, opts?: SetupIngestOptions): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=setup-ingest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-ingest.d.ts","sourceRoot":"","sources":["../../src/commands/setup-ingest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAUH,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AA8GD,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoInG"}
|