@uppercut-labs/agent-native 0.0.0-stage → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +164 -2
- package/agent/agent-prompt-short.md +1 -0
- package/agent/agent-prompt.md +26 -0
- package/bin/agent-native-site.mjs +269 -0
- package/bin/discover-routes.mjs +162 -0
- package/bin/verify-publication.mjs +317 -0
- package/dist/adapters/zod.d.ts +4 -0
- package/dist/adapters/zod.d.ts.map +1 -0
- package/dist/adapters/zod.js +20 -0
- package/dist/adapters/zod.js.map +1 -0
- package/dist/astro.d.ts +13 -0
- package/dist/astro.d.ts.map +1 -0
- package/dist/astro.js +41 -0
- package/dist/astro.js.map +1 -0
- package/dist/auth.d.ts +52 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +128 -0
- package/dist/auth.js.map +1 -0
- package/dist/browser.d.ts +47 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +219 -0
- package/dist/browser.js.map +1 -0
- package/dist/cli.d.ts +80 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +484 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/assert-never.d.ts +2 -0
- package/dist/core/assert-never.d.ts.map +1 -0
- package/dist/core/assert-never.js +5 -0
- package/dist/core/assert-never.js.map +1 -0
- package/dist/core/binding-internal.d.ts +10 -0
- package/dist/core/binding-internal.d.ts.map +1 -0
- package/dist/core/binding-internal.js +15 -0
- package/dist/core/binding-internal.js.map +1 -0
- package/dist/core/composition.d.ts +119 -0
- package/dist/core/composition.d.ts.map +1 -0
- package/dist/core/composition.js +545 -0
- package/dist/core/composition.js.map +1 -0
- package/dist/core/contracts.d.ts +55 -0
- package/dist/core/contracts.d.ts.map +1 -0
- package/dist/core/contracts.js +271 -0
- package/dist/core/contracts.js.map +1 -0
- package/dist/core/diagnostics.d.ts +14 -0
- package/dist/core/diagnostics.d.ts.map +1 -0
- package/dist/core/diagnostics.js +29 -0
- package/dist/core/diagnostics.js.map +1 -0
- package/dist/core/executor.d.ts +52 -0
- package/dist/core/executor.d.ts.map +1 -0
- package/dist/core/executor.js +98 -0
- package/dist/core/executor.js.map +1 -0
- package/dist/core/registry.d.ts +37 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +75 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/schema.d.ts +9 -0
- package/dist/core/schema.d.ts.map +1 -0
- package/dist/core/schema.js +36 -0
- package/dist/core/schema.js.map +1 -0
- package/dist/discovery.d.ts +16 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +23 -0
- package/dist/discovery.js.map +1 -0
- package/dist/doctor.d.ts +200 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +287 -0
- package/dist/doctor.js.map +1 -0
- package/dist/harness-codex.d.ts +17 -0
- package/dist/harness-codex.d.ts.map +1 -0
- package/dist/harness-codex.js +485 -0
- package/dist/harness-codex.js.map +1 -0
- package/dist/harness-mcp-bridge.d.ts +14 -0
- package/dist/harness-mcp-bridge.d.ts.map +1 -0
- package/dist/harness-mcp-bridge.js +159 -0
- package/dist/harness-mcp-bridge.js.map +1 -0
- package/dist/harness.d.ts +72 -0
- package/dist/harness.d.ts.map +1 -0
- package/dist/harness.js +101 -0
- package/dist/harness.js.map +1 -0
- package/dist/http.d.ts +20 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +537 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +73 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +1039 -0
- package/dist/init.js.map +1 -0
- package/dist/mcp-apps.d.ts +9 -0
- package/dist/mcp-apps.d.ts.map +1 -0
- package/dist/mcp-apps.js +171 -0
- package/dist/mcp-apps.js.map +1 -0
- package/dist/mcp-core.d.ts +64 -0
- package/dist/mcp-core.d.ts.map +1 -0
- package/dist/mcp-core.js +358 -0
- package/dist/mcp-core.js.map +1 -0
- package/dist/mcp.d.ts +3 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +2 -0
- package/dist/mcp.js.map +1 -0
- package/dist/next-browser.d.ts +14 -0
- package/dist/next-browser.d.ts.map +1 -0
- package/dist/next-browser.js +14 -0
- package/dist/next-browser.js.map +1 -0
- package/dist/next.d.ts +24 -0
- package/dist/next.d.ts.map +1 -0
- package/dist/next.js +28 -0
- package/dist/next.js.map +1 -0
- package/dist/package-version.d.ts +2 -0
- package/dist/package-version.d.ts.map +1 -0
- package/dist/package-version.js +3 -0
- package/dist/package-version.js.map +1 -0
- package/dist/publication.d.ts +115 -0
- package/dist/publication.d.ts.map +1 -0
- package/dist/publication.js +441 -0
- package/dist/publication.js.map +1 -0
- package/dist/registry.d.ts +3 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +2 -0
- package/dist/registry.js.map +1 -0
- package/docs/adopt-existing-site.md +189 -0
- package/docs/browser.md +70 -0
- package/docs/capabilities-and-bindings.md +141 -0
- package/docs/cli.md +88 -0
- package/docs/compatibility.md +32 -0
- package/docs/composition-and-versioning.md +113 -0
- package/docs/doctor-and-troubleshooting.md +58 -0
- package/docs/evidence/GHSA-ch52-4w7c-c8xp-2026-10-03.md +17 -0
- package/docs/evidence/GHSA-ch52-4w7c-c8xp-2026-10-10.md +30 -0
- package/docs/evidence/GHSA-ch52-4w7c-c8xp-2026-10-12.md +10 -0
- package/docs/evidence/UAN-002-house-style-review.md +29 -0
- package/docs/evidence/UAN-007-astro.md +43 -0
- package/docs/evidence/UAN-008-worker-sidecar.md +56 -0
- package/docs/evidence/UAN-009-init.md +43 -0
- package/docs/evidence/UAN-010-auth.md +17 -0
- package/docs/evidence/UAN-011-discovery.md +18 -0
- package/docs/evidence/UAN-012-mcp-apps.md +14 -0
- package/docs/evidence/UAN-013-astro-on-demand.md +47 -0
- package/docs/evidence/UAN-014-next.md +57 -0
- package/docs/evidence/UAN-015-node-hono.md +69 -0
- package/docs/evidence/UAN-016-composition.md +52 -0
- package/docs/evidence/UAN-017-version-migrations.md +50 -0
- package/docs/evidence/UAN-018-surface-overrides.md +30 -0
- package/docs/evidence/UAN-019-doctor.md +19 -0
- package/docs/evidence/UAN-020-negative-security-fixtures.md +61 -0
- package/docs/evidence/UAN-020-operational-failure-safety.md +49 -0
- package/docs/evidence/UAN-021-docs-coverage.md +30 -0
- package/docs/evidence/UAN-022-cross-platform-license-notices.md +39 -0
- package/docs/evidence/UAN-022-overhead-license-audit.md +233 -0
- package/docs/evidence/UAN-022-package-portability.md +54 -0
- package/docs/evidence/UAN-023-commercial-agent-hosts.md +36 -0
- package/docs/evidence/UAN-023-inspector-host-probe.md +37 -0
- package/docs/evidence/UAN-023-inspector-web-and-astro-adoption.md +44 -0
- package/docs/evidence/UAN-023-native-webmcp-chrome.md +44 -0
- package/docs/evidence/UAN-024-release-readiness-2026-10-10.md +33 -0
- package/docs/evidence/UAN-024-release-readiness.md +41 -0
- package/docs/evidence/codex-harness.md +56 -0
- package/docs/evidence/gate-2-domain-expansion.md +35 -0
- package/docs/evidence/recovery-and-selection-recipes-2026-10-15.md +63 -0
- package/docs/for-agents.md +50 -0
- package/docs/frameworks.md +62 -0
- package/docs/getting-started.md +109 -0
- package/docs/harness-codex.md +117 -0
- package/docs/harness-mcp-bridge.md +30 -0
- package/docs/http.md +80 -0
- package/docs/installation.md +95 -0
- package/docs/mcp-apps.md +57 -0
- package/docs/mcp.md +178 -0
- package/docs/next.md +73 -0
- package/docs/permissions-and-discovery.md +58 -0
- package/docs/programmatic-harness.md +88 -0
- package/docs/readability-frameworks.md +18 -0
- package/docs/reference.md +161 -0
- package/docs/release-handoff.md +41 -0
- package/docs/site-publication.md +85 -0
- package/docs/stability.md +53 -0
- package/docs/static-sites.md +141 -0
- package/docs/support-and-limitations.md +20 -0
- package/docs/surfaces.md +27 -0
- package/docs/upgrading-to-1.0.md +26 -0
- package/package.json +188 -4
- package/skill/agent-native/SKILL.md +54 -0
- package/skill/agent-native/references/adapter-decision.md +19 -0
- package/skill/agent-native/references/verification.md +25 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# UAN-017 version migration evidence
|
|
2
|
+
|
|
3
|
+
## Scope
|
|
4
|
+
|
|
5
|
+
The portable composition entrypoint now provides exact-major selection, stable explicit aliases,
|
|
6
|
+
structural definition comparisons, same-ID breaking replacement rejection, reviewed major migration
|
|
7
|
+
records, explicit lifecycle policy, and guarded pack migration validation. It does not import
|
|
8
|
+
handlers or runtime adapters.
|
|
9
|
+
|
|
10
|
+
E08 independently packs a contract-only album package containing v1 and v2. Its old binding uses the
|
|
11
|
+
shared internal data lookup while retaining the single-title output. Its new binding requires locale
|
|
12
|
+
and returns localized titles. JSON fixtures lock both shapes.
|
|
13
|
+
|
|
14
|
+
## Reproduction
|
|
15
|
+
|
|
16
|
+
From the repository root:
|
|
17
|
+
|
|
18
|
+
```sh
|
|
19
|
+
npm run build
|
|
20
|
+
node --test test/composition.test.mjs test/public-exports.test.mjs
|
|
21
|
+
npm run typecheck
|
|
22
|
+
npm run lint
|
|
23
|
+
npm run format:check
|
|
24
|
+
npm run example:e08
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
The E08 suite checks exact selection and alias stability, distinct outputs, structural default/unit,
|
|
28
|
+
rename and required-field reporting, mandatory semantic review for schema-identical majors,
|
|
29
|
+
same-identity replacement rejection, implicit retirement rejection, independent consumer processes,
|
|
30
|
+
and the contract-only import boundary.
|
|
31
|
+
|
|
32
|
+
Observed on `research` (Darwin arm64, Node 24.18.0, npm 11.16.0): typecheck, format check, build,
|
|
33
|
+
and focused lint exited successfully after the final review fixes. The full lint had exited
|
|
34
|
+
successfully before those fixes. The focused composition/public-export suite passed 14/14. Biome
|
|
35
|
+
reported non-fatal style suggestions in the schema-diff code. The standalone E08 harness
|
|
36
|
+
packed and installed both packages from tarballs, passed 9/9 tests with zero audited vulnerabilities
|
|
37
|
+
in that exported fixture, and returned the v1 `Kind of Blue` output. `git diff --check` passed.
|
|
38
|
+
|
|
39
|
+
The post-review tests reject a spoofed pack authority, a structural multi-major pack without
|
|
40
|
+
reviewed migration policy, forged semantic/contract reports, a new property in a closed v1 output
|
|
41
|
+
schema under the same ID, and fake lifecycle `get()` claims without matching entries. E03's
|
|
42
|
+
lockfile export fix and E12's canonical ID remain untouched. A full repository suite was not rerun
|
|
43
|
+
for this focused slice.
|
|
44
|
+
|
|
45
|
+
## Limits
|
|
46
|
+
|
|
47
|
+
- Structural comparison reports only information represented in JSON Schema and risk/access metadata.
|
|
48
|
+
- Rename detection matches a unique removed/added property with identical structure; review determines intent.
|
|
49
|
+
- Lifecycle policy is local application metadata; no remote registry or package signature is provided.
|
|
50
|
+
- Removal validation enforces a prior deprecated state but does not schedule retention or notify consumers.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# UAN-018 surface override and schema evidence
|
|
2
|
+
|
|
3
|
+
## Scope
|
|
4
|
+
|
|
5
|
+
A definition may explicitly choose an HTTP path/method and a CLI command/aliases. GET is restricted to read capabilities with a representable top-level query schema. The HTTP handler, generated OpenAPI operation, local CLI, and remote CLI use that definition. Defaults retain the canonical POST route and canonical CLI identity. This is a local implementation slice, not a production host certification.
|
|
6
|
+
|
|
7
|
+
E10 exports the unchanged existing `searchContent({ query, limit })` function and data from `service-before` into a fresh consumer. Its new binding preserves `GET /api/content/search?q=night&limit=1`, exposes `content-search` and `search`, and leaves unrelated health and content routes available. The before-state source files were not edited.
|
|
8
|
+
|
|
9
|
+
## Reproduction and observed results
|
|
10
|
+
|
|
11
|
+
On canonical `research` (Darwin arm64, Node 25.9.0, npm 11.12.1) after integrating the isolated Node 24 worker:
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
npm run typecheck
|
|
15
|
+
npm run build
|
|
16
|
+
node --test test/composition.test.mjs test/http.test.mjs test/cli.test.mjs test/zod.test.mjs
|
|
17
|
+
npm run example:e10
|
|
18
|
+
npm run example:e12
|
|
19
|
+
npm run docs:check
|
|
20
|
+
npm run format:check
|
|
21
|
+
npm run lint
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
All commands exited successfully. The focused root suite passed 36/36, fresh E10 installed from a package tarball and passed 4/4 plus a CLI smoke call, E12 passed 6/6, and the docs checker validated 27 HTML pages and 26 search entries. The E10 and E12 exported installs each reported zero audit vulnerabilities. The isolated worker had already passed Node 24 typecheck/build/format/lint, 24 focused tests, and fresh E10 4/4. A full local repository suite was not repeated; Node 22/24 CI is the integration gate.
|
|
25
|
+
|
|
26
|
+
Negative tests cover GET on a write capability, duplicate HTTP routes and CLI aliases, unsupported or malformed query conversions, missing/invalid input, bounded GET query bytes, non-finite JSON numbers, unsupported Zod transforms, invalid output, and a JSON `__proto__` field without prototype mutation. Remote CLI calls follow the overridden GET route and query mapping. Same-ID surface changes now fail the UAN-017 compatibility guard; a description-only change remains compatible.
|
|
27
|
+
|
|
28
|
+
## Limits
|
|
29
|
+
|
|
30
|
+
The GET projection supports documented scalar and flat-array query fields; nested objects and unsupported conversions fail rather than being coerced. The example uses a local Node host and synthetic public data. It does not validate an external API gateway, deployed identity, browser agent, or npm registry installation. The public package remains `private: true` at `0.0.0`.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# UAN-019 doctor evidence
|
|
2
|
+
|
|
3
|
+
This integration adds the `./doctor` public subpath and E11 fault/repair fixture to the unreleased `0.0.0` source package. The report schema is `uan.doctor-report/v1`; findings use stable `checkId` values, explicit evidence levels and sources, and selected/required check profiles. The E11 `local` profile selects six configuration and artifact checks. The `full` profile adds endpoint reachability and a fixture-specific health exchange. It does not claim a real host.
|
|
4
|
+
|
|
5
|
+
## Canonical research checkout verification
|
|
6
|
+
|
|
7
|
+
On macOS research with Node 24.18.0, after integrating UAN-018, UAN-020, and the bounded UAN-021 docs slice:
|
|
8
|
+
|
|
9
|
+
- `npm run typecheck` and `npm run build` passed.
|
|
10
|
+
- `node --test test/doctor.test.mjs test/discovery.test.mjs` passed 7/7, including Ajv validation of a serialized doctor report, invalid schema fields, required profile behavior, exception redaction, and policy-filtered listing without handler calls.
|
|
11
|
+
- `npm run example:e11` built and packed the current package, installed an independent pinned E11 export, and passed its 7/7 tests. The fault variants and repaired variants include a destructive canary that must not run during diagnostics.
|
|
12
|
+
- `npm run docs:check` rendered 29 documentation pages and validated 30 generated HTML pages and 29 search entries after the doctor guide was added.
|
|
13
|
+
- Scoped Biome format/lint and `git diff --check` passed.
|
|
14
|
+
|
|
15
|
+
The isolated worker also passed Node 24 typecheck/build, the same targeted doctor tests, and a fresh E11 standalone export before integration. CI on Node 22/24 is a separate gate and should be linked after this commit is pushed.
|
|
16
|
+
|
|
17
|
+
## Boundaries
|
|
18
|
+
|
|
19
|
+
No doctor check makes a network request by default. An explicit E11 loopback probe can verify its local health fixture only. Missing endpoint or browser context remains unknown/skipped. No production identity, real browser, remote MCP host, or application data is verified. Registry inspection and authorized listing are read-only and cannot replace execution-time authorization. The checked-in E11 values are fake local fixtures; real applications provide their own checks and controlled evidence sources.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# UAN-020 negative security fixture evidence
|
|
2
|
+
|
|
3
|
+
This slice adds deterministic local fixtures for E07 authorization, identity, and MCP App
|
|
4
|
+
resource behavior. Tests use official SDK clients over loopback HTTP. No production identity provider,
|
|
5
|
+
remote MCP host, browser sandbox, or production network service is exercised.
|
|
6
|
+
|
|
7
|
+
## Demonstrated behavior
|
|
8
|
+
|
|
9
|
+
- E07 rechecks a durable grant on the next same-client call. After delete access is revoked, the tool
|
|
10
|
+
disappears from discovery, direct invocation is denied, the target playlist survives, and the other
|
|
11
|
+
tenant's playlist remains unchanged.
|
|
12
|
+
- Wrong-issuer, wrong-audience, expired, low-scope, malformed, oversized, cross-tenant, hidden-tool,
|
|
13
|
+
and revoked calls do not mutate playlist state. Negative responses do not reflect the fixture token
|
|
14
|
+
or adversarial payload sentinels.
|
|
15
|
+
- Two tenants have independent grants and record ownership. Revoking Alice's delete grant does not
|
|
16
|
+
change Bob's playlist or grant.
|
|
17
|
+
- MCP App registration rejects non-`ui://` schemes, traversal segments, undeclared capability IDs,
|
|
18
|
+
protocol-relative scripts, and external CSS origins. A legitimate bundled resource completes an
|
|
19
|
+
SDK list/read roundtrip with `text/html;profile=mcp-app`.
|
|
20
|
+
- MCP App resources inherit capability discovery. An anonymous client cannot list or directly read a
|
|
21
|
+
protected resource. An authenticated client can read it while its grant is live; after revocation,
|
|
22
|
+
the next list/read in that same client session is denied without executing the protected binding.
|
|
23
|
+
- The E07 process refuses empty or missing explicit persistence paths. A canary starts it in an empty temporary working
|
|
24
|
+
directory and verifies failure creates no default files. This is an E07-only no-default-mutation
|
|
25
|
+
claim, not evidence about CLI init or doctor behavior.
|
|
26
|
+
|
|
27
|
+
## Reproduction
|
|
28
|
+
|
|
29
|
+
Run from the repository root with the checked-in dependency set:
|
|
30
|
+
|
|
31
|
+
```sh
|
|
32
|
+
npm run build
|
|
33
|
+
node --test test/mcp.test.mjs test/mcp-apps-security.test.mjs
|
|
34
|
+
npm run example:e07
|
|
35
|
+
npm run example:e09
|
|
36
|
+
npx biome format src/mcp-apps.ts test/mcp.test.mjs test/mcp-apps-security.test.mjs examples/e07-playlist-permissions/project/src/server.mjs examples/e07-playlist-permissions/project/test/e07.test.mjs
|
|
37
|
+
npx biome lint src/mcp-apps.ts test/mcp.test.mjs test/mcp-apps-security.test.mjs examples/e07-playlist-permissions/project/src/server.mjs examples/e07-playlist-permissions/project/test/e07.test.mjs
|
|
38
|
+
npm run typecheck
|
|
39
|
+
git diff --check
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Record the exact local command results in the UAN-020 handoff; this note does not treat commands as
|
|
43
|
+
passing until they have run in the integration worktree.
|
|
44
|
+
|
|
45
|
+
## Limits and integration dependencies
|
|
46
|
+
|
|
47
|
+
- Static token names and the JSON stores exist only in explicit E07 test mode. They are not a JWT
|
|
48
|
+
implementation, production credential, cross-process lock, or production persistence design.
|
|
49
|
+
- The MCP transport is loopback HTTP using official SDK clients. No commercial host, iframe origin,
|
|
50
|
+
CSP enforcement engine, OAuth server, intermediary cache, or concurrent distributed session was tested.
|
|
51
|
+
Deployed cache-control and cross-surface cache isolation remain open.
|
|
52
|
+
- UAN-018 owns CLI, HTTP, and contract integration. UAN-019 owns doctor integration. This slice makes
|
|
53
|
+
no claim about those surfaces and does not edit their files.
|
|
54
|
+
- The no-default-mutation canary is intentionally limited to E07's explicit local persistence paths.
|
|
55
|
+
UAN-018/UAN-019 must integrate their own init/doctor mutation evidence before a cross-surface claim.
|
|
56
|
+
|
|
57
|
+
## Isolated research verification
|
|
58
|
+
|
|
59
|
+
At public base 0257a9b, the isolated research checkout passed Node 24 typecheck and build, the focused MCP test file (13/13), the MCP App security regressions (2/2), standalone E07 (4/4), and standalone E09 (3/3). Scoped Biome format and lint passed; lint emitted only existing template-literal style suggestions. This is local fixture evidence, not canonical CI or real-host verification.
|
|
60
|
+
|
|
61
|
+
The first standalone E07 run failed 3/4 because the fixture accepted empty persistence paths and its new canary waited for a process that had started. The fixture now rejects empty paths and the canary has a three-second deadline. The second standalone E07 run passed 4/4. The MCP App validator now checks URL-bearing attributes across tags, rejects entity-bearing URL values and external candidates in srcset, and rejects meta refresh directives while allowing bundled relative resources. The focused regressions include unquoted script/image URLs, character references, mixed srcset, form/base URLs, quoted-attribute delimiters, CSS URL/import/escape attempts, and caller mutation after validation. The validator returns frozen copies of the reviewed resource fields. Host CSP enforcement remains a separate unverified boundary.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# UAN-020 operational failure safety evidence
|
|
2
|
+
|
|
3
|
+
This is a local fixture result from an isolated research checkout at public base `8a502b5` on
|
|
4
|
+
Node.js 24.18.0. It extends the E07/MCP App threat-fixture note without claiming a deployed host.
|
|
5
|
+
|
|
6
|
+
## Timed-out writes
|
|
7
|
+
|
|
8
|
+
A protected MCP write used the official client/server SDK over loopback HTTP, a fixture token and
|
|
9
|
+
current in-memory grant, and a 20 ms deadline. Its handler deliberately ignored the aborted signal,
|
|
10
|
+
then committed after 60 ms. The client received a tool error saying the write may have completed and
|
|
11
|
+
warning against retry. After the handler settled, the test observed one invocation, one commit and
|
|
12
|
+
an aborted signal. The adapter made no second invocation. This demonstrates uncertain completion,
|
|
13
|
+
not cancellation or at-most-once semantics under a real network retry.
|
|
14
|
+
|
|
15
|
+
The generated HTTP adapter and remote CLI currently expose public reads only. A direct protected
|
|
16
|
+
HTTP write returned `404` before its binding ran. The same protected write submitted to remote CLI
|
|
17
|
+
returned `capability-unavailable` before its fetcher or binding ran. CLI local mode has no timeout
|
|
18
|
+
implementation. These are explicit surface limits, not write-timeout
|
|
19
|
+
claims for HTTP or CLI.
|
|
20
|
+
|
|
21
|
+
## Default operation and browser boundary
|
|
22
|
+
|
|
23
|
+
Default init detection and plan creation left the sample project directory, Astro config and
|
|
24
|
+
lockfile byte-identical and created no provisioning canary marker. E11's fresh packed install
|
|
25
|
+
passed seven fixture checks: its default doctor scans eight fault/repair scenarios without calling
|
|
26
|
+
any capability handler or destructive canary. An application can supply its own doctor observer;
|
|
27
|
+
that observer's side effects remain an application responsibility. The E07 server's separate
|
|
28
|
+
no-default-persistence-path canary is recorded in the threat-fixture note.
|
|
29
|
+
|
|
30
|
+
E03's fresh packed Next.js production build found the fake server-only sentinel in one server
|
|
31
|
+
artifact and absent from 20 browser artifacts, including nine browser source maps. A negative
|
|
32
|
+
control appended that sentinel to one emitted browser source map; the scanner failed with
|
|
33
|
+
`server-only sentinel leaked into browser artifacts`. The map was restored byte-for-byte and the
|
|
34
|
+
scanner then passed again. The sentinel is deliberately fake; this does not prove absence of every
|
|
35
|
+
possible secret in arbitrary future application code. No deployed browser was tested.
|
|
36
|
+
|
|
37
|
+
## Focused reproduction
|
|
38
|
+
|
|
39
|
+
```sh
|
|
40
|
+
npm run typecheck
|
|
41
|
+
npm run build
|
|
42
|
+
node --test test/mcp.test.mjs test/cli.test.mjs test/http.test.mjs test/init.test.mjs
|
|
43
|
+
npm run example:e11
|
|
44
|
+
npm run example:e03
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
The source-map negative control was run against E03's ignored `.exported/.next/static` output and
|
|
48
|
+
restored afterward; it did not change tracked fixture files. Only focused checks were run in this
|
|
49
|
+
isolated clone. Broad Node 22/24 CI and real-host validation remain integration gates.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# UAN-021 documentation coverage evidence
|
|
2
|
+
|
|
3
|
+
This documentation audit used an isolated clone on `research` at public base
|
|
4
|
+
`79f7e4ea8324ed616d83c04715a1eaf4dd175144`, Node.js 24.18.0 and
|
|
5
|
+
`npm ci --ignore-scripts --no-audit --no-fund`. The clone has no canonical
|
|
6
|
+
Git remote write. The package remains private at `0.0.0`.
|
|
7
|
+
|
|
8
|
+
## Checked result
|
|
9
|
+
|
|
10
|
+
- Every E01-E12 coverage record now carries requirement IDs and a guide with a
|
|
11
|
+
source-backed region from that example's tested project source. The docs
|
|
12
|
+
coverage validator rejects missing paths, stale negative probes, missing
|
|
13
|
+
source regions, omitted example scripts, and missing CI wiring.
|
|
14
|
+
- The generated reference lists the 18 current typed package subpaths and
|
|
15
|
+
runner flags and typed adapter configuration directly from `package.json` and checked source. A parser
|
|
16
|
+
option or guarded bound change requires a reference update.
|
|
17
|
+
- Public guides now give a Node prerequisite, root export command, expected
|
|
18
|
+
fixture result, relevant failure and repair, and source or example link.
|
|
19
|
+
Compatibility and support statements were reconciled with the existing
|
|
20
|
+
E01-E12 fixtures. They do not claim production or universal host support.
|
|
21
|
+
- `node --test docs-site/coverage-check.test.mjs docs-site/source-regions.test.mjs docs-site/reference.test.mjs`
|
|
22
|
+
passed 8 of 8 focused tests. `npm run docs:check` built 36 HTML
|
|
23
|
+
pages including the home page, verified 35 search entries, and validated
|
|
24
|
+
twelve example coverage records. `node --check` passed for ten
|
|
25
|
+
source files with new marker comments; scoped Biome format/lint passed.
|
|
26
|
+
|
|
27
|
+
The docs command validates wiring and generated pages. This audit did not
|
|
28
|
+
rerun all twelve exported projects; that is the root `npm run check` gate
|
|
29
|
+
on Node 22/24 CI. It did not test deployed docs, physical browsers, native
|
|
30
|
+
WebMCP, a commercial MCP Apps host, or an npm installation.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# UAN-022 cross-platform optional-integration license and notice review
|
|
2
|
+
|
|
3
|
+
Checked 2026-10-10 on macOS arm64 with Node 26.10.0 and npm 11.19.1. The consumer depended on the published `@uppercut-labs/agent-native@0.1.1` registry tarball (SHA-256 `a1ce884f89eadba319d6fbad5c9b09b05575a7ab15998bcfd4a6ad8cc8228fbb`) plus the pinned optional integrations `@modelcontextprotocol/server@2.3.0`, `@modelcontextprotocol/ext-apps@2.0.3`, `astro@7.3.5` and `zod@4.6.5`. This extends the [macOS-only inventory](UAN-022-overhead-license-audit.md) to Linux and Windows package trees. It is a package-metadata and shipped-file review, not legal advice.
|
|
4
|
+
|
|
5
|
+
## Method
|
|
6
|
+
|
|
7
|
+
For each target, a fresh project ran `npm install --ignore-scripts --no-audit --no-fund --os=<os> --cpu=<cpu>` (and `--libc=glibc` for Linux). npm then installs the platform-specific optional packages for that target instead of the host's. Every `package-lock.json` entry was matched to a physically installed `package.json`; its `name`, `version` and `license` were recorded, along with any top-level `LICENSE`, `COPYING`, `NOTICE`, `THIRD-PARTY` or `AUTHORS` file. The native binaries were installed, not executed: this checks what an application would redistribute, not runtime behavior on those operating systems.
|
|
8
|
+
|
|
9
|
+
## Result by target
|
|
10
|
+
|
|
11
|
+
| Target | Lockfile paths | Installed packages | Without a top-level license file |
|
|
12
|
+
| --- | ---: | ---: | ---: |
|
|
13
|
+
| darwin arm64 | 304 | 205 | 9 |
|
|
14
|
+
| linux x64 glibc | 304 | 204 | 9 |
|
|
15
|
+
| linux arm64 glibc | 304 | 204 | 9 |
|
|
16
|
+
| win32 x64 | 304 | 203 | 8 |
|
|
17
|
+
|
|
18
|
+
Every installed manifest declared a license. Across targets the license set is the same: MIT, ISC, Apache-2.0, BSD-2-Clause, BSD-3-Clause, BlueOak-1.0.0, CC0-1.0, MPL-2.0, Python-2.0 and LGPL-3.0-or-later. The only differences between targets are the native packages for Astro's compiler, Satteri, esbuild, Rolldown, Sharp/libvips and Lightning CSS, plus macOS-only `fsevents`. Since the earlier inventory, transitive `@rolldown/binding-*` moved from 1.2.12 to 1.2.13 (MIT), and `@img/sharp-win32-x64@0.35.5` declares `Apache-2.0 AND LGPL-3.0-or-later`.
|
|
19
|
+
|
|
20
|
+
## Packages that need application attention
|
|
21
|
+
|
|
22
|
+
| Package | Targets | License | Shipped notice |
|
|
23
|
+
| --- | --- | --- | --- |
|
|
24
|
+
| `@img/sharp-libvips-<platform>@1.3.4` | darwin arm64, linux x64, linux arm64 | LGPL-3.0-or-later | No license text. The README has a table of component licenses. |
|
|
25
|
+
| `@img/sharp-win32-x64@0.35.5` | win32 x64 | Apache-2.0 AND LGPL-3.0-or-later | Has a `LICENSE` file, but it contains only Apache-2.0 text, not the LGPL text. It bundles `libvips-42.dll`. |
|
|
26
|
+
| `lightningcss` and `lightningcss-<platform>@1.33.0` | all | MPL-2.0 | `LICENSE` present |
|
|
27
|
+
| `argparse@2.0.1` | all | Python-2.0 | `LICENSE` present |
|
|
28
|
+
| `lru-cache@11.5.3`, `sax@1.6.1`, `common-ancestor-path@2.0.0` | all | BlueOak-1.0.0 | `LICENSE.md` present |
|
|
29
|
+
| `mdn-data@2.0.28`, `mdn-data@2.27.1` | all | CC0-1.0 | `LICENSE` present |
|
|
30
|
+
|
|
31
|
+
Some MIT/ISC packages ship no top-level license file. They are the platform bindings for `@astrojs/compiler-binding`, `@bruits/satteri`, `@esbuild` and `@rolldown/binding`, plus `am-i-vibing`, `boolbase`, `piccolore` and `process-ancestry`. An application that redistributes them should take the notice from the parent project's repository.
|
|
32
|
+
|
|
33
|
+
## Decision
|
|
34
|
+
|
|
35
|
+
The Agent Native package itself has zero hard runtime dependencies. A core or browser consumer installs only the MIT tarball on every target, as `npm run check:portability` checks. All LGPL, MPL and other notice-bearing packages arrive only when an application chooses the Astro integration. Sharp/libvips arrives through Astro's image pipeline. These packages are present on every target, not just macOS, and on Windows the LGPL component ships inside an Apache-2.0-labeled package.
|
|
36
|
+
|
|
37
|
+
This closes the cross-platform inventory gate for the `0.1.1` preview. No change to the package or its peer ranges is needed. An application that bundles or redistributes an Astro build toolchain, especially a desktop or container image, must collect its own notices. It should use the versions its own lockfile resolves and should not rely on this snapshot. Server and static-site deployments that ship only Astro's build output do not redistribute these build-time packages.
|
|
38
|
+
|
|
39
|
+
To reproduce: create a project with the five dependencies above, run the install command once per target in an empty directory, and compare the lockfile entries with the installed manifests.
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
# UAN-022 focused overhead and resolved license inventory
|
|
2
|
+
|
|
3
|
+
Measured 2026-10-03 on research macOS arm64, Node 24.18.0, from isolated source commit `84a5e479f51177a1321630b3955c6bfb93f2e169`. This is package evidence for the private `0.0.0` candidate, not an npmjs installation or release certification. A normal `npm pack --json` ran `prepack` and built the declared exports. The resulting tarball was 135,833 bytes. All consumers below installed that tarball with `npm install --ignore-scripts --no-audit --no-fund`.
|
|
4
|
+
|
|
5
|
+
## Cold-process invocation and browser bundles
|
|
6
|
+
|
|
7
|
+
| Observation | Samples / scope | Result |
|
|
8
|
+
| --- | --- | --- |
|
|
9
|
+
| `runDoctor` with one required passing fixture check | 12 separate Node processes from a packed core consumer | min 22.608 ms; median 23.446 ms; max 24.685 ms |
|
|
10
|
+
| Application-owned local CLI fixture, `greet --mode local --name Timing` | 12 separate Node processes from the same packed consumer | min 25.981 ms; median 27.482 ms; max 30.809 ms |
|
|
11
|
+
| Synthetic Vite client retaining `createBrowserCapabilityAdapter(document)` from `/browser` | one production build with selected peer tree | 7,392 JS bytes; 2,772 gzip bytes |
|
|
12
|
+
| E06 browser theme example, installed from the same tarball | one production Vite build with Zod 4.6.5 and Vite 8.3.2 | 86,176 JS bytes; 25,532 gzip bytes |
|
|
13
|
+
|
|
14
|
+
Timing used Python `time.perf_counter()` around each `node` subprocess and checked a successful exit. Every sample started a new Node process, while the host file cache and npm cache were warm. The doctor fixture verified an exit-0 report with one finding; it did not contact a remote host. The CLI used the repository's `test/fixtures/packed-cli-smoke.mjs`, including process startup and local execution. The synthetic bundle used `vite build` and assigned the adapter to `window` to prevent tree shaking. Gzip counts use level 9 with a zero timestamp. The synthetic bundle contained no MCP server SDK string. These are observed macOS measurements, not cross-platform performance budgets.
|
|
15
|
+
|
|
16
|
+
## Installed dependency and license metadata
|
|
17
|
+
|
|
18
|
+
The core/browser consumer manifest depended only on the tarball. Its installed runtime tree contained one package, `@uppercut-labs/agent-native@0.0.0`, whose package metadata declares MIT. No optional peers were installed.
|
|
19
|
+
|
|
20
|
+
The selected-integration consumer explicitly depended on the same tarball plus `@modelcontextprotocol/server@2.3.0`, `@modelcontextprotocol/ext-apps@2.0.3`, `astro@7.3.5`, and `zod@4.6.5`. Its resolved lockfile had 303 package paths; 204 package paths were physically installed on this macOS arm64 host and 99 platform-specific or otherwise omitted paths had no installed package manifest. The 204 installed paths represented 204 distinct name/version pairs. Every installed package manifest supplied a license value. Counts by the installed package manifests: Apache-2.0: 8, BSD-2-Clause: 8, BSD-3-Clause: 3, BlueOak-1.0.0: 3, CC0-1.0: 2, ISC: 10, LGPL-3.0-or-later: 1, MIT: 166, MPL-2.0: 2, Python-2.0: 1.
|
|
21
|
+
|
|
22
|
+
The full inventory below records installed package names, versions and package-manifest license metadata; it does not examine license text, notices, bundled binaries, patent terms, or redistribution obligations. In particular, the installed tree includes `@img/sharp-libvips-darwin-arm64@1.3.4` (LGPL-3.0-or-later), `lightningcss@1.33.0` and `lightningcss-darwin-arm64@1.33.0` (MPL-2.0), and `argparse@2.0.1` (Python-2.0). Legal/notice review and inventory on Windows/Linux remain release qualifications for applications selecting these optional integrations. License metadata can change when the consumer resolves newer transitive versions.
|
|
23
|
+
|
|
24
|
+
To reproduce the scope: pack this commit normally; create fresh npm projects with the dependency sets above; run `npm install --ignore-scripts --no-audit --no-fund`; compare each `package-lock.json` entry to a physically installed `node_modules/<entry>/package.json` and read that manifest's `name`, `version` and `license`. The browser client entrypoint is bundled from `import { createBrowserCapabilityAdapter } from '@uppercut-labs/agent-native/browser'`. The E06 result comes from its project `npm run build` with the packed tarball substituted for its local package dependency. No full root test suite was repeated for this evidence.
|
|
25
|
+
|
|
26
|
+
## Resolved installed inventory
|
|
27
|
+
|
|
28
|
+
| Package | Version | Manifest license |
|
|
29
|
+
| --- | --- | --- |
|
|
30
|
+
| `@astrojs/compiler-binding` | 0.5.1 | MIT |
|
|
31
|
+
| `@astrojs/compiler-binding-darwin-arm64` | 0.5.1 | MIT |
|
|
32
|
+
| `@astrojs/compiler-rs` | 0.5.1 | MIT |
|
|
33
|
+
| `@astrojs/internal-helpers` | 0.11.0 | MIT |
|
|
34
|
+
| `@astrojs/markdown-satteri` | 0.4.2 | MIT |
|
|
35
|
+
| `@astrojs/prism` | 4.0.2 | MIT |
|
|
36
|
+
| `@astrojs/telemetry` | 3.3.3 | MIT |
|
|
37
|
+
| `@babel/helper-string-parser` | 7.29.7 | MIT |
|
|
38
|
+
| `@babel/helper-validator-identifier` | 7.29.7 | MIT |
|
|
39
|
+
| `@babel/parser` | 7.29.9 | MIT |
|
|
40
|
+
| `@babel/types` | 7.29.8 | MIT |
|
|
41
|
+
| `@bruits/satteri-darwin-arm64` | 0.10.5 | MIT |
|
|
42
|
+
| `@capsizecss/unpack` | 4.0.1 | MIT |
|
|
43
|
+
| `@clack/core` | 1.5.1 | MIT |
|
|
44
|
+
| `@clack/prompts` | 1.8.1 | MIT |
|
|
45
|
+
| `@esbuild/darwin-arm64` | 0.28.2 | MIT |
|
|
46
|
+
| `@img/colour` | 1.1.0 | MIT |
|
|
47
|
+
| `@img/sharp-darwin-arm64` | 0.35.5 | Apache-2.0 |
|
|
48
|
+
| `@img/sharp-libvips-darwin-arm64` | 1.3.4 | LGPL-3.0-or-later |
|
|
49
|
+
| `@jridgewell/sourcemap-codec` | 1.6.0 | MIT |
|
|
50
|
+
| `@modelcontextprotocol/client` | 2.3.0 | Apache-2.0 |
|
|
51
|
+
| `@modelcontextprotocol/core` | 2.3.0 | Apache-2.0 |
|
|
52
|
+
| `@modelcontextprotocol/ext-apps` | 2.0.3 | MIT |
|
|
53
|
+
| `@modelcontextprotocol/server` | 2.3.0 | Apache-2.0 |
|
|
54
|
+
| `@oslojs/encoding` | 1.1.0 | MIT |
|
|
55
|
+
| `@oxc-project/types` | 0.152.0 | MIT |
|
|
56
|
+
| `@rolldown/binding-darwin-arm64` | 1.2.12 | MIT |
|
|
57
|
+
| `@rolldown/pluginutils` | 1.0.1 | MIT |
|
|
58
|
+
| `@shikijs/core` | 4.5.0 | MIT |
|
|
59
|
+
| `@shikijs/engine-javascript` | 4.5.0 | MIT |
|
|
60
|
+
| `@shikijs/engine-oniguruma` | 4.5.0 | MIT |
|
|
61
|
+
| `@shikijs/langs` | 4.5.0 | MIT |
|
|
62
|
+
| `@shikijs/primitive` | 4.5.0 | MIT |
|
|
63
|
+
| `@shikijs/themes` | 4.5.0 | MIT |
|
|
64
|
+
| `@shikijs/types` | 4.5.0 | MIT |
|
|
65
|
+
| `@shikijs/vscode-textmate` | 10.0.2 | MIT |
|
|
66
|
+
| `@standard-schema/spec` | 1.1.0 | MIT |
|
|
67
|
+
| `@types/estree` | 1.0.9 | MIT |
|
|
68
|
+
| `@types/estree-jsx` | 1.0.5 | MIT |
|
|
69
|
+
| `@types/hast` | 3.0.5 | MIT |
|
|
70
|
+
| `@types/mdast` | 4.0.4 | MIT |
|
|
71
|
+
| `@types/nlcst` | 2.0.3 | MIT |
|
|
72
|
+
| `@types/unist` | 3.0.3 | MIT |
|
|
73
|
+
| `@ungap/structured-clone` | 1.4.0 | ISC |
|
|
74
|
+
| `@uppercut-labs/agent-native` | 0.0.0 | MIT |
|
|
75
|
+
| `am-i-vibing` | 0.4.0 | MIT |
|
|
76
|
+
| `anymatch` | 3.1.3 | ISC |
|
|
77
|
+
| `argparse` | 2.0.1 | Python-2.0 |
|
|
78
|
+
| `aria-query` | 5.3.2 | Apache-2.0 |
|
|
79
|
+
| `astro` | 7.3.5 | MIT |
|
|
80
|
+
| `axobject-query` | 4.1.0 | Apache-2.0 |
|
|
81
|
+
| `bail` | 2.0.2 | MIT |
|
|
82
|
+
| `boolbase` | 1.0.0 | ISC |
|
|
83
|
+
| `ccount` | 2.0.1 | MIT |
|
|
84
|
+
| `character-entities-html4` | 2.1.0 | MIT |
|
|
85
|
+
| `character-entities-legacy` | 3.0.0 | MIT |
|
|
86
|
+
| `chokidar` | 5.0.0 | MIT |
|
|
87
|
+
| `ci-info` | 4.4.0 | MIT |
|
|
88
|
+
| `clsx` | 2.1.1 | MIT |
|
|
89
|
+
| `comma-separated-tokens` | 2.0.3 | MIT |
|
|
90
|
+
| `commander` | 11.1.0 | MIT |
|
|
91
|
+
| `common-ancestor-path` | 2.0.0 | BlueOak-1.0.0 |
|
|
92
|
+
| `cookie` | 2.0.1 | MIT |
|
|
93
|
+
| `cookie-es` | 1.2.3 | MIT |
|
|
94
|
+
| `cross-spawn` | 7.0.6 | MIT |
|
|
95
|
+
| `crossws` | 0.3.5 | MIT |
|
|
96
|
+
| `css-select` | 6.0.0 | BSD-2-Clause |
|
|
97
|
+
| `css-tree` | 2.2.1 | MIT |
|
|
98
|
+
| `css-tree` | 3.2.1 | MIT |
|
|
99
|
+
| `css-what` | 7.0.0 | BSD-2-Clause |
|
|
100
|
+
| `csso` | 5.0.5 | MIT |
|
|
101
|
+
| `defu` | 6.1.7 | MIT |
|
|
102
|
+
| `dequal` | 2.0.3 | MIT |
|
|
103
|
+
| `destr` | 2.0.5 | MIT |
|
|
104
|
+
| `detect-libc` | 2.1.2 | Apache-2.0 |
|
|
105
|
+
| `devalue` | 5.9.4 | MIT |
|
|
106
|
+
| `devlop` | 1.1.0 | MIT |
|
|
107
|
+
| `diff` | 9.0.0 | BSD-3-Clause |
|
|
108
|
+
| `dom-serializer` | 2.0.0 | MIT |
|
|
109
|
+
| `domelementtype` | 2.3.0 | BSD-2-Clause |
|
|
110
|
+
| `domhandler` | 5.0.3 | BSD-2-Clause |
|
|
111
|
+
| `domutils` | 3.2.2 | BSD-2-Clause |
|
|
112
|
+
| `dset` | 3.1.4 | MIT |
|
|
113
|
+
| `entities` | 4.5.0 | BSD-2-Clause |
|
|
114
|
+
| `es-module-lexer` | 2.3.2 | MIT |
|
|
115
|
+
| `esbuild` | 0.28.2 | MIT |
|
|
116
|
+
| `eventemitter3` | 5.0.4 | MIT |
|
|
117
|
+
| `eventsource` | 3.0.7 | MIT |
|
|
118
|
+
| `eventsource-parser` | 3.1.1 | MIT |
|
|
119
|
+
| `extend` | 3.0.2 | MIT |
|
|
120
|
+
| `fast-string-truncated-width` | 3.0.3 | MIT |
|
|
121
|
+
| `fast-string-width` | 3.0.2 | MIT |
|
|
122
|
+
| `fast-wrap-ansi` | 0.2.2 | MIT |
|
|
123
|
+
| `fdir` | 6.5.0 | MIT |
|
|
124
|
+
| `find-proc` | 0.2.0 | MIT |
|
|
125
|
+
| `flattie` | 1.1.1 | MIT |
|
|
126
|
+
| `fontace` | 0.4.1 | MIT |
|
|
127
|
+
| `fontkitten` | 1.0.3 | MIT |
|
|
128
|
+
| `fsevents` | 2.3.3 | MIT |
|
|
129
|
+
| `get-tsconfig` | 5.0.0-beta.4 | MIT |
|
|
130
|
+
| `github-slugger` | 2.0.0 | ISC |
|
|
131
|
+
| `h3` | 1.15.11 | MIT |
|
|
132
|
+
| `hast-util-to-html` | 9.0.5 | MIT |
|
|
133
|
+
| `hast-util-whitespace` | 3.0.0 | MIT |
|
|
134
|
+
| `html-escaper` | 3.0.3 | MIT |
|
|
135
|
+
| `html-void-elements` | 3.0.0 | MIT |
|
|
136
|
+
| `http-cache-semantics` | 4.2.0 | BSD-2-Clause |
|
|
137
|
+
| `iron-webcrypto` | 1.2.1 | MIT |
|
|
138
|
+
| `is-docker` | 4.0.0 | MIT |
|
|
139
|
+
| `is-plain-obj` | 4.1.0 | MIT |
|
|
140
|
+
| `isexe` | 2.0.0 | ISC |
|
|
141
|
+
| `jose` | 6.2.12 | MIT |
|
|
142
|
+
| `js-yaml` | 4.3.2 | MIT |
|
|
143
|
+
| `jsonc-parser` | 3.3.1 | MIT |
|
|
144
|
+
| `lightningcss` | 1.33.0 | MPL-2.0 |
|
|
145
|
+
| `lightningcss-darwin-arm64` | 1.33.0 | MPL-2.0 |
|
|
146
|
+
| `lru-cache` | 11.5.3 | BlueOak-1.0.0 |
|
|
147
|
+
| `magic-string` | 1.4.2 | MIT |
|
|
148
|
+
| `magicast` | 0.5.5 | MIT |
|
|
149
|
+
| `mdast-util-to-hast` | 13.2.1 | MIT |
|
|
150
|
+
| `mdn-data` | 2.0.28 | CC0-1.0 |
|
|
151
|
+
| `mdn-data` | 2.27.1 | CC0-1.0 |
|
|
152
|
+
| `micromark-util-character` | 2.1.1 | MIT |
|
|
153
|
+
| `micromark-util-encode` | 2.0.1 | MIT |
|
|
154
|
+
| `micromark-util-sanitize-uri` | 2.0.1 | MIT |
|
|
155
|
+
| `micromark-util-symbol` | 2.0.1 | MIT |
|
|
156
|
+
| `micromark-util-types` | 2.0.3 | MIT |
|
|
157
|
+
| `mrmime` | 2.0.1 | MIT |
|
|
158
|
+
| `nanoid` | 3.3.19 | MIT |
|
|
159
|
+
| `neotraverse` | 1.0.1 | MIT |
|
|
160
|
+
| `nlcst-to-string` | 4.0.0 | MIT |
|
|
161
|
+
| `node-fetch-native` | 1.6.7 | MIT |
|
|
162
|
+
| `node-mock-http` | 1.0.5 | MIT |
|
|
163
|
+
| `normalize-path` | 3.0.0 | MIT |
|
|
164
|
+
| `nth-check` | 2.1.1 | BSD-2-Clause |
|
|
165
|
+
| `obug` | 3.0.0 | MIT |
|
|
166
|
+
| `ofetch` | 1.5.1 | MIT |
|
|
167
|
+
| `ohash` | 2.0.12 | MIT |
|
|
168
|
+
| `oniguruma-parser` | 0.12.2 | MIT |
|
|
169
|
+
| `oniguruma-to-es` | 4.3.6 | MIT |
|
|
170
|
+
| `p-limit` | 7.3.3 | MIT |
|
|
171
|
+
| `p-queue` | 9.3.3 | MIT |
|
|
172
|
+
| `p-timeout` | 7.0.2 | MIT |
|
|
173
|
+
| `package-manager-detector` | 1.8.0 | MIT |
|
|
174
|
+
| `path-key` | 3.1.1 | MIT |
|
|
175
|
+
| `piccolore` | 0.1.3 | ISC |
|
|
176
|
+
| `picocolors` | 1.1.1 | ISC |
|
|
177
|
+
| `picomatch` | 2.3.2 | MIT |
|
|
178
|
+
| `picomatch` | 4.0.7 | MIT |
|
|
179
|
+
| `pkce-challenge` | 5.0.1 | MIT |
|
|
180
|
+
| `postcss` | 8.5.28 | MIT |
|
|
181
|
+
| `prismjs` | 1.30.0 | MIT |
|
|
182
|
+
| `process-ancestry` | 0.1.0 | MIT |
|
|
183
|
+
| `property-information` | 7.2.0 | MIT |
|
|
184
|
+
| `radix3` | 1.1.2 | MIT |
|
|
185
|
+
| `readdirp` | 5.1.1 | MIT |
|
|
186
|
+
| `regex` | 6.1.0 | MIT |
|
|
187
|
+
| `regex-recursion` | 6.0.2 | MIT |
|
|
188
|
+
| `regex-utilities` | 2.3.0 | MIT |
|
|
189
|
+
| `resolve-pkg-maps` | 1.0.0 | MIT |
|
|
190
|
+
| `retext-smartypants` | 6.2.0 | MIT |
|
|
191
|
+
| `rolldown` | 1.2.12 | MIT |
|
|
192
|
+
| `satteri` | 0.10.5 | MIT |
|
|
193
|
+
| `sax` | 1.6.1 | BlueOak-1.0.0 |
|
|
194
|
+
| `semver` | 7.8.5 | ISC |
|
|
195
|
+
| `sharp` | 0.35.5 | Apache-2.0 |
|
|
196
|
+
| `shebang-command` | 2.0.0 | MIT |
|
|
197
|
+
| `shebang-regex` | 3.0.0 | MIT |
|
|
198
|
+
| `shiki` | 4.5.0 | MIT |
|
|
199
|
+
| `sisteransi` | 1.0.5 | MIT |
|
|
200
|
+
| `smol-toml` | 1.9.0 | BSD-3-Clause |
|
|
201
|
+
| `source-map-js` | 1.2.2 | BSD-3-Clause |
|
|
202
|
+
| `space-separated-tokens` | 2.0.2 | MIT |
|
|
203
|
+
| `stringify-entities` | 4.0.4 | MIT |
|
|
204
|
+
| `svgo` | 4.1.0 | MIT |
|
|
205
|
+
| `tiny-inflate` | 1.0.3 | MIT |
|
|
206
|
+
| `tinyclip` | 1.0.3 | MIT |
|
|
207
|
+
| `tinyexec` | 1.3.1 | MIT |
|
|
208
|
+
| `tinyglobby` | 0.2.17 | MIT |
|
|
209
|
+
| `trim-lines` | 3.0.1 | MIT |
|
|
210
|
+
| `trough` | 2.2.0 | MIT |
|
|
211
|
+
| `ufo` | 1.6.4 | MIT |
|
|
212
|
+
| `ultrahtml` | 1.7.0 | MIT |
|
|
213
|
+
| `uncrypto` | 0.1.3 | MIT |
|
|
214
|
+
| `undici` | 8.11.2 | MIT |
|
|
215
|
+
| `unified` | 11.0.5 | MIT |
|
|
216
|
+
| `unifont` | 0.7.5 | MIT |
|
|
217
|
+
| `unist-util-is` | 6.0.1 | MIT |
|
|
218
|
+
| `unist-util-position` | 5.0.0 | MIT |
|
|
219
|
+
| `unist-util-stringify-position` | 4.0.0 | MIT |
|
|
220
|
+
| `unist-util-visit` | 5.1.0 | MIT |
|
|
221
|
+
| `unist-util-visit-parents` | 6.0.2 | MIT |
|
|
222
|
+
| `unstorage` | 1.17.5 | MIT |
|
|
223
|
+
| `verkit` | 0.4.1 | MIT |
|
|
224
|
+
| `vfile` | 6.0.3 | MIT |
|
|
225
|
+
| `vfile-message` | 4.0.3 | MIT |
|
|
226
|
+
| `vite` | 8.3.2 | MIT |
|
|
227
|
+
| `vitefu` | 1.1.3 | MIT |
|
|
228
|
+
| `which` | 2.0.2 | ISC |
|
|
229
|
+
| `xxhash-wasm` | 1.1.0 | MIT |
|
|
230
|
+
| `yargs-parser` | 22.0.0 | ISC |
|
|
231
|
+
| `yocto-queue` | 1.2.2 | MIT |
|
|
232
|
+
| `zod` | 4.6.5 | MIT |
|
|
233
|
+
| `zwitch` | 2.0.4 | MIT |
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# UAN-022 package installation portability (partial)
|
|
2
|
+
|
|
3
|
+
Environment: research macOS host, Node 24.18.0, npm from that Node installation, local package version 0.0.0. The clean source baseline was commit cf499a8. These are fresh npm tarball installations with install scripts disabled for the isolated size comparison; representative examples use their normal standalone npm-ci harness.
|
|
4
|
+
|
|
5
|
+
## Measured baseline and optional-peer change
|
|
6
|
+
|
|
7
|
+
| Fresh consumer | Package tarball | Installed node_modules disk use | MCP server | Zod |
|
|
8
|
+
| --- | ---: | ---: | --- | --- |
|
|
9
|
+
| Baseline core/browser, hard dependencies | 115,834 bytes | 16,876 KiB | yes | yes |
|
|
10
|
+
| Changed core/browser, no peer selected | 115,848 bytes | 764 KiB | no | no |
|
|
11
|
+
| Changed browser with explicit Zod | same package | 9,000 KiB | no | yes |
|
|
12
|
+
| Changed MCP with explicit server SDK | same package | 16,876 KiB | yes | yes |
|
|
13
|
+
|
|
14
|
+
The changed core/browser installed tree contained 503,177 file bytes before this evidence page was added. The disk-use drop against the original baseline is about 95.5 percent. The npm tarball size is nearly unchanged because exports remain in one umbrella package; this result measures dependency installation rather than proving a smaller client bundle.
|
|
15
|
+
|
|
16
|
+
The new npm run check:portability builds and packs the package, checks all exported files are present, installs a fresh core/browser consumer, imports both entrypoints, verifies that all optional peers remain absent, and caps installed file bytes at 2,000,000 (about four times the measured 503,177-byte baseline). A later run including the check script itself reported 115,864 tarball bytes and 503,276 installed file bytes.
|
|
17
|
+
|
|
18
|
+
## Packed examples
|
|
19
|
+
|
|
20
|
+
- E01 static Astro: 12 tests and static build passed; installed Zod for its schema and no MCP server.
|
|
21
|
+
- E02 on-demand Astro: standalone live HTTP/MCP verification passed with an explicit MCP server.
|
|
22
|
+
- E03 Next 16.3.8: two tests, official MCP route smoke, production build and browser secret boundary passed after declaring the MCP server directly.
|
|
23
|
+
- E04 Worker sidecar: nine fixture tests, Wrangler dry-run bundle scan, and live official MCP client roundtrip passed after `sdkSchema()` began giving the Worker validator a mutable JSON copy. The first integrated CI run and the untouched cf499a8 research clone had returned HTTP 500 because the validator tried to annotate a frozen schema. Node 22/24 CI after this repair remains the integration gate.
|
|
24
|
+
- E05 Node/Hono CLI: 12 tests, local/remote parity and CLI start passed with an explicit MCP server.
|
|
25
|
+
- E06 browser-only: one test and Vite build passed; the emitted JS asset measured 86.17 kB / 25.78 kB gzip and the installed tree contained Zod but no MCP server.
|
|
26
|
+
- E08 contract pack: nine tests and the independent demo passed; no MCP server or Zod installed.
|
|
27
|
+
|
|
28
|
+
Node 24 typecheck and build, scoped Biome format, git diff check and production npm audit (zero reported vulnerabilities) passed. No full local root test suite was repeated for this slice.
|
|
29
|
+
|
|
30
|
+
## Packed CLI and direct-license inventory (2026-10-03)
|
|
31
|
+
|
|
32
|
+
The same fresh core/browser consumer now runs the package's CLI adapter in an application-owned process with no optional peers. A small fixture declares a read-only `smoke:greet@1` capability using the core schema port, then calls `runCapabilityCli`. On research macOS Node 24.18.0, the packed check passed `--help`, `--version`, a successful local typed-flag invocation, and an invalid-input exit-2 envelope. The local invocation measured about 30 ms wall time including Node process startup on this host; it is an observation, not a cross-platform budget. The package is a library with no `bin` entry, so there is no global `agent-native` command to test. E05 remains the representative application-owned local/remote CLI with Hono and explicit MCP/Zod peers.
|
|
33
|
+
|
|
34
|
+
The check reported about 128 KB of tarball data and 555 KB of installed files for this fresh consumer; exact bytes change as included documentation changes. The installed package has zero hard runtime dependencies; MCP server, MCP Apps, Astro and Zod remained absent. Exact direct license metadata from the npm registry for this candidate's pinned optional peers:
|
|
35
|
+
|
|
36
|
+
| Package | Version | Registry license |
|
|
37
|
+
| --- | --- | --- |
|
|
38
|
+
| @uppercut-labs/agent-native | 0.0.0 local tarball | MIT (`LICENSE` in tarball) |
|
|
39
|
+
| @modelcontextprotocol/server | 2.3.0 | Apache-2.0 |
|
|
40
|
+
| @modelcontextprotocol/ext-apps | 2.0.3 | MIT |
|
|
41
|
+
| astro | 7.3.5 tested; peer range 7.x | MIT |
|
|
42
|
+
| zod | 4.6.5 | MIT |
|
|
43
|
+
|
|
44
|
+
This is a direct-package inventory, not a license review of every transitive dependency. The core/browser consumer installs no optional peer, so its runtime license set is the Agent Native tarball. Applications selecting framework/MCP/Zod integrations must inventory their actual resolved dependency tree.
|
|
45
|
+
|
|
46
|
+
## Windows packed CLI smoke (2026-10-03)
|
|
47
|
+
|
|
48
|
+
A tarball packed from canonical `72dab23` on research was copied to a fresh temporary Windows project whose path contains spaces (`Agent Native Windows CLI Smoke`). The project had its own `package.json` and npm used an explicit `--prefix` with `--omit=optional --ignore-scripts`. On Windows Node 24.18.0/npm 12.1.0, the 129,299-byte tarball installed 125 package files totaling 557,803 bytes. MCP, Astro and Zod optional peers were absent. Module resolution pointed inside that temporary project's `node_modules`.
|
|
49
|
+
|
|
50
|
+
The application-owned packed CLI printed help and version, returned a successful `smoke:greet@1` local invocation (`Hello, Windows!`, exit 0), and returned a structured `invalid-input` envelope with exit 2 for a missing required argument. This is a Windows packed-library CLI adapter check, not a global `bin` command or a hosted remote CLI claim. The first attempted installation lacked a local manifest and npm selected the home project; the added dependency was uninstalled, its manifest and lockfile were verified free of Agent Native, and the prior `graceful-fs` package was present again. The reported result is from the subsequent explicitly isolated project.
|
|
51
|
+
|
|
52
|
+
## Remaining qualification
|
|
53
|
+
|
|
54
|
+
Windows packed CLI help/version/local invocation/invalid-input passed in an isolated path with spaces. Linux packed CLI will run in the Node 22/24 CI matrix once this change is integrated; the result must be checked there. Cold doctor timing, independent client bundle budgets, transitive dependency license review and outside-repository npm release installation remain open. One macOS timing sample is insufficient to set cross-platform performance thresholds. No npm publication or commercial host support is claimed.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# UAN-023 commercial agent hosts over remote MCP
|
|
2
|
+
|
|
3
|
+
Checked 2026-10-10 on macOS arm64 with Node 26.10.0. The server was the flagship E04 Worker sidecar on local workerd (Wrangler `dev --local`). It serves the shared E01 album contract over Streamable HTTP MCP at a loopback address. Each host ran from a temporary working directory under the operator's existing sign-in. No credential was added for this test.
|
|
4
|
+
|
|
5
|
+
## Antigravity CLI: tool invocation verified
|
|
6
|
+
|
|
7
|
+
The Antigravity CLI (`agy`, Google) ran with model `gemini-3.8-flash-low`. Its HTTP MCP server entry was added for the test with `agy mcp add` and removed afterwards.
|
|
8
|
+
|
|
9
|
+
| Run | Host version | Observation |
|
|
10
|
+
| --- | --- | --- |
|
|
11
|
+
| Manual | 1.2.14 | Host listed `cap_15_example.catalog_12_album.lookup_v1`, called it through `call_mcp_tool` with `{"slug":"first-light"}`, received `{"result":{"kind":"found",…}}` and answered `First Light` |
|
|
12
|
+
| `node test/uan023-agent-host.mjs agy` | 1.3.3 (auto-updated) | Same found call and answer. A second prompt sent the invalid slug `Not A Slug!` unchanged; the tool returned an error and no album |
|
|
13
|
+
|
|
14
|
+
## Claude Code: tool invocation verified
|
|
15
|
+
|
|
16
|
+
Claude Code 2.1.286 ran with an isolated `--mcp-config` and `--strict-mcp-config`, the tool allowlist limited to the probe server, and model `haiku`.
|
|
17
|
+
|
|
18
|
+
- **Connection:** an earlier attempt that day reported the server `connected` and exposed exactly one tool, `mcp__albums__cap_15_example_catalog_12_album_lookup_v1`. That tool name is Claude Code's own sanitized projection. That attempt stopped before any model turn because the standalone CLI sign-in had expired.
|
|
19
|
+
- **Invocation:** with the operator's Claude OAuth token supplied through `CLAUDE_CODE_OAUTH_TOKEN`, `node test/uan023-agent-host.mjs claude` passed. The host called the tool with `{"slug":"first-light"}` and answered `First Light`. The unchanged invalid slug `Not A Slug!` returned a tool result with `is_error: true` and no album.
|
|
20
|
+
|
|
21
|
+
## Reproduce
|
|
22
|
+
|
|
23
|
+
```sh
|
|
24
|
+
npm ci
|
|
25
|
+
npm run example:e04
|
|
26
|
+
node test/uan023-agent-host.mjs agy
|
|
27
|
+
CLAUDE_MODEL=haiku node test/uan023-agent-host.mjs claude
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
The script starts the sidecar on a free loopback port. For Antigravity it registers a temporary `uan-albums-probe` MCP server, runs the two prompts, asserts the actual tool calls from the host's `stream-json` events, and always removes the server and stops the Worker. It uses model inference on the operator's account, so it is not part of `npm run check`.
|
|
31
|
+
|
|
32
|
+
## Limits
|
|
33
|
+
|
|
34
|
+
- Each host version was observed once on one machine. Host model behavior may vary between runs.
|
|
35
|
+
- The server ran on loopback. No deployed sidecar, external identity provider or protected capability was used.
|
|
36
|
+
- MCP Apps UI rendering in these hosts was not tested; the rendered MCP Apps host evidence remains the [Inspector run](UAN-023-inspector-web-and-astro-adoption.md).
|