mdkg 0.1.0 → 0.1.2

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.
Files changed (68) hide show
  1. package/CHANGELOG.md +93 -0
  2. package/README.md +108 -15
  3. package/dist/cli.js +566 -15
  4. package/dist/commands/archive.js +474 -0
  5. package/dist/commands/bundle.js +743 -0
  6. package/dist/commands/bundle_import.js +243 -0
  7. package/dist/commands/capability.js +162 -0
  8. package/dist/commands/doctor.js +233 -2
  9. package/dist/commands/format.js +38 -9
  10. package/dist/commands/index.js +11 -0
  11. package/dist/commands/init.js +188 -63
  12. package/dist/commands/init_manifest.js +19 -6
  13. package/dist/commands/list.js +5 -2
  14. package/dist/commands/new.js +6 -0
  15. package/dist/commands/next.js +7 -0
  16. package/dist/commands/node_card.js +4 -1
  17. package/dist/commands/pack.js +62 -2
  18. package/dist/commands/query_output.js +1 -0
  19. package/dist/commands/search.js +5 -2
  20. package/dist/commands/show.js +7 -14
  21. package/dist/commands/skill_mirror.js +22 -0
  22. package/dist/commands/task.js +3 -0
  23. package/dist/commands/upgrade.js +151 -13
  24. package/dist/commands/validate.js +19 -2
  25. package/dist/commands/work.js +365 -0
  26. package/dist/commands/workspace.js +12 -2
  27. package/dist/core/config.js +100 -1
  28. package/dist/graph/agent_file_types.js +78 -5
  29. package/dist/graph/archive_file.js +125 -0
  30. package/dist/graph/archive_integrity.js +66 -0
  31. package/dist/graph/bundle_imports.js +418 -0
  32. package/dist/graph/capabilities_index_cache.js +103 -0
  33. package/dist/graph/capabilities_indexer.js +231 -0
  34. package/dist/graph/frontmatter.js +19 -0
  35. package/dist/graph/index_cache.js +21 -4
  36. package/dist/graph/indexer.js +4 -1
  37. package/dist/graph/node.js +23 -4
  38. package/dist/graph/node_body.js +37 -0
  39. package/dist/graph/skills_indexer.js +8 -3
  40. package/dist/graph/template_schema.js +33 -5
  41. package/dist/graph/validate_graph.js +83 -7
  42. package/dist/graph/visibility.js +214 -0
  43. package/dist/graph/workspace_files.js +22 -0
  44. package/dist/init/AGENT_START.md +21 -0
  45. package/dist/init/CLI_COMMAND_MATRIX.md +58 -3
  46. package/dist/init/README.md +60 -3
  47. package/dist/init/config.json +13 -1
  48. package/dist/init/core/guide.md +6 -2
  49. package/dist/init/core/rule-3-cli-contract.md +71 -4
  50. package/dist/init/core/rule-4-repo-safety-and-ignores.md +20 -0
  51. package/dist/init/core/rule-6-templates-and-schemas.md +10 -1
  52. package/dist/init/init-manifest.json +19 -14
  53. package/dist/init/skills/default/build-pack-and-execute-task/SKILL.md +2 -1
  54. package/dist/init/skills/default/verify-close-and-checkpoint/SKILL.md +26 -0
  55. package/dist/init/templates/default/archive.md +33 -0
  56. package/dist/init/templates/default/receipt.md +15 -1
  57. package/dist/init/templates/default/work.md +6 -1
  58. package/dist/init/templates/default/work_order.md +15 -1
  59. package/dist/pack/export_md.js +3 -0
  60. package/dist/pack/export_xml.js +3 -0
  61. package/dist/pack/order.js +1 -0
  62. package/dist/pack/pack.js +3 -13
  63. package/dist/templates/builtin.js +38 -0
  64. package/dist/templates/loader.js +9 -16
  65. package/dist/util/argparse.js +30 -0
  66. package/dist/util/refs.js +40 -0
  67. package/dist/util/zip.js +153 -0
  68. package/package.json +8 -2
package/dist/cli.js CHANGED
@@ -18,6 +18,10 @@ const next_1 = require("./commands/next");
18
18
  const validate_1 = require("./commands/validate");
19
19
  const format_1 = require("./commands/format");
20
20
  const doctor_1 = require("./commands/doctor");
21
+ const capability_1 = require("./commands/capability");
22
+ const archive_1 = require("./commands/archive");
23
+ const bundle_1 = require("./commands/bundle");
24
+ const bundle_import_1 = require("./commands/bundle_import");
21
25
  const checkpoint_1 = require("./commands/checkpoint");
22
26
  const init_1 = require("./commands/init");
23
27
  const new_1 = require("./commands/new");
@@ -26,6 +30,7 @@ const upgrade_1 = require("./commands/upgrade");
26
30
  const event_1 = require("./commands/event");
27
31
  const skill_1 = require("./commands/skill");
28
32
  const task_1 = require("./commands/task");
33
+ const work_1 = require("./commands/work");
29
34
  const workspace_1 = require("./commands/workspace");
30
35
  const profile_1 = require("./pack/profile");
31
36
  const errors_1 = require("./util/errors");
