qfai 1.0.4 → 1.0.5
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 +53 -65
- package/assets/init/.qfai/README.md +17 -77
- package/assets/init/.qfai/assistant/README.md +9 -0
- package/assets/init/.qfai/assistant/agents/README.md +34 -0
- package/assets/init/.qfai/assistant/agents/architect.md +73 -0
- package/assets/init/.qfai/assistant/agents/backend-engineer.md +73 -0
- package/assets/init/.qfai/assistant/agents/code-reviewer.md +73 -0
- package/assets/init/.qfai/assistant/agents/contract-designer.md +73 -0
- package/assets/init/.qfai/assistant/agents/devops-ci-engineer.md +73 -0
- package/assets/init/.qfai/assistant/agents/facilitator.md +74 -0
- package/assets/init/.qfai/assistant/agents/frontend-engineer.md +73 -0
- package/assets/init/.qfai/assistant/agents/interviewer.md +72 -0
- package/assets/init/.qfai/assistant/agents/planner.md +73 -0
- package/assets/init/.qfai/assistant/agents/qa-engineer.md +73 -0
- package/assets/init/.qfai/assistant/agents/requirements-analyst.md +73 -0
- package/assets/init/.qfai/assistant/agents/test-engineer.md +73 -0
- package/assets/init/.qfai/assistant/instructions/README.md +6 -0
- package/assets/init/.qfai/assistant/instructions/constitution.md +131 -0
- package/assets/init/.qfai/assistant/instructions/workflow.md +75 -0
- package/assets/init/.qfai/assistant/prompts/README.md +19 -0
- package/assets/init/.qfai/assistant/prompts/qfai-discuss.md +173 -0
- package/assets/init/.qfai/assistant/prompts/qfai-implement.md +239 -0
- package/assets/init/.qfai/assistant/prompts/qfai-pr.md +218 -0
- package/assets/init/.qfai/assistant/prompts/qfai-require.md +273 -0
- package/assets/init/.qfai/assistant/prompts/qfai-scenario-test.md +229 -0
- package/assets/init/.qfai/assistant/prompts/qfai-spec.md +287 -0
- package/assets/init/.qfai/assistant/prompts/qfai-unit-test.md +202 -0
- package/assets/init/.qfai/assistant/prompts/qfai-verify.md +231 -0
- package/assets/init/.qfai/assistant/prompts.local/README.md +6 -0
- package/assets/init/.qfai/assistant/steering/README.md +33 -0
- package/assets/init/.qfai/assistant/steering/product.md +32 -0
- package/assets/init/.qfai/assistant/steering/structure.md +34 -0
- package/assets/init/.qfai/assistant/steering/tech.md +37 -0
- package/assets/init/.qfai/contracts/README.md +7 -87
- package/assets/init/.qfai/contracts/api/README.md +8 -0
- package/assets/init/.qfai/contracts/db/README.md +8 -0
- package/assets/init/.qfai/contracts/ui/README.md +8 -0
- package/assets/init/.qfai/report/README.md +13 -0
- package/assets/init/.qfai/require/README.md +4 -26
- package/assets/init/.qfai/require/require.md +74 -0
- package/assets/init/.qfai/specs/README.md +6 -56
- package/assets/init/root/.github/workflows/qfai.yml +1 -1
- package/assets/init/root/qfai.config.yaml +3 -3
- package/dist/cli/index.cjs +306 -423
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.mjs +288 -405
- package/dist/cli/index.mjs.map +1 -1
- package/dist/index.cjs +29 -14
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +29 -14
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/assets/init/.qfai/contracts/api/api-0001-sample.yaml +0 -15
- package/assets/init/.qfai/contracts/db/db-0001-sample.sql +0 -7
- package/assets/init/.qfai/contracts/ui/assets/thema-001-facebook-like/assets.yaml +0 -6
- package/assets/init/.qfai/contracts/ui/assets/thema-001-facebook-like/palette.png +0 -0
- package/assets/init/.qfai/contracts/ui/assets/ui-0001-sample/assets.yaml +0 -6
- package/assets/init/.qfai/contracts/ui/assets/ui-0001-sample/snapshots/login__desktop__light__default.png +0 -0
- package/assets/init/.qfai/contracts/ui/thema-001-facebook-like.yml +0 -13
- package/assets/init/.qfai/contracts/ui/ui-0001-sample.yaml +0 -17
- package/assets/init/.qfai/out/README.md +0 -17
- package/assets/init/.qfai/promptpack/commands/implement.md +0 -8
- package/assets/init/.qfai/promptpack/commands/plan.md +0 -11
- package/assets/init/.qfai/promptpack/commands/release.md +0 -6
- package/assets/init/.qfai/promptpack/commands/review.md +0 -6
- package/assets/init/.qfai/promptpack/constitution.md +0 -15
- package/assets/init/.qfai/promptpack/roles/qa.md +0 -4
- package/assets/init/.qfai/promptpack/roles/spec.md +0 -4
- package/assets/init/.qfai/promptpack/roles/test.md +0 -4
- package/assets/init/.qfai/promptpack/steering/naming.md +0 -7
- package/assets/init/.qfai/promptpack/steering/traceability.md +0 -25
- package/assets/init/.qfai/prompts/README.md +0 -68
- package/assets/init/.qfai/prompts/analyze/README.md +0 -21
- package/assets/init/.qfai/prompts/analyze/scenario_test_consistency.md +0 -8
- package/assets/init/.qfai/prompts/analyze/scenario_to_test.md +0 -56
- package/assets/init/.qfai/prompts/analyze/spec_contract_consistency.md +0 -8
- package/assets/init/.qfai/prompts/analyze/spec_scenario_consistency.md +0 -8
- package/assets/init/.qfai/prompts/analyze/spec_to_contract.md +0 -54
- package/assets/init/.qfai/prompts/analyze/spec_to_scenario.md +0 -56
- package/assets/init/.qfai/prompts/makeBusinessFlow.md +0 -34
- package/assets/init/.qfai/prompts/makeOverview.md +0 -27
- package/assets/init/.qfai/prompts/qfai-generate-test-globs.md +0 -29
- package/assets/init/.qfai/prompts/qfai-maintain-contracts.md +0 -35
- package/assets/init/.qfai/prompts/qfai-maintain-traceability.md +0 -36
- package/assets/init/.qfai/prompts/require-to-spec.md +0 -40
- package/assets/init/.qfai/prompts.local/README.md +0 -31
- package/assets/init/.qfai/specs/spec-0001/delta.md +0 -25
- package/assets/init/.qfai/specs/spec-0001/scenario.feature +0 -11
- package/assets/init/.qfai/specs/spec-0001/spec.md +0 -40
package/dist/index.mjs
CHANGED
|
@@ -6,8 +6,8 @@ var defaultConfig = {
|
|
|
6
6
|
paths: {
|
|
7
7
|
contractsDir: ".qfai/contracts",
|
|
8
8
|
specsDir: ".qfai/specs",
|
|
9
|
-
outDir: ".qfai/
|
|
10
|
-
promptsDir: ".qfai/prompts",
|
|
9
|
+
outDir: ".qfai/report",
|
|
10
|
+
promptsDir: ".qfai/assistant/prompts",
|
|
11
11
|
srcDir: "src",
|
|
12
12
|
testsDir: "tests"
|
|
13
13
|
},
|
|
@@ -35,7 +35,7 @@ var defaultConfig = {
|
|
|
35
35
|
}
|
|
36
36
|
},
|
|
37
37
|
output: {
|
|
38
|
-
validateJsonPath: ".qfai/
|
|
38
|
+
validateJsonPath: ".qfai/report/validate.json"
|
|
39
39
|
}
|
|
40
40
|
};
|
|
41
41
|
function getConfigPath(root) {
|
|
@@ -1237,8 +1237,8 @@ import { readFile as readFile4 } from "fs/promises";
|
|
|
1237
1237
|
import path8 from "path";
|
|
1238
1238
|
import { fileURLToPath } from "url";
|
|
1239
1239
|
async function resolveToolVersion() {
|
|
1240
|
-
if ("1.0.
|
|
1241
|
-
return "1.0.
|
|
1240
|
+
if ("1.0.5".length > 0) {
|
|
1241
|
+
return "1.0.5";
|
|
1242
1242
|
}
|
|
1243
1243
|
try {
|
|
1244
1244
|
const packagePath = resolvePackageJsonPath();
|
|
@@ -2173,11 +2173,24 @@ function getInitAssetsDir() {
|
|
|
2173
2173
|
|
|
2174
2174
|
// src/core/promptsIntegrity.ts
|
|
2175
2175
|
var LEGACY_OK_EXTRA = /* @__PURE__ */ new Set(["qfai-classify-change.md"]);
|
|
2176
|
-
async function diffProjectPromptsAgainstInitAssets(root) {
|
|
2177
|
-
const
|
|
2176
|
+
async function diffProjectPromptsAgainstInitAssets(root, config) {
|
|
2177
|
+
const promptsDirConfig = config.paths.promptsDir;
|
|
2178
|
+
const promptsDir = path14.isAbsolute(promptsDirConfig) ? promptsDirConfig : path14.resolve(root, promptsDirConfig);
|
|
2178
2179
|
let templateDir;
|
|
2179
2180
|
try {
|
|
2180
|
-
|
|
2181
|
+
const rel = path14.isAbsolute(promptsDirConfig) ? path14.relative(root, promptsDirConfig) : promptsDirConfig;
|
|
2182
|
+
const normalized = rel.replace(/^[\\/]+/, "");
|
|
2183
|
+
if (normalized.length === 0 || normalized.startsWith("..")) {
|
|
2184
|
+
return {
|
|
2185
|
+
status: "skipped_missing_assets",
|
|
2186
|
+
promptsDir,
|
|
2187
|
+
templateDir: "",
|
|
2188
|
+
missing: [],
|
|
2189
|
+
extra: [],
|
|
2190
|
+
changed: []
|
|
2191
|
+
};
|
|
2192
|
+
}
|
|
2193
|
+
templateDir = path14.join(getInitAssetsDir(), normalized);
|
|
2181
2194
|
} catch {
|
|
2182
2195
|
return {
|
|
2183
2196
|
status: "skipped_missing_assets",
|
|
@@ -2269,8 +2282,8 @@ function intersectKeys(a, b) {
|
|
|
2269
2282
|
}
|
|
2270
2283
|
|
|
2271
2284
|
// src/core/validators/promptsIntegrity.ts
|
|
2272
|
-
async function validatePromptsIntegrity(root) {
|
|
2273
|
-
const diff = await diffProjectPromptsAgainstInitAssets(root);
|
|
2285
|
+
async function validatePromptsIntegrity(root, config) {
|
|
2286
|
+
const diff = await diffProjectPromptsAgainstInitAssets(root, config);
|
|
2274
2287
|
if (diff.status !== "modified") {
|
|
2275
2288
|
return [];
|
|
2276
2289
|
}
|
|
@@ -2287,11 +2300,11 @@ async function validatePromptsIntegrity(root) {
|
|
|
2287
2300
|
code: "QFAI-PROMPTS-001",
|
|
2288
2301
|
severity: "error",
|
|
2289
2302
|
category: "change",
|
|
2290
|
-
message: `\u6A19\u6E96\u8CC7\u7523 '.qfai/prompts/**' \u304C\u6539\u5909\u3055\u308C\u3066\u3044\u307E\u3059\uFF08${hints || `\u5DEE\u5206=${total}`}\uFF09\u3002${sampleText}`,
|
|
2303
|
+
message: `\u6A19\u6E96\u8CC7\u7523 '.qfai/assistant/prompts/**' \u304C\u6539\u5909\u3055\u308C\u3066\u3044\u307E\u3059\uFF08${hints || `\u5DEE\u5206=${total}`}\uFF09\u3002${sampleText}`,
|
|
2291
2304
|
suggested_action: [
|
|
2292
2305
|
"prompts \u306E\u76F4\u7DE8\u96C6\u306F\u975E\u63A8\u5968\u3067\u3059\uFF08\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8/\u518D init \u3067\u4E0A\u66F8\u304D\u3055\u308C\u5F97\u307E\u3059\uFF09\u3002",
|
|
2293
2306
|
"\u6B21\u306E\u3044\u305A\u308C\u304B\u3092\u5B9F\u65BD\u3057\u3066\u304F\u3060\u3055\u3044:",
|
|
2294
|
-
"- \u5909\u66F4\u3057\u305F\u3044\u5834\u5408: \u540C\u4E00\u76F8\u5BFE\u30D1\u30B9\u3067 '.qfai/prompts.local/**' \u306B\u7F6E\u3044\u3066 overlay",
|
|
2307
|
+
"- \u5909\u66F4\u3057\u305F\u3044\u5834\u5408: \u540C\u4E00\u76F8\u5BFE\u30D1\u30B9\u3067 '.qfai/assistant/prompts.local/**' \u306B\u7F6E\u3044\u3066 overlay",
|
|
2295
2308
|
"- \u6A19\u6E96\u72B6\u614B\u3078\u623B\u3059\u5834\u5408: 'qfai init --force' \u3092\u5B9F\u884C\uFF08prompts \u306E\u307F\u4E0A\u66F8\u304D\u3001prompts.local \u306F\u4FDD\u8B77\uFF09"
|
|
2296
2309
|
].join("\n"),
|
|
2297
2310
|
rule: "prompts.integrity"
|
|
@@ -3162,7 +3175,7 @@ async function validateProject(root, configResult) {
|
|
|
3162
3175
|
const { config, issues: configIssues } = resolved;
|
|
3163
3176
|
const issues = [
|
|
3164
3177
|
...configIssues,
|
|
3165
|
-
...await validatePromptsIntegrity(root),
|
|
3178
|
+
...await validatePromptsIntegrity(root, config),
|
|
3166
3179
|
...await validateSpecs(root, config),
|
|
3167
3180
|
...await validateDeltas(root, config),
|
|
3168
3181
|
...await validateScenarios(root, config),
|
|
@@ -3685,7 +3698,9 @@ function formatReportMarkdown(data, options = {}) {
|
|
|
3685
3698
|
);
|
|
3686
3699
|
}
|
|
3687
3700
|
lines.push("- \u5909\u66F4\u5185\u5BB9\u30FB\u53D7\u5165\u89B3\u70B9\u306F `.qfai/specs/*/delta.md` \u306B\u8A18\u9332\u3057\u307E\u3059\u3002");
|
|
3688
|
-
lines.push(
|
|
3701
|
+
lines.push(
|
|
3702
|
+
"- \u53C2\u7167\u30EB\u30FC\u30EB\u306E\u6B63\u672C: `.qfai/assistant/instructions/constitution.md`"
|
|
3703
|
+
);
|
|
3689
3704
|
return lines.join("\n");
|
|
3690
3705
|
}
|
|
3691
3706
|
function formatReportJson(data) {
|