@ironbee-ai/cli 0.12.0 → 0.14.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 +12 -0
- package/README.md +12 -2
- package/dist/assets/banner.txt +1 -1
- package/dist/clients/claude/hooks/activity-start.d.ts.map +1 -1
- package/dist/clients/claude/hooks/activity-start.js +4 -0
- package/dist/clients/claude/hooks/activity-start.js.map +1 -1
- package/dist/clients/claude/hooks/session-start.d.ts.map +1 -1
- package/dist/clients/claude/hooks/session-start.js +4 -0
- package/dist/clients/claude/hooks/session-start.js.map +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 +10 -0
- package/dist/clients/claude/index.d.ts.map +1 -1
- package/dist/clients/claude/index.js +110 -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/config.d.ts.map +1 -1
- package/dist/commands/config.js +1 -0
- package/dist/commands/config.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/otel.d.ts +20 -0
- package/dist/commands/otel.d.ts.map +1 -0
- package/dist/commands/otel.js +132 -0
- package/dist/commands/otel.js.map +1 -0
- 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 +37 -16
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +47 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +57 -3
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/event.d.ts +112 -0
- package/dist/lib/event.d.ts.map +1 -1
- package/dist/lib/event.js +1 -0
- package/dist/lib/event.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/gitignore.d.ts.map +1 -1
- package/dist/lib/gitignore.js +6 -0
- package/dist/lib/gitignore.js.map +1 -1
- 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/lib/version.d.ts +5 -0
- package/dist/lib/version.d.ts.map +1 -1
- package/dist/lib/version.js +5 -0
- package/dist/lib/version.js.map +1 -1
- package/dist/otel/collector.d.ts +66 -0
- package/dist/otel/collector.d.ts.map +1 -0
- package/dist/otel/collector.js +317 -0
- package/dist/otel/collector.js.map +1 -0
- package/dist/otel/context/build.d.ts +37 -0
- package/dist/otel/context/build.d.ts.map +1 -0
- package/dist/otel/context/build.js +103 -0
- package/dist/otel/context/build.js.map +1 -0
- package/dist/otel/context/classify.d.ts +40 -0
- package/dist/otel/context/classify.d.ts.map +1 -0
- package/dist/otel/context/classify.js +228 -0
- package/dist/otel/context/classify.js.map +1 -0
- package/dist/otel/context/extract.d.ts +39 -0
- package/dist/otel/context/extract.d.ts.map +1 -0
- package/dist/otel/context/extract.js +76 -0
- package/dist/otel/context/extract.js.map +1 -0
- package/dist/otel/context/markers.d.ts +37 -0
- package/dist/otel/context/markers.d.ts.map +1 -0
- package/dist/otel/context/markers.js +179 -0
- package/dist/otel/context/markers.js.map +1 -0
- package/dist/otel/context/util.d.ts +15 -0
- package/dist/otel/context/util.d.ts.map +1 -0
- package/dist/otel/context/util.js +33 -0
- package/dist/otel/context/util.js.map +1 -0
- package/dist/otel/daemon/ensure.d.ts +52 -0
- package/dist/otel/daemon/ensure.d.ts.map +1 -0
- package/dist/otel/daemon/ensure.js +226 -0
- package/dist/otel/daemon/ensure.js.map +1 -0
- package/dist/otel/daemon/forward.d.ts +47 -0
- package/dist/otel/daemon/forward.d.ts.map +1 -0
- package/dist/otel/daemon/forward.js +0 -0
- package/dist/otel/daemon/forward.js.map +1 -0
- package/dist/otel/daemon/paths.d.ts +24 -0
- package/dist/otel/daemon/paths.d.ts.map +1 -0
- package/dist/otel/daemon/paths.js +47 -0
- package/dist/otel/daemon/paths.js.map +1 -0
- package/dist/otel/daemon/process.d.ts +21 -0
- package/dist/otel/daemon/process.d.ts.map +1 -0
- package/dist/otel/daemon/process.js +149 -0
- package/dist/otel/daemon/process.js.map +1 -0
- package/dist/otel/daemon/reprocess.d.ts +27 -0
- package/dist/otel/daemon/reprocess.d.ts.map +1 -0
- package/dist/otel/daemon/reprocess.js +112 -0
- package/dist/otel/daemon/reprocess.js.map +1 -0
- package/dist/otel/log-handler.d.ts +37 -0
- package/dist/otel/log-handler.d.ts.map +1 -0
- package/dist/otel/log-handler.js +332 -0
- package/dist/otel/log-handler.js.map +1 -0
- package/dist/otel/metric-handler.d.ts +12 -0
- package/dist/otel/metric-handler.d.ts.map +1 -0
- package/dist/otel/metric-handler.js +18 -0
- package/dist/otel/metric-handler.js.map +1 -0
- package/dist/otel/trace-handler.d.ts +12 -0
- package/dist/otel/trace-handler.d.ts.map +1 -0
- package/dist/otel/trace-handler.js +18 -0
- package/dist/otel/trace-handler.js.map +1 -0
- package/dist/otel/types.d.ts +105 -0
- package/dist/otel/types.d.ts.map +1 -0
- package/dist/otel/types.js +15 -0
- package/dist/otel/types.js.map +1 -0
- 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 +578 -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 +4 -1
package/dist/lib/event.d.ts
CHANGED
|
@@ -37,6 +37,7 @@ export declare const EventType: {
|
|
|
37
37
|
readonly SESSION_TURN_STEP: "session_turn_step_analytics";
|
|
38
38
|
readonly API_REQUEST: "api_request";
|
|
39
39
|
readonly SESSION_STATUS: "session_status";
|
|
40
|
+
readonly SESSION_CONTEXT: "session_context";
|
|
40
41
|
};
|
|
41
42
|
export type EventTypeValue = typeof EventType[keyof typeof EventType];
|
|
42
43
|
/**
|
|
@@ -147,4 +148,115 @@ export interface SessionStatusEvent extends ActivityAwareEvent {
|
|
|
147
148
|
seven_day?: RateLimitWindow;
|
|
148
149
|
};
|
|
149
150
|
}
|
|
151
|
+
/**
|
|
152
|
+
* Byte + approximate-token usage for one `session_context` breakdown category.
|
|
153
|
+
* `bytes` is exact (`Buffer.byteLength(JSON.stringify(node))`); `approx_tokens`
|
|
154
|
+
* is `bytes / BYTES_PER_TOKEN` — indicative only (token density varies by
|
|
155
|
+
* content type), so bytes are the trustworthy unit.
|
|
156
|
+
*/
|
|
157
|
+
export interface CategoryUsage {
|
|
158
|
+
bytes: number;
|
|
159
|
+
approx_tokens: number;
|
|
160
|
+
/**
|
|
161
|
+
* `bytes` as a share of the event's `total_input_bytes`, rounded to 2 dp
|
|
162
|
+
* (e.g. `81.42`). The single denominator is the whole request, so every
|
|
163
|
+
* `CategoryUsage` — `breakdown.*` and every `breakdown_detail.*` entry — is
|
|
164
|
+
* directly comparable, and the top-level `breakdown` percents sum to ~100
|
|
165
|
+
* (±per-entry rounding). `0` when `total_input_bytes` is 0.
|
|
166
|
+
*/
|
|
167
|
+
percent: number;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Per-category context breakdown — where the bytes of one Messages API request
|
|
171
|
+
* go. Fixed-key by design (categories rarely change); the backend record is a
|
|
172
|
+
* tolerant reader so adding a category stays forward-compatible. `others` is
|
|
173
|
+
* the REMAINDER (`total_input_bytes − Σ(rest)`), so the values sum exactly to
|
|
174
|
+
* `total_input_bytes`.
|
|
175
|
+
*/
|
|
176
|
+
export interface SessionContextBreakdown {
|
|
177
|
+
/** `system[]` base prompt. */
|
|
178
|
+
system_prompt: CategoryUsage;
|
|
179
|
+
/** `tools[]` non-mcp tool definitions. */
|
|
180
|
+
builtin_tools: CategoryUsage;
|
|
181
|
+
/** `tools[]` `mcp__*` tool definitions. */
|
|
182
|
+
mcp_tools: CategoryUsage;
|
|
183
|
+
/** CLAUDE.md / `.claude/rules/*` (in user `<system-reminder>` blocks). */
|
|
184
|
+
rules: CategoryUsage;
|
|
185
|
+
/** MEMORY.md auto-memory. */
|
|
186
|
+
memory: CategoryUsage;
|
|
187
|
+
/** Available-skills listing (a `role:"system"` message) + invoked skill bodies. */
|
|
188
|
+
skills: CategoryUsage;
|
|
189
|
+
/** `role:"system"` hook injections + miscellaneous reminders. */
|
|
190
|
+
system_messages: CategoryUsage;
|
|
191
|
+
/** Real human prompts. */
|
|
192
|
+
user_messages: CategoryUsage;
|
|
193
|
+
/** Assistant `thinking` / `text` / `tool_use` blocks (combined). */
|
|
194
|
+
assistant_messages: CategoryUsage;
|
|
195
|
+
/** `tool_result` blocks. */
|
|
196
|
+
tool_result: CategoryUsage;
|
|
197
|
+
/** Remainder: scaffolding (`metadata`/`betas`/…) + JSON structural bytes. */
|
|
198
|
+
others: CategoryUsage;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Context-window usage breakdown for one Claude Code Messages API request,
|
|
202
|
+
* derived by the local OTEL collector daemon from the raw request body
|
|
203
|
+
* (`OTEL_LOG_RAW_API_BODIES=file:<dir>`). Ships only structural signals (sizes
|
|
204
|
+
* / counts / labels) — never content.
|
|
205
|
+
*
|
|
206
|
+
* Extends the flat `Event` (not activity-aware): the daemon is outside the hook
|
|
207
|
+
* pipeline and has no `activity_id`. Backend correlates to a turn via
|
|
208
|
+
* `session_id` + `timestamp` (set to the request time).
|
|
209
|
+
*/
|
|
210
|
+
export interface SessionContextEvent extends Event {
|
|
211
|
+
type: "session_context";
|
|
212
|
+
/** OTEL `event.sequence` (orders requests within a session); `null` on the catch-up path. */
|
|
213
|
+
sequence_number: number | null;
|
|
214
|
+
/** e.g. `"claude-opus-4-7"`. */
|
|
215
|
+
model: string;
|
|
216
|
+
/**
|
|
217
|
+
* `"repl_main_thread"` / `"compact"` / `"generate_session_title"` / a
|
|
218
|
+
* subagent name. Lets the backend separate main-thread context from
|
|
219
|
+
* background/utility calls. `null` on the catch-up path (event-only field).
|
|
220
|
+
*/
|
|
221
|
+
query_source: string | null;
|
|
222
|
+
/** Sum of all category bytes (≈ the request body size). */
|
|
223
|
+
total_input_bytes: number;
|
|
224
|
+
/** `total_input_bytes / BYTES_PER_TOKEN` — indicative. */
|
|
225
|
+
total_input_tokens_approx: number;
|
|
226
|
+
breakdown: SessionContextBreakdown;
|
|
227
|
+
/**
|
|
228
|
+
* Per-name sub-breakdown of four of the fixed `breakdown` categories. Each
|
|
229
|
+
* map's `CategoryUsage` bytes sum **exactly** to the matching `breakdown`
|
|
230
|
+
* category total — bytes that can't be attributed to a specific name land in
|
|
231
|
+
* an `[other]` key, so the detail always reconciles with the aggregate.
|
|
232
|
+
* Keys are structural labels (server / file / skill / tool names), never content.
|
|
233
|
+
*/
|
|
234
|
+
breakdown_detail: {
|
|
235
|
+
/** `mcp_tools` split by MCP server (`mcp__<server>__<tool>` → `<server>`). Sums to `breakdown.mcp_tools`. */
|
|
236
|
+
mcp_tools_by_server: Record<string, CategoryUsage>;
|
|
237
|
+
/** `rules` split by source file basename (CLAUDE.md / imported fragments / `.claude/rules/*`). Sums to `breakdown.rules`. */
|
|
238
|
+
rules_by_name: Record<string, CategoryUsage>;
|
|
239
|
+
/** `skills` split by skill name (from the `- <name>: <desc>` listing lines). Sums to `breakdown.skills`. */
|
|
240
|
+
skills_by_name: Record<string, CategoryUsage>;
|
|
241
|
+
/**
|
|
242
|
+
* `tool_result` split by the tool that produced it, joined within the body
|
|
243
|
+
* (`tool_use_id` → name). Key is our own format: `<server>:<tool>` for MCP
|
|
244
|
+
* (the `mcp__` host prefix dropped), bare name for built-ins (`Bash`).
|
|
245
|
+
* Orphan results (originating `tool_use` compacted away) → `[other]`.
|
|
246
|
+
* Sums to `breakdown.tool_result`.
|
|
247
|
+
*/
|
|
248
|
+
tool_results_by_name: Record<string, CategoryUsage>;
|
|
249
|
+
};
|
|
250
|
+
tool_counts: {
|
|
251
|
+
builtin: number;
|
|
252
|
+
mcp: number;
|
|
253
|
+
total: number;
|
|
254
|
+
};
|
|
255
|
+
message_counts: {
|
|
256
|
+
user: number;
|
|
257
|
+
assistant: number;
|
|
258
|
+
tool_result: number;
|
|
259
|
+
system: number;
|
|
260
|
+
};
|
|
261
|
+
}
|
|
150
262
|
//# sourceMappingURL=event.d.ts.map
|
package/dist/lib/event.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/lib/event.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,8DAA8D;AAC9D,eAAO,MAAM,SAAS,EAAE;IACpB,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,gBAAgB,CAAC;IAC1C,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAC;IACtC,QAAQ,CAAC,kBAAkB,EAAE,oBAAoB,CAAC;IAClD,QAAQ,CAAC,gBAAgB,EAAE,kBAAkB,CAAC;IAC9C,QAAQ,CAAC,sBAAsB,EAAE,wBAAwB,CAAC;IAC1D,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC;IACxC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;IAChD,QAAQ,CAAC,YAAY,EAAE,wBAAwB,CAAC;IAChD,QAAQ,CAAC,iBAAiB,EAAE,6BAA6B,CAAC;IAC1D,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/lib/event.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/event.js
CHANGED
package/dist/lib/event.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event.js","sourceRoot":"","sources":["../../src/lib/event.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;AAEH,8DAA8D;AACjD,QAAA,SAAS,
|
|
1
|
+
{"version":3,"file":"event.js","sourceRoot":"","sources":["../../src/lib/event.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;AAEH,8DAA8D;AACjD,QAAA,SAAS,GAmBlB;IACA,aAAa,EAAE,eAAe;IAC9B,WAAW,EAAE,aAAa;IAC1B,cAAc,EAAE,gBAAgB;IAChC,YAAY,EAAE,cAAc;IAC5B,kBAAkB,EAAE,oBAAoB;IACxC,gBAAgB,EAAE,kBAAkB;IACpC,sBAAsB,EAAE,wBAAwB;IAChD,aAAa,EAAE,eAAe;IAC9B,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,aAAa;IAC1B,SAAS,EAAE,WAAW;IACtB,iBAAiB,EAAE,mBAAmB;IACtC,YAAY,EAAE,wBAAwB;IACtC,iBAAiB,EAAE,6BAA6B;IAChD,WAAW,EAAE,aAAa;IAC1B,cAAc,EAAE,gBAAgB;IAChC,eAAe,EAAE,iBAAiB;CAC5B,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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitignore.d.ts","sourceRoot":"","sources":["../../src/lib/gitignore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;
|
|
1
|
+
{"version":3,"file":"gitignore.d.ts","sourceRoot":"","sources":["../../src/lib/gitignore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AA2EH;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CA2BhE"}
|
package/dist/lib/gitignore.js
CHANGED
|
@@ -37,6 +37,12 @@ const IGNORE_ENTRIES = [
|
|
|
37
37
|
pattern: ".ironbee/sessions/",
|
|
38
38
|
lines: ["", IRONBEE_HEADER, ".ironbee/sessions/"],
|
|
39
39
|
},
|
|
40
|
+
{
|
|
41
|
+
// Raw OTLP request/response bodies the OTEL collector daemon consumes
|
|
42
|
+
// (consume-once; never committed — they carry full prompts / outputs).
|
|
43
|
+
pattern: ".ironbee/otel/",
|
|
44
|
+
lines: [".ironbee/otel/"],
|
|
45
|
+
},
|
|
40
46
|
{
|
|
41
47
|
pattern: ".ironbee/config.local.json",
|
|
42
48
|
// Standalone append — do NOT re-print the header, the sessions
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitignore.js","sourceRoot":"","sources":["../../src/lib/gitignore.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;;
|
|
1
|
+
{"version":3,"file":"gitignore.js","sourceRoot":"","sources":["../../src/lib/gitignore.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;;AAkFH,0DA2BC;AA3GD,2BAA6D;AAC7D,+BAA4B;AAC5B,qCAAkC;AAoBlC,MAAM,cAAc,GAAW,6BAA6B,CAAC;AAE7D,MAAM,cAAc,GAAkB;IAClC;QACI,OAAO,EAAE,oBAAoB;QAC7B,KAAK,EAAE,CAAC,EAAE,EAAE,cAAc,EAAE,oBAAoB,CAAC;KACpD;IACD;QACI,sEAAsE;QACtE,uEAAuE;QACvE,OAAO,EAAE,gBAAgB;QACzB,KAAK,EAAE,CAAC,gBAAgB,CAAC;KAC5B;IACD;QACI,OAAO,EAAE,4BAA4B;QACrC,+DAA+D;QAC/D,oEAAoE;QACpE,KAAK,EAAE,CAAC,4BAA4B,CAAC;KACxC;IACD;QACI,qEAAqE;QACrE,mEAAmE;QACnE,iEAAiE;QACjE,kEAAkE;QAClE,kEAAkE;QAClE,qEAAqE;QACrE,iCAAiC;QACjC,OAAO,EAAE,6BAA6B;QACtC,KAAK,EAAE,CAAC,6BAA6B,CAAC;KACzC;CACJ,CAAC;AAEF;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,QAAgB,EAAE,OAAe;IAC5D,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,GAAW,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACvD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACpE,SAAS;QACb,CAAC;QACD,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,uBAAuB,CAAC,UAAkB;IACtD,IAAI,CAAC,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;QAC1B,eAAM,CAAC,KAAK,CAAC,yBAAyB,UAAU,4BAA4B,CAAC,CAAC;QAC9E,OAAO;IACX,CAAC;IACD,MAAM,aAAa,GAAW,IAAA,WAAI,EAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAC7D,IAAI,CAAC;QACD,IAAI,QAAQ,GAAW,IAAA,eAAU,EAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAA,iBAAY,EAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,IAAI,OAAO,GAAY,KAAK,CAAC;QAC7B,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACjC,IAAI,qBAAqB,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACjD,SAAS;YACb,CAAC;YACD,gEAAgE;YAChE,qDAAqD;YACrD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClD,QAAQ,IAAI,IAAI,CAAC;YACrB,CAAC;YACD,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YAC1C,OAAO,GAAG,IAAI,CAAC;QACnB,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACV,IAAA,kBAAa,EAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QAC3C,CAAC;IACL,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAClB,eAAM,CAAC,KAAK,CAAC,oBAAoB,aAAa,YAAY,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACpG,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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"}
|
package/dist/lib/version.d.ts
CHANGED
|
@@ -6,5 +6,10 @@
|
|
|
6
6
|
*/
|
|
7
7
|
export declare function getLocalVersion(): string;
|
|
8
8
|
export declare function fetchLatestVersion(): Promise<string | null>;
|
|
9
|
+
/**
|
|
10
|
+
* Compare two dotted numeric versions (`x.y.z`). Returns `1` if `a > b`, `-1`
|
|
11
|
+
* if `a < b`, `0` if equal. Missing segments are treated as `0`.
|
|
12
|
+
*/
|
|
13
|
+
export declare function compareVersions(a: string, b: string): number;
|
|
9
14
|
export declare function checkForUpdates(): Promise<void>;
|
|
10
15
|
//# sourceMappingURL=version.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/lib/version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,wBAAgB,eAAe,IAAI,MAAM,CASxC;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAwB3D;
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/lib/version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,wBAAgB,eAAe,IAAI,MAAM,CASxC;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAwB3D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAe5D;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CA2BrD"}
|
package/dist/lib/version.js
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.getLocalVersion = getLocalVersion;
|
|
10
10
|
exports.fetchLatestVersion = fetchLatestVersion;
|
|
11
|
+
exports.compareVersions = compareVersions;
|
|
11
12
|
exports.checkForUpdates = checkForUpdates;
|
|
12
13
|
const https_1 = require("https");
|
|
13
14
|
const fs_1 = require("fs");
|
|
@@ -48,6 +49,10 @@ function fetchLatestVersion() {
|
|
|
48
49
|
});
|
|
49
50
|
});
|
|
50
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* Compare two dotted numeric versions (`x.y.z`). Returns `1` if `a > b`, `-1`
|
|
54
|
+
* if `a < b`, `0` if equal. Missing segments are treated as `0`.
|
|
55
|
+
*/
|
|
51
56
|
function compareVersions(a, b) {
|
|
52
57
|
const pa = a.split(".").map(Number);
|
|
53
58
|
const pb = b.split(".").map(Number);
|
package/dist/lib/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/lib/version.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAOH,0CASC;AAED,gDAwBC;
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/lib/version.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IronBee — OTEL Collector daemon
|
|
3
|
+
*
|
|
4
|
+
* A machine-global OTLP/HTTP (JSON) receiver. Claude Code, when run with
|
|
5
|
+
* telemetry enabled, exports its log/event records over OTLP to this daemon
|
|
6
|
+
* (one per machine, shared by every concurrent session). Point it at the
|
|
7
|
+
* daemon with:
|
|
8
|
+
*
|
|
9
|
+
* export CLAUDE_CODE_ENABLE_TELEMETRY=1
|
|
10
|
+
* export OTEL_LOGS_EXPORTER=otlp
|
|
11
|
+
* export OTEL_EXPORTER_OTLP_PROTOCOL=http/json
|
|
12
|
+
* export OTEL_EXPORTER_OTLP_ENDPOINT=http://127.0.0.1:15986
|
|
13
|
+
*
|
|
14
|
+
* Endpoints:
|
|
15
|
+
* - `POST /v1/logs` → `log-handler.ts`
|
|
16
|
+
* - `POST /v1/traces` → `trace-handler.ts` (noop)
|
|
17
|
+
* - `POST /v1/metrics` → `metric-handler.ts` (noop)
|
|
18
|
+
* - `GET /health` → version / pid / idle / observability counters
|
|
19
|
+
* - `POST /admin/shutdown` → graceful shutdown (used by version self-replace)
|
|
20
|
+
*
|
|
21
|
+
* Singleton via port-bind arbitration: only one process can `listen()` on the
|
|
22
|
+
* port, so a losing race just gets `EADDRINUSE` and exits. Idle self-reap and
|
|
23
|
+
* graceful shutdown are HTTP/timer driven (no signals — cross-platform).
|
|
24
|
+
*
|
|
25
|
+
* Zero third-party deps: Node `http` + `zlib` only.
|
|
26
|
+
*/
|
|
27
|
+
import { OTELCollectorOptions } from "./types";
|
|
28
|
+
export declare class OTELLogCollector {
|
|
29
|
+
private server;
|
|
30
|
+
private readonly host;
|
|
31
|
+
private readonly requestedPort;
|
|
32
|
+
private readonly idleTimeoutMs;
|
|
33
|
+
private readonly onShutdown?;
|
|
34
|
+
private readonly metricsProvider;
|
|
35
|
+
private readonly pipeline;
|
|
36
|
+
private startedAt;
|
|
37
|
+
private lastActiveAt;
|
|
38
|
+
private idleTimer;
|
|
39
|
+
private shuttingDown;
|
|
40
|
+
constructor(opts?: OTELCollectorOptions);
|
|
41
|
+
/** Start listening. Resolves once bound; rejects on a bind error (e.g. EADDRINUSE). */
|
|
42
|
+
start(): Promise<void>;
|
|
43
|
+
/** The actually-bound port (handles `port: 0` / OS-assigned). `null` before start. */
|
|
44
|
+
boundPort(): number | null;
|
|
45
|
+
/** Stop listening. Resolves once the server is closed (no-op when not started). */
|
|
46
|
+
stop(): Promise<void>;
|
|
47
|
+
private armIdleTimer;
|
|
48
|
+
private disarmIdleTimer;
|
|
49
|
+
/**
|
|
50
|
+
* Graceful shutdown (idle-reap or `/admin/shutdown`): stop accepting, close
|
|
51
|
+
* the server, then invoke `onShutdown`. Idempotent. (The work-queue drain +
|
|
52
|
+
* forward flush land with the forward pipeline.)
|
|
53
|
+
*/
|
|
54
|
+
private gracefulShutdown;
|
|
55
|
+
private handleRequest;
|
|
56
|
+
private buildHealth;
|
|
57
|
+
/** Read the (optionally gzip'd) request body, then run `fn`; body-read errors → HTTP 400. */
|
|
58
|
+
private withBody;
|
|
59
|
+
private collectBody;
|
|
60
|
+
/** Consume and discard a request body, then run `done` (used for unknown paths). */
|
|
61
|
+
private drain;
|
|
62
|
+
private respond;
|
|
63
|
+
}
|
|
64
|
+
/** Construct and start an {@link OTELLogCollector} in one call. */
|
|
65
|
+
export declare function startOTELLogCollector(opts?: OTELCollectorOptions): Promise<OTELLogCollector>;
|
|
66
|
+
//# sourceMappingURL=collector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../src/otel/collector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAOH,OAAO,EACH,oBAAoB,EAIvB,MAAM,SAAS,CAAC;AAuBjB,qBAAa,gBAAgB;IACzB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAa;IACzC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA2B;IAC3D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAE3C,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,YAAY,CAAkB;gBAE1B,IAAI,CAAC,EAAE,oBAAoB;IAUvC,uFAAuF;IAChF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB7B,sFAAsF;IAC/E,SAAS,IAAI,MAAM,GAAG,IAAI;IAKjC,mFAAmF;IAC5E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB5B,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,eAAe;IAOvB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,aAAa;IAwErB,OAAO,CAAC,WAAW;IAiBnB,6FAA6F;IAC7F,OAAO,CAAC,QAAQ;IAWhB,OAAO,CAAC,WAAW;IA6CnB,oFAAoF;IACpF,OAAO,CAAC,KAAK;IAMb,OAAO,CAAC,OAAO;CAQlB;AAED,mEAAmE;AACnE,wBAAsB,qBAAqB,CAAC,IAAI,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAIlG"}
|