@antistud/handrails-cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/dist/bin/handrails-rig.d.ts +9 -0
  2. package/dist/bin/handrails-rig.js +19 -0
  3. package/dist/bin/handrails-rig.js.map +1 -0
  4. package/dist/bin/handrails.d.ts +2 -0
  5. package/dist/bin/handrails.js +10 -0
  6. package/dist/bin/handrails.js.map +1 -0
  7. package/dist/src/bridge/daemon.d.ts +50 -0
  8. package/dist/src/bridge/daemon.js +319 -0
  9. package/dist/src/bridge/daemon.js.map +1 -0
  10. package/dist/src/claude/context-manager.d.ts +41 -0
  11. package/dist/src/claude/context-manager.js +184 -0
  12. package/dist/src/claude/context-manager.js.map +1 -0
  13. package/dist/src/claude/reader.d.ts +17 -0
  14. package/dist/src/claude/reader.js +186 -0
  15. package/dist/src/claude/reader.js.map +1 -0
  16. package/dist/src/cli/commands/config.d.ts +2 -0
  17. package/dist/src/cli/commands/config.js +59 -0
  18. package/dist/src/cli/commands/config.js.map +1 -0
  19. package/dist/src/cli/commands/context.d.ts +2 -0
  20. package/dist/src/cli/commands/context.js +158 -0
  21. package/dist/src/cli/commands/context.js.map +1 -0
  22. package/dist/src/cli/commands/daemon.d.ts +2 -0
  23. package/dist/src/cli/commands/daemon.js +29 -0
  24. package/dist/src/cli/commands/daemon.js.map +1 -0
  25. package/dist/src/cli/commands/init.d.ts +2 -0
  26. package/dist/src/cli/commands/init.js +197 -0
  27. package/dist/src/cli/commands/init.js.map +1 -0
  28. package/dist/src/cli/commands/login.d.ts +2 -0
  29. package/dist/src/cli/commands/login.js +87 -0
  30. package/dist/src/cli/commands/login.js.map +1 -0
  31. package/dist/src/cli/commands/rig.d.ts +2 -0
  32. package/dist/src/cli/commands/rig.js +49 -0
  33. package/dist/src/cli/commands/rig.js.map +1 -0
  34. package/dist/src/cli/commands/status.d.ts +2 -0
  35. package/dist/src/cli/commands/status.js +119 -0
  36. package/dist/src/cli/commands/status.js.map +1 -0
  37. package/dist/src/cli/commands/sync.d.ts +2 -0
  38. package/dist/src/cli/commands/sync.js +149 -0
  39. package/dist/src/cli/commands/sync.js.map +1 -0
  40. package/dist/src/cli/index.d.ts +2 -0
  41. package/dist/src/cli/index.js +62 -0
  42. package/dist/src/cli/index.js.map +1 -0
  43. package/dist/src/config/index.d.ts +20 -0
  44. package/dist/src/config/index.js +131 -0
  45. package/dist/src/config/index.js.map +1 -0
  46. package/dist/src/config/schema.d.ts +59 -0
  47. package/dist/src/config/schema.js +14 -0
  48. package/dist/src/config/schema.js.map +1 -0
  49. package/dist/src/handrails/auth.d.ts +15 -0
  50. package/dist/src/handrails/auth.js +80 -0
  51. package/dist/src/handrails/auth.js.map +1 -0
  52. package/dist/src/handrails/client.d.ts +100 -0
  53. package/dist/src/handrails/client.js +135 -0
  54. package/dist/src/handrails/client.js.map +1 -0
  55. package/dist/src/index.d.ts +5 -0
  56. package/dist/src/index.js +34 -0
  57. package/dist/src/index.js.map +1 -0
  58. package/dist/src/mcp/server.d.ts +10 -0
  59. package/dist/src/mcp/server.js +167 -0
  60. package/dist/src/mcp/server.js.map +1 -0
  61. package/dist/src/mcp/tools/context-tools.d.ts +8 -0
  62. package/dist/src/mcp/tools/context-tools.js +111 -0
  63. package/dist/src/mcp/tools/context-tools.js.map +1 -0
  64. package/dist/src/mcp/tools/sync-tools.d.ts +9 -0
  65. package/dist/src/mcp/tools/sync-tools.js +170 -0
  66. package/dist/src/mcp/tools/sync-tools.js.map +1 -0
  67. package/dist/src/runner/executor.d.ts +8 -0
  68. package/dist/src/runner/executor.js +39 -0
  69. package/dist/src/runner/executor.js.map +1 -0
  70. package/dist/src/runner/executors/claude-code.d.ts +7 -0
  71. package/dist/src/runner/executors/claude-code.js +247 -0
  72. package/dist/src/runner/executors/claude-code.js.map +1 -0
  73. package/dist/src/runner/executors/codex.d.ts +9 -0
  74. package/dist/src/runner/executors/codex.js +72 -0
  75. package/dist/src/runner/executors/codex.js.map +1 -0
  76. package/dist/src/runner/executors/opencode.d.ts +9 -0
  77. package/dist/src/runner/executors/opencode.js +71 -0
  78. package/dist/src/runner/executors/opencode.js.map +1 -0
  79. package/dist/src/runner/executors/types.d.ts +24 -0
  80. package/dist/src/runner/executors/types.js +27 -0
  81. package/dist/src/runner/executors/types.js.map +1 -0
  82. package/dist/src/runner/index.d.ts +34 -0
  83. package/dist/src/runner/index.js +234 -0
  84. package/dist/src/runner/index.js.map +1 -0
  85. package/dist/src/runner/logger.d.ts +14 -0
  86. package/dist/src/runner/logger.js +35 -0
  87. package/dist/src/runner/logger.js.map +1 -0
  88. package/dist/src/workflow/engine.d.ts +44 -0
  89. package/dist/src/workflow/engine.js +383 -0
  90. package/dist/src/workflow/engine.js.map +1 -0
  91. package/dist/tsconfig.tsbuildinfo +1 -0
  92. package/package.json +46 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-manager.js","sourceRoot":"","sources":["../../../src/claude/context-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { SessionIndex, SessionIndexEntry, ClaudeSettings } from '../config/schema';
