@ironbee-ai/cli 0.1.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/CHANGELOG.md +5 -0
- package/LICENSE +21 -0
- package/README.md +159 -0
- package/dist/assets/banner.txt +6 -0
- package/dist/assets/icon.svg +59 -0
- package/dist/clients/base.d.ts +20 -0
- package/dist/clients/base.d.ts.map +1 -0
- package/dist/clients/base.js +3 -0
- package/dist/clients/base.js.map +1 -0
- package/dist/clients/claude/hooks/clear-verdict.d.ts +11 -0
- package/dist/clients/claude/hooks/clear-verdict.d.ts.map +1 -0
- package/dist/clients/claude/hooks/clear-verdict.js +58 -0
- package/dist/clients/claude/hooks/clear-verdict.js.map +1 -0
- package/dist/clients/claude/hooks/session-start.d.ts +9 -0
- package/dist/clients/claude/hooks/session-start.d.ts.map +1 -0
- package/dist/clients/claude/hooks/session-start.js +72 -0
- package/dist/clients/claude/hooks/session-start.js.map +1 -0
- package/dist/clients/claude/hooks/track-action.d.ts +11 -0
- package/dist/clients/claude/hooks/track-action.d.ts.map +1 -0
- package/dist/clients/claude/hooks/track-action.js +73 -0
- package/dist/clients/claude/hooks/track-action.js.map +1 -0
- package/dist/clients/claude/hooks/verify-gate.d.ts +11 -0
- package/dist/clients/claude/hooks/verify-gate.d.ts.map +1 -0
- package/dist/clients/claude/hooks/verify-gate.js +48 -0
- package/dist/clients/claude/hooks/verify-gate.js.map +1 -0
- package/dist/clients/claude/index.d.ts +22 -0
- package/dist/clients/claude/index.d.ts.map +1 -0
- package/dist/clients/claude/index.js +270 -0
- package/dist/clients/claude/index.js.map +1 -0
- package/dist/clients/claude/rule.md +35 -0
- package/dist/clients/claude/skill.md +63 -0
- package/dist/clients/registry.d.ts +6 -0
- package/dist/clients/registry.d.ts.map +1 -0
- package/dist/clients/registry.js +20 -0
- package/dist/clients/registry.js.map +1 -0
- package/dist/commands/hook.d.ts +3 -0
- package/dist/commands/hook.d.ts.map +1 -0
- package/dist/commands/hook.js +57 -0
- package/dist/commands/hook.js.map +1 -0
- package/dist/commands/install.d.ts +3 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +69 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +71 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/uninstall.d.ts +3 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +54 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.d.ts +3 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +38 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/verify.d.ts +3 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +150 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/hooks/core/actions.d.ts +35 -0
- package/dist/hooks/core/actions.d.ts.map +1 -0
- package/dist/hooks/core/actions.js +61 -0
- package/dist/hooks/core/actions.js.map +1 -0
- package/dist/hooks/core/clear-verdict.d.ts +12 -0
- package/dist/hooks/core/clear-verdict.d.ts.map +1 -0
- package/dist/hooks/core/clear-verdict.js +25 -0
- package/dist/hooks/core/clear-verdict.js.map +1 -0
- package/dist/hooks/core/verify-gate.d.ts +20 -0
- package/dist/hooks/core/verify-gate.d.ts.map +1 -0
- package/dist/hooks/core/verify-gate.js +222 -0
- package/dist/hooks/core/verify-gate.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/config.d.ts +44 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +135 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/icon.d.ts +2 -0
- package/dist/lib/icon.d.ts.map +1 -0
- package/dist/lib/icon.js +14 -0
- package/dist/lib/icon.js.map +1 -0
- package/dist/lib/logger.d.ts +7 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +70 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/output.d.ts +21 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +45 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/stdin.d.ts +6 -0
- package/dist/lib/stdin.d.ts.map +1 -0
- package/dist/lib/stdin.js +18 -0
- package/dist/lib/stdin.js.map +1 -0
- package/dist/lib/version.d.ts +10 -0
- package/dist/lib/version.d.ts.map +1 -0
- package/dist/lib/version.js +81 -0
- package/dist/lib/version.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* IronBee Stop Hook — Core Verification Logic
|
|
4
|
+
*
|
|
5
|
+
* Pure logic — no stdin reading, no process.exit, no client-specific code.
|
|
6
|
+
* Returns a VerifyGateResult that the client adapter translates
|
|
7
|
+
* into the appropriate exit code / output mechanism.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.runVerifyGate = runVerifyGate;
|
|
11
|
+
const fs_1 = require("fs");
|
|
12
|
+
const path_1 = require("path");
|
|
13
|
+
const logger_1 = require("../../lib/logger");
|
|
14
|
+
const actions_1 = require("./actions");
|
|
15
|
+
const DEFAULT_MAX_RETRIES = 3;
|
|
16
|
+
const VERDICT_EXAMPLE_PASS = JSON.stringify({
|
|
17
|
+
status: "pass",
|
|
18
|
+
pages_tested: ["http://localhost:3000/affected-page"],
|
|
19
|
+
checks: ["form submits successfully", "new item appears in list", "no console errors"],
|
|
20
|
+
console_errors: 0,
|
|
21
|
+
network_failures: 0,
|
|
22
|
+
});
|
|
23
|
+
const VERDICT_EXAMPLE_FAIL = JSON.stringify({
|
|
24
|
+
status: "fail",
|
|
25
|
+
pages_tested: ["http://localhost:3000/affected-page"],
|
|
26
|
+
checks: ["form renders", "submit button unresponsive"],
|
|
27
|
+
console_errors: 2,
|
|
28
|
+
network_failures: 0,
|
|
29
|
+
errors: ["button click handler not firing", "TypeError in console"],
|
|
30
|
+
});
|
|
31
|
+
const MCP_SERVER = "browser-devtools";
|
|
32
|
+
const REQUIRED_TOOLS = [
|
|
33
|
+
{ toolName: `mcp__${MCP_SERVER}__navigation_go-to`, name: `mcp__${MCP_SERVER}__navigation_go-to`, purpose: "navigate to a page" },
|
|
34
|
+
{ toolName: `mcp__${MCP_SERVER}__content_take-screenshot`, name: `mcp__${MCP_SERVER}__content_take-screenshot`, purpose: "take a screenshot" },
|
|
35
|
+
{ toolName: `mcp__${MCP_SERVER}__a11y_take-aria-snapshot`, name: `mcp__${MCP_SERVER}__a11y_take-aria-snapshot`, purpose: "check accessibility/page structure" },
|
|
36
|
+
{ toolName: `mcp__${MCP_SERVER}__o11y_get-console-messages`, name: `mcp__${MCP_SERVER}__o11y_get-console-messages`, purpose: "check console for errors" },
|
|
37
|
+
];
|
|
38
|
+
function cleanup(...files) {
|
|
39
|
+
for (const f of files) {
|
|
40
|
+
try {
|
|
41
|
+
if ((0, fs_1.existsSync)(f)) {
|
|
42
|
+
(0, fs_1.unlinkSync)(f);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
logger_1.logger.debug(`failed to cleanup ${f}: ${e}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function runVerifyGate(input) {
|
|
51
|
+
const { sessionId: sid, actionsFile, verdictFile, retryFile, maxRetries: inputMaxRetries } = input;
|
|
52
|
+
const maxRetries = inputMaxRetries ?? DEFAULT_MAX_RETRIES;
|
|
53
|
+
logger_1.logger.debug(`verify-gate: session=${sid} verdictExists=${(0, fs_1.existsSync)(verdictFile)}`);
|
|
54
|
+
// ── Check 1: Were code files edited? ───────────────────
|
|
55
|
+
const hasEdit = (0, actions_1.hasFileEditsSinceLastVerification)(actionsFile);
|
|
56
|
+
if (!hasEdit) {
|
|
57
|
+
logger_1.logger.debug("no code edits detected, allowing completion");
|
|
58
|
+
return { action: "allow" };
|
|
59
|
+
}
|
|
60
|
+
// ── Check 2: Were required IronBee tools used? ─────────
|
|
61
|
+
const toolCalls = (0, actions_1.getToolCallsSinceLastVerification)(actionsFile);
|
|
62
|
+
const usedToolNames = new Set(toolCalls.map((t) => t.tool_name));
|
|
63
|
+
const missingTools = REQUIRED_TOOLS.filter((t) => !usedToolNames.has(t.toolName));
|
|
64
|
+
logger_1.logger.debug(`verify-gate: missingTools=${missingTools.length}/${REQUIRED_TOOLS.length} usedTools=${[...usedToolNames].join(",")}`);
|
|
65
|
+
// Write verification_requested marker for this check
|
|
66
|
+
const marker = {
|
|
67
|
+
type: "verification_requested",
|
|
68
|
+
timestamp: new Date().toISOString(),
|
|
69
|
+
};
|
|
70
|
+
(0, actions_1.appendAction)(actionsFile, marker);
|
|
71
|
+
if (missingTools.length === REQUIRED_TOOLS.length) {
|
|
72
|
+
return {
|
|
73
|
+
action: "block",
|
|
74
|
+
message: `VERIFICATION REQUIRED.
|
|
75
|
+
|
|
76
|
+
You made code changes but did not verify them through the browser.
|
|
77
|
+
|
|
78
|
+
1. Build and start the application if not already running
|
|
79
|
+
2. Navigate to the affected page(s)
|
|
80
|
+
3. Functionally test your changes — click, type, submit, interact with the UI to confirm the code works
|
|
81
|
+
4. Take a screenshot to capture the final state
|
|
82
|
+
5. Take an accessibility snapshot to verify page structure
|
|
83
|
+
6. Check console for errors
|
|
84
|
+
7. Stop the dev server when done
|
|
85
|
+
8. Use the Write tool to write your verdict to .ironbee/sessions/${sid}/verdict.json
|
|
86
|
+
On pass: ${VERDICT_EXAMPLE_PASS}
|
|
87
|
+
On fail: ${VERDICT_EXAMPLE_FAIL}
|
|
88
|
+
9. If failed, fix the code and re-verify until it passes`,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
if (missingTools.length > 0) {
|
|
92
|
+
const missing = missingTools.map((t) => ` - ${t.name} (${t.purpose})`).join("\n");
|
|
93
|
+
return {
|
|
94
|
+
action: "block",
|
|
95
|
+
message: `INCOMPLETE VERIFICATION.
|
|
96
|
+
|
|
97
|
+
You used the IronBee browser agent but skipped required checks:
|
|
98
|
+
${missing}
|
|
99
|
+
|
|
100
|
+
Run the missing tools, functionally test your changes, then update your verdict:
|
|
101
|
+
.ironbee/sessions/${sid}/verdict.json`,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
// ── Check 3: Verdict file exists? ──────────────────────
|
|
105
|
+
if (!(0, fs_1.existsSync)(verdictFile)) {
|
|
106
|
+
return {
|
|
107
|
+
action: "block",
|
|
108
|
+
message: `VERDICT MISSING.
|
|
109
|
+
|
|
110
|
+
You used the IronBee browser agent but did not write a verdict.
|
|
111
|
+
Use the Write tool to write your verdict to .ironbee/sessions/${sid}/verdict.json
|
|
112
|
+
On pass: ${VERDICT_EXAMPLE_PASS}
|
|
113
|
+
On fail: ${VERDICT_EXAMPLE_FAIL}`,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
// ── Check 4: Valid JSON? ────────────────────────────────
|
|
117
|
+
let verdict;
|
|
118
|
+
try {
|
|
119
|
+
verdict = JSON.parse((0, fs_1.readFileSync)(verdictFile, "utf-8"));
|
|
120
|
+
}
|
|
121
|
+
catch (e) {
|
|
122
|
+
logger_1.logger.debug(`failed to parse verdict ${verdictFile}: ${e}`);
|
|
123
|
+
cleanup(verdictFile);
|
|
124
|
+
return {
|
|
125
|
+
action: "block",
|
|
126
|
+
message: `INVALID VERDICT. Use the Write tool to write valid JSON to .ironbee/sessions/${sid}/verdict.json
|
|
127
|
+
On pass: ${VERDICT_EXAMPLE_PASS}
|
|
128
|
+
On fail: ${VERDICT_EXAMPLE_FAIL}`,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
// ── Check 5: Evidence present? ─────────────────────────
|
|
132
|
+
const pages = verdict.pages_tested;
|
|
133
|
+
const checks = verdict.checks;
|
|
134
|
+
if (!Array.isArray(pages) || pages.length === 0) {
|
|
135
|
+
cleanup(verdictFile);
|
|
136
|
+
return {
|
|
137
|
+
action: "block",
|
|
138
|
+
message: `VERDICT REJECTED: missing pages_tested.
|
|
139
|
+
|
|
140
|
+
Your verdict must include which pages you tested.
|
|
141
|
+
Use the Write tool to write to .ironbee/sessions/${sid}/verdict.json
|
|
142
|
+
Example: ${VERDICT_EXAMPLE_PASS}`,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
if (!Array.isArray(checks) || checks.length === 0) {
|
|
146
|
+
cleanup(verdictFile);
|
|
147
|
+
return {
|
|
148
|
+
action: "block",
|
|
149
|
+
message: `VERDICT REJECTED: missing checks.
|
|
150
|
+
|
|
151
|
+
Your verdict must describe what you functionally tested.
|
|
152
|
+
Use the Write tool to write to .ironbee/sessions/${sid}/verdict.json
|
|
153
|
+
Example: ${VERDICT_EXAMPLE_PASS}`,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
if (typeof verdict.console_errors !== "number" || typeof verdict.network_failures !== "number") {
|
|
157
|
+
cleanup(verdictFile);
|
|
158
|
+
return {
|
|
159
|
+
action: "block",
|
|
160
|
+
message: `VERDICT REJECTED: missing console_errors or network_failures count.
|
|
161
|
+
|
|
162
|
+
Your verdict must include error counts.
|
|
163
|
+
Use the Write tool to write to .ironbee/sessions/${sid}/verdict.json
|
|
164
|
+
Example: ${VERDICT_EXAMPLE_PASS}`,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
// ── Check 6: Pass or fail? ─────────────────────────────
|
|
168
|
+
if (verdict.status === "pass") {
|
|
169
|
+
logger_1.logger.debug("verdict passed, allowing completion");
|
|
170
|
+
cleanup(retryFile);
|
|
171
|
+
return { action: "allow" };
|
|
172
|
+
}
|
|
173
|
+
if (verdict.status === "fail") {
|
|
174
|
+
let retries = 0;
|
|
175
|
+
try {
|
|
176
|
+
retries = parseInt((0, fs_1.readFileSync)(retryFile, "utf-8"), 10) || 0;
|
|
177
|
+
}
|
|
178
|
+
catch (e) {
|
|
179
|
+
logger_1.logger.debug(`failed to read retry file ${retryFile}: ${e}`);
|
|
180
|
+
}
|
|
181
|
+
retries++;
|
|
182
|
+
(0, fs_1.mkdirSync)((0, path_1.dirname)(retryFile), { recursive: true });
|
|
183
|
+
(0, fs_1.writeFileSync)(retryFile, String(retries));
|
|
184
|
+
const errors = (verdict.errors ?? ["unknown"]).join("\n - ");
|
|
185
|
+
if (retries >= maxRetries) {
|
|
186
|
+
cleanup(verdictFile, retryFile);
|
|
187
|
+
return {
|
|
188
|
+
action: "allow",
|
|
189
|
+
message: `VERIFICATION FAILED ${maxRetries} TIMES. Allowing completion.
|
|
190
|
+
|
|
191
|
+
Unresolved issues:
|
|
192
|
+
- ${errors}
|
|
193
|
+
|
|
194
|
+
Report these issues in your final response.`,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
cleanup(verdictFile);
|
|
198
|
+
return {
|
|
199
|
+
action: "block",
|
|
200
|
+
message: `VERIFICATION FAILED (attempt ${retries}/${maxRetries}).
|
|
201
|
+
|
|
202
|
+
Issues found:
|
|
203
|
+
- ${errors}
|
|
204
|
+
|
|
205
|
+
Fix the issues, rebuild if needed, re-test functionally through the browser, and re-verify.
|
|
206
|
+
Write verdict to: .ironbee/sessions/${sid}/verdict.json
|
|
207
|
+
|
|
208
|
+
Required verdict format:
|
|
209
|
+
${VERDICT_EXAMPLE_FAIL}`,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
// ── Unknown status ─────────────────────────────────────
|
|
213
|
+
cleanup(verdictFile);
|
|
214
|
+
return {
|
|
215
|
+
action: "block",
|
|
216
|
+
message: `INVALID VERDICT STATUS: "${verdict.status}". Status must be "pass" or "fail".
|
|
217
|
+
Use the Write tool to write to .ironbee/sessions/${sid}/verdict.json
|
|
218
|
+
On pass: ${VERDICT_EXAMPLE_PASS}
|
|
219
|
+
On fail: ${VERDICT_EXAMPLE_FAIL}`,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=verify-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-gate.js","sourceRoot":"","sources":["../../../src/hooks/core/verify-gate.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
const path_1 = require("path");
|
|
7
|
+
const install_1 = require("./commands/install");
|
|
8
|
+
const uninstall_1 = require("./commands/uninstall");
|
|
9
|
+
const update_1 = require("./commands/update");
|
|
10
|
+
const hook_1 = require("./commands/hook");
|
|
11
|
+
const status_1 = require("./commands/status");
|
|
12
|
+
const verify_1 = require("./commands/verify");
|
|
13
|
+
const icon_1 = require("./lib/icon");
|
|
14
|
+
const version_1 = require("./lib/version");
|
|
15
|
+
const output_1 = require("./lib/output");
|
|
16
|
+
const pkg = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(__dirname, "../package.json"), "utf-8"));
|
|
17
|
+
const program = new commander_1.Command();
|
|
18
|
+
program
|
|
19
|
+
.name("ironbee")
|
|
20
|
+
.description(pkg.description)
|
|
21
|
+
.version(pkg.version);
|
|
22
|
+
program.addCommand(install_1.installCommand);
|
|
23
|
+
program.addCommand(uninstall_1.uninstallCommand);
|
|
24
|
+
program.addCommand(update_1.updateCommand);
|
|
25
|
+
program.addCommand(status_1.statusCommand);
|
|
26
|
+
program.addCommand(verify_1.verifyCommand);
|
|
27
|
+
program.addCommand(hook_1.hookCommand);
|
|
28
|
+
// hook subcommands run in the background — skip banner and update check
|
|
29
|
+
const isHookCommand = process.argv[2] === "hook";
|
|
30
|
+
if (process.argv.length === 2) {
|
|
31
|
+
(0, icon_1.printBanner)();
|
|
32
|
+
console.log();
|
|
33
|
+
console.log(` ${output_1.pc.bold("IronBee CLI")} ${output_1.pc.dim(`v${(0, version_1.getLocalVersion)()}`)}`);
|
|
34
|
+
console.log(` ${output_1.pc.dim(pkg.description)}`);
|
|
35
|
+
console.log();
|
|
36
|
+
console.log(` ${output_1.pc.bold(output_1.pc.cyan("Usage:"))} ${output_1.pc.green("ironbee")} ${output_1.pc.dim("<command> [options]")}`);
|
|
37
|
+
console.log();
|
|
38
|
+
console.log(` ${output_1.pc.bold(output_1.pc.cyan("Commands:"))}`);
|
|
39
|
+
console.log(` ${output_1.pc.green("install")} ${output_1.pc.dim("[project-dir]")} Install hooks and guidance files`);
|
|
40
|
+
console.log(` ${output_1.pc.green("uninstall")} ${output_1.pc.dim("[project-dir]")} Remove hooks, guidance files, and .ironbee/`);
|
|
41
|
+
console.log(` ${output_1.pc.green("update")} Update to the latest version`);
|
|
42
|
+
console.log(` ${output_1.pc.green("status")} ${output_1.pc.dim("[project-dir]")} Show verification status for sessions`);
|
|
43
|
+
console.log(` ${output_1.pc.green("verify")} ${output_1.pc.dim("[session-id]")} Dry-run verdict validation`);
|
|
44
|
+
console.log();
|
|
45
|
+
console.log(` ${output_1.pc.dim("Run")} ${output_1.pc.cyan("ironbee <command> --help")} ${output_1.pc.dim("for more info on a command.")}`);
|
|
46
|
+
console.log();
|
|
47
|
+
}
|
|
48
|
+
else if (isHookCommand) {
|
|
49
|
+
program.parse(process.argv);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
program.parse(process.argv);
|
|
53
|
+
// non-blocking update check after command completes
|
|
54
|
+
(0, version_1.checkForUpdates)().catch(() => { });
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IronBee — Configuration Loader
|
|
3
|
+
*
|
|
4
|
+
* Loads config from two sources and merges them:
|
|
5
|
+
* 1. Global: ~/.ironbee/config.json
|
|
6
|
+
* 2. Project: <projectDir>/.ironbee/config.json
|
|
7
|
+
*
|
|
8
|
+
* Project config overrides global config (shallow merge per key).
|
|
9
|
+
*/
|
|
10
|
+
export interface IronBeeConfig {
|
|
11
|
+
/**
|
|
12
|
+
* Glob patterns for files that require browser verification after editing.
|
|
13
|
+
* Replaces the default list entirely when set.
|
|
14
|
+
* Examples: "*.ts", "*.css", "src/components/**\/*.tsx"
|
|
15
|
+
*/
|
|
16
|
+
verifyPatterns?: string[];
|
|
17
|
+
/**
|
|
18
|
+
* Additional glob patterns appended to verifyPatterns (or the defaults).
|
|
19
|
+
* Use this to extend the default list without replacing it.
|
|
20
|
+
*/
|
|
21
|
+
additionalVerifyPatterns?: string[];
|
|
22
|
+
/**
|
|
23
|
+
* Glob patterns for files to exclude from verification.
|
|
24
|
+
* Checked before verifyPatterns — if a file matches here, it is always skipped.
|
|
25
|
+
* Examples: "*.test.ts", "docs/**", "*.config.js"
|
|
26
|
+
*/
|
|
27
|
+
ignoredVerifyPatterns?: string[];
|
|
28
|
+
/** Maximum retry attempts before allowing completion despite failures. */
|
|
29
|
+
maxRetries?: number;
|
|
30
|
+
/** Allow additional config fields. */
|
|
31
|
+
[key: string]: unknown;
|
|
32
|
+
}
|
|
33
|
+
export declare function loadConfig(projectDir?: string): IronBeeConfig;
|
|
34
|
+
/**
|
|
35
|
+
* Determines whether a file requires browser verification.
|
|
36
|
+
*
|
|
37
|
+
* Check order:
|
|
38
|
+
* 1. ignoredVerifyPatterns → if matched, skip (return false)
|
|
39
|
+
* 2. verifyPatterns (+ additionalVerifyPatterns) → if matched, verify (return true)
|
|
40
|
+
* 3. No match → skip (return false)
|
|
41
|
+
*/
|
|
42
|
+
export declare function requiresVerification(filePath: string, config: IronBeeConfig): boolean;
|
|
43
|
+
export declare function getMaxRetries(config: IronBeeConfig): number;
|
|
44
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,MAAM,WAAW,aAAa;IAC1B;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAE1B;;;OAGG;IACH,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;IAEpC;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IAEjC,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,sCAAsC;IACtC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AA6CD,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa,CAiB7D;AAyCD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAarF;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAI3D"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* IronBee — Configuration Loader
|
|
4
|
+
*
|
|
5
|
+
* Loads config from two sources and merges them:
|
|
6
|
+
* 1. Global: ~/.ironbee/config.json
|
|
7
|
+
* 2. Project: <projectDir>/.ironbee/config.json
|
|
8
|
+
*
|
|
9
|
+
* Project config overrides global config (shallow merge per key).
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.loadConfig = loadConfig;
|
|
13
|
+
exports.requiresVerification = requiresVerification;
|
|
14
|
+
exports.getMaxRetries = getMaxRetries;
|
|
15
|
+
const fs_1 = require("fs");
|
|
16
|
+
const path_1 = require("path");
|
|
17
|
+
const os_1 = require("os");
|
|
18
|
+
const logger_1 = require("./logger");
|
|
19
|
+
const DEFAULT_VERIFY_PATTERNS = [
|
|
20
|
+
"*.ts", "*.tsx",
|
|
21
|
+
"*.js", "*.jsx", "*.mjs", "*.cjs",
|
|
22
|
+
"*.vue", "*.svelte",
|
|
23
|
+
"*.html", "*.htm",
|
|
24
|
+
"*.css", "*.scss", "*.sass", "*.less", "*.styl",
|
|
25
|
+
"*.py",
|
|
26
|
+
"*.rb", "*.erb",
|
|
27
|
+
"*.go",
|
|
28
|
+
"*.rs",
|
|
29
|
+
"*.java", "*.kt", "*.kts",
|
|
30
|
+
"*.swift",
|
|
31
|
+
"*.c", "*.cpp", "*.h", "*.hpp",
|
|
32
|
+
"*.cs",
|
|
33
|
+
"*.php",
|
|
34
|
+
"*.dart",
|
|
35
|
+
"*.ex", "*.exs",
|
|
36
|
+
"*.erl",
|
|
37
|
+
"*.lua",
|
|
38
|
+
"*.r", "*.R",
|
|
39
|
+
"*.scala",
|
|
40
|
+
"*.clj", "*.cljs",
|
|
41
|
+
"*.zig",
|
|
42
|
+
"*.nim",
|
|
43
|
+
"*.hbs", "*.ejs", "*.pug", "*.jade",
|
|
44
|
+
"*.astro",
|
|
45
|
+
];
|
|
46
|
+
const DEFAULT_MAX_RETRIES = 3;
|
|
47
|
+
function loadJsonFile(filePath) {
|
|
48
|
+
if (!(0, fs_1.existsSync)(filePath)) {
|
|
49
|
+
return {};
|
|
50
|
+
}
|
|
51
|
+
try {
|
|
52
|
+
return JSON.parse((0, fs_1.readFileSync)(filePath, "utf-8"));
|
|
53
|
+
}
|
|
54
|
+
catch (e) {
|
|
55
|
+
logger_1.logger.debug(`failed to parse config ${filePath}: ${e}`);
|
|
56
|
+
return {};
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function loadConfig(projectDir) {
|
|
60
|
+
const globalPath = (0, path_1.join)((0, os_1.homedir)(), ".ironbee", "config.json");
|
|
61
|
+
const globalConfig = loadJsonFile(globalPath);
|
|
62
|
+
let projectConfig = {};
|
|
63
|
+
if (projectDir) {
|
|
64
|
+
const projectPath = (0, path_1.join)(projectDir, ".ironbee", "config.json");
|
|
65
|
+
projectConfig = loadJsonFile(projectPath);
|
|
66
|
+
}
|
|
67
|
+
// merge: defaults < global < project
|
|
68
|
+
const merged = {
|
|
69
|
+
...globalConfig,
|
|
70
|
+
...projectConfig,
|
|
71
|
+
};
|
|
72
|
+
return merged;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Converts a glob pattern to a RegExp.
|
|
76
|
+
* Supports: *, **, ?
|
|
77
|
+
* Examples:
|
|
78
|
+
* "*.ts" → matches "foo.ts"
|
|
79
|
+
* "src/components/**" → matches "src/components/Button/index.tsx"
|
|
80
|
+
* "*.test.*" → matches "foo.test.ts"
|
|
81
|
+
*/
|
|
82
|
+
function globToRegExp(pattern) {
|
|
83
|
+
let regexStr = pattern
|
|
84
|
+
.replace(/[.+^${}()|[\]\\]/g, "\\$&") // escape regex special chars (except * and ?)
|
|
85
|
+
.replace(/\*\*/g, "{{GLOBSTAR}}") // placeholder for **
|
|
86
|
+
.replace(/\*/g, "[^/]*") // * = anything except /
|
|
87
|
+
.replace(/\?/g, "[^/]") // ? = single char except /
|
|
88
|
+
.replace(/\{\{GLOBSTAR\}\}/g, ".*"); // ** = anything including /
|
|
89
|
+
// if pattern has no path separators, match against basename only
|
|
90
|
+
if (!pattern.includes("/")) {
|
|
91
|
+
regexStr = `(^|/)${regexStr}$`;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
regexStr = `(^|/)${regexStr}$`;
|
|
95
|
+
}
|
|
96
|
+
return new RegExp(regexStr);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Tests if a file path matches any of the given glob patterns.
|
|
100
|
+
*/
|
|
101
|
+
function matchesAny(filePath, patterns) {
|
|
102
|
+
for (const pattern of patterns) {
|
|
103
|
+
const regex = globToRegExp(pattern);
|
|
104
|
+
if (regex.test(filePath)) {
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Determines whether a file requires browser verification.
|
|
112
|
+
*
|
|
113
|
+
* Check order:
|
|
114
|
+
* 1. ignoredVerifyPatterns → if matched, skip (return false)
|
|
115
|
+
* 2. verifyPatterns (+ additionalVerifyPatterns) → if matched, verify (return true)
|
|
116
|
+
* 3. No match → skip (return false)
|
|
117
|
+
*/
|
|
118
|
+
function requiresVerification(filePath, config) {
|
|
119
|
+
// 1. check ignored patterns first
|
|
120
|
+
const ignored = config.ignoredVerifyPatterns ?? [];
|
|
121
|
+
if (ignored.length > 0 && matchesAny(filePath, ignored)) {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
// 2. build verify patterns: base + additional
|
|
125
|
+
const base = config.verifyPatterns ?? DEFAULT_VERIFY_PATTERNS;
|
|
126
|
+
const additional = config.additionalVerifyPatterns ?? [];
|
|
127
|
+
const patterns = [...base, ...additional];
|
|
128
|
+
return matchesAny(filePath, patterns);
|
|
129
|
+
}
|
|
130
|
+
function getMaxRetries(config) {
|
|
131
|
+
return (typeof config.maxRetries === "number" && config.maxRetries > 0)
|
|
132
|
+
? config.maxRetries
|
|
133
|
+
: DEFAULT_MAX_RETRIES;
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;AA8EH,gCAiBC;AAiDD,oDAaC;AAED,sCAIC;AAjKD,2BAA8C;AAC9C,+BAA4B;AAC5B,2BAA6B;AAC7B,qCAAkC;AA8BlC,MAAM,uBAAuB,GAAa;IACtC,MAAM,EAAE,OAAO;IACf,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO;IACjC,OAAO,EAAE,UAAU;IACnB,QAAQ,EAAE,OAAO;IACjB,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC/C,MAAM;IACN,MAAM,EAAE,OAAO;IACf,MAAM;IACN,MAAM;IACN,QAAQ,EAAE,MAAM,EAAE,OAAO;IACzB,SAAS;IACT,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;IAC9B,MAAM;IACN,OAAO;IACP,QAAQ;IACR,MAAM,EAAE,OAAO;IACf,OAAO;IACP,OAAO;IACP,KAAK,EAAE,KAAK;IACZ,SAAS;IACT,OAAO,EAAE,QAAQ;IACjB,OAAO;IACP,OAAO;IACP,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ;IACnC,SAAS;CACZ,CAAC;AAEF,MAAM,mBAAmB,GAAW,CAAC,CAAC;AAEtC,SAAS,YAAY,CAAC,QAAgB;IAClC,IAAI,CAAC,IAAA,eAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAkB,CAAC;IACxE,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAClB,eAAM,CAAC,KAAK,CAAC,0BAA0B,QAAQ,KAAK,CAAC,EAAE,CAAC,CAAC;QACzD,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC;AAED,SAAgB,UAAU,CAAC,UAAmB;IAC1C,MAAM,UAAU,GAAW,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;IACtE,MAAM,YAAY,GAAkB,YAAY,CAAC,UAAU,CAAC,CAAC;IAE7D,IAAI,aAAa,GAAkB,EAAE,CAAC;IACtC,IAAI,UAAU,EAAE,CAAC;QACb,MAAM,WAAW,GAAW,IAAA,WAAI,EAAC,UAAU,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;QACxE,aAAa,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IAC9C,CAAC;IAED,qCAAqC;IACrC,MAAM,MAAM,GAAkB;QAC1B,GAAG,YAAY;QACf,GAAG,aAAa;KACnB,CAAC;IAEF,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,YAAY,CAAC,OAAe;IACjC,IAAI,QAAQ,GAAW,OAAO;SACzB,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAE,8CAA8C;SACpF,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,CAAQ,qBAAqB;SAC7D,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAiB,wBAAwB;SAChE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAkB,2BAA2B;SACnE,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC,CAAK,4BAA4B;IAEzE,iEAAiE;IACjE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,QAAQ,GAAG,QAAQ,QAAQ,GAAG,CAAC;IACnC,CAAC;SAAM,CAAC;QACJ,QAAQ,GAAG,QAAQ,QAAQ,GAAG,CAAC;IACnC,CAAC;IAED,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,QAAgB,EAAE,QAAkB;IACpD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAW,YAAY,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,oBAAoB,CAAC,QAAgB,EAAE,MAAqB;IACxE,kCAAkC;IAClC,MAAM,OAAO,GAAa,MAAM,CAAC,qBAAqB,IAAI,EAAE,CAAC;IAC7D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;QACtD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,8CAA8C;IAC9C,MAAM,IAAI,GAAa,MAAM,CAAC,cAAc,IAAI,uBAAuB,CAAC;IACxE,MAAM,UAAU,GAAa,MAAM,CAAC,wBAAwB,IAAI,EAAE,CAAC;IACnE,MAAM,QAAQ,GAAa,CAAC,GAAG,IAAI,EAAE,GAAG,UAAU,CAAC,CAAC;IAEpD,OAAO,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC1C,CAAC;AAED,SAAgB,aAAa,CAAC,MAAqB;IAC/C,OAAO,CAAC,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC;QACnE,CAAC,CAAC,MAAM,CAAC,UAAU;QACnB,CAAC,CAAC,mBAAmB,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icon.d.ts","sourceRoot":"","sources":["../../src/lib/icon.ts"],"names":[],"mappings":"AAGA,wBAAgB,WAAW,IAAI,IAAI,CAQlC"}
|
package/dist/lib/icon.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.printBanner = printBanner;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
function printBanner() {
|
|
7
|
+
const txtPath = (0, path_1.join)(__dirname, "../../assets/banner.txt");
|
|
8
|
+
if (!(0, fs_1.existsSync)(txtPath)) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
process.stdout.write((0, fs_1.readFileSync)(txtPath, "utf-8"));
|
|
12
|
+
process.stdout.write("\n");
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=icon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icon.js","sourceRoot":"","sources":["../../src/lib/icon.ts"],"names":[],"mappings":";;AAGA,kCAQC;AAXD,+BAA4B;AAC5B,2BAA8C;AAE9C,SAAgB,WAAW;IACvB,MAAM,OAAO,GAAW,IAAA,WAAI,EAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;IACnE,IAAI,CAAC,IAAA,eAAU,EAAC,OAAO,CAAC,EAAE,CAAC;QACvB,OAAO;IACX,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
type LogLevel = "debug" | "info" | "warn" | "error";
|
|
2
|
+
export declare function setLogLevel(level: LogLevel): void;
|
|
3
|
+
export declare function getLogLevel(): LogLevel;
|
|
4
|
+
export declare function setLogFile(filePath: string): void;
|
|
5
|
+
export declare const logger: Record<LogLevel, (msg: string) => void>;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"AAGA,KAAK,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAoBpD,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAEjD;AAED,wBAAgB,WAAW,IAAI,QAAQ,CAEtC;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAGjD;AAmCD,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAK1D,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.logger = void 0;
|
|
4
|
+
exports.setLogLevel = setLogLevel;
|
|
5
|
+
exports.getLogLevel = getLogLevel;
|
|
6
|
+
exports.setLogFile = setLogFile;
|
|
7
|
+
const fs_1 = require("fs");
|
|
8
|
+
const path_1 = require("path");
|
|
9
|
+
const LOG_LEVELS = {
|
|
10
|
+
debug: 0,
|
|
11
|
+
info: 1,
|
|
12
|
+
warn: 2,
|
|
13
|
+
error: 3,
|
|
14
|
+
};
|
|
15
|
+
function resolveLevel() {
|
|
16
|
+
const env = process.env.IRONBEE_LOG_LEVEL?.toLowerCase();
|
|
17
|
+
if (env && env in LOG_LEVELS) {
|
|
18
|
+
return env;
|
|
19
|
+
}
|
|
20
|
+
return "info";
|
|
21
|
+
}
|
|
22
|
+
let currentLevel = resolveLevel();
|
|
23
|
+
let logFilePath = null;
|
|
24
|
+
function setLogLevel(level) {
|
|
25
|
+
currentLevel = level;
|
|
26
|
+
}
|
|
27
|
+
function getLogLevel() {
|
|
28
|
+
return currentLevel;
|
|
29
|
+
}
|
|
30
|
+
function setLogFile(filePath) {
|
|
31
|
+
logFilePath = filePath;
|
|
32
|
+
(0, fs_1.mkdirSync)((0, path_1.dirname)(filePath), { recursive: true });
|
|
33
|
+
}
|
|
34
|
+
function writeToFile(level, msg) {
|
|
35
|
+
if (!logFilePath) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
const timestamp = new Date().toISOString();
|
|
40
|
+
(0, fs_1.appendFileSync)(logFilePath, `${timestamp} [${level.toUpperCase()}] ${msg}\n`);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// avoid infinite recursion — silently ignore file write errors
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function log(level, msg) {
|
|
47
|
+
writeToFile(level, msg);
|
|
48
|
+
if (LOG_LEVELS[level] < LOG_LEVELS[currentLevel]) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const prefix = {
|
|
52
|
+
debug: "[DEBUG]",
|
|
53
|
+
info: "[INFO]",
|
|
54
|
+
warn: "[WARN]",
|
|
55
|
+
error: "[ERROR]",
|
|
56
|
+
};
|
|
57
|
+
if (level === "error" || level === "warn") {
|
|
58
|
+
process.stderr.write(`${prefix[level]} ${msg}\n`);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
process.stdout.write(`${prefix[level]} ${msg}\n`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.logger = {
|
|
65
|
+
debug: (msg) => log("debug", msg),
|
|
66
|
+
info: (msg) => log("info", msg),
|
|
67
|
+
warn: (msg) => log("warn", msg),
|
|
68
|
+
error: (msg) => log("error", msg),
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":";;;AAuBA,kCAEC;AAED,kCAEC;AAED,gCAGC;AAlCD,2BAA+C;AAC/C,+BAA+B;AAI/B,MAAM,UAAU,GAA6B;IACzC,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACX,CAAC;AAEF,SAAS,YAAY;IACjB,MAAM,GAAG,GAAuB,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,WAAW,EAAE,CAAC;IAC7E,IAAI,GAAG,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC;QAC3B,OAAO,GAAe,CAAC;IAC3B,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,IAAI,YAAY,GAAa,YAAY,EAAE,CAAC;AAC5C,IAAI,WAAW,GAAkB,IAAI,CAAC;AAEtC,SAAgB,WAAW,CAAC,KAAe;IACvC,YAAY,GAAG,KAAK,CAAC;AACzB,CAAC;AAED,SAAgB,WAAW;IACvB,OAAO,YAAY,CAAC;AACxB,CAAC;AAED,SAAgB,UAAU,CAAC,QAAgB;IACvC,WAAW,GAAG,QAAQ,CAAC;IACvB,IAAA,cAAS,EAAC,IAAA,cAAO,EAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,WAAW,CAAC,KAAe,EAAE,GAAW;IAC7C,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,OAAO;IACX,CAAC;IACD,IAAI,CAAC;QACD,MAAM,SAAS,GAAW,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACnD,IAAA,mBAAc,EAAC,WAAW,EAAE,GAAG,SAAS,KAAK,KAAK,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;IAClF,CAAC;IAAC,MAAM,CAAC;QACL,+DAA+D;IACnE,CAAC;AACL,CAAC;AAED,SAAS,GAAG,CAAC,KAAe,EAAE,GAAW;IACrC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAExB,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/C,OAAO;IACX,CAAC;IAED,MAAM,MAAM,GAA6B;QACrC,KAAK,EAAE,SAAS;QAChB,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,SAAS;KACnB,CAAC;IAEF,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACtD,CAAC;AACL,CAAC;AAEY,QAAA,MAAM,GAA4C;IAC3D,KAAK,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC;IAC/C,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;IAC7C,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;IAC7C,KAAK,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC;CAClD,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IronBee — Colored Output Helpers
|
|
3
|
+
*
|
|
4
|
+
* Provides colored console output for user-facing commands.
|
|
5
|
+
* Uses picocolors for zero-overhead ANSI coloring.
|
|
6
|
+
*/
|
|
7
|
+
import pc from "picocolors";
|
|
8
|
+
interface Log {
|
|
9
|
+
info(msg: string): void;
|
|
10
|
+
success(msg: string): void;
|
|
11
|
+
warn(msg: string): void;
|
|
12
|
+
error(msg: string): void;
|
|
13
|
+
step(msg: string): void;
|
|
14
|
+
label(label: string, value: string): void;
|
|
15
|
+
dim(msg: string): void;
|
|
16
|
+
blank(): void;
|
|
17
|
+
}
|
|
18
|
+
export declare const log: Log;
|
|
19
|
+
export declare function orange(text: string): string;
|
|
20
|
+
export { pc };
|
|
21
|
+
//# sourceMappingURL=output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,UAAU,GAAG;IACT,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,IAAI,IAAI,CAAC;CACjB;AAED,eAAO,MAAM,GAAG,EAAE,GAyBjB,CAAC;AAEF,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,OAAO,EAAE,EAAE,EAAE,CAAC"}
|