@mcptoolshop/style-dataset-lab 3.3.0 → 3.5.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.
Files changed (119) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/README.es.md +117 -55
  3. package/README.fr.md +125 -65
  4. package/README.hi.md +117 -68
  5. package/README.it.md +119 -58
  6. package/README.ja.md +124 -74
  7. package/README.md +73 -7
  8. package/README.pt-BR.md +128 -63
  9. package/README.zh.md +116 -65
  10. package/bin/sdlab.js +100 -4
  11. package/lib/adapters/ai-toolkit.js +224 -35
  12. package/lib/adapters/comfyui-runner.js +79 -26
  13. package/lib/adapters/comfyui-workflows.js +94 -11
  14. package/lib/adapters/diffusers-lora.js +37 -5
  15. package/lib/adapters/generic-image-caption.js +43 -5
  16. package/lib/args.js +16 -1
  17. package/lib/asset-ingest.js +575 -0
  18. package/lib/asset-masks.js +323 -0
  19. package/lib/asset-source.js +1176 -0
  20. package/lib/batch-modes.js +29 -8
  21. package/lib/batch-runs.js +29 -1
  22. package/lib/batch-sheet-render.js +13 -3
  23. package/lib/brief-compiler.js +19 -0
  24. package/lib/candidate-sheet.js +327 -0
  25. package/lib/canon-author.js +350 -0
  26. package/lib/canon-build/build.js +146 -93
  27. package/lib/canon-review-gate.js +205 -0
  28. package/lib/captions.js +57 -0
  29. package/lib/card.js +74 -2
  30. package/lib/colab-launcher-guards.js +285 -0
  31. package/lib/comfyui.js +116 -18
  32. package/lib/config.js +116 -12
  33. package/lib/critique-engine.js +36 -2
  34. package/lib/eligibility.js +121 -9
  35. package/lib/eval-pack.js +14 -14
  36. package/lib/eval-runs.js +33 -0
  37. package/lib/export.js +122 -34
  38. package/lib/freeze-gate.js +16 -3
  39. package/lib/freeze-stamp.js +28 -3
  40. package/lib/generated-provenance.js +194 -6
  41. package/lib/implementation-packs.js +95 -17
  42. package/lib/ingest.js +396 -0
  43. package/lib/judgment-provenance.js +220 -0
  44. package/lib/lane1-render.js +668 -0
  45. package/lib/measure.js +422 -0
  46. package/lib/memory-store.js +663 -0
  47. package/lib/model-licences.js +305 -0
  48. package/lib/npy-meta.js +130 -0
  49. package/lib/paths.js +196 -7
  50. package/lib/png-meta.js +512 -0
  51. package/lib/records.js +54 -8
  52. package/lib/reingest-selected.js +113 -17
  53. package/lib/reingest.js +27 -3
  54. package/lib/run-manifest.js +159 -25
  55. package/lib/run-summary.js +12 -6
  56. package/lib/runtime-runs.js +45 -4
  57. package/lib/snapshot.js +114 -15
  58. package/lib/split.js +364 -48
  59. package/lib/train-runs.js +214 -0
  60. package/lib/training-manifests.js +114 -21
  61. package/lib/training-packages.js +147 -15
  62. package/lib/verifier.js +3 -0
  63. package/lib/verify-chain.js +367 -0
  64. package/lib/workflow-profiles.js +24 -3
  65. package/package.json +4 -3
  66. package/runtime/comfyui/txt2img-qwen.json +38 -0
  67. package/runtime/comfyui/txt2img-standard.json +21 -0
  68. package/scripts/_resume.js +62 -0
  69. package/scripts/_shared-args.js +44 -0
  70. package/scripts/asset-ingest.js +160 -0
  71. package/scripts/brief-compile.js +2 -1
  72. package/scripts/brief-show.js +2 -1
  73. package/scripts/canon-bind.js +2 -2
  74. package/scripts/canon-build.js +27 -20
  75. package/scripts/canon-draft.js +82 -0
  76. package/scripts/canon-drift.js +16 -7
  77. package/scripts/canon-freeze-status.js +14 -6
  78. package/scripts/canon-freeze.js +31 -11
  79. package/scripts/canon-unfreeze.js +17 -9
  80. package/scripts/card.js +2 -2
  81. package/scripts/colab/REAL_SERVICE_ASSUMPTIONS.md +14 -0
  82. package/scripts/colab/ai-toolkit-override-py315.txt +45 -0
  83. package/scripts/colab/colab_window.sh +587 -0
  84. package/scripts/colab/lane1_render.py +970 -0
  85. package/scripts/colab/launch_guards.py +564 -0
  86. package/scripts/colab/launch_lane1_stub.sh +309 -0
  87. package/scripts/colab/launch_lane3_stub.sh +366 -0
  88. package/scripts/colab/remote_runner.py +59 -0
  89. package/scripts/compare.js +2 -2
  90. package/scripts/critique.js +16 -1
  91. package/scripts/curate.js +2 -2
  92. package/scripts/doctor.js +182 -55
  93. package/scripts/eligibility.js +42 -2
  94. package/scripts/eval-pack.js +2 -2
  95. package/scripts/eval-run.js +2 -2
  96. package/scripts/export.js +2 -2
  97. package/scripts/generate-controlnet.js +45 -25
  98. package/scripts/generate-identity.js +53 -23
  99. package/scripts/generate-ipadapter.js +44 -23
  100. package/scripts/generate.js +86 -17
  101. package/scripts/implementation-pack.js +2 -2
  102. package/scripts/ingest.js +145 -0
  103. package/scripts/init.js +73 -13
  104. package/scripts/measure.js +170 -0
  105. package/scripts/measure_image.py +458 -0
  106. package/scripts/migrate-records.js +142 -0
  107. package/scripts/painterly-test.js +4 -3
  108. package/scripts/painterly.js +7 -3
  109. package/scripts/qwen_generate.py +138 -20
  110. package/scripts/reingest.js +2 -2
  111. package/scripts/sheet.js +142 -0
  112. package/scripts/snapshot.js +2 -2
  113. package/scripts/split.js +2 -2
  114. package/scripts/training-manifest.js +2 -2
  115. package/scripts/training-package.js +2 -2
  116. package/scripts/training-profile.js +2 -2
  117. package/scripts/verify.js +67 -0
  118. package/scripts/workflow-list.js +2 -1
  119. package/scripts/workflow-show.js +2 -1
