@brainfile/cli 0.2.0 → 0.4.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.
- package/.claude/settings.json +7 -0
- package/CHANGELOG.md +28 -0
- package/README.md +114 -1
- package/dist/cli.js +38 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +3 -0
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/hooks.d.ts +34 -0
- package/dist/commands/hooks.d.ts.map +1 -0
- package/dist/commands/hooks.js +295 -0
- package/dist/commands/hooks.js.map +1 -0
- package/dist/commands/init.d.ts +7 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +95 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/lint.d.ts.map +1 -1
- package/dist/commands/lint.js +3 -0
- package/dist/commands/lint.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +3 -0
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/move.d.ts.map +1 -1
- package/dist/commands/move.js +3 -0
- package/dist/commands/move.js.map +1 -1
- package/dist/commands/template.d.ts.map +1 -1
- package/dist/commands/template.js +3 -0
- package/dist/commands/template.js.map +1 -1
- package/dist/utils/brainfile-finder.d.ts +12 -0
- package/dist/utils/brainfile-finder.d.ts.map +1 -0
- package/dist/utils/brainfile-finder.js +74 -0
- package/dist/utils/brainfile-finder.js.map +1 -0
- package/dist/utils/git-helper.d.ts +13 -0
- package/dist/utils/git-helper.d.ts.map +1 -0
- package/dist/utils/git-helper.js +59 -0
- package/dist/utils/git-helper.js.map +1 -0
- package/dist/utils/hook-parser.d.ts +15 -0
- package/dist/utils/hook-parser.d.ts.map +1 -0
- package/dist/utils/hook-parser.js +48 -0
- package/dist/utils/hook-parser.js.map +1 -0
- package/dist/utils/hook-settings.d.ts +27 -0
- package/dist/utils/hook-settings.d.ts.map +1 -0
- package/dist/utils/hook-settings.js +239 -0
- package/dist/utils/hook-settings.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,239 @@
|
|
|
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.getSettingsPath = getSettingsPath;
|
|
37
|
+
exports.readToolSettings = readToolSettings;
|
|
38
|
+
exports.writeToolSettings = writeToolSettings;
|
|
39
|
+
exports.installBrainfileHooks = installBrainfileHooks;
|
|
40
|
+
exports.uninstallBrainfileHooks = uninstallBrainfileHooks;
|
|
41
|
+
exports.areBrainfileHooksInstalled = areBrainfileHooksInstalled;
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const os = __importStar(require("os"));
|
|
45
|
+
/**
|
|
46
|
+
* Get settings path for a specific tool and scope
|
|
47
|
+
*/
|
|
48
|
+
function getSettingsPath(tool, scope) {
|
|
49
|
+
const homeDir = os.homedir();
|
|
50
|
+
if (scope === 'user') {
|
|
51
|
+
switch (tool) {
|
|
52
|
+
case 'claude-code':
|
|
53
|
+
return path.join(homeDir, '.claude', 'settings.json');
|
|
54
|
+
case 'cursor':
|
|
55
|
+
return path.join(homeDir, '.cursor', 'hooks.json');
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
// project scope
|
|
60
|
+
switch (tool) {
|
|
61
|
+
case 'claude-code':
|
|
62
|
+
return path.join(process.cwd(), '.claude', 'settings.json');
|
|
63
|
+
case 'cursor':
|
|
64
|
+
return path.join(process.cwd(), '.cursor', 'hooks.json');
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Read tool settings (returns empty object if file doesn't exist)
|
|
70
|
+
*/
|
|
71
|
+
function readToolSettings(tool, scope) {
|
|
72
|
+
const settingsPath = getSettingsPath(tool, scope);
|
|
73
|
+
if (!fs.existsSync(settingsPath)) {
|
|
74
|
+
return tool === 'cursor' ? { version: 1, hooks: {} } : {};
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
const content = fs.readFileSync(settingsPath, 'utf-8');
|
|
78
|
+
return JSON.parse(content);
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return tool === 'cursor' ? { version: 1, hooks: {} } : {};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Write tool settings
|
|
86
|
+
*/
|
|
87
|
+
function writeToolSettings(tool, scope, settings) {
|
|
88
|
+
const settingsPath = getSettingsPath(tool, scope);
|
|
89
|
+
const settingsDir = path.dirname(settingsPath);
|
|
90
|
+
// Create directory if it doesn't exist
|
|
91
|
+
if (!fs.existsSync(settingsDir)) {
|
|
92
|
+
fs.mkdirSync(settingsDir, { recursive: true });
|
|
93
|
+
}
|
|
94
|
+
fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2), 'utf-8');
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Add brainfile hooks to tool settings
|
|
98
|
+
*/
|
|
99
|
+
function installBrainfileHooks(tool, scope) {
|
|
100
|
+
const settings = readToolSettings(tool, scope);
|
|
101
|
+
if (tool === 'claude-code') {
|
|
102
|
+
if (!settings.hooks) {
|
|
103
|
+
settings.hooks = {};
|
|
104
|
+
}
|
|
105
|
+
settings.hooks.PostToolUse = settings.hooks.PostToolUse || [];
|
|
106
|
+
settings.hooks.UserPromptSubmit = settings.hooks.UserPromptSubmit || [];
|
|
107
|
+
settings.hooks.SessionStart = settings.hooks.SessionStart || [];
|
|
108
|
+
// Add PostToolUse hook if not already present
|
|
109
|
+
const hasPostToolUse = settings.hooks.PostToolUse.some((h) => h.hooks?.some((hook) => hook.command?.includes('brainfile hooks after-edit')));
|
|
110
|
+
if (!hasPostToolUse) {
|
|
111
|
+
settings.hooks.PostToolUse.push({
|
|
112
|
+
matcher: 'Edit|Write|Create',
|
|
113
|
+
hooks: [
|
|
114
|
+
{
|
|
115
|
+
type: 'command',
|
|
116
|
+
command: 'brainfile hooks after-edit'
|
|
117
|
+
}
|
|
118
|
+
]
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
// Add UserPromptSubmit hook if not already present
|
|
122
|
+
const hasUserPromptSubmit = settings.hooks.UserPromptSubmit.some((h) => h.hooks?.some((hook) => hook.command?.includes('brainfile hooks before-prompt')));
|
|
123
|
+
if (!hasUserPromptSubmit) {
|
|
124
|
+
settings.hooks.UserPromptSubmit.push({
|
|
125
|
+
matcher: '',
|
|
126
|
+
hooks: [
|
|
127
|
+
{
|
|
128
|
+
type: 'command',
|
|
129
|
+
command: 'brainfile hooks before-prompt'
|
|
130
|
+
}
|
|
131
|
+
]
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
// Add SessionStart hook if not already present
|
|
135
|
+
const hasSessionStart = settings.hooks.SessionStart.some((h) => h.hooks?.some((hook) => hook.command?.includes('brainfile hooks session-start')));
|
|
136
|
+
if (!hasSessionStart) {
|
|
137
|
+
settings.hooks.SessionStart.push({
|
|
138
|
+
matcher: '',
|
|
139
|
+
hooks: [
|
|
140
|
+
{
|
|
141
|
+
type: 'command',
|
|
142
|
+
command: 'brainfile hooks session-start'
|
|
143
|
+
}
|
|
144
|
+
]
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
else if (tool === 'cursor') {
|
|
149
|
+
if (!settings.hooks) {
|
|
150
|
+
settings.hooks = {};
|
|
151
|
+
}
|
|
152
|
+
settings.hooks.afterFileEdit = settings.hooks.afterFileEdit || [];
|
|
153
|
+
settings.hooks.beforeSubmitPrompt = settings.hooks.beforeSubmitPrompt || [];
|
|
154
|
+
settings.hooks.stop = settings.hooks.stop || [];
|
|
155
|
+
// Add afterFileEdit hook if not already present
|
|
156
|
+
const hasAfterFileEdit = settings.hooks.afterFileEdit.some((h) => h.command?.includes('brainfile hooks after-edit'));
|
|
157
|
+
if (!hasAfterFileEdit) {
|
|
158
|
+
settings.hooks.afterFileEdit.push({
|
|
159
|
+
command: 'brainfile hooks after-edit'
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
// Add beforeSubmitPrompt hook if not already present
|
|
163
|
+
const hasBeforeSubmitPrompt = settings.hooks.beforeSubmitPrompt.some((h) => h.command?.includes('brainfile hooks before-prompt'));
|
|
164
|
+
if (!hasBeforeSubmitPrompt) {
|
|
165
|
+
settings.hooks.beforeSubmitPrompt.push({
|
|
166
|
+
command: 'brainfile hooks before-prompt'
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
// Add stop hook if not already present
|
|
170
|
+
const hasStop = settings.hooks.stop.some((h) => h.command?.includes('brainfile hooks session-start'));
|
|
171
|
+
if (!hasStop) {
|
|
172
|
+
settings.hooks.stop.push({
|
|
173
|
+
command: 'brainfile hooks session-start'
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
writeToolSettings(tool, scope, settings);
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Remove brainfile hooks from tool settings
|
|
181
|
+
*/
|
|
182
|
+
function uninstallBrainfileHooks(tool, scope) {
|
|
183
|
+
const settings = readToolSettings(tool, scope);
|
|
184
|
+
if (!settings.hooks) {
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
if (tool === 'claude-code') {
|
|
188
|
+
// Remove brainfile hooks from each event type
|
|
189
|
+
if (settings.hooks.PostToolUse) {
|
|
190
|
+
settings.hooks.PostToolUse = settings.hooks.PostToolUse.filter((h) => !h.hooks?.some((hook) => hook.command?.includes('brainfile hooks')));
|
|
191
|
+
}
|
|
192
|
+
if (settings.hooks.UserPromptSubmit) {
|
|
193
|
+
settings.hooks.UserPromptSubmit = settings.hooks.UserPromptSubmit.filter((h) => !h.hooks?.some((hook) => hook.command?.includes('brainfile hooks')));
|
|
194
|
+
}
|
|
195
|
+
if (settings.hooks.SessionStart) {
|
|
196
|
+
settings.hooks.SessionStart = settings.hooks.SessionStart.filter((h) => !h.hooks?.some((hook) => hook.command?.includes('brainfile hooks')));
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
else if (tool === 'cursor') {
|
|
200
|
+
// Remove brainfile hooks from each event type
|
|
201
|
+
if (settings.hooks.afterFileEdit) {
|
|
202
|
+
settings.hooks.afterFileEdit = settings.hooks.afterFileEdit.filter((h) => !h.command?.includes('brainfile hooks'));
|
|
203
|
+
}
|
|
204
|
+
if (settings.hooks.beforeSubmitPrompt) {
|
|
205
|
+
settings.hooks.beforeSubmitPrompt = settings.hooks.beforeSubmitPrompt.filter((h) => !h.command?.includes('brainfile hooks'));
|
|
206
|
+
}
|
|
207
|
+
if (settings.hooks.stop) {
|
|
208
|
+
settings.hooks.stop = settings.hooks.stop.filter((h) => !h.command?.includes('brainfile hooks'));
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
writeToolSettings(tool, scope, settings);
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Check if brainfile hooks are installed for a tool
|
|
215
|
+
*/
|
|
216
|
+
function areBrainfileHooksInstalled(tool, scope) {
|
|
217
|
+
const settingsPath = getSettingsPath(tool, scope);
|
|
218
|
+
if (!fs.existsSync(settingsPath)) {
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
const settings = readToolSettings(tool, scope);
|
|
222
|
+
if (!settings.hooks) {
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
if (tool === 'claude-code') {
|
|
226
|
+
const hasPostToolUse = settings.hooks.PostToolUse?.some((h) => h.hooks?.some((hook) => hook.command?.includes('brainfile hooks after-edit'))) || false;
|
|
227
|
+
const hasUserPromptSubmit = settings.hooks.UserPromptSubmit?.some((h) => h.hooks?.some((hook) => hook.command?.includes('brainfile hooks before-prompt'))) || false;
|
|
228
|
+
const hasSessionStart = settings.hooks.SessionStart?.some((h) => h.hooks?.some((hook) => hook.command?.includes('brainfile hooks session-start'))) || false;
|
|
229
|
+
return hasPostToolUse || hasUserPromptSubmit || hasSessionStart;
|
|
230
|
+
}
|
|
231
|
+
else if (tool === 'cursor') {
|
|
232
|
+
const hasAfterFileEdit = settings.hooks.afterFileEdit?.some((h) => h.command?.includes('brainfile hooks after-edit')) || false;
|
|
233
|
+
const hasBeforeSubmitPrompt = settings.hooks.beforeSubmitPrompt?.some((h) => h.command?.includes('brainfile hooks before-prompt')) || false;
|
|
234
|
+
const hasStop = settings.hooks.stop?.some((h) => h.command?.includes('brainfile hooks session-start')) || false;
|
|
235
|
+
return hasAfterFileEdit || hasBeforeSubmitPrompt || hasStop;
|
|
236
|
+
}
|
|
237
|
+
return false;
|
|
238
|
+
}
|
|
239
|
+
//# sourceMappingURL=hook-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-settings.js","sourceRoot":"","sources":["../../src/utils/hook-settings.ts"],"names":[],"mappings":"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"}
|