youmd 0.7.1 → 0.8.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.
Files changed (125) hide show
  1. package/dist/commands/chat.d.ts.map +1 -1
  2. package/dist/commands/chat.js +3 -2
  3. package/dist/commands/chat.js.map +1 -1
  4. package/dist/commands/env.d.ts +2 -0
  5. package/dist/commands/env.d.ts.map +1 -1
  6. package/dist/commands/env.js +7 -3
  7. package/dist/commands/env.js.map +1 -1
  8. package/dist/commands/login.d.ts +1 -0
  9. package/dist/commands/login.d.ts.map +1 -1
  10. package/dist/commands/login.js +20 -4
  11. package/dist/commands/login.js.map +1 -1
  12. package/dist/commands/machine.d.ts +31 -0
  13. package/dist/commands/machine.d.ts.map +1 -1
  14. package/dist/commands/machine.js +610 -14
  15. package/dist/commands/machine.js.map +1 -1
  16. package/dist/commands/project-log.d.ts +13 -0
  17. package/dist/commands/project-log.d.ts.map +1 -0
  18. package/dist/commands/project-log.js +241 -0
  19. package/dist/commands/project-log.js.map +1 -0
  20. package/dist/commands/project.d.ts.map +1 -1
  21. package/dist/commands/project.js +872 -15
  22. package/dist/commands/project.js.map +1 -1
  23. package/dist/commands/prompts.d.ts +19 -0
  24. package/dist/commands/prompts.d.ts.map +1 -1
  25. package/dist/commands/prompts.js +304 -1
  26. package/dist/commands/prompts.js.map +1 -1
  27. package/dist/commands/pull.d.ts.map +1 -1
  28. package/dist/commands/pull.js +28 -8
  29. package/dist/commands/pull.js.map +1 -1
  30. package/dist/commands/push.d.ts +3 -1
  31. package/dist/commands/push.d.ts.map +1 -1
  32. package/dist/commands/push.js +26 -12
  33. package/dist/commands/push.js.map +1 -1
  34. package/dist/commands/skill.d.ts.map +1 -1
  35. package/dist/commands/skill.js +19 -15
  36. package/dist/commands/skill.js.map +1 -1
  37. package/dist/commands/stack.d.ts.map +1 -1
  38. package/dist/commands/stack.js +37 -17
  39. package/dist/commands/stack.js.map +1 -1
  40. package/dist/commands/status.d.ts.map +1 -1
  41. package/dist/commands/status.js +31 -0
  42. package/dist/commands/status.js.map +1 -1
  43. package/dist/commands/sync.d.ts +1 -0
  44. package/dist/commands/sync.d.ts.map +1 -1
  45. package/dist/commands/sync.js +51 -2
  46. package/dist/commands/sync.js.map +1 -1
  47. package/dist/index.js +125 -36
  48. package/dist/index.js.map +1 -1
  49. package/dist/lib/api.d.ts +324 -0
  50. package/dist/lib/api.d.ts.map +1 -1
  51. package/dist/lib/api.js +68 -0
  52. package/dist/lib/api.js.map +1 -1
  53. package/dist/lib/compiler.d.ts.map +1 -1
  54. package/dist/lib/compiler.js +10 -0
  55. package/dist/lib/compiler.js.map +1 -1
  56. package/dist/lib/daemon.d.ts +23 -0
  57. package/dist/lib/daemon.d.ts.map +1 -0
  58. package/dist/lib/daemon.js +166 -0
  59. package/dist/lib/daemon.js.map +1 -0
  60. package/dist/lib/first-run.d.ts +1 -1
  61. package/dist/lib/first-run.d.ts.map +1 -1
  62. package/dist/lib/first-run.js +8 -0
  63. package/dist/lib/first-run.js.map +1 -1
  64. package/dist/lib/machine-bootstrap-prompt.d.ts +17 -0
  65. package/dist/lib/machine-bootstrap-prompt.d.ts.map +1 -0
  66. package/dist/lib/machine-bootstrap-prompt.js +305 -0
  67. package/dist/lib/machine-bootstrap-prompt.js.map +1 -0
  68. package/dist/lib/machine-projects.d.ts +71 -0
  69. package/dist/lib/machine-projects.d.ts.map +1 -0
  70. package/dist/lib/machine-projects.js +510 -0
  71. package/dist/lib/machine-projects.js.map +1 -0
  72. package/dist/lib/machine-verify.d.ts +175 -0
  73. package/dist/lib/machine-verify.d.ts.map +1 -0
  74. package/dist/lib/machine-verify.js +684 -0
  75. package/dist/lib/machine-verify.js.map +1 -0
  76. package/dist/lib/portfolio-audit.d.ts +34 -0
  77. package/dist/lib/portfolio-audit.d.ts.map +1 -0
  78. package/dist/lib/portfolio-audit.js +254 -0
  79. package/dist/lib/portfolio-audit.js.map +1 -0
  80. package/dist/lib/portfolio-graph.d.ts +104 -0
  81. package/dist/lib/portfolio-graph.d.ts.map +1 -0
  82. package/dist/lib/portfolio-graph.js +281 -0
  83. package/dist/lib/portfolio-graph.js.map +1 -0
  84. package/dist/lib/project-strategy.d.ts +45 -0
  85. package/dist/lib/project-strategy.d.ts.map +1 -0
  86. package/dist/lib/project-strategy.js +234 -0
  87. package/dist/lib/project-strategy.js.map +1 -0
  88. package/dist/lib/reusable-patterns.d.ts +30 -0
  89. package/dist/lib/reusable-patterns.d.ts.map +1 -0
  90. package/dist/lib/reusable-patterns.js +375 -0
  91. package/dist/lib/reusable-patterns.js.map +1 -0
  92. package/dist/lib/skill-catalog.d.ts.map +1 -1
  93. package/dist/lib/skill-catalog.js +20 -0
  94. package/dist/lib/skill-catalog.js.map +1 -1
  95. package/dist/lib/skills.d.ts +1 -0
  96. package/dist/lib/skills.d.ts.map +1 -1
  97. package/dist/lib/skills.js +43 -13
  98. package/dist/lib/skills.js.map +1 -1
  99. package/dist/lib/version.d.ts +2 -0
  100. package/dist/lib/version.d.ts.map +1 -0
  101. package/dist/lib/version.js +63 -0
  102. package/dist/lib/version.js.map +1 -0
  103. package/dist/mcp/registry.d.ts +5 -1
  104. package/dist/mcp/registry.d.ts.map +1 -1
  105. package/dist/mcp/registry.js +426 -2
  106. package/dist/mcp/registry.js.map +1 -1
  107. package/dist/mcp/server.d.ts +2 -0
  108. package/dist/mcp/server.d.ts.map +1 -1
  109. package/dist/mcp/server.js +50 -5
  110. package/dist/mcp/server.js.map +1 -1
  111. package/package.json +1 -1
  112. package/scripts/env-vault/README.md +37 -10
  113. package/scripts/env-vault/backup.sh +70 -4
  114. package/scripts/env-vault/restore.sh +117 -9
  115. package/scripts/skillstack-sync/README.md +13 -6
  116. package/scripts/skillstack-sync/bootstrap-new-mac.sh +19 -5
  117. package/scripts/skillstack-sync/capture-agent-config.sh +110 -0
  118. package/scripts/skillstack-sync/com.youmd.context-sync.plist +38 -0
  119. package/scripts/skillstack-sync/com.youmd.identity-sync.plist +3 -1
  120. package/scripts/skillstack-sync/com.youmd.skillstack-sync.plist +1 -1
  121. package/scripts/skillstack-sync/context-sync.sh +412 -0
  122. package/scripts/skillstack-sync/install-daemons.sh +7 -3
  123. package/scripts/skillstack-sync/restore-agent-config.sh +152 -0
  124. package/scripts/skillstack-sync/sync.sh +20 -6
  125. package/skills/machine-bootstrap.md +243 -0
