@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
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* IronBee — Config area view (mounted inside the TUI shell)
|
|
4
|
+
*
|
|
5
|
+
* Collapsible, segment-grouped key tree on the left; per-key detail (all three
|
|
6
|
+
* layers + env + merged effective) or a group summary on the right. Edit / unset
|
|
7
|
+
* any layer in place. Mounts into the shell's content region; it does NOT own
|
|
8
|
+
* the screen, the exit flow, or the artifact rerender — artifact-affecting edits
|
|
9
|
+
* call `ctx.session.markRerenderNeeded()` and the shell re-renders once on exit.
|
|
10
|
+
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
+
}) : function(o, v) {
|
|
25
|
+
o["default"] = v;
|
|
26
|
+
});
|
|
27
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
28
|
+
var ownKeys = function(o) {
|
|
29
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
30
|
+
var ar = [];
|
|
31
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
32
|
+
return ar;
|
|
33
|
+
};
|
|
34
|
+
return ownKeys(o);
|
|
35
|
+
};
|
|
36
|
+
return function (mod) {
|
|
37
|
+
if (mod && mod.__esModule) return mod;
|
|
38
|
+
var result = {};
|
|
39
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
40
|
+
__setModuleDefault(result, mod);
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
})();
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.mountConfigView = mountConfigView;
|
|
46
|
+
const blessed = __importStar(require("blessed"));
|
|
47
|
+
const registry_1 = require("../../clients/registry");
|
|
48
|
+
const install_1 = require("../../commands/install");
|
|
49
|
+
const config_1 = require("../../lib/config");
|
|
50
|
+
const projects_registry_1 = require("../../lib/projects-registry");
|
|
51
|
+
const util_1 = require("../shell/util");
|
|
52
|
+
const edit_1 = require("./edit");
|
|
53
|
+
const introspect_1 = require("./introspect");
|
|
54
|
+
const schema_1 = require("./schema");
|
|
55
|
+
const tree_1 = require("./tree");
|
|
56
|
+
const value_1 = require("./value");
|
|
57
|
+
const LAYER_LABELS = {
|
|
58
|
+
global: "global ",
|
|
59
|
+
project: "project",
|
|
60
|
+
local: "local ",
|
|
61
|
+
};
|
|
62
|
+
const STATUS = " {bold}↑/↓{/bold} move {bold}Enter{/bold} expand/collapse "
|
|
63
|
+
+ "{bold}e{/bold}/{bold}g{/bold}/{bold}l{/bold} edit project/global/local "
|
|
64
|
+
+ "{bold}x{/bold} unset {bold}/{/bold} search {bold}Esc{/bold} back {bold}q{/bold} quit";
|
|
65
|
+
/** Short label for where a key's effective value comes from. */
|
|
66
|
+
function sourceLabel(eff) {
|
|
67
|
+
return eff === "none" ? "default" : eff;
|
|
68
|
+
}
|
|
69
|
+
/** Mount the config browser into `ctx.container`. Returns an unmount handle. */
|
|
70
|
+
function mountConfigView(ctx) {
|
|
71
|
+
const projectDir = ctx.session.projectDir;
|
|
72
|
+
const allEntries = (0, schema_1.orderedEntries)();
|
|
73
|
+
let layers = (0, introspect_1.loadLayers)(projectDir);
|
|
74
|
+
let searchTerm = "";
|
|
75
|
+
let buckets = [];
|
|
76
|
+
let rows = [];
|
|
77
|
+
let index = 0;
|
|
78
|
+
const collapsed = new Set((0, tree_1.groupEntries)(allEntries).map((b) => b.group));
|
|
79
|
+
const list = blessed.list({
|
|
80
|
+
parent: ctx.container,
|
|
81
|
+
top: 0,
|
|
82
|
+
left: 0,
|
|
83
|
+
width: "46%",
|
|
84
|
+
height: "100%",
|
|
85
|
+
border: { type: "line" },
|
|
86
|
+
label: " Config keys ",
|
|
87
|
+
tags: true,
|
|
88
|
+
keys: false,
|
|
89
|
+
mouse: false,
|
|
90
|
+
scrollbar: { ch: " " },
|
|
91
|
+
style: { selected: { bg: "blue", fg: "white" }, border: { fg: "cyan" } },
|
|
92
|
+
items: [],
|
|
93
|
+
});
|
|
94
|
+
const detail = blessed.box({
|
|
95
|
+
parent: ctx.container,
|
|
96
|
+
top: 0,
|
|
97
|
+
left: "46%",
|
|
98
|
+
width: "54%",
|
|
99
|
+
height: "100%",
|
|
100
|
+
border: { type: "line" },
|
|
101
|
+
label: " Detail ",
|
|
102
|
+
tags: true,
|
|
103
|
+
scrollable: true,
|
|
104
|
+
alwaysScroll: true,
|
|
105
|
+
scrollbar: { ch: " " },
|
|
106
|
+
style: { border: { fg: "cyan" } },
|
|
107
|
+
content: "",
|
|
108
|
+
});
|
|
109
|
+
function currentRow() {
|
|
110
|
+
return rows.length === 0 ? undefined : rows[(0, util_1.clamp)(index, 0, rows.length - 1)];
|
|
111
|
+
}
|
|
112
|
+
function currentEntry() {
|
|
113
|
+
const row = currentRow();
|
|
114
|
+
return row !== undefined && row.kind === "key" ? row.entry : undefined;
|
|
115
|
+
}
|
|
116
|
+
function currentGroup() {
|
|
117
|
+
return currentRow()?.group;
|
|
118
|
+
}
|
|
119
|
+
function effectiveTag(intro, layer) {
|
|
120
|
+
return intro.effective === layer ? " {green-fg}← effective{/green-fg}" : "";
|
|
121
|
+
}
|
|
122
|
+
function buildKeyDetail(entry) {
|
|
123
|
+
const intro = (0, introspect_1.introspectKey)(entry.path, layers);
|
|
124
|
+
const lines = [];
|
|
125
|
+
const artifact = entry.artifactAffecting
|
|
126
|
+
? "{yellow-fg}artifact-affecting{/yellow-fg}"
|
|
127
|
+
: "{gray-fg}runtime-only{/gray-fg}";
|
|
128
|
+
lines.push(`{bold}{cyan-fg}${(0, util_1.escapeTags)(entry.path)}{/cyan-fg}{/bold} {gray-fg}[${entry.type}]{/gray-fg} ${artifact}`);
|
|
129
|
+
lines.push("{gray-fg}" + "─".repeat(48) + "{/gray-fg}");
|
|
130
|
+
lines.push((0, util_1.escapeTags)(entry.description));
|
|
131
|
+
lines.push("");
|
|
132
|
+
lines.push(`{gray-fg}default:{/gray-fg} ${(0, util_1.escapeTags)(entry.def)}`);
|
|
133
|
+
lines.push("");
|
|
134
|
+
lines.push("{bold}Layers{/bold}");
|
|
135
|
+
for (const lv of intro.layers) {
|
|
136
|
+
const valStr = lv.present
|
|
137
|
+
? (0, util_1.escapeTags)((0, value_1.formatValueShort)(lv.value, 200))
|
|
138
|
+
: "{gray-fg}(unset){/gray-fg}";
|
|
139
|
+
lines.push(` ${LAYER_LABELS[lv.layer]} ${valStr}${effectiveTag(intro, lv.layer)}`);
|
|
140
|
+
}
|
|
141
|
+
if (intro.envOverride !== undefined) {
|
|
142
|
+
const envVal = (0, util_1.escapeTags)((0, value_1.formatValueShort)(intro.envOverride.value, 40));
|
|
143
|
+
const eff = intro.effective === "env" ? " {green-fg}← effective{/green-fg}" : "";
|
|
144
|
+
lines.push(` {magenta-fg}env {/magenta-fg} ${(0, util_1.escapeTags)(intro.envOverride.envVar)} = ${envVal}${eff}`);
|
|
145
|
+
lines.push(" {gray-fg}(env overrides every file layer until unset){/gray-fg}");
|
|
146
|
+
}
|
|
147
|
+
lines.push("");
|
|
148
|
+
const source = intro.effective === "none"
|
|
149
|
+
? "{gray-fg}unset everywhere{/gray-fg}"
|
|
150
|
+
: `{green-fg}${intro.effective}{/green-fg}`;
|
|
151
|
+
lines.push(`{bold}Effective (merged):{/bold} ${source}`);
|
|
152
|
+
const mergedStr = intro.merged === undefined
|
|
153
|
+
? "{gray-fg}(unset — runtime falls back to the default above){/gray-fg}"
|
|
154
|
+
: (0, util_1.escapeTags)((0, value_1.formatValue)(intro.merged));
|
|
155
|
+
lines.push(mergedStr);
|
|
156
|
+
return lines.join("\n");
|
|
157
|
+
}
|
|
158
|
+
function buildGroupDetail(group) {
|
|
159
|
+
const bucket = buckets.find((b) => b.group === group);
|
|
160
|
+
const lines = [];
|
|
161
|
+
const title = bucket?.title ?? group;
|
|
162
|
+
const count = bucket?.entries.length ?? 0;
|
|
163
|
+
lines.push(`{bold}${(0, util_1.escapeTags)(title)}{/bold} {gray-fg}(${count} ${count === 1 ? "key" : "keys"}){/gray-fg}`);
|
|
164
|
+
lines.push("{gray-fg}" + "─".repeat(48) + "{/gray-fg}");
|
|
165
|
+
lines.push("{gray-fg}Enter / → expand · ← collapse{/gray-fg}");
|
|
166
|
+
lines.push("");
|
|
167
|
+
if (bucket !== undefined) {
|
|
168
|
+
for (const e of bucket.entries) {
|
|
169
|
+
const intro = (0, introspect_1.introspectKey)(e.path, layers);
|
|
170
|
+
const val = intro.merged === undefined
|
|
171
|
+
? "{gray-fg}(unset){/gray-fg}"
|
|
172
|
+
: (0, util_1.escapeTags)((0, value_1.formatValueShort)(intro.merged, 26));
|
|
173
|
+
const src = `{gray-fg}[${sourceLabel(intro.effective)}]{/gray-fg}`;
|
|
174
|
+
lines.push(` {cyan-fg}${(0, util_1.escapeTags)(e.path)}{/cyan-fg}`);
|
|
175
|
+
lines.push(` ${val} ${src}`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return lines.join("\n");
|
|
179
|
+
}
|
|
180
|
+
function rowLabel(row) {
|
|
181
|
+
if (row.kind === "header") {
|
|
182
|
+
const arrow = row.collapsed ? "▸" : "▾";
|
|
183
|
+
return `{bold}${arrow} ${(0, util_1.escapeTags)(row.title)}{/bold} {gray-fg}(${row.count}){/gray-fg}`;
|
|
184
|
+
}
|
|
185
|
+
const entry = row.entry;
|
|
186
|
+
const intro = (0, introspect_1.introspectKey)(entry.path, layers);
|
|
187
|
+
const raw = entry.path.length > 24 ? entry.path.slice(0, 23) + "…" : entry.path.padEnd(24, " ");
|
|
188
|
+
const val = intro.effective === "none"
|
|
189
|
+
? "{gray-fg}(unset){/gray-fg}"
|
|
190
|
+
: "{gray-fg}" + (0, util_1.escapeTags)((0, value_1.formatValueShort)(intro.merged, 40)) + "{/gray-fg}";
|
|
191
|
+
return ` ${(0, util_1.escapeTags)(raw)} ${val}`;
|
|
192
|
+
}
|
|
193
|
+
function rebuild() {
|
|
194
|
+
const term = searchTerm.trim().toLowerCase();
|
|
195
|
+
const filtered = term.length === 0
|
|
196
|
+
? allEntries
|
|
197
|
+
: allEntries.filter((e) => e.path.toLowerCase().includes(term));
|
|
198
|
+
buckets = (0, tree_1.groupEntries)(filtered);
|
|
199
|
+
rows = (0, tree_1.buildTreeRows)(buckets, collapsed);
|
|
200
|
+
index = (0, util_1.clamp)(index, 0, Math.max(0, rows.length - 1));
|
|
201
|
+
}
|
|
202
|
+
function rebuildRowsOnly() {
|
|
203
|
+
rows = (0, tree_1.buildTreeRows)(buckets, collapsed);
|
|
204
|
+
index = (0, util_1.clamp)(index, 0, Math.max(0, rows.length - 1));
|
|
205
|
+
}
|
|
206
|
+
function renderList() {
|
|
207
|
+
list.setItems(rows.map((r) => rowLabel(r)));
|
|
208
|
+
if (rows.length > 0) {
|
|
209
|
+
list.select((0, util_1.clamp)(index, 0, rows.length - 1));
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
function renderDetail() {
|
|
213
|
+
const row = currentRow();
|
|
214
|
+
if (row === undefined) {
|
|
215
|
+
detail.setContent("{gray-fg}No keys match the current filter.{/gray-fg}");
|
|
216
|
+
}
|
|
217
|
+
else if (row.kind === "header") {
|
|
218
|
+
detail.setContent(buildGroupDetail(row.group));
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
detail.setContent(buildKeyDetail(row.entry));
|
|
222
|
+
}
|
|
223
|
+
detail.setScroll(0);
|
|
224
|
+
}
|
|
225
|
+
function renderView() {
|
|
226
|
+
renderList();
|
|
227
|
+
renderDetail();
|
|
228
|
+
ctx.screen.render();
|
|
229
|
+
}
|
|
230
|
+
function reloadAndRender() {
|
|
231
|
+
layers = (0, introspect_1.loadLayers)(projectDir);
|
|
232
|
+
renderView();
|
|
233
|
+
}
|
|
234
|
+
function move(delta) {
|
|
235
|
+
if (rows.length === 0) {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
index = (0, util_1.clamp)(index + delta, 0, rows.length - 1);
|
|
239
|
+
renderView();
|
|
240
|
+
}
|
|
241
|
+
function headerIndexOf(group) {
|
|
242
|
+
return rows.findIndex((r) => r.kind === "header" && r.group === group);
|
|
243
|
+
}
|
|
244
|
+
function toggleGroup() {
|
|
245
|
+
const group = currentGroup();
|
|
246
|
+
if (group === undefined) {
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
if (collapsed.has(group)) {
|
|
250
|
+
collapsed.delete(group);
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
collapsed.add(group);
|
|
254
|
+
}
|
|
255
|
+
rebuildRowsOnly();
|
|
256
|
+
const hi = headerIndexOf(group);
|
|
257
|
+
if (hi >= 0) {
|
|
258
|
+
index = hi;
|
|
259
|
+
}
|
|
260
|
+
renderView();
|
|
261
|
+
}
|
|
262
|
+
function collapseCurrent() {
|
|
263
|
+
const group = currentGroup();
|
|
264
|
+
if (group === undefined || collapsed.has(group)) {
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
collapsed.add(group);
|
|
268
|
+
rebuildRowsOnly();
|
|
269
|
+
const hi = headerIndexOf(group);
|
|
270
|
+
if (hi >= 0) {
|
|
271
|
+
index = hi;
|
|
272
|
+
}
|
|
273
|
+
renderView();
|
|
274
|
+
}
|
|
275
|
+
function expandCurrent() {
|
|
276
|
+
const group = currentGroup();
|
|
277
|
+
if (group === undefined || !collapsed.has(group)) {
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
collapsed.delete(group);
|
|
281
|
+
rebuildRowsOnly();
|
|
282
|
+
renderView();
|
|
283
|
+
}
|
|
284
|
+
function performUnset(layer, entry) {
|
|
285
|
+
const targetPath = (0, config_1.getTargetConfigPath)(layer, projectDir);
|
|
286
|
+
try {
|
|
287
|
+
const result = (0, edit_1.unsetLayerValue)(targetPath, entry.path);
|
|
288
|
+
if (result.removed && result.artifactAffecting) {
|
|
289
|
+
ctx.session.markRerenderNeeded(projectDir);
|
|
290
|
+
}
|
|
291
|
+
reloadAndRender();
|
|
292
|
+
if (!result.removed) {
|
|
293
|
+
ctx.session.message(`${entry.path} was not set in the ${layer} layer.`);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
catch (e) {
|
|
297
|
+
ctx.session.message(`Unset failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
function offerApplyToOtherProjects() {
|
|
301
|
+
const here = (0, projects_registry_1.canonicalizePath)(projectDir);
|
|
302
|
+
const others = (0, registry_1.listActiveProjects)().filter((p) => p.path !== here);
|
|
303
|
+
if (others.length === 0) {
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
ctx.session.confirm(`Global change saved. Apply it to ${others.length} other registered project(s) now?`, (yes) => {
|
|
307
|
+
if (!yes) {
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
void ctx.session.runWithOutput("Apply global config to all registered projects", async () => {
|
|
311
|
+
await (0, install_1.runInstallAll)({});
|
|
312
|
+
});
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
function editLayer(layer) {
|
|
316
|
+
const entry = currentEntry();
|
|
317
|
+
if (entry === undefined) {
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
const targetPath = (0, config_1.getTargetConfigPath)(layer, projectDir);
|
|
321
|
+
const intro = (0, introspect_1.introspectKey)(entry.path, layers);
|
|
322
|
+
const layerVal = intro.layers.find((l) => l.layer === layer);
|
|
323
|
+
const present = layerVal !== undefined && layerVal.present;
|
|
324
|
+
const prefill = (0, value_1.editorPrefill)(entry.editor, layerVal?.value, present);
|
|
325
|
+
const label = `Set ${entry.path} in ${layer} (${(0, value_1.editorHint)(entry.editor, entry.enumValues)}) — Enter to save, Esc to cancel`;
|
|
326
|
+
ctx.session.prompt(label, prefill, (raw) => {
|
|
327
|
+
if (raw === null) {
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
try {
|
|
331
|
+
const parsed = (0, value_1.parseEditorInput)(entry.editor, raw);
|
|
332
|
+
const result = (0, edit_1.setLayerValue)(targetPath, entry.path, parsed.raw, parsed.json);
|
|
333
|
+
if (result.artifactAffecting) {
|
|
334
|
+
ctx.session.markRerenderNeeded(projectDir);
|
|
335
|
+
}
|
|
336
|
+
reloadAndRender();
|
|
337
|
+
if (layer === "global" && result.artifactAffecting) {
|
|
338
|
+
offerApplyToOtherProjects();
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
catch (e) {
|
|
342
|
+
ctx.session.message(`Write failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
343
|
+
}
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
function unsetFlow() {
|
|
347
|
+
const entry = currentEntry();
|
|
348
|
+
if (entry === undefined) {
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
const intro = (0, introspect_1.introspectKey)(entry.path, layers);
|
|
352
|
+
const present = intro.layers.filter((l) => l.present);
|
|
353
|
+
if (present.length === 0) {
|
|
354
|
+
ctx.session.message(`${entry.path} is not set in any file layer.`);
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
if (present.length === 1) {
|
|
358
|
+
performUnset(present[0].layer, entry);
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
361
|
+
ctx.session.pick("Unset from which layer?", present.map((l) => l.layer), (idx) => {
|
|
362
|
+
if (idx >= 0 && idx < present.length) {
|
|
363
|
+
performUnset(present[idx].layer, entry);
|
|
364
|
+
}
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
function searchFlow() {
|
|
368
|
+
ctx.session.prompt("Filter keys by substring (empty clears):", searchTerm, (raw) => {
|
|
369
|
+
if (raw === null) {
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
searchTerm = raw;
|
|
373
|
+
index = 0;
|
|
374
|
+
if (raw.trim().length === 0) {
|
|
375
|
+
for (const b of (0, tree_1.groupEntries)(allEntries)) {
|
|
376
|
+
collapsed.add(b.group);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
else {
|
|
380
|
+
collapsed.clear();
|
|
381
|
+
}
|
|
382
|
+
rebuild();
|
|
383
|
+
renderView();
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
// Functional keys are bound to the list (the focused widget), so they only
|
|
387
|
+
// fire while the list has focus — i.e. NOT while a shared modal (prompt /
|
|
388
|
+
// pick / message) is up, since those steal focus. `list.destroy()` on
|
|
389
|
+
// unmount removes them. The shell owns the only global keys (Esc=back,
|
|
390
|
+
// q=quit) via `screen.key`.
|
|
391
|
+
list.key(["up", "k"], () => move(-1));
|
|
392
|
+
list.key(["down", "j"], () => move(1));
|
|
393
|
+
list.key(["pageup"], () => move(-10));
|
|
394
|
+
list.key(["pagedown"], () => move(10));
|
|
395
|
+
list.key(["home"], () => {
|
|
396
|
+
index = 0;
|
|
397
|
+
renderView();
|
|
398
|
+
});
|
|
399
|
+
list.key(["end"], () => {
|
|
400
|
+
index = rows.length - 1;
|
|
401
|
+
renderView();
|
|
402
|
+
});
|
|
403
|
+
list.key(["enter", "space"], () => toggleGroup());
|
|
404
|
+
list.key(["right"], () => expandCurrent());
|
|
405
|
+
list.key(["left"], () => collapseCurrent());
|
|
406
|
+
list.key(["e"], () => editLayer("project"));
|
|
407
|
+
list.key(["g"], () => editLayer("global"));
|
|
408
|
+
list.key(["l"], () => editLayer("local"));
|
|
409
|
+
list.key(["x", "d"], () => unsetFlow());
|
|
410
|
+
list.key(["/"], () => searchFlow());
|
|
411
|
+
ctx.setStatus(STATUS);
|
|
412
|
+
rebuild();
|
|
413
|
+
renderView();
|
|
414
|
+
list.focus();
|
|
415
|
+
ctx.screen.render();
|
|
416
|
+
return {
|
|
417
|
+
unmount() {
|
|
418
|
+
list.destroy();
|
|
419
|
+
detail.destroy();
|
|
420
|
+
},
|
|
421
|
+
};
|
|
422
|
+
}
|
|
423
|
+
//# sourceMappingURL=view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../../src/tui/config/view.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IronBee — Import area
|
|
3
|
+
*
|
|
4
|
+
* Backfill historical Claude sessions → collector, from the TUI. Pick a scope
|
|
5
|
+
* (current project / all projects) and see a dry-run estimate; running it goes
|
|
6
|
+
* through the shared foreground runner (blocks the TUI, captures per-session
|
|
7
|
+
* progress, shows the summary). Uses only the public `src/import` barrel.
|
|
8
|
+
*/
|
|
9
|
+
import { TuiArea } from "../shell/area";
|
|
10
|
+
export declare const importArea: TuiArea;
|
|
11
|
+
//# sourceMappingURL=area.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"area.d.ts","sourceRoot":"","sources":["../../../src/tui/import/area.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiBH,OAAO,EAA2B,OAAO,EAAE,MAAM,eAAe,CAAC;AAgKjE,eAAO,MAAM,UAAU,EAAE,OAOxB,CAAC"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* IronBee — Import area
|
|
4
|
+
*
|
|
5
|
+
* Backfill historical Claude sessions → collector, from the TUI. Pick a scope
|
|
6
|
+
* (current project / all projects) and see a dry-run estimate; running it goes
|
|
7
|
+
* through the shared foreground runner (blocks the TUI, captures per-session
|
|
8
|
+
* progress, shows the summary). Uses only the public `src/import` barrel.
|
|
9
|
+
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
+
}) : function(o, v) {
|
|
24
|
+
o["default"] = v;
|
|
25
|
+
});
|
|
26
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
27
|
+
var ownKeys = function(o) {
|
|
28
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
29
|
+
var ar = [];
|
|
30
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
return ownKeys(o);
|
|
34
|
+
};
|
|
35
|
+
return function (mod) {
|
|
36
|
+
if (mod && mod.__esModule) return mod;
|
|
37
|
+
var result = {};
|
|
38
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
39
|
+
__setModuleDefault(result, mod);
|
|
40
|
+
return result;
|
|
41
|
+
};
|
|
42
|
+
})();
|
|
43
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
exports.importArea = void 0;
|
|
45
|
+
const blessed = __importStar(require("blessed"));
|
|
46
|
+
const import_1 = require("../../import");
|
|
47
|
+
const util_1 = require("../shell/util");
|
|
48
|
+
const CONCURRENCY = 4;
|
|
49
|
+
/** Preset time ranges (newest-first cycle). `since` uses parseSinceDuration forms. */
|
|
50
|
+
const RANGES = [
|
|
51
|
+
{ label: "all time", since: null },
|
|
52
|
+
{ label: "last 7 days", since: "7d" },
|
|
53
|
+
{ label: "last 30 days", since: "30d" },
|
|
54
|
+
{ label: "last 90 days", since: "90d" },
|
|
55
|
+
{ label: "last 6 months", since: "6m" },
|
|
56
|
+
{ label: "last 12 months", since: "12m" },
|
|
57
|
+
];
|
|
58
|
+
const STATUS = " {bold}s{/bold} scope {bold}t{/bold} time range {bold}f{/bold} force {bold}i{/bold} run import "
|
|
59
|
+
+ "{bold}r{/bold} refresh {bold}Esc{/bold} back {bold}q{/bold} quit";
|
|
60
|
+
function mountImportView(ctx) {
|
|
61
|
+
// Respect the switchable active project (consistent with Config / Sessions /
|
|
62
|
+
// Queue): the non-all scope targets the active project's Claude transcripts
|
|
63
|
+
// via `{ kind: "projects", paths: [projectDir] }` — NOT the raw cwd that the
|
|
64
|
+
// `current-project` scope would use.
|
|
65
|
+
const projectDir = ctx.session.projectDir;
|
|
66
|
+
let allProjects = false;
|
|
67
|
+
let force = false;
|
|
68
|
+
let rangeIdx = 0;
|
|
69
|
+
function timeRange() {
|
|
70
|
+
const since = RANGES[rangeIdx].since;
|
|
71
|
+
if (since === null) {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
const sinceMs = (0, import_1.parseSinceDuration)(since);
|
|
75
|
+
if (sinceMs === null) {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
return (0, import_1.buildTimeRange)({ sinceMs, nowMs: Date.now() });
|
|
79
|
+
}
|
|
80
|
+
const box = blessed.box({
|
|
81
|
+
parent: ctx.container,
|
|
82
|
+
top: 0,
|
|
83
|
+
left: 0,
|
|
84
|
+
width: "100%",
|
|
85
|
+
height: "100%",
|
|
86
|
+
border: { type: "line" },
|
|
87
|
+
label: " Import ",
|
|
88
|
+
tags: true,
|
|
89
|
+
scrollable: true,
|
|
90
|
+
alwaysScroll: true,
|
|
91
|
+
scrollbar: { ch: " " },
|
|
92
|
+
style: { border: { fg: "cyan" } },
|
|
93
|
+
content: "",
|
|
94
|
+
});
|
|
95
|
+
function scope() {
|
|
96
|
+
return allProjects ? { kind: "all-projects" } : { kind: "projects", paths: [projectDir] };
|
|
97
|
+
}
|
|
98
|
+
function render() {
|
|
99
|
+
const lines = [];
|
|
100
|
+
lines.push("{bold}Import historical Claude sessions → collector{/bold}");
|
|
101
|
+
lines.push("{gray-fg}" + "─".repeat(56) + "{/gray-fg}");
|
|
102
|
+
lines.push(` {gray-fg}scope:{/gray-fg} ${allProjects ? "all Claude projects" : "active project"} {gray-fg}(s){/gray-fg}`);
|
|
103
|
+
lines.push(` {gray-fg}time range:{/gray-fg} ${RANGES[rangeIdx].label} {gray-fg}(t){/gray-fg}`);
|
|
104
|
+
lines.push(` {gray-fg}force:{/gray-fg} ${force ? "{yellow-fg}on{/yellow-fg} — re-import already-imported" : "off"} {gray-fg}(f){/gray-fg}`);
|
|
105
|
+
lines.push(` {gray-fg}concurrency:{/gray-fg} ${CONCURRENCY}`);
|
|
106
|
+
lines.push("");
|
|
107
|
+
const range = timeRange();
|
|
108
|
+
let summary;
|
|
109
|
+
try {
|
|
110
|
+
// estimateImport projects analytics and logs warnings to stdout —
|
|
111
|
+
// suppress them so they don't corrupt the screen during render.
|
|
112
|
+
summary = ctx.session.silently(() => {
|
|
113
|
+
const targets = (0, import_1.applyTimeRange)((0, import_1.findTranscripts)(scope()), range);
|
|
114
|
+
return (0, import_1.estimateImport)({ targets, timeRange: range, concurrency: CONCURRENCY, force });
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
catch (e) {
|
|
118
|
+
lines.push(`{red-fg}Estimate failed:{/red-fg} ${(0, util_1.escapeTags)(e instanceof Error ? e.message : String(e))}`);
|
|
119
|
+
}
|
|
120
|
+
if (summary !== undefined) {
|
|
121
|
+
const collector = summary.collectorUrl !== null
|
|
122
|
+
? (0, util_1.escapeTags)(summary.collectorUrl)
|
|
123
|
+
: "{red-fg}not configured — import will not send events{/red-fg}";
|
|
124
|
+
lines.push(` {gray-fg}collector:{/gray-fg} ${collector}`);
|
|
125
|
+
lines.push(` {gray-fg}to import:{/gray-fg} {bold}${summary.toImportCount}{/bold} sessions {gray-fg}skipped:{/gray-fg} ${summary.skippedCount}`);
|
|
126
|
+
lines.push(` {gray-fg}est. cost:{/gray-fg} $${summary.estimatedCostUsd.toFixed(4)}`);
|
|
127
|
+
lines.push(` {gray-fg}est. events:{/gray-fg} ${(0, util_1.escapeTags)(JSON.stringify(summary.estimatedEvents))}`);
|
|
128
|
+
}
|
|
129
|
+
lines.push("");
|
|
130
|
+
lines.push("{gray-fg}i = run import (blocking, output shown) · r = refresh estimate{/gray-fg}");
|
|
131
|
+
box.setContent(lines.join("\n"));
|
|
132
|
+
box.setScroll(0);
|
|
133
|
+
ctx.screen.render();
|
|
134
|
+
}
|
|
135
|
+
async function runImport() {
|
|
136
|
+
const sc = scope();
|
|
137
|
+
const range = timeRange();
|
|
138
|
+
await ctx.session.runWithOutput("Import", async () => {
|
|
139
|
+
const targets = (0, import_1.applyTimeRange)((0, import_1.findTranscripts)(sc), range);
|
|
140
|
+
if (targets.length === 0) {
|
|
141
|
+
return "No transcripts found for this scope / time range.";
|
|
142
|
+
}
|
|
143
|
+
let imported = 0;
|
|
144
|
+
let skipped = 0;
|
|
145
|
+
let failed = 0;
|
|
146
|
+
let done = 0;
|
|
147
|
+
await (0, import_1.runConcurrentPool)({
|
|
148
|
+
items: targets,
|
|
149
|
+
concurrency: CONCURRENCY,
|
|
150
|
+
process: (t) => (0, import_1.importSession)({ target: t, force }),
|
|
151
|
+
onComplete: (res) => {
|
|
152
|
+
done += 1;
|
|
153
|
+
if (res.status === "imported") {
|
|
154
|
+
imported += 1;
|
|
155
|
+
}
|
|
156
|
+
else if (res.status === "failed") {
|
|
157
|
+
failed += 1;
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
skipped += 1;
|
|
161
|
+
}
|
|
162
|
+
const reason = res.reason !== undefined ? ` — ${res.reason}` : "";
|
|
163
|
+
console.log(`[${done}/${targets.length}] ${res.sessionId}: ${res.status}${reason}`);
|
|
164
|
+
},
|
|
165
|
+
});
|
|
166
|
+
return `\nDone: ${imported} imported, ${skipped} skipped, ${failed} failed (of ${targets.length}).`;
|
|
167
|
+
});
|
|
168
|
+
render();
|
|
169
|
+
}
|
|
170
|
+
box.key(["s"], () => {
|
|
171
|
+
allProjects = !allProjects;
|
|
172
|
+
render();
|
|
173
|
+
});
|
|
174
|
+
box.key(["t"], () => {
|
|
175
|
+
rangeIdx = (rangeIdx + 1) % RANGES.length;
|
|
176
|
+
render();
|
|
177
|
+
});
|
|
178
|
+
box.key(["f"], () => {
|
|
179
|
+
force = !force;
|
|
180
|
+
render();
|
|
181
|
+
});
|
|
182
|
+
box.key(["i"], () => { void runImport(); });
|
|
183
|
+
box.key(["r"], () => render());
|
|
184
|
+
ctx.setStatus(STATUS);
|
|
185
|
+
render();
|
|
186
|
+
box.focus();
|
|
187
|
+
ctx.screen.render();
|
|
188
|
+
return {
|
|
189
|
+
unmount() {
|
|
190
|
+
box.destroy();
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
exports.importArea = {
|
|
195
|
+
id: "import",
|
|
196
|
+
title: "Import",
|
|
197
|
+
summary: "Backfill historical Claude sessions → collector (current / all projects)",
|
|
198
|
+
mount(ctx) {
|
|
199
|
+
return mountImportView(ctx);
|
|
200
|
+
},
|
|
201
|
+
};
|
|
202
|
+
//# sourceMappingURL=area.js.map
|