@@ -12,7 +12,7 @@
12
12
 
13
13
  import { join } from 'node:path';
14
14
  import { parseArgs, getProjectName } from '../lib/args.js';
15
- import { REPO_ROOT } from '../lib/paths.js';
15
+ import { getProjectRoot } from '../lib/paths.js';
16
16
  import { inputError, handleCliError } from '../lib/errors.js';
17
17
  import { listExports } from '../lib/export.js';
18
18
  import {
@@ -35,7 +35,7 @@ export async function run(argv = process.argv.slice(2)) {
35
35
  });
36
36
 
37
37
  const projectName = flags.project || getProjectName(argv);
38
- const projectRoot = join(REPO_ROOT, 'projects', projectName);
38
+ const projectRoot = getProjectRoot(projectName);
39
39
  const subcommand = positionals.find(a => !a.startsWith('tm-')) || 'list';
40
40
 
41
41
  if (subcommand === 'create') {
@@ -11,7 +11,7 @@
11
11
 
12
12
  import { join } from 'node:path';
13
13
  import { parseArgs, getProjectName } from '../lib/args.js';
14
- import { REPO_ROOT } from '../lib/paths.js';
14
+ import { getProjectRoot } from '../lib/paths.js';
15
15
  import { inputError, handleCliError } from '../lib/errors.js';
16
16
  import { listTrainingManifests } from '../lib/training-manifests.js';
17
17
  import { buildTrainingPackage, listTrainingPackages, loadTrainingPackage } from '../lib/training-packages.js';
@@ -28,7 +28,7 @@ export async function run(argv = process.argv.slice(2)) {
28
28
  });
29
29
 
30
30
  const projectName = flags.project || getProjectName(argv);
31
- const projectRoot = join(REPO_ROOT, 'projects', projectName);
31
+ const projectRoot = getProjectRoot(projectName);
32
32
  const subcommand = positionals.find(a => !a.startsWith('tp-') && !a.startsWith('tm-')) || 'list';
33
33
 
34
34
  if (subcommand === 'build') {
@@ -10,7 +10,7 @@
10
10
 
11
11
  import { join } from 'node:path';
12
12
  import { parseArgs, getProjectName } from '../lib/args.js';
13
- import { REPO_ROOT } from '../lib/paths.js';
13
+ import { getProjectRoot } from '../lib/paths.js';
14
14
  import { inputError, handleCliError } from '../lib/errors.js';
15
15
  import { listTrainingProfiles, loadTrainingProfile } from '../lib/training-profiles.js';
16
16
 
@@ -21,7 +21,7 @@ export async function run(argv = process.argv.slice(2)) {
21
21
  });
22
22
 
23
23
  const projectName = flags.project || getProjectName(argv);
24
- const projectRoot = join(REPO_ROOT, 'projects', projectName);
24
+ const projectRoot = getProjectRoot(projectName);
25
25
  const subcommand = positionals[0] || 'list';
26
26
 
