qfai 1.0.4 → 1.0.6
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 +58 -67
- package/assets/init/.qfai/README.md +17 -76
- package/assets/init/.qfai/assistant/README.md +9 -0
- package/assets/init/.qfai/assistant/agents/README.md +36 -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 +10 -0
- package/assets/init/.qfai/assistant/instructions/agent-selection.md +28 -0
- package/assets/init/.qfai/assistant/instructions/communication.md +27 -0
- package/assets/init/.qfai/assistant/instructions/constitution.md +131 -0
- package/assets/init/.qfai/assistant/instructions/quality.md +27 -0
- package/assets/init/.qfai/assistant/instructions/thinking.md +29 -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 +230 -0
- package/assets/init/.qfai/assistant/prompts/qfai-pr.md +209 -0
- package/assets/init/.qfai/assistant/prompts/qfai-require.md +264 -0
- package/assets/init/.qfai/assistant/prompts/qfai-scenario-test.md +220 -0
- package/assets/init/.qfai/assistant/prompts/qfai-spec.md +291 -0
- package/assets/init/.qfai/assistant/prompts/qfai-unit-test.md +193 -0
- package/assets/init/.qfai/assistant/prompts/qfai-verify.md +222 -0
- package/assets/init/.qfai/assistant/prompts.local/README.md +8 -0
- package/assets/init/.qfai/assistant/steering/README.md +40 -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 +25 -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 +7 -55
- 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/assets/init/root/tests/qfai-traceability.sample.test.ts +0 -2
package/dist/index.cjs
CHANGED
|
@@ -63,8 +63,8 @@ var defaultConfig = {
|
|
|
63
63
|
paths: {
|
|
64
64
|
contractsDir: ".qfai/contracts",
|
|
65
65
|
specsDir: ".qfai/specs",
|
|
66
|
-
outDir: ".qfai/
|
|
67
|
-
promptsDir: ".qfai/prompts",
|
|
66
|
+
outDir: ".qfai/report",
|
|
67
|
+
promptsDir: ".qfai/assistant/prompts",
|
|
68
68
|
srcDir: "src",
|
|
69
69
|
testsDir: "tests"
|
|
70
70
|
},
|
|
@@ -92,7 +92,7 @@ var defaultConfig = {
|
|
|
92
92
|
}
|
|
93
93
|
},
|
|
94
94
|
output: {
|
|
95
|
-
validateJsonPath: ".qfai/
|
|
95
|
+
validateJsonPath: ".qfai/report/validate.json"
|
|
96
96
|
}
|
|
97
97
|
};
|
|
98
98
|
function getConfigPath(root) {
|
|
@@ -1290,8 +1290,8 @@ var import_promises7 = require("fs/promises");
|
|
|
1290
1290
|
var import_node_path8 = __toESM(require("path"), 1);
|
|
1291
1291
|
var import_node_url = require("url");
|
|
1292
1292
|
async function resolveToolVersion() {
|
|
1293
|
-
if ("1.0.
|
|
1294
|
-
return "1.0.
|
|
1293
|
+
if ("1.0.6".length > 0) {
|
|
1294
|
+
return "1.0.6";
|
|
1295
1295
|
}
|
|
1296
1296
|
try {
|
|
1297
1297
|
const packagePath = resolvePackageJsonPath();
|
|
@@ -2226,11 +2226,24 @@ function getInitAssetsDir() {
|
|
|
2226
2226
|
|
|
2227
2227
|
// src/core/promptsIntegrity.ts
|
|
2228
2228
|
var LEGACY_OK_EXTRA = /* @__PURE__ */ new Set(["qfai-classify-change.md"]);
|
|
2229
|
-
async function diffProjectPromptsAgainstInitAssets(root) {
|
|
2230
|
-
const
|
|
2229
|
+
async function diffProjectPromptsAgainstInitAssets(root, config) {
|
|
2230
|
+
const promptsDirConfig = config.paths.promptsDir;
|
|
2231
|
+
const promptsDir = import_node_path14.default.isAbsolute(promptsDirConfig) ? promptsDirConfig : import_node_path14.default.resolve(root, promptsDirConfig);
|
|
2231
2232
|
let templateDir;
|
|
2232
2233
|
try {
|
|
2233
|
-
|
|
2234
|
+
const rel = import_node_path14.default.isAbsolute(promptsDirConfig) ? import_node_path14.default.relative(root, promptsDirConfig) : promptsDirConfig;
|
|
2235
|
+
const normalized = rel.replace(/^[\\/]+/, "");
|
|
2236
|
+
if (normalized.length === 0 || normalized.startsWith("..")) {
|
|
2237
|
+
return {
|
|
2238
|
+
status: "skipped_missing_assets",
|
|
2239
|
+
promptsDir,
|
|
2240
|
+
templateDir: "",
|
|
2241
|
+
missing: [],
|
|
2242
|
+
extra: [],
|
|
2243
|
+
changed: []
|
|
2244
|
+
};
|
|
2245
|
+
}
|
|
2246
|
+
templateDir = import_node_path14.default.join(getInitAssetsDir(), normalized);
|
|
2234
2247
|
} catch {
|
|
2235
2248
|
return {
|
|
2236
2249
|
status: "skipped_missing_assets",
|
|
@@ -2322,8 +2335,8 @@ function intersectKeys(a, b) {
|
|
|
2322
2335
|
}
|
|
2323
2336
|
|
|
2324
2337
|
// src/core/validators/promptsIntegrity.ts
|
|
2325
|
-
async function validatePromptsIntegrity(root) {
|
|
2326
|
-
const diff = await diffProjectPromptsAgainstInitAssets(root);
|
|
2338
|
+
async function validatePromptsIntegrity(root, config) {
|
|
2339
|
+
const diff = await diffProjectPromptsAgainstInitAssets(root, config);
|
|
2327
2340
|
if (diff.status !== "modified") {
|
|
2328
2341
|
return [];
|
|
2329
2342
|
}
|
|
@@ -2340,11 +2353,11 @@ async function validatePromptsIntegrity(root) {
|
|
|
2340
2353
|
code: "QFAI-PROMPTS-001",
|
|
2341
2354
|
severity: "error",
|
|
2342
2355
|
category: "change",
|
|
2343
|
-
message: `\u6A19\u6E96\u8CC7\u7523 '.qfai/prompts/**' \u304C\u6539\u5909\u3055\u308C\u3066\u3044\u307E\u3059\uFF08${hints || `\u5DEE\u5206=${total}`}\uFF09\u3002${sampleText}`,
|
|
2356
|
+
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}`,
|
|
2344
2357
|
suggested_action: [
|
|
2345
2358
|
"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",
|
|
2346
2359
|
"\u6B21\u306E\u3044\u305A\u308C\u304B\u3092\u5B9F\u65BD\u3057\u3066\u304F\u3060\u3055\u3044:",
|
|
2347
|
-
"- \u5909\u66F4\u3057\u305F\u3044\u5834\u5408: \u540C\u4E00\u76F8\u5BFE\u30D1\u30B9\u3067 '.qfai/prompts.local/**' \u306B\u7F6E\u3044\u3066 overlay",
|
|
2360
|
+
"- \u5909\u66F4\u3057\u305F\u3044\u5834\u5408: \u540C\u4E00\u76F8\u5BFE\u30D1\u30B9\u3067 '.qfai/assistant/prompts.local/**' \u306B\u7F6E\u3044\u3066 overlay",
|
|
2348
2361
|
"- \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"
|
|
2349
2362
|
].join("\n"),
|
|
2350
2363
|
rule: "prompts.integrity"
|
|
@@ -3215,7 +3228,7 @@ async function validateProject(root, configResult) {
|
|
|
3215
3228
|
const { config, issues: configIssues } = resolved;
|
|
3216
3229
|
const issues = [
|
|
3217
3230
|
...configIssues,
|
|
3218
|
-
...await validatePromptsIntegrity(root),
|
|
3231
|
+
...await validatePromptsIntegrity(root, config),
|
|
3219
3232
|
...await validateSpecs(root, config),
|
|
3220
3233
|
...await validateDeltas(root, config),
|
|
3221
3234
|
...await validateScenarios(root, config),
|
|
@@ -3738,7 +3751,9 @@ function formatReportMarkdown(data, options = {}) {
|
|
|
3738
3751
|
);
|
|
3739
3752
|
}
|
|
3740
3753
|
lines.push("- \u5909\u66F4\u5185\u5BB9\u30FB\u53D7\u5165\u89B3\u70B9\u306F `.qfai/specs/*/delta.md` \u306B\u8A18\u9332\u3057\u307E\u3059\u3002");
|
|
3741
|
-
lines.push(
|
|
3754
|
+
lines.push(
|
|
3755
|
+
"- \u53C2\u7167\u30EB\u30FC\u30EB\u306E\u6B63\u672C: `.qfai/assistant/instructions/constitution.md`"
|
|
3756
|
+
);
|
|
3742
3757
|
return lines.join("\n");
|
|
3743
3758
|
}
|
|
3744
3759
|
function formatReportJson(data) {
|