youmd 0.8.2 → 0.8.6

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 (46) hide show
  1. package/dist/commands/agent.d.ts +13 -0
  2. package/dist/commands/agent.d.ts.map +1 -0
  3. package/dist/commands/agent.js +233 -0
  4. package/dist/commands/agent.js.map +1 -0
  5. package/dist/commands/chat.d.ts.map +1 -1
  6. package/dist/commands/chat.js +17 -0
  7. package/dist/commands/chat.js.map +1 -1
  8. package/dist/commands/env.d.ts +20 -4
  9. package/dist/commands/env.d.ts.map +1 -1
  10. package/dist/commands/env.js +613 -21
  11. package/dist/commands/env.js.map +1 -1
  12. package/dist/commands/stack.d.ts.map +1 -1
  13. package/dist/commands/stack.js +8 -2
  14. package/dist/commands/stack.js.map +1 -1
  15. package/dist/commands/status.d.ts.map +1 -1
  16. package/dist/commands/status.js +8 -1
  17. package/dist/commands/status.js.map +1 -1
  18. package/dist/commands/sync.d.ts +1 -0
  19. package/dist/commands/sync.d.ts.map +1 -1
  20. package/dist/commands/sync.js +200 -0
  21. package/dist/commands/sync.js.map +1 -1
  22. package/dist/index.js +71 -4
  23. package/dist/index.js.map +1 -1
  24. package/dist/lib/api.d.ts +173 -0
  25. package/dist/lib/api.d.ts.map +1 -1
  26. package/dist/lib/api.js +87 -0
  27. package/dist/lib/api.js.map +1 -1
  28. package/dist/lib/daemon.d.ts +3 -0
  29. package/dist/lib/daemon.d.ts.map +1 -1
  30. package/dist/lib/daemon.js +21 -0
  31. package/dist/lib/daemon.js.map +1 -1
  32. package/dist/lib/machine-bootstrap-prompt.d.ts.map +1 -1
  33. package/dist/lib/machine-bootstrap-prompt.js +372 -184
  34. package/dist/lib/machine-bootstrap-prompt.js.map +1 -1
  35. package/dist/lib/realtime-sync.d.ts +174 -0
  36. package/dist/lib/realtime-sync.d.ts.map +1 -0
  37. package/dist/lib/realtime-sync.js +300 -0
  38. package/dist/lib/realtime-sync.js.map +1 -0
  39. package/package.json +2 -1
  40. package/scripts/env-vault/README.md +9 -0
  41. package/scripts/env-vault/restore.sh +85 -12
  42. package/scripts/skillstack-sync/README.md +24 -6
  43. package/scripts/skillstack-sync/bootstrap-new-mac.sh +31 -0
  44. package/scripts/skillstack-sync/com.youmd.realtime-sync.plist +35 -0
  45. package/scripts/skillstack-sync/install-daemons.sh +4 -1
  46. package/skills/machine-bootstrap.md +114 -19
