@kanadego/dsh-heartbeat 1.5.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/LICENSE +21 -0
- package/README.md +192 -0
- package/assets/frontwin.ps1 +44 -0
- package/assets/idle.ps1 +27 -0
- package/assets/notify.ps1 +69 -0
- package/assets/presets/heartbeat/agent.cordis.yml +66 -0
- package/assets/presets/heartbeat/preset.yml +2 -0
- package/assets/screenpulse.ps1 +168 -0
- package/assets/vault.ps1 +52 -0
- package/client.js +428 -0
- package/config/busy-rules.json +63 -0
- package/config/interests.json +30 -0
- package/config/policy.json +57 -0
- package/config/profile-schema.json +68 -0
- package/config/watchlist.json +9 -0
- package/cordis.patch.yml +14 -0
- package/dist/bindings-XPPSKILN.js +19 -0
- package/dist/bindings-XPPSKILN.js.map +1 -0
- package/dist/chunk-2M35HRL6.js +1207 -0
- package/dist/chunk-2M35HRL6.js.map +1 -0
- package/dist/chunk-4UE74TUB.js +98 -0
- package/dist/chunk-4UE74TUB.js.map +1 -0
- package/dist/chunk-AISZRA4C.js +235 -0
- package/dist/chunk-AISZRA4C.js.map +1 -0
- package/dist/chunk-J6ZTRFFW.js +64 -0
- package/dist/chunk-J6ZTRFFW.js.map +1 -0
- package/dist/chunk-LLD7LUNN.js +202 -0
- package/dist/chunk-LLD7LUNN.js.map +1 -0
- package/dist/chunk-S7PTR42P.js +19 -0
- package/dist/chunk-S7PTR42P.js.map +1 -0
- package/dist/cli/index.js +589 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/inbox-MMLHISQV.js +22 -0
- package/dist/inbox-MMLHISQV.js.map +1 -0
- package/dist/index.js +2745 -0
- package/dist/index.js.map +1 -0
- package/dist/lib-FJP7J4T6.js +2281 -0
- package/dist/lib-FJP7J4T6.js.map +1 -0
- package/dist/runtime-J5NOPRBA.js +11 -0
- package/dist/runtime-J5NOPRBA.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cli/index.ts","../../src/vault/burn-list.ts"],"sourcesContent":["// Operational CLI (design doc §14). Commands grow per module.\r\n// Run: node dist/cli/index.js <command> [args] (or via tsx in dev)\r\n\r\nimport { spawn } from 'node:child_process';\r\nimport fs from 'node:fs';\r\nimport os from 'node:os';\r\nimport path from 'node:path';\r\nimport { initWorkspace, workspace } from '../core/paths.js';\r\nimport { createPathGuard } from '../core/path-guard.js';\r\nimport { appendAuditLine, pruneAuditFile } from '../core/audit-log.js';\r\nimport { loadEncryptedText } from '../vault/vault.js';\r\nimport { loadPolicy } from '../config/load.js';\r\nimport {\r\n addSeed,\r\n archiveSeedById,\r\n gcPool,\r\n loadPool,\r\n activeSeeds,\r\n archivedSeeds,\r\n seedsFilePath,\r\n surfaceSeed,\r\n} from '../seeds/pool.js';\r\nimport {\r\n appendEntry,\r\n ledgerFilePath,\r\n markDone,\r\n readLedger,\r\n scanPending,\r\n} from '../ledger/ledger.js';\r\nimport {\r\n adviseWander,\r\n browseStatePath,\r\n browseStatus,\r\n checkWatchlist,\r\n completeWander,\r\n loadInterests,\r\n loadWatchlist,\r\n} from '../browse/browse.js';\r\nimport { ensureRegistered, sendNewMessageHint } from '../notify/notify.js';\r\nimport {\r\n loadProfile,\r\n profileFilePath,\r\n verifyProfile,\r\n rebuildProfile,\r\n} from '../profile/store.js';\r\nimport { loadProfileSchema } from '../profile/schema.js';\r\nimport { planBurn, executeBurn } from '../vault/burn-list.js';\r\nimport { writeText } from '../vault/vault.js';\r\nimport {\r\n BUNDLED_PRESET_ID,\r\n conventionalUserPresetRoot,\r\n describeInstall,\r\n installBundledPreset,\r\n presetStatus,\r\n} from '../core/preset-install.js';\r\n\r\nfunction usage(): string {\r\n return [\r\n 'usage: heartbeat <command> [args]',\r\n '',\r\n 'commands:',\r\n ' status workspace paths + policy summary',\r\n ' seeds add <text> [--tag t] [--source s] [--topic x] [--confidence n]',\r\n ' seeds list [--archived] list active (or archived) seeds',\r\n ' seeds surface <id> count a surfacing (rule 1 accounting)',\r\n ' seeds archive <id> deliberate retirement (completed)',\r\n ' seeds gc run deterministic eviction rules 1-3',\r\n ' seeds stats pool status JSON',\r\n ' ledger add <text> register an open item',\r\n ' ledger list [--pending] list entries',\r\n ' ledger done <id|substring> mark an entry done',\r\n ' ledger open open ledger.md in the default editor',\r\n ' logs cleanup [--dry-run] apply log retention now',\r\n ' browse status browse state summary (watch + wander)',\r\n ' browse dry wander adjudication with forced noon window',\r\n ' browse watch run watchlist check now (network)',\r\n ' browse done <focus> CODE-side registration after a wander visit',\r\n ' bind list list session bindings (D13)',\r\n ' bind add <sessionId> [--observe] bind a session (deliver by default)',\r\n ' bind remove <sessionId> unbind a session',\r\n ' sessions list enumerate persisted sessions (ids)',\r\n ' notify check|register|send toast channel (D12: hint only, no body)',\r\n ' profile list [--all] current valid (or all incl. expired) entries',\r\n ' profile export decrypted Markdown export to data/exports/',\r\n ' profile verify journal replay vs disk (report only)',\r\n ' profile rebuild [--check] rebuild materialized view from journal',\r\n ' profile wipe wipe profile data (asks --yes)',\r\n ' burn [--yes] [--all] shred runtime data (settings kept unless --all)',\r\n ' preset status bundled agent preset: target dir + installed?',\r\n ' preset install [--force] install the bundled preset (never overwrites unless --force)',\r\n ].join('\\n');\r\n}\r\n\r\nfunction readStdinText(): string {\r\n try {\r\n return fs.readFileSync(0, 'utf8').trim();\r\n } catch {\r\n return '';\r\n }\r\n}\r\n\r\nfunction flag(argv: string[], name: string): string | undefined {\r\n const i = argv.indexOf(name);\r\n return i > -1 ? argv[i + 1] : undefined;\r\n}\r\n\r\nexport async function main(argv: string[]): Promise<number> {\r\n const [cmd, sub, ...rest] = argv;\r\n if (!cmd || cmd === 'help' || cmd === '--help') {\r\n console.log(usage());\r\n return 0;\r\n }\r\n const paths = initWorkspace();\r\n const guard = createPathGuard(paths.dataDir);\r\n const policy = loadPolicy(guard, paths.configDir, paths.settingsDir);\r\n const seedsFile = seedsFilePath(paths.dataDir);\r\n const ledgerFile = ledgerFilePath(paths.dataDir);\r\n const decisionLog = path.join(paths.logsDir, 'heartbeat.jsonl');\r\n\r\n switch (cmd) {\r\n case 'status': {\r\n console.log(JSON.stringify({\r\n dataDir: paths.dataDir,\r\n heartbeatIntervalMin: policy.heartbeat.intervalMin,\r\n maxDailySend: policy.gate.maxDailySend,\r\n seedsMaxActive: policy.seeds.maxActive,\r\n psyEnabled: policy.profile.psyEnabled,\r\n }, null, 2));\r\n return 0;\r\n }\r\n\r\n case 'seeds': {\r\n switch (sub) {\r\n case 'add': {\r\n let text = rest[0]?.trim() ?? '';\r\n if (text === '-') text = readStdinText();\r\n if (!text) {\r\n console.error('usage: seeds add <text|-> [--tag t] [--source s] [--topic x] [--confidence n]');\r\n return 1;\r\n }\r\n const result = addSeed(guard, seedsFile, policy, {\r\n text,\r\n tag: flag(rest, '--tag') as never,\r\n source: flag(rest, '--source') as never,\r\n topic: flag(rest, '--topic'),\r\n confidence: flag(rest, '--confidence') ? Number(flag(rest, '--confidence')) : undefined,\r\n });\r\n if (result.kind === 'duplicate') {\r\n console.log(`DUPLICATE: active seed ${result.seed.id} has the same text`);\r\n return 0;\r\n }\r\n console.log(`${result.kind.toUpperCase()} ${result.seed.id}` +\r\n ` (${activeSeeds(loadPool(guard, seedsFile)).length}/${policy.seeds.maxActive})` +\r\n (result.evicted ? ` [evicted ${result.evicted.id}: ${result.evicted.retireReason}]` : ''));\r\n return 0;\r\n }\r\n case 'list': {\r\n const db = loadPool(guard, seedsFile);\r\n const items = rest.includes('--archived') ? archivedSeeds(db) : activeSeeds(db);\r\n for (const s of items) {\r\n const ageDays = Math.floor((Date.now() - Date.parse(s.bornAt)) / 86_400_000);\r\n console.log(`${s.id} [${s.tag}/${s.source}] d${ageDays} used:${s.used}` +\r\n `${s.protected ? ' *' : ''} ${s.text.slice(0, 60)}`);\r\n }\r\n if (items.length === 0) console.log('(empty)');\r\n return 0;\r\n }\r\n case 'surface': {\r\n const s = surfaceSeed(guard, seedsFile, policy, rest[0] ?? '');\r\n if (!s) {\r\n console.log('NOT_FOUND');\r\n return 1;\r\n }\r\n console.log(`SURFACED ${s.id} used:${s.used}${s.status === 'archived' ? ' -> archived (consumed)' : ''}`);\r\n return 0;\r\n }\r\n case 'archive': {\r\n const s = archiveSeedById(guard, seedsFile, rest[0] ?? '');\r\n if (!s) {\r\n console.log('NOT_FOUND');\r\n return 1;\r\n }\r\n console.log(`ARCHIVED ${s.id}`);\r\n return 0;\r\n }\r\n case 'gc': {\r\n const report = gcPool(guard, seedsFile, policy);\r\n console.log(`GC consumed:${report.consumed} expired:${report.expired} cold_bench:${report.coldBench}` +\r\n ` -> active ${report.activeAfter}/${policy.seeds.maxActive}`);\r\n return 0;\r\n }\r\n case 'stats': {\r\n const db = loadPool(guard, seedsFile);\r\n console.log(JSON.stringify({\r\n active: activeSeeds(db).length,\r\n archived: archivedSeeds(db).length,\r\n cap: policy.seeds.maxActive,\r\n seq: db.seq,\r\n }, null, 2));\r\n return 0;\r\n }\r\n default:\r\n console.error(`unknown seeds subcommand: ${sub}`);\r\n return 1;\r\n }\r\n }\r\n\r\n case 'ledger': {\r\n switch (sub) {\r\n case 'add': {\r\n let text = rest.join(' ').trim();\r\n if (text === '-') text = readStdinText();\r\n if (!text) {\r\n console.error('usage: ledger add <text|->');\r\n return 1;\r\n }\r\n const e = appendEntry(guard, ledgerFile, text);\r\n console.log(`OPEN #${e.id} ${e.text.slice(0, 60)}`);\r\n return 0;\r\n }\r\n case 'list': {\r\n const { entries } = readLedger(guard, ledgerFile);\r\n const items = rest.includes('--pending') ? scanPending(guard, ledgerFile) : entries;\r\n for (const e of items) console.log(`${e.status === 'open' ? ' ' : 'x'} #${e.id} ${e.date} ${e.text.slice(0, 60)}`);\r\n if (items.length === 0) console.log('(empty)');\r\n return 0;\r\n }\r\n case 'done': {\r\n const key = rest.join(' ').trim();\r\n if (!key) {\r\n console.error('usage: ledger done <id|substring>');\r\n return 1;\r\n }\r\n const e = markDone(guard, ledgerFile, key);\r\n if (!e) {\r\n console.log('NOT_FOUND');\r\n return 1;\r\n }\r\n console.log(`DONE #${e.id}`);\r\n return 0;\r\n }\r\n case 'open': {\r\n const f = ledgerFile;\r\n if (!fs.existsSync(f)) {\r\n console.log(`(ledger will be created at ${f})`);\r\n }\r\n spawn('cmd', ['/c', 'start', '', f], { detached: true, stdio: 'ignore' }).unref();\r\n console.log(`opened ${f}`);\r\n return 0;\r\n }\r\n default:\r\n console.error(`unknown ledger subcommand: ${sub}`);\r\n return 1;\r\n }\r\n }\r\n\r\n case 'logs': {\r\n if (sub !== 'cleanup') {\r\n console.error('usage: logs cleanup [--dry-run]');\r\n return 1;\r\n }\r\n const dry = rest.includes('--dry-run');\r\n const envPulse = path.join(paths.logsDir, 'envpulse.jsonl');\r\n const cut1 = policy.retention.envPulseHours * 3600_000;\r\n const cut2 = policy.retention.decisionLogDays * 86_400_000;\r\n if (dry) {\r\n console.log(`(dry-run) would prune ${envPulse} to ${policy.retention.envPulseHours}h` +\r\n ` and ${decisionLog} to ${policy.retention.decisionLogDays}d`);\r\n return 0;\r\n }\r\n const a = pruneAuditFile(envPulse, cut1);\r\n const b = pruneAuditFile(decisionLog, cut2);\r\n appendAuditLine(decisionLog, { event: 'retention', pruned_envpulse: a, pruned_decision: b });\r\n console.log(`PRUNED envpulse:${a} decision:${b}`);\r\n return 0;\r\n }\r\n\r\n case 'browse': {\r\n switch (sub) {\r\n case 'status': {\r\n const st = browseStatus(guard, paths);\r\n const interests = loadInterests(paths);\r\n console.log(JSON.stringify({\r\n watchTargets: loadWatchlist(paths).targets?.length ?? 0,\r\n lastCheckAt: st.last_check_at ? new Date(st.last_check_at).toISOString() : null,\r\n lastWanderAt: st.wander.last_wander_at ? new Date(st.wander.last_wander_at).toISOString() : null,\r\n focusCount: st.wander.focusCount,\r\n interestCount: interests.interests?.length ?? 0,\r\n }, null, 2));\r\n return 0;\r\n }\r\n case 'dry': {\r\n const forced = new Date();\r\n forced.setHours(12, 0, 0, 0);\r\n const advice = adviseWander(guard, paths, policy, forced);\r\n console.log(JSON.stringify(advice, null, 2));\r\n return 0;\r\n }\r\n case 'watch': {\r\n const report = await checkWatchlist(guard, paths, { throttleOk: true });\r\n console.log(JSON.stringify({ checked: report.checked, updates: report.items.length, errors: report.errors }, null, 2));\r\n for (const item of report.items) console.log(`NEWS: ${item.text}`);\r\n return 0;\r\n }\r\n case 'done': {\r\n const focus = rest.join(' ').trim();\r\n if (!focus) {\r\n console.error('usage: browse done <focus>');\r\n return 1;\r\n }\r\n const r = completeWander(guard, paths, focus);\r\n console.log(JSON.stringify(r));\r\n return 0;\r\n }\r\n default:\r\n console.error(`unknown browse subcommand: ${sub}`);\r\n return 1;\r\n }\r\n }\r\n\r\n case 'notify': {\r\n switch (sub) {\r\n case 'check':\r\n console.log(ensureRegistered(paths) ? 'REGISTERED: yes' : 'REGISTERED: no');\r\n return 0;\r\n case 'register':\r\n ensureRegistered(paths);\r\n console.log('register attempted');\r\n return 0;\r\n case 'send':\r\n console.log(sendNewMessageHint(paths) ? 'SENT' : 'FAILED');\r\n return 0;\r\n default:\r\n console.error('usage: notify check|register|send');\r\n return 1;\r\n }\r\n }\r\n\r\n case 'profile': {\r\n const doc = loadProfile(guard, profileFilePath(paths.dataDir));\r\n const all = rest.includes('--all');\r\n switch (sub) {\r\n case 'list': {\r\n let n = 0;\r\n for (const p of ['interest', 'projects', 'comm', 'psy'] as const) {\r\n for (const e of doc.partitions[p]!.entries) {\r\n if (!all && e.validTo !== null) continue;\r\n n += 1;\r\n console.log(`${e.id} [${e.partition}/${e.topic}/${e.subTopic}] ${e.temporal}` +\r\n ` conf=${e.confidence.toFixed(2)}${e.lowActivity ? ' 久未验证' : ''}${e.validTo ? ' [失效]' : ''}: ${e.content.slice(0, 60)}`);\r\n }\r\n }\r\n if (n === 0) console.log('(empty)');\r\n return 0;\r\n }\r\n case 'export': {\r\n const lines = [`# 画像导出 ${new Date().toISOString()}`, ''];\r\n for (const p of ['interest', 'projects', 'comm', 'psy'] as const) {\r\n lines.push(`## ${p}`);\r\n for (const e of doc.partitions[p]!.entries) {\r\n if (e.validTo !== null) continue;\r\n lines.push(`- [${e.topic}/${e.subTopic}] ${e.content} (conf ${e.confidence.toFixed(2)}, ${e.temporal})`);\r\n }\r\n }\r\n const out = path.join(paths.exportsDir, `profile-export-${Date.now()}.md`);\r\n writeText(guard, out, lines.join('\\n') + '\\n');\r\n console.log(`EXPORTED: ${out}`);\r\n return 0;\r\n }\r\n case 'verify': {\r\n const r = verifyProfile(guard, paths.dataDir);\r\n console.log(JSON.stringify(r, null, 2));\r\n return r.ok ? 0 : 1;\r\n }\r\n case 'rebuild': {\r\n const r = rebuildProfile(guard, paths.dataDir, { check: rest.includes('--check') });\r\n console.log(JSON.stringify(r, null, 2));\r\n return r.ok ? 0 : 1;\r\n }\r\n case 'wipe': {\r\n if (!rest.includes('--yes')) {\r\n console.log('REFUSED: add --yes to wipe profile data (profile.json/inbox/journal)');\r\n return 1;\r\n }\r\n for (const f of ['profile.json', 'profile_inbox.jsonl', 'profile_journal.jsonl']) {\r\n const abs = guard.assert(path.join(paths.dataDir, f));\r\n if (fs.existsSync(abs)) fs.rmSync(abs, { force: true });\r\n }\r\n console.log('WIPED (settings preserved; use burn for full shredding)');\r\n return 0;\r\n }\r\n default:\r\n console.error(`unknown profile subcommand: ${sub}`);\r\n return 1;\r\n }\r\n }\r\n\r\n case 'burn': {\r\n const yes = rest.includes('--yes');\r\n const all = rest.includes('--all');\r\n const plan = planBurn(guard, paths, all);\r\n console.log('预演(不会执行):' );\r\n for (const p of plan) console.log(` [${p.exists ? '存在' : '无 '}] ${p.target.file ?? p.target.dir} ${p.target.note}`);\r\n if (!yes) {\r\n console.log('\\n此操作会让心跳 agent 失忆。确认执行请加 --yes(' + (all ? '含 --all 连用户设定' : '用户设定保留') + ')');\r\n return 0;\r\n }\r\n const result = executeBurn(guard, paths, { all });\r\n console.log(`BURNED: ${result.burned.length} 项;MISSING: ${result.missing.length} 项`);\r\n return 0;\r\n }\r\n\r\n case 'sessions': {\r\n // Read-only enumeration of the host's persisted sessions (ids from the\r\n // on-disk store; titles live server-side and are not listed here).\r\n const root = path.join(os.homedir(), '.dsh', 'sessions');\r\n let found = 0;\r\n if (fs.existsSync(root)) {\r\n let own: string | null = null;\r\n try {\r\n own = (JSON.parse(loadEncryptedText(guard, path.join(paths.dataDir, 'gate.json')) ?? '{}') as { sessionId?: string }).sessionId ?? null;\r\n } catch { /* gate.json absent or unreadable */ }\r\n for (const slug of fs.readdirSync(root)) {\r\n for (const id of fs.readdirSync(path.join(root, slug))) {\r\n found += 1;\r\n const mark = id === own ? ' ← 心跳正身' : '';\r\n console.log(`${id} [${slug}]${mark}`);\r\n }\r\n }\r\n }\r\n if (found === 0) console.log('(no persisted sessions found)');\r\n return 0;\r\n }\r\n\r\n case 'bind': {\r\n const { loadBindings, addBinding, removeBinding, bindingsFilePath } = await import('../core/bindings.js');\r\n switch (sub) {\r\n case 'list': {\r\n const data = loadBindings(guard, paths.settingsDir);\r\n let own: string | null = null;\r\n try {\r\n own = (JSON.parse(loadEncryptedText(guard, path.join(paths.dataDir, 'gate.json')) ?? '{}') as { sessionId?: string }).sessionId ?? null;\r\n } catch { /* absent */ }\r\n if (own) console.log(`心跳正身: ${own}(决策轮次发生地;bind remove 它 = 重置正身)`);\r\n for (const b of data.bindings) {\r\n console.log(`${b.sessionId} deliver:${b.deliver ? '√' : '×'} observe:${b.observe ? '√' : '×'}`);\r\n }\r\n if (data.bindings.length === 0 && !own) console.log('(no bindings — expressions stay in the dedicated heartbeat session)');\r\n return 0;\r\n }\r\n case 'add': {\r\n const id = rest[0];\r\n if (!id || !id.startsWith('session-')) {\r\n console.error('usage: bind add <sessionId> [--observe] [--no-deliver] (see: sessions list)');\r\n return 1;\r\n }\r\n const observe = rest.includes('--observe') || rest.includes('--observe-only');\r\n const deliver = !rest.includes('--no-deliver') && !rest.includes('--observe-only');\r\n const b = addBinding(guard, paths.settingsDir, id, { deliver, observe });\r\n console.log(`BOUND ${b.sessionId} deliver:${b.deliver} observe:${b.observe}`);\r\n return 0;\r\n }\r\n case 'remove': {\r\n const id = rest[0];\r\n if (!id) {\r\n console.error('usage: bind remove <sessionId>');\r\n return 1;\r\n }\r\n console.log(removeBinding(guard, paths.settingsDir, id) ? `UNBOUND ${id}` : 'NOT_FOUND');\r\n // Unbinding the HOME session resets it: the next beat creates a\r\n // fresh dedicated session (the old one goes quiet after restart).\r\n try {\r\n const state = JSON.parse(loadEncryptedText(guard, path.join(paths.dataDir, 'gate.json')) ?? '{}') as { sessionId?: string };\r\n if (state.sessionId === id) {\r\n fs.rmSync(guard.assert(path.join(paths.dataDir, 'gate.json')), { force: true });\r\n console.log('注意:这是心跳正身会话。已重置——下次心跳将创建新的正身会话(旧会话不再有心跳)');\r\n appendAuditLine(paths.logsDir + '/heartbeat.jsonl', { event: 'home_reset', oldSessionId: id });\r\n }\r\n } catch { /* gate.json absent: nothing to reset */ }\r\n return 0;\r\n }\r\n default:\r\n console.error('usage: bind list | add <sessionId> | remove <sessionId>');\r\n return 1;\r\n }\r\n }\r\n\r\n case 'preset': {\r\n const id = flag(argv, '--id') ?? BUNDLED_PRESET_ID;\r\n // The plugin installs into the roster's own user root; the CLI has no\r\n // roster, so it reports/uses the conventional one ($DSH_HOME or ~/.dsh).\r\n const root = conventionalUserPresetRoot();\r\n const status = presetStatus(import.meta.url, id, root);\r\n if (sub === undefined || sub === 'status') {\r\n console.log(`preset id : ${status.id}`);\r\n console.log(`installed : ${status.installed ? 'yes' : 'no'}`);\r\n console.log(`target dir : ${status.dir}`);\r\n console.log(`bundled at : ${status.bundledDir ?? '(not found next to the plugin)'}`);\r\n if (status.installed) {\r\n console.log(\r\n `composition : ${status.compositionMatches ? 'matches the bundled template' : 'differs from the bundled template (hand-edited, or an older version)'}`,\r\n );\r\n }\r\n if (!status.installed) {\r\n console.log('hint: the plugin installs this itself on the next DSH start (installPreset=true, default);');\r\n console.log(' or run `preset install` now.');\r\n }\r\n return status.installed ? 0 : 1;\r\n }\r\n if (sub === 'install') {\r\n const result = installBundledPreset({\r\n moduleUrl: import.meta.url,\r\n id,\r\n root,\r\n force: rest.includes('--force'),\r\n });\r\n console.log(describeInstall(result));\r\n return result.action === 'error' ? 1 : 0;\r\n }\r\n console.error('usage: preset status | install [--force] [--id <presetId>]');\r\n return 1;\r\n }\r\n\r\n default:\r\n console.error(`unknown command: ${cmd}`);\r\n console.log(usage());\r\n return 1;\r\n }\r\n}\r\n\r\nif (process.argv[1] && import.meta.url === new URL(`file:///${process.argv[1].replace(/\\\\/g, '/')}`).href) {\r\n // Direct execution guard; the CLI is also importable for tests.\r\n void main(process.argv.slice(2)).then((code) => { process.exitCode = code; });\r\n}\r\n","// Burn list - SINGLE SOURCE OF TRUTH (design doc §10.10; v1 shipped two\n// hardcoded lists and one drifted). burn and uninstall --purge both consume\n// this list. Settings (data/settings/) are NOT burned by default: losing\n// memory != losing the charter/gates the user configured (--all overrides).\n\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport type { PathGuard } from '../core/path-guard.js';\nimport type { WorkspacePaths } from '../core/paths.js';\nimport { shredFileSync } from '../core/atomic-fs.js';\nimport { appendAuditLine } from '../core/audit-log.js';\n\nexport interface BurnTarget {\n /** Relative to dataDir. Files are shredded (overwrite x3) then deleted. */\n file?: string;\n /** Directories are removed recursively (no shred - content is files). */\n dir?: string;\n note: string;\n}\n\nexport const BURN_LIST: BurnTarget[] = [\n { file: 'profile.json', note: '画像物化视图' },\n { file: 'profile_inbox.jsonl', note: '观察收件箱' },\n { file: 'profile_journal.jsonl', note: '画像操作流水' },\n { file: 'profile_rhythm.json', note: '作息聚合(纯统计)' },\n { file: 'screen.json', note: '屏幕快照(加密)' },\n { file: 'screen.jpg', note: '截图(加密)' },\n { file: 'sent.json', note: '表达记录(加密)' },\n { file: 'browse.json', note: '浏览流状态(加密)' },\n { file: 'seeds.jsonl', note: '素材池(加密)' },\n { file: 'ledger.md', note: '账本(明文,人可读是设计目标)' },\n { file: 'envpulse.json', note: '环境温度计快照' },\n { file: 'gate.json', note: '闸门运行时计数' },\n { dir: 'tmp', note: '解锁临时文件(崩溃残留的解密明文是最该烧的东西)' },\n { dir: 'logs', note: '审计与决策日志' },\n { dir: 'exports', note: '导出产物' },\n];\n\nconst SETTINGS_DIR = 'settings'; // excluded unless --all\n\nexport interface BurnPlanItem {\n target: BurnTarget;\n exists: boolean;\n}\n\n/** Preview: what exists, what would be removed. No writes. */\nexport function planBurn(guard: PathGuard, paths: WorkspacePaths, all = false): BurnPlanItem[] {\n const plan: BurnPlanItem[] = [];\n for (const t of BURN_LIST) {\n const rel = t.file ?? t.dir!;\n if (!all && rel === SETTINGS_DIR) continue;\n const abs = path.join(paths.dataDir, rel);\n let exists = false;\n try {\n exists = fs.existsSync(guard.assert(abs));\n } catch {\n exists = false;\n }\n plan.push({ target: t, exists });\n }\n if (all) {\n plan.push({ target: { dir: SETTINGS_DIR, note: '用户设定(隐私宪章/闸门参数)——仅 --all 连带' }, exists: fs.existsSync(paths.settingsDir) });\n }\n return plan;\n}\n\n/**\n * Execute the burn: overwrite x3 + delete files, remove dirs. Irreversible.\n * Returns per-target results and writes a BURN_EVENT into the (recreated)\n * journal afterwards - the only trace, on purpose (transparency).\n */\nexport function executeBurn(\n guard: PathGuard,\n paths: WorkspacePaths,\n opts: { all?: boolean; shredPasses?: number } = {},\n): { burned: string[]; missing: string[] } {\n const burned: string[] = [];\n const missing: string[] = [];\n const passes = opts.shredPasses ?? 3;\n for (const t of BURN_LIST) {\n const rel = t.file ?? t.dir!;\n const abs = path.join(paths.dataDir, rel);\n let absCanon: string;\n try {\n absCanon = guard.assert(abs);\n } catch {\n missing.push(rel);\n continue;\n }\n if (t.file) {\n if (fs.existsSync(absCanon)) {\n shredFileSync(absCanon, passes);\n burned.push(rel);\n } else {\n missing.push(rel);\n }\n } else if (fs.existsSync(absCanon)) {\n fs.rmSync(absCanon, { recursive: true, force: true });\n burned.push(rel);\n } else {\n missing.push(rel);\n }\n }\n if (opts.all) {\n fs.rmSync(paths.settingsDir, { recursive: true, force: true });\n burned.push(SETTINGS_DIR);\n }\n // BURN_EVENT: recreate the journal; data dir is now re-initializable.\n appendAuditLine(guard.assert(path.join(paths.dataDir, 'profile_journal.jsonl')), {\n event: 'BURN_EVENT',\n burned: burned.length,\n missing: missing.length,\n settingsPreserved: !opts.all,\n });\n return { burned, missing };\n}\n"],"mappings":"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","names":["fs","path","fs","path"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import {
|
|
2
|
+
dedupeItems,
|
|
3
|
+
inboxAppend,
|
|
4
|
+
inboxClear,
|
|
5
|
+
inboxCount,
|
|
6
|
+
inboxDrain,
|
|
7
|
+
inboxFileExists,
|
|
8
|
+
inboxFilePath,
|
|
9
|
+
inboxHealthCheck
|
|
10
|
+
} from "./chunk-4UE74TUB.js";
|
|
11
|
+
import "./chunk-LLD7LUNN.js";
|
|
12
|
+
export {
|
|
13
|
+
dedupeItems,
|
|
14
|
+
inboxAppend,
|
|
15
|
+
inboxClear,
|
|
16
|
+
inboxCount,
|
|
17
|
+
inboxDrain,
|
|
18
|
+
inboxFileExists,
|
|
19
|
+
inboxFilePath,
|
|
20
|
+
inboxHealthCheck
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=inbox-MMLHISQV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|