@ironbee-ai/cli 0.12.0 → 0.13.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/CHANGELOG.md +6 -0
- package/README.md +3 -2
- package/dist/assets/banner.txt +1 -1
- package/dist/clients/claude/hooks/session-status.d.ts.map +1 -1
- package/dist/clients/claude/hooks/session-status.js +8 -2
- package/dist/clients/claude/hooks/session-status.js.map +1 -1
- package/dist/clients/claude/index.d.ts.map +1 -1
- package/dist/clients/claude/index.js +5 -0
- package/dist/clients/claude/index.js.map +1 -1
- package/dist/clients/cursor/index.d.ts.map +1 -1
- package/dist/clients/cursor/index.js +6 -0
- package/dist/clients/cursor/index.js.map +1 -1
- package/dist/clients/registry.d.ts +8 -9
- package/dist/clients/registry.d.ts.map +1 -1
- package/dist/clients/registry.js +13 -11
- package/dist/clients/registry.js.map +1 -1
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +4 -5
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/register.d.ts +0 -1
- package/dist/commands/register.d.ts.map +1 -1
- package/dist/commands/register.js +7 -27
- package/dist/commands/register.js.map +1 -1
- package/dist/commands/uninstall.d.ts +2 -3
- package/dist/commands/uninstall.d.ts.map +1 -1
- package/dist/commands/uninstall.js +3 -4
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/unregister.d.ts +0 -1
- package/dist/commands/unregister.d.ts.map +1 -1
- package/dist/commands/unregister.js +3 -24
- package/dist/commands/unregister.js.map +1 -1
- package/dist/index.js +33 -15
- package/dist/index.js.map +1 -1
- package/dist/lib/fs-prune.d.ts +20 -0
- package/dist/lib/fs-prune.d.ts.map +1 -0
- package/dist/lib/fs-prune.js +72 -0
- package/dist/lib/fs-prune.js.map +1 -0
- package/dist/lib/projects-registry.d.ts +6 -13
- package/dist/lib/projects-registry.d.ts.map +1 -1
- package/dist/lib/projects-registry.js +11 -46
- package/dist/lib/projects-registry.js.map +1 -1
- package/dist/tui/command.d.ts +18 -0
- package/dist/tui/command.d.ts.map +1 -0
- package/dist/tui/command.js +87 -0
- package/dist/tui/command.js.map +1 -0
- package/dist/tui/config/area.d.ts +6 -0
- package/dist/tui/config/area.d.ts.map +1 -0
- package/dist/tui/config/area.js +16 -0
- package/dist/tui/config/area.js.map +1 -0
- package/dist/tui/config/docs.d.ts +28 -0
- package/dist/tui/config/docs.d.ts.map +1 -0
- package/dist/tui/config/docs.js +68 -0
- package/dist/tui/config/docs.js.map +1 -0
- package/dist/tui/config/edit.d.ts +36 -0
- package/dist/tui/config/edit.d.ts.map +1 -0
- package/dist/tui/config/edit.js +69 -0
- package/dist/tui/config/edit.js.map +1 -0
- package/dist/tui/config/introspect.d.ts +58 -0
- package/dist/tui/config/introspect.d.ts.map +1 -0
- package/dist/tui/config/introspect.js +93 -0
- package/dist/tui/config/introspect.js.map +1 -0
- package/dist/tui/config/schema.d.ts +81 -0
- package/dist/tui/config/schema.d.ts.map +1 -0
- package/dist/tui/config/schema.js +534 -0
- package/dist/tui/config/schema.js.map +1 -0
- package/dist/tui/config/tree.d.ts +39 -0
- package/dist/tui/config/tree.d.ts.map +1 -0
- package/dist/tui/config/tree.js +59 -0
- package/dist/tui/config/tree.js.map +1 -0
- package/dist/tui/config/value.d.ts +75 -0
- package/dist/tui/config/value.d.ts.map +1 -0
- package/dist/tui/config/value.js +228 -0
- package/dist/tui/config/value.js.map +1 -0
- package/dist/tui/config/view.d.ts +13 -0
- package/dist/tui/config/view.d.ts.map +1 -0
- package/dist/tui/config/view.js +423 -0
- package/dist/tui/config/view.js.map +1 -0
- package/dist/tui/import/area.d.ts +11 -0
- package/dist/tui/import/area.d.ts.map +1 -0
- package/dist/tui/import/area.js +202 -0
- package/dist/tui/import/area.js.map +1 -0
- package/dist/tui/index.d.ts +9 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +14 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/platforms/area.d.ts +12 -0
- package/dist/tui/platforms/area.d.ts.map +1 -0
- package/dist/tui/platforms/area.js +228 -0
- package/dist/tui/platforms/area.js.map +1 -0
- package/dist/tui/projects/area.d.ts +26 -0
- package/dist/tui/projects/area.d.ts.map +1 -0
- package/dist/tui/projects/area.js +588 -0
- package/dist/tui/projects/area.js.map +1 -0
- package/dist/tui/queue/area.d.ts +11 -0
- package/dist/tui/queue/area.d.ts.map +1 -0
- package/dist/tui/queue/area.js +338 -0
- package/dist/tui/queue/area.js.map +1 -0
- package/dist/tui/queue/read.d.ts +49 -0
- package/dist/tui/queue/read.d.ts.map +1 -0
- package/dist/tui/queue/read.js +261 -0
- package/dist/tui/queue/read.js.map +1 -0
- package/dist/tui/sessions/area.d.ts +10 -0
- package/dist/tui/sessions/area.d.ts.map +1 -0
- package/dist/tui/sessions/area.js +266 -0
- package/dist/tui/sessions/area.js.map +1 -0
- package/dist/tui/sessions/read.d.ts +79 -0
- package/dist/tui/sessions/read.d.ts.map +1 -0
- package/dist/tui/sessions/read.js +202 -0
- package/dist/tui/sessions/read.js.map +1 -0
- package/dist/tui/shell/area.d.ts +47 -0
- package/dist/tui/shell/area.d.ts.map +1 -0
- package/dist/tui/shell/area.js +13 -0
- package/dist/tui/shell/area.js.map +1 -0
- package/dist/tui/shell/frame.d.ts +23 -0
- package/dist/tui/shell/frame.d.ts.map +1 -0
- package/dist/tui/shell/frame.js +91 -0
- package/dist/tui/shell/frame.js.map +1 -0
- package/dist/tui/shell/registry.d.ts +11 -0
- package/dist/tui/shell/registry.d.ts.map +1 -0
- package/dist/tui/shell/registry.js +29 -0
- package/dist/tui/shell/registry.js.map +1 -0
- package/dist/tui/shell/rerender.d.ts +16 -0
- package/dist/tui/shell/rerender.d.ts.map +1 -0
- package/dist/tui/shell/rerender.js +34 -0
- package/dist/tui/shell/rerender.js.map +1 -0
- package/dist/tui/shell/session.d.ts +75 -0
- package/dist/tui/shell/session.d.ts.map +1 -0
- package/dist/tui/shell/session.js +333 -0
- package/dist/tui/shell/session.js.map +1 -0
- package/dist/tui/shell/shell.d.ts +16 -0
- package/dist/tui/shell/shell.d.ts.map +1 -0
- package/dist/tui/shell/shell.js +213 -0
- package/dist/tui/shell/shell.js.map +1 -0
- package/dist/tui/shell/util.d.ts +18 -0
- package/dist/tui/shell/util.d.ts.map +1 -0
- package/dist/tui/shell/util.js +31 -0
- package/dist/tui/shell/util.js.map +1 -0
- package/package.json +3 -1
|
@@ -30,37 +30,17 @@ async function runRegister(options) {
|
|
|
30
30
|
output_1.log.error(`Directory not found: ${projectDir}`);
|
|
31
31
|
process.exit(1);
|
|
32
32
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
output_1.log.error(`Unknown client: '${options.client}'. Available: ${(0, registry_1.clientNames)()}.`);
|
|
41
|
-
process.exit(1);
|
|
42
|
-
}
|
|
43
|
-
clients = [found];
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
clients = (0, registry_1.detectClients)(projectDir);
|
|
47
|
-
if (clients.length === 0) {
|
|
48
|
-
// Unlike `install`, register does NOT fall back to the first
|
|
49
|
-
// registered client — that would mark the project as having a
|
|
50
|
-
// client it doesn't actually have. Force the user to pick.
|
|
51
|
-
output_1.log.error(`No client detected in ${projectDir}. Use --client <name> to register explicitly (${(0, registry_1.clientNames)()}).`);
|
|
52
|
-
process.exit(1);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
const names = clients.map((c) => c.name);
|
|
56
|
-
(0, projects_registry_1.upsertProject)(projectDir, names);
|
|
57
|
-
output_1.log.success(`Registered ${output_1.pc.bold(names.join(", "))} for ${output_1.pc.dim(projectDir)}.`);
|
|
58
|
-
await (0, telemetry_1.trackRegister)(names, projectDir);
|
|
33
|
+
// The registry is a set of project paths; we no longer record per-client
|
|
34
|
+
// info (client decisions follow live detection). Detected clients are
|
|
35
|
+
// passed to telemetry for signal only — not stored.
|
|
36
|
+
const detected = (0, registry_1.detectClients)(projectDir).map((c) => c.name);
|
|
37
|
+
(0, projects_registry_1.upsertProject)(projectDir);
|
|
38
|
+
output_1.log.success(`Registered ${output_1.pc.dim(projectDir)}.`);
|
|
39
|
+
await (0, telemetry_1.trackRegister)(detected, projectDir);
|
|
59
40
|
}
|
|
60
41
|
exports.registerCommand = new commander_1.Command("register")
|
|
61
42
|
.description("Add this project to the user-home inventory (~/.ironbee/projects.json) without writing any client artifacts. `ironbee install` already auto-registers; use this to retrofit an already-configured project into the inventory.")
|
|
62
43
|
.option("-p, --project <dir>", "Project directory to register (default: cwd).")
|
|
63
|
-
.option("--client <name>", `Client to register (${(0, registry_1.clientNames)()}), or "all". Default: detected clients.`)
|
|
64
44
|
.action(async (options) => {
|
|
65
45
|
await runRegister(options);
|
|
66
46
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAeH,kCAgBC;AA7BD,yCAAoC;AACpC,2BAAgC;AAChC,+BAA+B;AAE/B,kDAAoD;AACpD,0CAAwC;AACxC,gEAAyD;AACzD,gDAAiD;AAM1C,KAAK,UAAU,WAAW,CAAC,OAAwB;IACtD,MAAM,UAAU,GAAW,IAAA,cAAO,EAAC,OAAO,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC;IAE3D,IAAI,CAAC,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;QAC1B,YAAG,CAAC,KAAK,CAAC,wBAAwB,UAAU,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,yEAAyE;IACzE,sEAAsE;IACtE,oDAAoD;IACpD,MAAM,QAAQ,GAAa,IAAA,wBAAa,EAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAU,EAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACzF,IAAA,iCAAa,EAAC,UAAU,CAAC,CAAC;IAE1B,YAAG,CAAC,OAAO,CAAC,cAAc,WAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACjD,MAAM,IAAA,yBAAa,EAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAC9C,CAAC;AAEY,QAAA,eAAe,GAAY,IAAI,mBAAO,CAAC,UAAU,CAAC;KAC1D,WAAW,CAAC,+NAA+N,CAAC;KAC5O,MAAM,CAAC,qBAAqB,EAAE,+CAA+C,CAAC;KAC9E,MAAM,CAAC,KAAK,EAAE,OAAwB,EAAiB,EAAE;IACtD,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC,CAAC,CAAC"}
|
|
@@ -6,9 +6,8 @@ import { Command } from "commander";
|
|
|
6
6
|
* dropped from the registry.
|
|
7
7
|
*
|
|
8
8
|
* Per-project: runs `uninstall()` on every REGISTERED_CLIENT (each call
|
|
9
|
-
* is idempotent, only deletes files that exist)
|
|
10
|
-
*
|
|
11
|
-
* user manually moved between Claude and Cursor, both get cleaned.
|
|
9
|
+
* is idempotent, only deletes files that exist) — so whichever client(s)
|
|
10
|
+
* are actually on disk get cleaned, regardless of detection.
|
|
12
11
|
*/
|
|
13
12
|
export declare function runUninstallAll(opts: {
|
|
14
13
|
client?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2DpC
|
|
1
|
+
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2DpC;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CA2F5H;AAED,eAAO,MAAM,gBAAgB,EAAE,OA2DzB,CAAC"}
|
|
@@ -25,7 +25,7 @@ function uninstallOne(projectDir, clients) {
|
|
|
25
25
|
client.uninstall(projectDir);
|
|
26
26
|
}
|
|
27
27
|
const names = clients.map((c) => c.name);
|
|
28
|
-
(0, projects_registry_1.removeProject)(projectDir
|
|
28
|
+
(0, projects_registry_1.removeProject)(projectDir);
|
|
29
29
|
const ironbeeDir = (0, path_1.join)(projectDir, ".ironbee");
|
|
30
30
|
if ((0, fs_1.existsSync)(ironbeeDir)) {
|
|
31
31
|
(0, fs_1.rmSync)(ironbeeDir, { recursive: true, force: true });
|
|
@@ -55,9 +55,8 @@ function resolveClientsForUninstall(clientOpt) {
|
|
|
55
55
|
* dropped from the registry.
|
|
56
56
|
*
|
|
57
57
|
* Per-project: runs `uninstall()` on every REGISTERED_CLIENT (each call
|
|
58
|
-
* is idempotent, only deletes files that exist)
|
|
59
|
-
*
|
|
60
|
-
* user manually moved between Claude and Cursor, both get cleaned.
|
|
58
|
+
* is idempotent, only deletes files that exist) — so whichever client(s)
|
|
59
|
+
* are actually on disk get cleaned, regardless of detection.
|
|
61
60
|
*/
|
|
62
61
|
async function runUninstallAll(opts) {
|
|
63
62
|
const allEntries = (0, projects_registry_1.listProjects)();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":";;;AAqEA,0CA2FC;AAhKD,yCAAoC;AACpC,2BAAwC;AACxC,+BAAqC;AAErC,kDAAqG;AACrG,0CAAwC;AACxC,0CAA2D;AAC3D,gEAAqF;AACrF,gDAAkD;AAElD,SAAS,WAAW;IAChB,MAAM,KAAK,GAAa,6BAAkB,CAAC,GAAG,CAAC,CAAC,CAAU,EAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/E,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAQD,MAAM,eAAe,GAAW,EAAE,CAAC;AAEnC;;;;GAIG;AACH,SAAS,YAAY,CAAC,UAAkB,EAAE,OAAkB;IACxD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,KAAK,GAAa,OAAO,CAAC,GAAG,CAAC,CAAC,CAAU,EAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACpE,IAAA,iCAAa,EAAC,UAAU,CAAC,CAAC;IAE1B,MAAM,UAAU,GAAW,IAAA,WAAI,EAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACxD,IAAI,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;QACzB,IAAA,WAAM,EAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,SAAS,0BAA0B,CAAC,SAA6B;IAC7D,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QACjD,OAAO,6BAAkB,CAAC;IAC9B,CAAC;IACD,MAAM,KAAK,GAAwB,IAAA,qBAAU,EAAC,SAAS,CAAC,CAAC;IACzD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,oBAAoB,SAAS,iBAAiB,WAAW,EAAE,GAAG,CAAC,CAAC;IACpF,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC;AAED;;;;;;;;;GASG;AACI,KAAK,UAAU,eAAe,CAAC,IAAwC;IAC1E,MAAM,UAAU,GAAmB,IAAA,gCAAY,GAAE,CAAC;IAClD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,YAAG,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC1D,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACrC,CAAC;IAED,oEAAoE;IACpE,kCAAkC;IAClC,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC7B,CAAC,IAAA,0BAAe,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,4DAA4D;QAC5D,YAAG,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QAC7D,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;gBACxB,IAAA,iCAAa,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;YACD,YAAG,CAAC,IAAI,CAAC,UAAU,WAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,uBAAuB,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QAChH,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACrC,CAAC;IAED,YAAG,CAAC,IAAI,CAAC,mCAAmC,WAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;IACzF,MAAM,SAAS,GAAmB,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;IAClE,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,KAAK,WAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,WAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,WAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,WAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC,IAAI,WAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC5G,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnB,YAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,uBAAuB,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,uBAAuB,CAAC,CAAC;IAC5G,CAAC;IAED,IAAI,SAAkB,CAAC;IACvB,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;QACpB,SAAS,GAAG,IAAI,CAAC;IACrB,CAAC;SAAM,IAAI,IAAA,sBAAa,GAAE,EAAE,CAAC;QACzB,mDAAmD;QACnD,SAAS,GAAG,MAAM,IAAA,oBAAW,EAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACJ,YAAG,CAAC,KAAK,CAAC,yEAAyE,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACb,YAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACrB,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACrC,CAAC;IAED,YAAG,CAAC,KAAK,EAAE,CAAC;IAEZ,IAAI,QAAQ,GAAW,CAAC,CAAC;IACzB,MAAM,sBAAsB,GAAa,EAAE,CAAC;IAE5C,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC;YACD,YAAG,CAAC,KAAK,CAAC,SAAS,EAAE,WAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACzC,MAAM,OAAO,GAAc,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACnE,MAAM,KAAK,GAAa,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC1D,sBAAsB,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YAClB,QAAQ,EAAE,CAAC;YACX,YAAG,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChF,CAAC;IACL,CAAC;IAED,sEAAsE;IACtE,4DAA4D;IAC5D,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QACxB,IAAA,iCAAa,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,YAAG,CAAC,KAAK,EAAE,CAAC;IACZ,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACjB,YAAG,CAAC,OAAO,CAAC,oBAAoB,KAAK,CAAC,MAAM,eAAe,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,MAAM,cAAc,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,WAAE,CAAC,GAAG,CAAC,4CAA4C,CAAC,EAAE,CAAC,CAAC;IAC3N,CAAC;SAAM,CAAC;QACJ,YAAG,CAAC,IAAI,CAAC,kBAAkB,QAAQ,0BAA0B,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,aAAa,GAAa,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAC5E,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAA,0BAAc,EAAC,aAAa,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AAC7C,CAAC;AAEY,QAAA,gBAAgB,GAAY,IAAI,mBAAO,CAAC,WAAW,CAAC;KAC5D,WAAW,CAAC,wJAAwJ,CAAC;KACrK,QAAQ,CAAC,eAAe,EAAE,0BAA0B,EAAE,GAAG,CAAC;KAC1D,MAAM,CAAC,iBAAiB,EAAE,4BAA4B,WAAW,EAAE,aAAa,CAAC;KACjF,MAAM,CAAC,OAAO,EAAE,mMAAmM,CAAC;KACpN,MAAM,CAAC,WAAW,EAAE,gFAAgF,CAAC;KACrG,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,OAAyB,EAAiB,EAAE;IACpE,IAAI,OAAO,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GAAwC,MAAM,eAAe,CAAC;YACtE,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,GAAG,EAAE,OAAO,CAAC,GAAG;SACnB,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,OAAO;IACX,CAAC;IAED,MAAM,UAAU,GAAW,IAAA,cAAO,EAAC,GAAG,CAAC,CAAC;IAExC,IAAI,CAAC,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;QAC1B,YAAG,CAAC,KAAK,CAAC,wBAAwB,UAAU,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,OAAkB,CAAC;IAEvB,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC;YACD,OAAO,GAAG,0BAA0B,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YAClB,YAAG,CAAC,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,wDAAwD;QACxD,uDAAuD;QACvD,0DAA0D;QAC1D,OAAO,GAAG,IAAA,wBAAa,EAAC,UAAU,CAAC,CAAC;QACpC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,YAAG,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;YACtD,OAAO;QACX,CAAC;IACL,CAAC;IAED,kEAAkE;IAClE,kEAAkE;IAClE,MAAM,UAAU,GAAW,IAAA,WAAI,EAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACxD,MAAM,aAAa,GAAY,IAAA,eAAU,EAAC,UAAU,CAAC,CAAC;IAEtD,MAAM,KAAK,GAAa,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAE1D,IAAI,aAAa,EAAE,CAAC;QAChB,YAAG,CAAC,IAAI,CAAC,WAAW,WAAE,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,YAAG,CAAC,KAAK,EAAE,CAAC;IACZ,YAAG,CAAC,OAAO,CAAC,oBAAoB,WAAE,CAAC,GAAG,CAAC,iDAAiD,CAAC,EAAE,CAAC,CAAC;IAC7F,MAAM,IAAA,0BAAc,EAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unregister.d.ts","sourceRoot":"","sources":["../../src/commands/unregister.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"unregister.d.ts","sourceRoot":"","sources":["../../src/commands/unregister.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,UAAU,iBAAiB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB7E;AAED,eAAO,MAAM,iBAAiB,EAAE,OAK1B,CAAC"}
|
|
@@ -18,7 +18,6 @@ exports.unregisterCommand = void 0;
|
|
|
18
18
|
exports.runUnregister = runUnregister;
|
|
19
19
|
const commander_1 = require("commander");
|
|
20
20
|
const path_1 = require("path");
|
|
21
|
-
const registry_1 = require("../clients/registry");
|
|
22
21
|
const output_1 = require("../lib/output");
|
|
23
22
|
const projects_registry_1 = require("../lib/projects-registry");
|
|
24
23
|
const telemetry_1 = require("../lib/telemetry");
|
|
@@ -26,41 +25,21 @@ async function runUnregister(options) {
|
|
|
26
25
|
// Don't require existsSync — unregister's whole point is removing
|
|
27
26
|
// entries for paths that may have been deleted.
|
|
28
27
|
const projectDir = (0, path_1.resolve)(options.project ?? ".");
|
|
29
|
-
let clients;
|
|
30
|
-
if (options.client === "all") {
|
|
31
|
-
clients = registry_1.REGISTERED_CLIENTS.map((c) => c.name);
|
|
32
|
-
}
|
|
33
|
-
else if (options.client !== undefined) {
|
|
34
|
-
const found = (0, registry_1.findClient)(options.client);
|
|
35
|
-
if (found === undefined) {
|
|
36
|
-
output_1.log.error(`Unknown client: '${options.client}'. Available: ${(0, registry_1.clientNames)()}.`);
|
|
37
|
-
process.exit(1);
|
|
38
|
-
}
|
|
39
|
-
clients = [found.name];
|
|
40
|
-
}
|
|
41
|
-
// Default (no --client): drop the entry entirely regardless of clients.
|
|
42
|
-
// Matches the user's mental model of "stop tracking this project."
|
|
43
28
|
// Use removeProject's boolean return as the "did anything happen?"
|
|
44
29
|
// signal — that path uses `pathMatches` (with realpath fallback), so
|
|
45
30
|
// legacy non-canonical entries get caught here even when our
|
|
46
31
|
// `resolve()`'d lookup key wouldn't match by string equality.
|
|
47
|
-
const removed = (0, projects_registry_1.removeProject)(projectDir
|
|
32
|
+
const removed = (0, projects_registry_1.removeProject)(projectDir);
|
|
48
33
|
if (!removed) {
|
|
49
34
|
output_1.log.info(`No registry entry for ${output_1.pc.dim(projectDir)}. Nothing to remove.`);
|
|
50
35
|
return;
|
|
51
36
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
output_1.log.success(`Unregistered ${output_1.pc.bold(clients.join(", "))} for ${output_1.pc.dim(projectDir)}.`);
|
|
57
|
-
}
|
|
58
|
-
await (0, telemetry_1.trackUnregister)(clients ?? [], projectDir);
|
|
37
|
+
output_1.log.success(`Unregistered ${output_1.pc.dim(projectDir)} from the inventory.`);
|
|
38
|
+
await (0, telemetry_1.trackUnregister)([], projectDir);
|
|
59
39
|
}
|
|
60
40
|
exports.unregisterCommand = new commander_1.Command("unregister")
|
|
61
41
|
.description("Remove this project from the user-home inventory (~/.ironbee/projects.json) without uninstalling anything. `ironbee uninstall` already auto-unregisters; use this when the project dir is already gone or you want to drop the inventory entry only.")
|
|
62
42
|
.option("-p, --project <dir>", "Project directory to unregister (default: cwd).")
|
|
63
|
-
.option("--client <name>", `Drop only this client from the entry (${(0, registry_1.clientNames)()}), or "all". Default: drop the whole entry.`)
|
|
64
43
|
.action(async (options) => {
|
|
65
44
|
await runUnregister(options);
|
|
66
45
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unregister.js","sourceRoot":"","sources":["../../src/commands/unregister.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;
|
|
1
|
+
{"version":3,"file":"unregister.js","sourceRoot":"","sources":["../../src/commands/unregister.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;AAYH,sCAkBC;AA5BD,yCAAoC;AACpC,+BAA+B;AAC/B,0CAAwC;AACxC,gEAAyD;AACzD,gDAAmD;AAM5C,KAAK,UAAU,aAAa,CAAC,OAA0B;IAC1D,kEAAkE;IAClE,gDAAgD;IAChD,MAAM,UAAU,GAAW,IAAA,cAAO,EAAC,OAAO,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC;IAE3D,mEAAmE;IACnE,qEAAqE;IACrE,6DAA6D;IAC7D,8DAA8D;IAC9D,MAAM,OAAO,GAAY,IAAA,iCAAa,EAAC,UAAU,CAAC,CAAC;IAEnD,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,YAAG,CAAC,IAAI,CAAC,yBAAyB,WAAE,CAAC,GAAG,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;QAC5E,OAAO;IACX,CAAC;IAED,YAAG,CAAC,OAAO,CAAC,gBAAgB,WAAE,CAAC,GAAG,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;IACtE,MAAM,IAAA,2BAAe,EAAC,EAAE,EAAE,UAAU,CAAC,CAAC;AAC1C,CAAC;AAEY,QAAA,iBAAiB,GAAY,IAAI,mBAAO,CAAC,YAAY,CAAC;KAC9D,WAAW,CAAC,sPAAsP,CAAC;KACnQ,MAAM,CAAC,qBAAqB,EAAE,iDAAiD,CAAC;KAChF,MAAM,CAAC,KAAK,EAAE,OAA0B,EAAiB,EAAE;IACxD,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC,CAAC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -21,6 +21,7 @@ const verification_1 = require("./commands/verification");
|
|
|
21
21
|
const telemetry_1 = require("./commands/telemetry");
|
|
22
22
|
const statusline_1 = require("./commands/statusline");
|
|
23
23
|
const config_1 = require("./commands/config");
|
|
24
|
+
const tui_1 = require("./tui");
|
|
24
25
|
const register_1 = require("./commands/register");
|
|
25
26
|
const unregister_1 = require("./commands/unregister");
|
|
26
27
|
const import_1 = require("./commands/import");
|
|
@@ -54,6 +55,7 @@ program.addCommand(verification_1.verificationCommand);
|
|
|
54
55
|
program.addCommand(telemetry_1.telemetryCommand);
|
|
55
56
|
program.addCommand(statusline_1.statuslineCommand);
|
|
56
57
|
program.addCommand(config_1.configCommand);
|
|
58
|
+
program.addCommand(tui_1.tuiCommand);
|
|
57
59
|
program.addCommand(register_1.registerCommand);
|
|
58
60
|
program.addCommand(unregister_1.unregisterCommand);
|
|
59
61
|
program.addCommand(import_1.importCommand);
|
|
@@ -73,21 +75,37 @@ if (process.argv.length === 2) {
|
|
|
73
75
|
console.log(` ${output_1.pc.bold(output_1.pc.cyan("Usage:"))} ${output_1.pc.green("ironbee")} ${output_1.pc.dim("<command> [options]")}`);
|
|
74
76
|
console.log();
|
|
75
77
|
console.log(` ${output_1.pc.bold(output_1.pc.cyan("Commands:"))}`);
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
78
|
+
// Rows are { name, args, desc }; the name+args term column is padded to a
|
|
79
|
+
// common width computed from VISIBLE length (pc.* injects ANSI codes that
|
|
80
|
+
// would otherwise throw alignment off), so descriptions line up regardless
|
|
81
|
+
// of name length.
|
|
82
|
+
const rows = [
|
|
83
|
+
{ name: "install", args: "[project-dir]", desc: "Install hooks + guidance files into a project (--all: every registered project)" },
|
|
84
|
+
{ name: "uninstall", args: "[project-dir]", desc: "Remove IronBee from a project (--all: every registered project)" },
|
|
85
|
+
{ name: "update", args: "", desc: "Update IronBee CLI to the latest version" },
|
|
86
|
+
{ name: "tui", args: "[area]", desc: "Interactive full-screen UI (config · platforms · projects · sessions · queue · import)" },
|
|
87
|
+
{ name: "status", args: "[project-dir]", desc: "Show verification status for active sessions" },
|
|
88
|
+
{ name: "verify", args: "[session-id]", desc: "Dry-run verdict validation" },
|
|
89
|
+
{ name: "analyze", args: "[session-id]", desc: "Analyze session metrics (single or all)" },
|
|
90
|
+
{ name: "browser", args: "<enable|disable>", desc: "Toggle the browser verification cycle (default-on)" },
|
|
91
|
+
{ name: "node", args: "<enable|disable>", desc: "Toggle the Node.js runtime debug cycle (opt-in)" },
|
|
92
|
+
{ name: "backend", args: "<enable|disable>", desc: "Toggle the backend protocol cycle (opt-in)" },
|
|
93
|
+
{ name: "verification", args: "<enable|disable>", desc: "Master toggle (enable = enforce; disable = monitoring-only)" },
|
|
94
|
+
{ name: "telemetry", args: "<enable|disable>", desc: "Anonymous PostHog telemetry toggle" },
|
|
95
|
+
{ name: "statusline", args: "<enable|disable>", desc: "Claude statusline integration (Claude-only)" },
|
|
96
|
+
{ name: "config", args: "<get|set|unset|list>", desc: "Read or write project / global / local config" },
|
|
97
|
+
{ name: "register", args: "[-p <dir>]", desc: "Add a project to the user-home inventory (no artifact writes)" },
|
|
98
|
+
{ name: "unregister", args: "[-p <dir>]", desc: "Remove a project from the inventory (no artifact writes)" },
|
|
99
|
+
{ name: "queue", args: "<status|drain|…>", desc: "Inspect / drain the background job queue" },
|
|
100
|
+
{ name: "import", args: "", desc: "Import historical Claude sessions to the collector" },
|
|
101
|
+
];
|
|
102
|
+
const term = (r) => (r.args.length > 0 ? `${r.name} ${r.args}` : r.name);
|
|
103
|
+
const termWidth = Math.max(...rows.map((r) => term(r).length));
|
|
104
|
+
for (const r of rows) {
|
|
105
|
+
const colored = r.args.length > 0 ? `${output_1.pc.green(r.name)} ${output_1.pc.dim(r.args)}` : output_1.pc.green(r.name);
|
|
106
|
+
const pad = " ".repeat(termWidth - term(r).length);
|
|
107
|
+
console.log(` ${colored}${pad} ${r.desc}`);
|
|
108
|
+
}
|
|
91
109
|
console.log();
|
|
92
110
|
console.log(` ${output_1.pc.dim("Run")} ${output_1.pc.cyan("ironbee <command> --help")} ${output_1.pc.dim("for more info on a command.")}`);
|
|
93
111
|
console.log();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,2BAAkC;AAClC,+BAA4B;AAC5B,gDAAoD;AACpD,oDAAwD;AACxD,8CAAkD;AAClD,0CAA8C;AAC9C,8CAAkD;AAClD,8CAAkD;AAClD,gDAAoD;AACpD,4CAAgD;AAChD,kEAAoE;AACpE,oEAAuE;AACvE,gDAAoD;AACpD,0CAA8C;AAC9C,gDAAoD;AACpD,0DAA8D;AAC9D,oDAAwD;AACxD,sDAA0D;AAC1D,8CAAkD;AAClD,+BAAmC;AACnC,kDAAsD;AACtD,sDAA0D;AAC1D,8CAAkD;AAClD,4CAAgD;AAChD,mCAAgD;AAChD,qCAAyC;AACzC,2CAAiE;AACjE,yCAAkC;AAElC,MAAM,GAAG,GAA6C,IAAI,CAAC,KAAK,CAC5D,IAAA,iBAAY,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAC5D,CAAC;AAEF,8EAA8E;AAC9E,yEAAyE;AACzE,sEAAsE;AACtE,IAAA,6BAAqB,GAAE,CAAC;AAExB,MAAM,OAAO,GAAY,IAAI,mBAAO,EAAE,CAAC;AAEvC,OAAO;KACF,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;KAC5B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAE1B,OAAO,CAAC,UAAU,CAAC,oBAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,wBAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,4BAAgB,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,wBAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,oBAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,wBAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,kBAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,wBAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,kCAAmB,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,4BAAgB,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,8BAAiB,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,gBAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,0BAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,8BAAiB,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,wCAAqB,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,2CAAuB,CAAC,CAAC;AAC5C,OAAO,CAAC,UAAU,CAAC,kBAAW,CAAC,CAAC;AAEhC,6FAA6F;AAC7F,MAAM,mBAAmB,GAAY,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM;OACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,kBAAkB;OACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,mBAAmB,CAAC;AAE/C,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IAC5B,IAAA,kBAAW,GAAE,CAAC;IACd,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,WAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,WAAE,CAAC,GAAG,CAAC,IAAI,IAAA,yBAAe,GAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,KAAK,WAAE,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,WAAE,CAAC,IAAI,CAAC,WAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,WAAE,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,WAAE,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;IACvG,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,WAAE,CAAC,IAAI,CAAC,WAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;IAClD,0EAA0E;IAC1E,0EAA0E;IAC1E,2EAA2E;IAC3E,kBAAkB;IAClB,MAAM,IAAI,GAAmD;QACzD,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,iFAAiF,EAAE;QACnI,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,iEAAiE,EAAE;QACrH,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,0CAA0C,EAAE;QAC9E,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,wFAAwF,EAAE;QAC/H,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,8CAA8C,EAAE;QAC/F,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,4BAA4B,EAAE;QAC5E,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,yCAAyC,EAAE;QAC1F,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,oDAAoD,EAAE;QACzG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,iDAAiD,EAAE;QACnG,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,4CAA4C,EAAE;QACjG,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,6DAA6D,EAAE;QACvH,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,oCAAoC,EAAE;QAC3F,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,6CAA6C,EAAE;QACrG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,+CAA+C,EAAE;QACvG,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,+DAA+D,EAAE;QAC/G,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,0DAA0D,EAAE;QAC5G,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,0CAA0C,EAAE;QAC7F,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,oDAAoD,EAAE;KAC3F,CAAC;IACF,MAAM,IAAI,GACN,CAAC,CAAiC,EAAU,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACxG,MAAM,SAAS,GAAW,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAiC,EAAU,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/G,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACnB,MAAM,OAAO,GAAW,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,WAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,WAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,WAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACvG,MAAM,GAAG,GAAW,GAAG,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,GAAG,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,WAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,WAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAAI,WAAE,CAAC,GAAG,CAAC,6BAA6B,CAAC,EAAE,CAAC,CAAC;IAClH,OAAO,CAAC,GAAG,EAAE,CAAC;AAClB,CAAC;KAAM,IAAI,mBAAmB,EAAE,CAAC;IAC7B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;KAAM,CAAC;IACJ,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,oDAAoD;IACpD,IAAA,yBAAe,GAAE,CAAC,KAAK,CAAC,GAAS,EAAE,GAAE,CAAC,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IronBee — empty-directory pruning.
|
|
3
|
+
*
|
|
4
|
+
* Used by client `uninstall` to clean up directories ironbee owned once their
|
|
5
|
+
* files are gone: e.g. `.claude/commands`, `.claude/rules`, `.claude/skills`
|
|
6
|
+
* (and Cursor's nested `.cursor/skills/ironbee-analyze/`), then the `.claude` /
|
|
7
|
+
* `.cursor` root itself when nothing else remains. A dangling empty `.claude` /
|
|
8
|
+
* `.cursor` also makes `IClient.detect` (which checks for the dir) report the
|
|
9
|
+
* project as still present — pruning keeps detection honest.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Recursively remove empty directories within (and including) `baseDir`,
|
|
13
|
+
* bottom-up. A directory is removed ONLY when it has zero entries after its
|
|
14
|
+
* empty children are pruned — so any directory still holding a file (user
|
|
15
|
+
* content) survives, and so does `baseDir` itself if it isn't fully empty.
|
|
16
|
+
* No-op when `baseDir` is missing or not a directory. Best-effort: I/O errors
|
|
17
|
+
* are swallowed. Returns `true` when `baseDir` itself was removed.
|
|
18
|
+
*/
|
|
19
|
+
export declare function pruneEmptyDirs(baseDir: string): boolean;
|
|
20
|
+
//# sourceMappingURL=fs-prune.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-prune.d.ts","sourceRoot":"","sources":["../../src/lib/fs-prune.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CA6CvD"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* IronBee — empty-directory pruning.
|
|
4
|
+
*
|
|
5
|
+
* Used by client `uninstall` to clean up directories ironbee owned once their
|
|
6
|
+
* files are gone: e.g. `.claude/commands`, `.claude/rules`, `.claude/skills`
|
|
7
|
+
* (and Cursor's nested `.cursor/skills/ironbee-analyze/`), then the `.claude` /
|
|
8
|
+
* `.cursor` root itself when nothing else remains. A dangling empty `.claude` /
|
|
9
|
+
* `.cursor` also makes `IClient.detect` (which checks for the dir) report the
|
|
10
|
+
* project as still present — pruning keeps detection honest.
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.pruneEmptyDirs = pruneEmptyDirs;
|
|
14
|
+
const fs_1 = require("fs");
|
|
15
|
+
const path_1 = require("path");
|
|
16
|
+
/**
|
|
17
|
+
* Recursively remove empty directories within (and including) `baseDir`,
|
|
18
|
+
* bottom-up. A directory is removed ONLY when it has zero entries after its
|
|
19
|
+
* empty children are pruned — so any directory still holding a file (user
|
|
20
|
+
* content) survives, and so does `baseDir` itself if it isn't fully empty.
|
|
21
|
+
* No-op when `baseDir` is missing or not a directory. Best-effort: I/O errors
|
|
22
|
+
* are swallowed. Returns `true` when `baseDir` itself was removed.
|
|
23
|
+
*/
|
|
24
|
+
function pruneEmptyDirs(baseDir) {
|
|
25
|
+
if (!(0, fs_1.existsSync)(baseDir)) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
if (!(0, fs_1.statSync)(baseDir).isDirectory()) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
let entries;
|
|
37
|
+
try {
|
|
38
|
+
entries = (0, fs_1.readdirSync)(baseDir);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
for (const name of entries) {
|
|
44
|
+
const child = (0, path_1.join)(baseDir, name);
|
|
45
|
+
try {
|
|
46
|
+
if ((0, fs_1.statSync)(child).isDirectory()) {
|
|
47
|
+
pruneEmptyDirs(child);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// unreadable child — leave it, don't risk a throw
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
let remaining;
|
|
55
|
+
try {
|
|
56
|
+
remaining = (0, fs_1.readdirSync)(baseDir);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
if (remaining.length > 0) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
(0, fs_1.rmdirSync)(baseDir);
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=fs-prune.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-prune.js","sourceRoot":"","sources":["../../src/lib/fs-prune.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;AAaH,wCA6CC;AAxDD,2BAAkE;AAClE,+BAA4B;AAE5B;;;;;;;GAOG;AACH,SAAgB,cAAc,CAAC,OAAe;IAC1C,IAAI,CAAC,IAAA,eAAU,EAAC,OAAO,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,CAAC;QACD,IAAI,CAAC,IAAA,aAAQ,EAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACnC,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACD,OAAO,GAAG,IAAA,gBAAW,EAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QACzB,MAAM,KAAK,GAAW,IAAA,WAAI,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC;YACD,IAAI,IAAA,aAAQ,EAAC,KAAK,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;gBAChC,cAAc,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACL,kDAAkD;QACtD,CAAC;IACL,CAAC;IAED,IAAI,SAAmB,CAAC;IACxB,IAAI,CAAC;QACD,SAAS,GAAG,IAAA,gBAAW,EAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,CAAC;QACD,IAAA,cAAS,EAAC,OAAO,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC"}
|
|
@@ -39,8 +39,6 @@
|
|
|
39
39
|
export interface ProjectEntry {
|
|
40
40
|
/** Absolute, realpath-canonicalized project directory. Identity key. */
|
|
41
41
|
path: string;
|
|
42
|
-
/** Client names (claude, cursor, …) installed into this project. */
|
|
43
|
-
clients: string[];
|
|
44
42
|
/** ISO 8601 timestamp of the first install. */
|
|
45
43
|
installedAt: string;
|
|
46
44
|
}
|
|
@@ -79,19 +77,14 @@ export declare function canonicalizePath(projectDir: string): string;
|
|
|
79
77
|
* Failures are swallowed and logged — registry maintenance must not break
|
|
80
78
|
* the user-visible `install` / `register` flow.
|
|
81
79
|
*/
|
|
82
|
-
export declare function upsertProject(projectDir: string
|
|
80
|
+
export declare function upsertProject(projectDir: string): void;
|
|
83
81
|
/**
|
|
84
|
-
* Remove
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
* Idempotent. Returns `true` when something was actually removed (entry
|
|
90
|
-
* dropped or clients trimmed); `false` when there was nothing matching to
|
|
91
|
-
* change. Lets callers like `ironbee unregister` distinguish "removed
|
|
92
|
-
* vs. nothing-to-remove" without re-implementing the `pathMatches` lookup.
|
|
82
|
+
* Remove a project entry from the inventory entirely. Idempotent — returns
|
|
83
|
+
* `true` when an entry was removed, `false` when there was no matching entry.
|
|
84
|
+
* Lets callers like `ironbee unregister` distinguish "removed vs nothing to
|
|
85
|
+
* remove" without re-implementing the `pathMatches` lookup.
|
|
93
86
|
*/
|
|
94
|
-
export declare function removeProject(projectDir: string
|
|
87
|
+
export declare function removeProject(projectDir: string): boolean;
|
|
95
88
|
/**
|
|
96
89
|
* Return every registered project, raw (no staleness filtering). Callers
|
|
97
90
|
* that want pruned results compose this with their own active-check —
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projects-registry.d.ts","sourceRoot":"","sources":["../../src/lib/projects-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AASH,MAAM,WAAW,YAAY;IACzB,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb
|
|
1
|
+
{"version":3,"file":"projects-registry.d.ts","sourceRoot":"","sources":["../../src/lib/projects-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AASH,MAAM,WAAW,YAAY;IACzB,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC5B;AAMD,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAMD;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,YAAY,CAqC3C;AAsCD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAO3D;AAoBD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAqBtD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAezD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,YAAY,EAAE,CAE7C"}
|
|
@@ -89,11 +89,10 @@ function loadRegistry() {
|
|
|
89
89
|
}
|
|
90
90
|
const projects = obj.projects
|
|
91
91
|
.filter((p) => p !== null && typeof p === "object")
|
|
92
|
+
// A legacy `clients` field on disk is ignored — the registry is now a
|
|
93
|
+
// set of project paths; client decisions follow live detection.
|
|
92
94
|
.map((p) => ({
|
|
93
95
|
path: typeof p.path === "string" ? p.path : "",
|
|
94
|
-
clients: Array.isArray(p.clients)
|
|
95
|
-
? p.clients.filter((c) => typeof c === "string")
|
|
96
|
-
: [],
|
|
97
96
|
installedAt: typeof p.installedAt === "string" ? p.installedAt : "",
|
|
98
97
|
}))
|
|
99
98
|
.filter((p) => p.path.length > 0);
|
|
@@ -190,27 +189,20 @@ function pathMatches(stored, canonical) {
|
|
|
190
189
|
* Failures are swallowed and logged — registry maintenance must not break
|
|
191
190
|
* the user-visible `install` / `register` flow.
|
|
192
191
|
*/
|
|
193
|
-
function upsertProject(projectDir
|
|
194
|
-
if (clients.length === 0) {
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
192
|
+
function upsertProject(projectDir) {
|
|
197
193
|
try {
|
|
198
194
|
const canonical = canonicalizePath(projectDir);
|
|
199
195
|
const file = loadRegistry();
|
|
200
196
|
const now = new Date().toISOString();
|
|
201
197
|
const idx = file.projects.findIndex((p) => pathMatches(p.path, canonical));
|
|
202
198
|
if (idx === -1) {
|
|
203
|
-
file.projects.push({
|
|
204
|
-
path: canonical,
|
|
205
|
-
clients: dedupe(clients),
|
|
206
|
-
installedAt: now,
|
|
207
|
-
});
|
|
199
|
+
file.projects.push({ path: canonical, installedAt: now });
|
|
208
200
|
}
|
|
209
201
|
else {
|
|
202
|
+
// Rewrite canonical (legacy paths get canonicalized on re-touch); keep installedAt.
|
|
210
203
|
const existing = file.projects[idx];
|
|
211
204
|
file.projects[idx] = {
|
|
212
205
|
path: canonical,
|
|
213
|
-
clients: dedupe([...existing.clients, ...clients]),
|
|
214
206
|
installedAt: existing.installedAt.length > 0 ? existing.installedAt : now,
|
|
215
207
|
};
|
|
216
208
|
}
|
|
@@ -221,17 +213,12 @@ function upsertProject(projectDir, clients) {
|
|
|
221
213
|
}
|
|
222
214
|
}
|
|
223
215
|
/**
|
|
224
|
-
* Remove
|
|
225
|
-
*
|
|
226
|
-
*
|
|
227
|
-
*
|
|
228
|
-
*
|
|
229
|
-
* Idempotent. Returns `true` when something was actually removed (entry
|
|
230
|
-
* dropped or clients trimmed); `false` when there was nothing matching to
|
|
231
|
-
* change. Lets callers like `ironbee unregister` distinguish "removed
|
|
232
|
-
* vs. nothing-to-remove" without re-implementing the `pathMatches` lookup.
|
|
216
|
+
* Remove a project entry from the inventory entirely. Idempotent — returns
|
|
217
|
+
* `true` when an entry was removed, `false` when there was no matching entry.
|
|
218
|
+
* Lets callers like `ironbee unregister` distinguish "removed vs nothing to
|
|
219
|
+
* remove" without re-implementing the `pathMatches` lookup.
|
|
233
220
|
*/
|
|
234
|
-
function removeProject(projectDir
|
|
221
|
+
function removeProject(projectDir) {
|
|
235
222
|
try {
|
|
236
223
|
const canonical = canonicalizePath(projectDir);
|
|
237
224
|
const file = loadRegistry();
|
|
@@ -239,26 +226,7 @@ function removeProject(projectDir, clients) {
|
|
|
239
226
|
if (idx === -1) {
|
|
240
227
|
return false;
|
|
241
228
|
}
|
|
242
|
-
|
|
243
|
-
file.projects.splice(idx, 1);
|
|
244
|
-
}
|
|
245
|
-
else {
|
|
246
|
-
const existing = file.projects[idx];
|
|
247
|
-
const remaining = existing.clients.filter((c) => !clients.includes(c));
|
|
248
|
-
if (remaining.length === existing.clients.length) {
|
|
249
|
-
// None of the requested clients were in the entry — nothing changed.
|
|
250
|
-
return false;
|
|
251
|
-
}
|
|
252
|
-
if (remaining.length === 0) {
|
|
253
|
-
file.projects.splice(idx, 1);
|
|
254
|
-
}
|
|
255
|
-
else {
|
|
256
|
-
file.projects[idx] = {
|
|
257
|
-
...existing,
|
|
258
|
-
clients: remaining,
|
|
259
|
-
};
|
|
260
|
-
}
|
|
261
|
-
}
|
|
229
|
+
file.projects.splice(idx, 1);
|
|
262
230
|
writeRegistry(file);
|
|
263
231
|
return true;
|
|
264
232
|
}
|
|
@@ -276,7 +244,4 @@ function removeProject(projectDir, clients) {
|
|
|
276
244
|
function listProjects() {
|
|
277
245
|
return loadRegistry().projects;
|
|
278
246
|
}
|
|
279
|
-
function dedupe(items) {
|
|
280
|
-
return Array.from(new Set(items));
|
|
281
|
-
}
|
|
282
247
|
//# sourceMappingURL=projects-registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projects-registry.js","sourceRoot":"","sources":["../../src/lib/projects-registry.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;;
|
|
1
|
+
{"version":3,"file":"projects-registry.js","sourceRoot":"","sources":["../../src/lib/projects-registry.ts"],"names":[],"mappings":"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"}
|