@tenova/swt3-mcp 0.1.0 → 0.5.1
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 +1 -1
- package/dist/chain-verifier.d.ts +46 -0
- package/dist/chain-verifier.d.ts.map +1 -0
- package/dist/chain-verifier.js +210 -0
- package/dist/chain-verifier.js.map +1 -0
- package/dist/client.d.ts +4 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +8 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +8 -0
- package/dist/config.js.map +1 -1
- package/dist/density-policy.d.ts +55 -0
- package/dist/density-policy.d.ts.map +1 -0
- package/dist/density-policy.js +124 -0
- package/dist/density-policy.js.map +1 -0
- package/dist/redis-reader.d.ts +57 -0
- package/dist/redis-reader.d.ts.map +1 -0
- package/dist/redis-reader.js +254 -0
- package/dist/redis-reader.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +442 -0
- package/dist/server.js.map +1 -1
- package/dist/state.d.ts +27 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +18 -0
- package/dist/state.js.map +1 -0
- package/dist/tools/audit.d.ts +20 -0
- package/dist/tools/audit.d.ts.map +1 -0
- package/dist/tools/audit.js +102 -0
- package/dist/tools/audit.js.map +1 -0
- package/dist/tools/authorize.d.ts +19 -0
- package/dist/tools/authorize.d.ts.map +1 -0
- package/dist/tools/authorize.js +96 -0
- package/dist/tools/authorize.js.map +1 -0
- package/dist/tools/chain.d.ts +24 -0
- package/dist/tools/chain.d.ts.map +1 -0
- package/dist/tools/chain.js +114 -0
- package/dist/tools/chain.js.map +1 -0
- package/dist/tools/model.d.ts +33 -0
- package/dist/tools/model.d.ts.map +1 -0
- package/dist/tools/model.js +162 -0
- package/dist/tools/model.js.map +1 -0
- package/dist/tools/signup.d.ts +2 -2
- package/dist/tools/signup.d.ts.map +1 -1
- package/dist/tools/signup.js +10 -3
- package/dist/tools/signup.js.map +1 -1
- package/dist/tools/skill.d.ts +33 -0
- package/dist/tools/skill.d.ts.map +1 -0
- package/dist/tools/skill.js +168 -0
- package/dist/tools/skill.js.map +1 -0
- package/dist/tools/suggest.d.ts +15 -0
- package/dist/tools/suggest.d.ts.map +1 -0
- package/dist/tools/suggest.js +174 -0
- package/dist/tools/suggest.js.map +1 -0
- package/dist/tools/trust.d.ts +33 -0
- package/dist/tools/trust.d.ts.map +1 -0
- package/dist/tools/trust.js +209 -0
- package/dist/tools/trust.js.map +1 -0
- package/dist/tools/violation.d.ts +20 -0
- package/dist/tools/violation.d.ts.map +1 -0
- package/dist/tools/violation.js +97 -0
- package/dist/tools/violation.js.map +1 -0
- package/dist/tools/witness.d.ts +6 -1
- package/dist/tools/witness.d.ts.map +1 -1
- package/dist/tools/witness.js +19 -5
- package/dist/tools/witness.js.map +1 -1
- package/package.json +25 -2
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SWT3 MCP Server: audit session tools.
|
|
3
|
+
*
|
|
4
|
+
* Passive compliance tracking for a conversation. Records which procedures
|
|
5
|
+
* were witnessed and produces a gap report at session end.
|
|
6
|
+
*
|
|
7
|
+
* Never blocks execution. Purely observational.
|
|
8
|
+
*/
|
|
9
|
+
import { randomUUID } from "node:crypto";
|
|
10
|
+
export function handleStartAudit(state) {
|
|
11
|
+
// Idempotent: return existing session if already active
|
|
12
|
+
if (state.activeAuditSession) {
|
|
13
|
+
return [
|
|
14
|
+
`Audit session already active.`,
|
|
15
|
+
`Session ID: ${state.activeAuditSession.sessionId}`,
|
|
16
|
+
`Started: ${new Date(state.activeAuditSession.startedAt).toISOString()}`,
|
|
17
|
+
`Procedures witnessed so far: ${state.activeAuditSession.proceduresWitnessed.length}`,
|
|
18
|
+
].join("\n");
|
|
19
|
+
}
|
|
20
|
+
const sessionId = randomUUID();
|
|
21
|
+
state.activeAuditSession = {
|
|
22
|
+
sessionId,
|
|
23
|
+
startedAt: Date.now(),
|
|
24
|
+
proceduresWitnessed: [],
|
|
25
|
+
};
|
|
26
|
+
return [
|
|
27
|
+
`Audit session started.`,
|
|
28
|
+
`Session ID: ${sessionId}`,
|
|
29
|
+
``,
|
|
30
|
+
`All witness_inference and witness_authorization calls will be tracked.`,
|
|
31
|
+
`Call end_audit_session when done to see a compliance gap report.`,
|
|
32
|
+
].join("\n");
|
|
33
|
+
}
|
|
34
|
+
export async function handleEndAudit(_args, state, client) {
|
|
35
|
+
if (!state.activeAuditSession) {
|
|
36
|
+
return "No audit session is active. Call start_audit_session first.";
|
|
37
|
+
}
|
|
38
|
+
const session = state.activeAuditSession;
|
|
39
|
+
const durationMs = Date.now() - session.startedAt;
|
|
40
|
+
const durationSec = Math.round(durationMs / 1000);
|
|
41
|
+
const witnessed = [...new Set(session.proceduresWitnessed)];
|
|
42
|
+
// Fetch AI procedures from registry for gap analysis
|
|
43
|
+
let allAiProcedures = [];
|
|
44
|
+
try {
|
|
45
|
+
const registry = await client.fetchRegistry();
|
|
46
|
+
const procedures = registry?.procedures ?? registry;
|
|
47
|
+
if (Array.isArray(procedures)) {
|
|
48
|
+
allAiProcedures = procedures
|
|
49
|
+
.map((p) => p.procedure_id || p.id || "")
|
|
50
|
+
.filter((id) => id.startsWith("AI-"));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// Registry unavailable -- report what we have
|
|
55
|
+
}
|
|
56
|
+
const gaps = allAiProcedures.filter((p) => !witnessed.includes(p));
|
|
57
|
+
const coverage = allAiProcedures.length > 0
|
|
58
|
+
? Math.round((witnessed.filter(w => allAiProcedures.includes(w)).length / allAiProcedures.length) * 100)
|
|
59
|
+
: 0;
|
|
60
|
+
// Clear session
|
|
61
|
+
state.activeAuditSession = null;
|
|
62
|
+
const lines = [
|
|
63
|
+
`Audit Session Complete`,
|
|
64
|
+
`Session ID: ${session.sessionId}`,
|
|
65
|
+
`Duration: ${durationSec}s`,
|
|
66
|
+
``,
|
|
67
|
+
`Procedures Witnessed (${witnessed.length}):`,
|
|
68
|
+
];
|
|
69
|
+
if (witnessed.length > 0) {
|
|
70
|
+
for (const p of witnessed.sort()) {
|
|
71
|
+
lines.push(` [x] ${p}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
lines.push(` (none)`);
|
|
76
|
+
}
|
|
77
|
+
if (allAiProcedures.length > 0) {
|
|
78
|
+
lines.push(``);
|
|
79
|
+
lines.push(`AI Procedures Not Witnessed (${gaps.length}):`);
|
|
80
|
+
if (gaps.length > 0) {
|
|
81
|
+
for (const p of gaps.sort()) {
|
|
82
|
+
lines.push(` [ ] ${p}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
lines.push(` (full coverage)`);
|
|
87
|
+
}
|
|
88
|
+
lines.push(``);
|
|
89
|
+
lines.push(`AI Procedure Coverage: ${coverage}%`);
|
|
90
|
+
}
|
|
91
|
+
return lines.join("\n");
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Track a procedure in the active audit session (if any).
|
|
95
|
+
* Called from server.ts after witness/authorize tool calls.
|
|
96
|
+
*/
|
|
97
|
+
export function trackProcedure(state, procedureId) {
|
|
98
|
+
if (state.activeAuditSession) {
|
|
99
|
+
state.activeAuditSession.proceduresWitnessed.push(procedureId);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/tools/audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SWT3 MCP Server: witness_authorization tool.
|
|
3
|
+
*
|
|
4
|
+
* Records an authorization decision as an AI-ACC.1 anchor. Never blocks
|
|
5
|
+
* execution. FAIL anchors trigger alerts, not blocks.
|
|
6
|
+
*/
|
|
7
|
+
import type { McpConfig } from "../config.js";
|
|
8
|
+
import type { AxiomClient } from "../client.js";
|
|
9
|
+
interface AuthorizeArgs {
|
|
10
|
+
resource: string;
|
|
11
|
+
scope?: string;
|
|
12
|
+
granted: boolean;
|
|
13
|
+
agent_id?: string;
|
|
14
|
+
cycle_id?: string;
|
|
15
|
+
clearing_level?: 0 | 1 | 2 | 3;
|
|
16
|
+
}
|
|
17
|
+
export declare function handleAuthorize(args: AuthorizeArgs, config: McpConfig, client: AxiomClient): Promise<string>;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=authorize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorize.d.ts","sourceRoot":"","sources":["../../src/tools/authorize.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,cAAc,CAAC;AAQhE,UAAU,aAAa;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CAChC;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,CAAC,CAqGjB"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SWT3 MCP Server: witness_authorization tool.
|
|
3
|
+
*
|
|
4
|
+
* Records an authorization decision as an AI-ACC.1 anchor. Never blocks
|
|
5
|
+
* execution. FAIL anchors trigger alerts, not blocks.
|
|
6
|
+
*/
|
|
7
|
+
import { mintFingerprint, sha256Truncated, timestampMs, signPayload, } from "../fingerprint.js";
|
|
8
|
+
export async function handleAuthorize(args, config, client) {
|
|
9
|
+
const procedureId = "AI-ACC.1";
|
|
10
|
+
const clearingLevel = args.clearing_level ?? config.clearingLevel;
|
|
11
|
+
// AI-ACC.1 factors: access attempt, granted/denied
|
|
12
|
+
const factorA = 1;
|
|
13
|
+
const factorB = args.granted ? 1 : 0;
|
|
14
|
+
const factorC = args.granted ? 1 : 0;
|
|
15
|
+
// Mint fingerprint
|
|
16
|
+
const [ts, epoch] = timestampMs();
|
|
17
|
+
const fp = mintFingerprint(config.tenantId, procedureId, factorA, factorB, factorC, ts);
|
|
18
|
+
// Build payload with clearing applied
|
|
19
|
+
const payload = {
|
|
20
|
+
procedure_id: procedureId,
|
|
21
|
+
factor_a: factorA,
|
|
22
|
+
factor_b: factorB,
|
|
23
|
+
factor_c: factorC,
|
|
24
|
+
clearing_level: clearingLevel,
|
|
25
|
+
anchor_fingerprint: fp,
|
|
26
|
+
anchor_epoch: epoch,
|
|
27
|
+
fingerprint_timestamp_ms: ts,
|
|
28
|
+
};
|
|
29
|
+
// Apply clearing level
|
|
30
|
+
if (clearingLevel <= 1) {
|
|
31
|
+
payload.ai_model_id = args.resource;
|
|
32
|
+
payload.ai_context = {
|
|
33
|
+
provider: "access",
|
|
34
|
+
access_target: args.resource,
|
|
35
|
+
access_scope: args.scope || "default",
|
|
36
|
+
access_granted: args.granted,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
else if (clearingLevel === 2) {
|
|
40
|
+
payload.ai_model_id = args.resource;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
// Level 3: hash resource name
|
|
44
|
+
payload.ai_model_id = sha256Truncated(args.resource);
|
|
45
|
+
}
|
|
46
|
+
// Source identification
|
|
47
|
+
payload.witness_source = "mcp";
|
|
48
|
+
// Operational metadata (survives all clearing levels)
|
|
49
|
+
const agentId = args.agent_id || config.agentId;
|
|
50
|
+
if (agentId)
|
|
51
|
+
payload.agent_id = agentId;
|
|
52
|
+
if (args.cycle_id)
|
|
53
|
+
payload.cycle_id = args.cycle_id;
|
|
54
|
+
if (config.signingKey) {
|
|
55
|
+
payload.payload_signature = signPayload(config.signingKey, fp, agentId);
|
|
56
|
+
}
|
|
57
|
+
const verdict = args.granted ? "PASS" : "FAIL";
|
|
58
|
+
// Demo mode: mint locally, no network call
|
|
59
|
+
if (config.demo) {
|
|
60
|
+
const demoAnchor = `SWT3-DEMO-LOCAL-AI-${procedureId.replace(/[.-]/g, "")}-${verdict}-${epoch}-${fp}`;
|
|
61
|
+
return [
|
|
62
|
+
`[DEMO MODE: local only, not persisted]`,
|
|
63
|
+
``,
|
|
64
|
+
`Authorization ${args.granted ? "GRANTED" : "DENIED"}`,
|
|
65
|
+
`Verdict: ${verdict}`,
|
|
66
|
+
`Anchor: ${demoAnchor}`,
|
|
67
|
+
`Procedure: ${procedureId}`,
|
|
68
|
+
`Resource: ${args.resource}`,
|
|
69
|
+
`Scope: ${args.scope || "default"}`,
|
|
70
|
+
`Clearing Level: ${clearingLevel}`,
|
|
71
|
+
`Fingerprint: ${fp}`,
|
|
72
|
+
``,
|
|
73
|
+
`This anchor was minted locally. To persist anchors to the SWT3 ledger,`,
|
|
74
|
+
`use the signup tool to create a free account, or set SWT3_API_KEY.`,
|
|
75
|
+
].join("\n");
|
|
76
|
+
}
|
|
77
|
+
// POST to witness endpoint
|
|
78
|
+
const receipt = await client.postWitness(payload);
|
|
79
|
+
// Auto-resolve tenant ID for future calls
|
|
80
|
+
if (receipt.tenant_id && !process.env.SWT3_TENANT_ID) {
|
|
81
|
+
config.tenantId = receipt.tenant_id;
|
|
82
|
+
}
|
|
83
|
+
return [
|
|
84
|
+
`Authorization ${args.granted ? "GRANTED" : "DENIED"}`,
|
|
85
|
+
`Verdict: ${receipt.verdict}`,
|
|
86
|
+
`Anchor: ${receipt.swt3_anchor}`,
|
|
87
|
+
`Procedure: ${receipt.procedure_id}`,
|
|
88
|
+
`Resource: ${args.resource}`,
|
|
89
|
+
`Scope: ${args.scope || "default"}`,
|
|
90
|
+
`Clearing Level: ${receipt.clearing_level}`,
|
|
91
|
+
`Witnessed: ${receipt.witnessed_at}`,
|
|
92
|
+
`Verify: ${config.endpoint}${receipt.verification_url}`,
|
|
93
|
+
`Fingerprint: ${fp}`,
|
|
94
|
+
].join("\n");
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=authorize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorize.js","sourceRoot":"","sources":["../../src/tools/authorize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SWT3 MCP Server: multi-agent chain tools.
|
|
3
|
+
*
|
|
4
|
+
* Metadata tagging for multi-agent pipelines. start_chain generates a
|
|
5
|
+
* cycle_id, chain_handoff witnesses custody transfer. Neither blocks
|
|
6
|
+
* execution.
|
|
7
|
+
*/
|
|
8
|
+
import type { McpConfig } from "../config.js";
|
|
9
|
+
import type { AxiomClient } from "../client.js";
|
|
10
|
+
import type { SessionState } from "../state.js";
|
|
11
|
+
interface StartChainArgs {
|
|
12
|
+
description?: string;
|
|
13
|
+
}
|
|
14
|
+
interface HandoffArgs {
|
|
15
|
+
cycle_id: string;
|
|
16
|
+
from_agent: string;
|
|
17
|
+
to_agent: string;
|
|
18
|
+
context?: string;
|
|
19
|
+
clearing_level?: 0 | 1 | 2 | 3;
|
|
20
|
+
}
|
|
21
|
+
export declare function handleStartChain(args: StartChainArgs, state: SessionState): string;
|
|
22
|
+
export declare function handleChainHandoff(args: HandoffArgs, config: McpConfig, client: AxiomClient): Promise<string>;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=chain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../../src/tools/chain.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,cAAc,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAQhD,UAAU,cAAc;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,WAAW;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CAChC;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,YAAY,GAClB,MAAM,CA4BR;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,CAAC,CA0FjB"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SWT3 MCP Server: multi-agent chain tools.
|
|
3
|
+
*
|
|
4
|
+
* Metadata tagging for multi-agent pipelines. start_chain generates a
|
|
5
|
+
* cycle_id, chain_handoff witnesses custody transfer. Neither blocks
|
|
6
|
+
* execution.
|
|
7
|
+
*/
|
|
8
|
+
import { randomUUID } from "node:crypto";
|
|
9
|
+
import { mintFingerprint, sha256Truncated, timestampMs, signPayload, } from "../fingerprint.js";
|
|
10
|
+
export function handleStartChain(args, state) {
|
|
11
|
+
// Idempotent: return existing chain if active
|
|
12
|
+
if (state.activeChain) {
|
|
13
|
+
return [
|
|
14
|
+
`Chain already active.`,
|
|
15
|
+
`Cycle ID: ${state.activeChain.cycleId}`,
|
|
16
|
+
`Description: ${state.activeChain.description}`,
|
|
17
|
+
`Started: ${new Date(state.activeChain.startedAt).toISOString()}`,
|
|
18
|
+
``,
|
|
19
|
+
`Pass this cycle_id to witness_inference and chain_handoff calls.`,
|
|
20
|
+
].join("\n");
|
|
21
|
+
}
|
|
22
|
+
const cycleId = randomUUID();
|
|
23
|
+
state.activeChain = {
|
|
24
|
+
cycleId,
|
|
25
|
+
description: args.description || "unnamed chain",
|
|
26
|
+
startedAt: Date.now(),
|
|
27
|
+
};
|
|
28
|
+
return [
|
|
29
|
+
`Chain started.`,
|
|
30
|
+
`Cycle ID: ${cycleId}`,
|
|
31
|
+
`Description: ${args.description || "unnamed chain"}`,
|
|
32
|
+
``,
|
|
33
|
+
`Pass this cycle_id to witness_inference and chain_handoff calls`,
|
|
34
|
+
`to link all anchors in this multi-agent chain.`,
|
|
35
|
+
].join("\n");
|
|
36
|
+
}
|
|
37
|
+
export async function handleChainHandoff(args, config, client) {
|
|
38
|
+
const procedureId = "AI-CHAIN.1";
|
|
39
|
+
const clearingLevel = args.clearing_level ?? config.clearingLevel;
|
|
40
|
+
// AI-CHAIN.1 factors: handoff occurred (always 1), transfer complete (always 1), reserved
|
|
41
|
+
const factorA = 1;
|
|
42
|
+
const factorB = 1;
|
|
43
|
+
const factorC = 0;
|
|
44
|
+
const [ts, epoch] = timestampMs();
|
|
45
|
+
const fp = mintFingerprint(config.tenantId, procedureId, factorA, factorB, factorC, ts);
|
|
46
|
+
const payload = {
|
|
47
|
+
procedure_id: procedureId,
|
|
48
|
+
factor_a: factorA,
|
|
49
|
+
factor_b: factorB,
|
|
50
|
+
factor_c: factorC,
|
|
51
|
+
clearing_level: clearingLevel,
|
|
52
|
+
anchor_fingerprint: fp,
|
|
53
|
+
anchor_epoch: epoch,
|
|
54
|
+
fingerprint_timestamp_ms: ts,
|
|
55
|
+
};
|
|
56
|
+
// Apply clearing level to handoff context
|
|
57
|
+
if (clearingLevel <= 1) {
|
|
58
|
+
payload.ai_model_id = `${args.from_agent} -> ${args.to_agent}`;
|
|
59
|
+
payload.ai_context = {
|
|
60
|
+
provider: "chain",
|
|
61
|
+
from_agent: args.from_agent,
|
|
62
|
+
to_agent: args.to_agent,
|
|
63
|
+
handoff_context: args.context || "unspecified",
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
else if (clearingLevel === 2) {
|
|
67
|
+
payload.ai_model_id = `${args.from_agent} -> ${args.to_agent}`;
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
payload.ai_model_id = sha256Truncated(`${args.from_agent}:${args.to_agent}`);
|
|
71
|
+
}
|
|
72
|
+
payload.witness_source = "mcp";
|
|
73
|
+
payload.cycle_id = args.cycle_id;
|
|
74
|
+
const agentId = config.agentId;
|
|
75
|
+
if (agentId)
|
|
76
|
+
payload.agent_id = agentId;
|
|
77
|
+
if (config.signingKey) {
|
|
78
|
+
payload.payload_signature = signPayload(config.signingKey, fp, agentId);
|
|
79
|
+
}
|
|
80
|
+
// Demo mode
|
|
81
|
+
if (config.demo) {
|
|
82
|
+
const demoAnchor = `SWT3-DEMO-LOCAL-AI-${procedureId.replace(/[.-]/g, "")}-PASS-${epoch}-${fp}`;
|
|
83
|
+
return [
|
|
84
|
+
`[DEMO MODE: local only, not persisted]`,
|
|
85
|
+
``,
|
|
86
|
+
`Chain Handoff Witnessed`,
|
|
87
|
+
`Anchor: ${demoAnchor}`,
|
|
88
|
+
`Procedure: ${procedureId}`,
|
|
89
|
+
`From: ${args.from_agent}`,
|
|
90
|
+
`To: ${args.to_agent}`,
|
|
91
|
+
`Cycle ID: ${args.cycle_id}`,
|
|
92
|
+
`Clearing Level: ${clearingLevel}`,
|
|
93
|
+
`Fingerprint: ${fp}`,
|
|
94
|
+
].join("\n");
|
|
95
|
+
}
|
|
96
|
+
const receipt = await client.postWitness(payload);
|
|
97
|
+
if (receipt.tenant_id && !process.env.SWT3_TENANT_ID) {
|
|
98
|
+
config.tenantId = receipt.tenant_id;
|
|
99
|
+
}
|
|
100
|
+
return [
|
|
101
|
+
`Chain Handoff Witnessed`,
|
|
102
|
+
`Verdict: ${receipt.verdict}`,
|
|
103
|
+
`Anchor: ${receipt.swt3_anchor}`,
|
|
104
|
+
`Procedure: ${receipt.procedure_id}`,
|
|
105
|
+
`From: ${args.from_agent}`,
|
|
106
|
+
`To: ${args.to_agent}`,
|
|
107
|
+
`Cycle ID: ${args.cycle_id}`,
|
|
108
|
+
`Clearing Level: ${receipt.clearing_level}`,
|
|
109
|
+
`Witnessed: ${receipt.witnessed_at}`,
|
|
110
|
+
`Verify: ${config.endpoint}${receipt.verification_url}`,
|
|
111
|
+
`Fingerprint: ${fp}`,
|
|
112
|
+
].join("\n");
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=chain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain.js","sourceRoot":"","sources":["../../src/tools/chain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SWT3 MCP Server: model integrity tools.
|
|
3
|
+
*
|
|
4
|
+
* witness_model_integrity (AI-MDL.5): Verify model weight file hash.
|
|
5
|
+
* witness_adapter_stack (AI-MDL.6): Attest active LoRA/PEFT adapters.
|
|
6
|
+
*/
|
|
7
|
+
import type { McpConfig } from "../config.js";
|
|
8
|
+
import type { AxiomClient } from "../client.js";
|
|
9
|
+
interface ModelIntegrityArgs {
|
|
10
|
+
model_id: string;
|
|
11
|
+
weight_hash: string;
|
|
12
|
+
expected_hash?: string;
|
|
13
|
+
format?: string;
|
|
14
|
+
file_size_bytes?: number;
|
|
15
|
+
agent_id?: string;
|
|
16
|
+
cycle_id?: string;
|
|
17
|
+
clearing_level?: 0 | 1 | 2 | 3;
|
|
18
|
+
}
|
|
19
|
+
export declare function handleWitnessModelIntegrity(args: ModelIntegrityArgs, config: McpConfig, client: AxiomClient): Promise<string>;
|
|
20
|
+
interface AdapterStackArgs {
|
|
21
|
+
base_model: string;
|
|
22
|
+
adapters: Array<{
|
|
23
|
+
name: string;
|
|
24
|
+
hash: string;
|
|
25
|
+
base_model?: string;
|
|
26
|
+
}>;
|
|
27
|
+
agent_id?: string;
|
|
28
|
+
cycle_id?: string;
|
|
29
|
+
clearing_level?: 0 | 1 | 2 | 3;
|
|
30
|
+
}
|
|
31
|
+
export declare function handleWitnessAdapterStack(args: AdapterStackArgs, config: McpConfig, client: AxiomClient): Promise<string>;
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/tools/model.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,cAAc,CAAC;AAUhE,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CAChC;AAED,wBAAsB,2BAA2B,CAC/C,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,CAAC,CAgFjB;AAID,UAAU,gBAAgB;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CAChC;AAED,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,CAAC,CA4EjB"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SWT3 MCP Server: model integrity tools.
|
|
3
|
+
*
|
|
4
|
+
* witness_model_integrity (AI-MDL.5): Verify model weight file hash.
|
|
5
|
+
* witness_adapter_stack (AI-MDL.6): Attest active LoRA/PEFT adapters.
|
|
6
|
+
*/
|
|
7
|
+
import { mintFingerprint, sha256Truncated, timestampMs, signPayload, } from "../fingerprint.js";
|
|
8
|
+
export async function handleWitnessModelIntegrity(args, config, client) {
|
|
9
|
+
const procedureId = "AI-MDL.5";
|
|
10
|
+
const clearingLevel = args.clearing_level ?? config.clearingLevel;
|
|
11
|
+
const match = args.expected_hash
|
|
12
|
+
? args.weight_hash === args.expected_hash
|
|
13
|
+
: true;
|
|
14
|
+
const factorA = 1;
|
|
15
|
+
const factorB = match ? 1 : 0;
|
|
16
|
+
const factorC = 0;
|
|
17
|
+
const verdict = match ? "PASS" : "FAIL";
|
|
18
|
+
const [ts, epoch] = timestampMs();
|
|
19
|
+
const fp = mintFingerprint(config.tenantId, procedureId, factorA, factorB, factorC, ts);
|
|
20
|
+
const payload = {
|
|
21
|
+
procedure_id: procedureId,
|
|
22
|
+
factor_a: factorA,
|
|
23
|
+
factor_b: factorB,
|
|
24
|
+
factor_c: factorC,
|
|
25
|
+
clearing_level: clearingLevel,
|
|
26
|
+
anchor_fingerprint: fp,
|
|
27
|
+
anchor_epoch: epoch,
|
|
28
|
+
fingerprint_timestamp_ms: ts,
|
|
29
|
+
};
|
|
30
|
+
if (clearingLevel <= 1) {
|
|
31
|
+
payload.ai_model_id = args.model_id;
|
|
32
|
+
const ctx = {
|
|
33
|
+
provider: "model-weights",
|
|
34
|
+
file_hash: args.weight_hash,
|
|
35
|
+
};
|
|
36
|
+
if (args.expected_hash)
|
|
37
|
+
ctx.expected_hash = args.expected_hash;
|
|
38
|
+
if (args.format)
|
|
39
|
+
ctx.format = args.format;
|
|
40
|
+
if (args.file_size_bytes != null)
|
|
41
|
+
ctx.file_size_bytes = args.file_size_bytes;
|
|
42
|
+
payload.ai_context = ctx;
|
|
43
|
+
}
|
|
44
|
+
else if (clearingLevel === 2) {
|
|
45
|
+
payload.ai_model_id = args.model_id;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
payload.ai_model_id = sha256Truncated(args.model_id);
|
|
49
|
+
}
|
|
50
|
+
payload.witness_source = "mcp";
|
|
51
|
+
const agentId = args.agent_id || config.agentId;
|
|
52
|
+
if (agentId)
|
|
53
|
+
payload.agent_id = agentId;
|
|
54
|
+
if (args.cycle_id)
|
|
55
|
+
payload.cycle_id = args.cycle_id;
|
|
56
|
+
if (config.signingKey) {
|
|
57
|
+
payload.payload_signature = signPayload(config.signingKey, fp, agentId);
|
|
58
|
+
}
|
|
59
|
+
if (config.demo) {
|
|
60
|
+
const demoAnchor = `SWT3-DEMO-LOCAL-AI-${procedureId.replace(/[.-]/g, "")}-${verdict}-${epoch}-${fp}`;
|
|
61
|
+
return [
|
|
62
|
+
`[DEMO MODE: local only, not persisted]`,
|
|
63
|
+
``,
|
|
64
|
+
`Model Weight Integrity`,
|
|
65
|
+
`Verdict: ${verdict}`,
|
|
66
|
+
`Anchor: ${demoAnchor}`,
|
|
67
|
+
`Model: ${args.model_id}`,
|
|
68
|
+
`Hash Match: ${match}`,
|
|
69
|
+
`Clearing Level: ${clearingLevel}`,
|
|
70
|
+
`Fingerprint: ${fp}`,
|
|
71
|
+
].join("\n");
|
|
72
|
+
}
|
|
73
|
+
const receipt = await client.postWitness(payload);
|
|
74
|
+
if (receipt.tenant_id && !process.env.SWT3_TENANT_ID)
|
|
75
|
+
config.tenantId = receipt.tenant_id;
|
|
76
|
+
return [
|
|
77
|
+
`Model Weight Integrity`,
|
|
78
|
+
`Verdict: ${receipt.verdict}`,
|
|
79
|
+
`Anchor: ${receipt.swt3_anchor}`,
|
|
80
|
+
`Model: ${args.model_id}`,
|
|
81
|
+
`Hash Match: ${match}`,
|
|
82
|
+
`Clearing Level: ${receipt.clearing_level}`,
|
|
83
|
+
`Witnessed: ${receipt.witnessed_at}`,
|
|
84
|
+
`Verify: ${config.endpoint}${receipt.verification_url}`,
|
|
85
|
+
`Fingerprint: ${fp}`,
|
|
86
|
+
].join("\n");
|
|
87
|
+
}
|
|
88
|
+
export async function handleWitnessAdapterStack(args, config, client) {
|
|
89
|
+
const procedureId = "AI-MDL.6";
|
|
90
|
+
const clearingLevel = args.clearing_level ?? config.clearingLevel;
|
|
91
|
+
const allVerified = args.adapters.length === 0 || args.adapters.every((a) => a.hash);
|
|
92
|
+
const factorA = args.adapters.length;
|
|
93
|
+
const factorB = allVerified ? 1 : 0;
|
|
94
|
+
const factorC = 0;
|
|
95
|
+
const verdict = allVerified ? "PASS" : "FAIL";
|
|
96
|
+
const [ts, epoch] = timestampMs();
|
|
97
|
+
const fp = mintFingerprint(config.tenantId, procedureId, factorA, factorB, factorC, ts);
|
|
98
|
+
const payload = {
|
|
99
|
+
procedure_id: procedureId,
|
|
100
|
+
factor_a: factorA,
|
|
101
|
+
factor_b: factorB,
|
|
102
|
+
factor_c: factorC,
|
|
103
|
+
clearing_level: clearingLevel,
|
|
104
|
+
anchor_fingerprint: fp,
|
|
105
|
+
anchor_epoch: epoch,
|
|
106
|
+
fingerprint_timestamp_ms: ts,
|
|
107
|
+
};
|
|
108
|
+
if (clearingLevel <= 1) {
|
|
109
|
+
payload.ai_model_id = args.base_model;
|
|
110
|
+
payload.ai_context = {
|
|
111
|
+
provider: "adapter",
|
|
112
|
+
base_model_id: args.base_model,
|
|
113
|
+
adapters: args.adapters,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
else if (clearingLevel === 2) {
|
|
117
|
+
payload.ai_model_id = args.base_model;
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
payload.ai_model_id = sha256Truncated(args.base_model);
|
|
121
|
+
}
|
|
122
|
+
payload.witness_source = "mcp";
|
|
123
|
+
const agentId = args.agent_id || config.agentId;
|
|
124
|
+
if (agentId)
|
|
125
|
+
payload.agent_id = agentId;
|
|
126
|
+
if (args.cycle_id)
|
|
127
|
+
payload.cycle_id = args.cycle_id;
|
|
128
|
+
if (config.signingKey) {
|
|
129
|
+
payload.payload_signature = signPayload(config.signingKey, fp, agentId);
|
|
130
|
+
}
|
|
131
|
+
if (config.demo) {
|
|
132
|
+
const demoAnchor = `SWT3-DEMO-LOCAL-AI-${procedureId.replace(/[.-]/g, "")}-${verdict}-${epoch}-${fp}`;
|
|
133
|
+
return [
|
|
134
|
+
`[DEMO MODE: local only, not persisted]`,
|
|
135
|
+
``,
|
|
136
|
+
`Adapter Stack Attestation`,
|
|
137
|
+
`Verdict: ${verdict}`,
|
|
138
|
+
`Anchor: ${demoAnchor}`,
|
|
139
|
+
`Base Model: ${args.base_model}`,
|
|
140
|
+
`Adapters: ${args.adapters.length}`,
|
|
141
|
+
`All Verified: ${allVerified}`,
|
|
142
|
+
`Clearing Level: ${clearingLevel}`,
|
|
143
|
+
`Fingerprint: ${fp}`,
|
|
144
|
+
].join("\n");
|
|
145
|
+
}
|
|
146
|
+
const receipt = await client.postWitness(payload);
|
|
147
|
+
if (receipt.tenant_id && !process.env.SWT3_TENANT_ID)
|
|
148
|
+
config.tenantId = receipt.tenant_id;
|
|
149
|
+
return [
|
|
150
|
+
`Adapter Stack Attestation`,
|
|
151
|
+
`Verdict: ${receipt.verdict}`,
|
|
152
|
+
`Anchor: ${receipt.swt3_anchor}`,
|
|
153
|
+
`Base Model: ${args.base_model}`,
|
|
154
|
+
`Adapters: ${args.adapters.length}`,
|
|
155
|
+
`All Verified: ${allVerified}`,
|
|
156
|
+
`Clearing Level: ${receipt.clearing_level}`,
|
|
157
|
+
`Witnessed: ${receipt.witnessed_at}`,
|
|
158
|
+
`Verify: ${config.endpoint}${receipt.verification_url}`,
|
|
159
|
+
`Fingerprint: ${fp}`,
|
|
160
|
+
].join("\n");
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/tools/model.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/signup.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* SWT3 MCP Server
|
|
2
|
+
* SWT3 MCP Server: signup tool.
|
|
3
3
|
*
|
|
4
4
|
* Directs the developer to the signup page without passing credentials
|
|
5
|
-
* through the LLM context. Returns a URL
|
|
5
|
+
* through the LLM context. Returns a URL. The developer completes
|
|
6
6
|
* signup in their browser and copies the API key back.
|
|
7
7
|
*/
|
|
8
8
|
import type { McpConfig } from "../config.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signup.d.ts","sourceRoot":"","sources":["../../src/tools/signup.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,wBAAsB,YAAY,CAChC,IAAI,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAC5B,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"signup.d.ts","sourceRoot":"","sources":["../../src/tools/signup.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,wBAAsB,YAAY,CAChC,IAAI,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAC5B,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,MAAM,CAAC,CAyBjB"}
|
package/dist/tools/signup.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* SWT3 MCP Server
|
|
2
|
+
* SWT3 MCP Server: signup tool.
|
|
3
3
|
*
|
|
4
4
|
* Directs the developer to the signup page without passing credentials
|
|
5
|
-
* through the LLM context. Returns a URL
|
|
5
|
+
* through the LLM context. Returns a URL. The developer completes
|
|
6
6
|
* signup in their browser and copies the API key back.
|
|
7
7
|
*/
|
|
8
8
|
export async function handleSignup(args, config) {
|
|
@@ -13,7 +13,7 @@ export async function handleSignup(args, config) {
|
|
|
13
13
|
``,
|
|
14
14
|
` ${signupUrl}`,
|
|
15
15
|
``,
|
|
16
|
-
`After signup, you'll see your API key (shown once
|
|
16
|
+
`After signup, you'll see your API key (shown once, copy it).`,
|
|
17
17
|
`Then add it to your MCP config:`,
|
|
18
18
|
``,
|
|
19
19
|
` "env": {`,
|
|
@@ -21,6 +21,13 @@ export async function handleSignup(args, config) {
|
|
|
21
21
|
` }`,
|
|
22
22
|
``,
|
|
23
23
|
`Restart your MCP client and the server switches to live mode automatically.`,
|
|
24
|
+
``,
|
|
25
|
+
`SDKs available in 5 languages:`,
|
|
26
|
+
` Python: pip install swt3-ai`,
|
|
27
|
+
` TypeScript: npm install @tenova/swt3-ai`,
|
|
28
|
+
` Rust: cargo add swt3-ai`,
|
|
29
|
+
` C#: dotnet add package swt3-ai`,
|
|
30
|
+
` Ruby: gem install swt3-ai`,
|
|
24
31
|
].join("\n");
|
|
25
32
|
}
|
|
26
33
|
//# sourceMappingURL=signup.js.map
|
package/dist/tools/signup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signup.js","sourceRoot":"","sources":["../../src/tools/signup.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAA4B,EAC5B,MAAiB;IAEjB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,aAAa,CAAC;IAClD,MAAM,SAAS,GAAG,GAAG,MAAM,CAAC,QAAQ,6BAA6B,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;IAEjG,OAAO;QACL,6CAA6C;QAC7C,EAAE;QACF,KAAK,SAAS,EAAE;QAChB,EAAE;QACF
|
|
1
|
+
{"version":3,"file":"signup.js","sourceRoot":"","sources":["../../src/tools/signup.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAA4B,EAC5B,MAAiB;IAEjB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,aAAa,CAAC;IAClD,MAAM,SAAS,GAAG,GAAG,MAAM,CAAC,QAAQ,6BAA6B,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;IAEjG,OAAO;QACL,6CAA6C;QAC7C,EAAE;QACF,KAAK,SAAS,EAAE;QAChB,EAAE;QACF,8DAA8D;QAC9D,iCAAiC;QACjC,EAAE;QACF,YAAY;QACZ,oCAAoC;QACpC,KAAK;QACL,EAAE;QACF,6EAA6E;QAC7E,EAAE;QACF,gCAAgC;QAChC,mCAAmC;QACnC,2CAA2C;QAC3C,iCAAiC;QACjC,0CAA0C;QAC1C,mCAAmC;KACpC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|