@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.
@@ -0,0 +1,91 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { findRepoRoot, loadRepoConfig } from './config.js';
4
+ const BLOCK_START = '<!-- BTX CLI bootstrap:start -->';
5
+ const BLOCK_END = '<!-- BTX CLI bootstrap:end -->';
6
+ function upsertManagedBlock(filePath, block) {
7
+ const existing = fs.existsSync(filePath) ? fs.readFileSync(filePath, 'utf8') : '';
8
+ const managed = `${BLOCK_START}\n${block.trim()}\n${BLOCK_END}`;
9
+ let next;
10
+ if (existing.includes(BLOCK_START) && existing.includes(BLOCK_END)) {
11
+ next = existing.replace(new RegExp(`${BLOCK_START}[\\s\\S]*?${BLOCK_END}`), managed);
12
+ }
13
+ else if (!existing.trim()) {
14
+ next = `${managed}\n`;
15
+ }
16
+ else {
17
+ next = `${existing.replace(/\s+$/, '')}\n\n${managed}\n`;
18
+ }
19
+ fs.writeFileSync(filePath, next, 'utf8');
20
+ }
21
+ function codexBlock(projectName, projectId) {
22
+ return `## BTX CLI
23
+
24
+ This repo is linked to BTX project "${projectName}" (\`${projectId}\`).
25
+
26
+ Use \`btx\` when business context, BTX tasks, project notes, contacts, or session telemetry matter.
27
+
28
+ - Run \`btx context get\` when product or business context would help.
29
+ - Use \`btx tasks ...\` for BTX tasks. Do not confuse these with codebase TODOs.
30
+ - At the start of substantial work, run \`btx session start --runtime codex --label "<goal>"\`.
31
+ - During work, record notable progress, decisions, blockers, risks, or ambiguity with \`btx session checkpoint --type <type> --content "..." \`.
32
+ - Before ending a substantial session, run \`btx session finish --summary "..."\`.
33
+
34
+ Common commands:
35
+ \`\`\`bash
36
+ btx --help
37
+ btx context get
38
+ btx tasks list
39
+ btx tasks get <task-id>
40
+ btx session status
41
+ btx session start --runtime codex --label "Implement feature X"
42
+ btx session checkpoint --type risk --content "API contract between renderer and main is still drifting"
43
+ btx session finish --summary "Finished type-safe CLI bootstrap and linked repo to BTX"
44
+ \`\`\``;
45
+ }
46
+ function claudeBlock(projectName, projectId) {
47
+ return `## BTX CLI
48
+
49
+ This repo is linked to BTX project "${projectName}" (\`${projectId}\`).
50
+
51
+ You have access to the standalone \`btx\` CLI from this coding session.
52
+
53
+ - Run \`btx context get\` when business or product context would help.
54
+ - Use \`btx tasks ...\` for BTX tasks. Do not confuse these with codebase TODOs.
55
+ - At the start of substantial work, run \`btx session start --runtime claude-code --label "<goal>"\`.
56
+ - During work, record notable progress, decisions, blockers, risks, or ambiguity with \`btx session checkpoint --type <type> --content "..." \`.
57
+ - Before ending a substantial session, run \`btx session finish --summary "..."\`.
58
+
59
+ Common commands:
60
+ \`\`\`bash
61
+ btx --help
62
+ btx context get
63
+ btx tasks list
64
+ btx tasks get <task-id>
65
+ btx session status
66
+ btx session start --runtime claude-code --label "Investigate feature X"
67
+ btx session checkpoint --type decision --content "Team should keep desktop and standalone CLI on one contract"
68
+ btx session finish --summary "Captured decisions, risks, and next steps in BTX"
69
+ \`\`\``;
70
+ }
71
+ export function bootstrapAgents(target, startDir = process.cwd()) {
72
+ const repoRoot = findRepoRoot(startDir);
73
+ const repoConfig = loadRepoConfig(repoRoot);
74
+ if (!repoConfig) {
75
+ throw new Error('This repo is not linked to a BTX project yet. Run `btx repo link <project-id>` first.');
76
+ }
77
+ const projectName = repoConfig.projectName ?? 'BTX Project';
78
+ const files = [];
79
+ if (target === 'codex' || target === 'all') {
80
+ const agentsPath = path.join(repoRoot, 'AGENTS.md');
81
+ upsertManagedBlock(agentsPath, codexBlock(projectName, repoConfig.projectId));
82
+ files.push(agentsPath);
83
+ }
84
+ if (target === 'claude' || target === 'all') {
85
+ const claudePath = path.join(repoRoot, 'CLAUDE.md');
86
+ upsertManagedBlock(claudePath, claudeBlock(projectName, repoConfig.projectId));
87
+ files.push(claudePath);
88
+ }
89
+ return { repoRoot, files, projectName, projectId: repoConfig.projectId };
90
+ }
91
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { RuntimeCliEnv } from './runtime-cli.js';
2
+ export interface RepoConfig {
3
+ projectId: string;
4
+ projectName?: string;
5
+ apiBase?: string;
6
+ linkedAt: string;
7
+ }
8
+ export interface StoredAuthSession {
9
+ access_token: string;
10
+ refresh_token: string;
11
+ expires_at: number;
12
+ supabase_url?: string;
13
+ supabase_anon_key?: string;
14
+ api_url?: string;
15
+ }
16
+ export interface ActiveSessionState {
17
+ sessionId: string;
18
+ projectId: string;
19
+ label: string;
20
+ runtime: string;
21
+ startedAt: string;
22
+ repoRoot: string;
23
+ }
24
+ interface RuntimeState {
25
+ activeSessions: Record<string, ActiveSessionState>;
26
+ }
27
+ export declare function findRepoRoot(startDir?: string): string;
28
+ export declare function repoConfigPath(repoRoot: string): string;
29
+ export declare function loadRepoConfig(repoRoot: string): RepoConfig | null;
30
+ export declare function writeRepoConfig(repoRoot: string, config: RepoConfig): void;
31
+ export declare function loadRuntimeState(): RuntimeState;
32
+ export declare function getActiveSession(repoRoot: string): ActiveSessionState | null;
33
+ export declare function setActiveSession(repoRoot: string, session: ActiveSessionState): void;
34
+ export declare function clearActiveSession(repoRoot: string): void;
35
+ export declare function loadStoredAuthSession(): StoredAuthSession | null;
36
+ export declare function writeStoredAuthSession(session: StoredAuthSession): void;
37
+ export declare function loadEnvContext(startDir?: string): Record<string, string>;
38
+ export declare function resolveRuntimeEnv(startDir?: string, overrides?: RuntimeCliEnv): RuntimeCliEnv;
39
+ export declare function requireProjectId(env: RuntimeCliEnv): string;
40
+ export declare function requireAccessToken(env: RuntimeCliEnv): string;
41
+ export {};
42
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAErD,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,UAAU,YAAY;IACpB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;CACnD;AA8CD,wBAAgB,YAAY,CAAC,QAAQ,SAAgB,GAAG,MAAM,CAa7D;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAElE;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAE1E;AAED,wBAAgB,gBAAgB,IAAI,YAAY,CAE/C;AAMD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAG5E;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAIpF;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAIzD;AAED,wBAAgB,qBAAqB,IAAI,iBAAiB,GAAG,IAAI,CAKhE;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAEvE;AAED,wBAAgB,cAAc,CAAC,QAAQ,SAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAc/E;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,SAAgB,EAAE,SAAS,GAAE,aAAkB,GAAG,aAAa,CAwCxG;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAQ3D;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAQ7D"}
package/dist/config.js ADDED
@@ -0,0 +1,158 @@
1
+ import fs from 'node:fs';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ const REPO_CONFIG_RELATIVE_PATH = path.join('.btx', 'btx.json');
5
+ const GLOBAL_DIR = path.join(os.homedir(), '.btx');
6
+ const GLOBAL_AUTH_PATH = path.join(GLOBAL_DIR, 'auth-session.json');
7
+ const RUNTIME_STATE_PATH = path.join(GLOBAL_DIR, 'runtime-state.json');
8
+ function readJson(filePath) {
9
+ if (!fs.existsSync(filePath))
10
+ return null;
11
+ try {
12
+ return JSON.parse(fs.readFileSync(filePath, 'utf8'));
13
+ }
14
+ catch {
15
+ return null;
16
+ }
17
+ }
18
+ function writeJsonAtomic(filePath, value) {
19
+ const dir = path.dirname(filePath);
20
+ const tmp = `${filePath}.tmp`;
21
+ fs.mkdirSync(dir, { recursive: true });
22
+ fs.writeFileSync(tmp, JSON.stringify(value, null, 2), 'utf8');
23
+ fs.renameSync(tmp, filePath);
24
+ }
25
+ function readEnvFile(filePath) {
26
+ if (!fs.existsSync(filePath))
27
+ return {};
28
+ const result = {};
29
+ for (const line of fs.readFileSync(filePath, 'utf8').split(/\r?\n/)) {
30
+ const match = line.match(/^([^#=]+)=(.*)$/);
31
+ if (!match)
32
+ continue;
33
+ result[match[1].trim()] = match[2].trim();
34
+ }
35
+ return result;
36
+ }
37
+ function desktopAuthPath() {
38
+ const home = os.homedir();
39
+ if (process.platform === 'darwin') {
40
+ return path.join(home, 'Library', 'Application Support', 'BTX', 'auth-session.json');
41
+ }
42
+ if (process.platform === 'win32') {
43
+ return path.join(home, 'AppData', 'Roaming', 'BTX', 'auth-session.json');
44
+ }
45
+ return path.join(home, '.config', 'BTX', 'auth-session.json');
46
+ }
47
+ export function findRepoRoot(startDir = process.cwd()) {
48
+ let current = path.resolve(startDir);
49
+ while (true) {
50
+ if (fs.existsSync(path.join(current, '.git')) ||
51
+ fs.existsSync(path.join(current, REPO_CONFIG_RELATIVE_PATH))) {
52
+ return current;
53
+ }
54
+ const parent = path.dirname(current);
55
+ if (parent === current)
56
+ return path.resolve(startDir);
57
+ current = parent;
58
+ }
59
+ }
60
+ export function repoConfigPath(repoRoot) {
61
+ return path.join(repoRoot, REPO_CONFIG_RELATIVE_PATH);
62
+ }
63
+ export function loadRepoConfig(repoRoot) {
64
+ return readJson(repoConfigPath(repoRoot));
65
+ }
66
+ export function writeRepoConfig(repoRoot, config) {
67
+ writeJsonAtomic(repoConfigPath(repoRoot), config);
68
+ }
69
+ export function loadRuntimeState() {
70
+ return readJson(RUNTIME_STATE_PATH) ?? { activeSessions: {} };
71
+ }
72
+ function writeRuntimeState(state) {
73
+ writeJsonAtomic(RUNTIME_STATE_PATH, state);
74
+ }
75
+ export function getActiveSession(repoRoot) {
76
+ const state = loadRuntimeState();
77
+ return state.activeSessions[path.resolve(repoRoot)] ?? null;
78
+ }
79
+ export function setActiveSession(repoRoot, session) {
80
+ const state = loadRuntimeState();
81
+ state.activeSessions[path.resolve(repoRoot)] = session;
82
+ writeRuntimeState(state);
83
+ }
84
+ export function clearActiveSession(repoRoot) {
85
+ const state = loadRuntimeState();
86
+ delete state.activeSessions[path.resolve(repoRoot)];
87
+ writeRuntimeState(state);
88
+ }
89
+ export function loadStoredAuthSession() {
90
+ return (readJson(GLOBAL_AUTH_PATH) ??
91
+ readJson(desktopAuthPath()));
92
+ }
93
+ export function writeStoredAuthSession(session) {
94
+ writeJsonAtomic(GLOBAL_AUTH_PATH, session);
95
+ }
96
+ export function loadEnvContext(startDir = process.cwd()) {
97
+ const repoRoot = findRepoRoot(startDir);
98
+ const candidates = [
99
+ path.join(repoRoot, '.env.local'),
100
+ path.join(repoRoot, '.env'),
101
+ path.join(repoRoot, 'code', '.env.local'),
102
+ path.join(repoRoot, 'code', '.env'),
103
+ path.join(repoRoot, 'code', 'projects', 'desktop-app', '.env.local'),
104
+ path.join(repoRoot, 'code', 'projects', 'desktop-app', '.env'),
105
+ ];
106
+ return candidates.reduce((acc, filePath) => {
107
+ return { ...acc, ...readEnvFile(filePath) };
108
+ }, {});
109
+ }
110
+ export function resolveRuntimeEnv(startDir = process.cwd(), overrides = {}) {
111
+ const repoRoot = findRepoRoot(startDir);
112
+ const repoConfig = loadRepoConfig(repoRoot);
113
+ const activeSession = getActiveSession(repoRoot);
114
+ const storedAuth = loadStoredAuthSession();
115
+ const fileEnv = loadEnvContext(startDir);
116
+ return {
117
+ BTX_ACCESS_TOKEN: overrides.BTX_ACCESS_TOKEN ?? process.env.BTX_ACCESS_TOKEN ?? storedAuth?.access_token,
118
+ BTX_REFRESH_TOKEN: overrides.BTX_REFRESH_TOKEN ?? process.env.BTX_REFRESH_TOKEN ?? storedAuth?.refresh_token,
119
+ BTX_SUPABASE_URL: overrides.BTX_SUPABASE_URL ??
120
+ process.env.BTX_SUPABASE_URL ??
121
+ process.env.VITE_SUPABASE_URL ??
122
+ process.env.NEXT_PUBLIC_SUPABASE_URL ??
123
+ storedAuth?.supabase_url ??
124
+ fileEnv.VITE_SUPABASE_URL ??
125
+ fileEnv.NEXT_PUBLIC_SUPABASE_URL,
126
+ BTX_SUPABASE_ANON_KEY: overrides.BTX_SUPABASE_ANON_KEY ??
127
+ process.env.BTX_SUPABASE_ANON_KEY ??
128
+ process.env.VITE_SUPABASE_ANON_KEY ??
129
+ process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY ??
130
+ storedAuth?.supabase_anon_key ??
131
+ fileEnv.VITE_SUPABASE_ANON_KEY ??
132
+ fileEnv.NEXT_PUBLIC_SUPABASE_ANON_KEY,
133
+ BTX_PROJECT_ID: overrides.BTX_PROJECT_ID ?? process.env.BTX_PROJECT_ID ?? repoConfig?.projectId,
134
+ BTX_API_URL: overrides.BTX_API_URL ??
135
+ process.env.BTX_API_URL ??
136
+ process.env.API_URL ??
137
+ storedAuth?.api_url ??
138
+ repoConfig?.apiBase ??
139
+ fileEnv.API_URL ??
140
+ 'https://btx.secondcontext.com',
141
+ BTX_SESSION_ID: overrides.BTX_SESSION_ID ?? process.env.BTX_SESSION_ID ?? activeSession?.sessionId,
142
+ };
143
+ }
144
+ export function requireProjectId(env) {
145
+ const projectId = env.BTX_PROJECT_ID;
146
+ if (!projectId) {
147
+ throw new Error('No BTX project is linked for this repo. Run `btx projects`, then `btx repo link <project-id>`.');
148
+ }
149
+ return projectId;
150
+ }
151
+ export function requireAccessToken(env) {
152
+ const token = env.BTX_ACCESS_TOKEN;
153
+ if (!token) {
154
+ throw new Error('No BTX auth session found. Set BTX_ACCESS_TOKEN or sign in through BTX desktop first.');
155
+ }
156
+ return token;
157
+ }
158
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { runRuntimeCli, type RuntimeCliEnv } from './runtime-cli.js';
2
+ export { bootstrapAgents, } from './bootstrap.js';
3
+ export { findRepoRoot, loadRepoConfig, loadStoredAuthSession, resolveRuntimeEnv, writeRepoConfig, getActiveSession, setActiveSession, clearActiveSession, type RepoConfig, type ActiveSessionState, } from './config.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACpE,OAAO,EACL,eAAe,GAChB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,UAAU,EACf,KAAK,kBAAkB,GACxB,MAAM,aAAa,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export { runRuntimeCli } from './runtime-cli.js';
2
+ export { bootstrapAgents, } from './bootstrap.js';
3
+ export { findRepoRoot, loadRepoConfig, loadStoredAuthSession, resolveRuntimeEnv, writeRepoConfig, getActiveSession, setActiveSession, clearActiveSession, } from './config.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAsB,MAAM,kBAAkB,CAAA;AACpE,OAAO,EACL,eAAe,GAChB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,GAGnB,MAAM,aAAa,CAAA"}
@@ -0,0 +1,13 @@
1
+ export interface RuntimeCliEnv {
2
+ BTX_ACCESS_TOKEN?: string;
3
+ BTX_REFRESH_TOKEN?: string;
4
+ BTX_SUPABASE_URL?: string;
5
+ BTX_SUPABASE_ANON_KEY?: string;
6
+ BTX_PROJECT_ID?: string;
7
+ BTX_API_URL?: string;
8
+ BTX_SESSION_ID?: string;
9
+ BTX_CLI_PATH?: string;
10
+ BTX_CLI_COMMAND?: string;
11
+ }
12
+ export declare function runRuntimeCli(args: string[], env?: RuntimeCliEnv): Promise<void>;
13
+ //# sourceMappingURL=runtime-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-cli.d.ts","sourceRoot":"","sources":["../src/runtime-cli.ts"],"names":[],"mappings":"AAoLA,MAAM,WAAW,aAAa;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AA6hED,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,GAAE,aAA2B,GAC/B,OAAO,CAAC,IAAI,CAAC,CA0Qf"}