@@ -55,6 +60,10 @@ function printUsage(log) {
55
60
  log(" search Search nodes by query");
56
61
  log(" pack Generate a context pack");
57
62
  log(" skill Create, list, show, search, and validate skills");
63
+ log(" capability List, search, and show cached capability surfaces");
64
+ log(" archive Add, list, show, verify, and compress archive sidecars");
65
+ log(" bundle Create, list, show, and verify full graph snapshot bundles");
66
+ log(" work Create and update work contracts, orders, receipts, and artifacts");
58
67
  log(" task Start, update, and complete task-like nodes");
59
68
  log(" next Suggest the next work item");
60
69
  log(" validate Validate frontmatter + graph");
@@ -67,7 +76,7 @@ function printUsage(log) {
67
76
  log(" doctor Run install and workspace diagnostics");
68
77
  log(" workspace Manage workspaces (ls/add/rm/enable/disable)");
69
78
  log("\nQuickstart:");
70
- log(" mdkg init --llm");
79
+ log(" mdkg init --agent");
71
80
  log(" mdkg upgrade");
72
81
  log(" mdkg upgrade --apply");
73
82
  log(' mdkg new task "..." --status todo --priority 1');
@@ -80,7 +89,7 @@ function printUsage(log) {
80
89
  log(' mdkg skill new release-readiness "release readiness audit" --description "use when preparing a release"');
81
90
  log(" mdkg skill list --tags stage:plan --json");
82
91
  log(" mdkg validate");
83
- log("\nOptional agent-ready bootstrap:");
92
+ log("\nAgent-ready bootstrap:");
84
93
  log(" mdkg init --agent");
85
94
  log("\nRun `mdkg help <command>` or `mdkg <command> --help` for details.");
86
95
  printGlobalOptions(log);
@@ -90,13 +99,11 @@ function printInitHelp(log) {
90
99
  log(" mdkg init [options]");
91
100
  log("\nOptions:");
92
101
  log(" --force Overwrite existing mdkg files");
93
- log(" --llm Create AGENTS.md, CLAUDE.md, llms.txt, and AGENT_START.md");
94
- log(" --agent Add SOUL/HUMAN/skills/events scaffolding and skill mirrors");
102
+ log(" --agent Create the complete agent bootstrap, skills, events, and mirrors");
95
103
  log(" --no-update-ignores Skip default .gitignore/.npmignore updates");
96
104
  log(" --update-gitignore Append mdkg ignore entries");
97
105
  log(" --update-npmignore Append mdkg ignore entries");
98
106
  log(" --update-dockerignore Append mdkg ignore entries");
99
- log("\nCompatibility flags still supported but not shown in the primary onboarding story.");
100
107
  printGlobalOptions(log);
101
108
  }
102
109
  function printUpgradeHelp(log) {
@@ -108,7 +115,9 @@ function printUpgradeHelp(log) {
108
115
  log(" --json Emit machine-readable upgrade receipt");
109
116
  log("\nNotes:");
110
117
  log(" - preserves customized docs, templates, skills, and core files");
118
+ log(" - json receipts include safe_to_apply, will_write_paths, and apply_side_effects");
111
119
  log(" - upgrades default mdkg skills only when they match managed seed fingerprints");
120
+ log(" - skips ignored event logs; run mdkg event enable if provenance should be restored");
112
121
  log(" - run without flags first, then rerun with --apply when the receipt looks right");
113
122
  printGlobalOptions(log);
114
123
  }
@@ -120,6 +129,7 @@ function printNewHelp(log) {
120
129
  log("\nAgent workflow file types:");
121
130
  log(" spec work work_order receipt feedback dispute proposal");
122
131
  log(" Use --id <portable-id> with these types for semantic ids like agent.image-worker.");
132
+ log(" Use `mdkg archive add` for archive sidecars instead of `mdkg new archive`.");
123
133
  log("\nOptions:");
124
134
  log(" --id <portable-id> Explicit id for agent workflow file types");
125
135
  log(" --ws <alias> Workspace alias (default root)");
@@ -146,15 +156,21 @@ function printGuideHelp(log) {
146
156
  function printWorkspaceHelp(log) {
147
157
  log("Usage:");
148
158
  log(" mdkg workspace ls [--json]");
149
- log(" mdkg workspace add <alias> <path> [--mdkg-dir <dir>] [--json]");
159
+ log(" mdkg workspace add <alias> <path> [--mdkg-dir <dir>] [--visibility <level>] [--json]");
150
160
  log(" mdkg workspace rm <alias> [--json]");
151
161
  log(" mdkg workspace enable <alias> [--json]");
152
162
  log(" mdkg workspace disable <alias> [--json]");
163
+ log("\nVisibility levels:");
164
+ log(" private internal public");
153
165
  printGlobalOptions(log);
154
166
  }
155
167
  function printIndexHelp(log) {
156
168
  log("Usage:");
157
169
  log(" mdkg index [--tolerant]");
170
+ log("\nWrites:");
171
+ log(" - .mdkg/index/global.json");
172
+ log(" - .mdkg/index/skills.json");
173
+ log(" - .mdkg/index/capabilities.json");
158
174
  printGlobalOptions(log);
159
175
  }
160
176
  function printShowHelp(log) {
@@ -193,6 +209,7 @@ function printPackHelp(log) {
193
209
  log(" -f, --format <fmt> Output format: md|json|toon|xml (default md)");
194
210
  log(" -o, --out <path> Output file path");
195
211
  log(" --profile <name> Body profile: standard|concise|headers (default standard)");
212
+ log(" --visibility <level> Filter output: public|internal|private");
196
213
  log(" --skills <mode> Skill inclusion: none|auto|<slug,slug,...> (default auto)");
197
214
  log(" --skills-depth <mode> Skill body mode: meta|full (default meta)");
198
215
  log(" --dry-run Preview selection/order/stats without writing files");
@@ -205,6 +222,7 @@ function printPackHelp(log) {
205
222
  log(" mdkg pack --list-profiles");
206
223
  log(" mdkg pack task-1");
207
224
  log(" mdkg pack task-1 --profile concise --dry-run --stats");
225
+ log(" mdkg pack task-1 --visibility public --dry-run");
208
226
  log(" mdkg pack task-1 --skills auto --skills-depth full");
209
227
  log(" mdkg pack epic-2 --format json --profile headers");
210
228
  printGlobalOptions(log);
@@ -281,6 +299,153 @@ function printSkillHelp(log, subcommand) {
281
299
  printGlobalOptions(log);
282
300
  }
283
301
  }
302
+ function printCapabilityHelp(log, subcommand) {
303
+ switch ((subcommand ?? "").toLowerCase()) {
304
+ case "list":
305
+ log("Usage:");
306
+ log(" mdkg capability list [--kind <kind>] [--visibility <level>] [--json]");
307
+ log("\nKinds:");
308
+ log(" skill spec work core design");
309
+ printGlobalOptions(log);
310
+ return;
311
+ case "search":
312
+ log("Usage:");
313
+ log(' mdkg capability search "<query>" [--kind <kind>] [--visibility <level>] [--json]');
314
+ log("\nKinds:");
315
+ log(" skill spec work core design");
316
+ printGlobalOptions(log);
317
+ return;
318
+ case "show":
319
+ log("Usage:");
320
+ log(" mdkg capability show <id-or-qid-or-slug> [--json]");
321
+ printGlobalOptions(log);
322
+ return;
323
+ default:
324
+ log("Usage:");
325
+ log(" mdkg capability list [--kind <kind>] [--visibility <level>] [--json]");
326
+ log(' mdkg capability search "<query>" [--kind <kind>] [--visibility <level>] [--json]');
327
+ log(" mdkg capability show <id-or-qid-or-slug> [--json]");
328
+ log("\nNotes:");
329
+ log(" Capability records are deterministic cache projections from Markdown.");
330
+ log(" Cached kinds: skill, spec, work, core, design.");
331
+ printGlobalOptions(log);
332
+ }
333
+ }
334
+ function printArchiveHelp(log, subcommand) {
335
+ switch ((subcommand ?? "").toLowerCase()) {
336
+ case "add":
337
+ log("Usage:");
338
+ log(" mdkg archive add <file> [--id <archive.id>] [--kind source|artifact] [--visibility private|internal|public] [--title <title>] [--refs <...>] [--relates <...>] [--json]");
339
+ break;
340
+ case "list":
341
+ log("Usage:");
342
+ log(" mdkg archive list [--kind source|artifact] [--visibility private|internal|public] [--ws <alias>] [--json]");
343
+ break;
344
+ case "show":
345
+ log("Usage:");
346
+ log(" mdkg archive show <id-or-archive-uri> [--ws <alias>] [--json]");
347
+ break;
348
+ case "verify":
349
+ log("Usage:");
350
+ log(" mdkg archive verify [id-or-archive-uri] [--ws <alias>] [--json]");
351
+ break;
352
+ case "compress":
353
+ log("Usage:");
354
+ log(" mdkg archive compress <id-or-archive-uri> [--ws <alias>] [--json]");
355
+ log(" mdkg archive compress --all [--json]");
356
+ break;
357
+ default:
358
+ log("Usage:");
359
+ log(" mdkg archive add <file> [--id <archive.id>] [--kind source|artifact] [--visibility private|internal|public] [--json]");
360
+ log(" mdkg archive list [--kind source|artifact] [--visibility private|internal|public] [--json]");
361
+ log(" mdkg archive show <id-or-archive-uri> [--json]");
362
+ log(" mdkg archive verify [id-or-archive-uri] [--json]");
363
+ log(" mdkg archive compress <id-or-archive-uri|--all> [--json]");
364
+ log("\nNotes:");
365
+ log(" - archive add copies the source, writes a sidecar, and writes a deterministic zip cache");
366
+ log(" - archive visibility defaults to private");
367
+ log(" - archive://<archive.id> refs are validated against local archive sidecars");
368
+ log(" - archive verify checks sidecar and zip payload integrity; missing raw source copies are ok when the zip cache is valid");
369
+ }
370
+ printGlobalOptions(log);
371
+ }
372
+ function printBundleHelp(log, subcommand) {
373
+ switch ((subcommand ?? "").toLowerCase()) {
374
+ case "import":
375
+ log("Usage:");
376
+ log(" mdkg bundle import add <alias> <bundle-path> [--visibility private|internal|public] [--profile private|public] [--source-path <path>] [--source-repo <ref>] [--max-stale-seconds <seconds>] [--json]");
377
+ log(" mdkg bundle import list [--json]");
378
+ log(" mdkg bundle import rm <alias> [--json]");
379
+ log(" mdkg bundle import enable <alias> [--json]");
380
+ log(" mdkg bundle import disable <alias> [--json]");
381
+ log(" mdkg bundle import verify [alias|--all] [--json]");
382
+ break;
383
+ case "create":
384
+ log("Usage:");
385
+ log(" mdkg bundle create [--profile private|public] [--ws <alias|all>] [--output <path>] [--json]");
386
+ break;
387
+ case "verify":
388
+ log("Usage:");
389
+ log(" mdkg bundle verify [bundle-path] [--json]");
390
+ break;
391
+ case "show":
392
+ log("Usage:");
393
+ log(" mdkg bundle show <bundle-path> [--json]");
394
+ break;
395
+ case "list":
396
+ log("Usage:");
397
+ log(" mdkg bundle list [--json]");
398
+ break;
399
+ default:
400
+ log("Usage:");
401
+ log(" mdkg bundle create [--profile private|public] [--ws <alias|all>] [--output <path>] [--json]");
402
+ log(" mdkg bundle verify [bundle-path] [--json]");
403
+ log(" mdkg bundle show <bundle-path> [--json]");
404
+ log(" mdkg bundle list [--json]");
405
+ log(" mdkg bundle import add/list/rm/enable/disable/verify ...");
406
+ log("\nNotes:");
407
+ log(" - bundles are explicit full .mdkg graph snapshots, not task context packs");
408
+ log(" - bundle imports are read-only graph views projected under their import alias");
409
+ log(" - private is the default profile; public bundles fail closed on private refs");
410
+ log(" - .mdkg/bundles/ is commit-eligible when your repo tracks snapshot bundles");
411
+ }
412
+ printGlobalOptions(log);
413
+ }
414
+ function printWorkHelp(log, subcommand) {
415
+ switch ((subcommand ?? "").toLowerCase()) {
416
+ case "contract":
417
+ log("Usage:");
418
+ log(' mdkg work contract new "<title>" --id <work.id> --agent-id <agent.id> --kind <kind> --inputs <...> --outputs <...> [--required-capabilities <...>] [--pricing-model <...>] [--json]');
419
+ break;
420
+ case "order":
421
+ log("Usage:");
422
+ log(' mdkg work order new "<title>" --id <order.id> --work-id <work.id> --requester <ref> [--request-ref <ref>] [--input-refs <...>] [--requested-outputs <...>] [--json]');
423
+ log(" mdkg work order update <id-or-qid> [--status <status>] [--add-input-refs <...>] [--add-artifacts <...>] [--json]");
424
+ break;
425
+ case "receipt":
426
+ log("Usage:");
427
+ log(' mdkg work receipt new "<title>" --id <receipt.id> --work-order-id <order.id> --outcome success|partial|failure [--receipt-status recorded|verified|rejected|superseded] [--json]');
428
+ log(" mdkg work receipt update <id-or-qid> [--receipt-status <status>] [--add-artifacts <...>] [--add-proof-refs <...>] [--add-attestation-refs <...>] [--json]");
429
+ break;
430
+ case "artifact":
431
+ log("Usage:");
432
+ log(" mdkg work artifact add <order-or-receipt-id-or-qid> <file> [--id <archive.id>] [--kind source|artifact] [--json]");
433
+ break;
434
+ default:
435
+ log("Usage:");
436
+ log(" mdkg work contract new ...");
437
+ log(" mdkg work order new|update ...");
438
+ log(" mdkg work receipt new|update ...");
439
+ log(" mdkg work artifact add ...");
440
+ log("\nNotes:");
441
+ log(" - work commands mutate semantic mirror files only");
442
+ log(" - production order, receipt, feedback, dispute, payment, ledger, marketplace inventory, fulfillment, and execution state remains canonical outside mdkg");
443
+ log(" - do not store raw secrets, credentials, live payment state, ledger mutations, or canonical marketplace state in work mirrors");
444
+ log(" - artifact:// refs identify external/runtime-managed artifacts; archive:// refs identify committed mdkg archive sidecars");
445
+ log(" - update and artifact commands accept local ids or local qids; imported bundle qids are read-only");
446
+ }
447
+ printGlobalOptions(log);
448
+ }
284
449
  function printTaskHelp(log, subcommand) {
285
450
  switch ((subcommand ?? "").toLowerCase()) {
286
451
  case "start":
@@ -374,7 +539,11 @@ function printDoctorHelp(log) {
374
539
  log(" - Node.js version compatibility");
375
540
  log(" - mdkg repo root + .mdkg/config.json");
376
541
  log(" - Template schema availability");
542
+ log(" - Archive sidecar storage hygiene");
543
+ log(" - Bundle snapshot storage guidance");
544
+ log(" - Bundle import health and staleness");
377
545
  log(" - Index load/rebuild health");
546
+ log(" - Capability cache load/rebuild health");
378
547
  log("\nOptions:");
379
548
  log(" --json Emit machine-readable JSON output");
380
549
  printGlobalOptions(log);
@@ -418,6 +587,18 @@ function printCommandHelp(log, command, subcommand) {
418
587
  case "skill":
419
588
  printSkillHelp(log, subcommand);
420
589
  return;
590
+ case "capability":
591
+ printCapabilityHelp(log, subcommand);
592
+ return;
593
+ case "archive":
594
+ printArchiveHelp(log, subcommand);
595
+ return;
596
+ case "bundle":
597
+ printBundleHelp(log, subcommand);
598
+ return;
599
+ case "work":
600
+ printWorkHelp(log, subcommand);
601
+ return;
421
602
  case "task":
422
603
  printTaskHelp(log, subcommand);
423
604
  return;
@@ -612,8 +793,9 @@ function runWorkspaceSubcommand(parsed, root) {
612
793
  throw new errors_1.UsageError("workspace add requires <alias> <path>");
613
794
  }
614
795
  const mdkgDir = requireFlagValue("--mdkg-dir", parsed.flags["--mdkg-dir"]);
796
+ const visibility = requireFlagValue("--visibility", parsed.flags["--visibility"]);
615
797
  const json = parseBooleanFlag("--json", parsed.flags["--json"]);
616
- (0, workspace_1.runWorkspaceAddCommand)({ root, alias, workspacePath, mdkgDir, json });
798
+ (0, workspace_1.runWorkspaceAddCommand)({ root, alias, workspacePath, mdkgDir, visibility, json });
617
799
  return 0;
618
800
  }
619
801
  case "rm": {
@@ -647,6 +829,369 @@ function runWorkspaceSubcommand(parsed, root) {
647
829
  throw new errors_1.UsageError("workspace requires ls/add/rm/enable/disable");
648
830
  }
649
831
  }
832
+ function runCapabilitySubcommand(parsed, root) {
833
+ const subcommand = (parsed.positionals[1] ?? "").toLowerCase();
834
+ switch (subcommand) {
835
+ case "list": {
836
+ if (parsed.positionals.length > 2) {
837
+ throw new errors_1.UsageError("capability list does not accept positional arguments");
838
+ }
839
+ const kind = requireFlagValue("--kind", parsed.flags["--kind"]);
840
+ const visibility = requireFlagValue("--visibility", parsed.flags["--visibility"]);
841
+ const json = parseBooleanFlag("--json", parsed.flags["--json"]);
842
+ const noCache = parseBooleanFlag("--no-cache", parsed.flags["--no-cache"]);
843
+ const noReindex = parseBooleanFlag("--no-reindex", parsed.flags["--no-reindex"]);
844
+ (0, capability_1.runCapabilityListCommand)({ root, kind, visibility, json, noCache, noReindex });
845
+ return 0;
846
+ }
847
+ case "search": {
848
+ if (parsed.positionals.length < 3) {
849
+ throw new errors_1.UsageError("capability search requires a query");
850
+ }
851
+ const query = parsed.positionals.slice(2).join(" ");
852
+ const kind = requireFlagValue("--kind", parsed.flags["--kind"]);
853
+ const visibility = requireFlagValue("--visibility", parsed.flags["--visibility"]);
854
+ const json = parseBooleanFlag("--json", parsed.flags["--json"]);
855
+ const noCache = parseBooleanFlag("--no-cache", parsed.flags["--no-cache"]);
856
+ const noReindex = parseBooleanFlag("--no-reindex", parsed.flags["--no-reindex"]);
857
+ (0, capability_1.runCapabilitySearchCommand)({ root, query, kind, visibility, json, noCache, noReindex });
858
+ return 0;
859
+ }
860
+ case "show": {
861
+ const id = parsed.positionals[2];
862
+ if (!id || parsed.positionals.length > 3) {
863
+ throw new errors_1.UsageError("capability show requires <id-or-qid-or-slug>");
864
+ }
865
+ const json = parseBooleanFlag("--json", parsed.flags["--json"]);
866
+ const noCache = parseBooleanFlag("--no-cache", parsed.flags["--no-cache"]);
867
+ const noReindex = parseBooleanFlag("--no-reindex", parsed.flags["--no-reindex"]);
868
+ (0, capability_1.runCapabilityShowCommand)({ root, id, json, noCache, noReindex });
869
+ return 0;
870
+ }
871
+ default:
872
+ throw new errors_1.UsageError("capability requires list/search/show");
873
+ }
874
+ }
875
+ function runArchiveSubcommand(parsed, root) {
876
+ const subcommand = (parsed.positionals[1] ?? "").toLowerCase();
877
+ switch (subcommand) {
878
+ case "add": {
879
+ const file = parsed.positionals[2];
880
+ if (!file || parsed.positionals.length > 3) {
881
+ throw new errors_1.UsageError("archive add requires <file>");
882
+ }
883
+ const id = requireFlagValue("--id", parsed.flags["--id"]);
884
+ const ws = requireFlagValue("--ws", parsed.flags["--ws"]);
885
+ const kind = requireFlagValue("--kind", parsed.flags["--kind"]);
886
+ const title = requireFlagValue("--title", parsed.flags["--title"]);
887
+ const refs = requireFlagValue("--refs", parsed.flags["--refs"]);
888
+ const relates = requireFlagValue("--relates", parsed.flags["--relates"]);
889
+ const visibility = requireFlagValue("--visibility", parsed.flags["--visibility"]);
890
+ const json = parseBooleanFlag("--json", parsed.flags["--json"]);
891
+ (0, archive_1.runArchiveAddCommand)({ root, file, id, ws, kind, title, refs, relates, visibility, json });
892
+ return 0;
893
+ }
894
+ case "list": {
895
+ if (parsed.positionals.length > 2) {
896
+ throw new errors_1.UsageError("archive list does not accept positional arguments");
897
+ }
898
+ const ws = requireFlagValue("--ws", parsed.flags["--ws"]);
899
+ const kind = requireFlagValue("--kind", parsed.flags["--kind"]);
900
+ const visibility = requireFlagValue("--visibility", parsed.flags["--visibility"]);
901
+ const json = parseBooleanFlag("--json", parsed.flags["--json"]);
902
+ (0, archive_1.runArchiveListCommand)({ root, ws, kind, visibility, json });
903
+ return 0;
904
+ }
905
+ case "show": {
906
+ const id = parsed.positionals[2];
907
+ if (!id || parsed.positionals.length > 3) {
908
+ throw new errors_1.UsageError("archive show requires <id-or-archive-uri>");
909
+ }
910
+ const ws = requireFlagValue("--ws", parsed.flags["--ws"]);
911
+ const json = parseBooleanFlag("--json", parsed.flags["--json"]);
912
+ (0, archive_1.runArchiveShowCommand)({ root, id, ws, json });
913
+ return 0;
914
+ }
915
+ case "verify": {
916
+ if (parsed.positionals.length > 3) {
917
+ throw new errors_1.UsageError("archive verify accepts at most one id");
918
+ }
919
+ const id = parsed.positionals[2];
920
+ const ws = requireFlagValue("--ws", parsed.flags["--ws"]);
921
+ const json = parseBooleanFlag("--json", parsed.flags["--json"]);
922
+ (0, archive_1.runArchiveVerifyCommand)({ root, id, ws, json });
923
+ return 0;
924
+ }
925
+ case "compress": {
926
+ if (parsed.positionals.length > 3) {
927
+ throw new errors_1.UsageError("archive compress accepts at most one id");
928
+ }
929
+ const id = parsed.positionals[2];
930
+ const all = parseBooleanFlag("--all", parsed.flags["--all"]);
931
+ const ws = requireFlagValue("--ws", parsed.flags["--ws"]);
932
+ const json = parseBooleanFlag("--json", parsed.flags["--json"]);
933
+ (0, archive_1.runArchiveCompressCommand)({ root, id, all, ws, json });
934
+ return 0;
935
+ }
936
+ default:
937
+ throw new errors_1.UsageError("archive requires add/list/show/verify/compress");
938
+ }
939
+ }
940
+ function runBundleSubcommand(parsed, root) {
941
+ const subcommand = (parsed.positionals[1] ?? "").toLowerCase();
942
+ switch (subcommand) {
943
+ case "import": {
944
+ const action = (parsed.positionals[2] ?? "").toLowerCase();
945
+ const json = parseBooleanFlag("--json", parsed.flags["--json"]);
946
+ switch (action) {
947
+ case "add": {
948
+ const alias = parsed.positionals[3];
949
+ const bundlePath = parsed.positionals[4];
950
+ if (!alias || !bundlePath || parsed.positionals.length > 5) {
951
+ throw new errors_1.UsageError("bundle import add requires <alias> <bundle-path>");
952
+ }
953
+ const visibility = requireFlagValue("--visibility", parsed.flags["--visibility"]);
954
+ const profile = requireFlagValue("--profile", parsed.flags["--pack-profile"]);
955
+ const sourcePath = requireFlagValue("--source-path", parsed.flags["--source-path"]);
956
+ const sourceRepo = requireFlagValue("--source-repo", parsed.flags["--source-repo"]);
957
+ const maxStaleRaw = requireFlagValue("--max-stale-seconds", parsed.flags["--max-stale-seconds"]);
958
+ const maxStaleSeconds = maxStaleRaw === undefined ? undefined : Number.parseInt(maxStaleRaw, 10);
959
+ (0, bundle_import_1.runBundleImportAddCommand)({
960
+ root,
961
+ alias,
962
+ bundlePath,
963
+ visibility,
964
+ profile,
965
+ sourcePath,
966
+ sourceRepo,
967
+ maxStaleSeconds,
968
+ json,
969
+ });
970
+ return 0;
971
+ }
972
+ case "list": {
973
+ if (parsed.positionals.length > 3) {
974
+ throw new errors_1.UsageError("bundle import list does not accept positional arguments");
975
+ }
976
+ (0, bundle_import_1.runBundleImportListCommand)({ root, json });
977
+ return 0;
978
+ }
979
+ case "rm":
980
+ case "remove": {
981
+ const alias = parsed.positionals[3];
982
+ if (!alias || parsed.positionals.length > 4) {
983
+ throw new errors_1.UsageError("bundle import rm requires <alias>");
984
+ }
985
+ (0, bundle_import_1.runBundleImportRemoveCommand)({ root, alias, json });
986
+ return 0;
987
+ }
988
+ case "enable": {
989
+ const alias = parsed.positionals[3];
990
+ if (!alias || parsed.positionals.length > 4) {
991
+ throw new errors_1.UsageError("bundle import enable requires <alias>");
992
+ }
993
+ (0, bundle_import_1.runBundleImportEnableCommand)({ root, alias, json });
994
+ return 0;
995
+ }
996
+ case "disable": {
997
+ const alias = parsed.positionals[3];
998
+ if (!alias || parsed.positionals.length > 4) {
999
+ throw new errors_1.UsageError("bundle import disable requires <alias>");
1000
+ }
1001
+ (0, bundle_import_1.runBundleImportDisableCommand)({ root, alias, json });
1002
+ return 0;
1003
+ }
1004
+ case "verify": {
1005
+ if (parsed.positionals.length > 4) {
1006
+ throw new errors_1.UsageError("bundle import verify accepts at most one alias");
1007
+ }
1008
+ const alias = parsed.positionals[3];
1009
+ const all = parseBooleanFlag("--all", parsed.flags["--all"]);
1010
+ (0, bundle_import_1.runBundleImportVerifyCommand)({ root, alias, all, json });
1011
+ return 0;
1012
+ }
1013
+ default:
1014
+ throw new errors_1.UsageError("bundle import requires add/list/rm/enable/disable/verify");
1015
+ }
1016
+ }
1017
+ case "create": {
1018
+ if (parsed.positionals.length > 2) {
1019
+ throw new errors_1.UsageError("bundle create does not accept positional arguments");
1020
+ }
1021
+ const profile = requireFlagValue("--profile", parsed.flags["--pack-profile"]);
1022
+ const ws = requireFlagValue("--ws", parsed.flags["--ws"]);
1023
+ const output = requireFlagValue("--output", parsed.flags["--out"]);
1024
+ const json = parseBooleanFlag("--json", parsed.flags["--json"]);
1025
+ (0, bundle_1.runBundleCreateCommand)({ root, profile, ws, output, json });
1026
+ return 0;
1027
+ }
1028
+ case "verify": {
1029
+ if (parsed.positionals.length > 3) {
1030
+ throw new errors_1.UsageError("bundle verify accepts at most one bundle path");
1031
+ }
1032
+ const bundlePath = parsed.positionals[2];
1033
+ const json = parseBooleanFlag("--json", parsed.flags["--json"]);
1034
+ (0, bundle_1.runBundleVerifyCommand)({ root, bundlePath, json });
1035
+ return 0;
1036
+ }
1037
+ case "show": {
1038
+ const bundlePath = parsed.positionals[2];
1039
+ if (!bundlePath || parsed.positionals.length > 3) {
1040
+ throw new errors_1.UsageError("bundle show requires <bundle-path>");
1041
+ }
1042
+ const json = parseBooleanFlag("--json", parsed.flags["--json"]);
1043
+ (0, bundle_1.runBundleShowCommand)({ root, bundlePath, json });
1044
+ return 0;
1045
+ }
1046
+ case "list": {
1047
+ if (parsed.positionals.length > 2) {
1048
+ throw new errors_1.UsageError("bundle list does not accept positional arguments");
1049
+ }
1050
+ const json = parseBooleanFlag("--json", parsed.flags["--json"]);
1051
+ (0, bundle_1.runBundleListCommand)({ root, json });
1052
+ return 0;
1053
+ }
1054
+ default:
1055
+ throw new errors_1.UsageError("bundle requires create/list/show/verify/import");
1056
+ }
1057
+ }
1058
+ function runWorkSubcommand(parsed, root) {
1059
+ const domain = (parsed.positionals[1] ?? "").toLowerCase();
1060
+ const action = (parsed.positionals[2] ?? "").toLowerCase();
1061
+ const ws = requireFlagValue("--ws", parsed.flags["--ws"]);
1062
+ const json = parseBooleanFlag("--json", parsed.flags["--json"]);
1063
+ if (domain === "contract" && action === "new") {
1064
+ const title = parsed.positionals.slice(3).join(" ");
1065
+ const id = requireFlagValue("--id", parsed.flags["--id"]);
1066
+ const agentId = requireFlagValue("--agent-id", parsed.flags["--agent-id"]);
1067
+ const kind = requireFlagValue("--kind", parsed.flags["--kind"]);
1068
+ const inputs = requireFlagValue("--inputs", parsed.flags["--inputs"]);
1069
+ const outputs = requireFlagValue("--outputs", parsed.flags["--outputs"]);
1070
+ if (!title || !id || !agentId || !kind || !inputs || !outputs) {
1071
+ throw new errors_1.UsageError("work contract new requires title, --id, --agent-id, --kind, --inputs, and --outputs");
1072
+ }
1073
+ const requiredCapabilities = requireFlagValue("--required-capabilities", parsed.flags["--required-capabilities"]);
1074
+ const pricingModel = requireFlagValue("--pricing-model", parsed.flags["--pricing-model"]);
1075
+ (0, work_1.runWorkContractNewCommand)({
1076
+ root,
1077
+ ws,
1078
+ title,
1079
+ id,
1080
+ agentId,
1081
+ kind,
1082
+ inputs,
1083
+ outputs,
1084
+ requiredCapabilities,
1085
+ pricingModel,
1086
+ json,
1087
+ });
1088
+ return 0;
1089
+ }
1090
+ if (domain === "order" && action === "new") {
1091
+ const title = parsed.positionals.slice(3).join(" ");
1092
+ const id = requireFlagValue("--id", parsed.flags["--id"]);
1093
+ const workId = requireFlagValue("--work-id", parsed.flags["--work-id"]);
1094
+ const requester = requireFlagValue("--requester", parsed.flags["--requester"]);
1095
+ if (!title || !id || !workId || !requester) {
1096
+ throw new errors_1.UsageError("work order new requires title, --id, --work-id, and --requester");
1097
+ }
1098
+ const requestRef = requireFlagValue("--request-ref", parsed.flags["--request-ref"]);
1099
+ const inputRefs = requireFlagValue("--input-refs", parsed.flags["--input-refs"]);
1100
+ const requestedOutputs = requireFlagValue("--requested-outputs", parsed.flags["--requested-outputs"]);
1101
+ const constraintRefs = requireFlagValue("--constraint-refs", parsed.flags["--constraint-refs"]);
1102
+ (0, work_1.runWorkOrderNewCommand)({
1103
+ root,
1104
+ ws,
1105
+ title,
1106
+ id,
1107
+ workId,
1108
+ requester,
1109
+ requestRef,
1110
+ inputRefs,
1111
+ requestedOutputs,
1112
+ constraintRefs,
1113
+ json,
1114
+ });
1115
+ return 0;
1116
+ }
1117
+ if (domain === "order" && action === "update") {
1118
+ const id = parsed.positionals[3];
1119
+ if (!id || parsed.positionals.length > 4) {
1120
+ throw new errors_1.UsageError("work order update requires <id-or-qid>");
1121
+ }
1122
+ const status = requireFlagValue("--status", parsed.flags["--status"]);
1123
+ const addInputRefs = requireFlagValue("--add-input-refs", parsed.flags["--add-input-refs"]);
1124
+ const addArtifacts = requireFlagValue("--add-artifacts", parsed.flags["--add-artifacts"]);
1125
+ (0, work_1.runWorkOrderUpdateCommand)({ root, ws, id, status, addInputRefs, addArtifacts, json });
1126
+ return 0;
1127
+ }
1128
+ if (domain === "receipt" && action === "new") {
1129
+ const title = parsed.positionals.slice(3).join(" ");
1130
+ const id = requireFlagValue("--id", parsed.flags["--id"]);
1131
+ const workOrderId = requireFlagValue("--work-order-id", parsed.flags["--work-order-id"]);
1132
+ const outcome = requireFlagValue("--outcome", parsed.flags["--outcome"]);
1133
+ if (!title || !id || !workOrderId || !outcome) {
1134
+ throw new errors_1.UsageError("work receipt new requires title, --id, --work-order-id, and --outcome");
1135
+ }
1136
+ const receiptStatus = requireFlagValue("--receipt-status", parsed.flags["--receipt-status"]);
1137
+ const costRef = requireFlagValue("--cost-ref", parsed.flags["--cost-ref"]);
1138
+ const artifacts = requireFlagValue("--artifacts", parsed.flags["--artifacts"]);
1139
+ const proofRefs = requireFlagValue("--proof-refs", parsed.flags["--proof-refs"]);
1140
+ const attestationRefs = requireFlagValue("--attestation-refs", parsed.flags["--attestation-refs"]);
1141
+ const inputHashes = requireFlagValue("--input-hashes", parsed.flags["--input-hashes"]);
1142
+ const outputHashes = requireFlagValue("--output-hashes", parsed.flags["--output-hashes"]);
1143
+ (0, work_1.runWorkReceiptNewCommand)({
1144
+ root,
1145
+ ws,
1146
+ title,
1147
+ id,
1148
+ workOrderId,
1149
+ outcome,
1150
+ receiptStatus,
1151
+ costRef,
1152
+ artifacts,
1153
+ proofRefs,
1154
+ attestationRefs,
1155
+ inputHashes,
1156
+ outputHashes,
1157
+ json,
1158
+ });
1159
+ return 0;
1160
+ }
1161
+ if (domain === "receipt" && action === "update") {
1162
+ const id = parsed.positionals[3];
1163
+ if (!id || parsed.positionals.length > 4) {
1164
+ throw new errors_1.UsageError("work receipt update requires <id-or-qid>");
1165
+ }
1166
+ const receiptStatus = requireFlagValue("--receipt-status", parsed.flags["--receipt-status"]);
1167
+ const addArtifacts = requireFlagValue("--add-artifacts", parsed.flags["--add-artifacts"]);
1168
+ const addProofRefs = requireFlagValue("--add-proof-refs", parsed.flags["--add-proof-refs"]);
1169
+ const addAttestationRefs = requireFlagValue("--add-attestation-refs", parsed.flags["--add-attestation-refs"]);
1170
+ (0, work_1.runWorkReceiptUpdateCommand)({
1171
+ root,
1172
+ ws,
1173
+ id,
1174
+ receiptStatus,
1175
+ addArtifacts,
1176
+ addProofRefs,
1177
+ addAttestationRefs,
1178
+ json,
1179
+ });
1180
+ return 0;
1181
+ }
1182
+ if (domain === "artifact" && action === "add") {
1183
+ const targetId = parsed.positionals[3];
1184
+ const file = parsed.positionals[4];
1185
+ if (!targetId || !file || parsed.positionals.length > 5) {
1186
+ throw new errors_1.UsageError("work artifact add requires <order-or-receipt-id-or-qid> <file>");
1187
+ }
1188
+ const id = requireFlagValue("--id", parsed.flags["--id"]);
1189
+ const kind = requireFlagValue("--kind", parsed.flags["--kind"]);
1190
+ (0, work_1.runWorkArtifactAddCommand)({ root, ws, targetId, file, id, kind, json });
1191
+ return 0;
1192
+ }
1193
+ throw new errors_1.UsageError("work requires contract new, order new/update, receipt new/update, or artifact add");
1194
+ }
650
1195
  function runSkillSubcommand(parsed, root) {
651
1196
  const subcommand = (parsed.positionals[1] ?? "").toLowerCase();
652
1197
  switch (subcommand) {
@@ -904,11 +1449,10 @@ function runCommand(parsed, root, runtime) {
904
1449
  switch (command) {
905
1450
  case "init": {
906
1451
  const force = parseBooleanFlag("--force", parsed.flags["--force"]);
907
- const createAgents = parseBooleanFlag("--agents", parsed.flags["--agents"]);
908
- const createClaude = parseBooleanFlag("--claude", parsed.flags["--claude"]);
909
- const createLlm = parseBooleanFlag("--llm", parsed.flags["--llm"]);
910
- if (parsed.flags["--omni"]) {
911
- throw new errors_1.UsageError("`mdkg init --omni` was removed; use `mdkg init --agent`");
1452
+ for (const removedFlag of ["--llm", "--agents", "--claude", "--omni"]) {
1453
+ if (parsed.flags[removedFlag] !== undefined) {
1454
+ throw new errors_1.UsageError(`\`mdkg init ${removedFlag}\` was removed; use \`mdkg init --agent\``);
1455
+ }
912
1456
  }
913
1457
  const agent = parseBooleanFlag("--agent", parsed.flags["--agent"]);
914
1458
  const noUpdateIgnores = parseBooleanFlag("--no-update-ignores", parsed.flags["--no-update-ignores"]);
@@ -922,9 +1466,6 @@ function runCommand(parsed, root, runtime) {
922
1466
  updateNpmignore,
923
1467
  updateDockerignore,
924
1468
  noUpdateIgnores,
925
- createAgents,
926
- createClaude,
927
- createLlm,
928
1469
  agent,
929
1470
  });
930
1471
  return 0;
@@ -1017,6 +1558,14 @@ function runCommand(parsed, root, runtime) {
1017
1558
  return runWorkspaceSubcommand(parsed, root);
1018
1559
  case "skill":
1019
1560
  return runSkillSubcommand(parsed, root);
1561
+ case "capability":
1562
+ return runCapabilitySubcommand(parsed, root);
1563
+ case "archive":
1564
+ return runArchiveSubcommand(parsed, root);
1565
+ case "bundle":
1566
+ return runBundleSubcommand(parsed, root);
1567
+ case "work":
1568
+ return runWorkSubcommand(parsed, root);
1020
1569
  case "task":
1021
1570
  return runTaskSubcommand(parsed, root);
1022
1571
  case "event":
@@ -1127,6 +1676,7 @@ function runCommand(parsed, root, runtime) {
1127
1676
  const maxTokens = parseNumberFlag("--max-tokens", parsed.flags["--max-tokens"]);
1128
1677
  const skills = requireFlagValue("--skills", parsed.flags["--skills"]);
1129
1678
  const skillsDepth = requireFlagValue("--skills-depth", parsed.flags["--skills-depth"]);
1679
+ const visibility = requireFlagValue("--visibility", parsed.flags["--visibility"]);
1130
1680
  const dryRun = parseBooleanFlag("--dry-run", parsed.flags["--dry-run"]);
1131
1681
  const stats = parseBooleanFlag("--stats", parsed.flags["--stats"]);
1132
1682
  const statsOut = requireFlagValue("--stats-out", parsed.flags["--stats-out"]);
@@ -1151,6 +1701,7 @@ function runCommand(parsed, root, runtime) {
1151
1701
  maxTokens,
1152
1702
  skills,
1153
1703
  skillsDepth,
1704
+ visibility,
1154
1705
  dryRun,
1155
1706
  stats,
1156
1707
  statsOut,