qfai 0.4.6 → 0.4.9

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 (156) hide show
  1. package/README.md +3 -1
  2. package/assets/init/.qfai/promptpack/steering/traceability.md +10 -1
  3. package/dist/cli/index.cjs +2 -2
  4. package/dist/cli/index.d.ts +0 -2
  5. package/dist/cli/index.mjs +2 -2
  6. package/dist/index.cjs +2 -2
  7. package/dist/index.d.ts +167 -2
  8. package/dist/index.mjs +2 -2
  9. package/package.json +3 -1
  10. package/dist/cli/commands/init.d.ts +0 -8
  11. package/dist/cli/commands/init.d.ts.map +0 -1
  12. package/dist/cli/commands/init.js +0 -30
  13. package/dist/cli/commands/init.js.map +0 -1
  14. package/dist/cli/commands/report.d.ts +0 -7
  15. package/dist/cli/commands/report.d.ts.map +0 -1
  16. package/dist/cli/commands/report.js +0 -108
  17. package/dist/cli/commands/report.js.map +0 -1
  18. package/dist/cli/commands/validate.d.ts +0 -9
  19. package/dist/cli/commands/validate.d.ts.map +0 -1
  20. package/dist/cli/commands/validate.js +0 -57
  21. package/dist/cli/commands/validate.js.map +0 -1
  22. package/dist/cli/index.d.ts.map +0 -1
  23. package/dist/cli/index.js +0 -7
  24. package/dist/cli/index.js.map +0 -1
  25. package/dist/cli/lib/args.d.ts +0 -18
  26. package/dist/cli/lib/args.d.ts.map +0 -1
  27. package/dist/cli/lib/args.js +0 -98
  28. package/dist/cli/lib/args.js.map +0 -1
  29. package/dist/cli/lib/assets.d.ts +0 -2
  30. package/dist/cli/lib/assets.d.ts.map +0 -1
  31. package/dist/cli/lib/assets.js +0 -24
  32. package/dist/cli/lib/assets.js.map +0 -1
  33. package/dist/cli/lib/failOn.d.ts +0 -5
  34. package/dist/cli/lib/failOn.d.ts.map +0 -1
  35. package/dist/cli/lib/failOn.js +0 -10
  36. package/dist/cli/lib/failOn.js.map +0 -1
  37. package/dist/cli/lib/fs.d.ts +0 -11
  38. package/dist/cli/lib/fs.d.ts.map +0 -1
  39. package/dist/cli/lib/fs.js +0 -91
  40. package/dist/cli/lib/fs.js.map +0 -1
  41. package/dist/cli/lib/logger.d.ts +0 -4
  42. package/dist/cli/lib/logger.d.ts.map +0 -1
  43. package/dist/cli/lib/logger.js +0 -10
  44. package/dist/cli/lib/logger.js.map +0 -1
  45. package/dist/cli/main.d.ts +0 -2
  46. package/dist/cli/main.d.ts.map +0 -1
  47. package/dist/cli/main.js +0 -66
  48. package/dist/cli/main.js.map +0 -1
  49. package/dist/core/config.d.ts +0 -47
  50. package/dist/core/config.d.ts.map +0 -1
  51. package/dist/core/config.js +0 -224
  52. package/dist/core/config.js.map +0 -1
  53. package/dist/core/contractIndex.d.ts +0 -12
  54. package/dist/core/contractIndex.d.ts.map +0 -1
  55. package/dist/core/contractIndex.js +0 -38
  56. package/dist/core/contractIndex.js.map +0 -1
  57. package/dist/core/contracts.d.ts +0 -5
  58. package/dist/core/contracts.d.ts.map +0 -1
  59. package/dist/core/contracts.js +0 -42
  60. package/dist/core/contracts.js.map +0 -1
  61. package/dist/core/contractsDecl.d.ts +0 -3
  62. package/dist/core/contractsDecl.d.ts.map +0 -1
  63. package/dist/core/contractsDecl.js +0 -19
  64. package/dist/core/contractsDecl.js.map +0 -1
  65. package/dist/core/discovery.d.ts +0 -14
  66. package/dist/core/discovery.d.ts.map +0 -1
  67. package/dist/core/discovery.js +0 -55
  68. package/dist/core/discovery.js.map +0 -1
  69. package/dist/core/fs.d.ts +0 -11
  70. package/dist/core/fs.d.ts.map +0 -1
  71. package/dist/core/fs.js +0 -68
  72. package/dist/core/fs.js.map +0 -1
  73. package/dist/core/gherkin/parse.d.ts +0 -7
  74. package/dist/core/gherkin/parse.d.ts.map +0 -1
  75. package/dist/core/gherkin/parse.js +0 -25
  76. package/dist/core/gherkin/parse.js.map +0 -1
  77. package/dist/core/ids.d.ts +0 -6
  78. package/dist/core/ids.d.ts.map +0 -1
  79. package/dist/core/ids.js +0 -52
  80. package/dist/core/ids.js.map +0 -1
  81. package/dist/core/index.d.ts +0 -13
  82. package/dist/core/index.d.ts.map +0 -1
  83. package/dist/core/index.js +0 -13
  84. package/dist/core/index.js.map +0 -1
  85. package/dist/core/parse/adr.d.ts +0 -13
  86. package/dist/core/parse/adr.d.ts.map +0 -1
  87. package/dist/core/parse/adr.js +0 -33
  88. package/dist/core/parse/adr.js.map +0 -1
  89. package/dist/core/parse/gherkin.d.ts +0 -12
  90. package/dist/core/parse/gherkin.d.ts.map +0 -1
  91. package/dist/core/parse/gherkin.js +0 -22
  92. package/dist/core/parse/gherkin.js.map +0 -1
  93. package/dist/core/parse/markdown.d.ts +0 -14
  94. package/dist/core/parse/markdown.d.ts.map +0 -1
  95. package/dist/core/parse/markdown.js +0 -45
  96. package/dist/core/parse/markdown.js.map +0 -1
  97. package/dist/core/parse/spec.d.ts +0 -36
  98. package/dist/core/parse/spec.d.ts.map +0 -1
  99. package/dist/core/parse/spec.js +0 -123
  100. package/dist/core/parse/spec.js.map +0 -1
  101. package/dist/core/report.d.ts +0 -55
  102. package/dist/core/report.d.ts.map +0 -1
  103. package/dist/core/report.js +0 -393
  104. package/dist/core/report.js.map +0 -1
  105. package/dist/core/scenarioModel.d.ts +0 -33
  106. package/dist/core/scenarioModel.d.ts.map +0 -1
  107. package/dist/core/scenarioModel.js +0 -128
  108. package/dist/core/scenarioModel.js.map +0 -1
  109. package/dist/core/specLayout.d.ts +0 -8
  110. package/dist/core/specLayout.d.ts.map +0 -1
  111. package/dist/core/specLayout.js +0 -36
  112. package/dist/core/specLayout.js.map +0 -1
  113. package/dist/core/traceability.d.ts +0 -26
  114. package/dist/core/traceability.d.ts.map +0 -1
  115. package/dist/core/traceability.js +0 -157
  116. package/dist/core/traceability.js.map +0 -1
  117. package/dist/core/types.d.ts +0 -31
  118. package/dist/core/types.d.ts.map +0 -1
  119. package/dist/core/types.js +0 -2
  120. package/dist/core/types.js.map +0 -1
  121. package/dist/core/validate.d.ts +0 -4
  122. package/dist/core/validate.d.ts.map +0 -1
  123. package/dist/core/validate.js +0 -45
  124. package/dist/core/validate.js.map +0 -1
  125. package/dist/core/validators/contracts.d.ts +0 -5
  126. package/dist/core/validators/contracts.d.ts.map +0 -1
  127. package/dist/core/validators/contracts.js +0 -189
  128. package/dist/core/validators/contracts.js.map +0 -1
  129. package/dist/core/validators/delta.d.ts +0 -4
  130. package/dist/core/validators/delta.d.ts.map +0 -1
  131. package/dist/core/validators/delta.js +0 -68
  132. package/dist/core/validators/delta.js.map +0 -1
  133. package/dist/core/validators/ids.d.ts +0 -4
  134. package/dist/core/validators/ids.d.ts.map +0 -1
  135. package/dist/core/validators/ids.js +0 -88
  136. package/dist/core/validators/ids.js.map +0 -1
  137. package/dist/core/validators/scenario.d.ts +0 -5
  138. package/dist/core/validators/scenario.d.ts.map +0 -1
  139. package/dist/core/validators/scenario.js +0 -127
  140. package/dist/core/validators/scenario.js.map +0 -1
  141. package/dist/core/validators/spec.d.ts +0 -5
  142. package/dist/core/validators/spec.d.ts.map +0 -1
  143. package/dist/core/validators/spec.js +0 -94
  144. package/dist/core/validators/spec.js.map +0 -1
  145. package/dist/core/validators/traceability.d.ts +0 -4
  146. package/dist/core/validators/traceability.d.ts.map +0 -1
  147. package/dist/core/validators/traceability.js +0 -222
  148. package/dist/core/validators/traceability.js.map +0 -1
  149. package/dist/core/version.d.ts +0 -2
  150. package/dist/core/version.d.ts.map +0 -1
  151. package/dist/core/version.js +0 -25
  152. package/dist/core/version.js.map +0 -1
  153. package/dist/index.d.ts.map +0 -1
  154. package/dist/index.js +0 -2
  155. package/dist/index.js.map +0 -1
  156. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -1,98 +0,0 @@
