@cristiancorreau/forge 2.11.0 → 2.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.
@@ -0,0 +1,91 @@
1
+ import { type SkillInfo } from './catalog.js';
2
+ export interface SkillRow extends SkillInfo {
3
+ active: boolean;
4
+ }
5
+ /** Read the active skill ids from a project.yaml (skills:), normalising slashes. */
6
+ export declare function loadActiveSkillIds(root: string): Set<string>;
7
+ /**
8
+ * Filter the skill catalog by a free-text query. Matches (case-insensitive,
9
+ * substring) against id, command, category, purpose and trigger. An empty query
10
+ * returns the whole catalog. Each row is marked `active` if it is enabled in the
11
+ * given project.yaml (resolved from `root`).
12
+ */
13
+ export declare function searchSkills(query: string, root?: string): SkillRow[];
14
+ export interface HookEntry {
15
+ /** Hook file name, e.g. pre-edit-check.js. */
16
+ hook: string;
17
+ /** Claude Code lifecycle event (PreToolUse | Stop | SessionStart | …). */
18
+ event: string;
19
+ /** Tool matcher (Edit|Write, Bash, …) — empty when the event has no matcher. */
20
+ matcher: string;
21
+ /** Human description of what the hook does (from the registry). */
22
+ description: string;
23
+ /** Which group the hook belongs to: universal | standard | unknown. */
24
+ mode: 'universal' | 'standard' | 'unknown';
25
+ /** True when the hook file is actually present in .claude/hooks/. */
26
+ installed: boolean;
27
+ }
28
+ interface RegistryHook {
29
+ hook: string;
30
+ event?: string;
31
+ matcher?: string;
32
+ description?: string;
33
+ }
34
+ interface HooksRegistry {
35
+ universal?: RegistryHook[];
36
+ standard?: RegistryHook[];
37
+ }
38
+ /** Parse core/hooks/hooks-registry.yaml from the forge root. Returns {} on error. */
39
+ export declare function loadHooksRegistry(forgeRoot: string): HooksRegistry;
40
+ /**
41
+ * Build the unified hook list: every hook declared in the registry plus any
42
+ * extra hook found on disk in `<projectRoot>/.claude/hooks/` that the registry
43
+ * doesn't know about. Each entry carries its event/matcher/mode and whether it
44
+ * is installed in the project.
45
+ */
46
+ export declare function listInstalledHooks(projectRoot: string, forgeRoot: string | null): HookEntry[];
47
+ export interface TemplateEntry {
48
+ /** Display name. */
49
+ name: string;
50
+ /** Category bucket: wiki | spec | mode | claude-md. */
51
+ category: 'wiki' | 'spec' | 'mode' | 'claude-md';
52
+ /** Path relative to the forge root. */
53
+ relPath: string;
54
+ /** Short human description. */
55
+ description: string;
56
+ }
57
+ /**
58
+ * List the templates bundled with forge: wiki seeds, the spec template, the
59
+ * project.yaml mode templates and the claude-md templates. Paths are relative to
60
+ * `forgeRoot`. Returns [] if `forgeRoot` is null.
61
+ */
62
+ export declare function listTemplates(forgeRoot: string | null): TemplateEntry[];
63
+ export interface ConfigSummary {
64
+ found: boolean;
65
+ yamlPath: string | null;
66
+ name: string;
67
+ mode: string;
68
+ language: string;
69
+ stack: Array<{
70
+ key: string;
71
+ value: string;
72
+ }>;
73
+ agentsActive: string[];
74
+ agentsSpecialized: string[];
75
+ agentsCompliance: string[];
76
+ profiles: string[];
77
+ skills: string[];
78
+ runtimes: string[];
79
+ compliance: string[];
80
+ deploy: {
81
+ provider?: string;
82
+ url?: string;
83
+ } | null;
84
+ }
85
+ /**
86
+ * Build a structured, view-friendly summary of a project's project.yaml. When no
87
+ * config is found, `found` is false and the rest of the fields are empty.
88
+ */
89
+ export declare function getConfigSummary(root?: string): ConfigSummary;
90
+ export {};
91
+ //# sourceMappingURL=panel-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel-data.d.ts","sourceRoot":"","sources":["../../src/lib/panel-data.ts"],"names":[],"mappings":"AAUA,OAAO,EAAU,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAKtD,MAAM,WAAW,QAAS,SAAQ,SAAS;IACzC,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAU5D;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAAsB,GAAG,QAAQ,EAAE,CAYpF;AAID,MAAM,WAAW,SAAS;IACxB,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,IAAI,EAAE,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;IAC3C,qEAAqE;IACrE,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AACD,UAAU,aAAa;IACrB,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,qFAAqF;AACrF,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,CASlE;AAOD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,CAuC7F;AAID,MAAM,WAAW,aAAa;IAC5B,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;IACjD,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAC;CACrB;AAmCD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,aAAa,EAAE,CAiDvE;AAID,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7C,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACpD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,MAAsB,GAAG,aAAa,CAkD5E"}
@@ -0,0 +1,243 @@
1
+ /**
2
+ * Non-interactive data layer for `forge panel`.
3
+ *
4
+ * Every function here is pure-ish (reads the filesystem, never prints, never
5
+ * touches a TTY) so the OpenTUI panel, the @clack fallback and the test suite
6
+ * can all share the same logic. See SPEC-033.
7
+ */
8
+ import { existsSync, readFileSync, readdirSync, statSync } from 'fs';
9
+ import { join } from 'path';
10
+ import yaml from 'js-yaml';
11
+ import { SKILLS } from './catalog.js';
12
+ import { findProjectYaml, loadProjectYaml } from './yaml.js';
13
+ /** Read the active skill ids from a project.yaml (skills:), normalising slashes. */
14
+ export function loadActiveSkillIds(root) {
15
+ const yamlPath = findProjectYaml(root);
16
+ if (!yamlPath)
17
+ return new Set();
18
+ try {
19
+ const config = loadProjectYaml(yamlPath);
20
+ const raw = Array.isArray(config.skills) ? config.skills : [];
21
+ return new Set(raw.map(s => String(s).replace(/^\//, '')));
22
+ }
23
+ catch {
24
+ return new Set();
25
+ }
26
+ }
27
+ /**
28
+ * Filter the skill catalog by a free-text query. Matches (case-insensitive,
29
+ * substring) against id, command, category, purpose and trigger. An empty query
30
+ * returns the whole catalog. Each row is marked `active` if it is enabled in the
31
+ * given project.yaml (resolved from `root`).
32
+ */
33
+ export function searchSkills(query, root = process.cwd()) {
34
+ const activeIds = loadActiveSkillIds(root);
35
+ const q = query.trim().toLowerCase();
36
+ const rows = SKILLS.map(s => ({ ...s, active: activeIds.has(s.id) }));
37
+ if (!q)
38
+ return rows;
39
+ return rows.filter(s => s.id.toLowerCase().includes(q) ||
40
+ s.command.toLowerCase().includes(q) ||
41
+ s.category.toLowerCase().includes(q) ||
42
+ s.purpose.toLowerCase().includes(q) ||
43
+ s.trigger.toLowerCase().includes(q));
44
+ }
45
+ /** Parse core/hooks/hooks-registry.yaml from the forge root. Returns {} on error. */
46
+ export function loadHooksRegistry(forgeRoot) {
47
+ const path = join(forgeRoot, 'core', 'hooks', 'hooks-registry.yaml');
48
+ if (!existsSync(path))
49
+ return {};
50
+ try {
51
+ const data = yaml.load(readFileSync(path, 'utf-8'));
52
+ return data && typeof data === 'object' ? data : {};
53
+ }
54
+ catch {
55
+ return {};
56
+ }
57
+ }
58
+ /** Collapse a multi-line YAML folded description into a single line. */
59
+ function oneLine(s) {
60
+ return (s ?? '').replace(/\s+/g, ' ').trim();
61
+ }
62
+ /**
63
+ * Build the unified hook list: every hook declared in the registry plus any
64
+ * extra hook found on disk in `<projectRoot>/.claude/hooks/` that the registry
65
+ * doesn't know about. Each entry carries its event/matcher/mode and whether it
66
+ * is installed in the project.
67
+ */
68
+ export function listInstalledHooks(projectRoot, forgeRoot) {
69
+ const registry = forgeRoot ? loadHooksRegistry(forgeRoot) : {};
70
+ const hooksDir = join(projectRoot, '.claude', 'hooks');
71
+ const onDisk = new Set(existsSync(hooksDir)
72
+ ? readdirSync(hooksDir).filter(f => statSync(join(hooksDir, f)).isFile())
73
+ : []);
74
+ const entries = [];
75
+ const seen = new Set();
76
+ const pushGroup = (group, mode) => {
77
+ for (const h of group ?? []) {
78
+ if (!h?.hook)
79
+ continue;
80
+ seen.add(h.hook);
81
+ entries.push({
82
+ hook: h.hook,
83
+ event: h.event ?? '—',
84
+ matcher: h.matcher ?? '',
85
+ description: oneLine(h.description),
86
+ mode,
87
+ installed: onDisk.has(h.hook),
88
+ });
89
+ }
90
+ };
91
+ pushGroup(registry.universal, 'universal');
92
+ pushGroup(registry.standard, 'standard');
93
+ // Hooks present on disk but not declared in the registry.
94
+ for (const f of [...onDisk].sort()) {
95
+ if (seen.has(f))
96
+ continue;
97
+ entries.push({
98
+ hook: f, event: '—', matcher: '', description: '(no documentado en el registry)',
99
+ mode: 'unknown', installed: true,
100
+ });
101
+ }
102
+ return entries;
103
+ }
104
+ const MODE_DESCRIPTIONS = {
105
+ 'startup.yaml.tpl': 'Modo startup — overhead mínimo, equipo pequeño',
106
+ 'enterprise.yaml.tpl': 'Modo enterprise — compliance, auditoría, multi-equipo',
107
+ 'multi-runtime.yaml.tpl': 'Multi-runtime — un project.yaml para los 4 runtimes',
108
+ 'new-stack.yaml.tpl': 'Stack nuevo — plantilla base para empezar de cero',
109
+ };
110
+ const WIKI_DESCRIPTIONS = {
111
+ 'index.md': 'Índice raíz del wiki del proyecto',
112
+ 'log.md': 'Bitácora de ingestas del wiki',
113
+ 'concepts/_template.md': 'Plantilla de nota de concepto',
114
+ 'entities/_template.md': 'Plantilla de nota de entidad',
115
+ 'sources/_template.md': 'Plantilla de nota de fuente',
116
+ 'synthesis/_template.md': 'Plantilla de nota de síntesis',
117
+ };
118
+ const CLAUDE_MD_DESCRIPTIONS = {
119
+ 'project.md': 'CLAUDE.md base de un proyecto forge',
120
+ 'global.md': 'Instrucciones globales (~/.claude/CLAUDE.md)',
121
+ 'architecture.rules': 'Reglas de arquitectura del proyecto',
122
+ };
123
+ /** Recursively collect files under a dir, returning paths relative to `base`. */
124
+ function walkRel(base, dir, acc = []) {
125
+ if (!existsSync(dir))
126
+ return acc;
127
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
128
+ const full = join(dir, entry.name);
129
+ if (entry.isDirectory())
130
+ walkRel(base, full, acc);
131
+ else
132
+ acc.push(full.slice(base.length + 1).split('\\').join('/'));
133
+ }
134
+ return acc;
135
+ }
136
+ /**
137
+ * List the templates bundled with forge: wiki seeds, the spec template, the
138
+ * project.yaml mode templates and the claude-md templates. Paths are relative to
139
+ * `forgeRoot`. Returns [] if `forgeRoot` is null.
140
+ */
141
+ export function listTemplates(forgeRoot) {
142
+ if (!forgeRoot)
143
+ return [];
144
+ const out = [];
145
+ // Spec template.
146
+ const specPath = join(forgeRoot, 'core', 'templates', 'spec-template.md');
147
+ if (existsSync(specPath)) {
148
+ out.push({
149
+ name: 'spec-template.md', category: 'spec',
150
+ relPath: 'core/templates/spec-template.md',
151
+ description: 'Plantilla de spec SDD (docs/specs/_template.md)',
152
+ });
153
+ }
154
+ // Mode templates (templates/modes/*).
155
+ const modesDir = join(forgeRoot, 'templates', 'modes');
156
+ if (existsSync(modesDir)) {
157
+ for (const f of readdirSync(modesDir).sort()) {
158
+ out.push({
159
+ name: f, category: 'mode',
160
+ relPath: `templates/modes/${f}`,
161
+ description: MODE_DESCRIPTIONS[f] ?? 'Plantilla de project.yaml',
162
+ });
163
+ }
164
+ }
165
+ // Wiki templates (templates/wiki/**).
166
+ const wikiDir = join(forgeRoot, 'templates', 'wiki');
167
+ for (const rel of walkRel(wikiDir, wikiDir).sort()) {
168
+ out.push({
169
+ name: rel, category: 'wiki',
170
+ relPath: `templates/wiki/${rel}`,
171
+ description: WIKI_DESCRIPTIONS[rel] ?? 'Plantilla de página de wiki',
172
+ });
173
+ }
174
+ // claude-md templates (core/templates/claude-md/*).
175
+ const cmDir = join(forgeRoot, 'core', 'templates', 'claude-md');
176
+ if (existsSync(cmDir)) {
177
+ for (const f of readdirSync(cmDir).sort()) {
178
+ out.push({
179
+ name: f, category: 'claude-md',
180
+ relPath: `core/templates/claude-md/${f}`,
181
+ description: CLAUDE_MD_DESCRIPTIONS[f] ?? 'Plantilla CLAUDE.md',
182
+ });
183
+ }
184
+ }
185
+ return out;
186
+ }
187
+ /**
188
+ * Build a structured, view-friendly summary of a project's project.yaml. When no
189
+ * config is found, `found` is false and the rest of the fields are empty.
190
+ */
191
+ export function getConfigSummary(root = process.cwd()) {
192
+ const empty = {
193
+ found: false, yamlPath: null, name: '', mode: '', language: '',
194
+ stack: [], agentsActive: [], agentsSpecialized: [], agentsCompliance: [],
195
+ profiles: [], skills: [], runtimes: [], compliance: [], deploy: null,
196
+ };
197
+ const yamlPath = findProjectYaml(root);
198
+ if (!yamlPath)
199
+ return empty;
200
+ let config;
201
+ try {
202
+ config = loadProjectYaml(yamlPath);
203
+ }
204
+ catch {
205
+ return { ...empty, yamlPath };
206
+ }
207
+ const stack = [];
208
+ const s = config.stack ?? {};
209
+ const pushStack = (key, value) => {
210
+ if (value === undefined || value === null)
211
+ return;
212
+ if (Array.isArray(value)) {
213
+ if (value.length)
214
+ stack.push({ key, value: value.join(', ') });
215
+ }
216
+ else {
217
+ stack.push({ key, value: String(value) });
218
+ }
219
+ };
220
+ pushStack('backend', s.backend);
221
+ pushStack('frontend', s.frontend);
222
+ pushStack('database', s.database);
223
+ pushStack('orm', s.orm);
224
+ pushStack('package_manager', s.package_manager);
225
+ pushStack('testing', s.testing);
226
+ return {
227
+ found: true,
228
+ yamlPath,
229
+ name: config.project?.name ?? '(sin nombre)',
230
+ mode: config.project?.mode ?? '(sin mode)',
231
+ language: config.project?.language ?? '(sin lenguaje)',
232
+ stack,
233
+ agentsActive: config.agents?.active ?? [],
234
+ agentsSpecialized: config.agents?.specialized ?? [],
235
+ agentsCompliance: config.agents?.compliance ?? [],
236
+ profiles: config.agents?.profiles ?? [],
237
+ skills: Array.isArray(config.skills) ? config.skills.map(x => String(x)) : [],
238
+ runtimes: config.runtimes?.active ?? [],
239
+ compliance: config.compliance?.frameworks ?? [],
240
+ deploy: config.deploy ? { provider: config.deploy.provider, url: config.deploy.production_url } : null,
241
+ };
242
+ }
243
+ //# sourceMappingURL=panel-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel-data.js","sourceRoot":"","sources":["../../src/lib/panel-data.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AACrE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,MAAM,EAAkB,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAoB,MAAM,WAAW,CAAC;AAQ/E,oFAAoF;AACpF,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,OAAe,OAAO,CAAC,GAAG,EAAE;IACtE,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACtE,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACrB,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC9B,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;QACnC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;QACnC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CACpC,CAAC;AACJ,CAAC;AA8BD,qFAAqF;AACrF,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC;IACrE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAkB,CAAC;QACrE,OAAO,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,wEAAwE;AACxE,SAAS,OAAO,CAAC,CAAqB;IACpC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC/C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB,EAAE,SAAwB;IAC9E,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,GAAG,CACpB,UAAU,CAAC,QAAQ,CAAC;QAClB,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACzE,CAAC,CAAC,EAAE,CACP,CAAC;IAEF,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,MAAM,SAAS,GAAG,CAAC,KAAiC,EAAE,IAA8B,EAAE,EAAE;QACtF,KAAK,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;YAC5B,IAAI,CAAC,CAAC,EAAE,IAAI;gBAAE,SAAS;YACvB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,GAAG;gBACrB,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE;gBACxB,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;gBACnC,IAAI;gBACJ,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;aAC9B,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;IACF,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC3C,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAEzC,0DAA0D;IAC1D,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,SAAS;QAC1B,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,iCAAiC;YAChF,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI;SACjC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAeD,MAAM,iBAAiB,GAA2B;IAChD,kBAAkB,EAAE,gDAAgD;IACpE,qBAAqB,EAAE,uDAAuD;IAC9E,wBAAwB,EAAE,qDAAqD;IAC/E,oBAAoB,EAAE,mDAAmD;CAC1E,CAAC;AAEF,MAAM,iBAAiB,GAA2B;IAChD,UAAU,EAAE,mCAAmC;IAC/C,QAAQ,EAAE,+BAA+B;IACzC,uBAAuB,EAAE,+BAA+B;IACxD,uBAAuB,EAAE,8BAA8B;IACvD,sBAAsB,EAAE,6BAA6B;IACrD,wBAAwB,EAAE,+BAA+B;CAC1D,CAAC;AAEF,MAAM,sBAAsB,GAA2B;IACrD,YAAY,EAAE,qCAAqC;IACnD,WAAW,EAAE,8CAA8C;IAC3D,oBAAoB,EAAE,qCAAqC;CAC5D,CAAC;AAEF,iFAAiF;AACjF,SAAS,OAAO,CAAC,IAAY,EAAE,GAAW,EAAE,MAAgB,EAAE;IAC5D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IACjC,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,WAAW,EAAE;YAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;;YAC7C,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,SAAwB;IACpD,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAoB,EAAE,CAAC;IAEhC,iBAAiB;IACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC;IAC1E,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,GAAG,CAAC,IAAI,CAAC;YACP,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM;YAC1C,OAAO,EAAE,iCAAiC;YAC1C,WAAW,EAAE,iDAAiD;SAC/D,CAAC,CAAC;IACL,CAAC;IAED,sCAAsC;IACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IACvD,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAC7C,GAAG,CAAC,IAAI,CAAC;gBACP,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM;gBACzB,OAAO,EAAE,mBAAmB,CAAC,EAAE;gBAC/B,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAC,IAAI,2BAA2B;aACjE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IACrD,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACnD,GAAG,CAAC,IAAI,CAAC;YACP,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM;YAC3B,OAAO,EAAE,kBAAkB,GAAG,EAAE;YAChC,WAAW,EAAE,iBAAiB,CAAC,GAAG,CAAC,IAAI,6BAA6B;SACrE,CAAC,CAAC;IACL,CAAC;IAED,oDAAoD;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAChE,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAC1C,GAAG,CAAC,IAAI,CAAC;gBACP,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,WAAW;gBAC9B,OAAO,EAAE,4BAA4B,CAAC,EAAE;gBACxC,WAAW,EAAE,sBAAsB,CAAC,CAAC,CAAC,IAAI,qBAAqB;aAChE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAqBD;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe,OAAO,CAAC,GAAG,EAAE;IAC3D,MAAM,KAAK,GAAkB;QAC3B,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE;QAC9D,KAAK,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE;QACxE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI;KACrE,CAAC;IAEF,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE5B,IAAI,MAAmB,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,CAAC;IAChC,CAAC;IAED,MAAM,KAAK,GAA0C,EAAE,CAAC;IACxD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,KAAc,EAAE,EAAE;QAChD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO;QAClD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,KAAK,CAAC,MAAM;gBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,CAAC;IACF,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IAChC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;IAClC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;IAClC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IACxB,SAAS,CAAC,iBAAiB,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC;IAChD,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IAEhC,OAAO;QACL,KAAK,EAAE,IAAI;QACX,QAAQ;QACR,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,cAAc;QAC5C,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,YAAY;QAC1C,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,IAAI,gBAAgB;QACtD,KAAK;QACL,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE;QACzC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,IAAI,EAAE;QACnD,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,IAAI,EAAE;QACjD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,IAAI,EAAE;QACvC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;QAC7E,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE;QACvC,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,UAAU,IAAI,EAAE;QAC/C,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI;KACvG,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function runPanel(root: string): Promise<void>;
2
+ //# sourceMappingURL=panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/tui/panel.ts"],"names":[],"mappings":"AAuEA,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ1D"}