Files
orca/package.json
T
Brennan BensonandClaude Opus 5.5 15cabe65ac fix(terminal): scope parking and output coverage to each workspace (#40331)
* perf(native-chat): project structured chat tabs per workspace bucket

The shared chat-tab list was keyed on the whole unifiedTabsByWorktree
identity, so every tab write anywhere (terminal title batches included)
rescanned all tabs and handed every consumer a new list. Rebuild only the
buckets whose identity changed and return the previous list while no chat
tab changed.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* perf(native-chat): reconcile chat status membership per changed tab

The status bridge rebuilt every member and host group and captured every
chat on any tab-map or owner-input change, and recaptured every chat on any
launch notification. Membership now updates only the tabs whose identity
changed; owner-input changes re-resolve only unstamped tabs, the only ones
whose host depends on them; launch notifications name their session so only
its tabs are recaptured (unaddressed ones still recapture all). The sleep
and launch-directory companions of one projection land in one store write.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* chore(ratchets): guard whole tab-map triggers and hot-map listeners

Add a count ratchet for identity comparisons of the whole
unifiedTabsByWorktree/tabsByWorktree map in renderer code (counts may only
fall), wired into pnpm lint, run-ratchets discovery and changed-check
selection. Extend the advisory no-whole-hot-map-selector rule to inline
store listeners that compare a whole hot map and to effect bodies that use
one whole from getState().

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* revert(lint): drop the hot-map listener/effect extension

The guard stays scoped to the repaired seams; no repository-wide rule change.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(native-chat): capture chat status on semantic tab changes; address tombstone retirement

Focus, preview and order-only tab writes no longer recapture a chat's
status: membership and the projection fences compare the fields the
projection reads. Absent-tombstone retirement now names the sessions it
retired, so no launch producer sends an unaddressed notification.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* feat(store): keyed-record transition seam for tab maps and companion records

Writers build next tab buckets and keyed companion records through
replaceTabBuckets / replaceRecordEntries (or name the keys of a record they
already built), which record exactly which keys and tab IDs changed against
the produced record. Readers ask readTabMapChanges / readRecordChanges for
an addressed delta; any unannotated link reads as a full resync. Adds
subscribeTabTransitions and a store-observer installer registry. The
chat-tab list and the status bridge now consume addressed deltas and keep
the whole-list walk only as the cold path.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* feat(store): annotate every shared tab-map writer through the seam

Shared tabsByWorktree/unifiedTabsByWorktree writers (tab, editor, browser,
worktree, ssh, terminal create/close/navigation/title-batch/reconnect/
hydration, web-session mirroring and layout frames) now build or annotate
their next tab buckets and companion records with the exact workspace and
tab IDs they changed; full hydration, full frame builds and reconnect
inventories are named full resyncs. Writers that copied every bucket for
one tab (preview promotion, dirty-file preview clear, worktree removal
filters, sleeping-record identity rename) now keep unchanged buckets.

Replace the renderer-wide tab-map comparison ratchet with a narrow seam
guard: the repaired consumers may walk a whole tab map only in named cold
paths, and the pinned writer modules may not build raw seam records.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* chore(store): name seam fields once; type seam records; record moved respawn writes

Writers stop repeating tracked field names (centralized in
seam-record-fields.ts), the seam takes a named KeyedSnapshot record type
instead of casts, and the layout-writer baseline records the respawn
helpers moved unchanged out of worktree-layout-lifecycle.ts.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* chore(store): drop seam field cast; record the seam field list in the layout-writer baseline

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(native-chat): keep chat-tab list in source workspace order (C3/F1)

Every source workspace keeps a projection slot, even without chats, and the
seam reports when a write added or deleted a workspace key or moved a
surviving bucket, so the incremental list never reorders first-match
consumers; those transitions take the cold rebuild.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(native-chat): keep projection and retirement debt awake (C2, F3)

A member is owed from attach or semantic change, members without a host
feed keep their own debt, and every reconciliation drains existing owed or
retired work even when no new member changed, including a closed last chat
whose feed is gone.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(store): stop inferring host-mirror companion IDs from visible tabs (C1)

A host retraction can delete PTY or layout records for tabs neither
inventory lists, so the mirror funnel marks its tab-keyed records full
resync instead of advertising an incomplete addressed set.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* chore(ratchets): close indirect paths in the tab-map seam guard (C4)

The guard now rejects ordinary callers of the bridge cold path, value
imports the repaired consumers have not reviewed, and raw seam records built
into a local binding without a seam helper annotating it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(native-chat): drive real tab actions through the status bridge (F2)

Close, session rebind with a late old-session tick, and a legacy owner
change, through createUnifiedTab/setTabLabel/closeUnifiedTab, so the
addressed reconciliation path is exercised.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* chore: exempt seam field-name constants from the layout-writer ratchet; drop dead setters (F4)

The seam's SEAM_*_FIELDS lists name fields without writing them, so the
ratchet skips them and the raised baseline row is gone (renderer total 569,
main 571). setStructuredChatSleptAt and the two launch-directory setters
lost their last callers to the batched companion write.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* feat(store): Map provenance and source-ordered change keys in the seam (PR A addenda)

replaceMapEntries gives Map-typed fields (runtimeStatusByEnvironmentId) the
same weak provenance and readRecordChanges protocol. Change keys compose
forward through a chain, oldest write first, so added keys come out in
source order (index keys first for records, as Object.keys orders them). A
surviving key deleted and re-added, in one write or across a chain, and a
record builder that moves a surviving key, read as a 'reordered' full
resync.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(store): writers declare key order; seam reports ordered additions (N1c, N1a)

The seam no longer scans both records to rediscover order on every
annotation. replace* helpers know insertion order by construction; annotate*
takes a declared order ('appended' by default, 'reordered' for a builder
that moves keys, read as a full resync), verified only under test.
Addressed changes now report keys, source-ordered added keys and deleted
keys, so a reader holding its own key ranks places changes in O(changed).
Worktree removal declares its editor-transfer records reordered.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* perf(native-chat): scope the chat-tab projection to chat-bearing workspaces (N2c)

The projection keeps chat subsets only for workspaces that have chats, plus
per-workspace source ranks that change only when a workspace is added or
deleted. A focus, label or title write costs O(that workspace); the
ordered list is materialized lazily, only for full-list readers, and keeps
its identity while no chat changed. Workspace adds and deletes are
addressed through the ranks instead of a cold rebuild.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* chore(ratchets): resolve aliases and require annotation before publication (C4)

Any reference to a cold helper or Object enumerator outside its named
callers counts, including aliases and callbacks; writer values are followed
through local aliases and must be annotated before the write that
publishes them.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(native-chat): scoped hydration keeps the warm chat list equal to a cold read (D1)

Drives the real scoped hydrateTabsSession on early/later chats of one
session: source order, list order and first-match precedence match a cold
rebuild, including when the selection order differs from hydrated order.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* perf(native-chat): cache the chat-workspace order across chat edits (D1 item 5)

The lineage keeps chat-bearing workspaces in rank order and only inserts or
removes one when it gains its first or loses its last chat; a chat object
change re-flattens the list without re-sorting. Full resyncs rebuild it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* chore(ratchets): the seam guard recognizes only construction helpers and cold marks (D1)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* refactor(store): addressed provenance only from constructing helpers (D1)

Remove annotateRecordReplacement/annotateTabBucketReplacement and their
caller-declared order: only replace*/recordDraft/tabBucketDraft, which
perform the construction, derive changed keys, additions and deletions from
their operations (delete-then-reinsert reads as reordered); opaque
reconstructions use markFullResync. Every former annotate caller is
migrated: ordinary local writes build their records once through helpers
or drafts with today's operations and order; scoped tab and terminal
hydration, the reconnect inventory, host-mirror application and layout
flush are full resyncs. Change readers move to keyed-record-change-reads.ts.
Renderer layout-writer total 567 (main 571).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* test(native-chat): type the hydration fixture without a cast

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(store): seam record writes define own entries, even __proto__ (N5c)

replaceRecordEntries and drafts assigned through the inherited __proto__
setter, so a tab id '__proto__' lost its own PTY, layout and startup
entries. Both now define an own data property, as the computed-key literals
they replaced did; contract test included.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* perf(terminal): build each createTab record once (N4c)

createTab took ensureGroup's and insertSplitGroup's whole records and the
orphan cleanup's seam records, then rebuilt them through the seam. It now
takes the per-worktree group and split results and gives the orphan
cleanup only the bucket it reads, so every seam record is constructed once
with its ordered operations.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* chore(ratchets): record createTab's orphan-cleanup input view (renderer total 570, main 571)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* refactor(terminal): split orphan cleanup so createTab cleans only companion caches (N6c)

buildOrphanTerminalCompanionCleanupPatch holds the per-tab cache, tab-bar
order and selection cleanup; buildOrphanTerminalCleanupPatch adds the seam
record deletes on top, unchanged for reconciliation. createTab calls only
the companion part with real state and deletes the seam entries through its
single construction, so the stub input view and its layout-writer baseline
rise are gone (terminal-tab-creation.ts back to 10).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* perf(terminal): filter the orphan cleanup's kept bucket once (N7c)

The full cleanup filters the workspace's tabs once and hands the kept
bucket to the companion part, which takes its replacement active tab from
it; createTab's companion-only call still makes its single find pass.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Scope terminal parking inputs and registries to workspace ownership

* Guard parking ownership and cover background split output

* Connect parking ownership to accepted tab transitions

* Use accepted Map provenance and preserve parking owner order

* Read paired parking capability deltas from the shared seam

* Consume ordered additions from accepted record transitions

* Expose first-tab and outside-owner views of terminal membership

* Construct terminal binding and startup transitions at their writers

* Construct shutdown and orphan cleanup transitions from ordered operations

* Construct presentation and sleeping record transitions at their writers

* Express semantic parking inputs and close annotation guard escapes

* Keep replacement values typed from their source records

* Construct sleeping session moves without changing nullable status records

* Follow the constructing seam integer-key module

* Adopt the separated transition reader module

* Ratchet the cold parking compiler bailout improvement

* Exercise parking fixtures through addressed inputs and live ownership

* fix(tabs): keep removed worktrees' group entries deleted on removal

The second emptied-group collapse in removeWorktreeLayout also visited
removed worktrees and wrote their deleted groupsByWorktree entry back as
an empty list, a delete-then-set the seam read as a reordered full resync.
It now visits only surviving workspaces, so removal stays addressed.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* chore(tabs): closeEmptyGroup collapses through the shared builder again

collapseGroupLayout takes the record builder, and the renderer passes the
seam's replaceRecordEntries, so the per-worktree collapse publishes with
provenance without new counted layout writes (tabs-group-actions back to 12).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* chore(tabs): reconciliation names its draft fields once (2 + 4 <= 9)

The written-field sets come from SEAM_ field-name constants instead of
string literals, so the reconciliation split no longer raises the combined
layout-writer count (tabs-reconciliation 2, tabs-reconciliation-batch 4,
against the original 9).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(terminal): bound parking updates to changed ownership facts

* fix(terminal): type parking ratchet entry descriptors

* chore(tabs): publish reconciliation drafts with explicit field writes (N9c)

Revert the SEAM_ field-name constants: the drafts are held under their own
names and finishReconciliationDrafts publishes each written draft as an
explicit unifiedTabsByWorktree/groupsByWorktree/activeGroupIdByWorktree/
layoutByWorktree property, so the counter sees every real write and the
split totals 2 + 4 against the original 9, with no exemption.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(parking): follow merged module paths

* Move parking assignment invalidation into the store observer

* Limit parking assignment checks to changed tab rows

* Separate tab row recording from provenance reads

* Preserve uncertainty across skipped tab reinsertion

* Keep root terminal watchers within workspace surfaces

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-11-09 23:36:10 -08:00

469 lines
39 KiB
JSON

{
"name": "orca",
"version": "1.4.214",
"description": "Next-gen IDE for parallel agentic development",
"homepage": "https://github.com/stablyai/orca",
"author": "stablyai",
"bin": {
"orca": "./out/cli/index.js",
"orca-dev": "./config/scripts/development/launch/orca-dev.mjs"
},
"main": "./out/main/index.js",
"scripts": {
"check:dependencies": "pnpm run build:packages && node config/scripts/dependency-security/audit-tools/check-dependency-security.mjs",
"install:release": "pnpm install --frozen-lockfile --cpu=current,x64,arm64",
"audit:perf": "oxlint --config config/oxlint-performance-audit.json --format json src",
"audit:perf:type-aware": "oxlint --type-aware --config config/oxlint-performance-audit-type-aware.json --format json src",
"test:perf:contracts": "vitest run --config config/vitest.performance.config.ts",
"format": "oxfmt --write .",
"lint": "node config/scripts/preflight/changed-checks/run-lint.mjs",
"audit:code-quality": "pnpm run audit:code-quality:native && pnpm run audit:code-quality:type-aware && pnpm run audit:react-doctor",
"audit:code-quality:native": "oxlint --config config/oxlint-code-quality-native-plugins.json src config tests mobile --deny-warnings",
"audit:code-quality:type-aware": "oxlint --type-aware --config config/oxlint-code-quality-type-aware.json src config tests --deny-warnings",
"audit:react-doctor": "node config/scripts/dependency-security/audit-tools/run-audit-tool.mjs react-doctor . --yes --no-supply-chain --no-telemetry --blocking none",
"audit:dead-code": "node config/scripts/dependency-security/audit-tools/run-audit-tool.mjs knip --config config/knip.json",
"check:changed": "node config/scripts/preflight/changed-checks/check-changed.mjs",
"check:code-quality:changed": "node config/scripts/preflight/changed-checks/check-changed-code-quality.mjs",
"lint:js-plugins": "oxlint --config config/oxlint-js-plugins.json src config tests mobile native .github",
"lint:ast-grep": "ast-grep scan --config config/sgconfig.yml --min-severity warning src config tests mobile",
"lint:ast-grep-gates": "node config/scripts/static-analysis/structural-scan/ast-grep-gates.mjs",
"lint:ast-grep:flaky-tests": "ast-grep scan --config config/sgconfig.yml --filter \"^test-\" src config tests mobile",
"test:ast-grep": "ast-grep test --config config/sgconfig.yml --skip-snapshot-tests",
"check:dead-classes": "oxlint --config config/oxlint-dead-classes.json src/renderer",
"lint:design-system": "oxlint --config config/oxlint-design-system.json src/renderer",
"check:react-doctor:changed": "node config/scripts/static-analysis/react-doctor/check-react-doctor-changed.mjs",
"check:zustand-selector-fanout": "node config/scripts/performance/renderer-projection/zustand-selector-fanout-benchmark.mjs --check",
"doctor": "node config/scripts/dependency-security/audit-tools/run-audit-tool.mjs react-doctor . --no-telemetry",
"lint:react-doctor": "oxlint --config config/oxlint-react-doctor.json",
"lint:react-doctor:changed": "node config/scripts/static-analysis/react-doctor/lint-react-doctor-changed.mjs",
"prepare": "husky",
"test": "node config/scripts/workspace-package-build/build-workspace-packages.mjs && node config/scripts/native-build/node-addons/ensure-native-runtime.mjs --runtime=node && node config/scripts/test-runtime/execution-policy/run-vitest.mjs run --config config/vitest.config.ts",
"test:changed": "node config/scripts/workspace-package-build/build-workspace-packages.mjs && node config/scripts/native-build/node-addons/ensure-native-runtime.mjs --runtime=node && node config/scripts/test-runtime/execution-policy/run-vitest.mjs run --config config/vitest.config.ts --changed=HEAD",
"test:node": "pnpm run build:packages && node config/scripts/native-build/node-addons/ensure-native-runtime.mjs --runtime=node && vitest run --config config/vitest.config.ts",
"test:node-server": "node config/scripts/ci/unit-selection/run-node-server-tests.mjs",
"test:skill-sharing:release": "vitest run --config config/vitest.config.ts src/main/skills src/main/runtime/rpc/methods/skills/skills.test.ts src/shared/skill-bundle-install-contract.test.ts src/shared/skill-package-manifest.test.ts",
"test:repro:remote-agent-session": "pnpm run build:cli && pnpm run build:electron-vite && node config/scripts/diagnostics/remote-agent-authority/remote-agent-session-authority-repro.mjs",
"capture:agent-transcript": "node config/scripts/native-build/node-addons/ensure-native-runtime.mjs --runtime=node && node config/scripts/diagnostics/terminal-transcripts/capture-agent-pty-transcript.mjs",
"check:reliability-gates": "node config/scripts/static-analysis/reliability-policy/check-reliability-gates.mjs",
"check:ratchets": "node config/scripts/static-analysis/ratchet-runner/run-ratchets.mjs",
"check:max-lines-ratchet": "node config/scripts/static-analysis/ratchets/source-budget/check-max-lines-ratchet.mjs",
"check:ts-nocheck-ratchet": "node config/scripts/static-analysis/ratchets/source-budget/check-ts-nocheck-ratchet.mjs",
"check:host-list-render-ratchet": "node config/scripts/static-analysis/ratchets/renderer-state/check-host-list-render-ratchet.mjs",
"check:memo-translate-subscription-ratchet": "node config/scripts/static-analysis/ratchets/renderer-state/check-memo-translate-subscription-ratchet.mjs",
"check:react-compiler-compat-ratchet": "node config/scripts/static-analysis/ratchets/react-compiler/check-react-compiler-compat-ratchet.mjs",
"check:render-path-translate-ratchet": "node config/scripts/static-analysis/ratchets/renderer-state/check-render-path-translate-ratchet.mjs",
"check:flaky-test-pattern-ratchet": "node config/scripts/static-analysis/ratchets/test-quality/check-flaky-test-pattern-ratchet.mjs",
"check:path-literal-ratchet": "node config/scripts/static-analysis/ratchets/source-budget/check-path-literal-ratchet.mjs",
"check:legacy-relay-fence-ratchet": "node config/scripts/static-analysis/process-boundaries/check-legacy-relay-fence-ratchet.mjs",
"check:unproven-pty-retirement-ratchet": "node config/scripts/static-analysis/ratchets/runtime-lifecycle/check-unproven-pty-retirement-ratchet.mjs",
"check:daemon-blocking-call-ratchet": "node config/scripts/static-analysis/ratchets/runtime-lifecycle/check-daemon-blocking-call-ratchet.mjs",
"check:id-only-store-write-ratchet": "node config/scripts/static-analysis/ratchets/renderer-state/check-id-only-store-write-ratchet.mjs",
"check:repo-host-read-ratchet": "node config/scripts/static-analysis/ratchets/renderer-state/check-repo-host-read-ratchet.mjs",
"check:workspace-record-read-ratchet": "node config/scripts/static-analysis/ratchets/renderer-state/check-workspace-record-read-ratchet.mjs",
"check:tab-map-seam-ratchet": "node config/scripts/static-analysis/ratchets/renderer-state/check-tab-map-seam-ratchet.mjs",
"check:terminal-parking-ownership-ratchet": "node config/scripts/static-analysis/ratchets/renderer-state/check-terminal-parking-ownership-ratchet.mjs",
"check:worktree-id-composer-ratchet": "node config/scripts/static-analysis/ratchets/renderer-state/check-worktree-id-composer-ratchet.mjs",
"check:direct-link-open-ratchet": "node config/scripts/static-analysis/ratchets/renderer-state/check-direct-link-open-ratchet.mjs",
"check:e2e-typecheck-ratchet": "node config/scripts/typecheck/e2e-admission/check-e2e-typecheck-ratchet.mjs",
"check:runtime-electron-ratchet": "node config/scripts/static-analysis/process-boundaries/check-runtime-electron-ratchet.mjs",
"check:focus-read-ratchet": "node config/scripts/static-analysis/ratchets/renderer-state/check-focus-read-ratchet.mjs",
"check:layout-writer-ratchets": "node config/scripts/static-analysis/ratchets/renderer-state/check-layout-writer-ratchets.mjs",
"check:readme-local-links": "node config/scripts/static-analysis/repository-layout/check-readme-local-links.mjs",
"check:has-restyle-scope": "node config/scripts/static-analysis/renderer-styles/check-has-restyle-scope.mjs",
"check:daemon-protocol-crossing": "node config/scripts/daemon-protocol/admission/check-daemon-protocol-crossing.mjs",
"check:runtime-launcher-protocol-ratchet": "node config/scripts/daemon-protocol/admission/check-runtime-launcher-protocol-ratchet.mjs",
"check:node-runtime-pin": "node config/scripts/node-runtime/pin-policy/check-node-runtime-pin.mjs",
"check:test-file-runners": "node config/scripts/ci/unit-selection/check-test-file-runners.mjs",
"check:mobile-shared-dependency-versions": "node config/scripts/package-manager/lockfile-contracts/check-mobile-shared-dependency-versions.mjs",
"build:orcad": "pnpm run build:packages && node config/scripts/orcad-distribution/prebuilds/build-orcad-node.mjs",
"build:orcad-template": "pnpm run build:packages && node config/scripts/orcad-distribution/template/build-orcad-template.mjs",
"build:orcad-prebuilds": "pnpm run build:packages && node config/scripts/orcad-distribution/prebuilds/build-orcad-prebuilds.mjs",
"smoke:orcad-terminal": "node config/scripts/native-build/node-addons/ensure-native-runtime.mjs --runtime=node && pnpm run build:orcad && node config/scripts/runtime-verification/daemon-lifecycle/runtime-serve-terminal-smoke.mjs --target orcad",
"smoke:serve-terminal": "node config/scripts/runtime-verification/daemon-lifecycle/runtime-serve-terminal-smoke.mjs",
"check:feature-wall-assets": "node config/scripts/assets/feature-wall/check-feature-wall-assets.mjs",
"generate:plugin-declarative-runtime": "node config/scripts/plugin-build/declarative-runtime/build-plugin-declarative-runtime.mjs",
"generate:plugin-declarative-typings": "node config/scripts/plugin-authoring/generated-contracts/generate-plugin-declarative-typings.mjs",
"generate:plugin-schemas": "node config/scripts/plugin-authoring/generated-contracts/generate-plugin-schemas.mjs",
"generate:plugin-author-typings": "node config/scripts/plugin-authoring/generated-contracts/generate-plugin-author-typings.mjs",
"validate:plugin": "node config/scripts/plugin-authoring/content-validation/validate-plugin-files.mjs",
"generate:rpc-params-catalog": "node config/scripts/plugin-authoring/rpc-catalog/generate-rpc-params-catalog.mjs",
"verify:rpc-params-catalog": "node config/scripts/plugin-authoring/rpc-catalog/generate-rpc-params-catalog.mjs --check",
"generate:acp-protocol": "node config/scripts/acp/generate-protocol.mjs",
"verify:acp-protocol": "node config/scripts/acp/generate-protocol.mjs --check",
"generate:bundled-skill-guides": "node config/scripts/skills/bundle-generation/generate-bundled-skill-guides.mjs --write",
"verify:bundled-skill-guides": "node config/scripts/skills/bundle-generation/generate-bundled-skill-guides.mjs --check",
"generate:plugin-authoring-skill-references": "node config/scripts/skills/bundle-generation/generate-plugin-authoring-skill-references.mjs --write && node config/scripts/skills/bundle-generation/generate-bundled-skill-guides.mjs --write",
"verify:plugin-authoring-skill-references": "node config/scripts/skills/bundle-generation/generate-plugin-authoring-skill-references.mjs --check",
"generate:skill-bundle-manifest": "node config/scripts/skills/bundle-generation/generate-skill-bundle-manifest.mjs --write",
"verify:skill-bundle-manifest": "node config/scripts/skills/bundle-generation/generate-skill-bundle-manifest.mjs",
"verify:macos-entitlements": "node config/scripts/desktop-distribution/macos/verify-macos-entitlements.mjs",
"vendor:feature-wall-assets": "node config/scripts/assets/feature-wall/vendor-feature-wall-assets.mjs",
"tc:node": "node config/scripts/workspace-package-build/build-workspace-packages.mjs && node config/scripts/typecheck/project-execution/run-typecheck-projects-in-parallel.mjs --project=config/tsconfig.node.json",
"tc:cli": "node config/scripts/workspace-package-build/build-workspace-packages.mjs && node config/scripts/typecheck/project-execution/run-typecheck-projects-in-parallel.mjs --project=config/tsconfig.tc.cli.json",
"tc:web": "node config/scripts/workspace-package-build/build-workspace-packages.mjs && node config/scripts/typecheck/project-execution/run-typecheck-projects-in-parallel.mjs --project=config/tsconfig.tc.web.json",
"tc": "node config/scripts/workspace-package-build/build-workspace-packages.mjs && node config/scripts/typecheck/project-execution/run-typecheck-projects-in-parallel.mjs",
"typecheck:node": "node config/scripts/workspace-package-build/build-workspace-packages.mjs && node config/scripts/typecheck/project-execution/run-typecheck-projects-in-parallel.mjs --project=config/tsconfig.node.json",
"typecheck:cli": "node config/scripts/workspace-package-build/build-workspace-packages.mjs && node config/scripts/typecheck/project-execution/run-typecheck-projects-in-parallel.mjs --project=config/tsconfig.tc.cli.json",
"typecheck:web": "node config/scripts/workspace-package-build/build-workspace-packages.mjs && node config/scripts/typecheck/project-execution/run-typecheck-projects-in-parallel.mjs --project=config/tsconfig.tc.web.json",
"typecheck:e2e": "pnpm run build:packages && node config/scripts/typecheck/e2e-admission/run-e2e-typecheck.mjs",
"typecheck:tsc:e2e": "pnpm run build:packages && node config/scripts/typecheck/e2e-admission/run-e2e-typecheck.mjs --compiler=native",
"typecheck": "node config/scripts/workspace-package-build/build-workspace-packages.mjs && node config/scripts/typecheck/project-execution/run-typecheck-projects-in-parallel.mjs",
"typecheck:ci": "node config/scripts/workspace-package-build/build-workspace-packages.mjs && node config/scripts/typecheck/project-execution/run-typecheck-projects-in-parallel.mjs --compiler=bun",
"typecheck:tsc:node": "pnpm run build:packages && node node_modules/typescript/bin/tsc --noEmit -p config/tsconfig.node.json --composite false",
"typecheck:tsc:cli": "pnpm run build:packages && tsc --noEmit -p config/tsconfig.cli.json --composite false",
"typecheck:tsc:web": "pnpm run build:packages && tsc --noEmit -p config/tsconfig.web.json --composite false",
"typecheck:tsc": "pnpm run build:packages && tsc --noEmit -p config/tsconfig.node.json --composite false && tsc --noEmit -p config/tsconfig.cli.json --composite false && tsc --noEmit -p config/tsconfig.web.json --composite false",
"ensure:electron-runtime": "node config/scripts/native-build/node-addons/ensure-native-runtime.mjs --runtime=electron",
"start": "pnpm run build:packages && pnpm run ensure:electron-runtime && electron-vite preview",
"dev": "node config/scripts/workspace-package-build/build-workspace-packages.mjs && node config/scripts/native-build/node-addons/ensure-native-runtime.mjs --runtime=electron && node config/scripts/development/launch/run-electron-vite-dev.mjs",
"dev-stable-name": "pnpm run build:packages && pnpm run ensure:electron-runtime && node config/scripts/development/launch/run-electron-vite-dev.mjs --stable-name",
"dev:fresh": "pnpm run build:packages && node config/scripts/development/profile-seeding/dev-fresh-profile.mjs",
"dev:seed-profile": "node config/scripts/development/profile-seeding/dev-profile-seed.mjs",
"dev:web": "vite --config vite.web.config.ts --host 127.0.0.1",
"dev:fixtures": "vite --config config/vite.fixtures.config.ts",
"fixtures:shot": "node config/scripts/component-fixtures/fixtures-shot.mjs",
"build:wsl-guest": "pnpm run build:packages && node --disable-warning=MODULE_TYPELESS_PACKAGE_JSON config/scripts/remote-host-build/wsl-guest/build-wsl-guest.mjs",
"build:computer-macos": "node config/scripts/native-build/macos/build-computer-macos.mjs",
"build:keyboard-layout-macos": "node config/scripts/native-build/macos/build-keyboard-layout-macos.mjs",
"build:process-footprint-macos": "node config/scripts/native-build/macos/build-process-footprint-macos.mjs",
"build:notification-status-macos": "node config/scripts/native-build/macos/build-notification-status-macos.mjs",
"build:native": "node config/scripts/native-build/composition/build-native-for-platform.mjs",
"smoke:computer": "node config/scripts/runtime-verification/desktop-transport/computer-use-smoke.mjs",
"verify:computer-native": "node config/scripts/runtime-verification/desktop-transport/verify-computer-native.mjs",
"verify:cli-bin": "node config/scripts/cli-build/verify-cli-bin.mjs",
"verify:built-skills-cli": "node config/scripts/runtime-verification/skills-cli/verify-skills-cli-runtime.cjs out",
"verify:renderer-boot-graph": "node config/scripts/desktop-build/output-contracts/verify-renderer-boot-graph.mjs",
"verify:localization-catalogs": "bun config/scripts/localization/catalog-validation/verify-localization-catalogs.mjs",
"verify:localization-catalog": "node config/scripts/localization/catalog-validation/verify-localization-catalog.mjs",
"sync:localization-catalog": "node config/scripts/localization/catalog-validation/verify-localization-catalog.mjs --fix",
"verify:localization-runtime-catalog": "node config/scripts/localization/catalog-validation/generate-runtime-required-english-catalog.mjs",
"sync:localization-runtime-catalog": "node config/scripts/localization/catalog-validation/generate-runtime-required-english-catalog.mjs --fix",
"verify:localization-protected-copy": "node config/scripts/localization/catalog-validation/protected-copy-keys.mjs",
"sync:localization-protected-copy": "node config/scripts/localization/catalog-validation/protected-copy-keys.mjs --fix",
"verify:localization-extraction": "node config/scripts/localization/source-extraction/verify-localization-extraction.mjs",
"verify:localization-coverage": "node config/scripts/localization/source-extraction/audit-localization-coverage.mjs --check",
"verify:startup-worktree-localization-coverage": "node config/scripts/localization/source-extraction/audit-localization-coverage.mjs --check --native-dialog-fields --source-root src/main/startup --source-root src/shared/worktree --allowlist config/startup-worktree-localization-allowlist.json",
"verify:mobile-localization": "node config/scripts/localization/catalog-validation/verify-mobile-localization.mjs",
"sync:mobile-localization": "node config/scripts/localization/catalog-validation/verify-mobile-localization.mjs --fix",
"verify:mobile-localization-coverage": "node config/scripts/localization/source-extraction/audit-localization-coverage.mjs --check --source-root mobile/app --source-root mobile/src --source-root mobile/web-entry --allowlist config/mobile-localization-coverage-allowlist.json",
"audit:localization": "node config/scripts/localization/source-extraction/audit-localization-coverage.mjs",
"i18n:reactive-translate": "node config/scripts/localization/reactive-translate/codemod-reactive-translate.mjs",
"audit:translate-helpers": "node config/scripts/localization/reactive-translate/report-translate-helpers.mjs",
"build:cli": "pnpm run build:packages && node config/scripts/cli-build/build-cli.mjs && pnpm run prepare:cli-output",
"prepare:cli-output": "node config/scripts/cli-build/verify-cli-bin.mjs --fix-executable --fix-package-json && node config/scripts/development/setup/install-dev-cli.mjs",
"test:linux-cli-contract": "node config/scripts/runtime-verification/desktop-transport/run-linux-cli-launch-contract-docker.mjs --appimage dist/orca-linux.AppImage",
"test:repro:skills-cli-runtime": "pnpm run build:cli && pnpm run build:electron-vite && pnpm run verify:built-skills-cli",
"build:electron-vite": "pnpm run build:packages && node config/scripts/desktop-build/execution/run-electron-vite-build.mjs",
"build:electron-vite:parallel": "pnpm run build:packages && node config/scripts/development/launch/run-electron-vite-targets-in-parallel.mjs",
"build:web": "pnpm run build:packages && node config/scripts/web-build/execution/run-vite-web-build.mjs && node config/scripts/web-build/execution/verify-web-build.mjs",
"build:web-from-renderer": "node config/scripts/development/web-client/project-renderer-web-client.mjs && node config/scripts/web-build/execution/verify-web-build.mjs",
"build:mobile-web": "node config/scripts/build/mobile-web-app/build-mobile-web-app-bundle.mjs && node config/scripts/build/mobile-web-app/verify-mobile-web-app-bundle.mjs",
"build:desktop": "pnpm run typecheck && pnpm run build:desktop:assets",
"build:desktop:ci": "pnpm run typecheck:ci --bun-concurrency=2 --bun-threads=2 && pnpm run build:desktop:assets",
"build:desktop:assets": "pnpm run build:wsl-guest && pnpm run build:cli && pnpm run build:electron-vite && pnpm run verify:built-skills-cli && pnpm run build:web-from-renderer && pnpm run build:mobile-web",
"build": "pnpm run build:desktop && pnpm run build:native",
"build:release": "pnpm run build:wsl-guest && pnpm run build:native && pnpm run verify:computer-native && pnpm run build:cli && pnpm run build:electron-vite && pnpm run verify:built-skills-cli && pnpm run build:web-from-renderer && pnpm run build:mobile-web",
"build:release:javascript": "pnpm run build:cli && pnpm run build:electron-vite && pnpm run verify:built-skills-cli && pnpm run build:web-from-renderer && pnpm run build:mobile-web",
"build:release:javascript:parallel": "pnpm run build:cli && pnpm run build:electron-vite:parallel && pnpm run verify:built-skills-cli && pnpm run build:web-from-renderer && pnpm run build:mobile-web",
"build:release:host": "pnpm run build:wsl-guest && pnpm run build:native && pnpm run verify:computer-native && pnpm run verify:built-skills-cli",
"build:release:parallel": "pnpm run build:wsl-guest && pnpm run build:native && pnpm run verify:computer-native && pnpm run build:cli && pnpm run build:electron-vite:parallel && pnpm run verify:built-skills-cli && pnpm run build:web-from-renderer && pnpm run build:mobile-web",
"postinstall": "node config/scripts/workspace-package-build/build-workspace-packages.mjs && node config/scripts/native-build/node-addons/rebuild-native-deps.mjs",
"rebuild:electron": "node config/scripts/native-build/node-addons/rebuild-native-deps.mjs",
"reclaim-space": "node config/scripts/worktree-storage/reclaim-worktree-space.mjs",
"rebuild:node": "node config/scripts/native-build/node-addons/ensure-native-runtime.mjs --runtime=node --force",
"build:unpack": "pnpm run build && pnpm run ensure:electron-runtime && electron-builder --config config/electron-builder.config.cjs --dir",
"build:win": "pnpm run build:desktop && pnpm run ensure:electron-runtime && electron-builder --config config/electron-builder.config.cjs --win",
"build:icons": "bash resources/icon-source/generate.sh",
"build:mac": "pnpm run build:desktop && pnpm run build:computer-macos && pnpm run build:keyboard-layout-macos && pnpm run build:process-footprint-macos && pnpm run build:notification-status-macos && pnpm run ensure:electron-runtime && node config/scripts/desktop-distribution/macos/build-mac-local.mjs",
"build:mac:release": "node config/scripts/desktop-distribution/macos/verify-macos-release-env.mjs && ORCA_MAC_RELEASE=1 pnpm run build:desktop && ORCA_MAC_RELEASE=1 pnpm run build:computer-macos && ORCA_MAC_RELEASE=1 pnpm run build:keyboard-layout-macos && ORCA_MAC_RELEASE=1 pnpm run build:process-footprint-macos && ORCA_MAC_RELEASE=1 pnpm run build:notification-status-macos && pnpm run ensure:electron-runtime && ORCA_MAC_RELEASE=1 electron-builder --config config/electron-builder.config.cjs --mac",
"build:linux": "pnpm run build:desktop && pnpm run ensure:electron-runtime && node config/scripts/desktop-distribution/linux/build-linux-local.mjs",
"test:e2e": "pnpm run ensure:electron-runtime && npx playwright test --config tests/playwright.config.ts --project=electron-headless",
"test:e2e:workspace-session-golden": "pnpm run ensure:electron-runtime && npx playwright test tests/e2e/golden-quit-relaunch-session.spec.ts tests/e2e/golden-terminal-file-link.spec.ts tests/e2e/golden-worktree-create-switch.spec.ts --config tests/playwright.config.ts --project electron-headless --workers=1",
"test:e2e:multi-client-navigation": "node config/scripts/ci/e2e-selection/run-multi-client-navigation-e2e.mjs",
"test:e2e:terminal-layout-parity": "node config/scripts/runtime-verification/terminal-e2e/run-terminal-layout-parity.mjs",
"test:e2e:floating-mobile-emulator": "pnpm run ensure:electron-runtime && npx playwright test tests/e2e/floating-mobile-emulator-tab.spec.ts --config tests/playwright.config.ts --project electron-headless --workers=1",
"test:e2e:terminal-rendering-golden": "pnpm run ensure:electron-runtime && npx playwright test tests/e2e/terminal-raw-emoji-table-scroll-restore.spec.ts --grep @terminal-rendering-golden --config tests/playwright.config.ts --project electron-headless --project electron-headful --workers=1",
"test:e2e:source-control-golden": "pnpm run ensure:electron-runtime && npx playwright test tests/e2e/golden-file-open-edit-save.spec.ts tests/e2e/golden-source-control-commit.spec.ts tests/e2e/golden-source-control-open-diff.spec.ts --grep @golden --config tests/playwright.config.ts --project electron-headless --workers=1",
"test:e2e:posix-profile-index-golden": "pnpm run ensure:electron-runtime && npx playwright test tests/e2e/golden-posix-profile-index-fsync.spec.ts --grep @posix-profile-index-golden --config tests/playwright.config.ts --project electron-headless --workers=1",
"test:e2e:agent-tui-golden": "pnpm run ensure:electron-runtime && npx playwright test tests/e2e/golden-agent-tui-launch.spec.ts tests/e2e/golden-shell-after-agent-exit.spec.ts --config tests/playwright.config.ts --project electron-headless --workers=1",
"test:e2e:tab-bar-agent-launch-golden": "pnpm run ensure:electron-runtime && npx playwright test tests/e2e/golden-tab-bar-agent-launch.spec.ts --config tests/playwright.config.ts --project electron-headless --workers=1",
"test:e2e:terminal-rendering-release-evidence": "pnpm run ensure:electron-runtime && npx playwright test tests/e2e/terminal-opencode-emoji-table-rendering.spec.ts --config tests/playwright.config.ts --project electron-headless --workers=2",
"test:e2e:terminal-perf": "pnpm run ensure:electron-runtime && npx playwright test tests/e2e/terminal-typing-latency.spec.ts tests/e2e/terminal-output-scheduler.spec.ts tests/e2e/terminal-hidden-tui-visual-restore.spec.ts tests/e2e/artificial-opencode-terminal-load.spec.ts --config tests/playwright.config.ts --project electron-headless --workers=2",
"test:e2e:terminal-perf:scale": "pnpm run ensure:electron-runtime && node config/scripts/runtime-verification/terminal-e2e/run-terminal-scale-perf-e2e.mjs",
"test:e2e:terminal-perf:scale:report": "pnpm run ensure:electron-runtime && node config/scripts/runtime-verification/terminal-e2e/run-terminal-scale-perf-report-gate.mjs",
"test:e2e:terminal-perf:check-report": "node config/scripts/performance/terminal-reporting/check-terminal-perf-report-budgets.mjs",
"test:e2e:terminal-perf:summarize": "node config/scripts/performance/terminal-reporting/summarize-terminal-perf-report.mjs",
"test:e2e:terminal-perf:html-report": "node config/scripts/performance/terminal-reporting/generate-terminal-perf-html-report.mjs",
"test:e2e:source-control-scale": "pnpm run ensure:electron-runtime && npx playwright test tests/e2e/source-control-large-file-count.spec.ts --config tests/playwright.config.ts --project electron-headless --workers=1",
"win-update-e2e": "node tests/tools/win-update-e2e/run.mjs",
"win-crash-survival-e2e": "node tests/tools/win-crash-survival-e2e/run.mjs",
"smoke:windows-pty-native-capability": "node tests/tools/windows-pty-native-capability-smoke/run.mjs",
"test:e2e:headful": "pnpm run ensure:electron-runtime && npx playwright test --config tests/playwright.config.ts --project electron-headful",
"test:e2e:terminal-ime-native": "node config/scripts/runtime-verification/terminal-e2e/run-terminal-ibus-hangul-e2e.mjs",
"test:e2e:computer": "vitest run --config tests/e2e/vitest.config.ts",
"bench:idle-cpu": "pnpm run ensure:electron-runtime && node config/scripts/performance/idle-cpu/run-idle-cpu-benchmark.mjs",
"bench:spinners": "pnpm run ensure:electron-runtime && node tests/tools/benchmarks/spinner-rendering/run.mjs",
"bench:macos-computer-helper-owner-loss": "node config/scripts/performance/macos-computer-owner/macos-computer-helper-owner-loss-benchmark.mjs",
"bench:startup": "pnpm run ensure:electron-runtime && node tests/tools/benchmarks/startup-time-bench.mjs",
"bench:daemon-coldstart": "pnpm run ensure:electron-runtime && node tests/tools/benchmarks/daemon-coldstart-bench.mjs",
"bench:wsl-hook-relay-reattach": "pnpm run build:wsl-guest && node config/scripts/performance/wsl-hooks/wsl-hook-relay-reattach-benchmark.mjs",
"bench:wsl-git-shell": "node config/scripts/performance/wsl-git/wsl-git-shell-benchmark.mjs",
"bench:hang-watchdog-memory": "pnpm run ensure:electron-runtime && node config/scripts/diagnostics/hang-watchdog/hang-watchdog-memory-benchmark.mjs",
"bench:main-thread-jank": "pnpm run ensure:electron-runtime && node tests/tools/benchmarks/main-thread-jank-bench.mjs",
"bench:zustand-selector-fanout": "node config/scripts/performance/renderer-projection/zustand-selector-fanout-benchmark.mjs",
"bench:renderer-quadratic-scans": "node config/scripts/performance/renderer-markdown/renderer-quadratic-scan-benchmark.mjs",
"bench:session-write-hot-path": "node config/scripts/performance/session-transcripts/session-write-hot-path-benchmark.mjs",
"bench:terminal-partial-escape-tail": "node config/scripts/performance/terminal-stream/terminal-partial-escape-tail-benchmark.mjs",
"bench:terminal-multiplex-ack-pacing": "node config/scripts/performance/terminal-stream/terminal-multiplex-ack-pacing-benchmark.mjs",
"bench:worktree-refresh-churn": "node --disable-warning=MODULE_TYPELESS_PACKAGE_JSON config/scripts/performance/source-control/worktree-refresh-churn-benchmark.mjs",
"bench:cold-park-reveal": "pnpm run ensure:electron-runtime && node tests/tools/benchmarks/terminal-cold-park-reveal-bench.mjs",
"bench:cold-park-resource": "pnpm run ensure:electron-runtime && node tests/tools/benchmarks/terminal-cold-park-resource-bench.mjs",
"bench:compare": "node config/scripts/performance/measurement/compare-benchmark-artifacts.mjs",
"test:e2e:remote-bulk-open-freeze": "pnpm run ensure:electron-runtime && pnpm exec playwright test tests/e2e/remote-session-bulk-open-freeze-repro.spec.ts --config tests/playwright.config.ts --project electron-headless --workers=1",
"repro:live-remote-bulk-open-freeze": "node config/scripts/diagnostics/remote-freeze/live-remote-bulk-open-freeze-repro.mjs",
"repro:live-remote-realistic-freeze": "node config/scripts/diagnostics/remote-freeze/live-remote-realistic-freeze-repro.mjs",
"audit:anti-slop": "node config/scripts/static-analysis/oxlint-contracts/sync-anti-slop-plugin.mjs && bun --smol node_modules/oxlint/bin/oxlint --config config/oxlint-anti-slop.json src config tests mobile --deny-warnings",
"sync:anti-slop-plugin": "node config/scripts/static-analysis/oxlint-contracts/sync-anti-slop-plugin.mjs",
"build:packages": "node config/scripts/workspace-package-build/build-workspace-packages.mjs",
"check:process-host-imports": "node config/scripts/static-analysis/process-boundaries/check-process-host-imports.mjs",
"check:main-sync-spawn-ratchet": "node config/scripts/static-analysis/process-boundaries/check-main-sync-spawn-ratchet.mjs",
"check:main-sync-fs-ratchet": "node config/scripts/static-analysis/ratchets/runtime-lifecycle/check-main-sync-fs-ratchet.mjs",
"check:recurring-timer-ratchet": "node config/scripts/static-analysis/ratchets/runtime-lifecycle/check-recurring-timer-ratchet.mjs",
"check:compat-boundary-imports": "node config/scripts/static-analysis/process-boundaries/check-compat-boundary-imports.mjs",
"check:import-boundaries": "bun config/scripts/static-analysis/process-boundaries/check-import-boundaries.mjs"
},
"dependencies": {
"@anthropic-ai/claude-agent-sdk": "0.3.318",
"@floating-ui/dom": "1.8.0",
"@linear/sdk": "^97.0.0",
"@orca/process-host": "workspace:*",
"@parcel/watcher": "^2.5.6",
"@xterm/addon-serialize": "0.15.0-beta.330",
"@xterm/headless": "6.1.0-beta.334",
"agent-browser": "~0.39.4",
"electron-updater": "^6.8.10",
"fflate": "0.8.3",
"i18next": "^26.5.11",
"jsonc-parser": "^3.3.1",
"mime-types": "3.0.2",
"node-pty": "^1.1.0",
"posthog-node": "^5.52.5",
"proper-lockfile": "4.1.2",
"qrcode": "^1.5.4",
"react-i18next": "17.0.19",
"serve-sim": "0.1.47",
"smol-toml": "1.9.1",
"ssh2": "^1.17.0",
"stream-chain": "4.2.6",
"stream-json": "3.7.0",
"tldts": "7.4.18",
"tweetnacl": "^1.0.3",
"ws": "^8.22.0",
"yaml": "^2.9.1",
"zod": "~4.6.7"
},
"devDependencies": {
"@actions/expressions": "0.3.61",
"@ast-grep/cli": "0.51.0",
"@dnd-kit/core": "^6.3.1",
"@dnd-kit/sortable": "^10.0.0",
"@electron-toolkit/tsconfig": "^2.0.0",
"@electron/osx-sign": "2.7.0",
"@electron/rebuild": "^4.2.1",
"@monaco-editor/react": "^4.7.0",
"@noble/hashes": "1.8.0",
"@oxlint/plugins": "1.89.0",
"@playwright/test": "^1.64.1",
"@sanity/diff-match-patch": "^3.2.1",
"@shadcn/lint": "~0.1.5",
"@stablyai/playwright-test": "^2.1.16",
"@tailwindcss/vite": "^4.3.3",
"@tanstack/react-virtual": "^3.14.13",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.3",
"@testing-library/user-event": "^14.6.8",
"@tiptap/extension-code-block": "3.31.3",
"@tiptap/extension-code-block-lowlight": "3.31.3",
"@tiptap/extension-details": "3.31.3",
"@tiptap/extension-image": "3.31.3",
"@tiptap/extension-link": "3.31.3",
"@tiptap/extension-list": "3.31.3",
"@tiptap/extension-mathematics": "3.31.3",
"@tiptap/extension-placeholder": "3.31.3",
"@tiptap/extension-table": "3.31.3",
"@tiptap/markdown": "3.31.3",
"@tiptap/pm": "3.31.3",
"@tiptap/react": "3.31.3",
"@tiptap/starter-kit": "3.31.3",
"@types/chrome": "0.0.287",
"@types/hast": "^3.0.4",
"@types/mdast": "^4.0.4",
"@types/node": "^24.19.2",
"@types/proper-lockfile": "^4.1.4",
"@types/qrcode": "^1.5.6",
"@types/react": "~19.2.18",
"@types/react-dom": "~19.2.7",
"@types/ssh2": "^1.15.6",
"@types/ws": "^8.18.2",
"@vitejs/plugin-react": "^6.1.2",
"@vscode/ripgrep-universal": "1.18.0",
"@xterm/addon-fit": "0.12.0-beta.332",
"@xterm/addon-image": "0.10.0-beta.331",
"@xterm/addon-ligatures": "0.11.0-beta.330",
"@xterm/addon-search": "0.17.0-beta.330",
"@xterm/addon-unicode11": "0.10.0-beta.330",
"@xterm/addon-web-links": "0.13.0-beta.330",
"@xterm/addon-webgl": "0.20.0-beta.329",
"@xterm/xterm": "6.1.0-beta.336",
"ajv": "8.20.0",
"bun": "1.4.4",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"cmdk": "^1.1.1",
"devalue": "6.0.3",
"diff": "8.0.4",
"dompurify": "3.4.17",
"electron": "43.8.6",
"electron-builder": "26.15.3",
"electron-vite": "^6.0.0",
"emoji-picker-react": "^4.22.3",
"emojibase-data": "17.0.0",
"es-module-lexer": "1.7.0",
"esbuild": "^0.28.2",
"github-slugger": "2.0.0",
"graphql": "16.14.2",
"happy-dom": "^21.0.4",
"hast-util-from-html-isomorphic": "2.0.0",
"hast-util-to-jsx-runtime": "2.3.6",
"hast-util-to-text": "4.0.2",
"html-to-image": "^1.11.13",
"husky": "^9.1.7",
"i18next-cli": "1.74.2",
"katex": "0.18.10",
"lint-staged": "^16.4.0",
"lowlight": "^3.3.0",
"lucide-react": "^0.577.0",
"marked": "^17.0.1",
"mermaid": "^11.17.2",
"monaco-editor": "^0.55.1",
"node-gyp": "12.3.0",
"oxc-transform-react": "~0.152.0",
"oxfmt": "^0.74.0",
"oxlint": "^1.91.0",
"oxlint-plugin-anti-slop": "github:dmmulroy/anti-slop#c44ef22ca116d0ba62a3ff663a0bd13a3f3fa40b",
"oxlint-plugin-react-doctor": "0.9.14",
"oxlint-tsgolint": "7.0.2005",
"pdfjs-dist": "^6.3.289",
"playwright-core": "1.64.1",
"pngjs": "^7.0.0",
"radix-ui": "^1.6.7",
"react": "~19.2.8",
"react-colorful": "^5.7.0",
"react-dom": "~19.2.8",
"react-grab": "^0.1.33",
"react-markdown": "^10.1.0",
"rehype-highlight": "^7.0.2",
"rehype-katex": "^7.0.1",
"rehype-raw": "^7.0.0",
"rehype-sanitize": "^6.0.0",
"rehype-slug": "^6.0.0",
"remark-breaks": "^4.0.0",
"remark-cjk-friendly": "^2.3.1",
"remark-frontmatter": "^5.0.0",
"remark-gfm": "^4.0.1",
"remark-math": "^6.0.0",
"remark-parse": "^11.0.0",
"remark-rehype": "11.1.2",
"remend": "1.4.0",
"shiki": "4.5.0",
"sonner": "2.0.7",
"sucrase": "3.35.1",
"tailwind-merge": "^3.7.0",
"tailwindcss": "^4.3.3",
"tar": "7.5.22",
"tsrs": "0.22.0-ts7.1.0-beta",
"tw-animate-css": "^1.4.0",
"typescript": "^7.0.2",
"typescript-api": "npm:typescript@6.0.3",
"unified": "^11.0.5",
"unist-util-visit-parents": "6.0.2",
"vite": "^8.3.5",
"vitest": "5.0.5",
"vscode-oniguruma": "^2.0.1",
"zustand": "^5.0.15"
},
"optionalDependencies": {
"@orca/windows-registry": "workspace:*",
"@orca/windows-security": "workspace:*",
"@transcribe-cpp/darwin-arm64-metal": "0.4.1",
"@transcribe-cpp/darwin-x64-cpu": "0.4.1",
"@transcribe-cpp/linux-arm64-cpu-vulkan": "0.4.1",
"@transcribe-cpp/linux-x64-cpu-vulkan": "0.4.1",
"@transcribe-cpp/win32-x64-cpu-vulkan": "0.4.1",
"@vscode/windows-process-tree": "0.8.0",
"transcribe-cpp": "0.4.1"
},
"lint-staged": {
"{*.{ts,tsx,js,jsx,mjs,mts,cts},!(cloud)/**/*.{ts,tsx,js,jsx,mjs,mts,cts}}": [
"oxlint --no-error-on-unmatched-pattern",
"oxlint --config config/oxlint-js-plugins.json",
"ast-grep scan --config config/sgconfig.yml --min-severity warning",
"oxlint --config config/oxlint-react-doctor.json",
"oxfmt --write --no-error-on-unmatched-pattern"
],
"{*.{json,css,md,mdx,yml,yaml},!(cloud)/**/*.{json,css,md,mdx,yml,yaml}}": [
"oxfmt --write --no-error-on-unmatched-pattern"
]
},
"engines": {
"node": "24"
},
"packageManager": "pnpm@12.14.0+sha512.c18ba6d87993d3d164cb5e8948f32b2c06ee854487e06cd8d86781342fb3e5bb4634367034711e86802baa9c37bea906ce1929ad08d70884c97d801df13389a6",
"reactDoctor": {
"ignore": {
"overrides": [
{
"files": [
"resources/plugins/declarative/*.mjs"
],
"rules": [
"eslint/max-lines"
]
},
{
"files": [
"src/renderer/src/components/editor/combined-diff/review-controls/use-combined-diff-view-preferences.ts"
],
"rules": [
"react-doctor/no-derived-state-effect"
]
},
{
"files": [
"src/renderer/src/components/task-page/github/use-task-page-github-issue-draft.ts",
"src/renderer/src/components/task-page/jira/use-task-page-jira-creation-state.ts"
],
"rules": [
"react-doctor/no-adjust-state-on-prop-change"
]
},
{
"files": [
"src/renderer/src/components/editor/combined-diff/browse-files/use-combined-diff-tree-navigation.ts",
"src/renderer/src/components/editor/combined-diff/load-sections/combined-diff-section-load-registry.ts",
"src/renderer/src/components/editor/combined-diff/review-controls/use-combined-diff-section-actions.ts"
],
"rules": [
"react-doctor/no-ref-current-in-render"
]
}
]
},
"rules": {
"react-doctor/js-combine-iterations": "off",
"react-doctor/no-initialize-state": "off",
"react-doctor/no-unstable-nested-components": "off"
}
}
}