@productbrain/cli 0.1.0-beta.11385 → 0.1.0-beta.11395
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__/adminConfig.test.js +3 -3
- package/dist/__tests__/adminConfig.test.js.map +1 -1
- package/dist/__tests__/init.test.js +61 -2
- package/dist/__tests__/init.test.js.map +1 -1
- package/dist/__tests__/session-hook-conversation.test.d.ts +2 -0
- package/dist/__tests__/session-hook-conversation.test.d.ts.map +1 -0
- package/dist/__tests__/session-hook-conversation.test.js +87 -0
- package/dist/__tests__/session-hook-conversation.test.js.map +1 -0
- package/dist/__tests__/upgrade-runner.test.js +44 -18
- package/dist/__tests__/upgrade-runner.test.js.map +1 -1
- package/dist/commands/connect-screens.d.ts +2 -2
- package/dist/commands/connect-screens.d.ts.map +1 -1
- package/dist/commands/connect-screens.js +2 -2
- package/dist/commands/connect-screens.js.map +1 -1
- package/dist/commands/connect-screens.test.js +2 -2
- package/dist/commands/connect-screens.test.js.map +1 -1
- package/dist/commands/init.d.ts +8 -2
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +95 -45
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/session-hook.d.ts +38 -0
- package/dist/commands/session-hook.d.ts.map +1 -0
- package/dist/commands/session-hook.js +94 -0
- package/dist/commands/session-hook.js.map +1 -0
- package/dist/commands/session-hook.test.d.ts +2 -0
- package/dist/commands/session-hook.test.d.ts.map +1 -0
- package/dist/commands/session-hook.test.js +89 -0
- package/dist/commands/session-hook.test.js.map +1 -0
- package/dist/commands/upgrade.js +7 -7
- package/dist/commands/upgrade.js.map +1 -1
- package/dist/index.js +6 -16
- package/dist/index.js.map +1 -1
- package/dist/lib/adminConfig.d.ts.map +1 -1
- package/dist/lib/adminConfig.js +3 -7
- package/dist/lib/adminConfig.js.map +1 -1
- package/dist/lib/conversation.d.ts +10 -0
- package/dist/lib/conversation.d.ts.map +1 -1
- package/dist/lib/conversation.js +66 -0
- package/dist/lib/conversation.js.map +1 -1
- package/dist/lib/upgrade-runner.d.ts +20 -4
- package/dist/lib/upgrade-runner.d.ts.map +1 -1
- package/dist/lib/upgrade-runner.js +67 -32
- package/dist/lib/upgrade-runner.js.map +1 -1
- package/package.json +1 -1
package/dist/commands/init.js
CHANGED
|
@@ -3,11 +3,12 @@
|
|
|
3
3
|
*
|
|
4
4
|
* WP-303 Slice 4 (Keystone): 4-state machine (fresh → has-key → has-workspace → ready).
|
|
5
5
|
* Uses getConfigSafe() for key diagnosis, then probes workspace connectivity.
|
|
6
|
-
* DEC-1926 (TASK-959): it also installs the
|
|
6
|
+
* DEC-1926 (TASK-959): it also installs the session hooks; nothing else writes them. Claude Code
|
|
7
|
+
* always; Codex when the repo has AGENTS.md or .codex; Cursor when it has .cursor (TASK-562).
|
|
7
8
|
*/
|
|
8
9
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
9
10
|
import { homedir } from 'node:os';
|
|
10
|
-
import { join } from 'node:path';
|
|
11
|
+
import { dirname, join } from 'node:path';
|
|
11
12
|
import { getConfigSafe } from '../lib/config.js';
|
|
12
13
|
import { readSession } from '../lib/session.js';
|
|
13
14
|
import { isJsonMode } from '../lib/runner.js';
|
|
@@ -17,67 +18,116 @@ import { probeWorkspace } from '../lib/workspace-probe.js';
|
|
|
17
18
|
import { CLIError, ErrorCode } from '../lib/errors.js';
|
|
18
19
|
import { isHomeFolder } from '../lib/projectConfig.js';
|
|
19
20
|
import { CONNECT_FIRST_STEP, connectPointer } from '../lib/constants.js';
|
|
20
|
-
// Hook failure contract (TEN-712): each command ends with '|| true' so
|
|
21
|
+
// Hook failure contract (TEN-712): each command ends with '|| true' so the agent starts without pb.
|
|
21
22
|
// Start keeps stderr so a refused start reaches the agent (TASK-649); close runs on SessionEnd, never Stop (DEC-2038).
|
|
22
23
|
export const SESSION_START_HOOK = 'pb session start 2>&1 || true';
|
|
23
24
|
export const SESSION_CLOSE_HOOK = 'pb session close 2>/dev/null || true';
|
|
25
|
+
/** Codex and Cursor name the conversation only in the hook input on stdin, so their hooks pass --hook (TASK-562). */
|
|
26
|
+
export const HOOK_SESSION_START_HOOK = 'pb session start --hook 2>&1 || true';
|
|
27
|
+
export const HOOK_SESSION_CLOSE_HOOK = 'pb session close --hook 2>/dev/null || true';
|
|
28
|
+
/** Cursor reads one JSON object from a sessionStart hook, so pb prints its start as that; --cursor reads the input too. */
|
|
29
|
+
export const CURSOR_SESSION_START_HOOK = 'pb session start --cursor 2>/dev/null || true';
|
|
24
30
|
const PB_PERMISSION = 'Bash(pb:*)';
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
31
|
+
const START = { type: 'command', command: SESSION_START_HOOK, statusMessage: 'Opening pb session...' };
|
|
32
|
+
const CLOSE = { type: 'command', command: SESSION_CLOSE_HOOK, statusMessage: 'Closing pb session...', timeout: 15 };
|
|
33
|
+
const TARGETS = [
|
|
34
|
+
{ file: '.claude/settings.json', flat: false, wanted: () => true, base: {},
|
|
35
|
+
hooks: [{ event: 'SessionStart', hook: START }, { event: 'SessionEnd', hook: CLOSE }] },
|
|
36
|
+
{ file: '.codex/hooks.json', flat: false, wanted: (cwd) => existsSync(join(cwd, 'AGENTS.md')) || existsSync(join(cwd, '.codex')), base: {},
|
|
37
|
+
hooks: [{ event: 'SessionStart', hook: { ...START, command: HOOK_SESSION_START_HOOK } }, { event: 'SessionEnd', hook: { ...CLOSE, command: HOOK_SESSION_CLOSE_HOOK } }] },
|
|
38
|
+
{ file: '.cursor/hooks.json', flat: true, wanted: (cwd) => existsSync(join(cwd, '.cursor')), base: { version: 1 },
|
|
39
|
+
hooks: [{ event: 'sessionStart', hook: { command: CURSOR_SESSION_START_HOOK } }, { event: 'sessionEnd', hook: { command: HOOK_SESSION_CLOSE_HOOK } }] },
|
|
28
40
|
];
|
|
29
|
-
/**
|
|
41
|
+
/** The verb of a pb session hook line, read with its redirects and `|| true` stripped. Only a bare
|
|
42
|
+
* line (no flags such as --role) counts, so a hook a person tuned by hand is never replaced. */
|
|
43
|
+
const bareVerb = (command) => {
|
|
44
|
+
if (typeof command !== 'string')
|
|
45
|
+
return null;
|
|
46
|
+
const bare = command.replace(/\s*2>(&1|\/dev\/null)/g, '').replace(/\s*\|\|\s*true\s*$/, '').trim();
|
|
47
|
+
return /^pb session (start|close)$/.exec(bare)?.[1] ?? null;
|
|
48
|
+
};
|
|
49
|
+
const verbOf = (command) => (typeof command === 'string' ? /^pb session (\w+)/.exec(command)?.[1] ?? '' : '');
|
|
50
|
+
function readJson(path) {
|
|
51
|
+
if (!existsSync(path))
|
|
52
|
+
return {};
|
|
53
|
+
try {
|
|
54
|
+
return JSON.parse(readFileSync(path, 'utf8'));
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
throw new CLIError(`${path} is not valid JSON, so pb init left it untouched.`, { code: ErrorCode.CONFIG_INVALID, category: 'config', guidance: 'Fix the JSON in that file, then run pb init again.' });
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Put `hook` on `event` once. An older bare pb session line of the same verb is removed, so an
|
|
62
|
+
* install from before #1550 no longer runs two session starts (INS-2727, TEN-3736).
|
|
63
|
+
*/
|
|
64
|
+
function mergeHook(hooks, event, hook, flat) {
|
|
65
|
+
const verb = verbOf(hook.command);
|
|
66
|
+
const groups = hooks[event] ?? [];
|
|
67
|
+
const entries = (g) => (flat ? [g] : g.hooks ?? []);
|
|
68
|
+
const present = groups.some((g) => entries(g).some((h) => h.command === hook.command));
|
|
69
|
+
const stale = (h) => h.command !== hook.command && bareVerb(h.command) === verb;
|
|
70
|
+
const removed = groups.some((g) => entries(g).some(stale));
|
|
71
|
+
if (present && !removed)
|
|
72
|
+
return { added: false, removed: false };
|
|
73
|
+
const kept = flat ? groups.filter((g) => !stale(g))
|
|
74
|
+
: groups.map((g) => ({ ...g, hooks: entries(g).filter((h) => !stale(h)) })).filter((g) => g.hooks.length > 0);
|
|
75
|
+
hooks[event] = present ? kept : [...kept, flat ? { ...hook } : { hooks: [{ ...hook }] }];
|
|
76
|
+
return { added: !present, removed };
|
|
77
|
+
}
|
|
78
|
+
/** Merge the session hooks into each agent tool's hook file in <cwd>; returns what changed. */
|
|
30
79
|
export function installSessionHooks(cwd, dryRun, home = homedir()) {
|
|
31
80
|
// ~/.claude/settings.json is the person's global Claude Code settings: hooks there fire in every repo.
|
|
32
81
|
if (isHomeFolder(cwd, home)) {
|
|
33
82
|
throw new CLIError('Run pb init in your project folder, not your home folder.', { code: ErrorCode.VALIDATION_FAILED, category: 'validation' });
|
|
34
83
|
}
|
|
35
|
-
const path = join(cwd, '.claude', 'settings.json');
|
|
36
|
-
let settings = {};
|
|
37
|
-
if (existsSync(path)) {
|
|
38
|
-
try {
|
|
39
|
-
settings = JSON.parse(readFileSync(path, 'utf8'));
|
|
40
|
-
}
|
|
41
|
-
catch {
|
|
42
|
-
throw new CLIError(`${path} is not valid JSON, so pb init left it untouched.`, { code: ErrorCode.CONFIG_INVALID, category: 'config', guidance: 'Fix the JSON in that file, then run pb init again.' });
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
84
|
const added = [];
|
|
46
85
|
const removed = [];
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
86
|
+
for (const target of TARGETS.filter((t) => t.wanted(cwd))) {
|
|
87
|
+
const path = join(cwd, target.file);
|
|
88
|
+
const settings = { ...target.base, ...readJson(path) };
|
|
89
|
+
const before = added.length + removed.length;
|
|
90
|
+
const where = target.file === '.claude/settings.json' ? '' : ` (${target.file})`;
|
|
91
|
+
if (target.file === '.claude/settings.json') {
|
|
92
|
+
const permissions = (settings.permissions ??= {});
|
|
93
|
+
const allow = (permissions.allow ??= []);
|
|
94
|
+
if (!allow.includes(PB_PERMISSION)) {
|
|
95
|
+
allow.push(PB_PERMISSION);
|
|
96
|
+
added.push('Bash(pb:*) permission');
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
const hooks = (settings.hooks ??= {});
|
|
100
|
+
if (target.file === '.claude/settings.json') {
|
|
101
|
+
// TASK-763 (DEC-2038): an older install closed the session on Stop, after every turn; strip that one entry.
|
|
102
|
+
const stop = hooks.Stop ?? [];
|
|
103
|
+
const kept = stop.map((g) => ({ ...g, hooks: (g.hooks ?? []).filter((h) => h.command !== SESSION_CLOSE_HOOK) })).filter((g) => g.hooks.length > 0);
|
|
104
|
+
if (JSON.stringify(kept) !== JSON.stringify(stop)) {
|
|
105
|
+
if (kept.length)
|
|
106
|
+
hooks.Stop = kept;
|
|
107
|
+
else
|
|
108
|
+
delete hooks.Stop;
|
|
109
|
+
removed.push('Stop → pb session close: it closed the session every turn');
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
for (const { event, hook } of target.hooks) {
|
|
113
|
+
const label = `${event} → pb session ${verbOf(hook.command)}${where}`;
|
|
114
|
+
const change = mergeHook(hooks, event, hook, target.flat);
|
|
115
|
+
if (change.removed)
|
|
116
|
+
removed.push(`an older ${label} line`);
|
|
117
|
+
if (change.added)
|
|
118
|
+
added.push(label);
|
|
119
|
+
}
|
|
120
|
+
if (added.length + removed.length > before && !dryRun) {
|
|
121
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
122
|
+
writeFileSync(path, JSON.stringify(settings, null, 2) + '\n');
|
|
123
|
+
}
|
|
74
124
|
}
|
|
75
125
|
return { added, removed };
|
|
76
126
|
}
|
|
77
127
|
function printHooks({ added, removed }, dryRun) {
|
|
78
128
|
process.stdout.write('\n');
|
|
79
129
|
if (added.length + removed.length === 0) {
|
|
80
|
-
process.stdout.write(` ${green(icons.pass)}
|
|
130
|
+
process.stdout.write(` ${green(icons.pass)} Session hooks already installed\n`);
|
|
81
131
|
return;
|
|
82
132
|
}
|
|
83
133
|
const write = (verb, line) => process.stdout.write(` ${green(icons.pass)} ${verb} ${line}\n`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The session commands as agent-tool hooks run them (TASK-562, WP-861).
|
|
3
|
+
*
|
|
4
|
+
* `--hook` (Codex, Cursor): the hook runner writes one JSON object on stdin naming the conversation
|
|
5
|
+
* (`session_id`). It is read once (lib/conversation.ts readHookConversationId), so two concurrent
|
|
6
|
+
* conversations of one tool get two sessions and one SessionEnd cannot close the other's.
|
|
7
|
+
* When no env channel carries that id into the agent's later shell commands, the start says which
|
|
8
|
+
* PB_CONVERSATION_ID to prefix. Cursor gets the same line in its context, plus the id as hook `env`
|
|
9
|
+
* output, which Cursor applies to its later hooks only.
|
|
10
|
+
*
|
|
11
|
+
* `--cursor`: a Cursor sessionStart hook reads one JSON object from stdout and adds its
|
|
12
|
+
* `additional_context` to the conversation, so the plain start text would never reach the agent.
|
|
13
|
+
* This runs the ordinary start, collects everything it prints (a refusal too, so the agent sees why
|
|
14
|
+
* no session opened) and prints it as that one object. `--cursor` reads the hook input as `--hook`.
|
|
15
|
+
* Claude Code's hooks need neither: its later shells carry CLAUDE_CODE_SESSION_ID.
|
|
16
|
+
*/
|
|
17
|
+
import type { Command } from 'commander';
|
|
18
|
+
import { runSessionClose, runSessionStart } from './session.js';
|
|
19
|
+
type StartOptions = NonNullable<Parameters<typeof runSessionStart>[0]>;
|
|
20
|
+
type CloseOptions = NonNullable<Parameters<typeof runSessionClose>[0]>;
|
|
21
|
+
/** RULE-662: the one line that keeps a Codex or Cursor agent's later pb calls on this session. */
|
|
22
|
+
export declare const carryLine: (id: string) => string;
|
|
23
|
+
/** `pb session start`: the ordinary start, with `--hook` reading the hook input, or with `--cursor` the JSON a Cursor hook reads. */
|
|
24
|
+
export declare function runSessionStartCommand({ cursor, hook, ...options }: StartOptions & {
|
|
25
|
+
cursor?: boolean;
|
|
26
|
+
hook?: boolean;
|
|
27
|
+
}): Promise<void>;
|
|
28
|
+
/** Registers `pb session start` (moved here from index.ts so its options are one per line, TASK-562). */
|
|
29
|
+
export declare function registerSessionStart(sessionCmd: Command): void;
|
|
30
|
+
/** Registers `pb session close` (moved here from index.ts, TASK-562). */
|
|
31
|
+
export declare function registerSessionClose(sessionCmd: Command): void;
|
|
32
|
+
/** `pb session close`: with `--hook`, the conversation is the one the hook input names. */
|
|
33
|
+
export declare function runSessionCloseCommand({ hook, ...options }: CloseOptions & {
|
|
34
|
+
hook?: boolean;
|
|
35
|
+
}): Promise<void>;
|
|
36
|
+
export declare function runSessionStartForCursor(options?: StartOptions, carry?: string | null): Promise<void>;
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=session-hook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-hook.d.ts","sourceRoot":"","sources":["../../src/commands/session-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEhE,KAAK,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,KAAK,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAQvE,kGAAkG;AAClG,eAAO,MAAM,SAAS,GAAI,IAAI,MAAM,KAAG,MAAgF,CAAC;AAExH,qIAAqI;AACrI,wBAAsB,sBAAsB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,EAAE,YAAY,GAAG;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7I;AAID,yGAAyG;AACzG,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI,CAoB9D;AAED,yEAAyE;AACzE,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI,CAQ9D;AAED,2FAA2F;AAC3F,wBAAsB,sBAAsB,CAAC,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,EAAE,YAAY,GAAG;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAGnH;AAED,wBAAsB,wBAAwB,CAAC,OAAO,GAAE,YAAiB,EAAE,KAAK,GAAE,MAAM,GAAG,IAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBrH"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The session commands as agent-tool hooks run them (TASK-562, WP-861).
|
|
3
|
+
*
|
|
4
|
+
* `--hook` (Codex, Cursor): the hook runner writes one JSON object on stdin naming the conversation
|
|
5
|
+
* (`session_id`). It is read once (lib/conversation.ts readHookConversationId), so two concurrent
|
|
6
|
+
* conversations of one tool get two sessions and one SessionEnd cannot close the other's.
|
|
7
|
+
* When no env channel carries that id into the agent's later shell commands, the start says which
|
|
8
|
+
* PB_CONVERSATION_ID to prefix. Cursor gets the same line in its context, plus the id as hook `env`
|
|
9
|
+
* output, which Cursor applies to its later hooks only.
|
|
10
|
+
*
|
|
11
|
+
* `--cursor`: a Cursor sessionStart hook reads one JSON object from stdout and adds its
|
|
12
|
+
* `additional_context` to the conversation, so the plain start text would never reach the agent.
|
|
13
|
+
* This runs the ordinary start, collects everything it prints (a refusal too, so the agent sees why
|
|
14
|
+
* no session opened) and prints it as that one object. `--cursor` reads the hook input as `--hook`.
|
|
15
|
+
* Claude Code's hooks need neither: its later shells carry CLAUDE_CODE_SESSION_ID.
|
|
16
|
+
*/
|
|
17
|
+
import { CLIError } from '../lib/errors.js';
|
|
18
|
+
import { readHookConversationId, resolveConversationId, resolveEnvConversationId } from '../lib/conversation.js';
|
|
19
|
+
import { runSessionClose, runSessionStart } from './session.js';
|
|
20
|
+
/** The conversation id a later bare pb call would miss: read from the hook input, carried by no env channel. */
|
|
21
|
+
function idToCarry() {
|
|
22
|
+
const id = resolveConversationId();
|
|
23
|
+
return id && id !== resolveEnvConversationId() ? id : null;
|
|
24
|
+
}
|
|
25
|
+
/** RULE-662: the one line that keeps a Codex or Cursor agent's later pb calls on this session. */
|
|
26
|
+
export const carryLine = (id) => `Prefix PB_CONVERSATION_ID=${id} on every pb command in this session.`;
|
|
27
|
+
/** `pb session start`: the ordinary start, with `--hook` reading the hook input, or with `--cursor` the JSON a Cursor hook reads. */
|
|
28
|
+
export async function runSessionStartCommand({ cursor, hook, ...options }) {
|
|
29
|
+
if (cursor || hook)
|
|
30
|
+
readHookConversationId();
|
|
31
|
+
const carry = cursor || hook ? idToCarry() : null;
|
|
32
|
+
if (cursor)
|
|
33
|
+
return runSessionStartForCursor(options, carry);
|
|
34
|
+
await runSessionStart(options);
|
|
35
|
+
if (carry)
|
|
36
|
+
process.stdout.write(`${carryLine(carry)}\n`);
|
|
37
|
+
}
|
|
38
|
+
const HOOK_OPTION = 'Read the conversation from the hook input on stdin, as Codex and Cursor hooks pass it (TASK-562)';
|
|
39
|
+
/** Registers `pb session start` (moved here from index.ts so its options are one per line, TASK-562). */
|
|
40
|
+
export function registerSessionStart(sessionCmd) {
|
|
41
|
+
sessionCmd
|
|
42
|
+
.command('start')
|
|
43
|
+
.description('Start a tracked write session')
|
|
44
|
+
.option('--json', 'Output machine-readable JSON (deprecated: use global --json flag)')
|
|
45
|
+
.option('--cursor', 'Print the start as the JSON a Cursor sessionStart hook reads (TASK-562)')
|
|
46
|
+
.option('--hook', HOOK_OPTION)
|
|
47
|
+
.option('--conversation <id>', 'Explicit conversation identity override (WP-479 E2) — takes priority over env-detected channels. Pair with ' +
|
|
48
|
+
'PB_CONVERSATION_ID=<id> so later bare pb commands (orient, capture) attribute to the same conversation — ' +
|
|
49
|
+
'they resolve identity from env only')
|
|
50
|
+
.option('--role <entry-id>', 'Role to act as this session (DEC-1715) — only needed if you hold more than one; the error lists your roles if ' +
|
|
51
|
+
'omitted. Default: "role" in .productbrain/config.local.json (DEC-1961)')
|
|
52
|
+
.option('--team <entry-id>', 'Team the --role is held in (TASK-801) — only needed if you hold that role in more than one team')
|
|
53
|
+
.action(async (opts) => { await runSessionStartCommand(opts); });
|
|
54
|
+
}
|
|
55
|
+
/** Registers `pb session close` (moved here from index.ts, TASK-562). */
|
|
56
|
+
export function registerSessionClose(sessionCmd) {
|
|
57
|
+
sessionCmd
|
|
58
|
+
.command('close')
|
|
59
|
+
.description('Close the active session (wrapup)')
|
|
60
|
+
.option('--force', 'Clear local session state even if server close fails')
|
|
61
|
+
.option('--hook', HOOK_OPTION)
|
|
62
|
+
.option('--conversation <id>', 'Close the session started with this --conversation <id>, so the next start on it resumes (TEN-4855)')
|
|
63
|
+
.action(async (opts) => { await runSessionCloseCommand(opts); });
|
|
64
|
+
}
|
|
65
|
+
/** `pb session close`: with `--hook`, the conversation is the one the hook input names. */
|
|
66
|
+
export async function runSessionCloseCommand({ hook, ...options }) {
|
|
67
|
+
if (hook)
|
|
68
|
+
readHookConversationId();
|
|
69
|
+
await runSessionClose(options);
|
|
70
|
+
}
|
|
71
|
+
export async function runSessionStartForCursor(options = {}, carry = null) {
|
|
72
|
+
let text = '';
|
|
73
|
+
const collect = ((chunk) => { text += String(chunk); return true; });
|
|
74
|
+
const out = process.stdout.write.bind(process.stdout);
|
|
75
|
+
const err = process.stderr.write.bind(process.stderr);
|
|
76
|
+
process.stdout.write = collect;
|
|
77
|
+
process.stderr.write = collect;
|
|
78
|
+
try {
|
|
79
|
+
await runSessionStart(options);
|
|
80
|
+
// Cursor applies hook `env` to later hooks only, not to the agent's shell, so the agent reads the line as Codex does.
|
|
81
|
+
if (carry)
|
|
82
|
+
text += `${carryLine(carry)}\n`;
|
|
83
|
+
}
|
|
84
|
+
catch (e) {
|
|
85
|
+
const guidance = e instanceof CLIError && e.guidance ? `\n${e.guidance}` : '';
|
|
86
|
+
text += `\n${e instanceof Error ? e.message : String(e)}${guidance}`;
|
|
87
|
+
}
|
|
88
|
+
finally {
|
|
89
|
+
process.stdout.write = out;
|
|
90
|
+
process.stderr.write = err;
|
|
91
|
+
}
|
|
92
|
+
out(JSON.stringify({ additional_context: text.trim(), ...(carry ? { env: { PB_CONVERSATION_ID: carry } } : {}) }) + '\n');
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=session-hook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-hook.js","sourceRoot":"","sources":["../../src/commands/session-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACjH,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAKhE,gHAAgH;AAChH,SAAS,SAAS;IAChB,MAAM,EAAE,GAAG,qBAAqB,EAAE,CAAC;IACnC,OAAO,EAAE,IAAI,EAAE,KAAK,wBAAwB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC;AAED,kGAAkG;AAClG,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EAAU,EAAU,EAAE,CAAC,6BAA6B,EAAE,uCAAuC,CAAC;AAExH,qIAAqI;AACrI,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,EAAuD;IAC5H,IAAI,MAAM,IAAI,IAAI;QAAE,sBAAsB,EAAE,CAAC;IAC7C,MAAM,KAAK,GAAG,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAClD,IAAI,MAAM;QAAE,OAAO,wBAAwB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC5D,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAC/B,IAAI,KAAK;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,WAAW,GAAG,kGAAkG,CAAC;AAEvH,yGAAyG;AACzG,MAAM,UAAU,oBAAoB,CAAC,UAAmB;IACtD,UAAU;SACP,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,QAAQ,EAAE,mEAAmE,CAAC;SACrF,MAAM,CAAC,UAAU,EAAE,yEAAyE,CAAC;SAC7F,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC;SAC7B,MAAM,CACL,qBAAqB,EACrB,6GAA6G;QAC3G,2GAA2G;QAC3G,qCAAqC,CACxC;SACA,MAAM,CACL,mBAAmB,EACnB,gHAAgH;QAC9G,wEAAwE,CAC3E;SACA,MAAM,CAAC,mBAAmB,EAAE,iGAAiG,CAAC;SAC9H,MAAM,CAAC,KAAK,EAAE,IAAyD,EAAE,EAAE,GAAG,MAAM,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1H,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,oBAAoB,CAAC,UAAmB;IACtD,UAAU;SACP,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,mCAAmC,CAAC;SAChD,MAAM,CAAC,SAAS,EAAE,sDAAsD,CAAC;SACzE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC;SAC7B,MAAM,CAAC,qBAAqB,EAAE,qGAAqG,CAAC;SACpI,MAAM,CAAC,KAAK,EAAE,IAAuC,EAAE,EAAE,GAAG,MAAM,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxG,CAAC;AAED,2FAA2F;AAC3F,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,EAAE,IAAI,EAAE,GAAG,OAAO,EAAqC;IAClG,IAAI,IAAI;QAAE,sBAAsB,EAAE,CAAC;IACnC,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,UAAwB,EAAE,EAAE,QAAuB,IAAI;IACpG,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,MAAM,OAAO,GAAG,CAAC,CAAC,KAA0B,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAgC,CAAC;IACzH,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC;IAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;QAC/B,sHAAsH;QACtH,IAAI,KAAK;YAAE,IAAI,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;IAC7C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,QAAQ,GAAG,CAAC,YAAY,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,IAAI,IAAI,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,CAAC;IACvE,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC;QAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC;IAC7B,CAAC;IACD,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;AAC5H,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-hook.test.d.ts","sourceRoot":"","sources":["../../src/commands/session-hook.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TASK-562: the session commands as hooks run them. `--cursor` prints one JSON object whose
|
|
3
|
+
* additional_context is everything the start printed, a refusal included; `--hook` and `--cursor`
|
|
4
|
+
* read the hook input; when no env channel carries that id, the start says which id to prefix
|
|
5
|
+
* (Cursor gets it as hook env output).
|
|
6
|
+
*/
|
|
7
|
+
import { describe, it, expect, vi, afterEach, beforeEach } from 'vitest';
|
|
8
|
+
const { runSessionStart, runSessionClose, conv } = vi.hoisted(() => ({
|
|
9
|
+
runSessionStart: vi.fn(),
|
|
10
|
+
runSessionClose: vi.fn(),
|
|
11
|
+
conv: { hook: null, env: null, reads: 0 },
|
|
12
|
+
}));
|
|
13
|
+
vi.mock('./session.js', () => ({ runSessionStart: (o) => runSessionStart(o), runSessionClose: (o) => runSessionClose(o) }));
|
|
14
|
+
vi.mock('../lib/conversation.js', () => ({
|
|
15
|
+
readHookConversationId: () => { conv.reads += 1; return conv.hook; },
|
|
16
|
+
resolveConversationId: () => conv.hook ?? conv.env,
|
|
17
|
+
resolveEnvConversationId: () => conv.env,
|
|
18
|
+
}));
|
|
19
|
+
import { CLIError } from '../lib/errors.js';
|
|
20
|
+
import { carryLine, runSessionCloseCommand, runSessionStartCommand } from './session-hook.js';
|
|
21
|
+
function capture() {
|
|
22
|
+
let out = '';
|
|
23
|
+
const spy = vi.spyOn(process.stdout, 'write').mockImplementation((chunk) => { out += String(chunk); return true; });
|
|
24
|
+
return { read: () => out, restore: () => spy.mockRestore() };
|
|
25
|
+
}
|
|
26
|
+
describe('session hooks', () => {
|
|
27
|
+
beforeEach(() => { conv.hook = null; conv.env = null; conv.reads = 0; });
|
|
28
|
+
afterEach(() => { runSessionStart.mockReset(); runSessionClose.mockReset(); vi.restoreAllMocks(); });
|
|
29
|
+
it('--cursor wraps what the start printed, stdout and stderr, as additional_context', async () => {
|
|
30
|
+
runSessionStart.mockImplementation(async () => {
|
|
31
|
+
process.stdout.write('Session started: abc\n');
|
|
32
|
+
process.stderr.write('One rule line\n');
|
|
33
|
+
});
|
|
34
|
+
const out = capture();
|
|
35
|
+
await runSessionStartCommand({ cursor: true, role: 'ROL-9' });
|
|
36
|
+
out.restore();
|
|
37
|
+
expect(runSessionStart).toHaveBeenCalledWith({ role: 'ROL-9' });
|
|
38
|
+
expect(JSON.parse(out.read())).toEqual({ additional_context: 'Session started: abc\nOne rule line' });
|
|
39
|
+
});
|
|
40
|
+
it('--cursor with a hook session_id no env channel carries tells the agent in the text and sets the hook env', async () => {
|
|
41
|
+
// Cursor applies hook env to later hooks only, not the agent's shell, so the sentence must reach the agent (Codex P1, round 3).
|
|
42
|
+
conv.hook = 'cursor-a';
|
|
43
|
+
runSessionStart.mockImplementation(async () => { process.stdout.write('Session started: abc\n'); });
|
|
44
|
+
const out = capture();
|
|
45
|
+
await runSessionStartCommand({ cursor: true });
|
|
46
|
+
out.restore();
|
|
47
|
+
expect(JSON.parse(out.read())).toEqual({
|
|
48
|
+
additional_context: `Session started: abc\n${carryLine('cursor-a')}`,
|
|
49
|
+
env: { PB_CONVERSATION_ID: 'cursor-a' },
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
it('a refused start reaches the agent with its next step, never a failed hook', async () => {
|
|
53
|
+
runSessionStart.mockRejectedValue(new CLIError('No API key configured.', { guidance: 'Run pb connect <token> in your project folder.' }));
|
|
54
|
+
const out = capture();
|
|
55
|
+
await runSessionStartCommand({ cursor: true });
|
|
56
|
+
out.restore();
|
|
57
|
+
expect(JSON.parse(out.read())).toEqual({ additional_context: 'No API key configured.\nRun pb connect <token> in your project folder.' });
|
|
58
|
+
});
|
|
59
|
+
it('--hook (Codex) reads the hook input and names the id to prefix, pinned word for word', async () => {
|
|
60
|
+
conv.hook = 'codex-a';
|
|
61
|
+
runSessionStart.mockResolvedValue(undefined);
|
|
62
|
+
const out = capture();
|
|
63
|
+
await runSessionStartCommand({ hook: true });
|
|
64
|
+
out.restore();
|
|
65
|
+
expect(conv.reads).toBe(1);
|
|
66
|
+
expect(out.read()).toBe(`${carryLine('codex-a')}\n`);
|
|
67
|
+
expect(carryLine('codex-a')).toBe('Prefix PB_CONVERSATION_ID=codex-a on every pb command in this session.');
|
|
68
|
+
});
|
|
69
|
+
it('--hook prints nothing extra when an env channel already carries the same id', async () => {
|
|
70
|
+
conv.hook = null;
|
|
71
|
+
conv.env = 'claude-a';
|
|
72
|
+
runSessionStart.mockResolvedValue(undefined);
|
|
73
|
+
const out = capture();
|
|
74
|
+
await runSessionStartCommand({ hook: true });
|
|
75
|
+
out.restore();
|
|
76
|
+
expect(out.read()).toBe('');
|
|
77
|
+
});
|
|
78
|
+
it('close --hook reads the hook input first; without a flag neither command reads stdin', async () => {
|
|
79
|
+
await runSessionCloseCommand({ hook: true, force: true });
|
|
80
|
+
expect(conv.reads).toBe(1);
|
|
81
|
+
expect(runSessionClose).toHaveBeenCalledWith({ force: true });
|
|
82
|
+
await runSessionCloseCommand({});
|
|
83
|
+
runSessionStart.mockResolvedValue(undefined);
|
|
84
|
+
await runSessionStartCommand({ conversation: 'c1' });
|
|
85
|
+
expect(conv.reads).toBe(1);
|
|
86
|
+
expect(runSessionStart).toHaveBeenCalledWith({ conversation: 'c1' });
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
//# sourceMappingURL=session-hook.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-hook.test.js","sourceRoot":"","sources":["../../src/commands/session-hook.test.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/upgrade.js
CHANGED
|
@@ -4,7 +4,7 @@ import { Box, Text } from 'ink';
|
|
|
4
4
|
import { isJsonMode } from '../lib/runner.js';
|
|
5
5
|
import { bold, dim } from '../lib/style.js';
|
|
6
6
|
import { CLI_INSTALL_COMMAND } from '../lib/cliFirstRun.js';
|
|
7
|
-
import {
|
|
7
|
+
import { detectPbInstall, buildUpgradeCommand, spawnUpgrade } from '../lib/upgrade-runner.js';
|
|
8
8
|
import { isNewer, resolveLatestVersion } from '../lib/update-check.js';
|
|
9
9
|
function canUseInteractiveUpgrade() {
|
|
10
10
|
return Boolean(process.stdout.isTTY &&
|
|
@@ -21,12 +21,12 @@ function UpgradeTui({ currentVersion, latestVersion, onDone, onExit, }) {
|
|
|
21
21
|
const [lines, setLines] = useState([]);
|
|
22
22
|
const [status, setStatus] = useState('running');
|
|
23
23
|
const [message, setMessage] = useState('');
|
|
24
|
-
const
|
|
25
|
-
const command = useMemo(() => buildUpgradeCommand(
|
|
24
|
+
const install = useMemo(() => detectPbInstall(), []);
|
|
25
|
+
const command = useMemo(() => buildUpgradeCommand(install, latestVersion ?? undefined), [install, latestVersion]);
|
|
26
26
|
useEffect(() => {
|
|
27
27
|
let mounted = true;
|
|
28
28
|
let timer;
|
|
29
|
-
spawnUpgrade(
|
|
29
|
+
spawnUpgrade(install, {
|
|
30
30
|
version: latestVersion ?? undefined,
|
|
31
31
|
onOutput: (line) => {
|
|
32
32
|
if (!mounted)
|
|
@@ -53,7 +53,7 @@ function UpgradeTui({ currentVersion, latestVersion, onDone, onExit, }) {
|
|
|
53
53
|
if (timer)
|
|
54
54
|
clearTimeout(timer);
|
|
55
55
|
};
|
|
56
|
-
}, [
|
|
56
|
+
}, [install, onDone, onExit]);
|
|
57
57
|
const target = latestVersion ?? 'latest beta';
|
|
58
58
|
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, color: "cyan", children: "Upgrade pb CLI" }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { children: currentVersion }), _jsxs(Text, { color: "gray", children: [" ", '->', " "] }), _jsx(Text, { bold: true, children: target })] }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: "gray", children: "Channel: " }), _jsx(Text, { children: command.channel }), _jsx(Text, { color: "gray", children: " Command: " }), _jsx(Text, { children: command.display })] }), _jsx(ProgressLines, { lines: lines }), _jsxs(Box, { marginTop: 1, children: [status === 'running' && _jsx(Text, { color: "yellow", children: "Installing..." }), status === 'succeeded' && _jsx(Text, { color: "green", children: message }), status === 'failed' && _jsx(Text, { color: "red", children: message })] })] }));
|
|
59
59
|
}
|
|
@@ -83,12 +83,12 @@ export async function runUpgrade({ currentVersion }) {
|
|
|
83
83
|
}
|
|
84
84
|
// From here `latest` is non-null and strictly newer than the installed version.
|
|
85
85
|
if (isJsonMode()) {
|
|
86
|
-
const command = buildUpgradeCommand(
|
|
86
|
+
const command = buildUpgradeCommand(detectPbInstall(), latest).display;
|
|
87
87
|
process.stdout.write(JSON.stringify({ command, latest, hint: 'Run the command above to upgrade pb CLI.' }) + '\n');
|
|
88
88
|
return;
|
|
89
89
|
}
|
|
90
90
|
if (!canUseInteractiveUpgrade()) {
|
|
91
|
-
const displayCmd = buildUpgradeCommand(
|
|
91
|
+
const displayCmd = buildUpgradeCommand(detectPbInstall(), latest).display;
|
|
92
92
|
process.stdout.write('\n');
|
|
93
93
|
process.stdout.write(`${bold('Upgrade pb CLI')} ${dim('—')} run the command below:\n\n`);
|
|
94
94
|
process.stdout.write(` ${displayCmd}\n\n`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5D,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,GAAG,EAAc,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.tsx"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -21,7 +21,8 @@ import { runConnect } from './commands/connect.js';
|
|
|
21
21
|
import { runLogin } from './commands/login.js';
|
|
22
22
|
import { runOrient } from './commands/orient.js';
|
|
23
23
|
import { runSearch } from './commands/search.js';
|
|
24
|
-
import {
|
|
24
|
+
import { runSessionId, runSessionReset, runSessionList, runSessionShow } from './commands/session.js';
|
|
25
|
+
import { registerSessionClose, registerSessionStart } from './commands/session-hook.js';
|
|
25
26
|
import { runCapture } from './commands/capture.js';
|
|
26
27
|
import { runUpdate } from './commands/update.js';
|
|
27
28
|
import { runRestore } from './commands/restore.js';
|
|
@@ -252,8 +253,8 @@ program
|
|
|
252
253
|
});
|
|
253
254
|
program
|
|
254
255
|
.command('init')
|
|
255
|
-
.description('Install the Claude Code
|
|
256
|
-
.option('--dry-run', 'Print the hooks it would add without writing
|
|
256
|
+
.description('Install the session hooks for Claude Code, Codex and Cursor in this repo and check your setup (DEC-1926)')
|
|
257
|
+
.option('--dry-run', 'Print the hooks it would add without writing any hook file')
|
|
257
258
|
.action(async (opts) => {
|
|
258
259
|
await runInit({ dryRun: opts.dryRun });
|
|
259
260
|
});
|
|
@@ -303,25 +304,14 @@ program
|
|
|
303
304
|
const sessionCmd = program
|
|
304
305
|
.command('session')
|
|
305
306
|
.description('Manage write sessions (DEC-9: sessions required before write access)');
|
|
306
|
-
sessionCmd
|
|
307
|
-
.command('start')
|
|
308
|
-
.description('Start a tracked write session')
|
|
309
|
-
.option('--json', 'Output machine-readable JSON (deprecated: use global --json flag)')
|
|
310
|
-
.option('--conversation <id>', 'Explicit conversation identity override (WP-479 E2) — takes priority over env-detected channels. Pair with PB_CONVERSATION_ID=<id> so later bare pb commands (orient, capture) attribute to the same conversation — they resolve identity from env only')
|
|
311
|
-
.option('--role <entry-id>', 'Role to act as this session (DEC-1715) — only needed if you hold more than one; the error lists your roles if omitted. Default: "role" in .productbrain/config.local.json (DEC-1961)').option('--team <entry-id>', 'Team the --role is held in (TASK-801) — only needed if you hold that role in more than one team') // WP-753 O1a same-line (STD-2)
|
|
312
|
-
.action(async (opts) => { await runSessionStart(opts); });
|
|
307
|
+
registerSessionStart(sessionCmd); // TASK-562: start and close live in commands/session-hook.ts
|
|
313
308
|
sessionCmd
|
|
314
309
|
.command('id')
|
|
315
310
|
.description('Print current session ID to stdout (machine-readable, TEN-707)')
|
|
316
311
|
.action(() => {
|
|
317
312
|
runSessionId();
|
|
318
313
|
});
|
|
319
|
-
sessionCmd
|
|
320
|
-
.command('close')
|
|
321
|
-
.description('Close the active session (wrapup)')
|
|
322
|
-
.option('--force', 'Clear local session state even if server close fails')
|
|
323
|
-
.option('--conversation <id>', 'Close the session started with this --conversation <id>, so the next start on it resumes (TEN-4855)')
|
|
324
|
-
.action(async (opts) => { await runSessionClose(opts); });
|
|
314
|
+
registerSessionClose(sessionCmd);
|
|
325
315
|
// WP-479 E4: traceback + quota observability.
|
|
326
316
|
sessionCmd
|
|
327
317
|
.command('list')
|