@poping/yome 0.0.2 → 0.0.3
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/LICENSE +202 -0
- package/NOTICE +11 -0
- package/README.md +308 -27
- package/README.zh-CN.md +335 -0
- package/dist/agent.d.ts +24 -2
- package/dist/agent.js +34 -2
- package/dist/agent.js.map +1 -1
- package/dist/context.d.ts +2 -0
- package/dist/context.js +116 -11
- package/dist/context.js.map +1 -1
- package/dist/index.js +147 -9
- package/dist/index.js.map +1 -1
- package/dist/llm.js +45 -2
- package/dist/llm.js.map +1 -1
- package/dist/loops/chain.js +8 -0
- package/dist/loops/chain.js.map +1 -1
- package/dist/loops/evaluator.js +8 -0
- package/dist/loops/evaluator.js.map +1 -1
- package/dist/loops/orchestrator.js +8 -0
- package/dist/loops/orchestrator.js.map +1 -1
- package/dist/loops/parallel.js.map +1 -1
- package/dist/loops/route.js +8 -0
- package/dist/loops/route.js.map +1 -1
- package/dist/loops/simple.js +15 -0
- package/dist/loops/simple.js.map +1 -1
- package/dist/permissions/index.d.ts +1 -1
- package/dist/permissions/index.js +1 -1
- package/dist/permissions/index.js.map +1 -1
- package/dist/permissions/loader.d.ts +20 -1
- package/dist/permissions/loader.js +51 -0
- package/dist/permissions/loader.js.map +1 -1
- package/dist/redact.d.ts +56 -0
- package/dist/redact.js +191 -0
- package/dist/redact.js.map +1 -0
- package/dist/skills/runner/applescript.d.ts +49 -0
- package/dist/skills/runner/applescript.js +100 -0
- package/dist/skills/runner/applescript.js.map +1 -0
- package/dist/skills/runner/dispatcher.d.ts +57 -0
- package/dist/skills/runner/dispatcher.js +407 -0
- package/dist/skills/runner/dispatcher.js.map +1 -0
- package/dist/skills/runner/kernel.d.ts +8 -0
- package/dist/skills/runner/kernel.js +732 -0
- package/dist/skills/runner/kernel.js.map +1 -0
- package/dist/skills/runner/tokenizer.d.ts +36 -0
- package/dist/skills/runner/tokenizer.js +177 -0
- package/dist/skills/runner/tokenizer.js.map +1 -0
- package/dist/threadCli.d.ts +11 -0
- package/dist/threadCli.js +177 -0
- package/dist/threadCli.js.map +1 -0
- package/dist/threadShare.d.ts +21 -0
- package/dist/threadShare.js +121 -0
- package/dist/threadShare.js.map +1 -0
- package/dist/threadSubmit.d.ts +32 -0
- package/dist/threadSubmit.js +199 -0
- package/dist/threadSubmit.js.map +1 -0
- package/dist/tools/bash.js +68 -13
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/index.d.ts +22 -2
- package/dist/tools/index.js +41 -5
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/skillCall.d.ts +2 -0
- package/dist/tools/skillCall.js +77 -0
- package/dist/tools/skillCall.js.map +1 -0
- package/dist/ui/AgentPicker.js +3 -3
- package/dist/ui/AgentPicker.js.map +1 -1
- package/dist/ui/App.js +214 -61
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/Banner.d.ts +2 -1
- package/dist/ui/Banner.js +23 -4
- package/dist/ui/Banner.js.map +1 -1
- package/dist/ui/InputBar.js +6 -3
- package/dist/ui/InputBar.js.map +1 -1
- package/dist/ui/Markdown.d.ts +2 -2
- package/dist/ui/Markdown.js +22 -7
- package/dist/ui/Markdown.js.map +1 -1
- package/dist/ui/MarketplacePicker.d.ts +7 -0
- package/dist/ui/MarketplacePicker.js +122 -0
- package/dist/ui/MarketplacePicker.js.map +1 -0
- package/dist/ui/MessageList.d.ts +4 -1
- package/dist/ui/MessageList.js +72 -7
- package/dist/ui/MessageList.js.map +1 -1
- package/dist/ui/ModelPicker.js +4 -4
- package/dist/ui/ModelPicker.js.map +1 -1
- package/dist/ui/PermissionPrompt.d.ts +16 -4
- package/dist/ui/PermissionPrompt.js +60 -15
- package/dist/ui/PermissionPrompt.js.map +1 -1
- package/dist/ui/SessionPicker.js +2 -2
- package/dist/ui/SessionPicker.js.map +1 -1
- package/dist/ui/ShimmerText.d.ts +8 -0
- package/dist/ui/ShimmerText.js +40 -0
- package/dist/ui/ShimmerText.js.map +1 -0
- package/dist/ui/Spinner.js +3 -9
- package/dist/ui/Spinner.js.map +1 -1
- package/dist/ui/TogglePicker.js +4 -4
- package/dist/ui/TogglePicker.js.map +1 -1
- package/dist/ui/ToolResult.js +6 -0
- package/dist/ui/ToolResult.js.map +1 -1
- package/dist/ui/UnifiedSkillsPicker.d.ts +10 -0
- package/dist/ui/UnifiedSkillsPicker.js +63 -0
- package/dist/ui/UnifiedSkillsPicker.js.map +1 -0
- package/dist/ui/animation.d.ts +3 -0
- package/dist/ui/animation.js +48 -0
- package/dist/ui/animation.js.map +1 -0
- package/dist/ui/useThrottledStream.d.ts +7 -0
- package/dist/ui/useThrottledStream.js +63 -0
- package/dist/ui/useThrottledStream.js.map +1 -0
- package/dist/yomeSkills/auth.d.ts +20 -0
- package/dist/yomeSkills/auth.js +70 -0
- package/dist/yomeSkills/auth.js.map +1 -0
- package/dist/yomeSkills/blacklist.d.ts +33 -0
- package/dist/yomeSkills/blacklist.js +101 -0
- package/dist/yomeSkills/blacklist.js.map +1 -0
- package/dist/yomeSkills/capabilities.d.ts +54 -0
- package/dist/yomeSkills/capabilities.js +175 -0
- package/dist/yomeSkills/capabilities.js.map +1 -0
- package/dist/yomeSkills/capabilityGuard.d.ts +31 -0
- package/dist/yomeSkills/capabilityGuard.js +113 -0
- package/dist/yomeSkills/capabilityGuard.js.map +1 -0
- package/dist/yomeSkills/cli.d.ts +17 -0
- package/dist/yomeSkills/cli.js +477 -0
- package/dist/yomeSkills/cli.js.map +1 -0
- package/dist/yomeSkills/devLink.d.ts +17 -0
- package/dist/yomeSkills/devLink.js +91 -0
- package/dist/yomeSkills/devLink.js.map +1 -0
- package/dist/yomeSkills/doctor.d.ts +13 -0
- package/dist/yomeSkills/doctor.js +152 -0
- package/dist/yomeSkills/doctor.js.map +1 -0
- package/dist/yomeSkills/enable.d.ts +8 -0
- package/dist/yomeSkills/enable.js +67 -0
- package/dist/yomeSkills/enable.js.map +1 -0
- package/dist/yomeSkills/hubPing.d.ts +1 -0
- package/dist/yomeSkills/hubPing.js +41 -0
- package/dist/yomeSkills/hubPing.js.map +1 -0
- package/dist/yomeSkills/install.d.ts +18 -0
- package/dist/yomeSkills/install.js +143 -0
- package/dist/yomeSkills/install.js.map +1 -0
- package/dist/yomeSkills/installGithub.d.ts +26 -0
- package/dist/yomeSkills/installGithub.js +192 -0
- package/dist/yomeSkills/installGithub.js.map +1 -0
- package/dist/yomeSkills/installMeta.d.ts +8 -0
- package/dist/yomeSkills/installMeta.js +76 -0
- package/dist/yomeSkills/installMeta.js.map +1 -0
- package/dist/yomeSkills/integrity.d.ts +26 -0
- package/dist/yomeSkills/integrity.js +107 -0
- package/dist/yomeSkills/integrity.js.map +1 -0
- package/dist/yomeSkills/invoke.d.ts +29 -0
- package/dist/yomeSkills/invoke.js +103 -0
- package/dist/yomeSkills/invoke.js.map +1 -0
- package/dist/yomeSkills/list.d.ts +11 -0
- package/dist/yomeSkills/list.js +55 -0
- package/dist/yomeSkills/list.js.map +1 -0
- package/dist/yomeSkills/login.d.ts +41 -0
- package/dist/yomeSkills/login.js +221 -0
- package/dist/yomeSkills/login.js.map +1 -0
- package/dist/yomeSkills/manifest.d.ts +60 -0
- package/dist/yomeSkills/manifest.js +47 -0
- package/dist/yomeSkills/manifest.js.map +1 -0
- package/dist/yomeSkills/paths.d.ts +13 -0
- package/dist/yomeSkills/paths.js +33 -0
- package/dist/yomeSkills/paths.js.map +1 -0
- package/dist/yomeSkills/publish.d.ts +16 -0
- package/dist/yomeSkills/publish.js +109 -0
- package/dist/yomeSkills/publish.js.map +1 -0
- package/dist/yomeSkills/rollback.d.ts +10 -0
- package/dist/yomeSkills/rollback.js +83 -0
- package/dist/yomeSkills/rollback.js.map +1 -0
- package/dist/yomeSkills/search.d.ts +21 -0
- package/dist/yomeSkills/search.js +31 -0
- package/dist/yomeSkills/search.js.map +1 -0
- package/dist/yomeSkills/skillsIndex.d.ts +36 -0
- package/dist/yomeSkills/skillsIndex.js +111 -0
- package/dist/yomeSkills/skillsIndex.js.map +1 -0
- package/dist/yomeSkills/unified.d.ts +53 -0
- package/dist/yomeSkills/unified.js +187 -0
- package/dist/yomeSkills/unified.js.map +1 -0
- package/dist/yomeSkills/uninstall.d.ts +7 -0
- package/dist/yomeSkills/uninstall.js +22 -0
- package/dist/yomeSkills/uninstall.js.map +1 -0
- package/dist/yomeSkills/update.d.ts +18 -0
- package/dist/yomeSkills/update.js +75 -0
- package/dist/yomeSkills/update.js.map +1 -0
- package/dist/yomeSkills/validate.d.ts +11 -0
- package/dist/yomeSkills/validate.js +99 -0
- package/dist/yomeSkills/validate.js.map +1 -0
- package/package.json +14 -5
|
@@ -1,14 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useState } from 'react';
|
|
3
3
|
import { Box, Text, useInput } from 'ink';
|
|
4
|
+
import TextInput from 'ink-text-input';
|
|
4
5
|
const OPTIONS = [
|
|
5
|
-
{ id: 'allow', label: '
|
|
6
|
-
{ id: '
|
|
7
|
-
{ id: '
|
|
6
|
+
{ id: 'allow', label: () => '是,允许(仅本次)' },
|
|
7
|
+
{ id: 'session', label: (r) => `是,本会话内不再询问 (${r})` },
|
|
8
|
+
{ id: 'always', label: (r) => `是,并永久允许 (${r}) — 写入 ~/.yome/settings.json` },
|
|
9
|
+
{ id: 'deny', label: () => '否,并可选告知原因 (Esc 直接拒绝)' },
|
|
8
10
|
];
|
|
9
|
-
export function PermissionPrompt({ toolName, message, detail,
|
|
11
|
+
export function PermissionPrompt({ toolName, message, detail, suggestedRule, onResolve }) {
|
|
10
12
|
const [cursor, setCursor] = useState(0);
|
|
13
|
+
const [feedbackMode, setFeedbackMode] = useState(false);
|
|
14
|
+
const [feedback, setFeedback] = useState('');
|
|
15
|
+
const [editingRule, setEditingRule] = useState(false);
|
|
16
|
+
const [ruleDraft, setRuleDraft] = useState(suggestedRule);
|
|
17
|
+
const [pendingScope, setPendingScope] = useState(null);
|
|
11
18
|
useInput((_input, key) => {
|
|
19
|
+
if (feedbackMode || editingRule)
|
|
20
|
+
return; // TextInput handles keys
|
|
12
21
|
if (key.upArrow) {
|
|
13
22
|
setCursor((prev) => (prev > 0 ? prev - 1 : OPTIONS.length - 1));
|
|
14
23
|
}
|
|
@@ -17,21 +26,57 @@ export function PermissionPrompt({ toolName, message, detail, onAllow, onDeny, o
|
|
|
17
26
|
}
|
|
18
27
|
else if (key.return) {
|
|
19
28
|
const selected = OPTIONS[cursor].id;
|
|
20
|
-
if (selected === 'allow')
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
29
|
+
if (selected === 'allow') {
|
|
30
|
+
onResolve({ kind: 'allow_once' });
|
|
31
|
+
}
|
|
32
|
+
else if (selected === 'session') {
|
|
33
|
+
if (suggestedRule.includes('(')) {
|
|
34
|
+
// Pre-formed rule like "Bash(npm run:*)" — let user edit
|
|
35
|
+
setPendingScope('session');
|
|
36
|
+
setEditingRule(true);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
onResolve({ kind: 'allow_session', ruleString: suggestedRule });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
else if (selected === 'always') {
|
|
43
|
+
if (suggestedRule.includes('(')) {
|
|
44
|
+
setPendingScope('always');
|
|
45
|
+
setEditingRule(true);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
onResolve({ kind: 'allow_always', ruleString: suggestedRule });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else if (selected === 'deny') {
|
|
52
|
+
setFeedbackMode(true);
|
|
53
|
+
}
|
|
26
54
|
}
|
|
27
55
|
else if (key.escape) {
|
|
28
|
-
|
|
56
|
+
onResolve({ kind: 'deny' });
|
|
29
57
|
}
|
|
30
58
|
});
|
|
31
|
-
|
|
59
|
+
const handleFeedbackSubmit = (value) => {
|
|
60
|
+
onResolve({ kind: 'deny', feedback: value.trim() || undefined });
|
|
61
|
+
};
|
|
62
|
+
const handleRuleSubmit = (value) => {
|
|
63
|
+
const trimmed = value.trim();
|
|
64
|
+
if (!trimmed) {
|
|
65
|
+
setEditingRule(false);
|
|
66
|
+
setPendingScope(null);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (pendingScope === 'session') {
|
|
70
|
+
onResolve({ kind: 'allow_session', ruleString: trimmed });
|
|
71
|
+
}
|
|
72
|
+
else if (pendingScope === 'always') {
|
|
73
|
+
onResolve({ kind: 'allow_always', ruleString: trimmed });
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "#E87B35", paddingX: 1, marginTop: 1, children: [_jsxs(Box, { children: [_jsx(Text, { bold: true, color: "#E87B35", children: toolName }), _jsxs(Text, { children: [": ", message] })] }), detail && (_jsxs(Box, { marginTop: 1, children: [_jsx(Text, { dimColor: true, children: ' ' }), _jsx(Text, { children: detail.length > 200 ? detail.slice(0, 200) + '…' : detail })] })), !feedbackMode && !editingRule && OPTIONS.map((opt, i) => {
|
|
32
77
|
const isFocused = i === cursor;
|
|
33
78
|
const pointer = isFocused ? '> ' : ' ';
|
|
34
|
-
return (_jsx(Box, { children: _jsxs(Text, { color: isFocused ? '
|
|
35
|
-
}), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { dimColor: true, children: ['\u2191\u2193', " \u5BFC\u822A Enter \u9009\u62E9 Esc \
|
|
79
|
+
return (_jsx(Box, { children: _jsxs(Text, { color: isFocused ? '#E87B35' : undefined, bold: isFocused, children: [pointer, opt.label(suggestedRule)] }) }, opt.id));
|
|
80
|
+
}), editingRule && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsxs(Text, { dimColor: true, children: ["\u7F16\u8F91 ", pendingScope === 'always' ? '永久' : '本会话', " \u5141\u8BB8\u89C4\u5219\uFF08Enter \u786E\u8BA4\uFF0C\u7A7A\u503C\u53D6\u6D88\uFF09\uFF1A"] }), _jsxs(Box, { children: [_jsx(Text, { color: "#E87B35", children: '> ' }), _jsx(TextInput, { value: ruleDraft, onChange: setRuleDraft, onSubmit: handleRuleSubmit })] })] })), feedbackMode && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { dimColor: true, children: "\u544A\u8BC9 agent \u62D2\u7EDD\u539F\u56E0\uFF08Enter \u786E\u8BA4\uFF0C\u7559\u7A7A\u8868\u793A\u65E0\u53CD\u9988\uFF09\uFF1A" }), _jsxs(Box, { children: [_jsx(Text, { color: "#E87B35", children: '> ' }), _jsx(TextInput, { value: feedback, onChange: setFeedback, onSubmit: handleFeedbackSubmit })] })] })), !feedbackMode && !editingRule && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { dimColor: true, children: ['\u2191\u2193', " \u5BFC\u822A Enter \u9009\u62E9 Esc \u76F4\u63A5\u62D2\u7EDD"] }) }))] }));
|
|
36
81
|
}
|
|
37
82
|
//# sourceMappingURL=PermissionPrompt.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PermissionPrompt.js","sourceRoot":"","sources":["../../src/ui/PermissionPrompt.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"PermissionPrompt.js","sourceRoot":"","sources":["../../src/ui/PermissionPrompt.tsx"],"names":[],"mappings":"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"}
|
package/dist/ui/SessionPicker.js
CHANGED
|
@@ -52,13 +52,13 @@ export function SessionPicker({ sessions, onSelect, onCancel }) {
|
|
|
52
52
|
if (sessions.length === 0) {
|
|
53
53
|
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 1, children: [_jsx(Text, { dimColor: true, children: "No previous sessions found for this project." }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Esc to close" }) })] }));
|
|
54
54
|
}
|
|
55
|
-
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 1, children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { bold: true, color: "
|
|
55
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 1, children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { bold: true, color: "#E87B35", children: "Sessions" }), _jsxs(Text, { dimColor: true, children: [" ", '\u2014', " ", sessions.length, " session", sessions.length !== 1 ? 's' : '', ", select to continue"] })] }), hasScrollUp && (_jsx(Box, { children: _jsxs(Text, { dimColor: true, children: [" ", '\u2191', " more"] }) })), visibleItems.map((s, vi) => {
|
|
56
56
|
const realIdx = visibleStart + vi;
|
|
57
57
|
const isFocused = realIdx === cursor;
|
|
58
58
|
const pointer = isFocused ? '\u276F' : ' ';
|
|
59
59
|
const titleText = s.title.length > 60 ? s.title.slice(0, 57) + '...' : s.title;
|
|
60
60
|
const timeStr = formatDate(s.lastModified);
|
|
61
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsxs(Text, { color: isFocused ? '
|
|
61
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsxs(Text, { color: isFocused ? '#E87B35' : undefined, children: [pointer, " "] }), _jsx(Text, { bold: true, color: isFocused ? '#E87B35' : undefined, children: titleText })] }), _jsxs(Box, { children: [_jsx(Text, { children: ' ' }), _jsx(Text, { dimColor: true, children: timeStr }), _jsx(Text, { dimColor: true, children: ' \u00B7 ' }), _jsxs(Text, { dimColor: true, children: [s.messageCount, " messages"] })] })] }, s.sessionId));
|
|
62
62
|
}), hasScrollDown && (_jsx(Box, { children: _jsxs(Text, { dimColor: true, children: [" ", '\u2193', " more"] }) })), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { dimColor: true, children: ['\u2191\u2193', " navigate ", ' ', " Enter continue ", ' ', " Esc cancel"] }) })] }));
|
|
63
63
|
}
|
|
64
64
|
//# sourceMappingURL=SessionPicker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionPicker.js","sourceRoot":"","sources":["../../src/ui/SessionPicker.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"SessionPicker.js","sourceRoot":"","sources":["../../src/ui/SessionPicker.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface ShimmerTextProps {
|
|
2
|
+
text: string;
|
|
3
|
+
/** How many frames between each character shift. 1 = fastest. */
|
|
4
|
+
speed?: number;
|
|
5
|
+
bold?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function ShimmerText({ text, speed, bold }: ShimmerTextProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Text } from 'ink';
|
|
3
|
+
import { useFrame } from './animation.js';
|
|
4
|
+
// Two-tone ramp: brand orange → white → orange. Linear interpolation
|
|
5
|
+
// from #E87B35 to #FFFFFF and back. The peak (#FFFFFF) is the moving
|
|
6
|
+
// "spot light" sweeping across the word; everything else is just an
|
|
7
|
+
// orange-to-white gradient with no extra hues.
|
|
8
|
+
//
|
|
9
|
+
// Ink uses chalk under the hood, which supports truecolor in modern
|
|
10
|
+
// terminals, so any hex value works.
|
|
11
|
+
const RAMP = [
|
|
12
|
+
'#E87B35', // brand orange (base)
|
|
13
|
+
'#EC8C4D',
|
|
14
|
+
'#F09D65',
|
|
15
|
+
'#F3AE7D',
|
|
16
|
+
'#F7BF95',
|
|
17
|
+
'#FBD0AD',
|
|
18
|
+
'#FFFFFF', // peak (the "spark")
|
|
19
|
+
'#FBD0AD',
|
|
20
|
+
'#F7BF95',
|
|
21
|
+
'#F3AE7D',
|
|
22
|
+
'#F09D65',
|
|
23
|
+
'#EC8C4D',
|
|
24
|
+
];
|
|
25
|
+
export function ShimmerText({ text, speed = 1, bold = true }) {
|
|
26
|
+
const frame = useFrame();
|
|
27
|
+
const period = RAMP.length;
|
|
28
|
+
// Slower speed = larger divisor so the spot light moves less per frame.
|
|
29
|
+
const phase = Math.floor(frame / Math.max(1, speed));
|
|
30
|
+
// We render one <Text> per character. That's a few extra nodes but
|
|
31
|
+
// they're tiny and Ink's renderer batches them into one terminal
|
|
32
|
+
// patch via its damage tracker. Memoization elsewhere already makes
|
|
33
|
+
// sure non-shimmering rows don't re-render along with this one.
|
|
34
|
+
return (_jsx(Text, { children: Array.from(text).map((ch, i) => {
|
|
35
|
+
const idx = ((phase - i) % period + period) % period;
|
|
36
|
+
const color = RAMP[idx];
|
|
37
|
+
return (_jsx(Text, { color: color, bold: bold, children: ch }, i));
|
|
38
|
+
}) }));
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=ShimmerText.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShimmerText.js","sourceRoot":"","sources":["../../src/ui/ShimmerText.tsx"],"names":[],"mappings":";AAWA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,qEAAqE;AACrE,qEAAqE;AACrE,oEAAoE;AACpE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,qCAAqC;AACrC,MAAM,IAAI,GAAG;IACX,SAAS,EAAE,sBAAsB;IACjC,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS,EAAE,qBAAqB;IAChC,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;CACV,CAAC;AASF,MAAM,UAAU,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,EAAoB;IAC5E,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,wEAAwE;IACxE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAErD,mEAAmE;IACnE,iEAAiE;IACjE,oEAAoE;IACpE,gEAAgE;IAChE,OAAO,CACL,KAAC,IAAI,cACF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;YAC9B,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;YACrD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAE,CAAC;YACzB,OAAO,CACL,KAAC,IAAI,IAAS,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,YACnC,EAAE,IADM,CAAC,CAEL,CACR,CAAC;QACJ,CAAC,CAAC,GACG,CACR,CAAC;AACJ,CAAC"}
|
package/dist/ui/Spinner.js
CHANGED
|
@@ -1,15 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useState, useEffect } from 'react';
|
|
3
2
|
import { Text } from 'ink';
|
|
3
|
+
import { useFrame } from './animation.js';
|
|
4
4
|
const FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
|
|
5
5
|
export function Spinner({ color = 'cyan' }) {
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
const timer = setInterval(() => {
|
|
9
|
-
setFrame((prev) => (prev + 1) % FRAMES.length);
|
|
10
|
-
}, 80);
|
|
11
|
-
return () => clearInterval(timer);
|
|
12
|
-
}, []);
|
|
13
|
-
return _jsx(Text, { color: color, children: FRAMES[frame] });
|
|
6
|
+
const frame = useFrame();
|
|
7
|
+
return _jsx(Text, { color: color, children: FRAMES[frame % FRAMES.length] });
|
|
14
8
|
}
|
|
15
9
|
//# sourceMappingURL=Spinner.js.map
|
package/dist/ui/Spinner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Spinner.js","sourceRoot":"","sources":["../../src/ui/Spinner.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"Spinner.js","sourceRoot":"","sources":["../../src/ui/Spinner.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAElE,MAAM,UAAU,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,EAAsB;IAC5D,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,OAAO,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,YAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,GAAQ,CAAC;AACpE,CAAC"}
|
package/dist/ui/TogglePicker.js
CHANGED
|
@@ -20,16 +20,16 @@ export function TogglePicker({ title, items, onToggle, onClose, emptyHint }) {
|
|
|
20
20
|
}
|
|
21
21
|
});
|
|
22
22
|
if (items.length === 0) {
|
|
23
|
-
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { bold: true, color: "
|
|
23
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { bold: true, color: "#E87B35", children: title }) }), _jsx(Text, { dimColor: true, children: emptyHint }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Esc close" }) })] }));
|
|
24
24
|
}
|
|
25
25
|
const maxNameLen = Math.max(...items.map((i) => i.name.length));
|
|
26
|
-
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 1, children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { bold: true, color: "
|
|
26
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 1, children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { bold: true, color: "#E87B35", children: title }), _jsxs(Text, { dimColor: true, children: [" ", '\u2014', " Space/Enter toggle, Esc close"] })] }), items.map((item, i) => {
|
|
27
27
|
const isFocused = i === cursor;
|
|
28
28
|
const pointer = isFocused ? '\u276F' : ' ';
|
|
29
29
|
const toggle = item.enabled ? '\u25C9' : '\u25CB';
|
|
30
|
-
const toggleColor = item.enabled ? '
|
|
30
|
+
const toggleColor = item.enabled ? '#E87B35' : 'gray';
|
|
31
31
|
const padded = item.name.padEnd(maxNameLen + 2);
|
|
32
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsxs(Text, { color: isFocused ? '
|
|
32
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsxs(Text, { color: isFocused ? '#E87B35' : undefined, children: [pointer, " "] }), _jsxs(Text, { color: toggleColor, children: [toggle, " "] }), _jsx(Text, { bold: true, color: isFocused ? '#E87B35' : undefined, children: padded }), _jsx(Text, { dimColor: !isFocused, children: item.description }), _jsxs(Text, { dimColor: true, children: [" (", item.source, ")"] })] }), isFocused && item.skills && item.skills.length > 0 && (_jsx(Box, { marginLeft: 6, children: _jsxs(Text, { dimColor: true, children: ["Skills: ", item.skills.join(', ')] }) }))] }, item.name));
|
|
33
33
|
}), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { dimColor: true, children: ['\u2191\u2193', " navigate ", ' ', " Space/Enter toggle ", ' ', " Esc close"] }) })] }));
|
|
34
34
|
}
|
|
35
35
|
//# sourceMappingURL=TogglePicker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TogglePicker.js","sourceRoot":"","sources":["../../src/ui/TogglePicker.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAkB1C,MAAM,UAAU,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAqB;IAC5F,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAExC,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,KAAK,GAAG,CAAC,EAAE,CAAC;YAC9C,OAAO,EAAE,CAAC;QACZ,CAAC;aAAM,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACvB,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;aAAM,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YACzB,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;aAAM,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACvC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAE,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,QAAQ,EAAE,CAAC,aAC5E,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,
|
|
1
|
+
{"version":3,"file":"TogglePicker.js","sourceRoot":"","sources":["../../src/ui/TogglePicker.tsx"],"names":[],"mappings":"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"}
|
package/dist/ui/ToolResult.js
CHANGED
|
@@ -34,6 +34,12 @@ function DiffView({ result }) {
|
|
|
34
34
|
}), _jsx(Text, { dimColor: true, children: '─'.repeat(cols) }), truncated && _jsx(Text, { dimColor: true, children: ` … ${diffLines.length - maxShow} more lines` })] }));
|
|
35
35
|
}
|
|
36
36
|
export function ToolResult({ name, result }) {
|
|
37
|
+
// Permission denial — surface a concise red line so the user can see the
|
|
38
|
+
// tool was blocked. The full guidance text is kept in the tool_result that
|
|
39
|
+
// goes back to the model.
|
|
40
|
+
if (result.startsWith('[YOME_PERMISSION_DENIED]')) {
|
|
41
|
+
return (_jsx(Box, { marginLeft: 4, children: _jsx(Text, { color: "red", children: `✕ ${name} — permission denied` }) }));
|
|
42
|
+
}
|
|
37
43
|
// Read, LS, Grep, Glob, Bash — don't show content to user (it's for the AI)
|
|
38
44
|
if (name === 'Read' || name === 'LS' || name === 'Grep' || name === 'Glob') {
|
|
39
45
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolResult.js","sourceRoot":"","sources":["../../src/ui/ToolResult.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ToolResult.js","sourceRoot":"","sources":["../../src/ui/ToolResult.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { UnifiedSkill } from '../yomeSkills/unified.js';
|
|
2
|
+
interface UnifiedSkillsPickerProps {
|
|
3
|
+
skills: UnifiedSkill[];
|
|
4
|
+
onToggle: (skill: UnifiedSkill) => void;
|
|
5
|
+
onUninstall: (skill: UnifiedSkill) => void;
|
|
6
|
+
onAdd: () => void;
|
|
7
|
+
onClose: () => void;
|
|
8
|
+
}
|
|
9
|
+
export declare function UnifiedSkillsPicker({ skills, onToggle, onUninstall, onAdd, onClose, }: UnifiedSkillsPickerProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
// UnifiedSkillsPicker — TUI for `/skills` slash command.
|
|
3
|
+
//
|
|
4
|
+
// Lists every skill the agent knows about, regardless of system:
|
|
5
|
+
// - prompt skills: SKILL.md files under .yome/skills (Claude Code FORMAT,
|
|
6
|
+
// but yome paths only — we don't read ~/.claude)
|
|
7
|
+
// - hub skills: yome-skill.json packages installed via `yome skill install`
|
|
8
|
+
//
|
|
9
|
+
// The kind column lets the user immediately see what they're toggling.
|
|
10
|
+
// Common actions (enable/disable) work uniformly; uninstall is hub-only
|
|
11
|
+
// because removing a SKILL.md should be left to the user's editor.
|
|
12
|
+
import { useMemo, useState } from 'react';
|
|
13
|
+
import { Box, Text, useInput } from 'ink';
|
|
14
|
+
import { originLabel } from '../yomeSkills/unified.js';
|
|
15
|
+
export function UnifiedSkillsPicker({ skills, onToggle, onUninstall, onAdd, onClose, }) {
|
|
16
|
+
const [cursor, setCursor] = useState(0);
|
|
17
|
+
const focused = skills[cursor];
|
|
18
|
+
const maxNameLen = useMemo(() => (skills.length > 0 ? Math.max(...skills.map((s) => s.name.length)) : 8), [skills]);
|
|
19
|
+
const maxKindLen = useMemo(() => (skills.length > 0 ? Math.max(...skills.map((s) => originLabel(s).length)) : 4), [skills]);
|
|
20
|
+
useInput((input, key) => {
|
|
21
|
+
if (key.escape || (key.ctrl && input === 'c')) {
|
|
22
|
+
onClose();
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (input === 'a') {
|
|
26
|
+
onAdd();
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (input === 'u' && focused && focused.kind === 'hub') {
|
|
30
|
+
onUninstall(focused);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (skills.length === 0)
|
|
34
|
+
return;
|
|
35
|
+
if (key.upArrow)
|
|
36
|
+
setCursor((c) => (c > 0 ? c - 1 : skills.length - 1));
|
|
37
|
+
else if (key.downArrow)
|
|
38
|
+
setCursor((c) => (c < skills.length - 1 ? c + 1 : 0));
|
|
39
|
+
else if (key.return || input === ' ') {
|
|
40
|
+
if (focused)
|
|
41
|
+
onToggle(focused);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
const promptCount = skills.filter((s) => s.kind === 'prompt').length;
|
|
45
|
+
const hubCount = skills.filter((s) => s.kind === 'hub').length;
|
|
46
|
+
// Fixed column widths derived from longest cell content. Pointer slot,
|
|
47
|
+
// toggle slot, and the gap between them are constants so every row
|
|
48
|
+
// (focused or not) lines up exactly. The detail block under a focused
|
|
49
|
+
// row reuses the same prefix indent so it visually nests under the name
|
|
50
|
+
// column rather than floating at a magic offset.
|
|
51
|
+
const POINTER_W = 2; // '>' + space
|
|
52
|
+
const TOGGLE_W = 2; // '●' + space
|
|
53
|
+
const GAP_W = 2; // gutter before the name column
|
|
54
|
+
const PREFIX_W = POINTER_W + TOGGLE_W + GAP_W; // 6 — detail indent
|
|
55
|
+
const nameColW = maxNameLen + 2;
|
|
56
|
+
const kindColW = maxKindLen + 2;
|
|
57
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 1, paddingY: 0, width: "100%", children: [_jsxs(Box, { children: [_jsx(Text, { bold: true, color: "#E87B35", children: "Skills" }), _jsxs(Text, { dimColor: true, children: [' ', '\u2014', ' ', hubCount, " hub \u00B7 ", promptCount, " prompt"] })] }), _jsx(Box, { marginTop: 1, marginBottom: 1, children: _jsx(Text, { dimColor: true, children: '\u2500'.repeat(60) }) }), skills.length === 0 && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { dimColor: true, children: "No skills installed yet." }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { dimColor: true, children: "Try one of:" }), _jsx(Text, { dimColor: true, children: " \u00B7 /plugins open the hub marketplace" }), _jsx(Text, { dimColor: true, children: " \u00B7 ~/.yome/skills/<name>/SKILL.md add a prompt skill (user)" }), _jsx(Text, { dimColor: true, children: " \u00B7 ./.yome/skills/<name>/SKILL.md add a prompt skill (project)" })] })] })), skills.map((s, i) => {
|
|
58
|
+
const isFocused = i === cursor;
|
|
59
|
+
const toggle = s.enabled ? '\u25CF' : '\u25CB';
|
|
60
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Box, { width: POINTER_W, flexShrink: 0, children: _jsx(Text, { color: isFocused ? '#E87B35' : undefined, bold: isFocused, children: isFocused ? '>' : ' ' }) }), _jsx(Box, { width: TOGGLE_W, flexShrink: 0, children: _jsx(Text, { color: "#E87B35", children: toggle }) }), _jsx(Box, { width: GAP_W, flexShrink: 0, children: _jsx(Text, { children: " " }) }), _jsx(Box, { width: nameColW, flexShrink: 0, children: _jsx(Text, { bold: true, color: isFocused ? '#E87B35' : undefined, wrap: "truncate-end", children: s.name }) }), _jsx(Box, { width: kindColW, flexShrink: 0, children: _jsx(Text, { dimColor: true, wrap: "truncate-end", children: originLabel(s) }) }), _jsx(Box, { flexGrow: 1, flexShrink: 1, children: _jsx(Text, { dimColor: true, wrap: "truncate-end", children: s.description }) })] }), isFocused && (_jsxs(Box, { marginLeft: PREFIX_W, marginTop: 0, marginBottom: 1, flexDirection: "column", children: [s.kind === 'hub' && (_jsxs(_Fragment, { children: [_jsxs(Box, { children: [_jsx(Box, { width: 9, flexShrink: 0, children: _jsx(Text, { dimColor: true, children: "slug" }) }), _jsxs(Text, { dimColor: true, wrap: "truncate-end", children: [s.slug, " \u00B7 v", s.version, " \u00B7 ", s.domain] })] }), s.source && (_jsxs(Box, { children: [_jsx(Box, { width: 9, flexShrink: 0, children: _jsx(Text, { dimColor: true, children: "source" }) }), _jsx(Text, { dimColor: true, wrap: "truncate-end", children: s.source })] })), s.allowedCapabilities && s.allowedCapabilities.length > 0 && (_jsxs(Box, { children: [_jsx(Box, { width: 9, flexShrink: 0, children: _jsx(Text, { dimColor: true, children: "caps" }) }), _jsx(Text, { dimColor: true, wrap: "truncate-end", children: s.allowedCapabilities.join(', ') })] }))] })), s.kind === 'prompt' && (_jsxs(Box, { children: [_jsx(Box, { width: 9, flexShrink: 0, children: _jsx(Text, { dimColor: true, children: "file" }) }), _jsxs(Text, { dimColor: true, wrap: "truncate-end", children: [s.installedAt, "/SKILL.md"] })] }))] }))] }, s.id));
|
|
61
|
+
}), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: '\u2500'.repeat(60) }) }), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { dimColor: true, wrap: "truncate-end", children: [_jsx(Text, { color: "#E87B35", children: '\u2191\u2193' }), " nav ", _jsx(Text, { color: "#E87B35", children: "Space" }), " toggle ", _jsx(Text, { color: "#E87B35", children: "a" }), " add", focused?.kind === 'hub' ? _jsxs(_Fragment, { children: [" ", _jsx(Text, { color: "#E87B35", children: "u" }), " uninstall"] }) : '', " ", _jsx(Text, { color: "#E87B35", children: "Esc" }), " close"] }) })] }));
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=UnifiedSkillsPicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnifiedSkillsPicker.js","sourceRoot":"","sources":["../../src/ui/UnifiedSkillsPicker.tsx"],"names":[],"mappings":";AAAA,yDAAyD;AACzD,EAAE;AACF,iEAAiE;AACjE,4EAA4E;AAC5E,oEAAoE;AACpE,iFAAiF;AACjF,EAAE;AACF,uEAAuE;AACvE,wEAAwE;AACxE,mEAAmE;AAEnE,OAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAUvD,MAAM,UAAU,mBAAmB,CAAC,EAClC,MAAM,EACN,QAAQ,EACR,WAAW,EACX,KAAK,EACL,OAAO,GACkB;IACzB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAE/B,MAAM,UAAU,GAAG,OAAO,CACxB,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC7E,CAAC,MAAM,CAAC,CACT,CAAC;IACF,MAAM,UAAU,GAAG,OAAO,CACxB,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACrF,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,KAAK,GAAG,CAAC,EAAE,CAAC;YAC9C,OAAO,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QACD,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAClB,KAAK,EAAE,CAAC;YACR,OAAO;QACT,CAAC;QACD,IAAI,KAAK,KAAK,GAAG,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACvD,WAAW,CAAC,OAAO,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAChC,IAAI,GAAG,CAAC,OAAO;YAAE,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;aAClE,IAAI,GAAG,CAAC,SAAS;YAAE,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACzE,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACrC,IAAI,OAAO;gBAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,MAAM,CAAC;IACrE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,MAAM,CAAC;IAE/D,uEAAuE;IACvE,mEAAmE;IACnE,sEAAsE;IACtE,wEAAwE;IACxE,iDAAiD;IACjD,MAAM,SAAS,GAAG,CAAC,CAAC,CAAG,cAAc;IACrC,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAI,cAAc;IACrC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAO,gCAAgC;IACvD,MAAM,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,KAAK,CAAC,CAAC,oBAAoB;IACnE,MAAM,QAAQ,GAAG,UAAU,GAAG,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,UAAU,GAAG,CAAC,CAAC;IAEhC,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAC,MAAM,aAEvG,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,SAAS,uBAAc,EACxC,MAAC,IAAI,IAAC,QAAQ,mBAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,oBAAW,WAAW,eAAe,IAC/E,EAEN,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,YAChC,KAAC,IAAI,IAAC,QAAQ,kBAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,GAAQ,GACvC,EAGL,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CACtB,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,IAAC,QAAQ,+CAAgC,EAC9C,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,aACvC,KAAC,IAAI,IAAC,QAAQ,kCAAmB,EACjC,KAAC,IAAI,IAAC,QAAQ,8FAA0E,EACxF,KAAC,IAAI,IAAC,QAAQ,8FAAgF,EAC9F,KAAC,IAAI,IAAC,QAAQ,iGAAmF,IAC7F,IACF,CACP,EAGA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACnB,MAAM,SAAS,GAAG,CAAC,KAAK,MAAM,CAAC;gBAC/B,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAE/C,OAAO,CACL,MAAC,GAAG,IAAY,aAAa,EAAC,QAAQ,aACpC,MAAC,GAAG,eACF,KAAC,GAAG,IAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,YAClC,KAAC,IAAI,IAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,YAC5D,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GACjB,GACH,EACN,KAAC,GAAG,IAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,YACjC,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,YAAE,MAAM,GAAQ,GACjC,EACN,KAAC,GAAG,IAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,YAC9B,KAAC,IAAI,oBAAS,GACV,EACN,KAAC,GAAG,IAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,YACjC,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,EAAC,cAAc,YACrE,CAAC,CAAC,IAAI,GACF,GACH,EACN,KAAC,GAAG,IAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,YACjC,KAAC,IAAI,IAAC,QAAQ,QAAC,IAAI,EAAC,cAAc,YAAE,WAAW,CAAC,CAAC,CAAC,GAAQ,GACtD,EACN,KAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,YAC7B,KAAC,IAAI,IAAC,QAAQ,QAAC,IAAI,EAAC,cAAc,YAAE,CAAC,CAAC,WAAW,GAAQ,GACrD,IACF,EAEL,SAAS,IAAI,CACZ,MAAC,GAAG,IAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,aAC7E,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CACnB,8BACE,MAAC,GAAG,eACF,KAAC,GAAG,IAAC,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,YAAE,KAAC,IAAI,IAAC,QAAQ,2BAAY,GAAM,EAC9D,MAAC,IAAI,IAAC,QAAQ,QAAC,IAAI,EAAC,cAAc,aAAE,CAAC,CAAC,IAAI,iBAAQ,CAAC,CAAC,OAAO,gBAAO,CAAC,CAAC,MAAM,IAAQ,IAC9E,EACL,CAAC,CAAC,MAAM,IAAI,CACX,MAAC,GAAG,eACF,KAAC,GAAG,IAAC,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,YAAE,KAAC,IAAI,IAAC,QAAQ,6BAAc,GAAM,EAChE,KAAC,IAAI,IAAC,QAAQ,QAAC,IAAI,EAAC,cAAc,YAAE,CAAC,CAAC,MAAM,GAAQ,IAChD,CACP,EACA,CAAC,CAAC,mBAAmB,IAAI,CAAC,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,IAAI,CAC5D,MAAC,GAAG,eACF,KAAC,GAAG,IAAC,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,YAAE,KAAC,IAAI,IAAC,QAAQ,2BAAY,GAAM,EAC9D,KAAC,IAAI,IAAC,QAAQ,QAAC,IAAI,EAAC,cAAc,YAAE,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAQ,IACxE,CACP,IACA,CACJ,EACA,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CACtB,MAAC,GAAG,eACF,KAAC,GAAG,IAAC,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,YAAE,KAAC,IAAI,IAAC,QAAQ,2BAAY,GAAM,EAC9D,MAAC,IAAI,IAAC,QAAQ,QAAC,IAAI,EAAC,cAAc,aAAE,CAAC,CAAC,WAAW,iBAAiB,IAC9D,CACP,IACG,CACP,KAvDO,CAAC,CAAC,EAAE,CAwDR,CACP,CAAC;YACJ,CAAC,CAAC,EAGF,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,QAAQ,kBAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,GAAQ,GACvC,EACN,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,MAAC,IAAI,IAAC,QAAQ,QAAC,IAAI,EAAC,cAAc,aAChC,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,YAAE,cAAc,GAAQ,aAAO,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,sBAAa,gBAAU,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,kBAAS,UAAK,OAAO,EAAE,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,qCAAK,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,kBAAS,kBAAa,CAAC,CAAC,CAAC,EAAE,SAAI,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,oBAAW,cACjP,GACH,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// animation.ts — single shared frame driver for every animated component.
|
|
2
|
+
//
|
|
3
|
+
// Previously each <Spinner> / animated text mounted its own setInterval.
|
|
4
|
+
// With many concurrent indicators that meant N timers all firing every
|
|
5
|
+
// frame, each independently re-rendering. This module exposes ONE timer
|
|
6
|
+
// that ticks at FRAME_INTERVAL_MS, and a tiny pub/sub so any component
|
|
7
|
+
// can subscribe to the global frame counter. The interval auto-stops
|
|
8
|
+
// when the last subscriber leaves and is .unref()'d so it never blocks
|
|
9
|
+
// process exit.
|
|
10
|
+
import { useEffect, useState } from 'react';
|
|
11
|
+
export const FRAME_INTERVAL_MS = 80;
|
|
12
|
+
let currentFrame = 0;
|
|
13
|
+
let timer = null;
|
|
14
|
+
const subscribers = new Set();
|
|
15
|
+
function ensureTimer() {
|
|
16
|
+
if (timer || subscribers.size === 0)
|
|
17
|
+
return;
|
|
18
|
+
timer = setInterval(() => {
|
|
19
|
+
// Use a large modulus so consumers can take whatever sub-period
|
|
20
|
+
// they want (Spinner: %10, Shimmer: %width, etc.) without a wrap
|
|
21
|
+
// boundary every few hundred ms.
|
|
22
|
+
currentFrame = (currentFrame + 1) % 1_000_000;
|
|
23
|
+
for (const cb of subscribers)
|
|
24
|
+
cb(currentFrame);
|
|
25
|
+
}, FRAME_INTERVAL_MS);
|
|
26
|
+
if (timer && typeof timer.unref === 'function')
|
|
27
|
+
timer.unref();
|
|
28
|
+
}
|
|
29
|
+
function maybeStopTimer() {
|
|
30
|
+
if (subscribers.size === 0 && timer) {
|
|
31
|
+
clearInterval(timer);
|
|
32
|
+
timer = null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/** Subscribe a React component to the global frame ticker. */
|
|
36
|
+
export function useFrame() {
|
|
37
|
+
const [frame, setFrame] = useState(currentFrame);
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
subscribers.add(setFrame);
|
|
40
|
+
ensureTimer();
|
|
41
|
+
return () => {
|
|
42
|
+
subscribers.delete(setFrame);
|
|
43
|
+
maybeStopTimer();
|
|
44
|
+
};
|
|
45
|
+
}, []);
|
|
46
|
+
return frame;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=animation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animation.js","sourceRoot":"","sources":["../../src/ui/animation.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,EAAE;AACF,yEAAyE;AACzE,uEAAuE;AACvE,wEAAwE;AACxE,uEAAuE;AACvE,qEAAqE;AACrE,uEAAuE;AACvE,gBAAgB;AAEhB,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAEpC,IAAI,YAAY,GAAG,CAAC,CAAC;AACrB,IAAI,KAAK,GAA0C,IAAI,CAAC;AACxD,MAAM,WAAW,GAAG,IAAI,GAAG,EAA2B,CAAC;AAEvD,SAAS,WAAW;IAClB,IAAI,KAAK,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO;IAC5C,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QACvB,gEAAgE;QAChE,iEAAiE;QACjE,iCAAiC;QACjC,YAAY,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC;QAC9C,KAAK,MAAM,EAAE,IAAI,WAAW;YAAE,EAAE,CAAC,YAAY,CAAC,CAAC;IACjD,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACtB,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU;QAAE,KAAK,CAAC,KAAK,EAAE,CAAC;AAChE,CAAC;AAED,SAAS,cAAc;IACrB,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;QACpC,aAAa,CAAC,KAAK,CAAC,CAAC;QACrB,KAAK,GAAG,IAAI,CAAC;IACf,CAAC;AACH,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,QAAQ;IACtB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;IACjD,SAAS,CAAC,GAAG,EAAE;QACb,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1B,WAAW,EAAE,CAAC;QACd,OAAO,GAAG,EAAE;YACV,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC7B,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// useThrottledStream — coalesce high-frequency text deltas into ~30fps UI updates.
|
|
2
|
+
//
|
|
3
|
+
// LLM streams emit dozens of token deltas per second. Calling React setState
|
|
4
|
+
// on every delta forces Ink to reconcile + paint the entire tree per token —
|
|
5
|
+
// which on long sessions snowballs into terminal IO storms (the root cause of
|
|
6
|
+
// the "long session crashes my terminal" bug). Claude Code / Gemini CLI both
|
|
7
|
+
// solve this by debouncing the live region: tokens are appended to a ref, and
|
|
8
|
+
// React state is updated on a timer.
|
|
9
|
+
//
|
|
10
|
+
// This hook returns:
|
|
11
|
+
// - displayText: the throttled state suitable for rendering
|
|
12
|
+
// - append: O(1) ref-mutation, safe to call from inside an LLM stream
|
|
13
|
+
// - reset: clear buffer + state (call on /new, on done, before next run)
|
|
14
|
+
// - flush: force-publish ref buffer to state immediately
|
|
15
|
+
//
|
|
16
|
+
// Frame rate is capped at ~30 fps (33ms) by default — Ink's own renderer caps
|
|
17
|
+
// at 30 fps anyway, so anything faster is wasted work.
|
|
18
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
19
|
+
const DEFAULT_INTERVAL_MS = 33;
|
|
20
|
+
export function useThrottledStream(intervalMs = DEFAULT_INTERVAL_MS) {
|
|
21
|
+
const [displayText, setDisplayText] = useState('');
|
|
22
|
+
const bufferRef = useRef('');
|
|
23
|
+
const lastPublishedRef = useRef('');
|
|
24
|
+
const timerRef = useRef(null);
|
|
25
|
+
const ensureTimer = useCallback(() => {
|
|
26
|
+
if (timerRef.current)
|
|
27
|
+
return;
|
|
28
|
+
timerRef.current = setInterval(() => {
|
|
29
|
+
if (bufferRef.current !== lastPublishedRef.current) {
|
|
30
|
+
lastPublishedRef.current = bufferRef.current;
|
|
31
|
+
setDisplayText(bufferRef.current);
|
|
32
|
+
}
|
|
33
|
+
}, intervalMs);
|
|
34
|
+
}, [intervalMs]);
|
|
35
|
+
const stopTimer = useCallback(() => {
|
|
36
|
+
if (timerRef.current) {
|
|
37
|
+
clearInterval(timerRef.current);
|
|
38
|
+
timerRef.current = null;
|
|
39
|
+
}
|
|
40
|
+
}, []);
|
|
41
|
+
const append = useCallback((delta) => {
|
|
42
|
+
bufferRef.current += delta;
|
|
43
|
+
ensureTimer();
|
|
44
|
+
}, [ensureTimer]);
|
|
45
|
+
const flush = useCallback(() => {
|
|
46
|
+
if (bufferRef.current !== lastPublishedRef.current) {
|
|
47
|
+
lastPublishedRef.current = bufferRef.current;
|
|
48
|
+
setDisplayText(bufferRef.current);
|
|
49
|
+
}
|
|
50
|
+
}, []);
|
|
51
|
+
const reset = useCallback(() => {
|
|
52
|
+
stopTimer();
|
|
53
|
+
bufferRef.current = '';
|
|
54
|
+
lastPublishedRef.current = '';
|
|
55
|
+
setDisplayText('');
|
|
56
|
+
}, [stopTimer]);
|
|
57
|
+
// Cleanup on unmount — critical for long sessions to avoid orphaned timers.
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
return () => stopTimer();
|
|
60
|
+
}, [stopTimer]);
|
|
61
|
+
return { displayText, append, reset, flush };
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=useThrottledStream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useThrottledStream.js","sourceRoot":"","sources":["../../src/ui/useThrottledStream.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,8EAA8E;AAC9E,6EAA6E;AAC7E,8EAA8E;AAC9E,qCAAqC;AACrC,EAAE;AACF,qBAAqB;AACrB,8DAA8D;AAC9D,6EAA6E;AAC7E,iFAAiF;AACjF,iEAAiE;AACjE,EAAE;AACF,8EAA8E;AAC9E,uDAAuD;AAEvD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjE,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAS/B,MAAM,UAAU,kBAAkB,CAAC,aAAqB,mBAAmB;IACzE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7B,MAAM,gBAAgB,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,MAAM,CAAwC,IAAI,CAAC,CAAC;IAErE,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,IAAI,QAAQ,CAAC,OAAO;YAAE,OAAO;QAC7B,QAAQ,CAAC,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;YAClC,IAAI,SAAS,CAAC,OAAO,KAAK,gBAAgB,CAAC,OAAO,EAAE,CAAC;gBACnD,gBAAgB,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;gBAC7C,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACpC,CAAC;QACH,CAAC,EAAE,UAAU,CAAC,CAAC;IACjB,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;QACjC,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACrB,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAChC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;QAC1B,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,KAAa,EAAE,EAAE;QAC3C,SAAS,CAAC,OAAO,IAAI,KAAK,CAAC;QAC3B,WAAW,EAAE,CAAC;IAChB,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,IAAI,SAAS,CAAC,OAAO,KAAK,gBAAgB,CAAC,OAAO,EAAE,CAAC;YACnD,gBAAgB,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;YAC7C,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,SAAS,EAAE,CAAC;QACZ,SAAS,CAAC,OAAO,GAAG,EAAE,CAAC;QACvB,gBAAgB,CAAC,OAAO,GAAG,EAAE,CAAC;QAC9B,cAAc,CAAC,EAAE,CAAC,CAAC;IACrB,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,4EAA4E;IAC5E,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;IAC3B,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface YomeAuthState {
|
|
2
|
+
/** Opaque token issued by /api/cli/auth/exchange. 64 hex chars. */
|
|
3
|
+
yome_token: string;
|
|
4
|
+
/** Supabase auth.users.id — the Yome principal. */
|
|
5
|
+
yome_user_id: string;
|
|
6
|
+
/** Provider used at login time ("github" today; future: apple/wechat/email). */
|
|
7
|
+
provider: 'github' | 'apple' | 'email' | 'wechat';
|
|
8
|
+
/** Provider-side display name at login time, for whoami output. */
|
|
9
|
+
provider_login?: string;
|
|
10
|
+
/** ISO-8601 timestamp the token expires. */
|
|
11
|
+
expires_at: string;
|
|
12
|
+
/** ISO-8601 timestamp the token was first written. */
|
|
13
|
+
obtained_at: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function getAuthFilePath(): string;
|
|
16
|
+
export declare function readAuthState(): YomeAuthState | null;
|
|
17
|
+
export declare function writeAuthState(state: YomeAuthState): void;
|
|
18
|
+
export declare function clearAuthState(): boolean;
|
|
19
|
+
/** Bearer header object suitable for fetch({headers}). null if logged out. */
|
|
20
|
+
export declare function bearerHeader(): Record<string, string> | null;
|