@scene-glass/devtools 0.0.0-stage → 0.1.32

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 ADDED
@@ -0,0 +1,210 @@
1
+ Third-party notice: Google Material Icons
2
+
3
+ The settings icon is from Google Material Icons:
4
+ https://github.com/google/material-design-icons
5
+ src/action/settings/materialiconsoutlined/24px.svg
6
+
7
+ The icon is adapted to an inline SVG using currentColor; its path is unchanged.
8
+ The license below applies to this third-party icon, not to other Scene Glass code.
9
+
10
+ Apache License
11
+ Version 2.0, January 2004
12
+ http://www.apache.org/licenses/
13
+
14
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
15
+
16
+ 1. Definitions.
17
+
18
+ "License" shall mean the terms and conditions for use, reproduction,
19
+ and distribution as defined by Sections 1 through 9 of this document.
20
+
21
+ "Licensor" shall mean the copyright owner or entity authorized by
22
+ the copyright owner that is granting the License.
23
+
24
+ "Legal Entity" shall mean the union of the acting entity and all
25
+ other entities that control, are controlled by, or are under common
26
+ control with that entity. For the purposes of this definition,
27
+ "control" means (i) the power, direct or indirect, to cause the
28
+ direction or management of such entity, whether by contract or
29
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
30
+ outstanding shares, or (iii) beneficial ownership of such entity.
31
+
32
+ "You" (or "Your") shall mean an individual or Legal Entity
33
+ exercising permissions granted by this License.
34
+
35
+ "Source" form shall mean the preferred form for making modifications,
36
+ including but not limited to software source code, documentation
37
+ source, and configuration files.
38
+
39
+ "Object" form shall mean any form resulting from mechanical
40
+ transformation or translation of a Source form, including but
41
+ not limited to compiled object code, generated documentation,
42
+ and conversions to other media types.
43
+
44
+ "Work" shall mean the work of authorship, whether in Source or
45
+ Object form, made available under the License, as indicated by a
46
+ copyright notice that is included in or attached to the work
47
+ (an example is provided in the Appendix below).
48
+
49
+ "Derivative Works" shall mean any work, whether in Source or Object
50
+ form, that is based on (or derived from) the Work and for which the
51
+ editorial revisions, annotations, elaborations, or other modifications
52
+ represent, as a whole, an original work of authorship. For the purposes
53
+ of this License, Derivative Works shall not include works that remain
54
+ separable from, or merely link (or bind by name) to the interfaces of,
55
+ the Work and Derivative Works thereof.
56
+
57
+ "Contribution" shall mean any work of authorship, including
58
+ the original version of the Work and any modifications or additions
59
+ to that Work or Derivative Works thereof, that is intentionally
60
+ submitted to Licensor for inclusion in the Work by the copyright owner
61
+ or by an individual or Legal Entity authorized to submit on behalf of
62
+ the copyright owner. For the purposes of this definition, "submitted"
63
+ means any form of electronic, verbal, or written communication sent
64
+ to the Licensor or its representatives, including but not limited to
65
+ communication on electronic mailing lists, source code control systems,
66
+ and issue tracking systems that are managed by, or on behalf of, the
67
+ Licensor for the purpose of discussing and improving the Work, but
68
+ excluding communication that is conspicuously marked or otherwise
69
+ designated in writing by the copyright owner as "Not a Contribution."
70
+
71
+ "Contributor" shall mean Licensor and any individual or Legal Entity
72
+ on behalf of whom a Contribution has been received by Licensor and
73
+ subsequently incorporated within the Work.
74
+
75
+ 2. Grant of Copyright License. Subject to the terms and conditions of
76
+ this License, each Contributor hereby grants to You a perpetual,
77
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
78
+ copyright license to reproduce, prepare Derivative Works of,
79
+ publicly display, publicly perform, sublicense, and distribute the
80
+ Work and such Derivative Works in Source or Object form.
81
+
82
+ 3. Grant of Patent License. Subject to the terms and conditions of
83
+ this License, each Contributor hereby grants to You a perpetual,
84
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
85
+ (except as stated in this section) patent license to make, have made,
86
+ use, offer to sell, sell, import, and otherwise transfer the Work,
87
+ where such license applies only to those patent claims licensable
88
+ by such Contributor that are necessarily infringed by their
89
+ Contribution(s) alone or by combination of their Contribution(s)
90
+ with the Work to which such Contribution(s) was submitted. If You
91
+ institute patent litigation against any entity (including a
92
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
93
+ or a Contribution incorporated within the Work constitutes direct
94
+ or contributory patent infringement, then any patent licenses
95
+ granted to You under this License for that Work shall terminate
96
+ as of the date such litigation is filed.
97
+
98
+ 4. Redistribution. You may reproduce and distribute copies of the
99
+ Work or Derivative Works thereof in any medium, with or without
100
+ modifications, and in Source or Object form, provided that You
101
+ meet the following conditions:
102
+
103
+ (a) You must give any other recipients of the Work or
104
+ Derivative Works a copy of this License; and
105
+
106
+ (b) You must cause any modified files to carry prominent notices
107
+ stating that You changed the files; and
108
+
109
+ (c) You must retain, in the Source form of any Derivative Works
110
+ that You distribute, all copyright, patent, trademark, and
111
+ attribution notices from the Source form of the Work,
112
+ excluding those notices that do not pertain to any part of
113
+ the Derivative Works; and
114
+
115
+ (d) If the Work includes a "NOTICE" text file as part of its
116
+ distribution, then any Derivative Works that You distribute must
117
+ include a readable copy of the attribution notices contained
118
+ within such NOTICE file, excluding those notices that do not
119
+ pertain to any part of the Derivative Works, in at least one
120
+ of the following places: within a NOTICE text file distributed
121
+ as part of the Derivative Works; within the Source form or
122
+ documentation, if provided along with the Derivative Works; or,
123
+ within a display generated by the Derivative Works, if and
124
+ wherever such third-party notices normally appear. The contents
125
+ of the NOTICE file are for informational purposes only and
126
+ do not modify the License. You may add Your own attribution
127
+ notices within Derivative Works that You distribute, alongside
128
+ or as an addendum to the NOTICE text from the Work, provided
129
+ that such additional attribution notices cannot be construed
130
+ as modifying the License.
131
+
132
+ You may add Your own copyright statement to Your modifications and
133
+ may provide additional or different license terms and conditions
134
+ for use, reproduction, or distribution of Your modifications, or
135
+ for any such Derivative Works as a whole, provided Your use,
136
+ reproduction, and distribution of the Work otherwise complies with
137
+ the conditions stated in this License.
138
+
139
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
140
+ any Contribution intentionally submitted for inclusion in the Work
141
+ by You to the Licensor shall be under the terms and conditions of
142
+ this License, without any additional terms or conditions.
143
+ Notwithstanding the above, nothing herein shall supersede or modify
144
+ the terms of any separate license agreement you may have executed
145
+ with Licensor regarding such Contributions.
146
+
147
+ 6. Trademarks. This License does not grant permission to use the trade
148
+ names, trademarks, service marks, or product names of the Licensor,
149
+ except as required for reasonable and customary use in describing the
150
+ origin of the Work and reproducing the content of the NOTICE file.
151
+
152
+ 7. Disclaimer of Warranty. Unless required by applicable law or
153
+ agreed to in writing, Licensor provides the Work (and each
154
+ Contributor provides its Contributions) on an "AS IS" BASIS,
155
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
156
+ implied, including, without limitation, any warranties or conditions
157
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
158
+ PARTICULAR PURPOSE. You are solely responsible for determining the
159
+ appropriateness of using or redistributing the Work and assume any
160
+ risks associated with Your exercise of permissions under this License.
161
+
162
+ 8. Limitation of Liability. In no event and under no legal theory,
163
+ whether in tort (including negligence), contract, or otherwise,
164
+ unless required by applicable law (such as deliberate and grossly
165
+ negligent acts) or agreed to in writing, shall any Contributor be
166
+ liable to You for damages, including any direct, indirect, special,
167
+ incidental, or consequential damages of any character arising as a
168
+ result of this License or out of the use or inability to use the
169
+ Work (including but not limited to damages for loss of goodwill,
170
+ work stoppage, computer failure or malfunction, or any and all
171
+ other commercial damages or losses), even if such Contributor
172
+ has been advised of the possibility of such damages.
173
+
174
+ 9. Accepting Warranty or Additional Liability. While redistributing
175
+ the Work or Derivative Works thereof, You may choose to offer,
176
+ and charge a fee for, acceptance of support, warranty, indemnity,
177
+ or other liability obligations and/or rights consistent with this
178
+ License. However, in accepting such obligations, You may act only
179
+ on Your own behalf and on Your sole responsibility, not on behalf
180
+ of any other Contributor, and only if You agree to indemnify,
181
+ defend, and hold each Contributor harmless for any liability
182
+ incurred by, or claims asserted against, such Contributor by reason
183
+ of your accepting any such warranty or additional liability.
184
+
185
+ END OF TERMS AND CONDITIONS
186
+
187
+ APPENDIX: How to apply the Apache License to your work.
188
+
189
+ To apply the Apache License to your work, attach the following
190
+ boilerplate notice, with the fields enclosed by brackets "[]"
191
+ replaced with your own identifying information. (Don't include
192
+ the brackets!) The text should be enclosed in the appropriate
193
+ comment syntax for the file format. We also recommend that a
194
+ file or class name and description of purpose be included on the
195
+ same "printed page" as the copyright notice for easier
196
+ identification within third-party archives.
197
+
198
+ Copyright [yyyy] [name of copyright owner]
199
+
200
+ Licensed under the Apache License, Version 2.0 (the "License");
201
+ you may not use this file except in compliance with the License.
202
+ You may obtain a copy of the License at
203
+
204
+ http://www.apache.org/licenses/LICENSE-2.0
205
+
206
+ Unless required by applicable law or agreed to in writing, software
207
+ distributed under the License is distributed on an "AS IS" BASIS,
208
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
209
+ See the License for the specific language governing permissions and
210
+ limitations under the License.
package/README.md CHANGED
@@ -1,3 +1,172 @@
1
- # Temporary Holding Version
1
+ # @scene-glass/devtools
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Review the page you're building, straight from the browser, with a loopback-only MCP bridge your coding agent can read.
4
+
5
+ This package installs into a Vue 3 or React project that already runs Vite. It adds a dev-only Vite plugin, a foreground MCP service on `127.0.0.1:4175`, and a browser panel that stores annotations inside your project. Nothing it does reaches the network beyond loopback.
6
+
7
+ > Install it from the public npm registry. Exact upstream OMO, Claude Code and Codex packages arrive through the release's dependencies. Scene Glass publishes devtools and one metadata-only OMO carrier, not vendor runtime payloads; setup verifies the installed sources and never downloads.
8
+
9
+ ## Requirements
10
+
11
+ | Requirement | Supported |
12
+ | ----------- | ---------------------------------------------------------------------------------- |
13
+ | Platform | `darwin-arm64`, `darwin-x64`, `linux-x64-gnu` (glibc >= 2.33) |
14
+ | Node.js | `>=24 <25` |
15
+ | Vite | `>=7.3.6 <8` |
16
+ | Host | Vue 3 + Vite SPA (`@vitejs/plugin-vue`), React + Vite SPA (`@vitejs/plugin-react`) |
17
+
18
+ Windows isn't supported. Neither are SSR hosts, service worker / PWA hosts, static HTML sites, or Next.js: setup inspects the project and exits before touching anything when the shape isn't one of the two supported ones.
19
+
20
+ ## Platform errors
21
+
22
+ `SCG_NATIVE_TUPLE_UNSUPPORTED` from `setup` or `start` means the operating system, CPU architecture, or libc does not meet the Requirements above. On Linux, Scene Glass requires x86_64 GNU/Linux with glibc 2.33 or newer; musl is unsupported. Check `ldd --version`. If glibc is older, upgrade your Linux distribution to one providing glibc >= 2.33, then retry the command, or use a supported macOS tuple. Scene Glass does not compile a replacement addon on unsupported hosts.
23
+
24
+ ## Install
25
+
26
+ Run this in your project root:
27
+
28
+ ```sh
29
+ npm install --save-dev --save-exact --ignore-scripts @scene-glass/devtools
30
+ ```
31
+
32
+ The version is pinned exactly and no install scripts run. The package ships prebuilt binaries for the platforms listed above; it never compiles on your machine.
33
+
34
+ ## Set up
35
+
36
+ ```sh
37
+ npx scene-glass setup
38
+ ```
39
+
40
+ Setup takes no parameters except `--runtimes-only` (below). It inspects the current project, shows a secret-redacted preview with an approval digest, and waits for you to approve. Decline and nothing is written. After approval it:
41
+
42
+ - adds one `sceneGlass()` plugin entry and its import to `vite.config.ts`;
43
+ - writes a gitignored `.env.development.local` credential;
44
+ - writes lifecycle state under `<project-root>/.scg/`;
45
+ - runs a live MCP and browser diagnostic;
46
+ - verifies the OMO, Claude Code and Codex runtime packages this release pins and reports each one, then exits.
47
+
48
+ Your `index.html`, `package.json`, lockfile, and `node_modules` are left alone.
49
+
50
+ Runtime sources are exact registry dependencies: the metadata-only `@scene-glass/runtime-omo-darwin-arm64` carrier, official `@anthropic-ai/claude-agent-sdk-darwin-arm64`, and the `@openai/codex-darwin-arm64` acquisition alias for OpenAI's native package. Scene Glass verifies complete vendor-owned packages in project `node_modules` against `dist/runtime-authorities.json`, whose digest is embedded in the bundle. Setup only checks these sources offline; it never downloads or writes a HOME runtime store. Production catalogue entries remain TODO-RELEASE until qualification.
51
+
52
+ Installed size is not yet measured for this acquisition graph. OMO and Claude share the SDK sidecar source; package version and executed Claude Code product version are separately pinned. OMO runs on the server's bound Node 24 and qualified ABI. All execution uses independently copied, frozen temporary snapshots. OMO preparation uses a pinned byte recipe and complete output verification. Codex's voice host remains verified on disk but is excluded from the execution snapshot; code mode stays.
53
+
54
+ If your install skipped optional packages (for example with `--omit=optional` or an `omit` setting in `.npmrc`), the runtimes are missing and setup says so. Bring them back with:
55
+
56
+ ```sh
57
+ npm install --include=optional
58
+ ```
59
+
60
+ Every launch still checks the complete inventory and runs from a sealed temporary copy, so a changed or partial runtime fails closed even if setup was skipped.
61
+
62
+ To check only the runtimes, without touching the project:
63
+
64
+ ```sh
65
+ npx scene-glass setup --runtimes-only
66
+ ```
67
+
68
+ It ends with `SCG_RUNTIMES_READY`, or exits non-zero with `SCG_RUNTIMES_INCOMPLETE`.
69
+
70
+ ## Run it: two processes, both in the foreground
71
+
72
+ Scene Glass never starts itself and never runs as a daemon. You run two processes, in two terminals, from your project root.
73
+
74
+ Terminal one, the Scene Glass MCP service on `127.0.0.1:4175`:
75
+
76
+ ```sh
77
+ npx scene-glass start
78
+ ```
79
+
80
+ Terminal two, your own dev server, unchanged:
81
+
82
+ ```sh
83
+ npm run dev
84
+ ```
85
+
86
+ Start Scene Glass first. The plugin checks for the runtime while Vite boots, so a Vite server started first logs `[scene-glass] runtime unavailable; development injection disabled.` and stays inert until it's restarted.
87
+
88
+ `start` takes no parameters either. One process serves every project registered in the same configuration home, so don't start a second one: it'll fail its preflight because `4175` is already bound. Stop it with `Ctrl+C`; your Vite dev servers keep running.
89
+
90
+ Open the exact `http://127.0.0.1:<port>` URL that `start` prints, and hard-refresh once on first load. The plugin serves the loader only for that host, so the `localhost` spelling of the same port returns 404. When your dev server doesn't listen on `127.0.0.1` already, set `server.host: '127.0.0.1'` in `vite.config.ts`.
91
+
92
+ If the page loads without the panel, that's the intended fail-open behavior: your app stays usable when Scene Glass isn't reachable.
93
+
94
+ ## Settings and measurement
95
+
96
+ Open **설정** beside the minimize button to choose the work provider, model, reasoning effort, and panel side. Model and effort choices come from the installed provider's supported capabilities. An unavailable catalog is shown as unavailable, never replaced with a guessed list. Inherited settings leave provider/session defaults in control. Changing a model clears the explicit effort; changing provider clears both overrides. Provider settings are saved for the project and cannot change during active work.
97
+
98
+ Left/right panel placement is stored locally per project. If browser storage is unavailable, the chosen side lasts for the current page and the panel reports that it could not persist it. Work request controls remain on the main panel when settings is closed.
99
+
100
+ Clicking a changed memo or its numbered badge confirms that exact item. Once every applicable member of the pending request has been confirmed, Scene Glass acknowledges the request review; the review button disappears after the server confirms it. Partial or stale confirmation never completes review. The single **검토 완료** button remains the explicit path when individual confirmation is incomplete or unavailable; the separate **수정 체크 완료** control is removed.
101
+
102
+ **현재 페이지 복사** uses the work-request eligible memo set and order, excluding already-consumed exact versions and unresolved/lost entries. Editing a memo makes its new version eligible under the same work rules. Empty eligibility never falls back to copying the entire page. Explicit single-memo and project-wide exports retain their separate scope.
103
+
104
+ Each project keeps one private conversation per provider, and consecutive requests on the same provider and model continue it, including after a restart. Each OMO request runs in its own OMO process that Scene Glass starts and stops, never in the shared OMO daemon, with a private copy of your OMO settings and credentials that is removed when the request ends (or, after a crash, when the next start recovers it). Processes the request started, such as a dev server the agent launched, are stopped when it ends; processes you started are never touched. A background process that lost both its hidden per-request tag and its parent before any check (for example a detached Apple system program such as `sleep`), or work handed to an outside service, is not tracked.
105
+
106
+ **새 세션 시작** makes the selected provider's next request start a new conversation without contacting any model; the old conversation stays on disk. Changing the model starts a new conversation for every provider; changing only the effort keeps it. If Scene Glass cannot confirm that a previous request fully stopped, the next request starts in a new conversation and a warning names the earlier request; nothing is blocked. Scene Glass does not patch OMO, Senpi, Codex, or Claude.
107
+
108
+ The 0.1.20 upgrade did not migrate conversations from 0.1.19: every provider started a new conversation, the old conversation files stayed unchanged, and a request that may still have been running at upgrade was named in a warning and never resumed or re-sent.
109
+
110
+ Distance and size measurement are included; no coupon or coupon service is required. Starting a measurement loads the packaged, integrity-bound ESM/CSS pair through the authenticated dev-only Vite routes. Stylesheet readiness, artifact hashes, ABI, Origin, project, session, and filesystem checks remain enforced. Navigation, disconnect, and teardown dispose the measurement lease. Legacy coupon query parameters and attributes are stripped without validation or forwarding. Existing coupon infrastructure is retained but unused by this activation path.
111
+
112
+ ## Signing in to Claude Code and Codex
113
+
114
+ Scene Glass does not sign you in and stores no provider credentials. Its pinned runtimes use the sign-in the official CLI saved in your home directory (for Claude Code also the macOS keychain), or `ANTHROPIC_API_KEY` / `ANTHROPIC_AUTH_TOKEN` for Claude Code and `OPENAI_API_KEY` for Codex. Install the official Claude Code or Codex CLI and sign in once before you select that provider; its own version doesn't matter. Without a sign-in only that provider shows **제공자 로그인이 필요합니다.** Signing out or switching accounts in the official CLI applies to Scene Glass too.
115
+
116
+ ## The OMO runtime
117
+
118
+ OMO Native runs only the exact OMO runtime this release approves for your platform, together with the owned RPC protocol it checks before any prompt. A matching version string isn't enough. Scene Glass never uses an `omo` or `node` from your `PATH`, and never changes your global OMO installation or settings. The runtime comes from `@scene-glass/runtime-omo-darwin-arm64` in your project's `node_modules` and runs on the same Node 24 interpreter as Scene Glass; Claude Code bytes come from `@anthropic-ai/claude-agent-sdk-darwin-arm64`. Both are checked against the embedded pin before every launch. `dist/omo-runtime-artifacts.json` is a readable copy of that pin.
119
+
120
+ If OMO can't launch, only OMO becomes unavailable, and settings and the failed request show why:
121
+
122
+ - `SCG_OMO_RUNTIME_MISSING`: the runtime package isn't in `node_modules`. Run `npm install --include=optional`, then submit a new request.
123
+ - `SCG_OMO_RUNTIME_INTEGRITY`: the installed runtime package was altered, or the Node running Scene Glass isn't the Node 24 ABI the release qualified. Reinstall the exact devtools version (`rm -rf node_modules` then `npm install`), or switch to Node 24.
124
+ - `SCG_OMO_RUNTIME_UNSUPPORTED`: the OMO work provider is claimed on `darwin-arm64` only. New upstream x64 PTY prebuilds now load and run a child in exploratory Rosetta/Docker probes, but claim expansion still needs all three companions and full qualification. Scene Glass setup/start and its x64 secure-read prebuilds are separate; reinstalling OMO cannot expand the work-provider claim.
125
+ - `SCG_OMO_RUNTIME_AUTHORITY_ABSENT`: this build carries no approved runtime; use a release build.
126
+
127
+ Refused requests were never sent and are never replayed. A conversation the approved runtime can't reopen fails with `SCG_OMO_CONVERSATION_INCOMPATIBLE`, keeps its bytes, and continues only after **새 세션 시작**. Recovery from a bad runtime is always a newer forward release, never a package downgrade. Qualification uses a loopback model and doesn't certify live subscriptions. The repository's `docs/operations/omo-runtime.md` covers repair, maintainer qualification and adoption, and the runtime license inventory.
128
+
129
+ ## Upgrade and recovery
130
+
131
+ 0.1.32로 업그레이드한 뒤 0.1.31의 Claude/Codex 대화는 **새 세션 시작**으로 이어가며 기존 대화는 보존되고, OMO 대화는 이전처럼 계속됩니다.
132
+
133
+ Upgrades are one exact-version install followed by one setup, which re-verifies the installed artifacts against the release manifest, migrates lifecycle state from the prior release, and verifies the new release's runtime packages, which arrive in the same install. Skipped releases back to 0.1.19 upgrade in the same single setup; an unknown older release is rejected:
134
+
135
+ ```sh
136
+ npm install --save-dev --save-exact --ignore-scripts @scene-glass/devtools@0.1.32
137
+ ```
138
+
139
+ ```sh
140
+ npx scene-glass setup
141
+ ```
142
+
143
+ If an upgrade stops with a recovery-required receipt, don't hand-edit `.scg/`. Rerun setup to finish the crash-safe migration, or reverse the integration:
144
+
145
+ ```sh
146
+ npx scene-glass uninstall
147
+ ```
148
+
149
+ Uninstall is provenance-first. It validates every owned target before changing anything, removes only what setup still owns (the plugin entry, the credential file it created, its own lifecycle state), and never touches your annotations under `<project-root>/.scg/annotations`.
150
+
151
+ ## What this protects, and what it doesn't
152
+
153
+ Be clear-eyed about the boundary:
154
+
155
+ - The npm tarball contains the premium measurement ESM and CSS as plain, minified bytes. Anyone who installs the package can extract them and import them directly. There's no obfuscation strong enough to stop that, and no attempt to pretend otherwise.
156
+ - Authenticated local routes and integrity checks protect the supported measurement activation path.
157
+ - There's no DRM, no license enforcement in the runtime, no delivery control over which bytes reach a machine, and no way to unload code a browser has already loaded.
158
+ - The package ships without sourcemaps or TypeScript source, and its artifacts are hash-pinned in `release-manifest.json`. That raises the cost of analysis. It doesn't make extraction impossible.
159
+
160
+ The measurement module sits behind a fixed provider ABI (`abiVersion: 1`, module id `scene-glass-premium-measurement-v1`). That seam exists so a future release can migrate to a different delivery model without breaking hosts. No remote provider ships in this release, and none is implied by the seam.
161
+
162
+ ## Where things live
163
+
164
+ | Path | Contents |
165
+ | --------------------------------------- | -------------------------------------------------------------- |
166
+ | `~/.scg/config.json` | Schema-v1 project configuration and environment variable names |
167
+ | `~/.scg/credential-authorities.v1.json` | Secretless credential path and device/inode authority |
168
+ | `node_modules/@scene-glass/runtime-*` | Pinned provider runtimes, installed and removed by npm |
169
+ | `<project-root>/.scg/annotations` | Your annotations; never rewritten or removed by uninstall |
170
+ | `<project-root>/.scg/onboarding` | Lifecycle manifest, WAL, and receipts |
171
+ | `<project-root>/.scg/runtime` | Setup-owned host descriptor |
172
+ | `<project-root>/.env.development.local` | Gitignored host credential, deleted only if setup created it |
@@ -0,0 +1,49 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "authority": "pinned",
4
+ "pin": {
5
+ "schemaVersion": 3,
6
+ "sha256": "sha256:dd59de2bec8b0d9e9c086426d12ea39323546424f3f49aa261dc7653c27fdadb",
7
+ "base64": "ewogICJwcm92aWRlciI6ICJjbGF1ZGUtY29kZSIsCiAgInJlbGVhc2UiOiB7CiAgICAibmFtZSI6ICJAc2NlbmUtZ2xhc3MvZGV2dG9vbHMiLAogICAgInZlcnNpb24iOiAiMC4xLjMyIgogIH0sCiAgInZlcnNpb24iOiAiMi4xLjI4OSIsCiAgInBsYXRmb3JtcyI6IFsKICAgIHsKICAgICAgInR1cGxlIjogImRhcndpbi1hcm02NCIsCiAgICAgICJzb3VyY2VLaW5kIjogInVwc3RyZWFtLW5wbSIsCiAgICAgICJydW50aW1lSWQiOiAiYzg5YmEwNzFiNTVlODhiMmEyZWE3OTIwOGQzYzUwOTU3NTE5ZGIxMjQ0YmIwMTM5YWExMWZlMmM3ZjUzZDg3YyIsCiAgICAgICJzb3VyY2VQYWNrYWdlcyI6IFsKICAgICAgICB7CiAgICAgICAgICAibmFtZSI6ICJAYW50aHJvcGljLWFpL2NsYXVkZS1hZ2VudC1zZGstZGFyd2luLWFybTY0IiwKICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMy4yODkiLAogICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItQTFpSzcwSkpnajZHaFNrR25hVkMwMkIxaFgwYVB2V1RibjNhMUZwOWlLaFh0MWE2ZVp3QWhrcWRQK0YvcnpBVlVjUUcyNGVoRy9MQkYyRWM4dEJMMFE9PSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJiaW5hcnlTaGEyNTYiOiAiMDNkNjY3NDVlM2JiNjllYzcyN2Q2NjAyMzY5NmYzODIwYmMwYTAwYThhNWJhNzI1ZWI2NzA2ZDBjNjdjYmU2OSIsCiAgICAgICJyZWNpcGVTaGEyNTYiOiAiOWJjMzBmOTgyMGRkYWVkZjFjNTc1OGY5NGEyZGQ1MDBkYTIyMmZlMzJkOGRjYzM4MjQ1YmZjZjFmY2E2OGIzMiIsCiAgICAgICJhcnRpZmFjdCI6IHsKICAgICAgICAia2luZCI6ICJjYXRhbG9ndWUiLAogICAgICAgICJzaGEyNTYiOiAiOWQwNDZhNzAxM2UyMTlkNmM5MzYyNGVhMWM1YjdhNDljMjY1OGIwMGZmMGNhYmQxMWMwNTU0NDg3ZGY3ZTFkMCIsCiAgICAgICAgInNpemUiOiAxNTE0OTUxOSwKICAgICAgICAibG9jYXRvciI6ICJydW50aW1lLWF1dGhvcml0aWVzLmpzb24iCiAgICAgIH0KICAgIH0KICBdLAogICJhZG1pdHRlZFRyYW5zaXRpb25zIjogWwogICAgewogICAgICAiaWQiOiAiMzA2MjBiMTcyN2M3NGUxNjZiNWMxNDA5ODQ5ZjA0MDZlNWU4YTMxZmVmMmE0MmVjMDFhY2Y5MGVhZWUyYzBjNSIsCiAgICAgICJ0dXBsZSI6ICJkYXJ3aW4tYXJtNjQiLAogICAgICAicHJlZGVjZXNzb3IiOiAiYzg5YmEwNzFiNTVlODhiMmEyZWE3OTIwOGQzYzUwOTU3NTE5ZGIxMjQ0YmIwMTM5YWExMWZlMmM3ZjUzZDg3YyIsCiAgICAgICJ0YXJnZXRSdW50aW1lSWQiOiAiYzg5YmEwNzFiNTVlODhiMmEyZWE3OTIwOGQzYzUwOTU3NTE5ZGIxMjQ0YmIwMTM5YWExMWZlMmM3ZjUzZDg3YyIsCiAgICAgICJ0YXJnZXRWZXJzaW9uIjogIjIuMS4yODkiCiAgICB9CiAgXSwKICAic2NoZW1hVmVyc2lvbiI6IDMsCiAgInJlc3RhcnRSZXF1aXJlZFByZWRlY2Vzc29ycyI6IFsKICAgICJmOWI2OWUyYTE1MzJkZGNlOGI2MGFjMWQ2MTM1MGQ0ODg2M2FjNzg0OWNjOWVkNzQ5MWZhNGQ4YjQ4ZWJkYmU0IgogIF0KfQo="
8
+ },
9
+ "provider": "claude-code",
10
+ "release": {
11
+ "name": "@scene-glass/devtools",
12
+ "version": "0.1.32"
13
+ },
14
+ "version": "2.1.289",
15
+ "platforms": [
16
+ {
17
+ "tuple": "darwin-arm64",
18
+ "sourceKind": "upstream-npm",
19
+ "runtimeId": "c89ba071b55e88b2a2ea79208d3c50957519db1244bb0139aa11fe2c7f53d87c",
20
+ "sourcePackages": [
21
+ {
22
+ "name": "@anthropic-ai/claude-agent-sdk-darwin-arm64",
23
+ "version": "0.3.289",
24
+ "integrity": "sha512-A1iK70JJgj6GhSkGnaVC02B1hX0aPvWTbn3a1Fp9iKhXt1a6eZwAhkqdP+F/rzAVUcQG24ehG/LBF2Ec8tBL0Q=="
25
+ }
26
+ ],
27
+ "binarySha256": "03d66745e3bb69ec727d66023696f3820bc0a00a8a5ba725eb6706d0c67cbe69",
28
+ "recipeSha256": "9bc30f9820ddaedf1c5758f94a2dd500da222fe32d8dcc38245bfcf1fca68b32",
29
+ "artifact": {
30
+ "kind": "catalogue",
31
+ "sha256": "9d046a7013e219d6c93624ea1c5b7a49c2658b00ff0cabd11c0554487df7e1d0",
32
+ "size": 15149519,
33
+ "locator": "runtime-authorities.json"
34
+ }
35
+ }
36
+ ],
37
+ "admittedTransitions": [
38
+ {
39
+ "id": "30620b1727c74e166b5c1409849f0406e5e8a31fef2a42ec01acf90eaee2c0c5",
40
+ "tuple": "darwin-arm64",
41
+ "predecessor": "c89ba071b55e88b2a2ea79208d3c50957519db1244bb0139aa11fe2c7f53d87c",
42
+ "targetRuntimeId": "c89ba071b55e88b2a2ea79208d3c50957519db1244bb0139aa11fe2c7f53d87c",
43
+ "targetVersion": "2.1.289"
44
+ }
45
+ ],
46
+ "restartRequiredPredecessors": [
47
+ "f9b69e2a1532ddce8b60ac1d61350d48863ac7849cc9ed7491fa4d8b48ebdbe4"
48
+ ]
49
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "provider": "claude-code",
3
+ "release": {
4
+ "name": "@scene-glass/devtools",
5
+ "version": "0.1.32"
6
+ },
7
+ "version": "2.1.289",
8
+ "platforms": [
9
+ {
10
+ "tuple": "darwin-arm64",
11
+ "sourceKind": "upstream-npm",
12
+ "runtimeId": "c89ba071b55e88b2a2ea79208d3c50957519db1244bb0139aa11fe2c7f53d87c",
13
+ "sourcePackages": [
14
+ {
15
+ "name": "@anthropic-ai/claude-agent-sdk-darwin-arm64",
16
+ "version": "0.3.289",
17
+ "integrity": "sha512-A1iK70JJgj6GhSkGnaVC02B1hX0aPvWTbn3a1Fp9iKhXt1a6eZwAhkqdP+F/rzAVUcQG24ehG/LBF2Ec8tBL0Q=="
18
+ }
19
+ ],
20
+ "binarySha256": "03d66745e3bb69ec727d66023696f3820bc0a00a8a5ba725eb6706d0c67cbe69",
21
+ "recipeSha256": "9bc30f9820ddaedf1c5758f94a2dd500da222fe32d8dcc38245bfcf1fca68b32",
22
+ "artifact": {
23
+ "kind": "catalogue",
24
+ "sha256": "9d046a7013e219d6c93624ea1c5b7a49c2658b00ff0cabd11c0554487df7e1d0",
25
+ "size": 15149519,
26
+ "locator": "runtime-authorities.json"
27
+ }
28
+ }
29
+ ],
30
+ "admittedTransitions": [
31
+ {
32
+ "id": "30620b1727c74e166b5c1409849f0406e5e8a31fef2a42ec01acf90eaee2c0c5",
33
+ "tuple": "darwin-arm64",
34
+ "predecessor": "c89ba071b55e88b2a2ea79208d3c50957519db1244bb0139aa11fe2c7f53d87c",
35
+ "targetRuntimeId": "c89ba071b55e88b2a2ea79208d3c50957519db1244bb0139aa11fe2c7f53d87c",
36
+ "targetVersion": "2.1.289"
37
+ }
38
+ ],
39
+ "schemaVersion": 3,
40
+ "restartRequiredPredecessors": [
41
+ "f9b69e2a1532ddce8b60ac1d61350d48863ac7849cc9ed7491fa4d8b48ebdbe4"
42
+ ]
43
+ }