@agenticprimitives/devkit 0.0.0-alpha.2 → 0.0.0-alpha.21
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/README.md +50 -0
- package/bin/ap.mjs +645 -6
- package/dist/config.js +11 -11
- package/dist/config.js.map +1 -1
- package/dist/definitions.d.ts +85 -0
- package/dist/definitions.d.ts.map +1 -0
- package/dist/definitions.js +90 -0
- package/dist/definitions.js.map +1 -0
- package/dist/developer-mcp.d.ts +16 -0
- package/dist/developer-mcp.d.ts.map +1 -0
- package/dist/developer-mcp.js +215 -0
- package/dist/developer-mcp.js.map +1 -0
- package/dist/dispatch.d.ts +156 -0
- package/dist/dispatch.d.ts.map +1 -1
- package/dist/dispatch.js +55 -1
- package/dist/dispatch.js.map +1 -1
- package/dist/index.d.ts +8 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/lock.d.ts +4 -0
- package/dist/lock.d.ts.map +1 -1
- package/dist/lock.js +2 -1
- package/dist/lock.js.map +1 -1
- package/dist/rules/no-cross-subject-vault-reads.d.ts.map +1 -1
- package/dist/rules/no-cross-subject-vault-reads.js +2 -1
- package/dist/rules/no-cross-subject-vault-reads.js.map +1 -1
- package/dist/rules/web-no-direct-mcp.d.ts.map +1 -1
- package/dist/rules/web-no-direct-mcp.js +2 -1
- package/dist/rules/web-no-direct-mcp.js.map +1 -1
- package/dist/rules-projection.d.ts.map +1 -1
- package/dist/rules-projection.js +5 -1
- package/dist/rules-projection.js.map +1 -1
- package/dist/upgrade.d.ts +10 -0
- package/dist/upgrade.d.ts.map +1 -1
- package/dist/upgrade.js +111 -4
- package/dist/upgrade.js.map +1 -1
- package/package.json +31 -8
- package/rules/hard-rules.md +3 -3
- package/rules/service-agent-birthrights.md +76 -0
- package/rules/vault-is-the-record-apps-hold-references.md +47 -0
package/dist/config.js
CHANGED
|
@@ -20,6 +20,9 @@ export const RING0_DOCTOR_CONFIG = {
|
|
|
20
20
|
allowedIn: [
|
|
21
21
|
{ file: 'apps/demo-a2a/src/config.ts', why: 'local-aes dev backend reads A2A_MASTER_PRIVATE_KEY only when A2A_KMS_BACKEND=local-aes; production is gcp-kms (deferred KMS migration, memory project_demo_a2a_kms_deferred)' },
|
|
22
22
|
{ file: 'apps/demo-a2a/scripts/canonical-a2a-e2e.ts', why: 'e2e harness mints an ephemeral SIWE persona; never an identity, never deployed' },
|
|
23
|
+
{ file: 'apps/demo-discovery-connector/src/gateway/tools.ts', why: 'gateway-raw-delegate-key (findings.yaml, accepted-risk): the gateway agent\'s own session-wire delegate key (spec 387); KMS signer + re-issued wire scheduled' },
|
|
24
|
+
{ file: 'apps/home-mcp/src/act.ts', why: 'home-mcp-raw-act-key (findings.yaml, accepted-risk): the act-as-me key is the delegate of the person\'s capped, per-wire-revocable standing wires (spec 397 §11); KMS signer + re-issued wires scheduled with the ask key' },
|
|
25
|
+
{ file: 'apps/home-mcp/src/index.ts', why: 'home-mcp-raw-delegate-key (findings.yaml, accepted-risk): the ask-as-me delegate key holds no authority of its own; KMS signer + client re-registration scheduled (spec 397)' },
|
|
23
26
|
{ file: 'apps/demo-sso-next/scripts/provision-demo-personas-local.ts', why: 'local-chain provisioner with published dev keys' },
|
|
24
27
|
{ file: 'apps/demo-sso-next/scripts/provision-service-agent-local.ts', why: 'local-chain provisioner with published dev keys' },
|
|
25
28
|
{ file: 'apps/demo-sso-next/scripts/provision-typed-service-agent.ts', why: 'one-run operator CLI; key from env, never written' },
|
|
@@ -46,17 +49,14 @@ export const RING0_DOCTOR_CONFIG = {
|
|
|
46
49
|
{ name: 'A2A_INTERACTIONS_SESSION_PRIVATE_KEY', why: 'workstation-only InteractionsDO session signer when no Cloud KMS is present' },
|
|
47
50
|
],
|
|
48
51
|
},
|
|
49
|
-
noHmacHomeBridge: { dir: 'apps/demo-sso-next', hmacCall: 'bridgeInteractions', sessionRpcCall: 'callInteractions', ceilings: { hmac: 0, total:
|
|
50
|
-
noCrossSubjectVaultReads: { roots: ['packages/context/src', 'apps/demo-a2a/src'], exemptFiles: ['self-only.ts'], gate: 'subjectOfRead' },
|
|
52
|
+
noHmacHomeBridge: { dir: 'apps/demo-sso-next', hmacCall: 'bridgeInteractions', sessionRpcCall: 'callInteractions', ceilings: { hmac: 0, total: 47 } },
|
|
53
|
+
noCrossSubjectVaultReads: { roots: ['packages/context/src', 'apps/demo-a2a/src'], exemptFiles: ['self-only.ts'], gate: 'subjectOfRead|routedSubjectFor' },
|
|
51
54
|
failOpenKnobs: {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
{ file: 'apps/demo-a2a/src/index.ts', knob: 'developmentMode', why: 'test/dev session verification; production wires expectedIss/expectedAud' },
|
|
58
|
-
{ file: 'apps/demo-mcp/wrangler.toml', knob: 'DEMO_VAULT_PROVISION_ENABLED', why: 'registers the KEK provision route; the route is proof-gated by default' },
|
|
59
|
-
],
|
|
55
|
+
// Ring 0 holds packages + contracts only (spec 399, 2026-10-04). Its packages are judged by the root
|
|
56
|
+
// check:fail-open-knobs (the richer pattern set); this rule judges a product repository's apps, which that
|
|
57
|
+
// repository's own config names (agentic.lock.json#doctor). Nothing of Ring 0's is an app.
|
|
58
|
+
roots: [],
|
|
59
|
+
allowlist: [],
|
|
60
60
|
},
|
|
61
61
|
internalMarkerSplit: { src: 'apps/demo-a2a/src', secret: 'A2A_CUSTODY_BRIDGE_SECRET', marker: 'x-ap-internal', budget: { 'index.ts': 'unbounded', 'interactions-do.ts': 1 } },
|
|
62
62
|
custodianCoverage: {
|
|
@@ -70,7 +70,7 @@ export const RING0_DOCTOR_CONFIG = {
|
|
|
70
70
|
expected: {
|
|
71
71
|
'treasury-steward': '0x00f5b03b5724864c5b8edf11048baa6693b520647594997bbffc2fa41391fc0e',
|
|
72
72
|
bookkeeper: '0xce101b9c3ba2df0ae0a969a1d058a34727a581a5a848d509f617eae68bbde219',
|
|
73
|
-
'org-steward': '
|
|
73
|
+
'org-steward': '0xf00d3aef88f5d6a6c3e4021d714fbee0851e15ac5bfe1df5dbeb9d77f459fa52',
|
|
74
74
|
},
|
|
75
75
|
},
|
|
76
76
|
capabilityVocabulary: {
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
export interface ToolAuthorityShapeV1 {
|
|
2
|
+
risk?: string;
|
|
3
|
+
action?: string;
|
|
4
|
+
requirementType?: string;
|
|
5
|
+
resourceArg?: string;
|
|
6
|
+
authorityArg?: string;
|
|
7
|
+
approvalPolicy?: string;
|
|
8
|
+
/** Spec 360 — what the act promises to leave and to whom. */
|
|
9
|
+
effects?: Array<{
|
|
10
|
+
produces: string;
|
|
11
|
+
recipientArg?: string;
|
|
12
|
+
deliverTo?: string[];
|
|
13
|
+
}>;
|
|
14
|
+
/** Spec 398 §7.2 — repeating semantics; a change here changes what a retry means. */
|
|
15
|
+
idempotency?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface DefinitionPinV1 {
|
|
18
|
+
registry: string;
|
|
19
|
+
context: string;
|
|
20
|
+
archetype: string;
|
|
21
|
+
digest: string;
|
|
22
|
+
version?: string;
|
|
23
|
+
/** Tool id → its authority shape at the pin. */
|
|
24
|
+
authority: Record<string, ToolAuthorityShapeV1>;
|
|
25
|
+
pinnedAt: string;
|
|
26
|
+
}
|
|
27
|
+
/** The subset of a compiled definition tool this module reads (capability-claims `DefinitionToolV1`). */
|
|
28
|
+
export interface DefinitionToolLike {
|
|
29
|
+
id: string;
|
|
30
|
+
risk?: string;
|
|
31
|
+
capability?: {
|
|
32
|
+
id?: string;
|
|
33
|
+
action?: string;
|
|
34
|
+
resourceArg?: string;
|
|
35
|
+
authorityArg?: string;
|
|
36
|
+
requirementType?: string;
|
|
37
|
+
approvalPolicy?: string;
|
|
38
|
+
};
|
|
39
|
+
requirementType?: string;
|
|
40
|
+
approvalPolicy?: string;
|
|
41
|
+
effects?: Array<{
|
|
42
|
+
produces: string;
|
|
43
|
+
recipientArg?: string;
|
|
44
|
+
deliverTo?: string[];
|
|
45
|
+
}>;
|
|
46
|
+
idempotency?: string;
|
|
47
|
+
}
|
|
48
|
+
/** The authority shape of one tool — every field a verifier or an effect resolver reads, nothing a renderer reads. */
|
|
49
|
+
export declare function toolAuthorityShape(t: DefinitionToolLike): ToolAuthorityShapeV1;
|
|
50
|
+
export declare function definitionAuthority(tools: ReadonlyArray<DefinitionToolLike>): Record<string, ToolAuthorityShapeV1>;
|
|
51
|
+
export interface AuthorityChange {
|
|
52
|
+
tool: string;
|
|
53
|
+
field: string;
|
|
54
|
+
from: unknown;
|
|
55
|
+
to: unknown;
|
|
56
|
+
}
|
|
57
|
+
/** What changed, authority-wise, between a pin and the current definition. Added and removed tools are changes too:
|
|
58
|
+
* a new act the playbook may take, or one it no longer takes, is exactly what a reviewer must see. */
|
|
59
|
+
export declare function diffDefinitionAuthority(pinned: Record<string, ToolAuthorityShapeV1>, current: Record<string, ToolAuthorityShapeV1>): AuthorityChange[];
|
|
60
|
+
export declare function formatAuthorityChanges(archetype: string, changes: ReadonlyArray<AuthorityChange>): string;
|
|
61
|
+
export type FetchDefinition = (registry: string, context: string, archetype: string) => Promise<{
|
|
62
|
+
digest: string;
|
|
63
|
+
version?: string;
|
|
64
|
+
tools: DefinitionToolLike[];
|
|
65
|
+
}>;
|
|
66
|
+
/** The registry's definition endpoint (skills-a2a: `/context/contexts/<ctx>/archetypes/<a>/definition`). */
|
|
67
|
+
export declare const fetchDefinitionFromRegistry: FetchDefinition;
|
|
68
|
+
export declare function pinDefinition(registry: string, context: string, archetype: string, fetchDef?: FetchDefinition): Promise<DefinitionPinV1>;
|
|
69
|
+
export interface DefinitionReview {
|
|
70
|
+
key: string;
|
|
71
|
+
pin: DefinitionPinV1;
|
|
72
|
+
current: {
|
|
73
|
+
digest: string;
|
|
74
|
+
version?: string;
|
|
75
|
+
};
|
|
76
|
+
changes: AuthorityChange[];
|
|
77
|
+
error?: string;
|
|
78
|
+
}
|
|
79
|
+
/** Every pinned definition against its registry now. A pin whose registry cannot be read is a review item too
|
|
80
|
+
* (an upgrade that cannot verify its contracts must not proceed as if it had). */
|
|
81
|
+
export declare function reviewDefinitions(pins: Record<string, DefinitionPinV1>, fetchDef?: FetchDefinition): Promise<DefinitionReview[]>;
|
|
82
|
+
/** A stable key for a pin in the lock. */
|
|
83
|
+
export declare const definitionKey: (context: string, archetype: string) => string;
|
|
84
|
+
export declare const shapeDigest: (authority: Record<string, ToolAuthorityShapeV1>) => string;
|
|
85
|
+
//# sourceMappingURL=definitions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../src/definitions.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACnF,qFAAqF;IACrF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAChD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,yGAAyG;AACzG,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9I,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACnF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAID,sHAAsH;AACtH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,kBAAkB,GAAG,oBAAoB,CAW9E;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,CAAC,kBAAkB,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAIlH;AAED,MAAM,WAAW,eAAe;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,OAAO,CAAA;CAAE;AAE5F;uGACuG;AACvG,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,GAAG,eAAe,EAAE,CActJ;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,MAAM,CAGzG;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,kBAAkB,EAAE,CAAA;CAAE,CAAC,CAAC;AAEnK,4GAA4G;AAC5G,eAAO,MAAM,2BAA2B,EAAE,eAMzC,CAAC;AAEF,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,GAAE,eAA6C,GAAG,OAAO,CAAC,eAAe,CAAC,CAG3K;AAED,MAAM,WAAW,gBAAgB;IAAG,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,OAAO,EAAE,eAAe,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE;AAElK;mFACmF;AACnF,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,QAAQ,GAAE,eAA6C,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAWnK;AAED,0CAA0C;AAC1C,eAAO,MAAM,aAAa,YAAa,MAAM,aAAa,MAAM,KAAG,MAAmC,CAAC;AACvG,eAAO,MAAM,WAAW,cAAe,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,KAAG,MAA0F,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// THE PINNED DEFINITIONS — spec 398 §10.3/§10.4: `ap upgrade` STOPS FOR REVIEW when a contract's authority or effects
|
|
2
|
+
// change between the pinned set and the target. The lock pins each archetype definition the product relies on (its
|
|
3
|
+
// registry, its context, its digest) together with the AUTHORITY SHAPE of every tool — risk, action, requirement type,
|
|
4
|
+
// the args that name the resource and the acting party, the approval policy, the declared effects. A version bump that
|
|
5
|
+
// changes none of those is a version bump; one that changes any is a review checkpoint, named per tool, and the lock
|
|
6
|
+
// is rewritten only when the reviewer accepts. Nothing here is authority: a pin is a reviewer's memory, not a gate's
|
|
7
|
+
// input — the verifier reads the chain and the mandate, never this file.
|
|
8
|
+
import { createHash } from 'node:crypto';
|
|
9
|
+
const clean = (o) => Object.fromEntries(Object.entries(o).filter(([, v]) => v !== undefined && !(Array.isArray(v) && v.length === 0)));
|
|
10
|
+
/** The authority shape of one tool — every field a verifier or an effect resolver reads, nothing a renderer reads. */
|
|
11
|
+
export function toolAuthorityShape(t) {
|
|
12
|
+
return clean({
|
|
13
|
+
risk: t.risk,
|
|
14
|
+
action: t.capability?.action,
|
|
15
|
+
requirementType: t.capability?.requirementType ?? t.requirementType,
|
|
16
|
+
resourceArg: t.capability?.resourceArg,
|
|
17
|
+
authorityArg: t.capability?.authorityArg,
|
|
18
|
+
approvalPolicy: t.capability?.approvalPolicy ?? t.approvalPolicy,
|
|
19
|
+
effects: t.effects?.map((e) => clean({ produces: e.produces, recipientArg: e.recipientArg, deliverTo: e.deliverTo ? [...e.deliverTo].sort() : undefined })),
|
|
20
|
+
idempotency: t.idempotency,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
export function definitionAuthority(tools) {
|
|
24
|
+
const out = {};
|
|
25
|
+
for (const t of [...tools].sort((a, b) => a.id.localeCompare(b.id)))
|
|
26
|
+
out[t.id] = toolAuthorityShape(t);
|
|
27
|
+
return out;
|
|
28
|
+
}
|
|
29
|
+
/** What changed, authority-wise, between a pin and the current definition. Added and removed tools are changes too:
|
|
30
|
+
* a new act the playbook may take, or one it no longer takes, is exactly what a reviewer must see. */
|
|
31
|
+
export function diffDefinitionAuthority(pinned, current) {
|
|
32
|
+
const changes = [];
|
|
33
|
+
const ids = new Set([...Object.keys(pinned), ...Object.keys(current)]);
|
|
34
|
+
for (const id of [...ids].sort()) {
|
|
35
|
+
const a = pinned[id], b = current[id];
|
|
36
|
+
if (!a) {
|
|
37
|
+
changes.push({ tool: id, field: 'tool', from: undefined, to: 'added' });
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (!b) {
|
|
41
|
+
changes.push({ tool: id, field: 'tool', from: 'present', to: 'removed' });
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
for (const f of ['risk', 'action', 'requirementType', 'resourceArg', 'authorityArg', 'approvalPolicy', 'idempotency']) {
|
|
45
|
+
if (a[f] !== b[f])
|
|
46
|
+
changes.push({ tool: id, field: f, from: a[f], to: b[f] });
|
|
47
|
+
}
|
|
48
|
+
const ea = JSON.stringify(a.effects ?? []), eb = JSON.stringify(b.effects ?? []);
|
|
49
|
+
if (ea !== eb)
|
|
50
|
+
changes.push({ tool: id, field: 'effects', from: a.effects ?? [], to: b.effects ?? [] });
|
|
51
|
+
}
|
|
52
|
+
return changes;
|
|
53
|
+
}
|
|
54
|
+
export function formatAuthorityChanges(archetype, changes) {
|
|
55
|
+
const line = (c) => ` · ${c.tool}: ${c.field} ${c.field === 'effects' ? `${JSON.stringify(c.from)} → ${JSON.stringify(c.to)}` : `${String(c.from ?? '—')} → ${String(c.to ?? '—')}`}`;
|
|
56
|
+
return `${archetype}: ${changes.length} authority/effects change(s) — review before upgrading\n${changes.map(line).join('\n')}`;
|
|
57
|
+
}
|
|
58
|
+
/** The registry's definition endpoint (skills-a2a: `/context/contexts/<ctx>/archetypes/<a>/definition`). */
|
|
59
|
+
export const fetchDefinitionFromRegistry = async (registry, context, archetype) => {
|
|
60
|
+
const r = await fetch(`${registry.replace(/\/$/, '')}/context/contexts/${encodeURIComponent(context)}/archetypes/${encodeURIComponent(archetype)}/definition`, { headers: { accept: 'application/json' } });
|
|
61
|
+
if (!r.ok)
|
|
62
|
+
throw new Error(`${registry}: ${context}/${archetype} answered ${r.status}`);
|
|
63
|
+
const b = (await r.json());
|
|
64
|
+
if (!b.digest || !b.definition?.tools)
|
|
65
|
+
throw new Error(`${registry}: ${context}/${archetype} served no definition`);
|
|
66
|
+
return { digest: b.digest, ...(b.definition.archetypeVersion ? { version: b.definition.archetypeVersion } : {}), tools: b.definition.tools };
|
|
67
|
+
};
|
|
68
|
+
export async function pinDefinition(registry, context, archetype, fetchDef = fetchDefinitionFromRegistry) {
|
|
69
|
+
const d = await fetchDef(registry, context, archetype);
|
|
70
|
+
return { registry, context, archetype, digest: d.digest, ...(d.version ? { version: d.version } : {}), authority: definitionAuthority(d.tools), pinnedAt: new Date().toISOString() };
|
|
71
|
+
}
|
|
72
|
+
/** Every pinned definition against its registry now. A pin whose registry cannot be read is a review item too
|
|
73
|
+
* (an upgrade that cannot verify its contracts must not proceed as if it had). */
|
|
74
|
+
export async function reviewDefinitions(pins, fetchDef = fetchDefinitionFromRegistry) {
|
|
75
|
+
const out = [];
|
|
76
|
+
for (const [key, pin] of Object.entries(pins)) {
|
|
77
|
+
try {
|
|
78
|
+
const d = await fetchDef(pin.registry, pin.context, pin.archetype);
|
|
79
|
+
out.push({ key, pin, current: { digest: d.digest, ...(d.version ? { version: d.version } : {}) }, changes: diffDefinitionAuthority(pin.authority, definitionAuthority(d.tools)) });
|
|
80
|
+
}
|
|
81
|
+
catch (e) {
|
|
82
|
+
out.push({ key, pin, current: { digest: '' }, changes: [], error: e instanceof Error ? e.message : String(e) });
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return out;
|
|
86
|
+
}
|
|
87
|
+
/** A stable key for a pin in the lock. */
|
|
88
|
+
export const definitionKey = (context, archetype) => `${context}/${archetype}`;
|
|
89
|
+
export const shapeDigest = (authority) => `sha256:${createHash('sha256').update(JSON.stringify(authority)).digest('hex')}`;
|
|
90
|
+
//# sourceMappingURL=definitions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../src/definitions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { MethodRegistry } from '@agenticprimitives/mcp-protocol';
|
|
2
|
+
import type { JsonRpcResponse } from '@agenticprimitives/mcp-protocol';
|
|
3
|
+
export declare const DEVELOPER_MCP_DOCTRINE: string;
|
|
4
|
+
export interface DeveloperMcpOptions {
|
|
5
|
+
/** The project root — where `node_modules/@agenticprimitives/*` and `agentic.lock.json` are. */
|
|
6
|
+
root: string;
|
|
7
|
+
/** The rules corpus this kit bundles (recipes). Default: the devkit's own `rules/`. */
|
|
8
|
+
rulesDir?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function createDeveloperMcp(opts: DeveloperMcpOptions): {
|
|
11
|
+
registry: MethodRegistry;
|
|
12
|
+
handle: (raw: string) => Promise<JsonRpcResponse | null>;
|
|
13
|
+
};
|
|
14
|
+
/** The stdio transport: one JSON-RPC message per line on stdin, one per line on stdout; nothing else on stdout. */
|
|
15
|
+
export declare function runDeveloperMcpStdio(opts: DeveloperMcpOptions): Promise<void>;
|
|
16
|
+
//# sourceMappingURL=developer-mcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"developer-mcp.d.ts","sourceRoot":"","sources":["../src/developer-mcp.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,cAAc,EAAmI,MAAM,iCAAiC,CAAC;AAClM,OAAO,KAAK,EAAkB,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAKvF,eAAO,MAAM,sBAAsB,QAGuF,CAAC;AAK3H,MAAM,WAAW,mBAAmB;IAClC,gGAAgG;IAChG,IAAI,EAAE,MAAM,CAAC;IACb,uFAAuF;IACvF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAqGD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,GAAG;IAAE,QAAQ,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAA;CAAE,CAoDpJ;AAED,mHAAmH;AACnH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAQnF"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
// THE DEVELOPER MCP — spec 398 §10.4 (T23). Read-only, public: it resolves package exports, ontology terms (T-box IRIs
|
|
2
|
+
// and their comments), contract deployments, recipes (the agent rules and each package's spec) and diagnostics (the
|
|
3
|
+
// doctor) for a coding agent. It holds no signing key, reads no vault, mints no authority and invokes no production
|
|
4
|
+
// effect. It is a THIRD MCP, distinct from (a) the runtime's private MCP behind admission (ADR-0057) and (b) the Home
|
|
5
|
+
// MCP (spec 397, a person's entrance to their own agent). Its manifest says so in its first line, because confusing
|
|
6
|
+
// the three is the failure the review warns of.
|
|
7
|
+
//
|
|
8
|
+
// Everything it answers is read from the consumer's INSTALL (`node_modules/@agenticprimitives/*`) and this package's
|
|
9
|
+
// bundled rules — never from a network, never from a vault. A query it cannot answer says so; nothing is guessed.
|
|
10
|
+
import { existsSync, readFileSync, readdirSync } from 'node:fs';
|
|
11
|
+
import { join, resolve } from 'node:path';
|
|
12
|
+
import { createInterface } from 'node:readline';
|
|
13
|
+
import { MethodRegistry, RpcError, RPC_ERROR, parseJsonRpc, parseRequestMeta, negotiateProtocolVersion, SUPPORTED_PROTOCOL_VERSIONS, buildServerDiscover } from '@agenticprimitives/mcp-protocol';
|
|
14
|
+
import { runDoctor } from './doctor.js';
|
|
15
|
+
import { loadDoctorConfig } from './config.js';
|
|
16
|
+
import { redact } from './redact.js';
|
|
17
|
+
export const DEVELOPER_MCP_DOCTRINE = 'This is the DEVELOPER MCP (spec 398 §10.4): read-only, public. It holds no signing key, reads no vault, mints no authority and invokes no production effect. ' +
|
|
18
|
+
'It is not the runtime MCP (private, behind admission — ADR-0057) and not the Home MCP (spec 397, a person\'s entrance to their own agent). ' +
|
|
19
|
+
'It answers from the packages installed beside it: exports, ontology terms, contract deployments, recipes, diagnostics.';
|
|
20
|
+
const SERVER_INFO = { name: 'agenticprimitives-developer-mcp', version: '0.1.0', title: 'Agentic Primitives — Developer MCP (read-only)' };
|
|
21
|
+
const CAPABILITIES = { tools: { listChanged: false }, resources: { listChanged: false, subscribe: false } };
|
|
22
|
+
const SCOPE = '@agenticprimitives';
|
|
23
|
+
const text = (p) => { try {
|
|
24
|
+
return readFileSync(p, 'utf8');
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return null;
|
|
28
|
+
} };
|
|
29
|
+
const jsonOf = (p) => { const t = text(p); if (t === null)
|
|
30
|
+
return null; try {
|
|
31
|
+
return JSON.parse(t);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return null;
|
|
35
|
+
} };
|
|
36
|
+
function installedPackages(root) {
|
|
37
|
+
const dir = join(root, 'node_modules', SCOPE);
|
|
38
|
+
if (!existsSync(dir))
|
|
39
|
+
return [];
|
|
40
|
+
return readdirSync(dir).flatMap((n) => {
|
|
41
|
+
const d = join(dir, n);
|
|
42
|
+
const pj = jsonOf(join(d, 'package.json'));
|
|
43
|
+
return pj?.name ? [{ name: pj.name, version: pj.version ?? '?', ...(pj.description ? { description: pj.description } : {}), ...(pj.exports ? { exports: pj.exports } : {}), dir: d }] : [];
|
|
44
|
+
}).sort((a, b) => a.name.localeCompare(b.name));
|
|
45
|
+
}
|
|
46
|
+
/** The names a `.d.ts` declares at top level — the export surface a coding agent should not have to guess at. */
|
|
47
|
+
function declaredNames(dts) {
|
|
48
|
+
const out = [];
|
|
49
|
+
const re = /^export (?:declare )?(function|const|class|type|interface|enum|let|var)\s+([A-Za-z_$][\w$]*)/gm;
|
|
50
|
+
for (let m = re.exec(dts); m; m = re.exec(dts))
|
|
51
|
+
out.push({ kind: m[1], name: m[2] });
|
|
52
|
+
const rex = /^export \{([^}]+)\}/gm;
|
|
53
|
+
for (let m = rex.exec(dts); m; m = rex.exec(dts))
|
|
54
|
+
for (const part of m[1].split(',')) {
|
|
55
|
+
const n = part.trim().split(/\s+as\s+/).pop()?.replace(/^type\s+/, '').trim();
|
|
56
|
+
if (n)
|
|
57
|
+
out.push({ kind: 're-export', name: n });
|
|
58
|
+
}
|
|
59
|
+
return out;
|
|
60
|
+
}
|
|
61
|
+
function packageExports(root, name) {
|
|
62
|
+
const pkg = installedPackages(root).find((p) => p.name === name || p.name === `${SCOPE}/${name}`);
|
|
63
|
+
if (!pkg)
|
|
64
|
+
throw new RpcError(RPC_ERROR.INVALID_PARAMS, `${name} is not installed under ${SCOPE} — install it, or ask packages_list for what is`);
|
|
65
|
+
const entries = Object.entries(pkg.exports ?? {}).map(([subpath, target]) => {
|
|
66
|
+
const t = target;
|
|
67
|
+
const types = typeof t === 'object' && t?.types ? t.types : undefined;
|
|
68
|
+
const dts = types ? text(join(pkg.dir, types)) : null;
|
|
69
|
+
return { subpath, ...(typeof t === 'string' ? { target: t } : t), ...(dts ? { declares: declaredNames(dts) } : {}) };
|
|
70
|
+
});
|
|
71
|
+
const readme = text(join(pkg.dir, 'README.md'));
|
|
72
|
+
return { name: pkg.name, version: pkg.version, ...(pkg.description ? { description: pkg.description } : {}), entries, ...(readme ? { readmeHead: readme.split('\n').slice(0, 12).join('\n') } : {}), hasSpec: existsSync(join(pkg.dir, 'spec.md')) };
|
|
73
|
+
}
|
|
74
|
+
/** A best-effort scan of the T-box Turtle: subject blocks with their labels and comments. Not a parser — the
|
|
75
|
+
* ontology package holds the machine-checked form; this is a coding agent's lookup. */
|
|
76
|
+
function ontologyTerms(root, query) {
|
|
77
|
+
const dir = join(root, 'node_modules', SCOPE, 'ontology', 'tbox');
|
|
78
|
+
if (!existsSync(dir))
|
|
79
|
+
throw new RpcError(RPC_ERROR.INVALID_PARAMS, `${SCOPE}/ontology is not installed (its tbox/ is what this answers from)`);
|
|
80
|
+
const q = query.trim().toLowerCase();
|
|
81
|
+
const out = [];
|
|
82
|
+
for (const f of readdirSync(dir).filter((x) => x.endsWith('.ttl'))) {
|
|
83
|
+
const ttl = text(join(dir, f)) ?? '';
|
|
84
|
+
// subject blocks: a line starting at column 0 with a prefixed name or IRI, running to the next such line
|
|
85
|
+
const blocks = ttl.split(/\n(?=(?:[a-zA-Z][\w-]*:[\w-]+|<[^>]+>)\s)/);
|
|
86
|
+
for (const b of blocks) {
|
|
87
|
+
const subject = b.match(/^([a-zA-Z][\w-]*:[\w-]+|<[^>]+>)\s/)?.[1];
|
|
88
|
+
if (!subject)
|
|
89
|
+
continue;
|
|
90
|
+
const label = b.match(/rdfs:label\s+"([^"]*)"/)?.[1];
|
|
91
|
+
const comment = b.match(/rdfs:comment\s+(?:"""([\s\S]*?)"""|"([^"]*)")/);
|
|
92
|
+
const hay = `${subject} ${label ?? ''}`.toLowerCase();
|
|
93
|
+
if (!hay.includes(q))
|
|
94
|
+
continue;
|
|
95
|
+
const types = [...b.matchAll(/(?:^|\s)a\s+([^;.\n]+)/g)].map((m) => m[1].trim()).slice(0, 1).flatMap((t) => t.split(/\s*,\s*/));
|
|
96
|
+
out.push({ iri: subject, file: f, ...(label ? { label } : {}), ...(comment ? { comment: (comment[1] ?? comment[2] ?? '').trim() } : {}), types });
|
|
97
|
+
if (out.length >= 40)
|
|
98
|
+
return out;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return out;
|
|
102
|
+
}
|
|
103
|
+
function deployments(root, chain) {
|
|
104
|
+
const dir = join(root, 'node_modules', SCOPE, 'contracts');
|
|
105
|
+
if (!existsSync(dir))
|
|
106
|
+
throw new RpcError(RPC_ERROR.INVALID_PARAMS, `${SCOPE}/contracts is not installed`);
|
|
107
|
+
const files = readdirSync(dir).filter((f) => /^deployments-[a-z0-9-]+\.json$/.test(f));
|
|
108
|
+
const chains = files.map((f) => f.replace(/^deployments-/, '').replace(/\.json$/, ''));
|
|
109
|
+
if (!chain)
|
|
110
|
+
return { chains };
|
|
111
|
+
const f = `deployments-${chain}.json`;
|
|
112
|
+
if (!files.includes(f))
|
|
113
|
+
throw new RpcError(RPC_ERROR.INVALID_PARAMS, `no deployments for "${chain}" — known: ${chains.join(', ')}`);
|
|
114
|
+
return { chain, deployments: jsonOf(join(dir, f)) };
|
|
115
|
+
}
|
|
116
|
+
function recipes(rulesDir, root, name) {
|
|
117
|
+
const rules = existsSync(rulesDir) ? readdirSync(rulesDir).filter((f) => f.endsWith('.md')).map((f) => f.replace(/\.md$/, '')) : [];
|
|
118
|
+
const specs = installedPackages(root).filter((p) => existsSync(join(p.dir, 'spec.md'))).map((p) => `${p.name}/spec`);
|
|
119
|
+
if (!name)
|
|
120
|
+
return { rules, specs, note: 'a rule is doctrine (docs/architecture/agent-rules); a spec is a package\'s architect-of-record' };
|
|
121
|
+
if (rules.includes(name))
|
|
122
|
+
return { name, kind: 'rule', text: text(join(rulesDir, `${name}.md`)) };
|
|
123
|
+
const m = name.match(/^(@agenticprimitives\/[\w-]+)\/spec$/);
|
|
124
|
+
if (m) {
|
|
125
|
+
const p = installedPackages(root).find((x) => x.name === m[1]);
|
|
126
|
+
const s = p ? text(join(p.dir, 'spec.md')) : null;
|
|
127
|
+
if (s)
|
|
128
|
+
return { name, kind: 'spec', text: s };
|
|
129
|
+
}
|
|
130
|
+
throw new RpcError(RPC_ERROR.INVALID_PARAMS, `no recipe "${name}" — ask recipes with no name for the list`);
|
|
131
|
+
}
|
|
132
|
+
const TOOLS = [
|
|
133
|
+
{ name: 'packages_list', description: 'The @agenticprimitives packages installed in this project: name, version, description, export subpaths.', inputSchema: { type: 'object', properties: {}, additionalProperties: false } },
|
|
134
|
+
{ name: 'package_exports', description: 'One package\'s export map with the names each entry declares (from its .d.ts), its README head and whether it ships a spec.', inputSchema: { type: 'object', properties: { name: { type: 'string', description: 'e.g. delegation or @agenticprimitives/delegation' } }, required: ['name'], additionalProperties: false } },
|
|
135
|
+
{ name: 'ontology_term', description: 'Look up T-box terms by IRI fragment or label: the IRI, its file, rdfs:label, rdfs:comment (what it means and what it is NOT), its types.', inputSchema: { type: 'object', properties: { query: { type: 'string' } }, required: ['query'], additionalProperties: false } },
|
|
136
|
+
{ name: 'contract_deployments', description: 'Deployed contract addresses per chain, from the contracts package. Without a chain: the chains it knows.', inputSchema: { type: 'object', properties: { chain: { type: 'string', description: 'e.g. faithchain, base-sepolia, anvil' } }, additionalProperties: false } },
|
|
137
|
+
{ name: 'recipes', description: 'The agent rules this kit bundles and each installed package\'s spec, by name; without a name, the list.', inputSchema: { type: 'object', properties: { name: { type: 'string' } }, additionalProperties: false } },
|
|
138
|
+
{ name: 'doctor', description: 'Run the doctrine rules over this project (read-only, redacted): the same report `ap doctor --json` prints.', inputSchema: { type: 'object', properties: { only: { type: 'array', items: { type: 'string' } } }, additionalProperties: false } },
|
|
139
|
+
];
|
|
140
|
+
const RESOURCES = [
|
|
141
|
+
{ uri: 'ap://developer-mcp/doctrine', name: 'What this server is and is not', mimeType: 'text/plain' },
|
|
142
|
+
];
|
|
143
|
+
export function createDeveloperMcp(opts) {
|
|
144
|
+
const root = resolve(opts.root);
|
|
145
|
+
const rulesDir = opts.rulesDir ?? resolve(new URL('../rules/', import.meta.url).pathname);
|
|
146
|
+
const call = async (name, args) => {
|
|
147
|
+
switch (name) {
|
|
148
|
+
case 'packages_list': return { packages: installedPackages(root).map(({ dir: _d, exports, ...p }) => ({ ...p, subpaths: Object.keys(exports ?? {}) })) };
|
|
149
|
+
case 'package_exports': return packageExports(root, String(args.name ?? ''));
|
|
150
|
+
case 'ontology_term': return { terms: ontologyTerms(root, String(args.query ?? '')) };
|
|
151
|
+
case 'contract_deployments': return deployments(root, typeof args.chain === 'string' ? args.chain : undefined);
|
|
152
|
+
case 'recipes': return recipes(rulesDir, root, typeof args.name === 'string' ? args.name : undefined);
|
|
153
|
+
case 'doctor': {
|
|
154
|
+
const loaded = loadDoctorConfig(root);
|
|
155
|
+
const report = await runDoctor({ root, loaded, ...(Array.isArray(args.only) ? { only: args.only.map(String) } : {}) });
|
|
156
|
+
return JSON.parse(redact(JSON.stringify(report)));
|
|
157
|
+
}
|
|
158
|
+
default: throw new RpcError(RPC_ERROR.INVALID_PARAMS, `unknown tool ${name}`);
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
const registry = new MethodRegistry()
|
|
162
|
+
.register('server/discover', () => buildServerDiscover({ serverInfo: SERVER_INFO, capabilities: CAPABILITIES }))
|
|
163
|
+
.register('tools/list', () => ({ tools: TOOLS }))
|
|
164
|
+
.register('resources/list', () => ({ resources: RESOURCES }))
|
|
165
|
+
.register('resources/read', (params) => {
|
|
166
|
+
const uri = String(params?.uri ?? '');
|
|
167
|
+
if (uri !== RESOURCES[0].uri)
|
|
168
|
+
throw new RpcError(RPC_ERROR.INVALID_PARAMS, `unknown resource ${uri}`);
|
|
169
|
+
return { contents: [{ uri, mimeType: 'text/plain', text: DEVELOPER_MCP_DOCTRINE }] };
|
|
170
|
+
})
|
|
171
|
+
.register('tools/call', async (params) => {
|
|
172
|
+
const name = String(params?.name ?? '');
|
|
173
|
+
const args = params?.arguments ?? {};
|
|
174
|
+
try {
|
|
175
|
+
const out = await call(name, args);
|
|
176
|
+
return { content: [{ type: 'text', text: JSON.stringify(out, null, 2) }], structuredContent: out, isError: false };
|
|
177
|
+
}
|
|
178
|
+
catch (e) {
|
|
179
|
+
if (e instanceof RpcError)
|
|
180
|
+
return { content: [{ type: 'text', text: e.message }], isError: true };
|
|
181
|
+
throw e;
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
const handle = async (raw) => {
|
|
185
|
+
const parsed = parseJsonRpc(raw);
|
|
186
|
+
if (!parsed.ok)
|
|
187
|
+
return parsed.res;
|
|
188
|
+
const req = parsed.req;
|
|
189
|
+
const meta = parseRequestMeta(req.params?._meta, undefined);
|
|
190
|
+
const requested = typeof req.params?.protocolVersion === 'string' ? req.params.protocolVersion : meta.protocolVersion;
|
|
191
|
+
const version = negotiateProtocolVersion(requested) ?? SUPPORTED_PROTOCOL_VERSIONS[0];
|
|
192
|
+
const id = req.id ?? null;
|
|
193
|
+
if (req.method === 'initialize')
|
|
194
|
+
return { jsonrpc: '2.0', id, result: { protocolVersion: version, capabilities: CAPABILITIES, serverInfo: SERVER_INFO, instructions: DEVELOPER_MCP_DOCTRINE } };
|
|
195
|
+
if (req.method === 'notifications/initialized')
|
|
196
|
+
return null;
|
|
197
|
+
if (req.method === 'ping')
|
|
198
|
+
return { jsonrpc: '2.0', id, result: {} };
|
|
199
|
+
return registry.dispatch(req, { meta, protocolVersion: version, raw });
|
|
200
|
+
};
|
|
201
|
+
return { registry, handle };
|
|
202
|
+
}
|
|
203
|
+
/** The stdio transport: one JSON-RPC message per line on stdin, one per line on stdout; nothing else on stdout. */
|
|
204
|
+
export async function runDeveloperMcpStdio(opts) {
|
|
205
|
+
const { handle } = createDeveloperMcp(opts);
|
|
206
|
+
const rl = createInterface({ input: process.stdin, crlfDelay: Infinity });
|
|
207
|
+
for await (const line of rl) {
|
|
208
|
+
if (!line.trim())
|
|
209
|
+
continue;
|
|
210
|
+
const res = await handle(line);
|
|
211
|
+
if (res)
|
|
212
|
+
process.stdout.write(`${JSON.stringify(res)}\n`);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=developer-mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"developer-mcp.js","sourceRoot":"","sources":["../src/developer-mcp.ts"],"names":[],"mappings":"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"}
|