@secondcontext/btx-cli 0.0.1

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/README.md ADDED
@@ -0,0 +1,83 @@
1
+ # @secondcontext/btx-cli
2
+
3
+ Canonical source for the BTX CLI.
4
+
5
+ This package owns the shared BTX command surface used by:
6
+
7
+ - standalone coding sessions that should run `btx ...`
8
+ - the BTX desktop app, which bundles this package into `code/projects/desktop-app/resources/btx-cli.cjs`
9
+
10
+ ## Current state
11
+
12
+ - Source of truth: `src/bin.ts` and `src/runtime-cli.ts`
13
+ - Desktop bundle is generated from this package
14
+ - Public npm package name: `@secondcontext/btx-cli`
15
+ - Public binary name: `btx`
16
+ - `--json` is the machine-readable mode for commands that return BTX data
17
+
18
+ ## Local workflow
19
+
20
+ ```bash
21
+ npm run build --prefix code/packages/btx-cli
22
+ npm run build:btx-cli --prefix code/projects/desktop-app
23
+ npm run test:btx-cli --prefix code/projects/desktop-app
24
+ npm run validate --prefix code
25
+ ```
26
+
27
+ ## Local package testing
28
+
29
+ Build and pack the package:
30
+
31
+ ```bash
32
+ npm run pack:btx-cli --prefix code
33
+ ```
34
+
35
+ Install the tarball into a clean repo or temp directory:
36
+
37
+ ```bash
38
+ npm init -y
39
+ npm install /absolute/path/to/code/packages/btx-cli/secondcontext-btx-cli-0.0.1.tgz
40
+ ./node_modules/.bin/btx --help
41
+ ./node_modules/.bin/btx repo status --json
42
+ ```
43
+
44
+ ## Supported standalone flow
45
+
46
+ ```bash
47
+ btx projects
48
+ btx repo link <project-id>
49
+ btx bootstrap all
50
+ btx context get --json
51
+ btx tasks list --json
52
+ btx session start --runtime codex --label "Investigate feature X"
53
+ btx session checkpoint --type decision --content "Keep desktop and standalone CLI on one contract"
54
+ btx session finish --summary "Recorded outcome and next steps"
55
+ ```
56
+
57
+ ## Auth and repo state
58
+
59
+ - Auth is read from `~/.btx/auth-session.json`, with a fallback to the desktop app auth session store
60
+ - Repo linkage is stored in `.btx/btx.json`
61
+ - External session state is stored in `~/.btx/runtime-state.json`
62
+
63
+ Until the package is published, the desktop app remains the easiest way to seed the auth session that the standalone CLI reads.
64
+
65
+ ## First npm publish
66
+
67
+ Dry-run the publish from the monorepo root:
68
+
69
+ ```bash
70
+ npm run publish:btx-cli:dry-run --prefix code
71
+ ```
72
+
73
+ Then publish from `code/packages/btx-cli`:
74
+
75
+ ```bash
76
+ npm publish
77
+ ```
78
+
79
+ Expected manual npm steps:
80
+
81
+ - Log in to npm with an account that can publish under `@secondcontext`
82
+ - Ensure the `@secondcontext` scope is configured for public packages
83
+ - If you want an open-source package, add a real `LICENSE` file before publishing and replace the current `UNLICENSED` marker in `package.json`
package/btx.js ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+
3
+ import './dist/bin.js'
package/dist/api.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ import type { RuntimeCliEnv } from './runtime-cli.js';
2
+ export declare function apiGet<T>(env: RuntimeCliEnv, path: string): Promise<T>;
3
+ export declare function projectApiGet<T>(env: RuntimeCliEnv, path: string): Promise<T>;
4
+ export declare function projectApiPost<T>(env: RuntimeCliEnv, path: string, body?: unknown): Promise<T>;
5
+ export declare function projectApiPatch<T>(env: RuntimeCliEnv, path: string, body?: unknown): Promise<T>;
6
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AA4FrD,wBAAsB,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAE5E;AAED,wBAAsB,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAGnF;AAED,wBAAsB,cAAc,CAAC,CAAC,EACpC,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,GACb,OAAO,CAAC,CAAC,CAAC,CAGZ;AAED,wBAAsB,eAAe,CAAC,CAAC,EACrC,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,GACb,OAAO,CAAC,CAAC,CAAC,CAGZ"}
package/dist/api.js ADDED
@@ -0,0 +1,72 @@
1
+ import { requireAccessToken, requireProjectId, writeStoredAuthSession, } from './config.js';
2
+ async function refreshAccessToken(env) {
3
+ if (!env.BTX_REFRESH_TOKEN || !env.BTX_SUPABASE_URL || !env.BTX_SUPABASE_ANON_KEY)
4
+ return null;
5
+ const response = await fetch(`${env.BTX_SUPABASE_URL}/auth/v1/token?grant_type=refresh_token`, {
6
+ method: 'POST',
7
+ headers: {
8
+ 'content-type': 'application/json',
9
+ apikey: env.BTX_SUPABASE_ANON_KEY,
10
+ },
11
+ body: JSON.stringify({ refresh_token: env.BTX_REFRESH_TOKEN }),
12
+ });
13
+ if (!response.ok)
14
+ return null;
15
+ const data = (await response.json());
16
+ const nowSeconds = Math.floor(Date.now() / 1000);
17
+ const session = {
18
+ access_token: data.access_token,
19
+ refresh_token: data.refresh_token,
20
+ expires_at: nowSeconds + data.expires_in,
21
+ supabase_url: env.BTX_SUPABASE_URL,
22
+ supabase_anon_key: env.BTX_SUPABASE_ANON_KEY,
23
+ api_url: env.BTX_API_URL,
24
+ };
25
+ writeStoredAuthSession(session);
26
+ env.BTX_ACCESS_TOKEN = data.access_token;
27
+ env.BTX_REFRESH_TOKEN = data.refresh_token;
28
+ return data.access_token;
29
+ }
30
+ async function requestWithAuth(env, url, method, body) {
31
+ const token = requireAccessToken(env);
32
+ const doRequest = async (accessToken) => fetch(url, {
33
+ method,
34
+ headers: {
35
+ 'content-type': 'application/json',
36
+ authorization: `Bearer ${accessToken}`,
37
+ },
38
+ ...(body !== undefined ? { body: JSON.stringify(body) } : {}),
39
+ });
40
+ let response = await doRequest(token);
41
+ if (response.status === 401) {
42
+ const refreshed = await refreshAccessToken(env);
43
+ if (!refreshed) {
44
+ throw new Error('BTX auth token expired. Sign in again through BTX desktop or provide a fresh token.');
45
+ }
46
+ response = await doRequest(refreshed);
47
+ }
48
+ if (response.status === 429) {
49
+ throw new Error('BTX API rate limited the request. Please wait a moment and try again.');
50
+ }
51
+ const json = (await response.json());
52
+ if (!response.ok || !json.ok) {
53
+ throw new Error(typeof json.error === 'string' ? json.error : JSON.stringify(json.error) || `Request failed (${response.status})`);
54
+ }
55
+ return json.data;
56
+ }
57
+ export async function apiGet(env, path) {
58
+ return requestWithAuth(env, `${env.BTX_API_URL}/api${path}`, 'GET');
59
+ }
60
+ export async function projectApiGet(env, path) {
61
+ const projectId = requireProjectId(env);
62
+ return requestWithAuth(env, `${env.BTX_API_URL}/api/projects/${projectId}${path}`, 'GET');
63
+ }
64
+ export async function projectApiPost(env, path, body) {
65
+ const projectId = requireProjectId(env);
66
+ return requestWithAuth(env, `${env.BTX_API_URL}/api/projects/${projectId}${path}`, 'POST', body);
67
+ }
68
+ export async function projectApiPatch(env, path, body) {
69
+ const projectId = requireProjectId(env);
70
+ return requestWithAuth(env, `${env.BTX_API_URL}/api/projects/${projectId}${path}`, 'PATCH', body);
71
+ }
72
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAEhB,sBAAsB,GACvB,MAAM,aAAa,CAAA;AAQpB,KAAK,UAAU,kBAAkB,CAAC,GAAkB;IAClD,IAAI,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,GAAG,CAAC,qBAAqB;QAAE,OAAO,IAAI,CAAA;IAE9F,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,GAAG,CAAC,gBAAgB,yCAAyC,EAChE;QACE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,MAAM,EAAE,GAAG,CAAC,qBAAqB;SAClC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,iBAAiB,EAAE,CAAC;KAC/D,CACF,CAAA;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,IAAI,CAAA;IAE7B,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAIlC,CAAA;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;IAChD,MAAM,OAAO,GAAsB;QACjC,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC,UAAU;QACxC,YAAY,EAAE,GAAG,CAAC,gBAAgB;QAClC,iBAAiB,EAAE,GAAG,CAAC,qBAAqB;QAC5C,OAAO,EAAE,GAAG,CAAC,WAAW;KACzB,CAAA;IACD,sBAAsB,CAAC,OAAO,CAAC,CAAA;IAC/B,GAAG,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAA;IACxC,GAAG,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAA;IAC1C,OAAO,IAAI,CAAC,YAAY,CAAA;AAC1B,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,GAAkB,EAClB,GAAW,EACX,MAAmD,EACnD,IAAc;IAEd,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAA;IAErC,MAAM,SAAS,GAAG,KAAK,EAAE,WAAmB,EAAqB,EAAE,CACjE,KAAK,CAAC,GAAG,EAAE;QACT,MAAM;QACN,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,WAAW,EAAE;SACvC;QACD,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9D,CAAC,CAAA;IAEJ,IAAI,QAAQ,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,CAAA;IACrC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAA;QAC/C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,qFAAqF,CAAC,CAAA;QACxG,CAAC;QACD,QAAQ,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,CAAA;IACvC,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAA;IAC1F,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmB,CAAA;IACtD,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,mBAAmB,QAAQ,CAAC,MAAM,GAAG,CAClH,CAAA;IACH,CAAC;IACD,OAAO,IAAI,CAAC,IAAS,CAAA;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAI,GAAkB,EAAE,IAAY;IAC9D,OAAO,eAAe,CAAI,GAAG,EAAE,GAAG,GAAG,CAAC,WAAW,OAAO,IAAI,EAAE,EAAE,KAAK,CAAC,CAAA;AACxE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAI,GAAkB,EAAE,IAAY;IACrE,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAA;IACvC,OAAO,eAAe,CAAI,GAAG,EAAE,GAAG,GAAG,CAAC,WAAW,iBAAiB,SAAS,GAAG,IAAI,EAAE,EAAE,KAAK,CAAC,CAAA;AAC9F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,GAAkB,EAClB,IAAY,EACZ,IAAc;IAEd,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAA;IACvC,OAAO,eAAe,CAAI,GAAG,EAAE,GAAG,GAAG,CAAC,WAAW,iBAAiB,SAAS,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;AACrG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAkB,EAClB,IAAY,EACZ,IAAc;IAEd,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAA;IACvC,OAAO,eAAe,CAAI,GAAG,EAAE,GAAG,GAAG,CAAC,WAAW,iBAAiB,SAAS,GAAG,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;AACtG,CAAC"}
package/dist/bin.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":""}
package/dist/bin.js ADDED
@@ -0,0 +1,394 @@
1
+ #!/usr/bin/env node
2
+ import { randomUUID } from 'node:crypto';
3
+ import path from 'node:path';
4
+ import { spawnSync } from 'node:child_process';
5
+ import { apiGet, projectApiPatch, projectApiPost } from './api.js';
6
+ import { bootstrapAgents } from './bootstrap.js';
7
+ import { clearActiveSession, findRepoRoot, getActiveSession, loadRepoConfig, resolveRuntimeEnv, setActiveSession, writeRepoConfig, } from './config.js';
8
+ import { runRuntimeCli } from './runtime-cli.js';
9
+ const RUNTIME_RESOURCES = new Set([
10
+ 'tasks',
11
+ 'sessions',
12
+ 'contacts',
13
+ 'orgs',
14
+ 'meetings',
15
+ 'leads',
16
+ 'user',
17
+ 'intro-paths',
18
+ 'search',
19
+ 'context',
20
+ 'pages',
21
+ 'hiring-types',
22
+ 'hiring-candidates',
23
+ ]);
24
+ function parseArgs(argv) {
25
+ const positional = [];
26
+ const flags = {};
27
+ let index = 0;
28
+ while (index < argv.length) {
29
+ const arg = argv[index];
30
+ if (arg.startsWith('--')) {
31
+ const key = arg.slice(2);
32
+ const next = argv[index + 1];
33
+ if (next !== undefined && !next.startsWith('--')) {
34
+ flags[key] = next;
35
+ index += 2;
36
+ }
37
+ else {
38
+ flags[key] = 'true';
39
+ index += 1;
40
+ }
41
+ continue;
42
+ }
43
+ positional.push(arg);
44
+ index += 1;
45
+ }
46
+ return { positional, flags };
47
+ }
48
+ function die(message) {
49
+ process.stderr.write(`Error: ${message}\n`);
50
+ process.exit(1);
51
+ }
52
+ function isJson(flags) {
53
+ return flags.json === 'true';
54
+ }
55
+ function printJson(value) {
56
+ process.stdout.write(`${JSON.stringify(value, null, 2)}\n`);
57
+ }
58
+ function printHelp() {
59
+ console.log(`BTX CLI
60
+
61
+ Usage:
62
+ btx <command> [flags]
63
+ btx <resource> <subcommand> [flags]
64
+
65
+ Standalone commands:
66
+ btx projects List BTX projects you can access
67
+ btx repo link <project-id> Link the current repo to a BTX project
68
+ btx repo status Show current repo BTX status
69
+ btx bootstrap <agent> Write BTX instructions into AGENTS.md and/or CLAUDE.md
70
+ btx session start Start or resume the active BTX coding session for this repo
71
+ btx session status Show the active BTX coding session
72
+ btx session checkpoint Record progress, risk, decision, blocker, or note
73
+ btx session finish Close the active BTX coding session
74
+
75
+ BTX resources:
76
+ tasks, contacts, orgs, leads, meetings, user, intro-paths,
77
+ search, context, pages, sessions, hiring-types, hiring-candidates
78
+
79
+ Examples:
80
+ btx projects
81
+ btx repo link <project-id>
82
+ btx bootstrap all
83
+ btx context get
84
+ btx tasks list --json
85
+ btx tasks list
86
+ btx session start --runtime codex --label "Implement project telemetry"
87
+ btx session checkpoint --type risk --content "Task meaning is still ambiguous across sessions"
88
+ btx session finish --summary "Finished CLI bootstrap and repo linking flow"
89
+
90
+ All commands that return BTX data support --json for machine-readable output.`);
91
+ }
92
+ function bestEffortGitBranch(repoRoot) {
93
+ const result = spawnSync('git', ['rev-parse', '--abbrev-ref', 'HEAD'], {
94
+ cwd: repoRoot,
95
+ encoding: 'utf8',
96
+ });
97
+ if (result.status !== 0)
98
+ return null;
99
+ return result.stdout.trim() || null;
100
+ }
101
+ async function handleProjects(flags) {
102
+ const env = resolveRuntimeEnv();
103
+ const projects = await apiGet(env, '/projects');
104
+ if (isJson(flags)) {
105
+ printJson(projects);
106
+ return;
107
+ }
108
+ if (projects.length === 0) {
109
+ console.log('No BTX projects available.');
110
+ return;
111
+ }
112
+ for (const project of projects) {
113
+ console.log(`${project.name}`);
114
+ console.log(` ID: ${project.id}`);
115
+ if (project.role)
116
+ console.log(` Role: ${project.role}`);
117
+ console.log();
118
+ }
119
+ }
120
+ async function handleRepoLink(projectId, flags) {
121
+ if (!projectId)
122
+ die('Usage: btx repo link <project-id>');
123
+ const env = resolveRuntimeEnv();
124
+ const projects = await apiGet(env, '/projects');
125
+ const project = projects.find((item) => item.id === projectId);
126
+ if (!project) {
127
+ die(`Project ${projectId} is not accessible with the current BTX auth session.`);
128
+ }
129
+ const repoRoot = findRepoRoot();
130
+ writeRepoConfig(repoRoot, {
131
+ projectId: project.id,
132
+ projectName: project.name,
133
+ apiBase: env.BTX_API_URL,
134
+ linkedAt: new Date().toISOString(),
135
+ });
136
+ if (isJson(flags)) {
137
+ printJson({
138
+ repoRoot,
139
+ projectId: project.id,
140
+ projectName: project.name,
141
+ apiBase: env.BTX_API_URL,
142
+ linked: true,
143
+ });
144
+ return;
145
+ }
146
+ console.log(`Linked ${repoRoot}`);
147
+ console.log(`Project: ${project.name}`);
148
+ console.log(`ID: ${project.id}`);
149
+ }
150
+ function handleRepoStatus(flags) {
151
+ const repoRoot = findRepoRoot();
152
+ const repoConfig = loadRepoConfig(repoRoot);
153
+ const activeSession = getActiveSession(repoRoot);
154
+ const env = resolveRuntimeEnv();
155
+ const status = {
156
+ repoRoot,
157
+ linked: !!repoConfig,
158
+ projectId: repoConfig?.projectId ?? null,
159
+ projectName: repoConfig?.projectName ?? null,
160
+ apiBase: env.BTX_API_URL ?? null,
161
+ hasAuthToken: !!env.BTX_ACCESS_TOKEN,
162
+ activeSession,
163
+ };
164
+ if (isJson(flags)) {
165
+ printJson(status);
166
+ return;
167
+ }
168
+ console.log(`Repo root: ${repoRoot}`);
169
+ if (!repoConfig) {
170
+ console.log('Linked project: none');
171
+ }
172
+ else {
173
+ console.log(`Linked project: ${repoConfig.projectName ?? 'BTX Project'} (${repoConfig.projectId})`);
174
+ }
175
+ console.log(`API base: ${env.BTX_API_URL}`);
176
+ console.log(`Auth token available: ${env.BTX_ACCESS_TOKEN ? 'yes' : 'no'}`);
177
+ if (activeSession) {
178
+ console.log(`Active session: ${activeSession.label} (${activeSession.sessionId})`);
179
+ console.log(`Runtime: ${activeSession.runtime}`);
180
+ }
181
+ else {
182
+ console.log('Active session: none');
183
+ }
184
+ }
185
+ async function handleBootstrap(targetArg, flags) {
186
+ const target = targetArg === 'claude' || targetArg === 'codex' || targetArg === 'all'
187
+ ? targetArg
188
+ : 'all';
189
+ const result = bootstrapAgents(target);
190
+ if (isJson(flags)) {
191
+ printJson({
192
+ repoRoot: result.repoRoot,
193
+ projectId: result.projectId,
194
+ projectName: result.projectName,
195
+ files: result.files.map((filePath) => path.relative(result.repoRoot, filePath)),
196
+ });
197
+ return;
198
+ }
199
+ console.log(`Bootstrapped BTX instructions for ${result.projectName} (${result.projectId}).`);
200
+ for (const filePath of result.files) {
201
+ console.log(` ${path.relative(result.repoRoot, filePath)}`);
202
+ }
203
+ }
204
+ function getCurrentSessionOrDie(repoRoot) {
205
+ const active = getActiveSession(repoRoot);
206
+ if (!active) {
207
+ die('No active BTX session for this repo. Run `btx session start --label "<goal>"` first.');
208
+ }
209
+ return active;
210
+ }
211
+ async function handleSessionStart(flags) {
212
+ const repoRoot = findRepoRoot();
213
+ const env = resolveRuntimeEnv(repoRoot);
214
+ const repoConfig = loadRepoConfig(repoRoot);
215
+ if (!repoConfig) {
216
+ die('This repo is not linked to BTX yet. Run `btx repo link <project-id>` first.');
217
+ }
218
+ const existing = getActiveSession(repoRoot);
219
+ if (existing && flags.fresh !== 'true') {
220
+ if (isJson(flags)) {
221
+ printJson(existing);
222
+ }
223
+ else {
224
+ console.log(`Reusing active session ${existing.sessionId}`);
225
+ console.log(`Label: ${existing.label}`);
226
+ console.log(`Runtime: ${existing.runtime}`);
227
+ }
228
+ return;
229
+ }
230
+ const runtime = flags.runtime || 'external-cli';
231
+ const sessionId = flags['session-id'] || randomUUID();
232
+ const label = flags.label || `External coding session in ${path.basename(repoRoot)}`;
233
+ const branch = bestEffortGitBranch(repoRoot);
234
+ const sessionType = flags.type || 'code';
235
+ const startedAt = new Date().toISOString();
236
+ await projectApiPost(env, '/sessions', {
237
+ sessionId,
238
+ label,
239
+ sessionType,
240
+ executionMode: 'external-cli',
241
+ runtime,
242
+ status: 'open',
243
+ messageCount: 0,
244
+ sessionMetadata: {
245
+ repoRoot,
246
+ repoName: path.basename(repoRoot),
247
+ gitBranch: branch,
248
+ tool: 'btx-cli',
249
+ },
250
+ });
251
+ const activeSession = {
252
+ sessionId,
253
+ projectId: repoConfig.projectId,
254
+ label,
255
+ runtime,
256
+ startedAt,
257
+ repoRoot,
258
+ };
259
+ setActiveSession(repoRoot, activeSession);
260
+ if (isJson(flags)) {
261
+ printJson(activeSession);
262
+ return;
263
+ }
264
+ console.log(`Started BTX session ${sessionId}`);
265
+ console.log(`Label: ${label}`);
266
+ console.log(`Runtime: ${runtime}`);
267
+ }
268
+ function handleSessionStatus(flags) {
269
+ const repoRoot = findRepoRoot();
270
+ const active = getActiveSession(repoRoot);
271
+ if (isJson(flags)) {
272
+ printJson(active);
273
+ return;
274
+ }
275
+ if (!active) {
276
+ console.log('No active BTX session for this repo.');
277
+ return;
278
+ }
279
+ console.log(`Session: ${active.sessionId}`);
280
+ console.log(`Label: ${active.label}`);
281
+ console.log(`Runtime: ${active.runtime}`);
282
+ console.log(`Started: ${active.startedAt}`);
283
+ }
284
+ async function handleSessionCheckpoint(flags) {
285
+ const repoRoot = findRepoRoot();
286
+ const active = getCurrentSessionOrDie(repoRoot);
287
+ const type = flags.type || 'note';
288
+ const content = flags.content;
289
+ if (!content) {
290
+ die('Usage: btx session checkpoint --type note|risk|decision|blocker|progress|assumption --content "..."');
291
+ }
292
+ const env = resolveRuntimeEnv(repoRoot, {
293
+ BTX_SESSION_ID: active.sessionId,
294
+ BTX_PROJECT_ID: active.projectId,
295
+ });
296
+ const activity = await projectApiPost(env, '/session-activities', {
297
+ sessionId: active.sessionId,
298
+ type,
299
+ content,
300
+ metadata: {
301
+ runtime: active.runtime,
302
+ repoRoot,
303
+ via: 'btx-cli',
304
+ },
305
+ });
306
+ if (isJson(flags)) {
307
+ printJson(activity);
308
+ return;
309
+ }
310
+ console.log(`Saved ${type} checkpoint to session ${active.sessionId}`);
311
+ }
312
+ async function handleSessionFinish(flags) {
313
+ const repoRoot = findRepoRoot();
314
+ const active = getCurrentSessionOrDie(repoRoot);
315
+ const env = resolveRuntimeEnv(repoRoot, {
316
+ BTX_SESSION_ID: active.sessionId,
317
+ BTX_PROJECT_ID: active.projectId,
318
+ });
319
+ if (flags.summary) {
320
+ await projectApiPost(env, '/session-activities', {
321
+ sessionId: active.sessionId,
322
+ type: 'summary',
323
+ content: flags.summary,
324
+ metadata: {
325
+ runtime: active.runtime,
326
+ repoRoot,
327
+ via: 'btx-cli',
328
+ },
329
+ });
330
+ }
331
+ const closedAt = new Date().toISOString();
332
+ await projectApiPatch(env, '/sessions', {
333
+ sessionId: active.sessionId,
334
+ status: 'closed',
335
+ closedAt,
336
+ });
337
+ clearActiveSession(repoRoot);
338
+ if (isJson(flags)) {
339
+ printJson({ sessionId: active.sessionId, closedAt });
340
+ return;
341
+ }
342
+ console.log(`Closed BTX session ${active.sessionId}`);
343
+ }
344
+ async function handleSession(positionals, flags) {
345
+ const subcommand = positionals[1];
346
+ switch (subcommand) {
347
+ case 'start':
348
+ return handleSessionStart(flags);
349
+ case 'status':
350
+ return handleSessionStatus(flags);
351
+ case 'checkpoint':
352
+ return handleSessionCheckpoint(flags);
353
+ case 'finish':
354
+ return handleSessionFinish(flags);
355
+ default:
356
+ die('Usage: btx session <start|status|checkpoint|finish> [...]');
357
+ }
358
+ }
359
+ async function main() {
360
+ const argv = process.argv.slice(2);
361
+ const { positional, flags } = parseArgs(argv);
362
+ const command = positional[0];
363
+ if (!command || command === '--help' || command === 'help') {
364
+ printHelp();
365
+ return;
366
+ }
367
+ if (RUNTIME_RESOURCES.has(command)) {
368
+ await runRuntimeCli(argv, resolveRuntimeEnv());
369
+ return;
370
+ }
371
+ switch (command) {
372
+ case 'projects':
373
+ return handleProjects(flags);
374
+ case 'repo':
375
+ switch (positional[1]) {
376
+ case 'link':
377
+ return handleRepoLink(positional[2], flags);
378
+ case 'status':
379
+ return handleRepoStatus(flags);
380
+ default:
381
+ die('Usage: btx repo <link|status> [...]');
382
+ }
383
+ case 'bootstrap':
384
+ return handleBootstrap(positional[1], flags);
385
+ case 'session':
386
+ return handleSession(positional, flags);
387
+ default:
388
+ die(`Unknown command: ${command}. Run \`btx --help\`.`);
389
+ }
390
+ }
391
+ main().catch((error) => {
392
+ die(error instanceof Error ? error.message : String(error));
393
+ });
394
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare function bootstrapAgents(target: 'claude' | 'codex' | 'all', startDir?: string): {
2
+ repoRoot: string;
3
+ files: string[];
4
+ projectName: string;
5
+ projectId: string;
6
+ };
7
+ //# sourceMappingURL=bootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AA2EA,wBAAgB,eAAe,CAC7B,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,EAClC,QAAQ,SAAgB,GACvB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAuB/E"}