@@ -0,0 +1,13 @@
1
+ type AgentCommandOptions = {
2
+ channel?: string;
3
+ kind?: string;
4
+ targetHost?: string;
5
+ targetAgent?: string;
6
+ agent?: string;
7
+ limit?: string;
8
+ tail?: boolean;
9
+ json?: boolean;
10
+ };
11
+ export declare function agentCommand(subcommand: string | undefined, messageArgs: string[], options: AgentCommandOptions): Promise<void>;
12
+ export {};
13
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"AAcA,KAAK,mBAAmB,GAAG;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AA4CF,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAgCf"}
@@ -0,0 +1,233 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.agentCommand = agentCommand;
40
+ const os = __importStar(require("os"));
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const api_1 = require("../lib/api");
43
+ const config_1 = require("../lib/config");
44
+ const realtime_sync_1 = require("../lib/realtime-sync");
45
+ const DIM = chalk_1.default.dim;
46
+ const ACCENT = chalk_1.default.hex("#C46A3A");
47
+ function sourceAgentName(options) {
48
+ return (options.agent ||
49
+ process.env.YOUMD_AGENT_NAME ||
50
+ process.env.CLAUDECODE_AGENT_NAME ||
51
+ process.env.CODEX_AGENT_NAME ||
52
+ "local-agent");
53
+ }
54
+ function relativeTime(ts) {
55
+ const diff = Math.max(0, Date.now() - ts);
56
+ const s = Math.floor(diff / 1000);
57
+ if (s < 60)
58
+ return `${s}s ago`;
59
+ const m = Math.floor(s / 60);
60
+ if (m < 60)
61
+ return `${m}m ago`;
62
+ const h = Math.floor(m / 60);
63
+ if (h < 24)
64
+ return `${h}h ago`;
65
+ return `${Math.floor(h / 24)}d ago`;
66
+ }
67
+ function printMessage(message) {
68
+ const from = [message.sourceAgent, message.sourceHost].filter(Boolean).join("@") || "agent";
69
+ const target = message.targetHost || message.targetAgent
70
+ ? DIM(` -> ${[message.targetAgent, message.targetHost].filter(Boolean).join("@")}`)
71
+ : "";
72
+ const when = DIM(relativeTime(message.createdAt).padStart(7));
73
+ const channel = DIM(`[${message.channel}]`);
74
+ console.log(` ${when} ${chalk_1.default.cyan(from)}${target} ${channel}`);
75
+ console.log(` ${message.body}`);
76
+ }
77
+ function usage() {
78
+ console.log("");
79
+ console.log(" " + chalk_1.default.bold("youmd agent") + DIM(" -- trusted-device realtime agent bus"));
80
+ console.log("");
81
+ console.log(" " + DIM("send: ") + chalk_1.default.cyan('youmd agent send "hello from my Mac mini"'));
82
+ console.log(" " + DIM("inbox: ") + chalk_1.default.cyan("youmd agent inbox --tail"));
83
+ console.log(" " + DIM("status: ") + chalk_1.default.cyan("youmd agent status"));
84
+ console.log("");
85
+ }
86
+ async function agentCommand(subcommand, messageArgs, options) {
87
+ const command = subcommand || "status";
88
+ if (command === "help" || command === "--help" || command === "-h") {
89
+ usage();
90
+ return;
91
+ }
92
+ if (!(0, config_1.isAuthenticated)()) {
93
+ console.log("");
94
+ console.log(chalk_1.default.yellow(" not authenticated"));
95
+ console.log(" run " + chalk_1.default.cyan("youmd login") + " before using the agent bus.");
96
+ console.log("");
97
+ return;
98
+ }
99
+ if (command === "send") {
100
+ await sendCommand(messageArgs, options);
101
+ return;
102
+ }
103
+ if (command === "inbox" || command === "messages") {
104
+ await inboxCommand(options);
105
+ return;
106
+ }
107
+ if (command === "status") {
108
+ statusCommand(options);
109
+ return;
110
+ }
111
+ await sendCommand([command, ...messageArgs], options);
112
+ }
113
+ async function sendCommand(messageArgs, options) {
114
+ const body = messageArgs.join(" ").trim();
115
+ if (!body) {
116
+ console.log("");
117
+ console.log(chalk_1.default.yellow(" nothing to send"));
118
+ console.log(" try " + chalk_1.default.cyan('youmd agent send "mini is online"'));
119
+ console.log("");
120
+ return;
121
+ }
122
+ const res = await (0, api_1.sendAgentBusMessage)({
123
+ body,
124
+ channel: options.channel || "machine-sync",
125
+ kind: options.kind || "message",
126
+ sourceHost: os.hostname(),
127
+ sourceAgent: sourceAgentName(options),
128
+ sourceRuntime: `youmd-cli/${process.version}`,
129
+ targetHost: options.targetHost,
130
+ targetAgent: options.targetAgent,
131
+ metadata: {
132
+ cwd: process.cwd(),
133
+ pid: process.pid,
134
+ secretValuesExposed: false,
135
+ },
136
+ });
137
+ if (!res.ok) {
138
+ const msg = (0, api_1.apiErrorMessage)(res.data) ?? `HTTP ${res.status}`;
139
+ console.log("");
140
+ console.log(chalk_1.default.yellow(` agent bus send failed: ${msg}`));
141
+ console.log("");
142
+ process.exitCode = 1;
143
+ return;
144
+ }
145
+ if (options.json) {
146
+ console.log(JSON.stringify(res.data, null, 2));
147
+ return;
148
+ }
149
+ console.log("");
150
+ console.log(chalk_1.default.green(" sent ") + DIM(`agent bus message ${res.data.message.messageId}`));
151
+ printMessage(res.data.message);
152
+ console.log("");
153
+ }
154
+ async function inboxCommand(options) {
155
+ const limit = Math.max(1, Math.min(100, Number.parseInt(options.limit || "20", 10) || 20));
156
+ if (options.tail) {
157
+ console.log("");
158
+ console.log(DIM(" --- agent bus inbox (live, ctrl-c to stop) ---"));
159
+ console.log("");
160
+ let lastSeen = 0;
161
+ while (true) {
162
+ const res = await (0, api_1.listAgentBusMessages)({
163
+ channel: options.channel,
164
+ limit: 50,
165
+ since: lastSeen || undefined,
166
+ });
167
+ if (res.ok) {
168
+ const messages = res.data.messages;
169
+ for (const message of messages)
170
+ printMessage(message);
171
+ if (messages.length > 0) {
172
+ lastSeen = Math.max(lastSeen, ...messages.map((message) => message.createdAt));
173
+ }
174
+ }
175
+ await new Promise((resolve) => setTimeout(resolve, 2000));
176
+ }
177
+ }
178
+ const res = await (0, api_1.listAgentBusMessages)({ channel: options.channel, limit });
179
+ if (!res.ok) {
180
+ const msg = (0, api_1.apiErrorMessage)(res.data) ?? `HTTP ${res.status}`;
181
+ console.log("");
182
+ console.log(chalk_1.default.yellow(` agent bus inbox failed: ${msg}`));
183
+ console.log("");
184
+ process.exitCode = 1;
185
+ return;
186
+ }
187
+ if (options.json) {
188
+ console.log(JSON.stringify(res.data, null, 2));
189
+ return;
190
+ }
191
+ console.log("");
192
+ console.log(DIM(" --- agent bus inbox ---"));
193
+ console.log("");
194
+ if (res.data.messages.length === 0) {
195
+ console.log(" " + DIM("no messages yet -- run ") + chalk_1.default.cyan('youmd agent send "hello"'));
196
+ }
197
+ else {
198
+ for (const message of res.data.messages)
199
+ printMessage(message);
200
+ }
201
+ console.log("");
202
+ console.log(" " + DIM(`local realtime inbox: ${realtime_sync_1.REALTIME_AGENT_INBOX_PATH}`));
203
+ console.log("");
204
+ }
205
+ function statusCommand(options) {
206
+ const status = (0, realtime_sync_1.readRealtimeSyncStatusFile)();
207
+ const agentBus = status?.agentBus;
208
+ if (options.json) {
209
+ console.log(JSON.stringify(agentBus ?? null, null, 2));
210
+ return;
211
+ }
212
+ console.log("");
213
+ console.log(DIM(" --- agent bus status ---"));
214
+ console.log("");
215
+ if (!agentBus) {
216
+ console.log(" " + chalk_1.default.yellow("realtime daemon has not written agent bus status yet"));
217
+ console.log(" " + DIM("start it with ") + chalk_1.default.cyan("youmd sync --live --daemon"));
218
+ console.log("");
219
+ return;
220
+ }
221
+ const state = agentBus.state === "active" ? chalk_1.default.green(agentBus.state) : ACCENT(agentBus.state);
222
+ console.log(" " + DIM("state: ") + state);
223
+ console.log(" " + DIM("summary: ") + agentBus.summary);
224
+ console.log(" " + DIM("inbox: ") + agentBus.inboxPath);
225
+ console.log(" " + DIM("send: ") + chalk_1.default.cyan(agentBus.sendCommand));
226
+ if (agentBus.messages.length > 0) {
227
+ console.log("");
228
+ for (const message of agentBus.messages.slice(-5))
229
+ printMessage(message);
230
+ }
231
+ console.log("");
232
+ }
233
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"AA6/DA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CA8kBjD"}
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"AA0gEA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAqlBjD"}
@@ -54,6 +54,7 @@ const onboarding_1 = require("../lib/onboarding");
54
54
  const ascii_1 = require("../lib/ascii");