2
+ export declare function getClaudeDir(): string;
3
+ export declare function claudeDirExists(): boolean;
4
+ export declare function getClaudeSettings(): ClaudeSettings | null;
5
+ export declare function saveClaudeSettings(settings: ClaudeSettings): void;
6
+ export declare function getSessionIndex(projectPath: string): SessionIndex | null;
7
+ export declare function getRecentSessions(projectPath: string, limit?: number): SessionIndexEntry[];
8
+ export declare function readSessionTranscript(sessionPath: string): any[];
9
+ export declare function getSlashCommands(): Array<{
10
+ name: string;
11
+ content: string;
12
+ path: string;
13
+ }>;
14
+ export declare function writeSlashCommand(name: string, content: string): string;
15
+ export declare function getProjectClaudeMd(projectPath: string): string | null;
16
+ export declare function writeProjectClaudeMd(projectPath: string, content: string): string;
17
+ export declare function getProjectHistory(): string[];
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.getClaudeDir = getClaudeDir;
37
+ exports.claudeDirExists = claudeDirExists;
38
+ exports.getClaudeSettings = getClaudeSettings;
39
+ exports.saveClaudeSettings = saveClaudeSettings;
40
+ exports.getSessionIndex = getSessionIndex;
41
+ exports.getRecentSessions = getRecentSessions;
42
+ exports.readSessionTranscript = readSessionTranscript;
43
+ exports.getSlashCommands = getSlashCommands;
44
+ exports.writeSlashCommand = writeSlashCommand;
45
+ exports.getProjectClaudeMd = getProjectClaudeMd;
46
+ exports.writeProjectClaudeMd = writeProjectClaudeMd;
47
+ exports.getProjectHistory = getProjectHistory;
48
+ const fs = __importStar(require("fs"));
49
+ const path = __importStar(require("path"));
50
+ const os = __importStar(require("os"));
51
+ const CLAUDE_DIR = path.join(os.homedir(), '.claude');
52
+ const CLAUDE_PROJECTS_DIR = path.join(CLAUDE_DIR, 'projects');
53
+ const CLAUDE_SLASH_COMMANDS_DIR = path.join(CLAUDE_DIR, 'slash-commands');
54
+ /**
55
+ * Encode a project path to the directory name format Claude Code uses.
56
+ * e.g., "/Users/jon/projects/foo" -> "-Users-jon-projects-foo"
57
+ */
58
+ function encodeProjectPath(projectPath) {
59
+ return projectPath.replace(/\//g, '-');
60
+ }
61
+ function getClaudeDir() {
62
+ return CLAUDE_DIR;
63
+ }
64
+ function claudeDirExists() {
65
+ return fs.existsSync(CLAUDE_DIR);
66
+ }
67
+ function getClaudeSettings() {
68
+ const settingsPath = path.join(CLAUDE_DIR, 'settings.json');
69
+ if (!fs.existsSync(settingsPath))
70
+ return null;
71
+ try {
72
+ return JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));
73
+ }
74
+ catch {
75
+ return null;
76
+ }
77
+ }
78
+ function saveClaudeSettings(settings) {
79
+ const settingsPath = path.join(CLAUDE_DIR, 'settings.json');
80
+ fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2), 'utf-8');
81
+ }
82
+ function getSessionIndex(projectPath) {
83
+ const encoded = encodeProjectPath(projectPath);
84
+ const indexPath = path.join(CLAUDE_PROJECTS_DIR, encoded, 'sessions-index.json');
85
+ if (!fs.existsSync(indexPath))
86
+ return null;
87
+ try {
88
+ return JSON.parse(fs.readFileSync(indexPath, 'utf-8'));
89
+ }
90
+ catch {
91
+ return null;
92
+ }
93
+ }
94
+ function getRecentSessions(projectPath, limit = 10) {
95
+ const index = getSessionIndex(projectPath);
96
+ if (!index?.entries)
97
+ return [];
98
+ return index.entries
99
+ .filter(e => !e.isSidechain)
100
+ .sort((a, b) => new Date(b.modified).getTime() - new Date(a.modified).getTime())
101
+ .slice(0, limit);
102
+ }
103
+ function readSessionTranscript(sessionPath) {
104
+ if (!fs.existsSync(sessionPath))
105
+ return [];
106
+ try {
107
+ const content = fs.readFileSync(sessionPath, 'utf-8');
108
+ return content
109
+ .split('\n')
110
+ .filter(line => line.trim())
111
+ .map(line => {
112
+ try {
113
+ return JSON.parse(line);
114
+ }
115
+ catch {
116
+ return null;
117
+ }
118
+ })
119
+ .filter(Boolean);
120
+ }
121
+ catch {
122
+ return [];
123
+ }
124
+ }
125
+ function getSlashCommands() {
126
+ if (!fs.existsSync(CLAUDE_SLASH_COMMANDS_DIR))
127
+ return [];
128
+ const commands = [];
129
+ const files = fs.readdirSync(CLAUDE_SLASH_COMMANDS_DIR);
130
+ for (const file of files) {
131
+ if (!file.endsWith('.md'))
132
+ continue;
133
+ const fullPath = path.join(CLAUDE_SLASH_COMMANDS_DIR, file);
134
+ try {
135
+ const content = fs.readFileSync(fullPath, 'utf-8');
136
+ commands.push({
137
+ name: file.replace('.md', ''),
138
+ content,
139
+ path: fullPath,
140
+ });
141
+ }
142
+ catch { /* skip unreadable */ }
143
+ }
144
+ return commands;
145
+ }
146
+ function writeSlashCommand(name, content) {
147
+ if (!fs.existsSync(CLAUDE_SLASH_COMMANDS_DIR)) {
148
+ fs.mkdirSync(CLAUDE_SLASH_COMMANDS_DIR, { recursive: true });
149
+ }
150
+ const filePath = path.join(CLAUDE_SLASH_COMMANDS_DIR, `${name}.md`);
151
+ fs.writeFileSync(filePath, content, 'utf-8');
152
+ return filePath;
153
+ }
154
+ function getProjectClaudeMd(projectPath) {
155
+ const claudeMdPath = path.join(projectPath, 'CLAUDE.md');
156
+ if (!fs.existsSync(claudeMdPath))
157
+ return null;
158
+ try {
159
+ return fs.readFileSync(claudeMdPath, 'utf-8');
160
+ }
161
+ catch {
162
+ return null;
163
+ }
164
+ }
165
+ function writeProjectClaudeMd(projectPath, content) {
166
+ const claudeMdPath = path.join(projectPath, 'CLAUDE.md');
167
+ fs.writeFileSync(claudeMdPath, content, 'utf-8');
168
+ return claudeMdPath;
169
+ }
170
+ function getProjectHistory() {
171
+ if (!fs.existsSync(CLAUDE_PROJECTS_DIR))
172
+ return [];
173
+ try {
174
+ return fs.readdirSync(CLAUDE_PROJECTS_DIR)
175
+ .filter(dir => {
176
+ const indexPath = path.join(CLAUDE_PROJECTS_DIR, dir, 'sessions-index.json');
177
+ return fs.existsSync(indexPath);
178
+ })
179
+ .map(dir => dir.replace(/-/g, '/')) // Decode path
180
+ .filter(p => fs.existsSync(p));
181
+ }
182
+ catch {
183
+ return [];
184
+ }
185
+ }
186
+ //# sourceMappingURL=reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reader.js","sourceRoot":"","sources":["../../../src/claude/reader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerConfigCommand(program: Command): void;
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerConfigCommand = registerConfigCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const config_1 = require("../../config");
9
+ const CONFIGURABLE_KEYS = [
10
+ 'apiUrl',
11
+ 'autoSync',
12
+ ];
13
+ function registerConfigCommand(program) {
14
+ const config = program
15
+ .command('config')
16
+ .description('Get and set configuration values');
17
+ config
18
+ .command('get [key]')
19
+ .description('Get a configuration value (or all values)')
20
+ .action((key) => {
21
+ const cfg = (0, config_1.loadConfig)();
22
+ if (key) {
23
+ const value = cfg[key];
24
+ if (value === undefined) {
25
+ console.log(chalk_1.default.red(`Unknown config key: ${key}`));
26
+ console.log(chalk_1.default.dim(`Available keys: ${CONFIGURABLE_KEYS.join(', ')}`));
27
+ process.exit(1);
28
+ }
29
+ console.log(`${key} = ${JSON.stringify(value)}`);
30
+ }
31
+ else {
32
+ // Show all (mask sensitive values)
33
+ const display = { ...cfg };
34
+ if (display.apiKey) {
35
+ display.apiKey = display.apiKey.substring(0, 8) + '...';
36
+ }
37
+ console.log(JSON.stringify(display, null, 2));
38
+ }
39
+ });
40
+ config
41
+ .command('set <key> <value>')
42
+ .description('Set a configuration value')
43
+ .action((key, value) => {
44
+ if (!CONFIGURABLE_KEYS.includes(key)) {
45
+ console.log(chalk_1.default.red(`Cannot set "${key}". Configurable keys: ${CONFIGURABLE_KEYS.join(', ')}`));
46
+ process.exit(1);
47
+ }
48
+ let parsedValue = value;
49
+ if (value === 'true')
50
+ parsedValue = true;
51
+ if (value === 'false')
52
+ parsedValue = false;
53
+ if (!isNaN(Number(value)) && value !== '')
54
+ parsedValue = Number(value);
55
+ (0, config_1.updateConfig)({ [key]: parsedValue });
56
+ console.log(chalk_1.default.green(`Set ${key} = ${JSON.stringify(parsedValue)}`));
57
+ });
58
+ }
59
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/cli/commands/config.ts"],"names":[],"mappings":";;;;;AAUA,sDA8CC;AAvDD,kDAA0B;AAC1B,yCAAwD;AAGxD,MAAM,iBAAiB,GAAiC;IACtD,QAAQ;IACR,UAAU;CACX,CAAC;AAEF,SAAgB,qBAAqB,CAAC,OAAgB;IACpD,MAAM,MAAM,GAAG,OAAO;SACnB,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,kCAAkC,CAAC,CAAC;IAEnD,MAAM;SACH,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,CAAC,GAAY,EAAE,EAAE;QACvB,MAAM,GAAG,GAAG,IAAA,mBAAU,GAAE,CAAC;QAEzB,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,KAAK,GAAI,GAAW,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC,CAAC;gBACrD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,mBAAmB,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,mCAAmC;YACnC,MAAM,OAAO,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;YAC3B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAY,CAAC;YACjE,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,CAAC,GAAW,EAAE,KAAa,EAAE,EAAE;QACrC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAA4B,CAAC,EAAE,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,eAAe,GAAG,yBAAyB,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAClG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,WAAW,GAAQ,KAAK,CAAC;QAC7B,IAAI,KAAK,KAAK,MAAM;YAAE,WAAW,GAAG,IAAI,CAAC;QACzC,IAAI,KAAK,KAAK,OAAO;YAAE,WAAW,GAAG,KAAK,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE;YAAE,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAEvE,IAAA,qBAAY,EAAC,EAAE,CAAC,GAAG,CAAC,EAAE,WAAW,EAAS,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerContextCommand(program: Command): void;
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.registerContextCommand = registerContextCommand;
40
+ const chalk_1 = __importDefault(require("chalk"));
41
+ const ora_1 = __importDefault(require("ora"));
42
+ const path = __importStar(require("path"));
43
+ const context_manager_1 = require("../../claude/context-manager");
44
+ const reader_1 = require("../../claude/reader");
45
+ const config_1 = require("../../config");
46
+ function registerContextCommand(program) {
47
+ const context = program
48
+ .command('context')
49
+ .description('Manage CLAUDE.md and project context');
50
+ context
51
+ .command('show')
52
+ .description('Show current CLAUDE.md content and context')
53
+ .action(async () => {
54
+ const projectPath = process.cwd();
55
+ const projectName = path.basename(projectPath);
56
+ const content = (0, reader_1.getProjectClaudeMd)(projectPath);
57
+ console.log(chalk_1.default.bold(`\nContext for ${chalk_1.default.cyan(projectName)}\n`));
58
+ if (!content) {
59
+ console.log(chalk_1.default.dim('No CLAUDE.md found in this project.'));
60
+ console.log(chalk_1.default.dim('Run "handrails context pull" to get your team template,'));
61
+ console.log(chalk_1.default.dim('or create one manually.'));
62
+ return;
63
+ }
64
+ const sections = (0, context_manager_1.getContextSections)(projectPath);
65
+ if (sections.teamSection) {
66
+ console.log(chalk_1.default.bold.blue('--- Team Section ---'));
67
+ console.log(sections.teamSection);
68
+ console.log('');
69
+ }
70
+ if (sections.localSection) {
71
+ console.log(chalk_1.default.bold.yellow('--- Local Section ---'));
72
+ console.log(sections.localSection);
73
+ console.log('');
74
+ }
75
+ if (!sections.teamSection && !sections.localSection) {
76
+ console.log(content);
77
+ }
78
+ // Slash commands
79
+ const commands = (0, reader_1.getSlashCommands)();
80
+ if (commands.length > 0) {
81
+ console.log(chalk_1.default.bold('\nSlash Commands'));
82
+ for (const cmd of commands) {
83
+ console.log(` /${cmd.name} — ${cmd.content.substring(0, 80).replace(/\n/g, ' ')}...`);
84
+ }
85
+ }
86
+ console.log('');
87
+ });
88
+ context
89
+ .command('pull')
90
+ .description('Pull team CLAUDE.md template and merge with local content')
91
+ .action(async () => {
92
+ if (!(0, config_1.isAuthenticated)()) {
93
+ console.log(chalk_1.default.red('Not authenticated. Run "handrails login" first.'));
94
+ process.exit(1);
95
+ }
96
+ const projectPath = process.cwd();
97
+ const spinner = (0, ora_1.default)('Pulling team context...').start();
98
+ try {
99
+ const result = await (0, context_manager_1.pullContext)(projectPath);
100
+ if (result.templateFound) {
101
+ spinner.succeed(`Team template applied to ${chalk_1.default.cyan(result.path)}`);
102
+ }
103
+ else {
104
+ spinner.info('No team CLAUDE.md template found.');
105
+ console.log(chalk_1.default.dim('Push your local CLAUDE.md as a template: handrails context push'));
106
+ }
107
+ }
108
+ catch (err) {
109
+ spinner.fail(`Failed to pull context: ${err.message}`);
110
+ }
111
+ });
112
+ context
113
+ .command('push')
114
+ .description('Push local CLAUDE.md content to team as a template')
115
+ .action(async () => {
116
+ if (!(0, config_1.isAuthenticated)()) {
117
+ console.log(chalk_1.default.red('Not authenticated. Run "handrails login" first.'));
118
+ process.exit(1);
119
+ }
120
+ const projectPath = process.cwd();
121
+ const spinner = (0, ora_1.default)('Pushing context to team...').start();
122
+ try {
123
+ const result = await (0, context_manager_1.pushContext)(projectPath);
124
+ if (result.pushed) {
125
+ spinner.succeed('CLAUDE.md pushed to team as template');
126
+ console.log(chalk_1.default.dim(`Content length: ${result.content?.length} chars`));
127
+ }
128
+ else {
129
+ spinner.info('No local CLAUDE.md content to push.');
130
+ }
131
+ }
132
+ catch (err) {
133
+ spinner.fail(`Failed to push context: ${err.message}`);
134
+ }
135
+ });
136
+ context
137
+ .command('sync-commands')
138
+ .description('Sync slash commands between local and team')
139
+ .option('--direction <dir>', 'Sync direction: pull, push, or both', 'both')
140
+ .action(async (options) => {
141
+ if (!(0, config_1.isAuthenticated)()) {
142
+ console.log(chalk_1.default.red('Not authenticated. Run "handrails login" first.'));
143
+ process.exit(1);
144
+ }
145
+ const spinner = (0, ora_1.default)('Syncing slash commands...').start();
146
+ try {
147
+ const result = await (0, context_manager_1.syncSlashCommands)(options.direction);
148
+ spinner.succeed(`Synced slash commands: ${result.pulled} pulled, ${result.pushed} pushed`);
149
+ for (const cmd of result.commands) {
150
+ console.log(chalk_1.default.dim(` ${cmd}`));
151
+ }
152
+ }
153
+ catch (err) {
154
+ spinner.fail(`Failed to sync commands: ${err.message}`);
155
+ }
156
+ });
157
+ }
158
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../src/cli/commands/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerDaemonCommand(program: Command): void;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerDaemonCommand = registerDaemonCommand;
4
+ const config_1 = require("../../config");
5
+ const daemon_1 = require("../../bridge/daemon");
6
+ function registerDaemonCommand(program) {
7
+ program
8
+ .command('daemon')
9
+ .description('Start the bridge daemon to connect your local environment to Handrails')
10
+ .option('--api-url <url>', 'Override Handrails API URL')
11
+ .option('--api-key <key>', 'Override API key')
12
+ .action(async (options) => {
13
+ if (!options.apiKey && !(0, config_1.isAuthenticated)()) {
14
+ console.error('Not authenticated. Run "handrails login" first.');
15
+ process.exit(1);
16
+ }
17
+ const config = (0, config_1.loadConfig)();
18
+ const apiUrl = options.apiUrl || config.apiUrl;
19
+ const apiKey = options.apiKey || config.apiKey;
20
+ console.log('Handrails Bridge Daemon');
21
+ console.log('======================');
22
+ console.log(`Team: ${config.teamName || 'unknown'}`);
23
+ console.log(`API: ${apiUrl}`);
24
+ console.log('');
25
+ const daemon = new daemon_1.BridgeDaemon(apiUrl, apiKey);
26
+ await daemon.start();
27
+ });
28
+ }
29
+ //# sourceMappingURL=daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../../src/cli/commands/daemon.ts"],"names":[],"mappings":";;AAIA,sDAyBC;AA5BD,yCAA2D;AAC3D,gDAAmD;AAEnD,SAAgB,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,wEAAwE,CAAC;SACrF,MAAM,CAAC,iBAAiB,EAAE,4BAA4B,CAAC;SACvD,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;SAC7C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,IAAA,wBAAe,GAAE,EAAE,CAAC;YAC1C,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,IAAA,mBAAU,GAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;QAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;QAE/C,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,MAAM,MAAM,GAAG,IAAI,qBAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerInitCommand(program: Command): void;