@@ -0,0 +1,305 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.DEFAULT_FRESH_MACHINE_LIMIT = exports.DEFAULT_FRESH_MACHINE_EXPAND_DAYS = exports.DEFAULT_FRESH_MACHINE_DAYS = exports.DEFAULT_FRESH_MACHINE_ROOT = void 0;
37
+ exports.buildFreshMachineBootstrapScript = buildFreshMachineBootstrapScript;
38
+ exports.buildFreshMachineBootstrapCommand = buildFreshMachineBootstrapCommand;
39
+ exports.buildFreshMachineBootstrapPrompt = buildFreshMachineBootstrapPrompt;
40
+ const os = __importStar(require("os"));
41
+ exports.DEFAULT_FRESH_MACHINE_ROOT = "~/Desktop/CODE_YOU";
42
+ exports.DEFAULT_FRESH_MACHINE_DAYS = 30;
43
+ exports.DEFAULT_FRESH_MACHINE_EXPAND_DAYS = 90;
44
+ exports.DEFAULT_FRESH_MACHINE_LIMIT = 80;
45
+ function shellQuote(value) {
46
+ return `'${value.replace(/'/g, `'\"'\"'`)}'`;
47
+ }
48
+ function envAssignment(name, value) {
49
+ if (value === undefined || value === null || `${value}`.trim() === "")
50
+ return null;
51
+ return `${name}=${shellQuote(String(value))}`;
52
+ }
53
+ function portableHomePath(value) {
54
+ if (!value)
55
+ return value;
56
+ const home = os.homedir();
57
+ if (!home || !value.startsWith(home))
58
+ return value;
59
+ const suffix = value.slice(home.length);
60
+ if (!suffix)
61
+ return "~";
62
+ if (suffix.startsWith("/"))
63
+ return `~${suffix}`;
64
+ return value;
65
+ }
66
+ function buildFreshMachineBootstrapScript() {
67
+ return [
68
+ "set -euo pipefail",
69
+ 'ROOT="${YOUMD_CODE_ROOT:-$HOME/Desktop/CODE_YOU}"',
70
+ 'DAYS="${YOUMD_ACTIVE_DAYS:-30}"',
71
+ 'EXPAND_DAYS="${YOUMD_EXPAND_ACTIVE_DAYS:-90}"',
72
+ 'LIMIT="${YOUMD_PROJECT_LIMIT:-80}"',
73
+ 'HYDRATE_TIMEOUT="${YOUMD_PORTFOLIO_HYDRATE_TIMEOUT_SECONDS:-180}"',
74
+ 'run_with_timeout() {',
75
+ ' seconds="$1"',
76
+ " shift",
77
+ ' if command -v gtimeout >/dev/null 2>&1; then',
78
+ ' gtimeout "$seconds" "$@"',
79
+ ' elif command -v timeout >/dev/null 2>&1; then',
80
+ ' timeout "$seconds" "$@"',
81
+ " else",
82
+ ' "$@" &',
83
+ " pid=$!",
84
+ ' ( sleep "$seconds"; if kill -0 "$pid" >/dev/null 2>&1; then echo "[you.md] timeout after ${seconds}s: $*" >&2; kill "$pid" >/dev/null 2>&1 || true; fi ) &',
85
+ " watcher=$!",
86
+ ' wait "$pid"',
87
+ " status=$?",
88
+ ' kill "$watcher" >/dev/null 2>&1 || true',
89
+ ' wait "$watcher" 2>/dev/null || true',
90
+ ' return "$status"',
91
+ " fi",
92
+ "}",
93
+ 'echo "[you.md] installing runtime"',
94
+ "curl -fsSL https://you.md/install.sh | bash",
95
+ 'if [ -n "${YOUMD_API_KEY:-}" ]; then',
96
+ ' echo "[you.md] logging in with bootstrap key"',
97
+ ' youmd login --key "$YOUMD_API_KEY"',
98
+ "else",
99
+ ' echo "[you.md] no YOUMD_API_KEY set; starting interactive login"',
100
+ " youmd login",
101
+ "fi",
102
+ 'echo "[you.md] pulling identity bundle and syncing local brain"',
103
+ "youmd pull",
104
+ "youmd sync",
105
+ 'echo "[you.md] restoring shared skills, stacks, and agent host config"',
106
+ "youmd machine setup",
107
+ "youmd skill install all",
108
+ "youmd skill sync",
109
+ "youmd mcp --install claude --auto || true",
110
+ "youmd mcp --install codex --auto || true",
111
+ "youmd skill link claude || true",
112
+ "youmd skill link codex || true",
113
+ 'if command -v gh >/dev/null 2>&1; then',
114
+ " gh auth status >/dev/null 2>&1 || gh auth login",
115
+ "else",
116
+ ' echo "[you.md] GitHub CLI missing; private repo clones may need gh installed"',
117
+ "fi",
118
+ "RECENT_ONLY_ARGS=()",
119
+ 'if youmd machine --help 2>/dev/null | grep -q -- "--recent-only"; then',
120
+ " RECENT_ONLY_ARGS=(--recent-only)",
121
+ "else",
122
+ ' echo "[you.md] installed CLI does not expose --recent-only yet; using noninteractive no-to-older-projects fallback"',
123
+ "fi",
124
+ "run_machine_projects_recent_only() {",
125
+ ' if [ "${#RECENT_ONLY_ARGS[@]}" -gt 0 ]; then',
126
+ ' youmd machine projects "$@"',
127
+ " else",
128
+ ' youmd machine projects "$@" </dev/null',
129
+ " fi",
130
+ "}",
131
+ 'echo "[you.md] hydrating portfolio graph from You.md/GitHub before the 30-day local clone pass"',
132
+ 'run_with_timeout "$HYDRATE_TIMEOUT" youmd project portfolio-hydrate --root "$ROOT" --days "$DAYS" --limit "$LIMIT" || true',
133
+ 'PROJECT_ARGS=(--root "$ROOT" --days "$DAYS" "${RECENT_ONLY_ARGS[@]}")',
134
+ 'if [ -n "${YOUMD_MAX_CLONE_PROJECTS:-}" ]; then',
135
+ ' PROJECT_ARGS+=(--max-clone-projects "$YOUMD_MAX_CLONE_PROJECTS")',
136
+ "fi",
137
+ 'echo "[you.md] previewing graph-backed 30-day project setup plan (ACTIVE + Top Priority/Focusing only)"',
138
+ 'run_machine_projects_recent_only "${PROJECT_ARGS[@]}" --dry-run || true',
139
+ 'echo "[you.md] creating code workspace and cloning ACTIVE + Top Priority/Focusing 30-day project repos"',
140
+ 'run_machine_projects_recent_only "${PROJECT_ARGS[@]}"',
141
+ 'echo "[you.md] checking encrypted env-vault tooling without printing secrets"',
142
+ 'youmd env backup --root "$ROOT" --preflight || true',
143
+ 'if [ -z "${YOUMD_ENV_VAULT:-}" ]; then',
144
+ ' DEFAULT_ENV_VAULT_DIR="$HOME/Desktop/youmd-env-vault"',
145
+ ' if [ -d "$DEFAULT_ENV_VAULT_DIR" ]; then',
146
+ ' DETECTED_ENV_VAULT="$(find "$DEFAULT_ENV_VAULT_DIR" -maxdepth 1 -type f \\( -name "env-vault-*.tar.enc" -o -name "env-vault-*.tar.age" -o -name "env-vault-*.tar.gpg" \\) -print 2>/dev/null | sort | tail -n 1 || true)"',
147
+ ' if [ -n "$DETECTED_ENV_VAULT" ]; then',
148
+ ' export YOUMD_ENV_VAULT="$DETECTED_ENV_VAULT"',
149
+ ' echo "[you.md] using detected env vault: $YOUMD_ENV_VAULT"',
150
+ " fi",
151
+ " fi",
152
+ "fi",
153
+ 'if [ -n "${YOUMD_ENV_VAULT:-}" ]; then',
154
+ ' if [ ! -f "$YOUMD_ENV_VAULT" ]; then',
155
+ ' echo "[you.md] env vault path does not exist: $YOUMD_ENV_VAULT" >&2',
156
+ " exit 1",
157
+ " fi",
158
+ ' if [ -z "${ENV_VAULT_PASS:-}" ] && command -v security >/dev/null 2>&1; then',
159
+ ' KEYCHAIN_SERVICE="${YOUMD_ENV_VAULT_KEYCHAIN_SERVICE:-youmd-env-vault}"',
160
+ ' if ENV_VAULT_PASS_FROM_KEYCHAIN="$(security find-generic-password -a "${USER:-${LOGNAME:-houston}}" -s "$KEYCHAIN_SERVICE" -w 2>/dev/null)"; then',
161
+ ' export ENV_VAULT_PASS="$ENV_VAULT_PASS_FROM_KEYCHAIN"',
162
+ ' unset ENV_VAULT_PASS_FROM_KEYCHAIN',
163
+ ' echo "[you.md] loaded env-vault passphrase from macOS Keychain service: $KEYCHAIN_SERVICE"',
164
+ " else",
165
+ ' echo "[you.md] no env-vault Keychain item found; restore will prompt for the passphrase"',
166
+ " fi",
167
+ " fi",
168
+ ' echo "[you.md] listing encrypted .env.local vault before restore"',
169
+ ' youmd env restore "$YOUMD_ENV_VAULT" --root "$ROOT" --list',
170
+ ' echo "[you.md] restoring encrypted .env.local vault"',
171
+ ' youmd env restore "$YOUMD_ENV_VAULT" --root "$ROOT"',
172
+ "else",
173
+ ' echo "[you.md] env vault not restored yet"',
174
+ ' echo "[you.md] On the old/source Mac, create the encrypted vault first:"',
175
+ ' echo "youmd env backup --root ~/Desktop/CODE_2025 --out ~/Desktop/youmd-env-vault"',
176
+ ' echo "[you.md] Move the generated env-vault-*.tar.enc file to this Mac, then rerun this command with:"',
177
+ ' echo "YOUMD_ENV_VAULT=/path/to/env-vault-YYYYMMDDTHHMMZ.tar.enc YOUMD_REQUIRE_ENV_VAULT=1 <same command>"',
178
+ ' echo "[you.md] Or restore manually after clone:"',
179
+ ' echo "youmd env restore <vault> --root \\"$ROOT\\""',
180
+ ' if [ "${YOUMD_REQUIRE_ENV_VAULT:-}" = "1" ]; then',
181
+ ' echo "[you.md] strict proof requires YOUMD_ENV_VAULT; stopping before readiness is marked complete" >&2',
182
+ " exit 1",
183
+ " fi",
184
+ "fi",
185
+ 'echo "[you.md] rehydrating portfolio graph with local README/project-context/env-key evidence"',
186
+ 'run_with_timeout "$HYDRATE_TIMEOUT" youmd project portfolio-hydrate --root "$ROOT" --days "$DAYS" --limit "$LIMIT" || true',
187
+ 'echo "[you.md] auditing cloned project readiness"',
188
+ 'youmd machine verify --root "$ROOT" --max-projects "$LIMIT" --write-report --sync-report || true',
189
+ "FULL_PROJECT_SET_COMPLETE=0",
190
+ 'EXPAND_TO_90="${YOUMD_EXPAND_TO_90_DAYS:-}"',
191
+ 'if [ -z "$EXPAND_TO_90" ] && [ "${YOUMD_SKIP_90_DAY_EXPANSION_PROMPT:-}" != "1" ] && [ -t 0 ]; then',
192
+ ' printf "\\n[you.md] expand to all active projects from the last ${EXPAND_DAYS} days before calling setup complete? [y/N] "',
193
+ ' read -r EXPAND_TO_90',
194
+ "fi",
195
+ 'case "$EXPAND_TO_90" in',
196
+ ' y|Y|yes|YES|1|true|TRUE)',
197
+ ' echo "[you.md] expanding workspace to active ${EXPAND_DAYS}-day project set"',
198
+ ' run_with_timeout "$HYDRATE_TIMEOUT" youmd project portfolio-hydrate --root "$ROOT" --days "$EXPAND_DAYS" --limit "$LIMIT" || true',
199
+ ' EXPAND_PROJECT_ARGS=(--root "$ROOT" --days "$EXPAND_DAYS" "${RECENT_ONLY_ARGS[@]}")',
200
+ ' if [ -n "${YOUMD_MAX_CLONE_PROJECTS:-}" ]; then',
201
+ ' EXPAND_PROJECT_ARGS+=(--max-clone-projects "$YOUMD_MAX_CLONE_PROJECTS")',
202
+ " fi",
203
+ ' run_machine_projects_recent_only "${EXPAND_PROJECT_ARGS[@]}" --dry-run || true',
204
+ ' run_machine_projects_recent_only "${EXPAND_PROJECT_ARGS[@]}"',
205
+ ' run_with_timeout "$HYDRATE_TIMEOUT" youmd project portfolio-hydrate --root "$ROOT" --days "$EXPAND_DAYS" --limit "$LIMIT" || true',
206
+ ' youmd machine verify --root "$ROOT" --max-projects "$LIMIT" --write-report --sync-report || true',
207
+ " FULL_PROJECT_SET_COMPLETE=1",
208
+ ' ;;',
209
+ ' *)',
210
+ ' echo "[you.md] stopped after the ${DAYS}-day active project setup; ${EXPAND_DAYS}-day expansion remains intentionally open."',
211
+ ' ;;',
212
+ "esac",
213
+ 'if [ "${YOUMD_RUN_CHECKS:-}" = "1" ]; then',
214
+ ' echo "[you.md] running bounded package checks"',
215
+ ' youmd machine verify --root "$ROOT" --max-projects "$LIMIT" --run-checks --max-check-projects "${YOUMD_MAX_CHECK_PROJECTS:-8}" --check-timeout-ms "${YOUMD_CHECK_TIMEOUT_MS:-120000}" --write-report --sync-report || true',
216
+ "else",
217
+ ' echo "[you.md] bounded package checks skipped; set YOUMD_RUN_CHECKS=1 to run lint/typecheck/test/build caps"',
218
+ "fi",
219
+ 'if [ "${YOUMD_INSTALL_DEPS:-}" = "1" ] || [ "${YOUMD_PROBE_SERVERS:-}" = "1" ]; then',
220
+ ' echo "[you.md] running bounded clean-host install/server proof"',
221
+ ' VERIFY_ARGS=(--root "$ROOT" --max-projects "$LIMIT")',
222
+ ' if [ "${YOUMD_INSTALL_DEPS:-}" = "1" ]; then',
223
+ ' VERIFY_ARGS+=(--install-deps --max-install-projects "${YOUMD_MAX_INSTALL_PROJECTS:-4}" --install-timeout-ms "${YOUMD_INSTALL_TIMEOUT_MS:-180000}")',
224
+ " fi",
225
+ ' if [ "${YOUMD_PROBE_SERVERS:-}" = "1" ]; then',
226
+ ' VERIFY_ARGS+=(--probe-servers --max-server-projects "${YOUMD_MAX_SERVER_PROJECTS:-3}" --server-timeout-ms "${YOUMD_SERVER_TIMEOUT_MS:-45000}" --server-start-port "${YOUMD_SERVER_START_PORT:-4310}")',
227
+ " fi",
228
+ ' youmd machine verify "${VERIFY_ARGS[@]}" --write-report --sync-report || true',
229
+ "else",
230
+ ' echo "[you.md] clean-host install/server proof skipped; set YOUMD_INSTALL_DEPS=1 and YOUMD_PROBE_SERVERS=1 to install deps and smoke-probe local dev servers"',
231
+ "fi",
232
+ 'echo "[you.md] installing resident identity/skillstack/project-context daemons"',
233
+ "youmd stack daemon install || true",
234
+ "youmd stack daemon status || true",
235
+ "youmd status",
236
+ 'if [ "$FULL_PROJECT_SET_COMPLETE" = "1" ]; then',
237
+ ' echo "[you.md] fresh-machine full ${EXPAND_DAYS}-day project setup complete: $ROOT"',
238
+ "else",
239
+ ' echo "[you.md] fresh-machine ${DAYS}-day setup pass complete; ${EXPAND_DAYS}-day expansion is still open: $ROOT"',
240
+ "fi",
241
+ ].join("\n");
242
+ }
243
+ function buildFreshMachineBootstrapCommand(options = {}) {
244
+ const assignments = [
245
+ envAssignment("YOUMD_API_KEY", options.apiKey),
246
+ envAssignment("YOUMD_CODE_ROOT", portableHomePath(options.root)),
247
+ envAssignment("YOUMD_ACTIVE_DAYS", options.days ?? exports.DEFAULT_FRESH_MACHINE_DAYS),
248
+ envAssignment("YOUMD_PROJECT_LIMIT", options.limit ?? exports.DEFAULT_FRESH_MACHINE_LIMIT),
249
+ envAssignment("YOUMD_MAX_CLONE_PROJECTS", options.maxCloneProjects),
250
+ envAssignment("YOUMD_ENV_VAULT", portableHomePath(options.envVaultPath)),
251
+ envAssignment("YOUMD_REQUIRE_ENV_VAULT", options.requireEnvVault ? "1" : undefined),
252
+ ].filter((value) => Boolean(value));
253
+ return `${assignments.join(" ")} bash -lc ${shellQuote(buildFreshMachineBootstrapScript())}`;
254
+ }
255
+ function buildFreshMachineBootstrapPrompt(options = {}) {
256
+ const root = portableHomePath(options.root) ?? exports.DEFAULT_FRESH_MACHINE_ROOT;
257
+ const days = options.days ?? exports.DEFAULT_FRESH_MACHINE_DAYS;
258
+ const expandDays = exports.DEFAULT_FRESH_MACHINE_EXPAND_DAYS;
259
+ const limit = options.limit ?? exports.DEFAULT_FRESH_MACHINE_LIMIT;
260
+ const command = buildFreshMachineBootstrapCommand(options);
261
+ const authLine = options.apiKey
262
+ ? "A scoped bootstrap key is embedded in the command. Treat this as secret local setup material."
263
+ : "If no bootstrap key is embedded, the command falls back to interactive You.md login.";
264
+ return [
265
+ "You are Claude Code or Codex running on my brand-new Mac.",
266
+ "",
267
+ "Goal: set up this blank computer so it has my You.md identity context, shared skills/stacks, MCP wiring, agent preferences/prompts, active project repos, encrypted `.env.local` files, machine proof sync, and resident sync behavior from my source Mac.",
268
+ "",
269
+ "Do not just explain this. Execute the setup, stream progress, and verify the result. Run the exact command below in the terminal first.",
270
+ "",
271
+ authLine,
272
+ "",
273
+ "Exact setup command:",
274
+ "",
275
+ "```bash",
276
+ command,
277
+ "```",
278
+ "",
279
+ "What it will do:",
280
+ "- install You.md from the curl runtime",
281
+ "- authenticate and pull/sync your identity bundle",
282
+ "- install/configure MCP for Claude Code and Codex",
283
+ "- restore shared agent skills, stack config, Claude/Codex links, and resident sync daemons",
284
+ "- hydrate the portfolio graph from You.md + authenticated GitHub before cloning",
285
+ `- preview the graph-backed plan, create ${root}, and clone only projects marked ACTIVE plus Top Priority/Focusing from the last ${days} days first`,
286
+ `- ask whether to expand to all ACTIVE plus Top Priority/Focusing projects from the last ${expandDays} days before calling the full project clone set complete`,
287
+ "- check env-vault tooling, auto-detect the newest `~/Desktop/youmd-env-vault/env-vault-*` file if `YOUMD_ENV_VAULT` is not set, list the encrypted vault, try macOS Keychain service `youmd-env-vault` for the passphrase, restore only after the list passes, then rehydrate local project/env evidence",
288
+ "- write and sync a secret-safe machine proof report, with optional bounded install/check/server proof flags",
289
+ "- bound portfolio hydration with `YOUMD_PORTFOLIO_HYDRATE_TIMEOUT_SECONDS` so large restored roots do not wedge setup",
290
+ "",
291
+ `Project source: You.md portfolio graph + authenticated GitHub recent repos, capped at ${limit} tracked projects before local audit evidence is merged. When the graph exists, new-computer setup clones only projects with status ACTIVE and focus Top Priority/Focusing; inactive, unsorted, on-ice, abandoned, killed, and unreviewed GitHub-only repos are skipped unless --include-inactive is explicitly used. First pass is ${days} days with out-of-window projects skipped; the ${expandDays}-day pass is explicit.`,
292
+ "Secret rule: .env.local values are never embedded here. On the old/source Mac, create a vault with `youmd env backup --root ~/Desktop/CODE_2025 --out ~/Desktop/youmd-env-vault`, move the generated `env-vault-*.tar.enc` file to `~/Desktop/youmd-env-vault/` on the new machine, then run this command. The command auto-detects the newest vault there; you can also override with `YOUMD_ENV_VAULT=/path/to/env-vault-*.tar.enc`. If macOS Keychain contains service `youmd-env-vault` for the current user, restore uses it automatically; otherwise it prompts. The restore path lists variable names/counts and target paths only, never values.",
293
+ "",
294
+ "After the command finishes, report:",
295
+ "- the `youmd status` sync state",
296
+ `- the \`${root}\` project count`,
297
+ "- whether the encrypted env vault restored",
298
+ "- whether Claude/Codex MCP config was installed",
299
+ "- the synced machine proof status",
300
+ "- whether I should expand to the 90-day active project set if I have not answered yet",
301
+ "",
302
+ "Done-ness rule: for real fresh-computer proof, set YOUMD_REQUIRE_ENV_VAULT=1 or pass --require-env-vault so the command fails instead of pretending setup is complete when the encrypted env vault is missing.",
303
+ ].join("\n");
304
+ }
305
+ //# sourceMappingURL=machine-bootstrap-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"machine-bootstrap-prompt.js","sourceRoot":"","sources":["../../src/lib/machine-bootstrap-prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ export type ProjectRecency = "recent" | "active-undated" | "older";
2
+ export interface MachineProjectCandidate {
3
+ name: string;
4
+ slug?: string;
5
+ repoName: string;
6
+ targetDirName: string;
7
+ githubUrl?: string;
8
+ cloneSpec?: string;
9
+ projectUrl?: string;
10
+ fullName?: string;
11
+ status?: string;
12
+ statusSource?: string;
13
+ focusStatus?: string;
14
+ focusRank?: number;
15
+ machineSetupEligible?: boolean;
16
+ updatedAt?: string;
17
+ recency: ProjectRecency;
18
+ reason: string;
19
+ source: "youmd" | "github" | "portfolio-graph" | "youmd+github" | "portfolio-graph+github";
20
+ stackName?: string;
21
+ goal?: string;
22
+ focus?: string;
23
+ docs?: string[];
24
+ environments?: string[];
25
+ tags?: string[];
26
+ apiDocsUrl: string;
27
+ mcpDocsUrl: string;
28
+ }
29
+ export interface MachineProjectPlan {
30
+ rootDir: string;
31
+ recent: MachineProjectCandidate[];
32
+ older: MachineProjectCandidate[];
33
+ skipped: Array<{
34
+ name: string;
35
+ reason: string;
36
+ }>;
37
+ sourceCounts: {
38
+ portfolioGraphProjects: number;
39
+ portfolioGraphTrackedProjects: number;
40
+ githubProjects: number;
41
+ bundleProjects: number;
42
+ };
43
+ }
44
+ export interface GithubProjectSource {
45
+ name: string;
46
+ fullName: string;
47
+ url: string;
48
+ pushedAt?: string;
49
+ updatedAt?: string;
50
+ description?: string | null;
51
+ homepage?: string | null;
52
+ isPrivate?: boolean;
53
+ }
54
+ export declare function githubRepoFromUrl(input: string): {
55
+ owner: string;
56
+ repo: string;
57
+ url: string;
58
+ cloneSpec: string;
59
+ } | null;
60
+ export declare function inferStackName(input: string): string;
61
+ export declare function buildMachineProjectPlan(youJson: unknown, options: {
62
+ rootDir: string;
63
+ activeDays?: number;
64
+ now?: Date;
65
+ githubProjects?: GithubProjectSource[];
66
+ portfolioGraph?: unknown;
67
+ apiDocsUrl?: string;
68
+ mcpDocsUrl?: string;
69
+ includeInactive?: boolean;
70
+ }): MachineProjectPlan;
71
+ //# sourceMappingURL=machine-projects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"machine-projects.d.ts","sourceRoot":"","sources":["../../src/lib/machine-projects.ts"],"names":[],"mappings":"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"}