55
55
  const update_1 = require("../lib/update");
56
56
  const version_1 = require("../lib/version");
57
+ const machine_bootstrap_prompt_1 = require("../lib/machine-bootstrap-prompt");
57
58
  // ─── URL Detection + Scraping (mirrors web useYouAgent) ──────────────
58
59
  const config_2 = require("../lib/config");
59
60
  const CONVEX_SITE_URL = (0, config_2.getConvexSiteUrl)();
@@ -413,6 +414,7 @@ const SLASH_COMMANDS = {
413
414
  "/memory": "show memory summary + stats",
414
415
  "/recall": "show recent memories (or /recall query)",
415
416
  "/private": "show private context (notes, links, projects)",
417
+ "/new computer": "print the fresh-machine setup prompt",
416
418
  "/image <path>": "attach an image or file",
417
419
  "/rebuild": "recompile the bundle",
418
420
  "/help": "show available commands",
@@ -441,6 +443,15 @@ function ask(rl, question) {
441
443
  });
442
444
  });
443
445
  }
446
+ function isFreshMachineSetupRequest(text) {
447
+ const normalized = text.trim().toLowerCase();
448
+ if (!normalized)
449
+ return false;
450
+ return (/^\/(?:new[-\s]?computer|new[-\s]?machine|fresh[-\s]?machine|machine[-\s]?bootstrap)\b/.test(normalized) ||
451
+ /\b(set ?up|setup|bootstrap|install|hydrate)\b/.test(normalized) &&
452
+ /\b(new|fresh|brand new)\b/.test(normalized) &&
453
+ /\b(computer|machine|mac|macbook|mac mini|workstation|codex|claude code)\b/.test(normalized));
454
+ }
444
455
  function loadCurrentBundle(bundleDir) {
445
456
  const parts = [];
446
457
  const dirs = [
@@ -1905,6 +1916,12 @@ async function chatCommand() {
1905
1916
  showHelp();
1906
1917
  continue;
1907
1918
  }
1919
+ if (isFreshMachineSetupRequest(userInput)) {
1920
+ console.log("");
1921
+ console.log((0, machine_bootstrap_prompt_1.buildFreshMachineBootstrapPrompt)({ requireEnvVault: true }));
1922
+ console.log("");
1923
+ continue;
1924
+ }
1908
1925
  if (lower === "/status") {
1909
1926
  showStatus(bundleDir);
1910
1927
  continue;