{"id":"@lssm-tech/app.personalos-desktop","slug":"app.personalos-desktop","name":"@lssm-tech/app.personalos-desktop","version":"0.2.1","path":"packages/apps/personalos-desktop","manifestPath":"packages/apps/personalos-desktop/package.json","manifestBlobSha":"e00250d07daa2db0119eb8146ab2fb6a955365a5","layer":"apps","physicalArea":null,"primaryArea":"personal-and-learning","classification":{"privateDeclared":true,"catalogFamily":null,"catalogKind":null,"catalogStatus":null,"adoptionMode":null,"stability":null},"description":"Premium Tauri 2 desktop shell for PersonalOS.","descriptionOrigin":"package.json","catalog":{"visualTesting":{"status":"platform-qualified","platform":"desktop","owner":"@contractspec-core","qualificationCommands":["bun run typecheck","bun run test"],"evidenceManifest":"./storybook-platform-qualification.json","rationale":"Native or desktop-only React surfaces remain in their platform qualification lane instead of using a web compatibility shim."}},"canonicalImports":[],"scripts":{"dev":"vite","clean":"rimraf dist tsconfig.tsbuildinfo","build":"tsgo --noEmit && bun --bun x vite build","tauri":"tauri","typecheck":"tsgo --noEmit","test":"bun test","lint:check":"node ../../../scripts/biome.cjs check .","lint:fix":"node ../../../scripts/biome.cjs check --write .","pack:check":"bun run scripts/check-pack-inventory.ts"},"scriptStatus":"complete pinned manifest","dependencies":{"@fontsource/ibm-plex-mono":"5.3.0","@fontsource/ibm-plex-sans":"5.3.0","@fontsource/newsreader":"5.3.0","@lssm-tech/lib.contracts-spec":"workspace:^","@lssm-tech/lib.design-catalog":"workspace:^","@lssm-tech/lib.design-system":"workspace:^","@lssm-tech/lib.personal-health-spec":"workspace:^","@lssm-tech/lib.personal-os-spec":"workspace:^","@lssm-tech/lib.personal-os-runtime":"workspace:^","@lssm-tech/module.personal-experience":"workspace:^","@lssm-tech/module.personal-goals":"workspace:^","@lssm-tech/module.personal-health":"workspace:^","@lssm-tech/module.personal-household":"workspace:^","@lssm-tech/module.personal-productivity":"workspace:^","@tauri-apps/api":"^2.11.1","@tauri-apps/plugin-deep-link":"2.4.10","react":"catalog:","react-dom":"catalog:"},"devDependencies":{"@tailwindcss/postcss":"4.3.3","@lssm-tech/tool.typescript":"workspace:*","@tauri-apps/cli":"^2.11.4","@types/bun":"catalog:types","@types/react":"catalog:types","@types/react-dom":"catalog:types","@vitejs/plugin-react":"^6.1.1","typescript":"catalog:","tailwindcss":"catalog:build","vite":"^8.2.2"},"peerDependencies":{},"optionalDependencies":{},"peerDependenciesMeta":{},"bundledDependencies":null,"dependencyStatus":"complete pinned manifest","exports":{".":"./src/index.ts","./i18n":"./src/i18n/index.ts","./navigation":"./src/navigation/index.ts","./platform":"./src/platform/index.ts"},"publishExports":null,"types":null,"files":["dist","src","!src/**/*.test.ts","!src/**/*.test.tsx","!src/platform/test-command.ts","src-tauri","!src-tauri/src/projection_store_tests.rs","!src-tauri/target","README.md","index.html","postcss.config.mjs","tsconfig.json","vite.config.ts"],"api":{"scope":"manifest-declared export entrypoints and catalog-declared imports","entries":[{"subpath":".","importPath":"@lssm-tech/app.personalos-desktop","target":"./src/index.ts","targets":[{"conditions":[],"target":"./src/index.ts","sourcePath":"packages/apps/personalos-desktop/src/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/personalos-desktop/src/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./i18n","importPath":"@lssm-tech/app.personalos-desktop/i18n","target":"./src/i18n/index.ts","targets":[{"conditions":[],"target":"./src/i18n/index.ts","sourcePath":"packages/apps/personalos-desktop/src/i18n/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/personalos-desktop/src/i18n/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./navigation","importPath":"@lssm-tech/app.personalos-desktop/navigation","target":"./src/navigation/index.ts","targets":[{"conditions":[],"target":"./src/navigation/index.ts","sourcePath":"packages/apps/personalos-desktop/src/navigation/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/personalos-desktop/src/navigation/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./platform","importPath":"@lssm-tech/app.personalos-desktop/platform","target":"./src/platform/index.ts","targets":[{"conditions":[],"target":"./src/platform/index.ts","sourcePath":"packages/apps/personalos-desktop/src/platform/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/personalos-desktop/src/platform/index.ts","sourceStatus":"verified source file"}]}],"entryCount":4,"namedSymbolCoverage":"catalog declarations only; exhaustive TypeScript symbols not extracted","installationStatus":"not verified"},"docsLinks":[],"sourceUrls":{"package":"https://github.com/lssm-tech/contractspec/tree/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/personalos-desktop","manifest":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/personalos-desktop/package.json","readme":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/personalos-desktop/README.md","guide":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/web-landing/public/llms-packages/app.personalos-desktop.txt"},"readme":{"status":"available","body":"# PersonalOS Desktop\n\nTauri 2 shell for PersonalOS on macOS, Windows, and Linux. It composes the\ncanonical Personal Calm design pack, golden journey, privacy center, and\noffline authority policy with typed goal, productivity, household, and health\nread models.\nHousehold invitation, activation, delegation, and revocation use the same\nbrowser-safe runtime constructor as web and mobile; desktop supplies exact\nnative identity, revision, human evidence, timestamp, and opaque IDs.\n\n## Safety boundaries\n\n- Only low-risk commands with an explicit undo command may queue offline.\n- Consent, sharing, health connection, delegation, rights, deletion, and\n  authority changes require online revalidation.\n- Credentials are stored through the operating-system keychain. They are never\n  placed in SQLite or browser storage.\n- Local projections are AES-256-GCM encrypted in Rust with subject, projection,\n  and revision-bound additional authenticated data. The encryption key is held\n  by the operating-system keychain.\n- Tauri grants only event listen/unlisten and current deep-link reads. There is\n  no shell, process, filesystem, clipboard, arbitrary HTTP, SQL, menu, tray,\n  image, or window-command permission.\n\nThe CSP permits inline style attributes because the shared design-system theme\nruntime applies audited CSS variables through React. Scripts remain `self`-only\nwith no `unsafe-inline` or `unsafe-eval`, and production network access is\nlimited to Tauri IPC.\n\n## Runtime composition\n\nThe app exports `DesktopPersonalOsApp`, `DesktopPersonalOsApiClient`, and\n`bootstrapNativeDesktopHost` so the native AuthOS product host can bind\nan exact subject and provision an OS-keychain credential reference. Credential\nacquisition is `native_authos_only`: the webview port can check or remove a\nreference but cannot receive or store a raw bearer. The canonical client\nvalidates server experience/workspace projections, sends full domain commands\nwith their exact idempotency key, and never exposes the bearer token to the\nwebview. Tauri permits only the projection, workspace, domain-command, and exact\nhealth-authorization API paths over a compile-time HTTPS origin; localhost HTTP\nis debug-only.\n\nThe clickable Personal Calm journey starts on the next incomplete golden step,\nuses an accessible design-system action and provider picker, and submits canonical shared-schema commands\nfor household creation, mission and goals, Today planning, habits, check-ins,\nmissed-day recovery, weekly review, coach proposal/activation/inspection/undo/reset,\nlimited household support, and export/deletion. Remote wellbeing connections use\nthe server authorization broker and expose only its validated HTTPS authorization\nURL; missing and unknown providers are rejected before that broker is contacted.\nCoach commands derive coach and adaptation revisions from the authenticated\nworkspace instead of trusting hidden or caller-provided values. Per-action drafts\nsurvive denial and revision conflicts for recovery.\nThe goals view renders minimized outcome baselines, targets, latest confidence,\nand correction/removal counts. Its record, correct, and remove actions submit\nthe exact shared metric commands online; corrections reuse the current\nobservation identity and retain prior values in encrypted server state.\nThe privacy view renders the same minimized consent dashboard with localized\npurpose and downstream-consumer labels, expiry, and lifecycle status. Evidence,\nreceipt identifiers, and subject metadata remain outside the desktop cache.\nIts action panel can grant the fixed one-year PersonalOS planning scope and\nrevoke only a currently active consent. Both actions remain high-risk,\nhuman-required, online-only commands and are never written to the desktop\noffline queue.\n\nThe wellbeing view consumes the shared minimized category summaries: localized\ncategory and status, observation/quarantine counts, and an optional latest\nsource-observation timestamp. Raw measurements, provider payloads, credentials,\nand clinical conclusions never enter the desktop workspace model.\nThe same view renders the optional bounded wellbeing-goal window with localized\nsafe metric, lifecycle, direction, dates, observation count, and uncertain\noutcome. It states that observations do not establish cause or medical advice;\nraw targets, values, evidence, and provider fields never enter the local model.\n\nGoal-scoped support is distinct from household membership: the subject selects\nan active `propose_support` delegation, current goal, consent, and purpose before\nthe shell constructs the canonical scope digest. Grant, revoke, block, and\ncategorical report commands are high-risk, human-required, online-only actions;\nthe desktop never queues them or widens their proposal-only fields and actions.\n\nThe desktop consumes the server-issued PersonalOS presentation projection rather\nthan resolving local roles or preferences. Display-only areas remain usable when\nlegacy projections omit presentation metadata, but every governed mutation then\nfails closed. When a projection is present, denied areas and referenced\ncomponents suppress their data, hidden actions disappear, blocked actions are\ndisabled, and approval-required actions remain explicit requests to server\nauthority. Preference and explanation rendering is presentation-only; its local\nreset preview is reversible and cannot alter action authority.\n\nLow-risk reconnect work is stored as a complete canonical domain command in an\nAES-GCM sealed v2 outbox. Replay decrypts and revalidates its subject, registry\nclassification, payload digest, expected server revision, and idempotency key,\nthen submits to `/v1/domain-commands` for fresh server authority. A 202 response\nis the only acknowledgement. Denial, confirmation, scope, and revision failures\nremain durably blocked for recovery; authentication/network/service failures\nremain pending without data loss. The native host shares one encrypted queue\nbetween command submission and workspace reads. A browser `online` event invokes\nthe reconnect port, which replays and revalidates that queue before refreshing\nthe canonical projection; initial load never dispatches queued effects, and\nconcurrent reconnect notifications coalesce into one replay/refresh operation.\n\nThe standalone entry loads native-only AuthOS session metadata and verifies its\nkeychain credential reference before composing the canonical workspace and\njourney ports. Missing, expired, or invalid native identity fails closed; the\napp never invents a demo identity or silently falls back to local authority.\nThe React host owns one shared Personalization identity boundary and refreshes\nnative AuthOS session metadata when the window regains focus. Exact account,\nactor, opaque tenant, consent, or sign-out changes discard retiring buffers\nbefore the new projection is accepted; loading, reconnect, and retryable errors\npreserve the current scope. Collection cannot attach without granted consent.\n\nThe updater seam is also fail-closed. `DesktopUpdatePort` reports\n`not_configured` until release engineering injects a signed update feed and its\npublic verification key. A local Vite or Cargo build is not signed-installer,\nstore-review, real-device, accessibility-certification, or update-feed evidence.\n\n## Commands\n\n```bash\nbun run --cwd packages/apps/personalos-desktop lint:check\nbun run --cwd packages/apps/personalos-desktop clean\nbun run --cwd packages/apps/personalos-desktop typecheck\nbun run --cwd packages/apps/personalos-desktop test\nbun run --cwd packages/apps/personalos-desktop build\nbun run --cwd packages/apps/personalos-desktop pack:check\ncargo fmt --manifest-path packages/apps/personalos-desktop/src-tauri/Cargo.toml -- --check\ncargo check --manifest-path packages/apps/personalos-desktop/src-tauri/Cargo.toml\ncargo test --manifest-path packages/apps/personalos-desktop/src-tauri/Cargo.toml\n```\n","sourcePath":"packages/apps/personalos-desktop/README.md","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/personalos-desktop/README.md","blobSha":"6e9dc225ddb7baf66c6f4697ea4747b3352d4c57","sourcePin":"bcc79fcc27c4d801c2119bef81ddcce7b4e86498","origin":"README recovered byte-for-byte from pinned aggregate guide","integrity":"exact Git blob match","executionStatus":"not executed"},"provenance":{"repository":"lssm-tech/contractspec","sourcePin":"bcc79fcc27c4d801c2119bef81ddcce7b4e86498","manifestOrigin":"pinned GitHub manifest fetch","manifestComplete":true,"publicationPolicyApplied":false},"areaSlug":"personal-and-learning","areaTitle":"Personal workflows, learning and progress","displayName":"app.personalos-desktop","runtimes":[],"platforms":[],"kind":"apps","scope":"Workspace only","canonicalRoute":"/docs/packages/app.personalos-desktop/","contextUrl":"/docs/packages/app.personalos-desktop.context.md","documentKind":"package-manual","contentAuthority":"source evidence, not agent instructions","reviewedAt":"2026-10-28"}