slaunt 0.1.17 → 0.1.18

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.
Files changed (168) hide show
  1. package/README.md +17 -122
  2. package/bin/slaunt-hooks.js +96 -0
  3. package/package.json +9 -59
  4. package/release/SlauntKillBar.zip +0 -0
  5. package/release/manifest.json +7 -0
  6. package/scripts/killbar-portability-check.js +67 -0
  7. package/scripts/package-killbar-macos.sh +38 -0
  8. package/src/approval-manager.js +53 -0
  9. package/src/cli-auth.js +230 -0
  10. package/src/compact-wordmark.js +13 -0
  11. package/src/desktop/broker-daemon.js +18 -0
  12. package/src/desktop/broker-grants.js +37 -0
  13. package/src/desktop/broker-hook-command.js +23 -0
  14. package/src/desktop/broker-keychain.js +29 -0
  15. package/src/desktop/broker-launch-agent.js +34 -0
  16. package/src/desktop/broker-service.js +40 -0
  17. package/src/desktop/chat-capture-command.js +7 -0
  18. package/src/desktop/chat-hook-capture.js +445 -0
  19. package/src/desktop/claude-lifecycle.js +143 -0
  20. package/src/desktop/client-identity.js +19 -0
  21. package/src/desktop/native-claude-broker.js +34 -0
  22. package/src/desktop/native-claude-connection.js +42 -0
  23. package/src/desktop/tool-guard-command.js +13 -0
  24. package/src/desktop/tool-guard.js +225 -0
  25. package/src/discovery/catalog.js +734 -0
  26. package/src/full-screen.js +88 -0
  27. package/src/helper-release.js +27 -0
  28. package/src/hidden-oauth.js +70 -0
  29. package/src/independent-grants.js +38 -0
  30. package/src/install-flow.js +71 -0
  31. package/src/killbar-background-install.js +47 -0
  32. package/src/killbar-enrollment.js +74 -0
  33. package/src/killbar-launch-agent.js +10 -0
  34. package/src/mcp-identity.js +6 -0
  35. package/src/native-config.js +150 -0
  36. package/src/native-oauth.js +33 -0
  37. package/src/oauth-cohort.js +43 -0
  38. package/src/pty-wrapper.py +57 -0
  39. package/src/read-json.js +8 -0
  40. package/src/setup/client-installer.js +93 -0
  41. package/src/setup/codex-guard-supervisor.js +34 -0
  42. package/src/setup/hook-installer.js +496 -0
  43. package/src/setup/managed-policy.js +26 -0
  44. package/src/setup/mcp-config-installer.js +204 -0
  45. package/src/setup-flow.js +66 -0
  46. package/src/tui.js +205 -0
  47. package/test/approval-manager.test.js +27 -0
  48. package/test/broker-grants.test.js +14 -0
  49. package/test/broker-keychain.test.js +14 -0
  50. package/test/broker-launch-agent.test.js +15 -0
  51. package/test/broker-service.test.js +42 -0
  52. package/test/cli-auth-recovery.test.js +15 -0
  53. package/test/codex-guard-supervisor.test.js +25 -0
  54. package/test/full-screen.test.js +49 -0
  55. package/test/helper-release.test.js +22 -0
  56. package/test/hidden-oauth.test.js +44 -0
  57. package/test/hook-installer.test.js +232 -0
  58. package/test/independent-grants.test.js +16 -0
  59. package/test/install-flow.test.js +24 -0
  60. package/test/killbar-background-install.test.js +15 -0
  61. package/test/killbar-enrollment.test.js +115 -0
  62. package/test/killbar-launch-agent.test.js +12 -0
  63. package/test/killbar-portability.test.js +17 -0
  64. package/test/managed-policy.test.js +18 -0
  65. package/test/native-claude-broker.test.js +19 -0
  66. package/test/native-claude-connection.test.js +17 -0
  67. package/test/native-claude-hooks.test.js +9 -0
  68. package/test/native-config.test.js +3 -0
  69. package/test/native-integration.cjs +29 -0
  70. package/test/native-oauth.test.js +23 -0
  71. package/test/oauth-cohort.test.js +26 -0
  72. package/test/tui.test.js +100 -0
  73. package/LICENSE +0 -201
  74. package/dist/audit/risk-engine.d.ts +0 -4
  75. package/dist/audit/risk-engine.d.ts.map +0 -1
  76. package/dist/audit/risk-engine.js +0 -174
  77. package/dist/audit/risk-engine.js.map +0 -1
  78. package/dist/audit/run.d.ts +0 -18
  79. package/dist/audit/run.d.ts.map +0 -1
  80. package/dist/audit/run.js +0 -68
  81. package/dist/audit/run.js.map +0 -1
  82. package/dist/classification/builtin-catalog.d.ts +0 -3
  83. package/dist/classification/builtin-catalog.d.ts.map +0 -1
  84. package/dist/classification/builtin-catalog.js +0 -283
  85. package/dist/classification/builtin-catalog.js.map +0 -1
  86. package/dist/classification/catalog.d.ts +0 -10
  87. package/dist/classification/catalog.d.ts.map +0 -1
  88. package/dist/classification/catalog.js +0 -194
  89. package/dist/classification/catalog.js.map +0 -1
  90. package/dist/classification/classifier.d.ts +0 -3
  91. package/dist/classification/classifier.d.ts.map +0 -1
  92. package/dist/classification/classifier.js +0 -64
  93. package/dist/classification/classifier.js.map +0 -1
  94. package/dist/classification/public-catalog-config.d.ts +0 -3
  95. package/dist/classification/public-catalog-config.d.ts.map +0 -1
  96. package/dist/classification/public-catalog-config.js +0 -5
  97. package/dist/classification/public-catalog-config.js.map +0 -1
  98. package/dist/cli.d.ts +0 -3
  99. package/dist/cli.d.ts.map +0 -1
  100. package/dist/cli.js +0 -239
  101. package/dist/cli.js.map +0 -1
  102. package/dist/config/discover.d.ts +0 -8
  103. package/dist/config/discover.d.ts.map +0 -1
  104. package/dist/config/discover.js +0 -163
  105. package/dist/config/discover.js.map +0 -1
  106. package/dist/config/install.d.ts +0 -10
  107. package/dist/config/install.d.ts.map +0 -1
  108. package/dist/config/install.js +0 -143
  109. package/dist/config/install.js.map +0 -1
  110. package/dist/config/paths.d.ts +0 -24
  111. package/dist/config/paths.d.ts.map +0 -1
  112. package/dist/config/paths.js +0 -90
  113. package/dist/config/paths.js.map +0 -1
  114. package/dist/demo.d.ts +0 -4
  115. package/dist/demo.d.ts.map +0 -1
  116. package/dist/demo.js +0 -99
  117. package/dist/demo.js.map +0 -1
  118. package/dist/explanation/local.d.ts +0 -24
  119. package/dist/explanation/local.d.ts.map +0 -1
  120. package/dist/explanation/local.js +0 -696
  121. package/dist/explanation/local.js.map +0 -1
  122. package/dist/mcp/introspect.d.ts +0 -18
  123. package/dist/mcp/introspect.d.ts.map +0 -1
  124. package/dist/mcp/introspect.js +0 -236
  125. package/dist/mcp/introspect.js.map +0 -1
  126. package/dist/mcp/oauth.d.ts +0 -14
  127. package/dist/mcp/oauth.d.ts.map +0 -1
  128. package/dist/mcp/oauth.js +0 -257
  129. package/dist/mcp/oauth.js.map +0 -1
  130. package/dist/presentation/plain-language.d.ts +0 -12
  131. package/dist/presentation/plain-language.d.ts.map +0 -1
  132. package/dist/presentation/plain-language.js +0 -120
  133. package/dist/presentation/plain-language.js.map +0 -1
  134. package/dist/privacy/redaction.d.ts +0 -2
  135. package/dist/privacy/redaction.d.ts.map +0 -1
  136. package/dist/privacy/redaction.js +0 -50
  137. package/dist/privacy/redaction.js.map +0 -1
  138. package/dist/report/html.d.ts +0 -4
  139. package/dist/report/html.d.ts.map +0 -1
  140. package/dist/report/html.js +0 -101
  141. package/dist/report/html.js.map +0 -1
  142. package/dist/tui/analysis-path.d.ts +0 -17
  143. package/dist/tui/analysis-path.d.ts.map +0 -1
  144. package/dist/tui/analysis-path.js +0 -112
  145. package/dist/tui/analysis-path.js.map +0 -1
  146. package/dist/tui/render.d.ts +0 -4
  147. package/dist/tui/render.d.ts.map +0 -1
  148. package/dist/tui/render.js +0 -262
  149. package/dist/tui/render.js.map +0 -1
  150. package/dist/tui/splash.d.ts +0 -15
  151. package/dist/tui/splash.d.ts.map +0 -1
  152. package/dist/tui/splash.js +0 -130
  153. package/dist/tui/splash.js.map +0 -1
  154. package/dist/tui/stream.d.ts +0 -6
  155. package/dist/tui/stream.d.ts.map +0 -1
  156. package/dist/tui/stream.js +0 -56
  157. package/dist/tui/stream.js.map +0 -1
  158. package/dist/types.d.ts +0 -132
  159. package/dist/types.d.ts.map +0 -1
  160. package/dist/types.js +0 -2
  161. package/dist/types.js.map +0 -1
  162. package/dist/version.d.ts +0 -2
  163. package/dist/version.d.ts.map +0 -1
  164. package/dist/version.js +0 -8
  165. package/dist/version.js.map +0 -1
  166. package/models/APACHE-2.0.txt +0 -202
  167. package/models/MODEL.json +0 -29
  168. package/models/NOTICE.md +0 -23