1
- export function parseArgs(argv, cwd) {
2
- const options = {
3
- root: cwd,
4
- dir: cwd,
5
- force: false,
6
- yes: false,
7
- dryRun: false,
8
- reportFormat: "md",
9
- validateFormat: "text",
10
- strict: false,
11
- help: false,
12
- };
13
- const args = [...argv];
14
- let command = args.shift() ?? null;
15
- if (command === "--help" || command === "-h") {
16
- options.help = true;
17
- command = null;
18
- }
19
- for (let i = 0; i < args.length; i += 1) {
20
- const arg = args[i];
21
- switch (arg) {
22
- case "--root":
23
- options.root = args[i + 1] ?? options.root;
24
- i += 1;
25
- break;
26
- case "--dir":
27
- options.dir = args[i + 1] ?? options.dir;
28
- i += 1;
29
- break;
30
- case "--force":
31
- options.force = true;
32
- break;
33
- case "--yes":
34
- options.yes = true;
35
- break;
36
- case "--dry-run":
37
- options.dryRun = true;
38
- break;
39
- case "--format": {
40
- const next = args[i + 1];
41
- applyFormatOption(command, next, options);
42
- i += 1;
43
- break;
44
- }
45
- case "--strict":
46
- options.strict = true;
47
- break;
48
- case "--fail-on": {
49
- const next = args[i + 1];
50
- if (next === "never" || next === "warning" || next === "error") {
51
- options.failOn = next;
52
- }
53
- i += 1;
54
- break;
55
- }
56
- case "--out":
57
- {
58
- const next = args[i + 1];
59
- if (next) {
60
- options.reportOut = next;
61
- }
62
- }
63
- i += 1;
64
- break;
65
- case "--help":
66
- case "-h":
67
- options.help = true;
68
- break;
69
- default:
70
- break;
71
- }
72
- }
73
- return { command, options };
74
- }
75
- function applyFormatOption(command, value, options) {
76
- if (!value) {
77
- return;
78
- }
79
- if (command === "report") {
80
- if (value === "md" || value === "json") {
81
- options.reportFormat = value;
82
- }
83
- return;
84
- }
85
- if (command === "validate") {
86
- if (value === "text" || value === "github") {
87
- options.validateFormat = value;
88
- }
89
- return;
90
- }
91
- if (value === "md" || value === "json") {
92
- options.reportFormat = value;
93
- }
94
- if (value === "text" || value === "github") {
95
- options.validateFormat = value;
96
- }
97
- }
98
- //# sourceMappingURL=args.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"args.js","sourceRoot":"","sources":["../../../src/cli/lib/args.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare function getInitAssetsDir(): string;
2
- //# sourceMappingURL=assets.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/assets.ts"],"names":[],"mappings":"AAIA,wBAAgB,gBAAgB,IAAI,MAAM,CAuBzC"}
@@ -1,24 +0,0 @@
1
- import { existsSync } from "node:fs";
2
- import path from "node:path";
3
- import { fileURLToPath } from "node:url";
4
- export function getInitAssetsDir() {
5
- const base = import.meta.url;
6
- const basePath = base.startsWith("file:") ? fileURLToPath(base) : base;
7
- const baseDir = path.dirname(basePath);
8
- // src/cli/lib と dist/cli/lib からの解決を想定する。
9
- const candidates = [
10
- path.resolve(baseDir, "../../../assets/init"),
11
- path.resolve(baseDir, "../../assets/init"),
12
- ];
13
- for (const candidate of candidates) {
14
- if (existsSync(candidate)) {
15
- return candidate;
16
- }
17
- }
18
- throw new Error([
19
- "init 用テンプレートが見つかりません。Template assets not found.",
20
- "確認したパス / Checked paths:",
21
- ...candidates.map((candidate) => `- ${candidate}`),
22
- ].join("\n"));
23
- }
24
- //# sourceMappingURL=assets.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../../src/cli/lib/assets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,gBAAgB;IAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,yCAAyC;IACzC,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,sBAAsB,CAAC;QAC7C,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,mBAAmB,CAAC;KAC3C,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CACb;QACE,iDAAiD;QACjD,yBAAyB;QACzB,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC;KACnD,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;AACJ,CAAC"}
@@ -1,5 +0,0 @@
1
- import type { FailOn } from "../../core/config.js";
2
- import type { ValidationResult } from "../../core/types.js";
3
- export type { FailOn };
4
- export declare function shouldFail(result: ValidationResult, failOn: FailOn): boolean;
5
- //# sourceMappingURL=failOn.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"failOn.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/failOn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,YAAY,EAAE,MAAM,EAAE,CAAC;AAEvB,wBAAgB,UAAU,CAAC,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAQ5E"}
@@ -1,10 +0,0 @@
1
- export function shouldFail(result, failOn) {
2
- if (failOn === "never") {
3
- return false;
4
- }
5
- if (failOn === "error") {
6
- return result.counts.error > 0;
7
- }
8
- return result.counts.error + result.counts.warning > 0;
9
- }
10
- //# sourceMappingURL=failOn.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"failOn.js","sourceRoot":"","sources":["../../../src/cli/lib/failOn.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,UAAU,CAAC,MAAwB,EAAE,MAAc;IACjE,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;AACzD,CAAC"}
@@ -1,11 +0,0 @@
1
- export type CopyOptions = {
2
- force: boolean;
3
- dryRun: boolean;
4
- };
5
- export type CopyResult = {
6
- copied: string[];
7
- skipped: string[];
8
- };
9
- export declare function copyTemplateTree(sourceRoot: string, destRoot: string, options: CopyOptions): Promise<CopyResult>;
10
- export declare function copyTemplatePaths(sourceRoot: string, destRoot: string, relativePaths: string[], options: CopyOptions): Promise<CopyResult>;
11
- //# sourceMappingURL=fs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/fs.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAGrB;AAED,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EAAE,EACvB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CASrB"}
@@ -1,91 +0,0 @@
1
- import { access, copyFile, mkdir, readdir } from "node:fs/promises";
2
- import path from "node:path";
3
- export async function copyTemplateTree(sourceRoot, destRoot, options) {
4
- const files = await collectTemplateFiles(sourceRoot);
5
- return copyFiles(files, sourceRoot, destRoot, options);
6
- }
7
- export async function copyTemplatePaths(sourceRoot, destRoot, relativePaths, options) {
8
- const allFiles = [];
9
- for (const relPath of relativePaths) {
10
- const fullPath = path.join(sourceRoot, relPath);
11
- const files = await collectTemplateFiles(fullPath);
12
- allFiles.push(...files);
13
- }
14
- return copyFiles(allFiles, sourceRoot, destRoot, options);
15
- }
16
- async function copyFiles(files, sourceRoot, destRoot, options) {
17
- const copied = [];
18
- const skipped = [];
19
- const conflicts = [];
20
- if (!options.force) {
21
- for (const file of files) {
22
- const relative = path.relative(sourceRoot, file);
23
- const dest = path.join(destRoot, relative);
24
- if (!(await shouldWrite(dest, options.force))) {
25
- conflicts.push(dest);
26
- }
27
- }
28
- if (conflicts.length > 0) {
29
- throw new Error(formatConflictMessage(conflicts));
30
- }
31
- }
32
- for (const file of files) {
33
- const relative = path.relative(sourceRoot, file);
34
- const dest = path.join(destRoot, relative);
35
- if (!(await shouldWrite(dest, options.force))) {
36
- skipped.push(dest);
37
- continue;
38
- }
39
- if (!options.dryRun) {
40
- await mkdir(path.dirname(dest), { recursive: true });
41
- await copyFile(file, dest);
42
- }
43
- copied.push(dest);
44
- }
45
- return { copied, skipped };
46
- }
47
- function formatConflictMessage(conflicts) {
48
- return [
49
- "既存ファイルと衝突しました。安全のため停止します。",
50
- "",
51
- "衝突ファイル:",
52
- ...conflicts.map((conflict) => `- ${conflict}`),
53
- "",
54
- "上書きして続行する場合は --force を付けて再実行してください。",
55
- ].join("\n");
56
- }
57
- async function collectTemplateFiles(root) {
58
- const entries = [];
59
- if (!(await exists(root))) {
60
- return entries;
61
- }
62
- const items = await readdir(root, { withFileTypes: true });
63
- for (const item of items) {
64
- const fullPath = path.join(root, item.name);
65
- if (item.isDirectory()) {
66
- const nested = await collectTemplateFiles(fullPath);
67
- entries.push(...nested);
68
- continue;
69
- }
70
- if (item.isFile()) {
71
- entries.push(fullPath);
72
- }
73
- }
74
- return entries;
75
- }
76
- async function shouldWrite(target, force) {
77
- if (force) {
78
- return true;
79
- }
80
- return !(await exists(target));
81
- }
82
- async function exists(target) {
83
- try {
84
- await access(target);
85
- return true;
86
- }
87
- catch {
88
- return false;
89
- }
90
- }
91
- //# sourceMappingURL=fs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../../src/cli/lib/fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,IAAI,MAAM,WAAW,CAAC;AAY7B,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,UAAkB,EAClB,QAAgB,EAChB,OAAoB;IAEpB,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,UAAU,CAAC,CAAC;IACrD,OAAO,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,UAAkB,EAClB,QAAgB,EAChB,aAAuB,EACvB,OAAoB;IAEpB,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACnD,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC5D,CAAC;AAED,KAAK,UAAU,SAAS,CACtB,KAAe,EACf,UAAkB,EAClB,QAAgB,EAChB,OAAoB;IAEpB,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YACjD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC3C,IAAI,CAAC,CAAC,MAAM,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC9C,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE3C,IAAI,CAAC,CAAC,MAAM,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,SAAS;QACX,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,MAAM,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,qBAAqB,CAAC,SAAmB;IAChD,OAAO;QACL,2BAA2B;QAC3B,EAAE;QACF,SAAS;QACT,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC/C,EAAE;QACF,qCAAqC;KACtC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,IAAY;IAC9C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC1B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;YACxB,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,MAAc,EAAE,KAAc;IACvD,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,CAAC,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,MAAc;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -1,4 +0,0 @@
1
- export declare function info(message: string): void;
2
- export declare function warn(message: string): void;
3
- export declare function error(message: string): void;
4
- //# sourceMappingURL=logger.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/logger.ts"],"names":[],"mappings":"AAAA,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C"}
@@ -1,10 +0,0 @@
1
- export function info(message) {
2
- process.stdout.write(`${message}\n`);
3
- }
4
- export function warn(message) {
5
- process.stdout.write(`${message}\n`);
6
- }
7
- export function error(message) {
8
- process.stderr.write(`${message}\n`);
9
- }
10
- //# sourceMappingURL=logger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/cli/lib/logger.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,OAAe;IACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;AACvC,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare function run(argv: string[], cwd: string): Promise<void>;
2
- //# sourceMappingURL=main.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AAMA,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCpE"}
package/dist/cli/main.js DELETED
@@ -1,66 +0,0 @@
1
- import { runInit } from "./commands/init.js";
2
- import { runReport } from "./commands/report.js";
3
- import { runValidate } from "./commands/validate.js";
4
- import { parseArgs } from "./lib/args.js";
5
- import { error, info } from "./lib/logger.js";
6
- export async function run(argv, cwd) {
7
- const { command, options } = parseArgs(argv, cwd);
8
- if (!command || options.help) {
9
- info(usage());
10
- return;
11
- }
12
- switch (command) {
13
- case "init":
14
- await runInit({
15
- dir: options.dir,
16
- force: options.force,
17
- dryRun: options.dryRun,
18
- yes: options.yes,
19
- });
20
- return;
21
- case "validate":
22
- process.exitCode = await runValidate({
23
- root: options.root,
24
- strict: options.strict,
25
- format: options.validateFormat,
26
- ...(options.failOn !== undefined ? { failOn: options.failOn } : {}),
27
- });
28
- return;
29
- case "report":
30
- await runReport({
31
- root: options.root,
32
- format: options.reportFormat,
33
- ...(options.reportOut !== undefined
34
- ? { outPath: options.reportOut }
35
- : {}),
36
- });
37
- return;
38
- default:
39
- error(`Unknown command: ${command}`);
40
- info(usage());
41
- return;
42
- }
43
- }
44
- function usage() {
45
- return `qfai <command> [options]
46
-
47
- Commands:
48
- init テンプレを生成
49
- validate 仕様/契約/参照の検査
50
- report 検証結果と集計を出力
51
-
52
- Options:
53
- --root <path> 対象ディレクトリ
54
- --dir <path> init の出力先
55
- --force 既存ファイルを上書き
56
- --yes init: 予約フラグ(現状は非対話のため挙動差なし。将来の対話導入時に自動Yes)
57
- --dry-run 変更を行わず表示のみ
58
- --format <text|github> validate の出力形式
59
- --format <md|json> report の出力形式
60
- --strict validate: warning 以上で exit 1
61
- --fail-on <error|warning|never> validate: 失敗条件
62
- --out <path> report: 出力先
63
- -h, --help ヘルプ表示
64
- `;
65
- }
66
- //# sourceMappingURL=main.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAc,EAAE,GAAW;IACnD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAElD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACd,OAAO;IACT,CAAC;IAED,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM;YACT,MAAM,OAAO,CAAC;gBACZ,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,GAAG,EAAE,OAAO,CAAC,GAAG;aACjB,CAAC,CAAC;YACH,OAAO;QACT,KAAK,UAAU;YACb,OAAO,CAAC,QAAQ,GAAG,MAAM,WAAW,CAAC;gBACnC,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,MAAM,EAAE,OAAO,CAAC,cAAc;gBAC9B,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACpE,CAAC,CAAC;YACH,OAAO;QACT,KAAK,QAAQ;YACX,MAAM,SAAS,CAAC;gBACd,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,OAAO,CAAC,YAAY;gBAC5B,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS;oBACjC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE;oBAChC,CAAC,CAAC,EAAE,CAAC;aACR,CAAC,CAAC;YACH,OAAO;QACT;YACE,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;YACrC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACd,OAAO;IACX,CAAC;AACH,CAAC;AAED,SAAS,KAAK;IACZ,OAAO;;;;;;;;;;;;;;;;;;;CAmBR,CAAC;AACF,CAAC"}
@@ -1,47 +0,0 @@
1
- import type { Issue } from "./types.js";
2
- export type FailOn = "never" | "warning" | "error";
3
- export type OutputFormat = "text" | "github";
4
- export type TraceabilitySeverity = "warning" | "error";
5
- export type QfaiPaths = {
6
- contractsDir: string;
7
- specsDir: string;
8
- rulesDir: string;
9
- outDir: string;
10
- promptsDir: string;
11
- srcDir: string;
12
- testsDir: string;
13
- };
14
- export type QfaiValidationConfig = {
15
- failOn: FailOn;
16
- require: {
17
- specSections: string[];
18
- };
19
- traceability: {
20
- brMustHaveSc: boolean;
21
- scMustHaveTest: boolean;
22
- testFileGlobs: string[];
23
- testFileExcludeGlobs: string[];
24
- scNoTestSeverity: TraceabilitySeverity;
25
- allowOrphanContracts: boolean;
26
- unknownContractIdSeverity: TraceabilitySeverity;
27
- };
28
- };
29
- export type QfaiOutputConfig = {
30
- validateJsonPath: string;
31
- };
32
- export type QfaiConfig = {
33
- paths: QfaiPaths;
34
- validation: QfaiValidationConfig;
35
- output: QfaiOutputConfig;
36
- };
37
- export type ConfigPathKey = keyof QfaiPaths;
38
- export type ConfigLoadResult = {
39
- config: QfaiConfig;
40
- issues: Issue[];
41
- configPath: string;
42
- };
43
- export declare const defaultConfig: QfaiConfig;
44
- export declare function getConfigPath(root: string): string;
45
- export declare function loadConfig(root: string): Promise<ConfigLoadResult>;
46
- export declare function resolvePath(root: string, config: QfaiConfig, key: ConfigPathKey): string;
47
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,MAAM,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AACnD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,QAAQ,CAAC;AAC7C,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,OAAO,CAAC;AAEvD,MAAM,MAAM,SAAS,GAAG;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE;QACP,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;IACF,YAAY,EAAE;QACZ,YAAY,EAAE,OAAO,CAAC;QACtB,cAAc,EAAE,OAAO,CAAC;QACxB,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,oBAAoB,EAAE,MAAM,EAAE,CAAC;QAC/B,gBAAgB,EAAE,oBAAoB,CAAC;QACvC,oBAAoB,EAAE,OAAO,CAAC;QAC9B,yBAAyB,EAAE,oBAAoB,CAAC;KACjD,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,EAAE,oBAAoB,CAAC;IACjC,MAAM,EAAE,gBAAgB,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC;AAE5C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,UAoC3B,CAAC;AAEF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAkBxE;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,aAAa,GACjB,MAAM,CAER"}