life-pulse 2.3.0 → 2.3.2
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/README.md +1 -1
- package/dist/agent.js +4 -4
- package/dist/cli.js +51 -60
- package/dist/health.js +1 -1
- package/dist/icloud-discovery.js +7 -7
- package/dist/init-check.js +13 -17
- package/dist/installer.js +41 -63
- package/dist/progress.js +24 -24
- package/dist/router.js +1 -1
- package/dist/sms-gateway.js +2 -2
- package/dist/tui.d.ts +6 -0
- package/dist/tui.js +158 -6
- package/dist/tunnel.js +4 -4
- package/dist/ui/app.js +10 -13
- package/dist/ui/progress.js +24 -24
- package/dist/ui/theme.d.ts +2 -2
- package/dist/ui/theme.js +42 -41
- package/package.json +1 -1
package/dist/ui/app.js
CHANGED
|
@@ -17,31 +17,28 @@ const INIT = {
|
|
|
17
17
|
progress: null,
|
|
18
18
|
};
|
|
19
19
|
// ─── Components ───────────────────────────────────
|
|
20
|
-
const SpinnerLine = ({ label, frame }) => (_jsxs(Text, { children: [' ', _jsx(Text, { color: "#
|
|
20
|
+
const SpinnerLine = ({ label, frame }) => (_jsxs(Text, { children: [' ', _jsx(Text, { color: "#565f89", children: SPIN[frame % SPIN.length] }), ' ', _jsx(Text, { color: "#565f89", children: label })] }));
|
|
21
21
|
const BAR_W = 20;
|
|
22
22
|
const MAX_VIS = 4;
|
|
23
23
|
const Bar = ({ done, total }) => {
|
|
24
24
|
const f = Math.round((done / Math.max(total, 1)) * BAR_W);
|
|
25
|
-
return (_jsxs(Text, { children: [_jsx(Text, { color: "#
|
|
25
|
+
return (_jsxs(Text, { children: [_jsx(Text, { color: "#565f89", children: '─'.repeat(f) }), _jsx(Text, { color: "#292e42", children: '─'.repeat(BAR_W - f) }), ' ', _jsx(Text, { color: "#565f89", children: done }), _jsx(Text, { color: "#3b4261", children: "/" }), _jsx(Text, { color: "#565f89", children: total })] }));
|
|
26
26
|
};
|
|
27
27
|
const ProgressView = ({ progress, frame }) => {
|
|
28
28
|
const spin = (off = 0) => BAR_CHARS[(frame + off) % BAR_CHARS.length];
|
|
29
29
|
if (progress.thinking && !progress.items.length && !progress.total) {
|
|
30
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { children: ' ' }), _jsxs(Text, { children: [' ', _jsx(Text, { color: "#
|
|
30
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { children: ' ' }), _jsxs(Text, { children: [' ', _jsx(Text, { color: "#3b4261", children: spin() }), ' ', _jsx(Text, { color: "#565f89", children: "thinking" })] })] }));
|
|
31
31
|
}
|
|
32
32
|
const { phase, done, total, items } = progress;
|
|
33
33
|
const allDone = done === total && total > 0;
|
|
34
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { children: ' ' }), allDone ? (_jsxs(Text, { children: [' ', _jsx(Text, { color: "#
|
|
34
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { children: ' ' }), allDone ? (_jsxs(Text, { children: [' ', _jsx(Text, { color: "#565f89", children: '·' }), ' ', _jsx(Text, { color: "#565f89", children: phase === 'scanning' ? 'scanned' : 'done' })] })) : total > 0 ? (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { children: [' ', _jsx(Text, { color: "#565f89", children: phase || 'working' }), ' ', _jsx(Bar, { done: done, total: total })] }), items.slice(0, MAX_VIS).map((item, i) => (_jsxs(Text, { children: [' ', _jsx(Text, { color: "#3b4261", children: spin(i) }), ' ', _jsx(Text, { color: "#565f89", children: item.label }), item.tool && _jsxs(Text, { color: "#3b4261", children: [' — ', item.tool] })] }, i))), items.length > MAX_VIS && _jsxs(Text, { color: "#3b4261", children: [' ', "+", items.length - MAX_VIS, " more"] })] })) : null, progress.thinking && total > 0 && (_jsxs(Text, { children: [' ', _jsx(Text, { color: "#3b4261", children: spin() }), ' ', _jsx(Text, { color: "#565f89", children: "thinking" })] }))] }));
|
|
35
35
|
};
|
|
36
36
|
const CardView = ({ card, num, sel }) => {
|
|
37
37
|
const opts = card.options || [];
|
|
38
|
-
|
|
39
|
-
const catColor = cat === 'promise' ? '#f7768e' : cat === 'blocker' ? '#e0af68'
|
|
40
|
-
: cat === 'bump' ? '#7dcfff' : cat === 'alpha' ? '#bb9af7' : '#565f89';
|
|
41
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { children: ' ' }), _jsxs(Text, { children: [' ', _jsxs(Text, { color: "#565f89", children: ['#', num] }), ' ', _jsx(Text, { bold: true, color: catColor, children: cat.toUpperCase() })] }), _jsxs(Text, { bold: true, children: [' ', card.title] }), card.context && _jsxs(Text, { color: "#565f89", children: [' ', card.context] }), _jsx(Text, { children: ' ' }), opts.map((opt, i) => {
|
|
38
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { children: ' ' }), _jsxs(Text, { bold: true, color: "#c0caf5", children: [' ', card.title] }), card.context && _jsxs(Text, { color: "#565f89", children: [' ', card.context] }), _jsx(Text, { children: ' ' }), opts.map((opt, i) => {
|
|
42
39
|
const on = i === sel;
|
|
43
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { children: [' ', _jsxs(Text, { color: on ? '#7aa2f7' : '#
|
|
44
|
-
}), _jsx(Text, { children: ' ' })
|
|
40
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { children: [' ', _jsxs(Text, { color: on ? '#7aa2f7' : '#292e42', children: [on ? '▸' : ' ', ' '] }), _jsx(Text, { bold: on, color: on ? '#c0caf5' : '#3b4261', children: opt.label })] }), opt.description && (_jsxs(Text, { color: on ? '#565f89' : '#292e42', children: [' ', opt.description] }))] }, opt.label));
|
|
41
|
+
}), _jsx(Text, { children: ' ' })] }));
|
|
45
42
|
};
|
|
46
43
|
// ─── Main App ─────────────────────────────────────
|
|
47
44
|
const App = () => {
|
|
@@ -137,7 +134,7 @@ export function updateSpinner(label) {
|
|
|
137
134
|
export function hideSpinner(doneMsg) {
|
|
138
135
|
_update?.(p => ({ ...p, spinner: null }));
|
|
139
136
|
if (doneMsg)
|
|
140
|
-
log(` ${C.
|
|
137
|
+
log(` ${C.dim(doneMsg)}`);
|
|
141
138
|
}
|
|
142
139
|
// ── Card picker ──
|
|
143
140
|
export async function pickCard(card, num) {
|
|
@@ -149,8 +146,8 @@ export async function pickCard(card, num) {
|
|
|
149
146
|
return new Promise(resolve => {
|
|
150
147
|
_cardResolve = (pick) => {
|
|
151
148
|
_update?.(p => ({ ...p, card: null, cardSel: 0 }));
|
|
152
|
-
const t = card.title.length >
|
|
153
|
-
log(` ${C.
|
|
149
|
+
const t = card.title.length > 50 ? card.title.slice(0, 49) + '…' : card.title;
|
|
150
|
+
log(` ${C.dim(t)} ${C.faint('→')} ${C.bright(pick)}`);
|
|
154
151
|
log('');
|
|
155
152
|
resolve(pick);
|
|
156
153
|
};
|
package/dist/ui/progress.js
CHANGED
|
@@ -5,30 +5,30 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { showProgress, hideProgress } from './app.js';
|
|
7
7
|
const LABEL = {
|
|
8
|
-
search_all_messages: '
|
|
9
|
-
get_conversation: '
|
|
10
|
-
profile_contact: '
|
|
11
|
-
get_messages: '
|
|
12
|
-
get_unanswered_messages: '
|
|
13
|
-
get_screen_time: '
|
|
14
|
-
get_browsing: '
|
|
15
|
-
get_calls: 'checking
|
|
16
|
-
scan_sources: '
|
|
17
|
-
lookup_contact: '
|
|
18
|
-
get_email_summary: '
|
|
19
|
-
get_git_activity: '
|
|
20
|
-
get_recent_files: '
|
|
21
|
-
get_shell_history: '
|
|
22
|
-
get_notes: 'reading
|
|
23
|
-
get_claude_history: '
|
|
24
|
-
get_chatgpt_history: '
|
|
25
|
-
get_interests_for_plans: '
|
|
26
|
-
get_calendar: '
|
|
27
|
-
get_reminders: 'checking
|
|
28
|
-
get_notifications: '
|
|
29
|
-
discover_platforms: '
|
|
30
|
-
generate_archetype: '
|
|
31
|
-
search_emails: '
|
|
8
|
+
search_all_messages: 'reading the room',
|
|
9
|
+
get_conversation: 'listening in',
|
|
10
|
+
profile_contact: 'learning who this is',
|
|
11
|
+
get_messages: 'reading the room',
|
|
12
|
+
get_unanswered_messages: 'finding what you missed',
|
|
13
|
+
get_screen_time: 'tracking your attention',
|
|
14
|
+
get_browsing: 'retracing your steps',
|
|
15
|
+
get_calls: 'checking who called',
|
|
16
|
+
scan_sources: 'pulling threads',
|
|
17
|
+
lookup_contact: 'learning who this is',
|
|
18
|
+
get_email_summary: 'going through your inbox',
|
|
19
|
+
get_git_activity: 'seeing what you shipped',
|
|
20
|
+
get_recent_files: 'noticing what you touched',
|
|
21
|
+
get_shell_history: 'retracing your steps',
|
|
22
|
+
get_notes: 'reading your thoughts',
|
|
23
|
+
get_claude_history: 'seeing what you asked',
|
|
24
|
+
get_chatgpt_history: 'seeing what you asked',
|
|
25
|
+
get_interests_for_plans: 'understanding your world',
|
|
26
|
+
get_calendar: 'looking at your day',
|
|
27
|
+
get_reminders: 'checking what you owe yourself',
|
|
28
|
+
get_notifications: 'catching up',
|
|
29
|
+
discover_platforms: 'figuring out your world',
|
|
30
|
+
generate_archetype: 'figuring out who you are',
|
|
31
|
+
search_emails: 'digging through mail',
|
|
32
32
|
};
|
|
33
33
|
export class InkProgress {
|
|
34
34
|
tools = [];
|
package/dist/ui/theme.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Design System — "Midnight Console"
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Restraint is luxury. One accent color. Everything else is grayscale.
|
|
5
|
+
* Category distinction comes from position, not color.
|
|
6
6
|
*/
|
|
7
7
|
export declare const C: {
|
|
8
8
|
accent: import("chalk").ChalkInstance;
|
package/dist/ui/theme.js
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Design System — "Midnight Console"
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Restraint is luxury. One accent color. Everything else is grayscale.
|
|
5
|
+
* Category distinction comes from position, not color.
|
|
6
6
|
*/
|
|
7
7
|
import chalk from 'chalk';
|
|
8
8
|
// ─── Palette ──────────────────────────────────────
|
|
9
9
|
export const C = {
|
|
10
|
-
// Brand
|
|
10
|
+
// Brand — the only color
|
|
11
11
|
accent: chalk.hex('#7aa2f7'),
|
|
12
12
|
brand: chalk.bold.hex('#7aa2f7'),
|
|
13
|
-
// Semantic
|
|
14
|
-
ok
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
// Semantic — all map to the grayscale hierarchy
|
|
14
|
+
// "ok" is bright (not green), "err" is bright bold (not red)
|
|
15
|
+
ok: chalk.hex('#c0caf5'),
|
|
16
|
+
warn: chalk.hex('#a9b1d6'),
|
|
17
|
+
err: chalk.bold.hex('#c0caf5'),
|
|
18
|
+
info: chalk.hex('#a9b1d6'),
|
|
18
19
|
// Text hierarchy (bright → invisible)
|
|
19
20
|
hd: chalk.bold.hex('#c0caf5'),
|
|
20
21
|
heading: chalk.bold.hex('#c0caf5'),
|
|
@@ -27,12 +28,12 @@ export const C = {
|
|
|
27
28
|
};
|
|
28
29
|
// Lowercase alias (backward compat)
|
|
29
30
|
export const c = C;
|
|
30
|
-
// Category
|
|
31
|
+
// Category styles — accent for the one that matters, dim for the rest
|
|
31
32
|
export const CAT_STYLE = {
|
|
32
|
-
promise: C.
|
|
33
|
-
blocker: C.
|
|
34
|
-
bump: C.
|
|
35
|
-
alpha:
|
|
33
|
+
promise: C.bright,
|
|
34
|
+
blocker: C.text,
|
|
35
|
+
bump: C.dim,
|
|
36
|
+
alpha: C.accent,
|
|
36
37
|
};
|
|
37
38
|
export const CAT_LABEL = {
|
|
38
39
|
promise: 'PROMISE',
|
|
@@ -40,10 +41,10 @@ export const CAT_LABEL = {
|
|
|
40
41
|
bump: 'BUMP',
|
|
41
42
|
alpha: 'ALPHA',
|
|
42
43
|
};
|
|
43
|
-
// Icons
|
|
44
|
+
// Icons — minimal
|
|
44
45
|
export const icon = {
|
|
45
|
-
check: '
|
|
46
|
-
star: '
|
|
46
|
+
check: '·', cross: '✗', bullet: '·', arrow: '→',
|
|
47
|
+
star: '·', bar: '▸', dot: '·',
|
|
47
48
|
};
|
|
48
49
|
// Layout
|
|
49
50
|
export const W = () => Math.min(process.stdout.columns || 80, 80);
|
|
@@ -51,30 +52,30 @@ export const INNER = () => W() - 4;
|
|
|
51
52
|
// Spinner frames
|
|
52
53
|
export const SPIN = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
|
|
53
54
|
export const BAR_CHARS = ['⣾', '⣽', '⣻', '⢿', '⡿', '⣟', '⣯', '⣷'];
|
|
54
|
-
// Progress label map
|
|
55
|
+
// Progress label map — personality, not developer console
|
|
55
56
|
export const TOOL_LABEL = {
|
|
56
|
-
search_all_messages: '
|
|
57
|
-
get_conversation: '
|
|
58
|
-
profile_contact: '
|
|
59
|
-
get_messages: '
|
|
60
|
-
get_unanswered_messages: '
|
|
61
|
-
get_screen_time: '
|
|
62
|
-
get_browsing: '
|
|
63
|
-
get_calls: 'checking
|
|
64
|
-
scan_sources: '
|
|
65
|
-
lookup_contact: '
|
|
66
|
-
get_email_summary: '
|
|
67
|
-
get_git_activity: '
|
|
68
|
-
get_recent_files: '
|
|
69
|
-
get_shell_history: '
|
|
70
|
-
get_notes: 'reading
|
|
71
|
-
get_claude_history: '
|
|
72
|
-
get_chatgpt_history: '
|
|
73
|
-
get_interests_for_plans: '
|
|
74
|
-
get_calendar: '
|
|
75
|
-
get_reminders: 'checking
|
|
76
|
-
get_notifications: '
|
|
77
|
-
discover_platforms: '
|
|
78
|
-
generate_archetype: '
|
|
79
|
-
search_emails: '
|
|
57
|
+
search_all_messages: 'reading the room',
|
|
58
|
+
get_conversation: 'listening in',
|
|
59
|
+
profile_contact: 'learning who this is',
|
|
60
|
+
get_messages: 'reading the room',
|
|
61
|
+
get_unanswered_messages: 'finding what you missed',
|
|
62
|
+
get_screen_time: 'tracking your attention',
|
|
63
|
+
get_browsing: 'retracing your steps',
|
|
64
|
+
get_calls: 'checking who called',
|
|
65
|
+
scan_sources: 'pulling threads',
|
|
66
|
+
lookup_contact: 'learning who this is',
|
|
67
|
+
get_email_summary: 'going through your inbox',
|
|
68
|
+
get_git_activity: 'seeing what you shipped',
|
|
69
|
+
get_recent_files: 'noticing what you touched',
|
|
70
|
+
get_shell_history: 'retracing your steps',
|
|
71
|
+
get_notes: 'reading your thoughts',
|
|
72
|
+
get_claude_history: 'seeing what you asked',
|
|
73
|
+
get_chatgpt_history: 'seeing what you asked',
|
|
74
|
+
get_interests_for_plans: 'understanding your world',
|
|
75
|
+
get_calendar: 'looking at your day',
|
|
76
|
+
get_reminders: 'checking what you owe yourself',
|
|
77
|
+
get_notifications: 'catching up',
|
|
78
|
+
discover_platforms: 'figuring out your world',
|
|
79
|
+
generate_archetype: 'figuring out who you are',
|
|
80
|
+
search_emails: 'digging through mail',
|
|
80
81
|
};
|