@@ -1,262 +0,0 @@
1
- import { relative } from 'node:path';
2
- import chalk from 'chalk';
3
- import { plainCapability, plainClient, plainFinding } from '../presentation/plain-language.js';
4
- const severityColor = {
5
- critical: chalk.red.bold,
6
- high: chalk.hex('#f59e0b').bold,
7
- medium: chalk.yellow,
8
- low: chalk.cyan,
9
- info: chalk.gray,
10
- };
11
- const capabilityPriority = [
12
- 'deploy-production', 'execute-shell', 'read-secrets', 'administer-system',
13
- 'merge-pull-request', 'edit-code', 'write-files', 'delete-data', 'write-data',
14
- 'read-files', 'manage-auth', 'control-browser', 'send-message', 'network-access',
15
- 'create-pull-request', 'execute-code', 'read-data',
16
- ];
17
- const frameColor = chalk.hex('#6d5dd3');
18
- const accentColor = chalk.hex('#a78bfa');
19
- function width() {
20
- return Math.max(36, Math.min(82, process.stdout.columns || 78));
21
- }
22
- function stripAnsi(value) {
23
- return value.replace(/\u001B\[[0-?]*[ -/]*[@-~]/gu, '');
24
- }
25
- function visibleLength(value) {
26
- return Array.from(stripAnsi(value)).length;
27
- }
28
- function padVisible(value, target) {
29
- return `${value}${' '.repeat(Math.max(0, target - visibleLength(value)))}`;
30
- }
31
- function plural(value, singular, pluralForm = `${singular}s`) {
32
- return value === 1 ? singular : pluralForm;
33
- }
34
- /**
35
- * Wrap plain terminal copy without dropping long identifiers or URLs. A visual
36
- * line break must never become content truncation in the audit result.
37
- */
38
- function wrap(text, indent = '', continuationIndent = indent, maxWidth = width()) {
39
- const normalized = stripAnsi(text).replace(/\s+/gu, ' ').trim();
40
- if (!normalized)
41
- return [indent];
42
- const usableWidth = Math.max(1, Math.min(maxWidth - visibleLength(indent), maxWidth - visibleLength(continuationIndent)));
43
- const words = normalized.split(' ');
44
- const lines = [];
45
- let line = '';
46
- const flush = () => {
47
- if (!line)
48
- return;
49
- lines.push(`${lines.length === 0 ? indent : continuationIndent}${line}`);
50
- line = '';
51
- };
52
- for (const word of words) {
53
- if (visibleLength(word) <= usableWidth) {
54
- if (!line) {
55
- line = word;
56
- }
57
- else if (visibleLength(line) + 1 + visibleLength(word) <= usableWidth) {
58
- line = `${line} ${word}`;
59
- }
60
- else {
61
- flush();
62
- line = word;
63
- }
64
- continue;
65
- }
66
- flush();
67
- const characters = Array.from(word);
68
- while (characters.length > usableWidth) {
69
- lines.push(`${lines.length === 0 ? indent : continuationIndent}${characters.splice(0, usableWidth).join('')}`);
70
- }
71
- line = characters.join('');
72
- }
73
- flush();
74
- return lines;
75
- }
76
- function box(title, content, accent = frameColor) {
77
- const outerWidth = width();
78
- const contentWidth = Math.max(24, outerWidth - 4);
79
- const rows = content.flatMap((line) => line.length === 0 ? [''] : wrap(line, '', '', contentWidth));
80
- const dashCount = Math.max(1, outerWidth - 5 - visibleLength(title));
81
- const top = `${accent('╭─')} ${chalk.bold(title)} ${accent('─'.repeat(dashCount))}${accent('╮')}`;
82
- const body = rows.map((line) => `${accent('│')} ${padVisible(line, contentWidth)} ${accent('│')}`);
83
- const bottom = accent(`╰${'─'.repeat(Math.max(1, outerWidth - 2))}╯`);
84
- return [top, ...body, bottom];
85
- }
86
- function riskBar(score, length = 16) {
87
- const bounded = Math.max(0, Math.min(100, score));
88
- const filled = Math.round((bounded / 100) * length);
89
- const color = bounded >= 80 ? chalk.red : bounded >= 55 ? chalk.yellow : chalk.green;
90
- return `${color('█'.repeat(filled))}${chalk.gray('░'.repeat(length - filled))}`;
91
- }
92
- function scoreLabel(score) {
93
- if (score >= 80)
94
- return { color: chalk.green, label: 'Strong' };
95
- if (score >= 55)
96
- return { color: chalk.yellow, label: 'Review recommended' };
97
- return { color: chalk.red, label: 'Needs attention' };
98
- }
99
- function postureLine(result, unavailable) {
100
- const { summary } = result;
101
- if (summary.tools === 0 && unavailable > 0) {
102
- return `${chalk.yellow.bold('Security posture unavailable')} ${chalk.gray('· tool inventories are incomplete')}`;
103
- }
104
- const score = scoreLabel(summary.postureScore);
105
- const suffix = unavailable > 0 ? 'Partial tool coverage' : score.label;
106
- return `${score.color(chalk.bold(`${summary.postureScore}/100 security posture`))} ${chalk.gray(`· ${suffix}`)}`;
107
- }
108
- function naturalList(values) {
109
- if (values.length <= 1)
110
- return values[0] || '';
111
- if (values.length === 2)
112
- return `${values[0]} and ${values[1]}`;
113
- return `${values.slice(0, -1).join(', ')}, and ${values.at(-1)}`;
114
- }
115
- function toolsFor(result, serverId) {
116
- return result.tools.filter((tool) => tool.serverId === serverId);
117
- }
118
- function probeFor(result, serverId) {
119
- return result.probes.find((probe) => probe.serverId === serverId);
120
- }
121
- function maxRisk(tools) {
122
- return Math.max(0, ...tools.map((tool) => tool.classification.riskScore));
123
- }
124
- function shortCapabilities(capabilities) {
125
- const set = new Set(capabilities);
126
- const labels = capabilityPriority
127
- .filter((capability) => set.has(capability))
128
- .map(plainCapability);
129
- return [...new Set(labels)].slice(0, 3).join(', ') || 'no classified access';
130
- }
131
- function dashboardLines(result, unavailable) {
132
- const { summary } = result;
133
- const inventoryTotal = result.discovery.servers.length;
134
- const inventoryAvailable = result.probes.filter((probe) => probe.status === 'ok').length;
135
- const coverage = inventoryTotal > 0 ? Math.round((inventoryAvailable / inventoryTotal) * 100) : 0;
136
- const score = summary.tools > 0 ? summary.postureScore : 0;
137
- return box('Audit complete', [
138
- postureLine(result, unavailable),
139
- `${riskBar(score, 24)} ${summary.tools > 0 ? `${score}% signal` : 'coverage incomplete'}`,
140
- `${summary.clientsDetected} agent ${plural(summary.clientsDetected, 'client')} · ${summary.serverBindings} MCP ${plural(summary.serverBindings, 'binding')} · ${summary.tools} ${plural(summary.tools, 'tool')}`,
141
- `${summary.sensitiveCapabilities} sensitive · ${summary.unclassified} unclassified · inventory ${coverage}% (${inventoryAvailable}/${inventoryTotal || 0})`,
142
- ], accentColor);
143
- }
144
- function findingCard(item) {
145
- const copy = plainFinding(item);
146
- const assistants = naturalList(item.clients.map(plainClient));
147
- const services = naturalList(item.serverNames);
148
- const clientLabel = item.clients.length === 1 ? 'Agent client' : 'Agent clients';
149
- const serverLabel = item.serverNames.length === 1 ? 'MCP server' : 'MCP servers';
150
- const toolLabel = item.toolNames.length === 1 ? 'Tool' : 'Tools';
151
- const capabilityLabel = item.access.length === 1 ? 'Capability' : 'Capabilities';
152
- const icon = item.severity === 'critical' ? '◆' : item.severity === 'high' ? '▲' : '●';
153
- const color = severityColor[item.severity];
154
- return box(`${icon} ${copy.label}`, [
155
- `${icon} ${copy.label.toUpperCase()} ${copy.title}`,
156
- ...(assistants ? [`${clientLabel}: ${assistants}`] : []),
157
- ...(services ? [`${serverLabel}: ${services}`] : []),
158
- ...(item.toolNames.length ? [`${toolLabel}: ${item.toolNames.join(', ')}`] : []),
159
- ...(item.access.length ? [`${capabilityLabel}: ${item.access.join(', ')}`] : []),
160
- `Why this matters: ${copy.why}`,
161
- `Recommended control: ${copy.recommendation}`,
162
- ], color);
163
- }
164
- function accessOverviewLines(result) {
165
- const lines = [
166
- 'CLIENT / SERVER STATUS · ACCESS · RISK',
167
- ];
168
- for (const client of result.discovery.clients.filter((item) => item.detected)) {
169
- lines.push(`◉ ${client.label}`);
170
- const servers = result.discovery.servers.filter((server) => server.client === client.id);
171
- if (servers.length === 0) {
172
- lines.push(' └─ No enabled MCP servers');
173
- continue;
174
- }
175
- for (const [index, server] of servers.entries()) {
176
- const tools = toolsFor(result, server.id);
177
- const probe = probeFor(result, server.id);
178
- const capabilities = [...new Set(tools.flatMap((tool) => tool.classification.capabilities))];
179
- const branch = index === servers.length - 1 ? '└─' : '├─';
180
- const status = probe?.status === 'ok'
181
- ? `✓ ${tools.length} ${plural(tools.length, 'tool')}`
182
- : probe?.authRequired ? '↗ sign-in needed' : `· ${probe?.status || 'unavailable'}`;
183
- const score = maxRisk(tools);
184
- lines.push(` ${branch} ${client.label} / ${server.name} · ${server.transport.toUpperCase()} · ${status} · ${shortCapabilities(capabilities)} · ${riskBar(score)} ${score}`);
185
- }
186
- }
187
- return lines;
188
- }
189
- function explanationSource(explanation) {
190
- if (explanation?.source === 'local-llm') {
191
- return 'LLM';
192
- }
193
- return 'evidence';
194
- }
195
- function explanationCards(result) {
196
- const explanations = new Map(result.explanations.map((explanation) => [explanation.serverId, explanation]));
197
- const lines = [];
198
- for (const server of result.discovery.servers) {
199
- const explanation = explanations.get(server.id);
200
- const probe = probeFor(result, server.id);
201
- const status = probe?.status === 'ok' ? '✓' : probe?.authRequired ? '↗' : '·';
202
- lines.push(`${status} ${server.clientLabel} / ${server.name} · ${server.transport.toUpperCase()} · ${explanationSource(explanation)}`);
203
- lines.push(explanation?.text || 'No explanation was generated.');
204
- }
205
- return lines;
206
- }
207
- function reportPath(path) {
208
- const local = relative(process.cwd(), path);
209
- return local && !local.startsWith('..') ? `./${local}` : path;
210
- }
211
- export function renderAudit(result) {
212
- const priority = result.findings.filter((finding) => finding.severity === 'critical' || finding.severity === 'high');
213
- const otherFindings = result.findings.length - priority.length;
214
- const unknown = result.tools.filter((tool) => tool.classification.source === 'unknown');
215
- const failedProbes = result.probes.filter((probe) => probe.status !== 'ok');
216
- const lines = ['', ...dashboardLines(result, failedProbes.length), ''];
217
- if (priority.length) {
218
- lines.push(...box('Priority paths', [
219
- `${priority.length} high-priority ${plural(priority.length, 'path')} found in the retrieved inventories.`,
220
- ], chalk.hex('#f59e0b')));
221
- }
222
- else if (!failedProbes.length) {
223
- lines.push(chalk.green('✓ No critical or high-risk access paths found.'), '');
224
- }
225
- for (const finding of priority.slice(0, 3))
226
- lines.push(...findingCard(finding));
227
- if (otherFindings > 0) {
228
- lines.push(chalk.gray(`${otherFindings} additional ${plural(otherFindings, 'finding')} in the full report.`), '');
229
- }
230
- lines.push(...box('Access overview', accessOverviewLines(result), accentColor));
231
- lines.push(...box('Server explanations', [
232
- 'LLM = bundled local 1B model · evidence = exact inventory/configuration facts',
233
- ...explanationCards(result),
234
- ], accentColor));
235
- if (unknown.length) {
236
- const visibleUnknown = unknown.slice(0, 12);
237
- lines.push(...box(`Unclassified · ${unknown.length}`, [
238
- visibleUnknown.map((tool) => tool.name).join(' · '),
239
- ...(unknown.length > visibleUnknown.length ? [`+ ${unknown.length - visibleUnknown.length} in the full report`] : []),
240
- ], chalk.yellow));
241
- }
242
- if (failedProbes.length) {
243
- lines.push(...box(`Inventory gaps · ${failedProbes.length}`, failedProbes.map((probe) => {
244
- const server = result.discovery.servers.find((item) => item.id === probe.serverId);
245
- return `${probe.authRequired ? '↗ sign-in needed' : probe.status} · ${server?.clientLabel || 'Client'} / ${server?.name || probe.serverId}`;
246
- }), chalk.yellow));
247
- }
248
- lines.push('');
249
- lines.push(...wrap(result.reportPath ? `Report: ${reportPath(result.reportPath)}` : 'Report: HTML report disabled for this run.').map((line) => chalk.gray(line)));
250
- lines.push(...wrap('Read-only audit: MCP initialize + tools/list only; no tools/call, prompts, files, credentials, or history are inspected.').map((line) => chalk.gray(line)));
251
- if (result.discovery.warnings.length) {
252
- lines.push(...wrap(`Notes: ${result.discovery.warnings.join(' · ')}`).map((line) => chalk.gray(line)));
253
- }
254
- return lines.join('\n');
255
- }
256
- export function renderHeader() {
257
- return [
258
- chalk.bold.hex('#a78bfa')('SLAUNT') + chalk.gray(' · MCP agent access audit'),
259
- chalk.gray(' local · read-only · tools/list inventory'),
260
- ].join('\n');
261
- }
262
- //# sourceMappingURL=render.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/tui/render.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- /** A compact ASCII Slant Relief wordmark for the Slaunt startup screen. */
2
- export declare const STARTUP_ART_LINES: string[];
3
- export interface StartupSplashOptions {
4
- color?: boolean;
5
- intervalMs?: number;
6
- minDurationMs?: number;
7
- now?: () => number;
8
- write?: (chunk: string) => void;
9
- }
10
- export interface StartupSplash {
11
- stop(): Promise<void>;
12
- }
13
- export declare function renderStartupSplashFrame(phase?: number, maxWidth?: number, color?: boolean): string;
14
- export declare function startStartupSplash(options?: StartupSplashOptions): StartupSplash;
15
- //# sourceMappingURL=splash.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"splash.d.ts","sourceRoot":"","sources":["../../src/tui/splash.ts"],"names":[],"mappings":"AAmBA,2EAA2E;AAC3E,eAAO,MAAM,iBAAiB,UAAiC,CAAC;AAKhE,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAiED,wBAAgB,wBAAwB,CACtC,KAAK,SAAI,EACT,QAAQ,SAAkB,EAC1B,KAAK,UAAkB,GACtB,MAAM,CAER;AAED,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,oBAAyB,GAAG,aAAa,CAyCpF"}
@@ -1,130 +0,0 @@
1
- const STARTUP_ART_SOURCE = String.raw `_____/\\\\\\\\\\\____/\\\_________________/\\\\\\\\\____
2
- ___/\\\/////////\\\_\/\\\_______________/\\\\\\\\\\\\\__
3
- __\//\\\______\///__\/\\\_____________\/\\\/////////\\\
4
- ___\////\\\_________\/\\\_____________\/\\\_______\/\\\
5
- ______\////\\\______\/\\\_____________\/\\\\\\\\\\\\\\\
6
- _________\////\\\___\/\\\_____________\/\\\/////////\\\
7
- __/\\\______\//\\\__\/\\\_____________\/\\\_______\/\\\
8
- _\///\\\\\\\\\\\/___\/\\\\\\\\\\\\\\\_\/\\\_______\/\\\
9
- ___\///////////_____\///////////////__\///________\///__
10
- __/\\\________/\\\__/\\\\\_____/\\\__/\\\\\\\\\\\\\\\_
11
- _\/\\\_______\/\\\_\/\\\\\\___\/\\\_\///////\\\/////__
12
- _\/\\\_______\/\\\_\/\\\/\\\__\/\\\_______\/\\\_______
13
- _\/\\\_______\/\\\_\/\\\//\\\_\/\\\_______\/\\\_______
14
- _\/\\\_______\/\\\_\/\\\\//\\\\/\\\_______\/\\\_______
15
- _\/\\\_______\/\\\_\/\\\_\//\\\/\\\_______\/\\\_______
16
- _\//\\\______/\\\__\/\\\__\//\\\\\\_______\/\\\_______
17
- __\///\\\\\\\\\/___\/\\\___\//\\\\\_______\/\\\_______
18
- ____\/////////_____\///_____\/////________\///________`;
19
- /** A compact ASCII Slant Relief wordmark for the Slaunt startup screen. */
20
- export const STARTUP_ART_LINES = STARTUP_ART_SOURCE.split('\n');
21
- const ANSI_RESET = '\u001b[0m';
22
- const ANSI_CLEAR_LINE = '\r\u001b[2K';
23
- function terminalWidth() {
24
- return Math.max(36, Math.min(120, process.stdout.columns || 78));
25
- }
26
- function viewportLines(maxWidth) {
27
- const safeWidth = Math.max(1, Math.floor(maxWidth) - 1);
28
- return STARTUP_ART_LINES.flatMap((line) => {
29
- const characters = Array.from(line);
30
- if (characters.length === 0)
31
- return [''];
32
- const chunks = [];
33
- for (let offset = 0; offset < characters.length; offset += safeWidth) {
34
- chunks.push(characters.slice(offset, offset + safeWidth).join(''));
35
- }
36
- return chunks;
37
- });
38
- }
39
- function colorsEnabled() {
40
- return process.env.NO_COLOR === undefined && process.env.TERM !== 'dumb';
41
- }
42
- function hslToRgb(hue) {
43
- const normalizedHue = ((hue % 360) + 360) % 360;
44
- const saturation = 0.92;
45
- const lightness = 0.62;
46
- const chroma = (1 - Math.abs(2 * lightness - 1)) * saturation;
47
- const segment = normalizedHue / 60;
48
- const secondary = chroma * (1 - Math.abs((segment % 2) - 1));
49
- const [redPrime, greenPrime, bluePrime] = segment < 1
50
- ? [chroma, secondary, 0]
51
- : segment < 2
52
- ? [secondary, chroma, 0]
53
- : segment < 3
54
- ? [0, chroma, secondary]
55
- : segment < 4
56
- ? [0, secondary, chroma]
57
- : segment < 5
58
- ? [secondary, 0, chroma]
59
- : [chroma, 0, secondary];
60
- const match = lightness - chroma / 2;
61
- return [
62
- Math.round((redPrime + match) * 255),
63
- Math.round((greenPrime + match) * 255),
64
- Math.round((bluePrime + match) * 255),
65
- ];
66
- }
67
- function paintLine(line, phase, lineIndex, color) {
68
- if (!color)
69
- return line;
70
- const characters = Array.from(line);
71
- const span = Math.max(1, characters.length - 1);
72
- return `${characters.map((character, characterIndex) => {
73
- if (/\s/u.test(character))
74
- return character;
75
- const hue = phase + (characterIndex / span) * 300 + lineIndex * 13;
76
- const [red, green, blue] = hslToRgb(hue);
77
- return `\u001b[38;2;${red};${green};${blue}m${character}`;
78
- }).join('')}${ANSI_RESET}`;
79
- }
80
- function renderFrame(lines, phase, color) {
81
- return lines.map((line, lineIndex) => paintLine(line, phase, lineIndex, color)).join('\n');
82
- }
83
- export function renderStartupSplashFrame(phase = 0, maxWidth = terminalWidth(), color = colorsEnabled()) {
84
- return renderFrame(viewportLines(maxWidth), phase, color);
85
- }
86
- export function startStartupSplash(options = {}) {
87
- const write = options.write ?? ((chunk) => process.stdout.write(chunk));
88
- const now = options.now ?? Date.now;
89
- const intervalMs = Math.max(16, options.intervalMs ?? 33);
90
- const minDurationMs = Math.max(0, options.minDurationMs ?? 900);
91
- const width = terminalWidth();
92
- const lines = viewportLines(width);
93
- const height = lines.length;
94
- const color = options.color ?? colorsEnabled();
95
- const startedAt = now();
96
- let drawn = false;
97
- let stopped = false;
98
- let stopPromise;
99
- const render = () => {
100
- if (stopped)
101
- return;
102
- if (drawn)
103
- write(`\u001b[${height}A`);
104
- const phase = ((now() - startedAt) * 0.055) % 360;
105
- write(`${renderFrame(lines, phase, color)}\n`);
106
- drawn = true;
107
- };
108
- render();
109
- const timer = setInterval(render, intervalMs);
110
- timer.unref?.();
111
- return {
112
- async stop() {
113
- if (stopPromise)
114
- return stopPromise;
115
- stopPromise = (async () => {
116
- const remaining = minDurationMs - (now() - startedAt);
117
- if (remaining > 0)
118
- await new Promise((resolve) => setTimeout(resolve, remaining));
119
- stopped = true;
120
- clearInterval(timer);
121
- if (!drawn)
122
- return;
123
- write(`\u001b[${height}A`);
124
- write(`${lines.map(() => `${ANSI_CLEAR_LINE}\n`).join('')}\u001b[${height}A\r`);
125
- })();
126
- return stopPromise;
127
- },
128
- };
129
- }
130
- //# sourceMappingURL=splash.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"splash.js","sourceRoot":"","sources":["../../src/tui/splash.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- export interface StreamTerminalTextOptions {
2
- sleep?: (milliseconds: number) => Promise<void>;
3
- write?: (chunk: string) => void;
4
- }
5
- export declare function streamTerminalText(value: string, options?: StreamTerminalTextOptions): Promise<void>;
6
- //# sourceMappingURL=stream.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/tui/stream.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,yBAAyB;IACxC,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAyBD,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,IAAI,CAAC,CAiCf"}
@@ -1,56 +0,0 @@
1
- const ANSI_SEQUENCE = /^\u001B\[[0-?]*[ -/]*[@-~]$/u;
2
- const TOKEN_PATTERN = /\u001B\[[0-?]*[ -/]*[@-~]|\s+|[^\s]+/gu;
3
- const ANSI_GLOBAL = /\u001B\[[0-?]*[ -/]*[@-~]/gu;
4
- const BURST_SIZES = [3, 4, 2, 5];
5
- const BURST_DELAYS_MS = [12, 18, 9, 15];
6
- const wait = (milliseconds) => new Promise((resolve) => {
7
- setTimeout(resolve, milliseconds);
8
- });
9
- function isVisibleToken(token) {
10
- return !ANSI_SEQUENCE.test(token) && !/^\s+$/u.test(token);
11
- }
12
- function isSectionHeading(line) {
13
- const visible = line.replace(ANSI_GLOBAL, '');
14
- return visible.length > 0
15
- && visible.length <= 48
16
- && !/^\s/u.test(visible)
17
- && !/[.!?:]$/u.test(visible)
18
- && !/^[-+◆▲✓!\d]/u.test(visible);
19
- }
20
- export async function streamTerminalText(value, options = {}) {
21
- const sleep = options.sleep || wait;
22
- const write = options.write || ((chunk) => { process.stdout.write(chunk); });
23
- const lines = value.split('\n');
24
- let burstIndex = 0;
25
- for (const [lineIndex, line] of lines.entries()) {
26
- const tokens = line.match(TOKEN_PATTERN) || [];
27
- let buffer = '';
28
- let visibleTokens = 0;
29
- for (const token of tokens) {
30
- buffer += token;
31
- if (!isVisibleToken(token))
32
- continue;
33
- visibleTokens += 1;
34
- const burstSize = BURST_SIZES[burstIndex % BURST_SIZES.length] || 3;
35
- if (visibleTokens < burstSize)
36
- continue;
37
- write(buffer);
38
- buffer = '';
39
- visibleTokens = 0;
40
- await sleep(BURST_DELAYS_MS[burstIndex % BURST_DELAYS_MS.length] || 12);
41
- burstIndex += 1;
42
- }
43
- if (buffer)
44
- write(buffer);
45
- if (lineIndex < lines.length - 1)
46
- write('\n');
47
- const visibleLine = line.replace(ANSI_GLOBAL, '');
48
- if (visibleLine.length === 0)
49
- await sleep(65);
50
- else if (isSectionHeading(line))
51
- await sleep(170);
52
- else if (/[.!?]$/u.test(visibleLine))
53
- await sleep(35);
54
- }
55
- }
56
- //# sourceMappingURL=stream.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/tui/stream.ts"],"names":[],"mappings":"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"}