@siteverb/profiles 0.1.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -0
- package/dist/assess.d.ts +4 -0
- package/dist/assess.d.ts.map +1 -0
- package/dist/assess.js +48 -0
- package/dist/assess.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/profiles.d.ts +8 -0
- package/dist/profiles.d.ts.map +1 -0
- package/dist/profiles.js +79 -0
- package/dist/profiles.js.map +1 -0
- package/dist/types.d.ts +30 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/evidence/chrome-151-native.json +43 -0
- package/evidence/chrome-152-native.json +85 -0
- package/package.json +50 -0
package/README.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# @siteverb/profiles
|
|
2
|
+
|
|
3
|
+
Versioned WebMCP client capability profiles with evidence attached to each feature.
|
|
4
|
+
|
|
5
|
+
```ts
|
|
6
|
+
import { assessCompatibility, chatGptSiteToolsProfile } from '@siteverb/profiles';
|
|
7
|
+
|
|
8
|
+
const assessment = assessCompatibility(contract, chatGptSiteToolsProfile);
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Profiles never pretend documented behavior is real-client execution. Each capability records its
|
|
12
|
+
status, evidence level, source, and check date. A contract assessment can be `compatible`,
|
|
13
|
+
`incompatible`, or `unknown`.
|
|
14
|
+
|
|
15
|
+
The profiles cover locally verified Chrome 151 and Chrome 152 imperative surfaces, the documented
|
|
16
|
+
Edge 150 origin trial, and the dated ChatGPT Site Tools subset. Add a new exact profile when browser
|
|
17
|
+
evidence changes; do not silently mutate an old profile's meaning.
|
|
18
|
+
|
|
19
|
+
Bounded native reports for the real-browser profiles ship at
|
|
20
|
+
`@siteverb/profiles/evidence/chrome-151-native.json` and
|
|
21
|
+
`@siteverb/profiles/evidence/chrome-152-native.json`. They contain fixture status and browser
|
|
22
|
+
provenance, not tool inputs, outputs, DOM, credentials, or raw target URLs.
|
package/dist/assess.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ProjectContract } from '@siteverb/contracts';
|
|
2
|
+
import type { ClientProfile, CompatibilityAssessment } from './types.js';
|
|
3
|
+
export declare function assessCompatibility(contract: ProjectContract, profile: ClientProfile): CompatibilityAssessment;
|
|
4
|
+
//# sourceMappingURL=assess.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assess.d.ts","sourceRoot":"","sources":["../src/assess.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,qBAAqB,CAAC;AACzE,OAAO,KAAK,EAEV,aAAa,EACb,uBAAuB,EAIxB,MAAM,YAAY,CAAC;AAkCpB,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,aAAa,GACrB,uBAAuB,CAgBzB"}
|
package/dist/assess.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
function requiredFeatures(tool) {
|
|
2
|
+
const features = [
|
|
3
|
+
tool.registration === 'imperative' ? 'imperative-tools' : 'declarative-tools',
|
|
4
|
+
];
|
|
5
|
+
if (tool.frame === 'top-level')
|
|
6
|
+
features.push('top-level-tools');
|
|
7
|
+
if (tool.frame === 'same-origin-iframe')
|
|
8
|
+
features.push('same-origin-iframe-tools');
|
|
9
|
+
if (tool.frame === 'cross-origin-iframe')
|
|
10
|
+
features.push('cross-origin-iframe-tools');
|
|
11
|
+
return features;
|
|
12
|
+
}
|
|
13
|
+
function finding(tool, feature, support) {
|
|
14
|
+
const unknown = support.status === 'unknown';
|
|
15
|
+
let code = 'support-unknown';
|
|
16
|
+
if (!unknown && feature === 'declarative-tools')
|
|
17
|
+
code = 'declarative-tools-unsupported';
|
|
18
|
+
else if (!unknown && feature === 'imperative-tools')
|
|
19
|
+
code = 'imperative-tools-unsupported';
|
|
20
|
+
else if (!unknown && feature.includes('iframe'))
|
|
21
|
+
code = 'iframe-tools-unsupported';
|
|
22
|
+
return {
|
|
23
|
+
code,
|
|
24
|
+
evidence: support.evidence,
|
|
25
|
+
message: unknown
|
|
26
|
+
? `${feature} support is not verified for this profile.`
|
|
27
|
+
: `${feature} is unsupported by this profile.`,
|
|
28
|
+
severity: unknown ? 'warning' : 'error',
|
|
29
|
+
source: support.source,
|
|
30
|
+
toolId: tool.id,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export function assessCompatibility(contract, profile) {
|
|
34
|
+
const findings = contract.tools.flatMap((tool) => requiredFeatures(tool)
|
|
35
|
+
.map((feature) => [feature, profile.features[feature]])
|
|
36
|
+
.filter(([, support]) => support.status !== 'supported')
|
|
37
|
+
.map(([feature, support]) => finding(tool, feature, support)));
|
|
38
|
+
return Object.freeze({
|
|
39
|
+
profileId: profile.id,
|
|
40
|
+
status: findings.some((entry) => entry.severity === 'error')
|
|
41
|
+
? 'incompatible'
|
|
42
|
+
: findings.length > 0
|
|
43
|
+
? 'unknown'
|
|
44
|
+
: 'compatible',
|
|
45
|
+
findings: Object.freeze(findings),
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=assess.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assess.js","sourceRoot":"","sources":["../src/assess.ts"],"names":[],"mappings":"AAUA,SAAS,gBAAgB,CAAC,IAAkB;IAC1C,MAAM,QAAQ,GAAoB;QAChC,IAAI,CAAC,YAAY,KAAK,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,mBAAmB;KAC9E,CAAC;IACF,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW;QAAE,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACjE,IAAI,IAAI,CAAC,KAAK,KAAK,oBAAoB;QAAE,QAAQ,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACnF,IAAI,IAAI,CAAC,KAAK,KAAK,qBAAqB;QAAE,QAAQ,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACrF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,OAAO,CACd,IAAkB,EAClB,OAAsB,EACtB,OAAuB;IAEvB,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC;IAC7C,IAAI,IAAI,GAA6B,iBAAiB,CAAC;IACvD,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,mBAAmB;QAAE,IAAI,GAAG,+BAA+B,CAAC;SACnF,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,kBAAkB;QAAE,IAAI,GAAG,8BAA8B,CAAC;SACtF,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,IAAI,GAAG,0BAA0B,CAAC;IACnF,OAAO;QACL,IAAI;QACJ,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,OAAO,EAAE,OAAO;YACd,CAAC,CAAC,GAAG,OAAO,4CAA4C;YACxD,CAAC,CAAC,GAAG,OAAO,kCAAkC;QAChD,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;QACvC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,IAAI,CAAC,EAAE;KAChB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,QAAyB,EACzB,OAAsB;IAEtB,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC/C,gBAAgB,CAAC,IAAI,CAAC;SACnB,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAU,CAAC;SAC/D,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,WAAW,CAAC;SACvD,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAChE,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC;YAC1D,CAAC,CAAC,cAAc;YAChB,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;gBACnB,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,YAAY;QAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;KAClC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { assessCompatibility } from './assess.js';
|
|
2
|
+
export { chatGptSiteToolsProfile, chrome151Profile, chrome152Profile, clientProfiles, edge150Profile, getClientProfile, } from './profiles.js';
|
|
3
|
+
export type { ClientFeature, ClientProfile, CompatibilityAssessment, CompatibilityFinding, CompatibilityFindingCode, EvidenceLevel, FeatureSupport, } from './types.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,aAAa,EACb,aAAa,EACb,uBAAuB,EACvB,oBAAoB,EACpB,wBAAwB,EACxB,aAAa,EACb,cAAc,GACf,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,gBAAgB,GACjB,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ClientProfile } from './types.js';
|
|
2
|
+
export declare const chrome151Profile: ClientProfile;
|
|
3
|
+
export declare const chrome152Profile: ClientProfile;
|
|
4
|
+
export declare const edge150Profile: ClientProfile;
|
|
5
|
+
export declare const chatGptSiteToolsProfile: ClientProfile;
|
|
6
|
+
export declare const clientProfiles: readonly ClientProfile[];
|
|
7
|
+
export declare function getClientProfile(id: string): ClientProfile | undefined;
|
|
8
|
+
//# sourceMappingURL=profiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,aAAa,EAAiC,MAAM,YAAY,CAAC;AAwB9F,eAAO,MAAM,gBAAgB,eAmB3B,CAAC;AAEH,eAAO,MAAM,gBAAgB,eAmB3B,CAAC;AAEH,eAAO,MAAM,cAAc,eAczB,CAAC;AAEH,eAAO,MAAM,uBAAuB,eAclC,CAAC;AAEH,eAAO,MAAM,cAAc,0BAKzB,CAAC;AAEH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEtE"}
|
package/dist/profiles.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
const CHROME_DOCS = 'https://developer.chrome.com/docs/ai/webmcp/imperative-api';
|
|
2
|
+
const OPENAI_DOCS = 'https://learn.chatgpt.com/docs/webmcp';
|
|
3
|
+
const IMPLEMENTATION_STATUS = 'https://github.com/webmachinelearning/webmcp/blob/main/implementation-status.md';
|
|
4
|
+
function support(status, evidence, source, note) {
|
|
5
|
+
return Object.freeze({ status, evidence, source, ...(note === undefined ? {} : { note }) });
|
|
6
|
+
}
|
|
7
|
+
function profile(value) {
|
|
8
|
+
return Object.freeze({ ...value, features: Object.freeze(value.features) });
|
|
9
|
+
}
|
|
10
|
+
export const chrome151Profile = profile({
|
|
11
|
+
id: 'chrome-151-native',
|
|
12
|
+
name: 'Chrome native WebMCP',
|
|
13
|
+
version: '151.0.7922.175',
|
|
14
|
+
checkedAt: '2026-09-01',
|
|
15
|
+
features: {
|
|
16
|
+
'imperative-tools': support('supported', 'real-browser', CHROME_DOCS, 'Verified by Siteverb native discovery and execution fixture.'),
|
|
17
|
+
'declarative-tools': support('supported', 'documented-profile', CHROME_DOCS),
|
|
18
|
+
'top-level-tools': support('supported', 'real-browser', CHROME_DOCS),
|
|
19
|
+
'same-origin-iframe-tools': support('supported', 'documented-profile', CHROME_DOCS),
|
|
20
|
+
'cross-origin-iframe-tools': support('supported', 'documented-profile', CHROME_DOCS),
|
|
21
|
+
'dynamic-tools': support('supported', 'documented-profile', CHROME_DOCS),
|
|
22
|
+
'execution-cancellation': support('supported', 'documented-profile', CHROME_DOCS),
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
export const chrome152Profile = profile({
|
|
26
|
+
id: 'chrome-152-native',
|
|
27
|
+
name: 'Chrome native WebMCP',
|
|
28
|
+
version: '152.0.7977.65',
|
|
29
|
+
checkedAt: '2026-09-01',
|
|
30
|
+
features: {
|
|
31
|
+
'imperative-tools': support('supported', 'real-browser', CHROME_DOCS, 'Verified by Siteverb native discovery and execution fixture.'),
|
|
32
|
+
'declarative-tools': support('supported', 'documented-profile', CHROME_DOCS),
|
|
33
|
+
'top-level-tools': support('supported', 'real-browser', CHROME_DOCS),
|
|
34
|
+
'same-origin-iframe-tools': support('supported', 'documented-profile', CHROME_DOCS),
|
|
35
|
+
'cross-origin-iframe-tools': support('supported', 'documented-profile', CHROME_DOCS),
|
|
36
|
+
'dynamic-tools': support('supported', 'documented-profile', CHROME_DOCS),
|
|
37
|
+
'execution-cancellation': support('supported', 'documented-profile', CHROME_DOCS),
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
export const edge150Profile = profile({
|
|
41
|
+
id: 'edge-150-origin-trial',
|
|
42
|
+
name: 'Microsoft Edge WebMCP origin trial',
|
|
43
|
+
version: '150',
|
|
44
|
+
checkedAt: '2026-08-31',
|
|
45
|
+
features: {
|
|
46
|
+
'imperative-tools': support('supported', 'documented-profile', IMPLEMENTATION_STATUS),
|
|
47
|
+
'declarative-tools': support('supported', 'documented-profile', IMPLEMENTATION_STATUS),
|
|
48
|
+
'top-level-tools': support('supported', 'documented-profile', IMPLEMENTATION_STATUS),
|
|
49
|
+
'same-origin-iframe-tools': support('unknown', 'documented-profile', IMPLEMENTATION_STATUS),
|
|
50
|
+
'cross-origin-iframe-tools': support('unknown', 'documented-profile', IMPLEMENTATION_STATUS),
|
|
51
|
+
'dynamic-tools': support('supported', 'documented-profile', IMPLEMENTATION_STATUS),
|
|
52
|
+
'execution-cancellation': support('unknown', 'documented-profile', IMPLEMENTATION_STATUS),
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
export const chatGptSiteToolsProfile = profile({
|
|
56
|
+
id: 'chatgpt-site-tools-2026-08-26',
|
|
57
|
+
name: 'ChatGPT Site Tools',
|
|
58
|
+
version: '2026-08-26',
|
|
59
|
+
checkedAt: '2026-08-31',
|
|
60
|
+
features: {
|
|
61
|
+
'imperative-tools': support('supported', 'documented-profile', OPENAI_DOCS),
|
|
62
|
+
'declarative-tools': support('unsupported', 'documented-profile', OPENAI_DOCS),
|
|
63
|
+
'top-level-tools': support('supported', 'documented-profile', OPENAI_DOCS),
|
|
64
|
+
'same-origin-iframe-tools': support('unsupported', 'documented-profile', OPENAI_DOCS),
|
|
65
|
+
'cross-origin-iframe-tools': support('unsupported', 'documented-profile', OPENAI_DOCS),
|
|
66
|
+
'dynamic-tools': support('unknown', 'documented-profile', OPENAI_DOCS),
|
|
67
|
+
'execution-cancellation': support('unknown', 'documented-profile', OPENAI_DOCS),
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
export const clientProfiles = Object.freeze([
|
|
71
|
+
chrome152Profile,
|
|
72
|
+
chrome151Profile,
|
|
73
|
+
edge150Profile,
|
|
74
|
+
chatGptSiteToolsProfile,
|
|
75
|
+
]);
|
|
76
|
+
export function getClientProfile(id) {
|
|
77
|
+
return clientProfiles.find((candidate) => candidate.id === id);
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=profiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export type ClientFeature = 'imperative-tools' | 'declarative-tools' | 'top-level-tools' | 'same-origin-iframe-tools' | 'cross-origin-iframe-tools' | 'dynamic-tools' | 'execution-cancellation';
|
|
2
|
+
export type EvidenceLevel = 'real-client' | 'real-browser' | 'official-sdk' | 'documented-profile' | 'spec-only';
|
|
3
|
+
export interface FeatureSupport {
|
|
4
|
+
readonly status: 'supported' | 'unsupported' | 'unknown';
|
|
5
|
+
readonly evidence: EvidenceLevel;
|
|
6
|
+
readonly source: string;
|
|
7
|
+
readonly note?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ClientProfile {
|
|
10
|
+
readonly id: string;
|
|
11
|
+
readonly name: string;
|
|
12
|
+
readonly version: string;
|
|
13
|
+
readonly checkedAt: string;
|
|
14
|
+
readonly features: Readonly<Record<ClientFeature, FeatureSupport>>;
|
|
15
|
+
}
|
|
16
|
+
export type CompatibilityFindingCode = 'declarative-tools-unsupported' | 'imperative-tools-unsupported' | 'iframe-tools-unsupported' | 'support-unknown';
|
|
17
|
+
export interface CompatibilityFinding {
|
|
18
|
+
readonly code: CompatibilityFindingCode;
|
|
19
|
+
readonly evidence: EvidenceLevel;
|
|
20
|
+
readonly message: string;
|
|
21
|
+
readonly severity: 'error' | 'warning';
|
|
22
|
+
readonly source: string;
|
|
23
|
+
readonly toolId: string;
|
|
24
|
+
}
|
|
25
|
+
export interface CompatibilityAssessment {
|
|
26
|
+
readonly profileId: string;
|
|
27
|
+
readonly status: 'compatible' | 'incompatible' | 'unknown';
|
|
28
|
+
readonly findings: readonly CompatibilityFinding[];
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GACrB,kBAAkB,GAClB,mBAAmB,GACnB,iBAAiB,GACjB,0BAA0B,GAC1B,2BAA2B,GAC3B,eAAe,GACf,wBAAwB,CAAC;AAE7B,MAAM,MAAM,aAAa,GACvB,aAAa,GAAG,cAAc,GAAG,cAAc,GAAG,oBAAoB,GAAG,WAAW,CAAC;AAEvF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;IACzD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;CACpE;AAED,MAAM,MAAM,wBAAwB,GAChC,+BAA+B,GAC/B,8BAA8B,GAC9B,0BAA0B,GAC1B,iBAAiB,CAAC;AAEtB,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,cAAc,GAAG,SAAS,CAAC;IAC3D,QAAQ,CAAC,QAAQ,EAAE,SAAS,oBAAoB,EAAE,CAAC;CACpD"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"runId": "9d522fcd-7c57-45cc-945e-68e9740d0071",
|
|
4
|
+
"startedAt": "2026-09-01T02:56:34.348Z",
|
|
5
|
+
"finishedAt": "2026-09-01T02:56:35.814Z",
|
|
6
|
+
"targetUrl": "http://127.0.0.1:4173/",
|
|
7
|
+
"project": "siteverb-vanilla-example",
|
|
8
|
+
"contractHash": "sha256:a55bc790bdcfdc36a110245f6bb5ea3f46b52cf7fe9c99cec2ba587f9948f33f",
|
|
9
|
+
"runner": {
|
|
10
|
+
"name": "@siteverb/runner",
|
|
11
|
+
"version": "0.1.0"
|
|
12
|
+
},
|
|
13
|
+
"browser": {
|
|
14
|
+
"name": "Chrome",
|
|
15
|
+
"version": "151.0.7922.175",
|
|
16
|
+
"channel": "chrome",
|
|
17
|
+
"evidence": "real-browser"
|
|
18
|
+
},
|
|
19
|
+
"summary": {
|
|
20
|
+
"passed": 1,
|
|
21
|
+
"failed": 0,
|
|
22
|
+
"skipped": 0
|
|
23
|
+
},
|
|
24
|
+
"compatibility": [],
|
|
25
|
+
"journeys": [
|
|
26
|
+
{
|
|
27
|
+
"id": "catalog.search-visible-products",
|
|
28
|
+
"name": "Search the visible catalog",
|
|
29
|
+
"status": "passed",
|
|
30
|
+
"durationMs": 985,
|
|
31
|
+
"steps": [
|
|
32
|
+
{
|
|
33
|
+
"index": 1,
|
|
34
|
+
"toolId": "catalog.search-products",
|
|
35
|
+
"toolName": "search_products",
|
|
36
|
+
"status": "passed",
|
|
37
|
+
"durationMs": 15
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
"cleanup": []
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"runId": "64fd0c08-f6ba-4d19-a666-dfbdfec69c42",
|
|
4
|
+
"startedAt": "2026-09-01T03:44:52.708Z",
|
|
5
|
+
"finishedAt": "2026-09-01T03:44:54.122Z",
|
|
6
|
+
"targetUrl": "http://127.0.0.1:4174/",
|
|
7
|
+
"project": "siteverb-stateful-fixture",
|
|
8
|
+
"contractHash": "sha256:fff38c607227ab9be4b5a1d4dfb9fc7b77a2812d903d067ec9c0af1e0a4f7ecd",
|
|
9
|
+
"runner": {
|
|
10
|
+
"name": "@siteverb/runner",
|
|
11
|
+
"version": "0.1.0"
|
|
12
|
+
},
|
|
13
|
+
"browser": {
|
|
14
|
+
"name": "Chrome",
|
|
15
|
+
"version": "152.0.7977.65",
|
|
16
|
+
"channel": "chrome",
|
|
17
|
+
"evidence": "real-browser"
|
|
18
|
+
},
|
|
19
|
+
"summary": {
|
|
20
|
+
"passed": 1,
|
|
21
|
+
"failed": 0,
|
|
22
|
+
"skipped": 0
|
|
23
|
+
},
|
|
24
|
+
"compatibility": [
|
|
25
|
+
{
|
|
26
|
+
"profileId": "chrome-152-native",
|
|
27
|
+
"status": "compatible",
|
|
28
|
+
"findings": []
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"journeys": [
|
|
32
|
+
{
|
|
33
|
+
"id": "cart.prepare-trail-shoe-checkout",
|
|
34
|
+
"name": "Find a trail shoe and prepare checkout",
|
|
35
|
+
"status": "passed",
|
|
36
|
+
"durationMs": 1022,
|
|
37
|
+
"steps": [
|
|
38
|
+
{
|
|
39
|
+
"index": 1,
|
|
40
|
+
"toolId": "catalog.search-products",
|
|
41
|
+
"toolName": "search_products",
|
|
42
|
+
"status": "passed",
|
|
43
|
+
"durationMs": 16
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"index": 2,
|
|
47
|
+
"toolId": "cart.add-item",
|
|
48
|
+
"toolName": "add_to_cart",
|
|
49
|
+
"status": "passed",
|
|
50
|
+
"durationMs": 4
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"index": 3,
|
|
54
|
+
"toolId": "cart.get-current",
|
|
55
|
+
"toolName": "get_cart",
|
|
56
|
+
"status": "passed",
|
|
57
|
+
"durationMs": 1
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"index": 4,
|
|
61
|
+
"toolId": "cart.prepare-checkout",
|
|
62
|
+
"toolName": "prepare_checkout",
|
|
63
|
+
"status": "passed",
|
|
64
|
+
"durationMs": 5
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"index": 5,
|
|
68
|
+
"toolId": "cart.get-checkout-summary",
|
|
69
|
+
"toolName": "get_checkout_summary",
|
|
70
|
+
"status": "passed",
|
|
71
|
+
"durationMs": 0
|
|
72
|
+
}
|
|
73
|
+
],
|
|
74
|
+
"cleanup": [
|
|
75
|
+
{
|
|
76
|
+
"index": 1,
|
|
77
|
+
"toolId": "cart.remove-item",
|
|
78
|
+
"toolName": "remove_from_cart",
|
|
79
|
+
"status": "passed",
|
|
80
|
+
"durationMs": 2
|
|
81
|
+
}
|
|
82
|
+
]
|
|
83
|
+
}
|
|
84
|
+
]
|
|
85
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@siteverb/profiles",
|
|
3
|
+
"version": "0.1.0-rc.0",
|
|
4
|
+
"description": "Evidence-labeled client compatibility profiles for WebMCP contracts.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"sideEffects": false,
|
|
7
|
+
"files": [
|
|
8
|
+
"dist",
|
|
9
|
+
"evidence",
|
|
10
|
+
"README.md"
|
|
11
|
+
],
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"import": "./dist/index.js"
|
|
16
|
+
},
|
|
17
|
+
"./evidence/chrome-151-native.json": "./evidence/chrome-151-native.json",
|
|
18
|
+
"./evidence/chrome-152-native.json": "./evidence/chrome-152-native.json",
|
|
19
|
+
"./package.json": "./package.json"
|
|
20
|
+
},
|
|
21
|
+
"main": "./dist/index.js",
|
|
22
|
+
"types": "./dist/index.d.ts",
|
|
23
|
+
"engines": {
|
|
24
|
+
"node": ">=22"
|
|
25
|
+
},
|
|
26
|
+
"scripts": {
|
|
27
|
+
"build": "tsc -p tsconfig.build.json",
|
|
28
|
+
"package:check": "publint && attw --pack . --profile esm-only",
|
|
29
|
+
"test": "vitest run",
|
|
30
|
+
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
31
|
+
},
|
|
32
|
+
"keywords": [
|
|
33
|
+
"webmcp",
|
|
34
|
+
"compatibility",
|
|
35
|
+
"browser-agents"
|
|
36
|
+
],
|
|
37
|
+
"license": "Apache-2.0",
|
|
38
|
+
"repository": {
|
|
39
|
+
"type": "git",
|
|
40
|
+
"url": "git+https://github.com/siteverb/siteverb.git",
|
|
41
|
+
"directory": "packages/profiles"
|
|
42
|
+
},
|
|
43
|
+
"publishConfig": {
|
|
44
|
+
"access": "public",
|
|
45
|
+
"provenance": true
|
|
46
|
+
},
|
|
47
|
+
"dependencies": {
|
|
48
|
+
"@siteverb/contracts": "^0.1.0-rc.0"
|
|
49
|
+
}
|
|
50
|
+
}
|