@agent-network-protocol/dsh-anp-identity 0.1.6 → 0.1.8
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/BOUNDARY.md +30 -5
- package/PUBLICATION.md +181 -0
- package/README.md +73 -1
- package/README.zh.md +44 -1
- package/V7-MANAGEMENT.md +18 -0
- package/cordis.patch.yml +9 -0
- package/examples/fresh-bootstrap.cordis.patch.yml +38 -0
- package/lib/authorization-types.d.ts +6 -0
- package/lib/authorization-types.d.ts.map +1 -1
- package/lib/authorization.d.ts.map +1 -1
- package/lib/authorization.js +23 -6
- package/lib/authorization.js.map +1 -1
- package/lib/catalog.d.ts +3 -1
- package/lib/catalog.d.ts.map +1 -1
- package/lib/catalog.js +15 -3
- package/lib/catalog.js.map +1 -1
- package/lib/client/controller.d.ts +18 -0
- package/lib/client/controller.d.ts.map +1 -1
- package/lib/client/controller.js +89 -5
- package/lib/client/controller.js.map +1 -1
- package/lib/client/views.d.ts.map +1 -1
- package/lib/client/views.js +37 -6
- package/lib/client/views.js.map +1 -1
- package/lib/client-metadata.d.ts +3 -0
- package/lib/client-metadata.d.ts.map +1 -0
- package/lib/client-metadata.js +11 -0
- package/lib/client-metadata.js.map +1 -0
- package/lib/client.js +260 -14
- package/lib/client.js.map +4 -4
- package/lib/host-management-secret.d.ts +41 -0
- package/lib/host-management-secret.d.ts.map +1 -0
- package/lib/host-management-secret.js +92 -0
- package/lib/host-management-secret.js.map +1 -0
- package/lib/index.d.ts +73 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +331 -22
- package/lib/index.js.map +1 -1
- package/lib/initial-registration-proof.d.ts +13 -0
- package/lib/initial-registration-proof.d.ts.map +1 -0
- package/lib/initial-registration-proof.js +48 -0
- package/lib/initial-registration-proof.js.map +1 -0
- package/lib/installed-consumer.d.ts +25 -0
- package/lib/installed-consumer.d.ts.map +1 -0
- package/lib/installed-consumer.js +66 -0
- package/lib/installed-consumer.js.map +1 -0
- package/lib/management-credentials.d.ts +15 -0
- package/lib/management-credentials.d.ts.map +1 -0
- package/lib/management-credentials.js +126 -0
- package/lib/management-credentials.js.map +1 -0
- package/lib/management-driver.d.ts +83 -0
- package/lib/management-driver.d.ts.map +1 -0
- package/lib/management-driver.js +405 -0
- package/lib/management-driver.js.map +1 -0
- package/lib/management-remote.d.ts +27 -1
- package/lib/management-remote.d.ts.map +1 -1
- package/lib/management-remote.js +69 -3
- package/lib/management-remote.js.map +1 -1
- package/lib/management-types.d.ts +7 -0
- package/lib/management-types.d.ts.map +1 -1
- package/lib/pap-callback.d.ts +110 -0
- package/lib/pap-callback.d.ts.map +1 -0
- package/lib/pap-callback.js +51 -0
- package/lib/pap-callback.js.map +1 -0
- package/lib/protocol-bootstrap.d.ts +24 -0
- package/lib/protocol-bootstrap.d.ts.map +1 -0
- package/lib/protocol-bootstrap.js +34 -0
- package/lib/protocol-bootstrap.js.map +1 -0
- package/lib/protocol-client.d.ts +137 -0
- package/lib/protocol-client.d.ts.map +1 -0
- package/lib/protocol-client.js +11 -0
- package/lib/protocol-client.js.map +1 -0
- package/lib/provider-api.d.ts +6 -2
- package/lib/provider-api.d.ts.map +1 -1
- package/lib/provider-api.js.map +1 -1
- package/lib/publication-http.d.ts +19 -0
- package/lib/publication-http.d.ts.map +1 -0
- package/lib/publication-http.js +183 -0
- package/lib/publication-http.js.map +1 -0
- package/lib/publication-types.d.ts +161 -0
- package/lib/publication-types.d.ts.map +1 -0
- package/lib/publication-types.js +35 -0
- package/lib/publication-types.js.map +1 -0
- package/lib/publication.d.ts +21 -0
- package/lib/publication.d.ts.map +1 -0
- package/lib/publication.js +235 -0
- package/lib/publication.js.map +1 -0
- package/lib/registration-bootstrap.d.ts +56 -0
- package/lib/registration-bootstrap.d.ts.map +1 -0
- package/lib/registration-bootstrap.js +523 -0
- package/lib/registration-bootstrap.js.map +1 -0
- package/lib/registration-service-settings.d.ts +12 -0
- package/lib/registration-service-settings.d.ts.map +1 -0
- package/lib/registration-service-settings.js +124 -0
- package/lib/registration-service-settings.js.map +1 -0
- package/lib/registration-service-types.d.ts +11 -0
- package/lib/registration-service-types.d.ts.map +1 -0
- package/lib/registration-service-types.js +3 -0
- package/lib/registration-service-types.js.map +1 -0
- package/lib/remote.d.ts.map +1 -1
- package/lib/remote.js +11 -2
- package/lib/remote.js.map +1 -1
- package/lib/target-policy.d.ts +35 -0
- package/lib/target-policy.d.ts.map +1 -0
- package/lib/target-policy.js +319 -0
- package/lib/target-policy.js.map +1 -0
- package/lib/user-client.d.ts +6 -0
- package/lib/user-client.d.ts.map +1 -1
- package/lib/user-client.js.map +1 -1
- package/lib/user-operation.d.ts.map +1 -1
- package/lib/user-operation.js +9 -0
- package/lib/user-operation.js.map +1 -1
- package/lib/user-service.d.ts +8 -1
- package/lib/user-service.d.ts.map +1 -1
- package/lib/user-service.js +58 -4
- package/lib/user-service.js.map +1 -1
- package/package.json +51 -29
package/BOUNDARY.md
CHANGED
|
@@ -17,11 +17,15 @@ approved dispatch uses Host-owned transport.
|
|
|
17
17
|
|
|
18
18
|
Consumer identifiers are soft same-process identities. The allowlists prevent accidental cross-plugin use and provide an auditable policy, but JavaScript in the same process is not a sandbox.
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
The publication extension closes the documented public manager-entry bypass
|
|
21
|
+
(review F2): acquisition requires both the actual live installed manager Context and its
|
|
22
|
+
matching contextual service proxy,
|
|
23
|
+
root/no-context/ordinary callers are rejected, and each management operation
|
|
24
|
+
rechecks its installation. When ordinary consumers are configured, public legacy
|
|
25
|
+
lease acquisition also requires the installed matching Host consumer/provider
|
|
26
|
+
Context; a raw root service cannot launder another consumer name. This remains a
|
|
27
|
+
same-process policy, not protection against code that steals another plugin's
|
|
28
|
+
Context or accesses internal/private implementation objects.
|
|
25
29
|
|
|
26
30
|
## Secret rules
|
|
27
31
|
|
|
@@ -57,3 +61,24 @@ AWiki's Bearer Token cache, challenge processing, and retry policy remain in `ds
|
|
|
57
61
|
## Out of scope
|
|
58
62
|
|
|
59
63
|
This package does not provide OS sandboxing, malicious-plugin isolation, DID resolution or publication, remote backup, Store rekey, or Root Key rotation. Its ordinary-plugin approval UI does not replace Root Transfer user-presence confirmation, which remains an AWiki workflow above the Host Provider lease.
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
## Public client publication
|
|
67
|
+
|
|
68
|
+
Catalog schema v3 records public client URLs, exact metadata/JWKS bytes, version,
|
|
69
|
+
operation IDs and safe status; it never stores credentials or assertions. Old
|
|
70
|
+
writers must stop for upgrade and matching catalog/native/authorization backups
|
|
71
|
+
must be restored together on rollback. A fresh v1/v2 upgrade writes an exact
|
|
72
|
+
`.before-v3` backup before switching the live schema; v1 also preserves its
|
|
73
|
+
historical `.before-v2` backup behavior. Old v2 readers reject the v3 schema.
|
|
74
|
+
|
|
75
|
+
A trusted Host explicitly supplies the existing authenticated management channel
|
|
76
|
+
and DID document publication/reconcile driver. The publisher cannot substitute an
|
|
77
|
+
unchecked DID update. Default configuration has no credentials or fabricated
|
|
78
|
+
callback; component test drivers are not production authorization evidence.
|
|
79
|
+
|
|
80
|
+
OAuth-enabled ordinary consumers receive purpose- and audience-restricted grants.
|
|
81
|
+
Client URLs/keys come from the published record. Native key and current DID binding
|
|
82
|
+
are checked before signing, and grant validity is checked again before returning
|
|
83
|
+
an assertion. Public readback mismatch disables the known publication. Full
|
|
84
|
+
remote grant revocation and adversarial process isolation remain later work.
|
package/PUBLICATION.md
ADDED
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
# Shared protocol identity and CIMD publication
|
|
2
|
+
|
|
3
|
+
The Host keeps all identity, Delegation and DPoP private keys in the local encrypted ANP Identity Store. The shared plugin owns permissions and publication state; the MCP and PAP adapters own their separate connection and Token state. Remote signers are unsupported.
|
|
4
|
+
|
|
5
|
+
## Explicit identity creation
|
|
6
|
+
|
|
7
|
+
`requestCreateIdentity` accepts `parameters.usage: 'protocol'` and `profile: 'e1' | 'web'`. The creation approval displays that purpose and method. Protocol E1 creates local root, device-signing and agreement keys; protocol Web creates only device-signing and agreement keys. Both methods default to the full messaging Manifest bundle: `anp.core.binding.v1`, `anp.identity.discovery.v1`, `anp.direct.base.v1`, `anp.direct.e2ee.v2`, `anp.group.base.v2`, and `anp.group.e2ee.v2`. New identities therefore have the device keys and protocol declarations needed for future Direct/Group messaging, including E2EE. This default does not install or connect a messaging plugin, create message sessions, or grant consumer access. Existing identities retain their current signed documents; changing the default does not migrate them. Registration requires a server that accepts the full bundle; a server explicitly configured in identity-only mode rejects it. Registration authority and ready-admin status come from the server, never from that local Manifest. Protocol creation grants no use permission and does not expose raw DeviceSigning operations.
|
|
8
|
+
|
|
9
|
+
Omitting `usage` preserves ordinary E1 root/request-signing creation and its existing approval semantics. Existing identities and DIDs remain intact. An ordinary identity without a compatible registered Manifest cannot use the device-management driver. Adding a separate RequestSigning key to a protocol identity requires the existing authorized enrollment/document workflow; the protocol lease does not provide that capability.
|
|
10
|
+
|
|
11
|
+
## Registration and management
|
|
12
|
+
|
|
13
|
+
After registration, all User Service requests made by the management driver use standard ANP HTTP Message Signatures. The driver reuses `createAuthenticatedHttp` and the existing native `prepareHttpSignature` port with the registered device signing key and one exact HTTPS origin. It sends `Signature-Input`, `Signature`, and `Content-Digest` for request bodies, without a cached Bearer header or Bearer fallback. This includes the first Registry verification after registration, later Registry reads, document/OAuth-key mutations, publication and callback management, and public-material readback. The original registration request and browser email confirmation retain their existing bootstrap contracts. Device management proofs, operation IDs and checkpoint/CAS fields are unchanged. The broker retains its existing credential layout for compatibility; its stored Access Token is not used to authenticate these requests. Public CIMD/JWKS endpoints still permit anonymous third-party readers.
|
|
14
|
+
|
|
15
|
+
Trusted management Contexts call `registerLocalIdentity` and `configureManagedPublicationBackend`. Registration submits the locally produced public document through the real User Service `register` RPC. Web uses a distinct native `signWebRegistrationProof`, binding the complete normalized business projection, exact audience, operation id, Handle, account factors, bootstrap device and local document digest. The caller supplies a stable Web `registration_operation_id` and an explicit management audience. A returned Access Token is checked through the actual `device_registry_get`; the DID, local signing key, active admin role and management readiness must agree before the credential is retained.
|
|
16
|
+
|
|
17
|
+
For the initial E1 registration, the manager refreshes the exact local document's root proof after email verification and immediately before sending registration. Its internal native lease adds `IDENTITY_SIGN` only for this registration call; ordinary publication leases retain their existing capabilities. The helper fixes the root key, proof suite, purpose, DID domain, current creation time and fresh challenge. It rejects noninitial revisions, an existing management credential, pending document/identity transitions or a changed local snapshot. No document, key or proof-option parameter is added to User or Agent APIs. Root, DID, public keys and unsigned document intent remain unchanged. The complete DID-document digest changes with its proof, so registration, the returned Registry evidence and the one-time native first-publication adoption all use the same refreshed document and its actual digest. User Service's proof TTL is unchanged; an uncertain registration is never automatically re-signed or resubmitted.
|
|
18
|
+
|
|
19
|
+
`EncryptedManagementCredentialBroker` encrypts Device Access credentials with a fresh 32-byte Host key from its key resolver. It partitions by exact origin and identity, uses a cross-process lock and atomic fsynced replacement, and preserves mutation bodies for operation replay. No Token, proof, key or login function belongs in Browser configuration, ordinary catalog data or model tools.
|
|
20
|
+
|
|
21
|
+
The real publication driver resolves `document_id` through an independently authorized exact-device endpoint. It signs each management request through the native method allowlist and follows User Service's live Registry, auth-generation, nonce, body binding and CAS checks. Device Access is not treated as an ordinary account JWT. Public status remains readable without returning credentials.
|
|
22
|
+
|
|
23
|
+
DID changes use the existing authorized `device_document_update` or authentication-only `device_oauth_keys_update` path. E1 retains its root proof; Web uses the ready-admin device proof and cannot use ordinary service updates to enroll keys. Each candidate carries immutable native `baseEvidence`; its CAS values never come from a newer Registry. A changed remote checkpoint produces a conflict instead of overwriting another device's document. An uncertain publication reconciles the document and checkpoint from one authenticated resolve response.
|
|
24
|
+
|
|
25
|
+
## Device-bound callback relay
|
|
26
|
+
|
|
27
|
+
`createManagedPublicationDriver` exposes typed `execute` overloads only for `pap-callback-register` and `pap-callback-claim`. The Host installer returns the same restricted capability as `configureManagedPublicationBackend(...).callbackManagement`; it checks the installed management Context, native-provider generation and disposal before the request and before returning its result. The ordinary identity client, management Remote and model tools do not expose it.
|
|
28
|
+
|
|
29
|
+
Registration accepts only transaction/client/issuer/redirect identifiers, independent state/claim SHA-256 hashes and a bounded whole-second expiry. The client id and fixed HTTPS redirect must match the resolved identity and `/user-service/v1/pap-callback`. Its exact-device request uses the live Registry/checkpoint and the native `agent_client_pap_callback_register` proof. The encrypted operation ledger fixes the original request for response-loss recovery and rejects changed callback material under the same operation id.
|
|
30
|
+
|
|
31
|
+
Pickup accepts only a transaction id and canonical independent 32-byte claim secret. `agent_client_pap_callback_claim` binds the fixed device route and real DID, and successful pickup returns the raw private `{code, state, iss}` or `{error, state, iss}` business response. A successful OAuth error is not a management failure. Pickup results do not contain publisher DID/document fields and are never written to the local operation ledger or automatically retried. A lost successful pickup response is uncertain; neither C nor the relay reconstructs a second private result. Documented management failures such as `callback_not_ready` and `callback_claimed` remain stable codes without server text or callback data.
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
## Capability-driven V2 publication
|
|
35
|
+
|
|
36
|
+
`PublicationConfig.capabilities` contains explicit `mcpMachine`, `papSession` and `papAccount` values. `activeKid` selects an ES256 local key. HTTP maps these to the single snake_case schema: `schema_version`, `operation_id`, `expected_version`, `client_name`, `capabilities`, `signing_keys`, `active_kid` and `redirect_uris`. V1 legacy EdDSA records retain their original projection and do not gain V2 permissions.
|
|
37
|
+
|
|
38
|
+
MCP-only publication has `client_credentials`, `private_key_jwt`, ES256/JWKS, empty `response_types`, and no callback dependency. PAP Session adds no OAuth grant. PAP account requires an actual callback and adds `authorization_code`, `refresh_token` and `code`. The five profile names are derived from capabilities; they are not caller-selected independent values. V2 PAP account may separately declare an RFC 8252 loopback callback with exact `http://127.0.0.1:<port>/path` or `http://[::1]:<port>/path`. The declaration requires an explicit canonical port from 1 through 65535, a fixed nonempty path and no userinfo, query, fragment, whitespace, backslash, dot-segment or invalid percent encoding. Its bytes are preserved. V1 and all metadata/JWKS/resource URLs retain their HTTPS rules; MCP-only and Session-only profiles reject callbacks. OAuth Consumers may ignore only the loopback port when matching a redirect, retaining host/path equality. The fixed HTTPS relay is an independent lane and never a loopback failure fallback.
|
|
39
|
+
|
|
40
|
+
An absent OAuth key is first created locally and published through the authorized DID-key workflow. Only after that checkpoint does the coordinator prepare fixed metadata/JWKS bytes, publish the ANPCIMD digest/key binding, activate and read both public resources back byte-for-byte. Responses must match the selected profile, capabilities, key, algorithm and both independent public-material digests. A consumer receives a usable OAuth identity only after the complete checkpoint is confirmed.
|
|
41
|
+
|
|
42
|
+
Catalog schema v4 atomically backs up v1/v2/v3 before migration, preserves legacy bytes and grants, and rejects unsupported downgrade writers. The native Store's document digest remains distinct from the hexadecimal CIMD/JWKS response-byte digests and the RFC 7638 thumbprint.
|
|
43
|
+
|
|
44
|
+
## Preauthorized protocol leases
|
|
45
|
+
|
|
46
|
+
The Host explicitly configures `protocolPolicies`. Each policy fixes its consumer, identity, profiles, expiry, scope ceiling and exact issuer/resource sets. `publicTargets: true` is an explicit bounded approval for unfamiliar publicly discovered targets; it does not grant remote business permission. The policy owner is the fixed local identity Host owner. Policy changes reload the service and invalidate prior leases.
|
|
47
|
+
|
|
48
|
+
Only the configured installed Host discovery adapter may call `bindProtocolIdentityClient(ctx)` from `./protocol-client`. The bound Context is checked on registration, invocation and return. Its adapter validates public discovery over its protected network transport; C validates the evidence fields, expiry and policy scope, then creates opaque local target and signer objects. A consumer-supplied JSON flag is never accepted as discovery evidence. This same-process authority does not sandbox hostile code that already stole a trusted Context.
|
|
49
|
+
|
|
50
|
+
Leases bind publication key/version, policy generation and native-provider generation. They recheck those values before and after signing. An assertion uses the exact validated issuer, fixed published client id and selected key. OAuth leases do not expose raw authentication signing. Temporary Session and DPoP keys have separate purposes, C-minted scope/key references and native handles; restoring a persisted handle requires a fresh lease and actual native scope/purpose verification. Company and request endpoints are frozen from discovery, owner comes from the Host policy, and user/account scope comes from the trusted PAP adapter's bound records.
|
|
51
|
+
|
|
52
|
+
Each protocol lease check also reads the current native `StoreInfo.backendAvailable` fact after the public metadata await, then synchronously rechecks its original caller, provider generation and policy/target expiry. A false value rejects use with `provider_unavailable`; an absent availability field is `provider_incompatible`. D performs this check before using a cached Access Token as well as before physical resource/Token requests. Native private operations independently enforce availability for `os_keyring`; injected/local-file backends retain their existing custody semantics. An OS keyring unlock may restore an otherwise current lease without changing its grant or identity; disposal, expired policy and changed publication remain separate invalidations. This contract requires the matching native availability candidate. The historical e2c candidate's API v2 number alone does not provide it, and an already-open e2c Store does not automatically stop signing when its OS collection is locked.
|
|
53
|
+
|
|
54
|
+
General service `health()` also uses a short internal readonly native lease. A live false availability fact reports `status: unavailable` while retaining the independent catalog state. It checks the original Host and provider slot after the await and disposes the read lease. A legacy provider without the field retains its general structural health behavior; that compatibility does not satisfy the protocol lease handshake or promise signing availability.
|
|
55
|
+
|
|
56
|
+
## Validation
|
|
57
|
+
|
|
58
|
+
Owner unit/Loader/UI tests cover migration, approvals, revocation, publication recovery, independent grants and the protocol lease. `test/protocol-native.spec.ts` exercises real C authorization and real A ES256/PAP custody with independent signature verification; its local publication acceptance fixture is not User Service control-plane evidence.
|
|
59
|
+
|
|
60
|
+
`test/management-live.spec.ts` is an opt-in fixed local component contract. Set `DSH_IDENTITY_USER_SERVICE_SOURCE` to the B candidate and `DSH_IDENTITY_PYTHON` to its environment, then run `npx vitest run test/management-live.spec.ts`. The bridge uses actual production registration, factor verification, MySQL transactions, Registry, Device Access, management proofs and publication. Only external synthetic email delivery is substituted. One case creates E1 and Web identities consecutively in the same Store with explicit protocol approval and callback-free machine publication. A separate case performs actual PAP account publication, device-bound relay registration, public callback receipt, original-device one-shot pickup and replay denial. `test/helpers/managed-callback-fixture.ts` exports that real C/A/B setup to the PAP adapter component tests, without returning a native lease or management credential. This is not product E2E, System Test or deployment evidence.
|
|
61
|
+
|
|
62
|
+
## Fresh Host registration bootstrap
|
|
63
|
+
|
|
64
|
+
Protocol identities with one locally held Ed25519 device authentication key can use the explicit `ordinary-http/1` user-approval snapshot. It exposes only public identity reads and exact authenticated HTTP dispatch, with no raw signing purposes or OAuth assertion permission. HTTP dispatch prefers a dedicated request-signing key when present; it otherwise uses the unique device authentication key only inside the native exact-request HTTP signing API. The device key is never exported or exposed as a general assertion signer. Origin policy, operation-bound single use, caller/provider fences and revocation still apply. Existing ordinary request-signing identities retain `ordinary-use/1` and their original policy.
|
|
65
|
+
|
|
66
|
+
The bootstrap selects `identityOnly: true` by default. The reviewed creation request carries that choice and advertises only `anp.core.binding.v1` and `anp.identity.discovery.v1`, without messaging profiles or an `ANPMessageService`. The native manifest retains its SDK-required agreement-key reference; that is not a messaging capability grant. Programmatic protocol creation without the flag retains its existing messaging bundle. Do not rewrite an existing identity or reuse an uncertain registration journal to change profiles; create a separately approved request.
|
|
67
|
+
|
|
68
|
+
Registration configuration requires exactly one `email` or canonical E.164 `phone`. The phone path sends one Handle-bound `awiki.identity.register.v1` challenge only after creation approval, then waits for `submitRegistrationOtp({code})` from the authenticated user manager. The Settings input is a password field and clears on submission. The six-digit code is held only in the running controller, never in configuration, journal, catalog, model tools, or public status. Restart preserves a confirmed challenge but requires code re-entry; an unconfirmed send or unknown registration result stops without automatic replay. The email activation path remains separate.
|
|
69
|
+
|
|
70
|
+
The optional `./protocol-bootstrap` plugin submits a stable `usage: protocol` creation request from its actual Loader-installed Context. It never approves that request. The existing `management-remote` accepts optional non-secret `registrationBootstrap` configuration; only its constructor-captured root management Context continues an approved, successfully created reference. The default bundle leaves this flow disabled and keeps the unconfigured manager compatible. The [first-stage patch](examples/fresh-bootstrap.cordis.patch.yml) contains deployment placeholders, not credentials. Retain existing approved consumers when adapting it.
|
|
71
|
+
|
|
72
|
+
The Host needs the matching local native API v2/ES256 candidate and the actual `@deepseek-ai/dsh-credentials@0.1.5-rc.2` record API with a writable protected provider. `credentials-local@0.1.5-rc.2` supplies owner-only file protection and a writer lock. The broker master directly reuses that existing DSH credential record; broker credentials and MCP/PAP state remain encrypted local files. No AWiki messaging/Core credential is imported. Candidate provenance is separate from registry version numbers.
|
|
73
|
+
|
|
74
|
+
The manager displays the exact registration origin and the actual installed identity client header. It sends `dsh-identity/1106/<package-version>`, preserving a numeric `+build` only when the installed package actually declares one. It never impersonates the App product or invents a build. An HTTP 200 envelope containing `client.upgrade_required` is a rejection, including on SMS send; it does not mark the challenge accepted. A successful send receipt indicates provider acceptance, not carrier delivery. OTP purpose, Handle target, service origin and database must match the registration flow; a login code or a code from another deployment cannot be reused.
|
|
75
|
+
|
|
76
|
+
Native Store custody is an independent local choice. Existing `rootKeyProvider: local-file` uses its protected `root-key.b64u` file and requires no OS keyring; select it explicitly in the provider row or with `DSH_ANP_IDENTITY_ROOT_KEY_PROVIDER=local-file`. Existing `rootKeyProvider: keyring` uses the local OS service without a silent file fallback. Both are implemented local backends. The bundle's keyring default and the example's chosen backend do not make OS keyring mandatory, and the M12 availability check does not add a storage layer or change local-file behavior.
|
|
77
|
+
|
|
78
|
+
User Service must opt into the independent product. The client sends `X-AWiki-Client-Version: dsh-identity/1106/<version>` on its fixed-origin factor and management requests, reading version from the actual installed C package. It never borrows an AWiki version or accepts a version override from configuration. The server's `products.identity` entry defines the accepted release/version floor; an absent or disabled entry in an enforced deployment still rejects it. Deploy the new server implementation before its new policy file. Public server-info fields and an observe-only environment do not grant admission. C exposes only `client_upgrade_required`, without relaying server text or upgrade URLs.
|
|
79
|
+
|
|
80
|
+
The manager pins the approved reference's actual ready provider generation before factor work. It sends one Handle-bound activation email and polls the same full Handle/email target. The user completes User Service's normal email page and Turnstile verification; C never reads an activation token or automatically confirms it. The existing register/Registry checks must succeed before encrypted credential storage, driver installation, ES256 enrollment and publication. The controller cannot switch to a replacement provider. Original manager identity and provider generation are rechecked after native/key/body awaits, before physical HTTP, and before returning results.
|
|
81
|
+
|
|
82
|
+
Safe status phases are `awaiting_approval`, `awaiting_email_verification`, `registering`, `publishing`, `published`, `blocked` and `registration_uncertain`; a disposed controller reports `disposed`. Only phases, closed reasons and public identity/client references reach the manager UI. Mail-send and registration-start intents are durable before their physical requests. Restart does not resend an uncertain mail attempt or repeat a possibly committed registration. Cancellation cannot roll back a server transaction already sent; an unknown registration result requires management recovery.
|
|
83
|
+
|
|
84
|
+
Each stable bootstrap id owns its own broker directory. Its 32-byte master comes from real atomic owner-scoped Host credential records, not ENV, the identity Root Key, UI/model input or a fallback key file. Existing keys are not rewritten. A durable marker and matching journal protect an established key even before the first Device Access ciphertext exists. Missing used keys, bad records, readonly storage or lifecycle loss fail closed. Do not rename ids/request ids or delete state to force a retry; restore the matching credential record, broker and journal together. This Host provider's file protection is not an OS Secret Service guarantee.
|
|
85
|
+
|
|
86
|
+
### One-time protocol permission setup
|
|
87
|
+
|
|
88
|
+
`published` confirms registration/publication, not D/F authorization. Copy the safe `{storeId, identityId, did}` from the manager, add an explicit `protocolPolicies` entry and matching consumer configuration, then restart the Host. The new reference is unknown before creation, so this implementation does not create a guessed policy or an automatic policy template. This is identity/profile/scope setup, not an approval for every remote station. Keep an explicit absolute expiry unchanged across restart; never silently renew it with a fresh `Date.now()` expression.
|
|
89
|
+
|
|
90
|
+
For a machine connection, add `@deepseek-ai/dsh-mcp-client` to both `allowConsumers` and `userConsumers`, not `allowProviderConsumers`. Preserve the service's other fields and use this policy with the real copied reference and target URLs:
|
|
91
|
+
|
|
92
|
+
```json
|
|
93
|
+
{"id":"work-mcp","version":1,"consumer":"@deepseek-ai/dsh-mcp-client","owner":"@agent-network-protocol/dsh-anp-identity","identity":{"storeId":"COPIED_STORE_ID","identityId":"COPIED_IDENTITY_ID","did":"COPIED_DID"},"profiles":["mcp_machine"],"issuers":["https://issuer.example"],"resources":["https://resource.example/mcp"],"publicTargets":false,"scopes":["agent.self.read","catalog.read"],"expiresAt":1800000000000}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
A matching actual Loader row is:
|
|
97
|
+
|
|
98
|
+
```yaml
|
|
99
|
+
- insert:
|
|
100
|
+
- id: work-mcp
|
|
101
|
+
name: '@deepseek-ai/dsh-mcp-client'
|
|
102
|
+
inject: ['anpIdentity', 'credentials']
|
|
103
|
+
config:
|
|
104
|
+
transport: streamable-http
|
|
105
|
+
serverName: work
|
|
106
|
+
url: https://resource.example/mcp
|
|
107
|
+
authentication:
|
|
108
|
+
mode: cimd-client-credentials
|
|
109
|
+
connectionId: work-mcp
|
|
110
|
+
identityRef: { storeId: COPIED_STORE_ID, identityId: COPIED_IDENTITY_ID, did: COPIED_DID }
|
|
111
|
+
policyRef: work-mcp
|
|
112
|
+
requestedScopes: [agent.self.read, catalog.read]
|
|
113
|
+
issuer: https://issuer.example
|
|
114
|
+
stateRoot: /home/dsh/.dsh/mcp-credentials
|
|
115
|
+
encryptionKeyRef: EXISTING_PROTECTED_MCP_KEY
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
`EXISTING_PROTECTED_MCP_KEY` must already be a real Host credential reference with D's required 32-byte base64url key. Do not put a literal secret in the patch. D owns that separate token-store prerequisite and persistent connection-id/fence management. An administrator may explicitly choose `publicTargets: true` for unfamiliar public targets while retaining fixed profiles, scope ceilings and expiry; C never widens it. The remote AS independently decides admission and business permissions.
|
|
119
|
+
|
|
120
|
+
For PAP, first publish the chosen PAP capability. Configure a separate policy for exactly `@agentconnect/dsh-pap/plugin`, with `pap_session`/`pap_account` profiles and the intended Company/issuer/resource/scope ceiling. Its actual plugin configuration is `{enabled:true, identityRef:<copied reference>, policyRef:<configured id>, stateRoot:<private F directory>}`. F's manager and tools are separate canonical entries, not the signing consumer. A no-AS Session does not require a callback driver or account capability. Product account handoff selects only the published fixed HTTPS relay; the independent engine loopback lane is not its fallback.
|
|
121
|
+
|
|
122
|
+
A policy restricted to `pap_session` may have an empty scope ceiling for a NoAS API. Requested scopes must still be a subset of that ceiling, so no nonempty request is authorized. Policies containing `mcp_machine` or `pap_account` continue to require explicit nonempty scope ceilings.
|
|
123
|
+
|
|
124
|
+
### Target-bound PAP Host factory
|
|
125
|
+
|
|
126
|
+
`bindPapHostConsumer(actualInstalledContext)` accepts only the actual installed F plugin allowed by Host policy. `resolveBinding(reference, policyRef, profile)` reads an existing matching policy and current published identity, returning only the public binding and an optional matching HTTPS relay. It never invents a policy for a fresh reference. Status/tools cannot revive a disposed factory; explicit identity selection or reload must bind again and acquire fresh leases.
|
|
127
|
+
|
|
128
|
+
`callbackManagementFor({identityRef,policyRef,targetRef})` additionally requires C's current opaque account target from the same installed fiber. Issuer, resource, scopes, publication and provider/manager generations are checked around execution. The existing encrypted broker records public transaction-to-target metadata, and claim checks that binding before a physical request. Another Company/resource/scope cannot consume the transaction. The object exposes only register/claim and `dispose`, with no Native Provider, Device Access, general HTTP or arbitrary proof purpose. Private claim results are not cached or written to the operation journal.
|
|
129
|
+
|
|
130
|
+
The bootstrap registration configuration/journal remain fixed for a stable id; this MVP has no configuration-migration or uncertain-registration recovery UI. Current Linux component evidence does not claim other-platform broker permission handling or OS keyring auto-lock acceptance. The strict component runs production admission, email factors, SQL, Registry and proofs; only external SMTP delivery and exact Siteverify transport are captured, under a test-user control unavailable to C's fetch adapter. Real Loader tests cover scoped ordinary consumers; management and legacy Provider admission remain root-only, and direct ACP-style `ctx.plugin()` without a trusted installation entry is rejected.
|
|
131
|
+
|
|
132
|
+
The opt-in `test/registration-bootstrap-live.spec.ts` uses the actual Loader-installed manager, requester, native provider and registry credential provider. Its E1 cases cover missing/low-version admission, an incorrect email token hash, user confirmation, publication/readback and same-state restart without another email or registration. Two precise lifecycle cases close the real provider after an email-status body await and after a successful registration response: the first sends no further email/register request; the second retains `registration_uncertain` and sends no Registry request or credential write. It does not claim to undo the already committed remote registration. Run this component with `DSH_IDENTITY_USER_SERVICE_SOURCE=<strict B candidate> DSH_IDENTITY_PYTHON=<B Python>` and `node node_modules/vitest/vitest.mjs run test/registration-bootstrap-live.spec.ts` under its source/native test configuration. The strict bridge requires the independently enabled `dsh-identity/1106` policy and matching native API v2 candidate. Without the opt-in environment, normal owner collection skips the live cases.
|
|
133
|
+
|
|
134
|
+
The separate `test/registration-bootstrap-web-live.spec.ts` exercises fresh rootless Web creation through the same actual approval, strict factors and native proof. It verifies that the UUID registration operation on the wire matches the durable journal, the published public document contains no root method or root proof, and restarting the same Store preserves the reference/operation without another registration or email. This positive Web lane does not repeat the E1 lifecycle cases or claim a RootControl operation exists for Web.
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
## Source-only production-baseline interoperability
|
|
138
|
+
|
|
139
|
+
The focused MCP lane uses `vitest.mcp-product.config.mjs` with the explicit `DSH_MCP_PRODUCT_HARNESS_SOURCE` checkout. Its aliases select one real Host Cordis/Loader implementation for both root and Agent Preset trees; they do not fabricate an installed caller or relax admission. The test TLS publisher uses `identity.example` to match the actual DID domain, with an exact test CA/address map. Post-registration observations count HTTP Signature requests and require zero cached registration-Bearer requests. SMTP/Siteverify transports remain component fixtures; these checks are not public-network System or GUI acceptance.
|
|
140
|
+
|
|
141
|
+
## DSH npm release 0.1.8
|
|
142
|
+
|
|
143
|
+
This plugin targets Harness `0.2.2-rc.1` and depends on the exact
|
|
144
|
+
`@agent-network-protocol/anp-identity@0.2.6` runtime wrapper. Install the DSH
|
|
145
|
+
bundle with `pnpm dsh plugin --profile <profile> add @agent-network-protocol/dsh-anp-identity@0.1.8`.
|
|
146
|
+
The wrapper selects a matching prebuilt addon for macOS x64/arm64, Linux GNU
|
|
147
|
+
x64/arm64, or Windows x64; no local Rust build is needed on those targets.
|
|
148
|
+
Do not replace that dependency with an older same-API-looking binary.
|
|
149
|
+
|
|
150
|
+
Installation does not create/publish an identity or grant a consumer permission.
|
|
151
|
+
Configure the Host state root, secret backend, installed consumers and exact
|
|
152
|
+
protocol policies before requesting identity creation or access. Existing
|
|
153
|
+
profiles and encrypted custody must retain their original matching keys.
|
|
154
|
+
The older credential-package references above describe earlier integration
|
|
155
|
+
candidates; this release uses the `0.2.2-rc.1` peers declared by its manifest.
|
|
156
|
+
|
|
157
|
+
## Registration-service preferences
|
|
158
|
+
|
|
159
|
+
Registration-service preferences are manager-only, generation/CAS-protected,
|
|
160
|
+
atomically persisted non-secret settings. They default to https://awiki.me and
|
|
161
|
+
are configurable in Settings → Identity. The preference is only used when a
|
|
162
|
+
new bootstrap omits an explicit origin; immutable per-flow pins prevent a later
|
|
163
|
+
preference update from redirecting an in-progress factor or publication. The UI
|
|
164
|
+
does not create identities or request codes when saving the URL. Creation
|
|
165
|
+
parameters, contact method and protocol policies still require their existing
|
|
166
|
+
Host configuration and approvals.
|
|
167
|
+
|
|
168
|
+
## Server-owned publication URLs
|
|
169
|
+
|
|
170
|
+
User Service alone allocates `client_id` and `jwks_uri`. The current server
|
|
171
|
+
format is `https://id.awiki.info/{handle}/client.json` with a parallel
|
|
172
|
+
`/{handle}/jwks.json`. The plugin obtains the client URL from the authenticated
|
|
173
|
+
resolve/status response and the key URL from the returned metadata. It stores
|
|
174
|
+
and uses these exact values; it never derives public paths from a document UUID,
|
|
175
|
+
Handle, or filename substitution. Management API paths remain versioned and are
|
|
176
|
+
not client identifiers.
|
|
177
|
+
|
|
178
|
+
Address transparency retains HTTPS, exact-origin, no-redirect, metadata-ID,
|
|
179
|
+
public-key and DID-binding checks. Public readback fetches the exact server
|
|
180
|
+
URLs and compares the bytes with the signed publication. Old UUID public routes
|
|
181
|
+
are not supported and no existing catalog/data migration is supplied.
|
package/README.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# ANP Identity for DeepSeek Harness
|
|
2
2
|
|
|
3
|
+
This candidate targets Harness `0.2.2-rc.1`, Cordis `4.1.0`, and Loader `1.1.0`, not Harness `0.1.5`. Remote descriptors use lazy `create()` codecs. In-process Gateway callers must supply an explicit Peer and install the Remote Access service.
|
|
4
|
+
|
|
5
|
+
Shared protocol identities without a dedicated request-signing key can request `ordinary-http/1` approval for public reads and native exact-request HTTP authentication with their unique device authentication key. This profile cannot perform raw signatures or OAuth assertions. A dedicated request-signing identity keeps its original ordinary-use profile; existing grants are never expanded. Older versions do not understand the new HTTP-only snapshot, so revoke/archive those grants before a downgrade.
|
|
6
|
+
|
|
7
|
+
An explicitly configured `userConsumers` entry may use `httpAllowedOrigins[consumer]: ['*']` for any HTTPS origin. The manager labels this broad permission before user approval. Both the approved grant and current Host policy must permit each dispatch; existing exact-origin grants never widen silently. Legacy Host consumers cannot use this wildcard. One-time operation binding and revocation remain enforced. Older versions do not understand wildcard snapshots; revoke those grants before downgrading.
|
|
8
|
+
|
|
3
9
|
`@agent-network-protocol/dsh-anp-identity` gives DSH applications one shared, multi-DID identity store without making each application implement key custody, DID document lifecycle, crash recovery, or request signing.
|
|
4
10
|
|
|
5
11
|
Ordinary plugins use `bindIdentityClient(ctx)` to request user-approved identity creation and use. Trusted Host integrations retain a separate facade through `ctx.anpIdentity`. The plugin delegates private-key operations to the ANP Identity native module, keeps private keys encrypted at rest, and stores only non-secret DSH metadata—labels, handles, and consumer grants—in its catalog.
|
|
@@ -14,7 +20,7 @@ A DSH installation may host several plugins and several independent DIDs. Those
|
|
|
14
20
|
- How can a request be authenticated without exposing a reusable signature header patch?
|
|
15
21
|
- How can a Store contain several DIDs while handles and deletion grants remain consistent?
|
|
16
22
|
|
|
17
|
-
This package supplies that coordination layer. ANP Identity remains the source of truth for identities and encrypted keys. A transactional catalog adds DSH-specific ownership metadata. Creation uses a recoverable intent; deletion writes a tombstone before touching the native Store; cross-process mutations use a file lock, generation checks, and atomic rename.
|
|
23
|
+
This package supplies that coordination layer. ANP Identity remains the source of truth for identities and encrypted keys. A transactional catalog adds DSH-specific ownership metadata. Creation uses a recoverable intent; deletion writes a tombstone before touching the native Store; cross-process mutations use a file lock, generation checks, and atomic rename. The current publication extension upgrades the catalog to schema v4; see the coordinated upgrade and rollback instructions in [V7-MANAGEMENT.md](./V7-MANAGEMENT.md).
|
|
18
24
|
|
|
19
25
|
## What it provides
|
|
20
26
|
|
|
@@ -33,6 +39,13 @@ purpose-scoped signing, document changes and Host enrollment. Web Host status ha
|
|
|
33
39
|
`rootKeyFingerprint: null`; Root Import/Transfer remain WBA-only. The public
|
|
34
40
|
types are imported from the native package, without a second method model here.
|
|
35
41
|
|
|
42
|
+
User-approved protocol creation (`parameters.usage: 'protocol'`) defaults to the
|
|
43
|
+
full Direct/Group messaging Manifest, including E2EE, for both E1 and Web.
|
|
44
|
+
The existing device-signing and agreement keys support later messaging plugin
|
|
45
|
+
integration. Creating an identity does not connect a messaging plugin or grant it
|
|
46
|
+
access; existing identity documents are unchanged. See [PUBLICATION.md](./PUBLICATION.md)
|
|
47
|
+
for the exact profiles and registration server requirements.
|
|
48
|
+
|
|
36
49
|
## What it does not provide
|
|
37
50
|
|
|
38
51
|
- It is not a DID registry, resolver, publication server, backup system, or wallet UI.
|
|
@@ -60,12 +73,23 @@ registry wrapper and its five platform packages.
|
|
|
60
73
|
|
|
61
74
|
Load the Service before its Provider. The included `cordis.patch.yml` is a starting point:
|
|
62
75
|
|
|
76
|
+
The source candidate also provides an opt-in fresh protocol registration flow through `./protocol-bootstrap` and the existing manager's non-secret `registrationBootstrap` configuration. It retains real creation approval, User Service email/Turnstile confirmation, Registry verification and encrypted Host credential custody. It requires independent `dsh-identity/1106` admission and a matching native API v2 candidate; the same registry version number alone does not prove those methods exist. [Publication and fresh setup](PUBLICATION.md#fresh-host-registration-bootstrap) describes the two-stage Host configuration. Published state does not automatically grant MCP/PAP permission.
|
|
77
|
+
|
|
63
78
|
The shipping DSH layer grants `@awiki/dsh-plugin` client and Host Provider
|
|
64
79
|
access by default so the documented two-plugin AWiki installation works without
|
|
65
80
|
an extra local patch. Set `DSH_ANP_IDENTITY_ALLOW_CONSUMERS` and
|
|
66
81
|
`DSH_ANP_IDENTITY_ALLOW_PROVIDER_CONSUMERS` to explicit JSON arrays to replace
|
|
67
82
|
those defaults for a different deployment.
|
|
68
83
|
|
|
84
|
+
For MCP or PAP protocol use, configure the exact consumer in
|
|
85
|
+
`DSH_ANP_IDENTITY_ALLOW_CONSUMERS` and `DSH_ANP_IDENTITY_USER_CONSUMERS`, and
|
|
86
|
+
provide explicit `ProtocolUsePolicy` entries through
|
|
87
|
+
`DSH_ANP_IDENTITY_PROTOCOL_POLICIES` (a JSON array, default `[]`). These are
|
|
88
|
+
Host configuration inputs; loading the bundle alone grants no protocol target,
|
|
89
|
+
resource, scope, or signer permission. Keep the default empty policy until the
|
|
90
|
+
deployment has approved its precise targets. See [PUBLICATION.md](PUBLICATION.md)
|
|
91
|
+
for the publication capability boundary.
|
|
92
|
+
|
|
69
93
|
```yaml
|
|
70
94
|
- insert:
|
|
71
95
|
- id: anp-identity
|
|
@@ -87,6 +111,8 @@ those defaults for a different deployment.
|
|
|
87
111
|
|
|
88
112
|
`rootKeyProviderId` is `service/account` for keyring, the environment variable name for `env`, and the key id for programmatic `injected` setup. `local-file` must be selected explicitly; copying both the Store and its local Root Key file permits offline decryption.
|
|
89
113
|
|
|
114
|
+
Both `local-file` and OS keyring are existing local implementations. A file-based Host can select `rootKeyProvider: local-file` (or `DSH_ANP_IDENTITY_ROOT_KEY_PROVIDER=local-file` for the bundle); OS keyring is optional. Management-broker keys reuse DSH's existing atomic credential records, with encrypted local files for broker and protocol state.
|
|
115
|
+
|
|
90
116
|
## Use it from another DSH plugin
|
|
91
117
|
|
|
92
118
|
Ordinary plugins must be configured in `userConsumers` by the Host. They use the loader-bound client below, not a self-declared consumer name or a legacy lease:
|
|
@@ -214,3 +240,49 @@ relying on a parent workspace's `node_modules`. They are test-environment
|
|
|
214
240
|
dependencies; the browser build continues to use the host-provided UI primitives.
|
|
215
241
|
|
|
216
242
|
Licensed under Apache-2.0.
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
## Shared public client identity foundation
|
|
246
|
+
|
|
247
|
+
The publication module prepares one stable CIMD/JWKS pair for an existing managed
|
|
248
|
+
identity. The Host registers `createPublicationBackend(...)` with
|
|
249
|
+
`service.registerPublicationBackend(managerContext, name, backend)`. Registration
|
|
250
|
+
requires the live installed `@agent-network-protocol/dsh-anp-identity/management-remote`
|
|
251
|
+
Context. The transport delegates management authentication to the Host's existing
|
|
252
|
+
`authenticatedFetch` and DID publication to `publishDocument`; neither function
|
|
253
|
+
nor its credentials belongs in Loader YAML, Browser requests or model tools.
|
|
254
|
+
Read [PUBLICATION.md](./PUBLICATION.md) for the contract and remaining integration boundaries.
|
|
255
|
+
|
|
256
|
+
The manager exposes publication status, publish and retry commands. The existing
|
|
257
|
+
settings view displays safe status/CIMD and a retry action. It does not collect
|
|
258
|
+
credentials or assume a working callback. Missing redirect configuration stays
|
|
259
|
+
`awaiting_configuration`; no default callback or PAP grant is advertised.
|
|
260
|
+
|
|
261
|
+
Ordinary Host consumers opt in through `oauthAllowedAudiences` and user approval.
|
|
262
|
+
Their authorized facade provides `oauthClientIdentity()` and
|
|
263
|
+
`signOAuthClientAssertion(exactAudience)`. The Host chooses the published client
|
|
264
|
+
and key. Opted-in consumers cannot use the old raw authentication signer to
|
|
265
|
+
bypass this typed policy; domain-separated application signing remains available.
|
|
266
|
+
Tokens/assertions are never exposed by the manager Remote.
|
|
267
|
+
|
|
268
|
+
Protocol identity creation uses an explicit `usage: 'protocol'` approval, local E1/Web device custody, capability-driven ES256 publication and target-bound machine/PAP leases. See [the publication and management contract](./PUBLICATION.md) for the real User Service driver, encrypted management broker, catalog v4 migration and validation boundaries.
|
|
269
|
+
|
|
270
|
+
The trusted Host publication driver also supplies typed, device-bound PAP callback registration and one-shot pickup. V2 PAP account supports a separate strict RFC 8252 loopback redirect declaration; V1 and protected public fetch URLs keep their HTTPS-only rules. These callbacks are not exposed by Remote or model tools.
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
The trusted User Service registration/publication driver signs every post-registration request with the existing ANP HTTP signer and registered device key; it does not reuse the saved registration Bearer. Device-operation authorization and public API shapes remain unchanged. See [the transport contract](PUBLICATION.md#registration-and-management).
|
|
274
|
+
|
|
275
|
+
## Configurable registration service
|
|
276
|
+
|
|
277
|
+
New registration configurations default to `https://awiki.me`. The authenticated
|
|
278
|
+
**Settings → Identity → Identity service** form saves the HTTPS root address on
|
|
279
|
+
the Host (not in browser local storage). Saving does not send an OTP, create an
|
|
280
|
+
identity, publish a DID or migrate an existing identity.
|
|
281
|
+
|
|
282
|
+
Omit `registrationBootstrap.origin` to use this saved default for a new flow.
|
|
283
|
+
An explicitly configured origin keeps precedence. Every new default-based flow
|
|
284
|
+
pins its original origin by its stable id/requestId; changing the preference or
|
|
285
|
+
restarting the Host cannot redirect an existing verification or publication flow.
|
|
286
|
+
Use a new identity and new flow IDs when moving between services, and configure
|
|
287
|
+
the matching DID domain/Handle in the creation request. Existing `id.awiki.info`
|
|
288
|
+
identities and their MCP/PAP bindings remain unchanged.
|
package/README.zh.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# 面向 DeepSeek Harness 的 ANP Identity
|
|
2
2
|
|
|
3
|
+
当前候选面向 Harness `0.2.2-rc.1`、Cordis `4.1.0` 与 Loader `1.1.0`,不再声明兼容 Harness `0.1.5`。Remote 描述符使用延迟 `create()` codec;同进程 Gateway 调用必须显式提供 Peer 并安装 Remote Access 服务。
|
|
4
|
+
|
|
5
|
+
没有专用请求签名密钥的公共协议身份,可通过 `ordinary-http/1` 审批,仅使用唯一设备认证密钥执行本机精确 HTTP 请求签名和公开身份读取;不能做通用原始签名或 OAuth 断言。有专用请求签名密钥的身份保持原有能力,已有授权不会扩大。旧版本不识别该 HTTP-only 快照,降级前需撤销或归档这些授权。
|
|
6
|
+
|
|
7
|
+
显式列入 `userConsumers` 的插件可配置 `httpAllowedOrigins[consumer]: ['*']`,允许任意 HTTPS 域名。管理界面会在审批前明确显示这一广泛权限;每次请求仍须同时符合已批准授权和当前 Host 策略。已有精确域名授权不会自动扩大,单次操作绑定和撤销检查不变;Legacy Host 消费者不能使用该通配符。旧版本不识别通配授权快照,降级前需撤销这些授权。
|
|
8
|
+
|
|
3
9
|
`@agent-network-protocol/dsh-anp-identity` 为 DSH 应用提供共享的多 DID 身份 Store。应用不需要各自实现私钥托管、DID Document 生命周期、崩溃恢复和请求签名。
|
|
4
10
|
|
|
5
11
|
普通插件通过 `bindIdentityClient(ctx)` 申请创建身份和使用授权;`ctx.anpIdentity` 的旧 lease 接口保留给可信 Host 集成。私钥操作由 ANP Identity 原生模块完成;私钥在磁盘上加密保存。DSH catalog 只记录 label、handle 和 consumer grant 等非秘密元数据。
|
|
@@ -14,7 +20,7 @@
|
|
|
14
20
|
- HTTP 请求如何完成身份认证,同时不把可复用 Header patch 交给调用方;
|
|
15
21
|
- 多 DID、通用 handle、consumer grant 和删除保护如何保持一致。
|
|
16
22
|
|
|
17
|
-
ANP Identity Store 是身份与加密密钥的真值。插件增加事务化的 catalog:创建前写 intent,删除前写 tombstone;跨进程修改使用文件锁、generation 检查和原子 rename。异常重启后流程会继续完成,未知身份只会成为无授权的 `Unclaimed
|
|
23
|
+
ANP Identity Store 是身份与加密密钥的真值。插件增加事务化的 catalog:创建前写 intent,删除前写 tombstone;跨进程修改使用文件锁、generation 检查和原子 rename。异常重启后流程会继续完成,未知身份只会成为无授权的 `Unclaimed`,不会猜测所有者。当前发布扩展将 catalog 升级为 v4,升级和回滚必须遵循 [V7-MANAGEMENT.md](./V7-MANAGEMENT.md) 的停写与一致性要求。
|
|
18
24
|
|
|
19
25
|
## 主要能力
|
|
20
26
|
|
|
@@ -35,6 +41,10 @@ ANP Identity Store 是身份与加密密钥的真值。插件增加事务化的
|
|
|
35
41
|
|
|
36
42
|
完整边界见 [BOUNDARY.md](./BOUNDARY.md)。
|
|
37
43
|
|
|
44
|
+
本轮源码候选还提供显式启用的 fresh 协议身份注册:`./protocol-bootstrap` 发起真实创建审批,现有 manager 的非秘密 `registrationBootstrap` 配置继续 User Service 邮箱/Turnstile 确认、Registry 验证及加密 Host 凭据保管。它要求独立 `dsh-identity/1106` 产品准入和匹配的 native API v2 候选;registry 版本号相同不代表已含这些方法。[发布与 fresh 设置](PUBLICATION.md#fresh-host-registration-bootstrap)说明分两阶段配置真实 Host;“已发布”不自动表示 MCP/PAP 已获使用许可。
|
|
45
|
+
|
|
46
|
+
协议身份创建(`parameters.usage: 'protocol'`)默认声明完整的私聊、群聊及端到端加密协议,E1 和 Web 都保留供后续消息插件使用的设备签名与加密协商密钥。创建身份不会自动连接消息插件或向它授权,也不会修改既有身份的文档。注册服务需要接受完整协议清单;显式开启 identity-only 模式的服务会拒绝该清单。具体协议列表见 [PUBLICATION.md](./PUBLICATION.md)。
|
|
47
|
+
|
|
38
48
|
## 安装与配置
|
|
39
49
|
|
|
40
50
|
```bash
|
|
@@ -70,6 +80,8 @@ pnpm add @agent-network-protocol/dsh-anp-identity
|
|
|
70
80
|
|
|
71
81
|
keyring 的 `rootKeyProviderId` 格式为 `service/account`;env 模式填写环境变量名;injected 模式填写 key id,并且只能通过可信 Host 代码以 Buffer 注入,不能写入 Loader YAML。`local-file` 必须显式启用;如果 Store 与 Root Key 文件被一起复制,攻击者可以离线解密 Store。
|
|
72
82
|
|
|
83
|
+
`local-file` 与 OS keyring 都是已实现的本地方式。采用文件保管的 Host 可选择 `rootKeyProvider: local-file`(bundle 对应 `DSH_ANP_IDENTITY_ROOT_KEY_PROVIDER=local-file`),不要求使用 OS keyring。管理 broker master 直接复用 DSH 既有原子 credential record,broker 与协议状态保持加密本地文件。
|
|
84
|
+
|
|
73
85
|
## 其他 DSH 插件如何使用
|
|
74
86
|
|
|
75
87
|
普通插件由 Host 加入 `userConsumers`,通过 `bindIdentityClient(ctx)` 提交请求,等待创建确认,再单独申请使用授权。创建不会发布 DID 文档、注册 Handle 或自动授予使用权。支持单次授权和持续到撤销的永久授权;当前默认授予全部普通使用权限,暂不支持逐项选择。
|
|
@@ -158,3 +170,34 @@ consumer 打包并安装到临时的真实 DSH profile,再向使用 ANP Python
|
|
|
158
170
|
后会删除临时 DSH profile、Store、证书和 tarball。
|
|
159
171
|
|
|
160
172
|
许可证:Apache-2.0。
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
## 公共客户端身份基础
|
|
176
|
+
|
|
177
|
+
新增能力和安全边界见 [PUBLICATION.md](./PUBLICATION.md)。公共身份插件可以独立加载,
|
|
178
|
+
通过可信 Host 注册的 User Service 管理通道和已有 DID 发布驱动,准备并发布 CIMD/JWKS。
|
|
179
|
+
缺少真实回调或授权通道时保持待配置,不要求消息或邮件插件,不默认发起第三方登录。
|
|
180
|
+
现有管理页展示发布状态、CIMD 和失败重试;普通插件的 OAuth 签名必须同时满足精确
|
|
181
|
+
`oauthAllowedAudiences`、用户 grant、已发布记录和有效密钥。断言不通过 Browser/Remote 返回。
|
|
182
|
+
|
|
183
|
+
协议身份通过显式 `usage: 'protocol'` 创建审批,使用本地 E1/Web 设备密钥、按能力投影的 ES256 发布,以及目标绑定的机器/PAP lease。真实 User Service 管理通道、加密凭据 broker、catalog v4 迁移与验证边界见 [发布与管理契约](./PUBLICATION.md)。
|
|
184
|
+
|
|
185
|
+
可信 Host 发布 driver 同时提供 typed、设备绑定的 PAP callback 注册与一次领取。V2 PAP account 可独立声明严格 RFC 8252 loopback redirect;V1 与受保护公开获取 URL 保持 HTTPS 规则。这些 callback 能力不向 Remote 或模型工具开放。
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
受信的 User Service 注册/发布驱动使用已有 ANP HTTP 签名能力和登记设备密钥签署注册后的每次请求,不复用注册时保存的 Bearer。设备操作授权与公开 API 形状保持不变,详见 [传输约定](PUBLICATION.md#registration-and-management)。
|
|
189
|
+
|
|
190
|
+
## Configurable registration service
|
|
191
|
+
|
|
192
|
+
New registration configurations default to `https://awiki.me`. The authenticated
|
|
193
|
+
**Settings → Identity → Identity service** form saves the HTTPS root address on
|
|
194
|
+
the Host (not in browser local storage). Saving does not send an OTP, create an
|
|
195
|
+
identity, publish a DID or migrate an existing identity.
|
|
196
|
+
|
|
197
|
+
Omit `registrationBootstrap.origin` to use this saved default for a new flow.
|
|
198
|
+
An explicitly configured origin keeps precedence. Every new default-based flow
|
|
199
|
+
pins its original origin by its stable id/requestId; changing the preference or
|
|
200
|
+
restarting the Host cannot redirect an existing verification or publication flow.
|
|
201
|
+
Use a new identity and new flow IDs when moving between services, and configure
|
|
202
|
+
the matching DID domain/Handle in the creation request. Existing `id.awiki.info`
|
|
203
|
+
identities and their MCP/PAP bindings remain unchanged.
|
package/V7-MANAGEMENT.md
CHANGED
|
@@ -88,3 +88,21 @@ DSH native-window, live ordinary-consumer product integration, and real-service
|
|
|
88
88
|
# Local presentation integration
|
|
89
89
|
|
|
90
90
|
The optional `settings.nav.icon` contribution provides a contact-card glyph only for the settings menu. Identity list entries remain text-only. The shell owns that root-scoped list slot; ANP registers the glyph under `anp-identity`, matching its settings-section id. Older shells without the slot continue to render the page with their default navigation glyph. This presentation extension does not grant identity access or alter protocol behavior.
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
## Publication extension: catalog v3 and explicit manager context
|
|
94
|
+
|
|
95
|
+
The earlier v2 section above records the original management release. Current
|
|
96
|
+
publication code uses `anp-identity-catalog/4` and atomically backs up a valid v1/v2
|
|
97
|
+
input to `.before-v3` before upgrading. The authorization ledger is still separate;
|
|
98
|
+
publication adds no private-key or third-party token storage. Stop old writers and
|
|
99
|
+
use coordinated catalog/native/authorization restoration for rollback.
|
|
100
|
+
|
|
101
|
+
`acquireManagement(context)` now requires the live installed manager plugin
|
|
102
|
+
Context. A raw root service, root Context and ordinary consumer Context cannot
|
|
103
|
+
obtain it. The manager Remote passes its own Context and exposes only safe
|
|
104
|
+
publication configuration/status/retry; signing assertions is Host-only.
|
|
105
|
+
|
|
106
|
+
See [PUBLICATION.md](./PUBLICATION.md) for the added module. The original v7
|
|
107
|
+
verification statement above does not imply that current source has passed real
|
|
108
|
+
remote publication, ordinary-consumer product E2E or SDK registry publication.
|
package/cordis.patch.yml
CHANGED
|
@@ -9,8 +9,10 @@
|
|
|
9
9
|
stateRoot: !!js process.env.DSH_ANP_IDENTITY_STATE_ROOT
|
|
10
10
|
allowConsumers: !!js JSON.parse(process.env.DSH_ANP_IDENTITY_ALLOW_CONSUMERS ?? '["@awiki/dsh-plugin"]')
|
|
11
11
|
userConsumers: !!js JSON.parse(process.env.DSH_ANP_IDENTITY_USER_CONSUMERS ?? '[]')
|
|
12
|
+
protocolPolicies: !!js JSON.parse(process.env.DSH_ANP_IDENTITY_PROTOCOL_POLICIES ?? '[]')
|
|
12
13
|
allowProviderConsumers: !!js JSON.parse(process.env.DSH_ANP_IDENTITY_ALLOW_PROVIDER_CONSUMERS ?? '["@awiki/dsh-plugin"]')
|
|
13
14
|
httpAllowedOrigins: !!js JSON.parse(process.env.DSH_ANP_IDENTITY_HTTP_ALLOWED_ORIGINS ?? '{}')
|
|
15
|
+
oauthAllowedAudiences: !!js JSON.parse(process.env.DSH_ANP_IDENTITY_OAUTH_ALLOWED_AUDIENCES ?? '{}')
|
|
14
16
|
recoveryOnOpen: true
|
|
15
17
|
|
|
16
18
|
- id: anp-identity-provider
|
|
@@ -23,3 +25,10 @@
|
|
|
23
25
|
|
|
24
26
|
- id: anp-identity-manager
|
|
25
27
|
name: '@agent-network-protocol/dsh-anp-identity/management-remote'
|
|
28
|
+
config:
|
|
29
|
+
registrationBootstrap: !!js 'process.env.DSH_ANP_IDENTITY_REGISTRATION_BOOTSTRAP === undefined ? undefined : JSON.parse(process.env.DSH_ANP_IDENTITY_REGISTRATION_BOOTSTRAP)'
|
|
30
|
+
|
|
31
|
+
- id: anp-identity-protocol-bootstrap
|
|
32
|
+
name: '@agent-network-protocol/dsh-anp-identity/protocol-bootstrap'
|
|
33
|
+
disabled: !!js process.env.DSH_ANP_IDENTITY_PROTOCOL_BOOTSTRAP === undefined
|
|
34
|
+
config: !!js 'process.env.DSH_ANP_IDENTITY_PROTOCOL_BOOTSTRAP === undefined ? {} : JSON.parse(process.env.DSH_ANP_IDENTITY_PROTOCOL_BOOTSTRAP)'
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Apply after the identity bundle. Replace domains, email and private absolute
|
|
2
|
+
# paths with actual deployment values; retain existing approved allowlists.
|
|
3
|
+
- id: anp-identity
|
|
4
|
+
config:
|
|
5
|
+
stateRoot: /home/dsh/.dsh/anp-identity
|
|
6
|
+
allowConsumers:
|
|
7
|
+
- '@awiki/dsh-plugin'
|
|
8
|
+
- '@agent-network-protocol/dsh-anp-identity/protocol-bootstrap'
|
|
9
|
+
userConsumers: ['@agent-network-protocol/dsh-anp-identity/protocol-bootstrap']
|
|
10
|
+
allowProviderConsumers: ['@awiki/dsh-plugin']
|
|
11
|
+
protocolPolicies: []
|
|
12
|
+
recoveryOnOpen: true
|
|
13
|
+
- id: anp-identity-provider
|
|
14
|
+
config:
|
|
15
|
+
stateRoot: /home/dsh/.dsh/anp-identity
|
|
16
|
+
rootKeyProvider: keyring
|
|
17
|
+
rootKeyProviderId: anp-identity/dsh
|
|
18
|
+
keyringFallbackToLocalFile: false
|
|
19
|
+
- id: anp-identity-protocol-bootstrap
|
|
20
|
+
disabled: false
|
|
21
|
+
config:
|
|
22
|
+
requestId: work-agent-create
|
|
23
|
+
profile: e1
|
|
24
|
+
label: Work protocol identity
|
|
25
|
+
domain: identity.example
|
|
26
|
+
path: /awiki/user/work-agent
|
|
27
|
+
handle: work-agent.identity.example
|
|
28
|
+
- id: anp-identity-manager
|
|
29
|
+
config:
|
|
30
|
+
registrationBootstrap:
|
|
31
|
+
id: work-agent
|
|
32
|
+
requestId: work-agent-create
|
|
33
|
+
stateRoot: /home/dsh/.dsh/identity-bootstrap
|
|
34
|
+
origin: https://identity.example
|
|
35
|
+
email: agent@example.com
|
|
36
|
+
clientName: Work protocol identity
|
|
37
|
+
capabilities: { mcpMachine: true, papSession: false, papAccount: false }
|
|
38
|
+
redirectUris: []
|
|
@@ -9,7 +9,9 @@ export interface CapabilitySnapshot {
|
|
|
9
9
|
readonly version: string;
|
|
10
10
|
readonly capabilities: readonly OrdinaryCapability[];
|
|
11
11
|
readonly signingPurposes: readonly string[];
|
|
12
|
+
/** HTTPS origins, or '*' only when the Host and user explicitly approve all HTTPS origins. */
|
|
12
13
|
readonly httpOrigins: readonly string[];
|
|
14
|
+
readonly oauthAudiences?: readonly string[];
|
|
13
15
|
}
|
|
14
16
|
export type AuthorizationMode = 'once' | 'permanent';
|
|
15
17
|
export type RequestStatus = 'pending' | 'approved' | 'denied' | 'cancelled' | 'expired';
|
|
@@ -20,8 +22,12 @@ export interface ControlledOperation {
|
|
|
20
22
|
readonly summary: string;
|
|
21
23
|
readonly signingPurpose?: string;
|
|
22
24
|
readonly httpOrigin?: string;
|
|
25
|
+
readonly oauthAudience?: string;
|
|
23
26
|
}
|
|
24
27
|
export interface CreateParameters {
|
|
28
|
+
readonly profile?: 'e1' | 'web';
|
|
29
|
+
readonly usage?: 'ordinary' | 'protocol';
|
|
30
|
+
readonly identityOnly?: boolean;
|
|
25
31
|
readonly label: string;
|
|
26
32
|
readonly domain: string;
|
|
27
33
|
readonly path: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authorization-types.d.ts","sourceRoot":"","sources":["../src/authorization-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAA;AAE7E,0EAA0E;AAC1E,MAAM,WAAW,cAAc;IAAG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE;AAC3F,MAAM,MAAM,kBAAkB,GAAG,eAAe,GAAG,eAAe,GAAG,oBAAoB,CAAA;AACzF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,YAAY,EAAE,SAAS,kBAAkB,EAAE,CAAA;IACpD,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3C,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"authorization-types.d.ts","sourceRoot":"","sources":["../src/authorization-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authorization.d.ts","sourceRoot":"","sources":["../src/authorization.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"authorization.d.ts","sourceRoot":"","sources":["../src/authorization.ts"],"names":[],"mappings":"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"}
|