27
27
  if (subcommand === 'list') {
@@ -0,0 +1,67 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * sdlab verify — Offline end-to-end provenance chain verification (G9, §2.2–§2.3).
5
+ *
6
+ * Walks:
7
+ * image -> record (G5 owner + CC-BY-4.0)
8
+ * -> canon (G6 canon_sha + entry_sha256)
9
+ * -> model licence (G4 SPDX id + licence_url + date_read)
10
+ * -> run manifest (workflow sha + quarantine guard + verdict separation)
11
+ */
12
+
13
+ import { parseArgs, getProjectName } from '../lib/args.js';
14
+ import { getProjectRoot } from '../lib/paths.js';
15
+ import { inputError, handleCliError } from '../lib/errors.js';
16
+ import { verifyProvenanceChain } from '../lib/verify-chain.js';
17
+
18
+ export async function run(argv = process.argv.slice(2)) {
19
+ const parsed = parseArgs(argv, {
20
+ flags: {
21
+ project: { type: 'string' },
22
+ game: { type: 'string' },
23
+ record: { type: 'string' },
24
+ snapshot: { type: 'string' },
25
+ json: { type: 'boolean' },
26
+ 'allow-empty': { type: 'boolean' },
27
+ },
28
+ deprecated: { game: 'project' },
29
+ });
30
+
31
+ const projectName = getProjectName(argv);
32
+ const projectDir = getProjectRoot(projectName);
33
+
34
+ const report = await verifyProvenanceChain(projectDir, {
35
+ recordId: parsed.flags.record || null,
36
+ snapshotId: parsed.flags.snapshot || null,
37
+ allowEmpty: parsed.flags['allow-empty'] === true,
38
+ });
39
+
40
+ if (parsed.flags.json) {
41
+ console.log(JSON.stringify(report, null, 2));
42
+ } else {
43
+ console.log(`\x1b[1msdlab verify\x1b[0m — ${projectName}`);
44
+ console.log(` Records checked: ${report.records_checked} (${report.passed_count} passed, ${report.failed_count} failed)`);
45
+ for (const f of report.failures) {
46
+ console.error(` \x1b[31m✗\x1b[0m [${f.code}] ${f.message}`);
47
+ }
48
+ if (report.ok) {
49
+ console.log(` \x1b[32m✓\x1b[0m Provenance chain intact (CC-BY-4.0 eligible)`);
50
+ }
51
+ }
52
+
53
+ if (!report.ok) {
54
+ const codes = [...new Set(report.failures.map((f) => f.code))].join(', ');
55
+ throw inputError(
56
+ 'PROVENANCE_VERIFY_FAILED',
57
+ `Provenance verification failed for project "${projectName}" (${report.failures.length} failure(s): ${codes})`,
58
+ 'Fix the broken provenance link(s) reported above before releasing or exporting under CC-BY-4.0.',
59
+ );
60
+ }
61
+
62
+ return report;
63
+ }
64
+
65
+ if (process.argv[1] && (process.argv[1].endsWith('verify.js') || process.argv[1].endsWith('verify'))) {
66
+ run().catch(handleCliError);
67
+ }
@@ -11,6 +11,7 @@
11
11
  import { getProjectName, parseArgs } from '../lib/args.js';
12
12
  import { getProjectRoot } from '../lib/paths.js';
13
13
  import { listWorkflowProfiles } from '../lib/workflow-profiles.js';
14
+ import { handleCliError } from '../lib/errors.js';
14
15
 
15
16
  export async function run(argv = process.argv.slice(2)) {
16
17
  const { flags } = parseArgs(argv, {
@@ -57,5 +58,5 @@ export async function run(argv = process.argv.slice(2)) {
57
58
  }
58
59
 
59
60
  if (process.argv[1] && (process.argv[1].endsWith('workflow-list.js') || process.argv[1].endsWith('workflow-list'))) {
60
- run().catch((err) => { console.error(err.message || err); process.exit(1); });
61
+ run().catch(handleCliError);
61
62
  }
@@ -11,6 +11,7 @@
11
11
  import { parseArgs, getProjectName } from '../lib/args.js';
12
12
  import { getProjectRoot } from '../lib/paths.js';
13
13
  import { getWorkflowProfile } from '../lib/workflow-profiles.js';
14
+ import { handleCliError } from '../lib/errors.js';
14
15
 
15
16
  export async function run(argv = process.argv.slice(2)) {
16
17
  const { flags, positionals } = parseArgs(argv, {
@@ -93,5 +94,5 @@ export async function run(argv = process.argv.slice(2)) {
93
94
  }
94
95
 
95
96
  if (process.argv[1] && (process.argv[1].endsWith('workflow-show.js') || process.argv[1].endsWith('workflow-show'))) {
96
- run().catch((err) => { console.error(err.message || err); process.exit(1); });
97
+ run().catch(handleCliError);
97
98
  }