Files
orca/resources/skills/release-mapping.json
T
Brennan Benson 68fca0b076 Add safe skill freshness detection and update rail (#8637)
* Add safe skill freshness detection

* Accept observed copy-mode rail outcomes

* chore(skills): regenerate snapshot artifacts for the merged guide content

The rebase onto main picked up the reviewed guide fixes (#8624), so the
current manifest hashes and a new appended snapshot generation must
match those bytes; the registry keeps all prior snapshots so existing
installs classify as outdated rather than unrecognized.

* fix(skills): canonicalize snapshot file order and guard released history

Historical snapshots kept git ls-tree byte-order while the working-tree
walk and runtime observation use the sorted depth-first order, so any
future multi-file skill would misclassify older installs as unrecognized
and churn spurious registry revisions; all producers now share one
canonical order (no digest changes for today's single-file packages).
Also rejects executable files from shipped skills (Windows observation
cannot see execute bits, which would misclassify pristine Windows
installs) and adds an explicit append-only invariant for released
snapshots so a generation-logic change cannot rewrite them silently.

* fix(skills): throttle focus rescans and correct self-blocked placement copy

Every window focus re-read and re-hashed all installed packages, and the
nudge and panel each forced their own trailing rescan for one event; a
15s cooldown plus a shared invalidation latch keep one bounded scan per
event while install-change events stay immediate. Bundle artifacts are
now loaded once per run instead of re-parsed on every scan. A read-only
or otherwise unsupported outdated placement now explains that it blocks
itself instead of blaming a phantom sibling placement; the supported
topology set moved to shared so eligibility and copy cannot drift.

* feat(skills): move freshness surfacing to a lingering toast and update modal

The Skills page has been unreachable since its toolbox menu entry was
removed (#4535), so surfacing freshness there buried the feature behind
its own nudge. The nudge now lingers until acted on (ignoring it records
nothing; only the explicit close persists dismissal keys) and opens an
update modal hosting the pre-filled editable terminal, an honest
current/blocked summary, and the per-placement rows in a collapsed
Details section. A compact 'Check for skill updates' row in CLI settings
is the manual re-entry point. Skills page restored to main; design-doc
surfacing section records the venue decision.

* fix(skills): mount update dialog inside the link-routing provider and fold freshness into the setup rails

The dialog hosts a live terminal pane that requires the link-routing
preference context; mounted outside the provider it crashed the renderer
the moment an eligible update existed (caught by live QA — unit tests
mock the terminal). It now mounts inside the provider behind its own
recoverable boundary.

The separate 'Check for skill updates' settings button is gone: the
setup rails' own pill now carries freshness (Update available / Up to
date, falling back to Installed for blocked or unrecognized copies and
for non-local runtimes the local-only scan cannot vouch for), and
Re-check refreshes both installation detection and the freshness
inventory. Wired for the CLI, Orchestration, Computer Use, and
Per-Workspace Environments rails.

* fix(skills): use the sleek scrollbar style in the update dialog

* chore(skills): regenerate manifest for merged main (v1.4.142-rc.1)

Main advanced to 1.4.142-rc.1 with a v1.4.141 release, so the embedded
appVersion and release mapping were stale on the PR's merged tree. Only
appVersion and the new release entry change; no snapshot digests move
(released history preserved).

* fix(skills): bound and batch freshness work

* fix(skills): harden freshness integrity checks

* fix(skills): accept observed copy topology outcomes

* chore(skills): regenerate manifest for current main

* fix(skills): preserve update terminal lifecycle

* chore(skills): regenerate manifest for current main

* fix(skills): fail closed on stale freshness scans

* chore(skills): regenerate manifest for current main

* fix(skills): preserve freshness safety under focus churn

* feat(skills): group the update modal by skill with plain-language status

The Update skills modal now lists only skills that will update or that can't
(with why), grouped by skill with their install locations nested underneath —
no more one row per placement.

- Statuses collapse to "Update available" / "Can't update" at the skill level.
- A location's problem is a chip (Duplicate, Unrecognized, Inaccessible, Read
  only, In a repo, External/Broken link, Plugin cache) with a hover tooltip
  that explains what it means for the user and what to do.
- Up-to-date, unrecognized-only, and unreadable-only skills are hidden; a
  current/unrecognized/etc. location only appears when it explains a shown skill.
- Copy is de-jargoned (drops "copy"/"placement"/"snapshot"/"official copy") and
  names the mechanism as the npx skills update command, not "Orca's update".
- Rename the section to "Update details"; drop the unreachable newer-known state.

Renderer-only: derivation is a pure module (groupSkillFreshness) with unit tests;
no IPC or main-process change. Locales updated for all five languages.

* chore(skills): regenerate manifest for current main (v1.4.143-rc.0)

* feat(skills): don't let a duplicate block the update; clearer skipped copy

- Eligibility: a clean standalone duplicate no longer poisons the whole
  name — the canonical copy still updates and the duplicate is flagged;
  a duplicate-only skill stays unoffered.
- Update modal: "Can't update" -> "Skipped" with a reason-specific
  sentence (edited/read-only/in-a-repo/plugin/link); chips describe only
  the location state; footer "Check now" -> "Re-check".
- Settings sidebar nav pills go amber "Update available" when a skill is
  updatable, matching the setup cards.
- Localized new strings across en/es/ja/ko/zh.

* chore(skills): regenerate manifest for merged main (v1.4.144-rc.1)
2026-07-16 14:47:28 -07:00

502 lines
9.9 KiB
JSON

{
"schemaVersion": 1,
"releases": [
{
"appVersion": "1.0.81",
"skills": {
"orca-cli": 1
}
},
{
"appVersion": "1.0.86",
"skills": {
"orca-cli": 2
}
},
{
"appVersion": "1.0.94-rc.0",
"skills": {
"orca-cli": 3
}
},
{
"appVersion": "1.3.8-rc.1",
"skills": {
"orca-cli": 4
}
},
{
"appVersion": "1.3.12-rc.4",
"skills": {
"orca-cli": 5
}
},
{
"appVersion": "1.3.24-rc.2",
"skills": {
"orca-cli": 6,
"orchestration": 1
}
},
{
"appVersion": "1.3.33-rc.3",
"skills": {
"mobile-fit-debug": 1,
"orca-cli": 6,
"orchestration": 1
}
},
{
"appVersion": "0.0.1",
"skills": {
"orca-cli": 6,
"orchestration": 1
}
},
{
"appVersion": "1.3.35-rc.0",
"skills": {
"mobile-fit-debug": 1,
"orca-cli": 6,
"orchestration": 1
}
},
{
"appVersion": "1.3.38-rc.3",
"skills": {
"orca-cli": 6,
"orchestration": 1
}
},
{
"appVersion": "1.3.38",
"skills": {
"mobile-fit-debug": 1,
"orca-cli": 6,
"orchestration": 1
}
},
{
"appVersion": "1.3.39",
"skills": {
"orca-cli": 6,
"orchestration": 1
}
},
{
"appVersion": "1.3.46-rc.3",
"skills": {
"orca-cli": 7,
"orchestration": 2
}
},
{
"appVersion": "1.3.47-rc.0",
"skills": {
"orca-cli": 8,
"orchestration": 3
}
},
{
"appVersion": "1.3.49-rc.0",
"skills": {
"computer-use": 1,
"orca-cli": 8,
"orchestration": 3
}
},
{
"appVersion": "1.4.2-rc.10",
"skills": {
"computer-use": 1,
"orca-cli": 9,
"orchestration": 4
}
},
{
"appVersion": "1.4.2",
"skills": {
"computer-use": 1,
"orca-cli": 10,
"orchestration": 5
}
},
{
"appVersion": "1.4.3-rc.0",
"skills": {
"computer-use": 1,
"orca-cli": 11,
"orchestration": 6
}
},
{
"appVersion": "1.4.9-rc.1",
"skills": {
"computer-use": 1,
"orca-cli": 12,
"orchestration": 6
}
},
{
"appVersion": "1.4.10-rc.3",
"skills": {
"computer-use": 1,
"orca-cli": 13,
"orchestration": 6
}
},
{
"appVersion": "1.4.11-rc.0",
"skills": {
"computer-use": 1,
"orca-cli": 14,
"orchestration": 6
}
},
{
"appVersion": "1.4.18-rc.2",
"skills": {
"computer-use": 1,
"orca-cli": 15,
"orchestration": 6
}
},
{
"appVersion": "1.4.18-rc.3",
"skills": {
"computer-use": 1,
"orca-cli": 16,
"orchestration": 6
}
},
{
"appVersion": "1.4.22",
"skills": {
"computer-use": 1,
"orca-cli": 16,
"orchestration": 7
}
},
{
"appVersion": "1.4.36-rc.2",
"skills": {
"computer-use": 1,
"orca-cli": 17,
"orchestration": 8
}
},
{
"appVersion": "1.4.36-rc.6",
"skills": {
"computer-use": 1,
"orca-cli": 18,
"orchestration": 9
}
},
{
"appVersion": "1.4.42-rc.8",
"skills": {
"computer-use": 2,
"orca-cli": 19,
"orchestration": 10
}
},
{
"appVersion": "1.4.46-rc.0",
"skills": {
"computer-use": 2,
"orca-cli": 19,
"orchestration": 11
}
},
{
"appVersion": "1.4.51-rc.8",
"skills": {
"computer-use": 3,
"orca-cli": 19,
"orchestration": 11
}
},
{
"appVersion": "1.4.51-rc.9",
"skills": {
"computer-use": 3,
"orca-cli": 20,
"orca-emulator": 1,
"orchestration": 12
}
},
{
"appVersion": "1.4.65-rc.3",
"skills": {
"computer-use": 3,
"linear-tickets": 1,
"orca-cli": 20,
"orca-emulator": 1,
"orchestration": 12
}
},
{
"appVersion": "1.4.65",
"skills": {
"computer-use": 3,
"orca-cli": 20,
"orca-emulator": 1,
"orchestration": 12
}
},
{
"appVersion": "1.4.66-rc.0",
"skills": {
"computer-use": 3,
"linear-tickets": 1,
"orca-cli": 20,
"orca-emulator": 1,
"orchestration": 12
}
},
{
"appVersion": "1.4.67-rc.0",
"skills": {
"computer-use": 3,
"linear-tickets": 2,
"orca-cli": 20,
"orca-emulator": 1,
"orchestration": 12
}
},
{
"appVersion": "1.4.68",
"skills": {
"computer-use": 3,
"linear-tickets": 2,
"orca-cli": 20,
"orca-emulator": 1,
"orchestration": 13
}
},
{
"appVersion": "1.4.74-rc.0",
"skills": {
"computer-use": 3,
"linear-tickets": 2,
"orca-cli": 21,
"orca-emulator": 1,
"orchestration": 14
}
},
{
"appVersion": "1.4.78-rc.1",
"skills": {
"computer-use": 3,
"linear-tickets": 2,
"orca-cli": 22,
"orca-emulator": 1,
"orchestration": 15
}
},
{
"appVersion": "1.4.78-rc.2",
"skills": {
"computer-use": 3,
"linear-tickets": 2,
"orca-cli": 23,
"orca-emulator": 1,
"orchestration": 16
}
},
{
"appVersion": "1.4.81-rc.2",
"skills": {
"computer-use": 3,
"linear-tickets": 2,
"orca-cli": 24,
"orca-emulator": 1,
"orchestration": 16
}
},
{
"appVersion": "1.4.81-rc.3",
"skills": {
"computer-use": 3,
"linear-tickets": 2,
"orca-cli": 25,
"orca-emulator": 1,
"orchestration": 16
}
},
{
"appVersion": "1.4.88",
"skills": {
"computer-use": 3,
"linear-tickets": 2,
"orca-cli": 26,
"orca-emulator": 1,
"orchestration": 17
}
},
{
"appVersion": "1.4.90",
"skills": {
"computer-use": 3,
"linear-tickets": 3,
"orca-cli": 26,
"orca-emulator": 1,
"orca-linear": 1,
"orchestration": 17
}
},
{
"appVersion": "1.4.92-rc.1",
"skills": {
"computer-use": 3,
"linear-tickets": 3,
"orca-cli": 27,
"orca-emulator": 1,
"orca-linear": 1,
"orchestration": 17
}
},
{
"appVersion": "1.4.96-rc.1",
"skills": {
"computer-use": 3,
"linear-tickets": 3,
"orca-cli": 28,
"orca-emulator": 1,
"orca-linear": 1,
"orchestration": 17
}
},
{
"appVersion": "1.4.105-rc.2",
"skills": {
"computer-use": 3,
"linear-tickets": 3,
"orca-cli": 29,
"orca-emulator": 2,
"orca-emulator-android": 1,
"orca-linear": 1,
"orchestration": 18
}
},
{
"appVersion": "1.4.111-rc.0",
"skills": {
"computer-use": 3,
"linear-tickets": 3,
"orca-cli": 29,
"orca-emulator": 2,
"orca-emulator-android": 1,
"orca-linear": 1,
"orca-per-workspace-env": 1,
"orchestration": 18
}
},
{
"appVersion": "1.4.124-rc.6",
"skills": {
"computer-use": 3,
"linear-tickets": 3,
"orca-cli": 29,
"orca-emulator": 2,
"orca-emulator-android": 1,
"orca-linear": 1,
"orca-per-workspace-env": 2,
"orchestration": 18
}
},
{
"appVersion": "1.4.124-rc.9",
"skills": {
"computer-use": 3,
"linear-tickets": 3,
"orca-cli": 29,
"orca-emulator": 2,
"orca-emulator-android": 1,
"orca-linear": 1,
"orca-per-workspace-env": 2,
"orchestration": 19
}
},
{
"appVersion": "1.4.124",
"skills": {
"computer-use": 3,
"linear-tickets": 4,
"orca-cli": 29,
"orca-emulator": 2,
"orca-emulator-android": 1,
"orca-linear": 2,
"orca-per-workspace-env": 2,
"orchestration": 20
}
},
{
"appVersion": "1.4.137-rc.1",
"skills": {
"computer-use": 3,
"linear-tickets": 4,
"orca-cli": 30,
"orca-emulator": 2,
"orca-emulator-android": 1,
"orca-linear": 2,
"orca-per-workspace-env": 2,
"orchestration": 21
}
},
{
"appVersion": "1.4.138-rc.0",
"skills": {
"computer-use": 4,
"linear-tickets": 4,
"orca-cli": 31,
"orca-emulator": 3,
"orca-emulator-android": 1,
"orca-linear": 2,
"orca-per-workspace-env": 2,
"orchestration": 22
}
},
{
"appVersion": "1.4.138-rc.3",
"skills": {
"computer-use": 4,
"linear-tickets": 4,
"orca-cli": 31,
"orca-emulator": 3,
"orca-emulator-android": 1,
"orca-linear": 2,
"orca-per-workspace-env": 2,
"orchestration": 23
}
},
{
"appVersion": "1.4.138-rc.4",
"skills": {
"computer-use": 4,
"linear-tickets": 4,
"orca-cli": 31,
"orca-emulator": 3,
"orca-emulator-android": 1,
"orca-linear": 2,
"orca-per-workspace-env": 2,
"orchestration": 24
}
},
{
"appVersion": "1.4.141",
"skills": {
"computer-use": 5,
"linear-tickets": 4,
"orca-cli": 32,
"orca-emulator": 4,
"orca-emulator-android": 2,
"orca-linear": 2,
"orca-per-workspace-env": 2,
"orchestration": 24
}
}
]
}