youmd 0.11.0 → 0.13.0
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/dist/commands/brain.d.ts.map +1 -1
- package/dist/commands/brain.js +77 -28
- package/dist/commands/brain.js.map +1 -1
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +6 -1
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/connect.d.ts +113 -0
- package/dist/commands/connect.d.ts.map +1 -0
- package/dist/commands/connect.js +849 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/conversations.d.ts +5 -0
- package/dist/commands/conversations.d.ts.map +1 -0
- package/dist/commands/conversations.js +116 -0
- package/dist/commands/conversations.js.map +1 -0
- package/dist/commands/founder.d.ts +16 -0
- package/dist/commands/founder.d.ts.map +1 -0
- package/dist/commands/founder.js +446 -0
- package/dist/commands/founder.js.map +1 -0
- package/dist/commands/handoff.d.ts +5 -0
- package/dist/commands/handoff.d.ts.map +1 -0
- package/dist/commands/handoff.js +432 -0
- package/dist/commands/handoff.js.map +1 -0
- package/dist/commands/orchestrate.d.ts +15 -0
- package/dist/commands/orchestrate.d.ts.map +1 -1
- package/dist/commands/orchestrate.js +294 -0
- package/dist/commands/orchestrate.js.map +1 -1
- package/dist/commands/project.d.ts.map +1 -1
- package/dist/commands/project.js +8 -1
- package/dist/commands/project.js.map +1 -1
- package/dist/commands/reconcile.d.ts +15 -0
- package/dist/commands/reconcile.d.ts.map +1 -0
- package/dist/commands/reconcile.js +260 -0
- package/dist/commands/reconcile.js.map +1 -0
- package/dist/commands/session.d.ts +28 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +895 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +11 -0
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/tasks.d.ts +20 -0
- package/dist/commands/tasks.d.ts.map +1 -1
- package/dist/commands/tasks.js +90 -19
- package/dist/commands/tasks.js.map +1 -1
- package/dist/generated/capability-registry.d.ts +444 -76
- package/dist/generated/capability-registry.d.ts.map +1 -1
- package/dist/generated/capability-registry.js +497 -76
- package/dist/generated/capability-registry.js.map +1 -1
- package/dist/index.js +122 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/api.d.ts +393 -2
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +195 -2
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/brain/adapters.d.ts +22 -1
- package/dist/lib/brain/adapters.d.ts.map +1 -1
- package/dist/lib/brain/adapters.js +184 -2
- package/dist/lib/brain/adapters.js.map +1 -1
- package/dist/lib/brain/approval-key-trust.d.ts +29 -0
- package/dist/lib/brain/approval-key-trust.d.ts.map +1 -0
- package/dist/lib/brain/approval-key-trust.js +139 -0
- package/dist/lib/brain/approval-key-trust.js.map +1 -0
- package/dist/lib/brain/content.d.ts +10 -3
- package/dist/lib/brain/content.d.ts.map +1 -1
- package/dist/lib/brain/content.js +133 -30
- package/dist/lib/brain/content.js.map +1 -1
- package/dist/lib/brain/descriptor-validator.d.ts +11 -0
- package/dist/lib/brain/descriptor-validator.d.ts.map +1 -0
- package/dist/lib/brain/descriptor-validator.js +185 -0
- package/dist/lib/brain/descriptor-validator.js.map +1 -0
- package/dist/lib/brain/discovery.d.ts.map +1 -1
- package/dist/lib/brain/discovery.js +77 -50
- package/dist/lib/brain/discovery.js.map +1 -1
- package/dist/lib/brain/index.d.ts +2 -0
- package/dist/lib/brain/index.d.ts.map +1 -1
- package/dist/lib/brain/index.js +14 -4
- package/dist/lib/brain/index.js.map +1 -1
- package/dist/lib/brain/proposal.d.ts +53 -5
- package/dist/lib/brain/proposal.d.ts.map +1 -1
- package/dist/lib/brain/proposal.js +330 -94
- package/dist/lib/brain/proposal.js.map +1 -1
- package/dist/lib/brain/safe-file.d.ts +25 -1
- package/dist/lib/brain/safe-file.d.ts.map +1 -1
- package/dist/lib/brain/safe-file.js +250 -30
- package/dist/lib/brain/safe-file.js.map +1 -1
- package/dist/lib/brain/safety.d.ts.map +1 -1
- package/dist/lib/brain/safety.js +5 -0
- package/dist/lib/brain/safety.js.map +1 -1
- package/dist/lib/brain/staged-apply.d.ts +2 -1
- package/dist/lib/brain/staged-apply.d.ts.map +1 -1
- package/dist/lib/brain/staged-apply.js +6 -3
- package/dist/lib/brain/staged-apply.js.map +1 -1
- package/dist/lib/brain/store.d.ts +3 -0
- package/dist/lib/brain/store.d.ts.map +1 -1
- package/dist/lib/brain/store.js +68 -0
- package/dist/lib/brain/store.js.map +1 -1
- package/dist/lib/brain/sync.d.ts +48 -0
- package/dist/lib/brain/sync.d.ts.map +1 -1
- package/dist/lib/brain/sync.js +102 -0
- package/dist/lib/brain/sync.js.map +1 -1
- package/dist/lib/brain/types.d.ts +23 -0
- package/dist/lib/brain/types.d.ts.map +1 -1
- package/dist/lib/brain/vision.d.ts +35 -0
- package/dist/lib/brain/vision.d.ts.map +1 -0
- package/dist/lib/brain/vision.js +65 -0
- package/dist/lib/brain/vision.js.map +1 -0
- package/dist/lib/businessScaffold.d.ts +42 -0
- package/dist/lib/businessScaffold.d.ts.map +1 -0
- package/dist/lib/businessScaffold.js +150 -0
- package/dist/lib/businessScaffold.js.map +1 -0
- package/dist/lib/codex-device-auth.d.ts +94 -0
- package/dist/lib/codex-device-auth.d.ts.map +1 -0
- package/dist/lib/codex-device-auth.js +295 -0
- package/dist/lib/codex-device-auth.js.map +1 -0
- package/dist/lib/codex-job-control-plane.d.ts +67 -0
- package/dist/lib/codex-job-control-plane.d.ts.map +1 -0
- package/dist/lib/codex-job-control-plane.js +105 -0
- package/dist/lib/codex-job-control-plane.js.map +1 -0
- package/dist/lib/codex-readonly-job.d.ts +76 -0
- package/dist/lib/codex-readonly-job.d.ts.map +1 -0
- package/dist/lib/codex-readonly-job.js +196 -0
- package/dist/lib/codex-readonly-job.js.map +1 -0
- package/dist/lib/config.d.ts +7 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +3 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/connected-access-native.d.ts +111 -0
- package/dist/lib/connected-access-native.d.ts.map +1 -0
- package/dist/lib/connected-access-native.js +403 -0
- package/dist/lib/connected-access-native.js.map +1 -0
- package/dist/lib/connected-context.d.ts +82 -0
- package/dist/lib/connected-context.d.ts.map +1 -0
- package/dist/lib/connected-context.js +610 -0
- package/dist/lib/connected-context.js.map +1 -0
- package/dist/lib/goalRegistryFile.d.ts +169 -0
- package/dist/lib/goalRegistryFile.d.ts.map +1 -0
- package/dist/lib/goalRegistryFile.js +518 -0
- package/dist/lib/goalRegistryFile.js.map +1 -0
- package/dist/lib/goalsFile.d.ts +101 -0
- package/dist/lib/goalsFile.d.ts.map +1 -0
- package/dist/lib/goalsFile.js +413 -0
- package/dist/lib/goalsFile.js.map +1 -0
- package/dist/lib/handoff.d.ts +170 -0
- package/dist/lib/handoff.d.ts.map +1 -0
- package/dist/lib/handoff.js +316 -0
- package/dist/lib/handoff.js.map +1 -0
- package/dist/lib/machine-identity.d.ts +2 -0
- package/dist/lib/machine-identity.d.ts.map +1 -1
- package/dist/lib/machine-identity.js +13 -6
- package/dist/lib/machine-identity.js.map +1 -1
- package/dist/lib/onboarding.d.ts +4 -1
- package/dist/lib/onboarding.d.ts.map +1 -1
- package/dist/lib/onboarding.js +11 -3
- package/dist/lib/onboarding.js.map +1 -1
- package/dist/lib/orchestrator/loop.d.ts.map +1 -1
- package/dist/lib/orchestrator/loop.js +8 -3
- package/dist/lib/orchestrator/loop.js.map +1 -1
- package/dist/lib/orchestrator/run-journal.d.ts +68 -3
- package/dist/lib/orchestrator/run-journal.d.ts.map +1 -1
- package/dist/lib/orchestrator/run-journal.js +391 -37
- package/dist/lib/orchestrator/run-journal.js.map +1 -1
- package/dist/lib/orchestrator/supervisor.d.ts +11 -0
- package/dist/lib/orchestrator/supervisor.d.ts.map +1 -1
- package/dist/lib/orchestrator/supervisor.js +304 -116
- package/dist/lib/orchestrator/supervisor.js.map +1 -1
- package/dist/lib/orchestrator/tools.d.ts.map +1 -1
- package/dist/lib/orchestrator/tools.js +76 -3
- package/dist/lib/orchestrator/tools.js.map +1 -1
- package/dist/lib/redact.d.ts.map +1 -1
- package/dist/lib/redact.js +40 -7
- package/dist/lib/redact.js.map +1 -1
- package/dist/lib/remote-agent-event.d.ts +19 -0
- package/dist/lib/remote-agent-event.d.ts.map +1 -0
- package/dist/lib/remote-agent-event.js +85 -0
- package/dist/lib/remote-agent-event.js.map +1 -0
- package/dist/lib/remote-command.d.ts.map +1 -1
- package/dist/lib/remote-command.js +19 -0
- package/dist/lib/remote-command.js.map +1 -1
- package/dist/lib/remote-executor.d.ts +7 -1
- package/dist/lib/remote-executor.d.ts.map +1 -1
- package/dist/lib/remote-executor.js +391 -0
- package/dist/lib/remote-executor.js.map +1 -1
- package/dist/lib/sessionCheckpoint.d.ts +104 -0
- package/dist/lib/sessionCheckpoint.d.ts.map +1 -0
- package/dist/lib/sessionCheckpoint.js +191 -0
- package/dist/lib/sessionCheckpoint.js.map +1 -0
- package/dist/lib/sessionHandoff.d.ts +47 -0
- package/dist/lib/sessionHandoff.d.ts.map +1 -0
- package/dist/lib/sessionHandoff.js +305 -0
- package/dist/lib/sessionHandoff.js.map +1 -0
- package/dist/lib/stream.d.ts +3 -1
- package/dist/lib/stream.d.ts.map +1 -1
- package/dist/lib/stream.js +8 -3
- package/dist/lib/stream.js.map +1 -1
- package/dist/lib/taskLedgerProposal.d.ts +2 -2
- package/dist/lib/taskLedgerProposal.d.ts.map +1 -1
- package/dist/lib/taskLedgerProposal.js +16 -8
- package/dist/lib/taskLedgerProposal.js.map +1 -1
- package/dist/lib/tasksFile.d.ts +14 -2
- package/dist/lib/tasksFile.d.ts.map +1 -1
- package/dist/lib/tasksFile.js +39 -5
- package/dist/lib/tasksFile.js.map +1 -1
- package/dist/mcp/registry.d.ts +4 -1
- package/dist/mcp/registry.d.ts.map +1 -1
- package/dist/mcp/registry.js +230 -1
- package/dist/mcp/registry.js.map +1 -1
- package/dist/mcp/server.d.ts +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +18 -9
- package/dist/mcp/server.js.map +1 -1
- package/native/prebuilds/darwin-universal/youmd_safe_open.node +0 -0
- package/package.json +4 -2
- package/scripts/env-vault/README.md +16 -20
- package/scripts/env-vault/backup.sh +22 -57
- package/scripts/env-vault/restore.sh +18 -96
- package/scripts/smoke-safe-open-node.cjs +50 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# env-vault/restore.sh — restores .env.local files
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
#
|
|
2
|
+
# env-vault/restore.sh — restores project .env.local files only from a vault
|
|
3
|
+
# created by backup.sh. It never restores Codex, Claude, OpenAI, Cursor,
|
|
4
|
+
# browser, or provider-auth caches. NEVER prints, echoes, or logs any secret
|
|
5
|
+
# VALUES. Restore prints target paths plus variable names/counts only.
|
|
6
6
|
#
|
|
7
7
|
# Usage: bash restore.sh [--list] [--force] [--map-existing] [--existing-only]
|
|
8
8
|
# [--skip-agent-auth] [--root <target-root>] <vault-file>
|
|
@@ -11,29 +11,16 @@
|
|
|
11
11
|
# --root: destination root for .env.local files
|
|
12
12
|
# (default: /Users/houstongolden/Desktop/CODE_2025)
|
|
13
13
|
#
|
|
14
|
-
# agent-auth restore map (archive name → absolute home path):
|
|
15
|
-
# agent-auth/codex-auth.json → ~/.codex/auth.json
|
|
16
|
-
# agent-auth/cursor-mcp.json → ~/.cursor/mcp.json
|
|
17
|
-
# agent-auth/claude.json → ~/.claude.json
|
|
18
|
-
|
|
19
14
|
set -euo pipefail
|
|
20
15
|
|
|
21
|
-
# ── agent-auth restore map ─────────────────────────────────────────────────────
|
|
22
|
-
# Maps archive name (inside agent-auth/) to its absolute home destination.
|
|
23
|
-
# Format: "archive-name:absolute-destination-path"
|
|
24
|
-
# Must stay in sync with AGENT_SECRET_FILES in backup.sh.
|
|
25
|
-
AGENT_AUTH_MAP=(
|
|
26
|
-
"codex-auth.json:${HOME}/.codex/auth.json"
|
|
27
|
-
"cursor-mcp.json:${HOME}/.cursor/mcp.json"
|
|
28
|
-
"claude.json:${HOME}/.claude.json"
|
|
29
|
-
)
|
|
30
|
-
|
|
31
16
|
# ── defaults ──────────────────────────────────────────────────────────────────
|
|
32
17
|
TARGET_ROOT="${ENV_VAULT_RESTORE_ROOT:-/Users/houstongolden/Desktop/CODE_2025}"
|
|
33
18
|
FORCE=false
|
|
34
19
|
LIST_ONLY=false
|
|
35
20
|
MAP_EXISTING=false
|
|
36
21
|
EXISTING_ONLY=false
|
|
22
|
+
# Legacy compatibility only. Earlier vault versions could include an
|
|
23
|
+
# `agent-auth/` payload; those archives are rejected before any file is written.
|
|
37
24
|
SKIP_AGENT_AUTH=false
|
|
38
25
|
VAULT_FILE=""
|
|
39
26
|
|
|
@@ -88,7 +75,7 @@ echo "Encryption tool: ${ENC_TOOL}"
|
|
|
88
75
|
echo "Vault file: ${VAULT_FILE}"
|
|
89
76
|
echo "Target root: ${TARGET_ROOT}"
|
|
90
77
|
echo "Project mapping: map-existing=${MAP_EXISTING} existing-only=${EXISTING_ONLY}"
|
|
91
|
-
echo "
|
|
78
|
+
echo "Provider auth: excluded (legacy auth-bearing vaults are rejected)"
|
|
92
79
|
echo ""
|
|
93
80
|
|
|
94
81
|
normalize_project_name() {
|
|
@@ -172,12 +159,19 @@ echo ""
|
|
|
172
159
|
# ── extract into work dir ─────────────────────────────────────────────────────
|
|
173
160
|
EXTRACT_DIR="${WORK_DIR}/extracted"
|
|
174
161
|
mkdir -p "${EXTRACT_DIR}"
|
|
162
|
+
|
|
163
|
+
# Do not turn an older portable vault into a credential migration vector. The
|
|
164
|
+
# contents are never extracted or restored, including in --list mode; the
|
|
165
|
+
# operator must make a new project-env-only backup from the source machine.
|
|
166
|
+
if tar -tf "${TAR_PATH}" | grep -Eq '(^|/)(agent-auth|\.codex|\.claude|\.cursor)(/|$)|(^|/)Library/Application Support/(Claude|Codex|Google/Chrome)(/|$)'; then
|
|
167
|
+
echo "ERROR: This legacy vault contains protected agent/provider auth material." >&2
|
|
168
|
+
echo "Refusing to restore it. Create a new project-env-only vault on the source machine." >&2
|
|
169
|
+
exit 1
|
|
170
|
+
fi
|
|
175
171
|
tar -xf "${TAR_PATH}" -C "${EXTRACT_DIR}"
|
|
176
172
|
|
|
177
173
|
if [[ "${LIST_ONLY}" == "true" ]]; then
|
|
178
174
|
ENV_COUNT=0
|
|
179
|
-
AGENT_PRESENT=0
|
|
180
|
-
AGENT_MISSING=0
|
|
181
175
|
|
|
182
176
|
echo "Vault contents (secret-safe inventory):"
|
|
183
177
|
while IFS= read -r -d '' ENV_FILE; do
|
|
@@ -200,28 +194,8 @@ if [[ "${LIST_ONLY}" == "true" ]]; then
|
|
|
200
194
|
(( ENV_COUNT++ )) || true
|
|
201
195
|
done < <(find "${EXTRACT_DIR}" -name ".env.local" -print0)
|
|
202
196
|
|
|
203
|
-
AGENT_AUTH_SRC="${EXTRACT_DIR}/agent-auth"
|
|
204
|
-
echo " agent-auth:"
|
|
205
|
-
if [[ "${SKIP_AGENT_AUTH}" == "true" ]]; then
|
|
206
|
-
echo " skipped by --skip-agent-auth"
|
|
207
|
-
else
|
|
208
|
-
for ENTRY in "${AGENT_AUTH_MAP[@]}"; do
|
|
209
|
-
ARCHIVE_NAME="${ENTRY%%:*}"
|
|
210
|
-
DEST_PATH="${ENTRY##*:}"
|
|
211
|
-
SRC_FILE="${AGENT_AUTH_SRC}/${ARCHIVE_NAME}"
|
|
212
|
-
if [[ -f "${SRC_FILE}" ]]; then
|
|
213
|
-
FILE_BYTES=$(wc -c < "${SRC_FILE}" | tr -d ' ')
|
|
214
|
-
echo " present: agent-auth/${ARCHIVE_NAME} -> ${DEST_PATH} (${FILE_BYTES} bytes)"
|
|
215
|
-
(( AGENT_PRESENT++ )) || true
|
|
216
|
-
else
|
|
217
|
-
echo " missing: agent-auth/${ARCHIVE_NAME}"
|
|
218
|
-
(( AGENT_MISSING++ )) || true
|
|
219
|
-
fi
|
|
220
|
-
done
|
|
221
|
-
fi
|
|
222
|
-
|
|
223
197
|
echo ""
|
|
224
|
-
echo "List summary: ${ENV_COUNT} .env.local file(s)
|
|
198
|
+
echo "List summary: ${ENV_COUNT} .env.local file(s); provider/runtime credentials are excluded."
|
|
225
199
|
echo "No files were written and no secret values were printed."
|
|
226
200
|
exit 0
|
|
227
201
|
fi
|
|
@@ -267,64 +241,12 @@ while IFS= read -r -d '' ENV_FILE; do
|
|
|
267
241
|
fi
|
|
268
242
|
done < <(find "${EXTRACT_DIR}" -name ".env.local" -print0)
|
|
269
243
|
|
|
270
|
-
# ── restore agent-auth files ───────────────────────────────────────────────────
|
|
271
|
-
AGENT_RESTORED=0
|
|
272
|
-
AGENT_SKIPPED=0
|
|
273
|
-
AGENT_BACKED_UP=0
|
|
274
|
-
|
|
275
|
-
AGENT_AUTH_SRC="${EXTRACT_DIR}/agent-auth"
|
|
276
|
-
|
|
277
|
-
if [[ "${SKIP_AGENT_AUTH}" == "true" ]]; then
|
|
278
|
-
echo "Skipping agent-auth restore because --skip-agent-auth was provided."
|
|
279
|
-
echo ""
|
|
280
|
-
elif [[ -d "${AGENT_AUTH_SRC}" ]]; then
|
|
281
|
-
echo "Restoring agent-auth files…"
|
|
282
|
-
for ENTRY in "${AGENT_AUTH_MAP[@]}"; do
|
|
283
|
-
ARCHIVE_NAME="${ENTRY%%:*}"
|
|
284
|
-
DEST_PATH="${ENTRY##*:}"
|
|
285
|
-
SRC_FILE="${AGENT_AUTH_SRC}/${ARCHIVE_NAME}"
|
|
286
|
-
|
|
287
|
-
if [[ ! -f "${SRC_FILE}" ]]; then
|
|
288
|
-
echo " SKIPPED (not in vault): agent-auth/${ARCHIVE_NAME}"
|
|
289
|
-
(( AGENT_SKIPPED++ )) || true
|
|
290
|
-
continue
|
|
291
|
-
fi
|
|
292
|
-
|
|
293
|
-
DEST_DIR="$(dirname "${DEST_PATH}")"
|
|
294
|
-
mkdir -p "${DEST_DIR}"
|
|
295
|
-
|
|
296
|
-
if [[ -f "${DEST_PATH}" ]]; then
|
|
297
|
-
if [[ "${FORCE}" == "true" ]]; then
|
|
298
|
-
cp "${SRC_FILE}" "${DEST_PATH}"
|
|
299
|
-
echo " RESTORED (overwrite): ${DEST_PATH}"
|
|
300
|
-
(( AGENT_RESTORED++ )) || true
|
|
301
|
-
else
|
|
302
|
-
TS="$(date -u +%Y%m%dT%H%M%SZ)"
|
|
303
|
-
BAK="${DEST_PATH}.bak.${TS}"
|
|
304
|
-
cp "${DEST_PATH}" "${BAK}"
|
|
305
|
-
cp "${SRC_FILE}" "${DEST_PATH}"
|
|
306
|
-
echo " RESTORED (backed up old → $(basename "${BAK}")): ${DEST_PATH}"
|
|
307
|
-
(( AGENT_RESTORED++ )) || true
|
|
308
|
-
(( AGENT_BACKED_UP++ )) || true
|
|
309
|
-
fi
|
|
310
|
-
else
|
|
311
|
-
cp "${SRC_FILE}" "${DEST_PATH}"
|
|
312
|
-
echo " RESTORED (new): ${DEST_PATH}"
|
|
313
|
-
(( AGENT_RESTORED++ )) || true
|
|
314
|
-
fi
|
|
315
|
-
done
|
|
316
|
-
echo ""
|
|
317
|
-
else
|
|
318
|
-
echo "No agent-auth/ directory in vault — skipping agent-auth restore."
|
|
319
|
-
echo ""
|
|
320
|
-
fi
|
|
321
|
-
|
|
322
244
|
echo ""
|
|
323
245
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
324
246
|
echo " Restore summary"
|
|
325
247
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
326
248
|
echo " .env.local — Restored: ${RESTORED} | Skipped: ${SKIPPED} | Old files backed up: ${BACKED_UP}"
|
|
327
|
-
echo "
|
|
249
|
+
echo " provider auth — excluded by policy; none was restored"
|
|
328
250
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
329
251
|
echo ""
|
|
330
252
|
echo "Secrets are now in place. Do not print or share secret files."
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-require-imports */
|
|
2
|
+
const assert = require("node:assert/strict");
|
|
3
|
+
const fs = require("node:fs");
|
|
4
|
+
const os = require("node:os");
|
|
5
|
+
const path = require("node:path");
|
|
6
|
+
|
|
7
|
+
const addon = require(path.resolve(
|
|
8
|
+
__dirname,
|
|
9
|
+
"../native/prebuilds/darwin-universal/youmd_safe_open.node",
|
|
10
|
+
));
|
|
11
|
+
|
|
12
|
+
assert.equal(addon.napiVersion, 8, "expected the ABI-stable Node-API v8 addon");
|
|
13
|
+
assert.equal(typeof addon.safeRead, "function", "safeRead export is missing");
|
|
14
|
+
|
|
15
|
+
const root = fs.realpathSync.native(fs.mkdtempSync(path.join(os.tmpdir(), "youmd-node-abi-")));
|
|
16
|
+
const outside = fs.realpathSync.native(fs.mkdtempSync(path.join(os.tmpdir(), "youmd-node-abi-outside-")));
|
|
17
|
+
|
|
18
|
+
try {
|
|
19
|
+
fs.mkdirSync(path.join(root, "project-context"));
|
|
20
|
+
fs.writeFileSync(path.join(root, "project-context", "PRD.md"), "verified\n");
|
|
21
|
+
fs.writeFileSync(path.join(outside, "PRD.md"), "outside\n");
|
|
22
|
+
|
|
23
|
+
const stat = fs.lstatSync(root, { bigint: true });
|
|
24
|
+
const bytes = addon.safeRead(
|
|
25
|
+
root,
|
|
26
|
+
"project-context/PRD.md",
|
|
27
|
+
1024,
|
|
28
|
+
stat.dev.toString(),
|
|
29
|
+
stat.ino.toString(),
|
|
30
|
+
);
|
|
31
|
+
assert.equal(bytes.toString("utf8"), "verified\n");
|
|
32
|
+
|
|
33
|
+
fs.rmSync(path.join(root, "project-context"), { recursive: true });
|
|
34
|
+
fs.symlinkSync(outside, path.join(root, "project-context"), "dir");
|
|
35
|
+
assert.throws(
|
|
36
|
+
() => addon.safeRead(
|
|
37
|
+
root,
|
|
38
|
+
"project-context/PRD.md",
|
|
39
|
+
1024,
|
|
40
|
+
stat.dev.toString(),
|
|
41
|
+
stat.ino.toString(),
|
|
42
|
+
),
|
|
43
|
+
/symlink_rejected|unsafe_path/,
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
console.log(`safe-open ABI smoke passed on Node ${process.version}`);
|
|
47
|
+
} finally {
|
|
48
|
+
fs.rmSync(root, { recursive: true, force: true });
|
|
49
|
+
fs.rmSync(outside, { recursive: true, force: true });
|
|
50
|
+
}
|