@codai/axiom-mcp 2.0.0 → 2.2.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 +104 -21
- package/dist/axm-lazy-LAnrfjUO.js +6284 -0
- package/dist/axm-lazy-Xin1nh7Q.js +6284 -0
- package/dist/axm-lazy.js +196 -7
- package/dist/cli-main.js +3661 -14919
- package/dist/dist-Bt9Wvd_P.js +6379 -0
- package/dist/dist-D4M2Lyji.js +6378 -0
- package/dist/gate-lazy.js +654 -43
- package/dist/gc-lazy.js +6885 -0
- package/dist/http-lazy.js +23527 -0
- package/dist/index.d.ts +141 -5
- package/dist/index.js +974 -50
- package/dist/lib-CqHwM4m_.js +3884 -0
- package/dist/mcp-lazy.js +23050 -0
- package/dist/migrate-lazy.js +6513 -0
- package/dist/verify-tree-lazy.js +6893 -0
- package/package.json +15 -8
- package/spec/codai-tools.json +348 -2
- package/spec/tools.json +1721 -72
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codai/axiom-mcp",
|
|
3
|
-
"
|
|
3
|
+
"mcpName": "io.github.dragoscv/axiom",
|
|
4
|
+
"version": "2.2.0",
|
|
4
5
|
"description": "AXIOM v2 MCP server (stdio) and CLI: validate, compile, check and transactionally apply content-addressed manifest bundles inside an allowlisted set of roots",
|
|
5
6
|
"license": "MIT",
|
|
6
7
|
"author": "Dragos Catalin Vladulescu",
|
|
@@ -44,16 +45,22 @@
|
|
|
44
45
|
"README.md"
|
|
45
46
|
],
|
|
46
47
|
"dependencies": {
|
|
47
|
-
"@codai/axiom-apply": "2.
|
|
48
|
-
"@codai/axiom-axm": "2.
|
|
49
|
-
"@codai/axiom-canon": "2.
|
|
50
|
-
"@codai/axiom-checks": "2.
|
|
51
|
-
"@codai/axiom-
|
|
52
|
-
"@codai/axiom-
|
|
53
|
-
"@
|
|
48
|
+
"@codai/axiom-apply": "2.2.0",
|
|
49
|
+
"@codai/axiom-axm": "2.2.0",
|
|
50
|
+
"@codai/axiom-canon": "2.2.0",
|
|
51
|
+
"@codai/axiom-checks": "2.2.0",
|
|
52
|
+
"@codai/axiom-emitters-web": "2.2.0",
|
|
53
|
+
"@codai/axiom-plan": "2.2.0",
|
|
54
|
+
"@codai/axiom-schema": "2.2.0",
|
|
55
|
+
"@modelcontextprotocol/server": "2.0.0",
|
|
54
56
|
"zod": "4.6.5"
|
|
55
57
|
},
|
|
58
|
+
"optionalDependencies": {
|
|
59
|
+
"@cedar-policy/cedar-wasm": "4.13.0"
|
|
60
|
+
},
|
|
56
61
|
"devDependencies": {
|
|
62
|
+
"@modelcontextprotocol/client": "2.0.0",
|
|
63
|
+
"fast-check": "4.10.1",
|
|
57
64
|
"tsdown": "0.23.0",
|
|
58
65
|
"tsx": "4.23.13",
|
|
59
66
|
"typescript": "7.0.2",
|
package/spec/codai-tools.json
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
{
|
|
27
27
|
"name": "axiom_plan_compile",
|
|
28
28
|
"risk": "ACT",
|
|
29
|
-
"description": "Compile a Plan into a content-addressed ManifestBundle (sorted artifacts, sha256 digests, in-toto planDigest). `store: cas` writes blobs under <root>/.axiom/cas instead of inlining them. When a root is given the bundle is stored under <root>/.axiom/manifests/<hex>.json so later tools can reference it by digest.",
|
|
29
|
+
"description": "Compile a Plan into a content-addressed ManifestBundle (sorted artifacts, sha256 digests, in-toto planDigest). `store: cas` writes blobs under <root>/.axiom/cas instead of inlining them. When a root is given the bundle is stored under <root>/.axiom/manifests/<hex>.json so later tools can reference it by digest. `template` sources are rendered by the built-in `web` emitter (see `axiom emitters`); its version is recorded in toolchain.emitters.",
|
|
30
30
|
"parameters": {
|
|
31
31
|
"type": "object",
|
|
32
32
|
"properties": {
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
{
|
|
60
60
|
"name": "axiom_manifest_verify",
|
|
61
61
|
"risk": "READ",
|
|
62
|
-
"description": "Structural and content-address verification: schema, recomputed manifestDigest, every inline blob hashes to its key, attestation subject matches. Never writes.",
|
|
62
|
+
"description": "Structural and content-address verification: schema, recomputed manifestDigest, every inline blob hashes to its key, attestation subject matches. When a root with .axiom/trust/keys.json is available, detached DSSE signatures are verified and the trusted keyids are reported under `signatures`. Never writes.",
|
|
63
63
|
"parameters": {
|
|
64
64
|
"type": "object",
|
|
65
65
|
"properties": {
|
|
@@ -70,6 +70,10 @@
|
|
|
70
70
|
},
|
|
71
71
|
"additionalProperties": {},
|
|
72
72
|
"description": "ManifestBundle"
|
|
73
|
+
},
|
|
74
|
+
"root": {
|
|
75
|
+
"description": "Absolute repository root; must equal or lie inside an allowlisted --root",
|
|
76
|
+
"type": "string"
|
|
73
77
|
}
|
|
74
78
|
},
|
|
75
79
|
"required": [
|
|
@@ -106,6 +110,289 @@
|
|
|
106
110
|
]
|
|
107
111
|
}
|
|
108
112
|
},
|
|
113
|
+
{
|
|
114
|
+
"name": "axiom_check_start",
|
|
115
|
+
"risk": "READ",
|
|
116
|
+
"description": "Same evaluation as axiom_check, but returned immediately as a task so long `guard.external` suites (up to 15 min per guard) outlive the client's per-call timeout. Poll axiom_task_get with the returned taskId every pollIntervalMs until status is completed|failed|cancelled; the CheckReport is in `result`. Finished tasks are pollable for ttlMs, then forgotten. Tasks live in this server process only (D-24 — tool-level tasks, not the io.modelcontextprotocol/tasks wire extension).",
|
|
117
|
+
"parameters": {
|
|
118
|
+
"type": "object",
|
|
119
|
+
"properties": {
|
|
120
|
+
"bundle": {
|
|
121
|
+
"type": "object",
|
|
122
|
+
"propertyNames": {
|
|
123
|
+
"type": "string"
|
|
124
|
+
},
|
|
125
|
+
"additionalProperties": {},
|
|
126
|
+
"description": "ManifestBundle"
|
|
127
|
+
},
|
|
128
|
+
"profile": {
|
|
129
|
+
"description": "Profile name (builtin default|strict|permissive, or <root>/.axiom/profiles/<name>.json)",
|
|
130
|
+
"type": "string"
|
|
131
|
+
},
|
|
132
|
+
"root": {
|
|
133
|
+
"description": "Absolute repository root; must equal or lie inside an allowlisted --root",
|
|
134
|
+
"type": "string"
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
"required": [
|
|
138
|
+
"bundle"
|
|
139
|
+
]
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"name": "axiom_task_get",
|
|
144
|
+
"risk": "READ",
|
|
145
|
+
"description": "Status of a task created by axiom_check_start. While `working` only the descriptor is returned; once terminal, `result` (completed) or `error` (failed|cancelled) is attached. Unknown or expired taskId → ERR_TASK_NOT_FOUND.",
|
|
146
|
+
"parameters": {
|
|
147
|
+
"type": "object",
|
|
148
|
+
"properties": {
|
|
149
|
+
"taskId": {
|
|
150
|
+
"type": "string",
|
|
151
|
+
"minLength": 1,
|
|
152
|
+
"description": "taskId returned by axiom_check_start"
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
"required": [
|
|
156
|
+
"taskId"
|
|
157
|
+
]
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"name": "axiom_task_cancel",
|
|
162
|
+
"risk": "ACT",
|
|
163
|
+
"description": "Abort a `working` task: every running guard process tree is killed and the task ends `cancelled` with error ERR_TASK_CANCELLED. Idempotent — a terminal task is returned unchanged.",
|
|
164
|
+
"parameters": {
|
|
165
|
+
"type": "object",
|
|
166
|
+
"properties": {
|
|
167
|
+
"taskId": {
|
|
168
|
+
"type": "string",
|
|
169
|
+
"minLength": 1,
|
|
170
|
+
"description": "taskId returned by axiom_check_start"
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
"required": [
|
|
174
|
+
"taskId"
|
|
175
|
+
]
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"name": "axiom_plan_begin",
|
|
180
|
+
"risk": "ACT",
|
|
181
|
+
"description": "Start assembling a Plan whose JSON would exceed the 4 MiB per-call cap: send the header here (everything except `artifacts`), append artifacts in chunks with axiom_plan_add, then axiom_plan_seal compiles the whole. The sealed bundle's manifestDigest is identical to a one-shot axiom_plan_compile of the same Plan. Sessions are in-memory, expire after 30 min idle, and hold at most 2000 artifacts / 64 MiB.",
|
|
182
|
+
"parameters": {
|
|
183
|
+
"type": "object",
|
|
184
|
+
"properties": {
|
|
185
|
+
"name": {
|
|
186
|
+
"type": "string",
|
|
187
|
+
"pattern": "^[a-z0-9][a-z0-9-]{0,63}$"
|
|
188
|
+
},
|
|
189
|
+
"intent": {
|
|
190
|
+
"type": "string",
|
|
191
|
+
"maxLength": 2000
|
|
192
|
+
},
|
|
193
|
+
"profile": {
|
|
194
|
+
"default": "default",
|
|
195
|
+
"type": "string",
|
|
196
|
+
"minLength": 1
|
|
197
|
+
},
|
|
198
|
+
"capabilities": {
|
|
199
|
+
"default": [],
|
|
200
|
+
"type": "array",
|
|
201
|
+
"items": {
|
|
202
|
+
"type": "string",
|
|
203
|
+
"enum": [
|
|
204
|
+
"fs",
|
|
205
|
+
"net",
|
|
206
|
+
"secret",
|
|
207
|
+
"ai",
|
|
208
|
+
"compute",
|
|
209
|
+
"git"
|
|
210
|
+
]
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
"checks": {
|
|
214
|
+
"default": [],
|
|
215
|
+
"type": "array",
|
|
216
|
+
"items": {
|
|
217
|
+
"type": "object",
|
|
218
|
+
"properties": {
|
|
219
|
+
"id": {
|
|
220
|
+
"type": "string",
|
|
221
|
+
"minLength": 1,
|
|
222
|
+
"maxLength": 128
|
|
223
|
+
},
|
|
224
|
+
"predicate": {
|
|
225
|
+
"type": "string",
|
|
226
|
+
"pattern": "^[a-z][a-zA-Z0-9]*\\.[a-zA-Z][a-zA-Z0-9]*$"
|
|
227
|
+
},
|
|
228
|
+
"params": {
|
|
229
|
+
"$ref": "#/$defs/__schema0"
|
|
230
|
+
},
|
|
231
|
+
"severity": {
|
|
232
|
+
"default": "error",
|
|
233
|
+
"type": "string",
|
|
234
|
+
"enum": [
|
|
235
|
+
"error",
|
|
236
|
+
"warn",
|
|
237
|
+
"info"
|
|
238
|
+
]
|
|
239
|
+
}
|
|
240
|
+
},
|
|
241
|
+
"required": [
|
|
242
|
+
"id",
|
|
243
|
+
"predicate",
|
|
244
|
+
"params"
|
|
245
|
+
],
|
|
246
|
+
"additionalProperties": false
|
|
247
|
+
}
|
|
248
|
+
},
|
|
249
|
+
"counter": {
|
|
250
|
+
"type": "integer",
|
|
251
|
+
"minimum": 0,
|
|
252
|
+
"maximum": 9007199254740991
|
|
253
|
+
},
|
|
254
|
+
"metadata": {
|
|
255
|
+
"default": {},
|
|
256
|
+
"type": "object",
|
|
257
|
+
"propertyNames": {
|
|
258
|
+
"type": "string"
|
|
259
|
+
},
|
|
260
|
+
"additionalProperties": {
|
|
261
|
+
"$ref": "#/$defs/__schema1"
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
},
|
|
265
|
+
"required": [
|
|
266
|
+
"name",
|
|
267
|
+
"intent"
|
|
268
|
+
],
|
|
269
|
+
"$defs": {
|
|
270
|
+
"__schema0": {
|
|
271
|
+
"anyOf": [
|
|
272
|
+
{
|
|
273
|
+
"type": "string"
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
"type": "number"
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
"type": "boolean"
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
"type": "null"
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
"type": "array",
|
|
286
|
+
"items": {
|
|
287
|
+
"$ref": "#/$defs/__schema0"
|
|
288
|
+
}
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
"type": "object",
|
|
292
|
+
"propertyNames": {
|
|
293
|
+
"type": "string"
|
|
294
|
+
},
|
|
295
|
+
"additionalProperties": {
|
|
296
|
+
"$ref": "#/$defs/__schema0"
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
]
|
|
300
|
+
},
|
|
301
|
+
"__schema1": {
|
|
302
|
+
"anyOf": [
|
|
303
|
+
{
|
|
304
|
+
"type": "string"
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
"type": "number"
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
"type": "boolean"
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
"type": "null"
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
"type": "array",
|
|
317
|
+
"items": {
|
|
318
|
+
"$ref": "#/$defs/__schema1"
|
|
319
|
+
}
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
"type": "object",
|
|
323
|
+
"propertyNames": {
|
|
324
|
+
"type": "string"
|
|
325
|
+
},
|
|
326
|
+
"additionalProperties": {
|
|
327
|
+
"$ref": "#/$defs/__schema1"
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
]
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
"name": "axiom_plan_add",
|
|
337
|
+
"risk": "ACT",
|
|
338
|
+
"description": "Add a chunk of Plan artifacts (each ≤ 4 MiB call, inline content ≤ 256 KiB per artifact as in a Plan) to an open session. Paths must be unique across every chunk (ERR_INVALID_PLAN otherwise); a sealed or over-budget session is ERR_PLAN_SESSION_STATE.",
|
|
339
|
+
"parameters": {
|
|
340
|
+
"type": "object",
|
|
341
|
+
"properties": {
|
|
342
|
+
"sessionId": {
|
|
343
|
+
"type": "string",
|
|
344
|
+
"minLength": 1,
|
|
345
|
+
"description": "sessionId returned by axiom_plan_begin"
|
|
346
|
+
},
|
|
347
|
+
"artifacts": {
|
|
348
|
+
"minItems": 1,
|
|
349
|
+
"type": "array",
|
|
350
|
+
"items": {
|
|
351
|
+
"type": "object",
|
|
352
|
+
"propertyNames": {
|
|
353
|
+
"type": "string"
|
|
354
|
+
},
|
|
355
|
+
"additionalProperties": {}
|
|
356
|
+
},
|
|
357
|
+
"description": "Plan artifacts, same shape as Plan.artifacts[]"
|
|
358
|
+
}
|
|
359
|
+
},
|
|
360
|
+
"required": [
|
|
361
|
+
"sessionId",
|
|
362
|
+
"artifacts"
|
|
363
|
+
]
|
|
364
|
+
}
|
|
365
|
+
},
|
|
366
|
+
{
|
|
367
|
+
"name": "axiom_plan_seal",
|
|
368
|
+
"risk": "ACT",
|
|
369
|
+
"description": "Assemble the session's header + every added artifact into one Plan and compile it exactly like axiom_plan_compile (same options, same digest). The session is consumed whether or not compilation succeeds. Bundles whose inline blobs exceed 4 MiB need `store: cas` (and therefore a root).",
|
|
370
|
+
"parameters": {
|
|
371
|
+
"type": "object",
|
|
372
|
+
"properties": {
|
|
373
|
+
"sessionId": {
|
|
374
|
+
"type": "string",
|
|
375
|
+
"minLength": 1,
|
|
376
|
+
"description": "sessionId returned by axiom_plan_begin"
|
|
377
|
+
},
|
|
378
|
+
"store": {
|
|
379
|
+
"description": "Blob transport; default inline",
|
|
380
|
+
"type": "string",
|
|
381
|
+
"enum": [
|
|
382
|
+
"inline",
|
|
383
|
+
"cas"
|
|
384
|
+
]
|
|
385
|
+
},
|
|
386
|
+
"root": {
|
|
387
|
+
"description": "Absolute repository root; must equal or lie inside an allowlisted --root",
|
|
388
|
+
"type": "string"
|
|
389
|
+
}
|
|
390
|
+
},
|
|
391
|
+
"required": [
|
|
392
|
+
"sessionId"
|
|
393
|
+
]
|
|
394
|
+
}
|
|
395
|
+
},
|
|
109
396
|
{
|
|
110
397
|
"name": "axiom_apply_dry_run",
|
|
111
398
|
"risk": "READ",
|
|
@@ -278,6 +565,65 @@
|
|
|
278
565
|
"type": "object",
|
|
279
566
|
"properties": {}
|
|
280
567
|
}
|
|
568
|
+
},
|
|
569
|
+
{
|
|
570
|
+
"name": "axiom_repo_snapshot",
|
|
571
|
+
"risk": "READ",
|
|
572
|
+
"description": "Deterministic, content-addressed inventory of a root: every regular file (and symlink) as { path, bytes, sha256, mode, kind }, sorted by code point, with snapshotDigest = sha256(JCS(body)). No timestamps, no absolute paths — the same tree gives the same digest on every machine. Honours the root .gitignore, always skips .git/ and .axiom/, never follows symlinks, never leaves the root. Use it to build Plans against real pre-image digests, or diff two snapshots with `axiom snapshot-diff`.",
|
|
573
|
+
"parameters": {
|
|
574
|
+
"type": "object",
|
|
575
|
+
"properties": {
|
|
576
|
+
"root": {
|
|
577
|
+
"description": "Absolute repository root; must equal or lie inside an allowlisted --root",
|
|
578
|
+
"type": "string"
|
|
579
|
+
},
|
|
580
|
+
"include": {
|
|
581
|
+
"description": "Relative globs (*, **, ?) to keep; default everything",
|
|
582
|
+
"type": "array",
|
|
583
|
+
"items": {
|
|
584
|
+
"type": "string",
|
|
585
|
+
"minLength": 1
|
|
586
|
+
}
|
|
587
|
+
},
|
|
588
|
+
"exclude": {
|
|
589
|
+
"description": "Relative globs to drop",
|
|
590
|
+
"type": "array",
|
|
591
|
+
"items": {
|
|
592
|
+
"type": "string",
|
|
593
|
+
"minLength": 1
|
|
594
|
+
}
|
|
595
|
+
},
|
|
596
|
+
"maxFiles": {
|
|
597
|
+
"default": 20000,
|
|
598
|
+
"description": "Stop after this many files (cap 50000); sets truncated",
|
|
599
|
+
"type": "integer",
|
|
600
|
+
"minimum": 1,
|
|
601
|
+
"maximum": 50000
|
|
602
|
+
},
|
|
603
|
+
"maxBytes": {
|
|
604
|
+
"default": 67108864,
|
|
605
|
+
"description": "Stop once the summed size would exceed this; sets truncated",
|
|
606
|
+
"type": "integer",
|
|
607
|
+
"minimum": 0,
|
|
608
|
+
"maximum": 9007199254740991
|
|
609
|
+
},
|
|
610
|
+
"followSymlinks": {
|
|
611
|
+
"default": false,
|
|
612
|
+
"description": "Always false; symlinks are recorded, never followed",
|
|
613
|
+
"type": "boolean",
|
|
614
|
+
"const": false
|
|
615
|
+
},
|
|
616
|
+
"respectGitignore": {
|
|
617
|
+
"default": true,
|
|
618
|
+
"type": "boolean"
|
|
619
|
+
},
|
|
620
|
+
"withContentDigest": {
|
|
621
|
+
"default": true,
|
|
622
|
+
"description": "false → sizes only, no sha256",
|
|
623
|
+
"type": "boolean"
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
}
|
|
281
627
|
}
|
|
282
628
|
]
|
|
283
629
|
}
|