@miniidealab/openlogos 0.9.28 → 0.9.30
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/claude-plugin-template/.claude-plugin/plugin.json +1 -1
- package/dist/commands/adopt.d.ts +5 -0
- package/dist/commands/adopt.d.ts.map +1 -0
- package/dist/commands/adopt.js +124 -0
- package/dist/commands/adopt.js.map +1 -0
- package/dist/commands/init.d.ts +11 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +56 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/launch.d.ts.map +1 -1
- package/dist/commands/launch.js +28 -0
- package/dist/commands/launch.js.map +1 -1
- package/dist/commands/next.d.ts +1 -0
- package/dist/commands/next.d.ts.map +1 -1
- package/dist/commands/next.js +51 -9
- package/dist/commands/next.js.map +1 -1
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +36 -3
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +6 -1
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/verify.d.ts +27 -1
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +208 -53
- package/dist/commands/verify.js.map +1 -1
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +20 -0
- package/dist/i18n.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/project-yaml.d.ts +1 -0
- package/dist/lib/project-yaml.d.ts.map +1 -1
- package/dist/lib/project-yaml.js +3 -0
- package/dist/lib/project-yaml.js.map +1 -1
- package/dist/lib/verify-config.d.ts +32 -0
- package/dist/lib/verify-config.d.ts.map +1 -0
- package/dist/lib/verify-config.js +104 -0
- package/dist/lib/verify-config.js.map +1 -0
- package/package.json +1 -1
- package/skills/code-implementor/SKILL.md +3 -2
- package/skills/project-init/SKILL.md +22 -0
- package/spec/cli-json-output.md +47 -0
- package/spec/logos.config.schema.json +36 -2
- package/spec/test-results.md +38 -4
- package/spec/workflow.md +11 -3
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { init } from './commands/init.js';
|
|
3
|
+
import { adopt } from './commands/adopt.js';
|
|
3
4
|
import { sync } from './commands/sync.js';
|
|
4
5
|
import { status } from './commands/status.js';
|
|
5
6
|
import { next } from './commands/next.js';
|
|
@@ -25,6 +26,10 @@ Commands:
|
|
|
25
26
|
--locale <en|zh> Set language (skip prompt)
|
|
26
27
|
--ai-tool <claude-code|opencode|codex|cursor|other|all> Set AI tool (skip prompt)
|
|
27
28
|
--aitool <claude-code|opencode|codex|cursor|other|all> Alias for --ai-tool
|
|
29
|
+
adopt [name] Adopt an existing project into OpenLogos
|
|
30
|
+
--locale <en|zh> Set language (skip prompt)
|
|
31
|
+
--ai-tool <claude-code|opencode|codex|cursor|other|all> Set AI tool (skip prompt)
|
|
32
|
+
--aitool <claude-code|opencode|codex|cursor|other|all> Alias for --ai-tool
|
|
28
33
|
sync Regenerate AI instruction files (AGENTS.md, CLAUDE.md)
|
|
29
34
|
status Show current project phase and suggest next steps
|
|
30
35
|
--module <id> Filter to a specific module
|
|
@@ -50,6 +55,7 @@ Options:
|
|
|
50
55
|
|
|
51
56
|
Examples:
|
|
52
57
|
openlogos init my-saas-project
|
|
58
|
+
openlogos adopt
|
|
53
59
|
openlogos sync
|
|
54
60
|
openlogos status
|
|
55
61
|
openlogos status --format json
|
|
@@ -94,6 +100,24 @@ async function main() {
|
|
|
94
100
|
await init(initName, Object.keys(initOpts).length > 0 ? initOpts : undefined);
|
|
95
101
|
break;
|
|
96
102
|
}
|
|
103
|
+
case 'adopt': {
|
|
104
|
+
const adoptArgs = args.slice(1);
|
|
105
|
+
let adoptName;
|
|
106
|
+
const adoptOpts = {};
|
|
107
|
+
for (let i = 0; i < adoptArgs.length; i++) {
|
|
108
|
+
if (adoptArgs[i] === '--locale' && adoptArgs[i + 1]) {
|
|
109
|
+
adoptOpts.locale = adoptArgs[++i];
|
|
110
|
+
}
|
|
111
|
+
else if ((adoptArgs[i] === '--ai-tool' || adoptArgs[i] === '--aitool') && adoptArgs[i + 1]) {
|
|
112
|
+
adoptOpts.aiTool = adoptArgs[++i];
|
|
113
|
+
}
|
|
114
|
+
else if (!adoptArgs[i].startsWith('--')) {
|
|
115
|
+
adoptName = adoptArgs[i];
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
await adopt(adoptName, Object.keys(adoptOpts).length > 0 ? adoptOpts : undefined);
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
97
121
|
case 'sync':
|
|
98
122
|
sync();
|
|
99
123
|
break;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-yaml.d.ts","sourceRoot":"","sources":["../../src/lib/project-yaml.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,OAAO,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,eAAe,CAAC;IAC9B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;IACxC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC9B,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,eAAe,GAAG,IAAI,CAAC;IAC7B,gBAAgB,EAAE,eAAe,GAAG,IAAI,CAAC;CAC1C;
|
|
1
|
+
{"version":3,"file":"project-yaml.d.ts","sourceRoot":"","sources":["../../src/lib/project-yaml.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,OAAO,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,eAAe,CAAC;IAC9B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;IACxC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC9B,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,eAAe,GAAG,IAAI,CAAC;IAC7B,gBAAgB,EAAE,eAAe,GAAG,IAAI,CAAC;CAC1C;AAmOD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,CAiCnE"}
|
package/dist/lib/project-yaml.js
CHANGED
|
@@ -55,6 +55,9 @@ function normalizeModule(raw) {
|
|
|
55
55
|
if (typeof record.lifecycle === 'string') {
|
|
56
56
|
module.lifecycle = record.lifecycle;
|
|
57
57
|
}
|
|
58
|
+
if (typeof record.bootstrap === 'string') {
|
|
59
|
+
module.bootstrap = record.bootstrap;
|
|
60
|
+
}
|
|
58
61
|
const skipPhases = asStringArray(record.skip_phases);
|
|
59
62
|
if (skipPhases) {
|
|
60
63
|
module.skip_phases = skipPhases;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-yaml.js","sourceRoot":"","sources":["../../src/lib/project-yaml.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"project-yaml.js","sourceRoot":"","sources":["../../src/lib/project-yaml.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export declare const DEFAULT_VERIFY_RESULT_PATH = "logos/resources/verify/test-results.jsonl";
|
|
2
|
+
export declare const DEFAULT_VERIFY_MERGE_STRATEGY = "last-write-wins";
|
|
3
|
+
export interface VerifyConfig {
|
|
4
|
+
result_path?: string;
|
|
5
|
+
pre_run_command?: string;
|
|
6
|
+
test_command?: string;
|
|
7
|
+
regression_command?: string;
|
|
8
|
+
incremental_command?: string;
|
|
9
|
+
regression_result_path?: string;
|
|
10
|
+
incremental_result_path?: string;
|
|
11
|
+
merge_results?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface NormalizedVerifyConfig {
|
|
14
|
+
resultPath: string;
|
|
15
|
+
preRunCommand?: string;
|
|
16
|
+
regressionCommand?: string;
|
|
17
|
+
incrementalCommand?: string;
|
|
18
|
+
regressionResultPath?: string;
|
|
19
|
+
incrementalResultPath?: string;
|
|
20
|
+
mergeStrategy: 'last-write-wins';
|
|
21
|
+
}
|
|
22
|
+
export interface VerifyPreRunBackfillResult {
|
|
23
|
+
status: 'exists' | 'added' | 'todo';
|
|
24
|
+
command?: string;
|
|
25
|
+
mutated: boolean;
|
|
26
|
+
}
|
|
27
|
+
export declare function inferVerifyPreRunCommand(root: string): string | null;
|
|
28
|
+
export declare function normalizeVerifyConfig(rawVerify: unknown): NormalizedVerifyConfig;
|
|
29
|
+
export declare function readVerifyConfig(root: string): NormalizedVerifyConfig;
|
|
30
|
+
export declare function hasVerifyPreRunConfig(rawVerify: unknown): boolean;
|
|
31
|
+
export declare function backfillVerifyPreRunConfig(root: string, config: Record<string, unknown>): VerifyPreRunBackfillResult;
|
|
32
|
+
//# sourceMappingURL=verify-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-config.d.ts","sourceRoot":"","sources":["../../src/lib/verify-config.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,0BAA0B,8CAA8C,CAAC;AACtF,eAAO,MAAM,6BAA6B,oBAAoB,CAAC;AAE/D,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,aAAa,EAAE,iBAAiB,CAAC;CAClC;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAsCD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwBpE;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,OAAO,GAAG,sBAAsB,CAgBhF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,CAGrE;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAGjE;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,0BAA0B,CAkBpH"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
export const DEFAULT_VERIFY_RESULT_PATH = 'logos/resources/verify/test-results.jsonl';
|
|
4
|
+
export const DEFAULT_VERIFY_MERGE_STRATEGY = 'last-write-wins';
|
|
5
|
+
function readJsonFile(path) {
|
|
6
|
+
try {
|
|
7
|
+
return JSON.parse(readFileSync(path, 'utf-8'));
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function asRecord(value) {
|
|
14
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
15
|
+
return null;
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
18
|
+
function hasFile(root, relativePath) {
|
|
19
|
+
return existsSync(join(root, relativePath));
|
|
20
|
+
}
|
|
21
|
+
function hasAnyFile(root, relativePaths) {
|
|
22
|
+
return relativePaths.some(path => hasFile(root, path));
|
|
23
|
+
}
|
|
24
|
+
function hasDependency(pkg, name) {
|
|
25
|
+
const sections = ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies'];
|
|
26
|
+
return sections.some(section => {
|
|
27
|
+
const deps = asRecord(pkg[section]);
|
|
28
|
+
return Boolean(deps && typeof deps[name] === 'string');
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
function isUsefulTestScript(script) {
|
|
32
|
+
const normalized = script.toLowerCase();
|
|
33
|
+
return !normalized.includes('no test specified')
|
|
34
|
+
&& !normalized.includes('exit 1')
|
|
35
|
+
&& normalized.trim().length > 0;
|
|
36
|
+
}
|
|
37
|
+
export function inferVerifyPreRunCommand(root) {
|
|
38
|
+
const pkg = asRecord(readJsonFile(join(root, 'package.json')));
|
|
39
|
+
if (pkg) {
|
|
40
|
+
const scripts = asRecord(pkg.scripts);
|
|
41
|
+
const testScript = typeof scripts?.test === 'string' ? scripts.test : null;
|
|
42
|
+
if (testScript && isUsefulTestScript(testScript))
|
|
43
|
+
return 'npm test';
|
|
44
|
+
if (hasDependency(pkg, 'vitest') || hasAnyFile(root, ['vitest.config.ts', 'vitest.config.js', 'vitest.config.mjs', 'vitest.config.cjs'])) {
|
|
45
|
+
return 'npx vitest run';
|
|
46
|
+
}
|
|
47
|
+
if (hasDependency(pkg, 'jest') || hasAnyFile(root, ['jest.config.ts', 'jest.config.js', 'jest.config.mjs', 'jest.config.cjs'])) {
|
|
48
|
+
return 'npx jest';
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const pyprojectPath = join(root, 'pyproject.toml');
|
|
52
|
+
const pyproject = existsSync(pyprojectPath) ? readFileSync(pyprojectPath, 'utf-8').toLowerCase() : '';
|
|
53
|
+
if (hasAnyFile(root, ['pytest.ini', 'tox.ini']) || pyproject.includes('pytest')) {
|
|
54
|
+
return 'pytest';
|
|
55
|
+
}
|
|
56
|
+
if (hasFile(root, 'go.mod'))
|
|
57
|
+
return 'go test ./...';
|
|
58
|
+
if (hasFile(root, 'Cargo.toml'))
|
|
59
|
+
return 'cargo test';
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
export function normalizeVerifyConfig(rawVerify) {
|
|
63
|
+
const verify = asRecord(rawVerify) ?? {};
|
|
64
|
+
const mergeStrategy = verify.merge_results === DEFAULT_VERIFY_MERGE_STRATEGY
|
|
65
|
+
? DEFAULT_VERIFY_MERGE_STRATEGY
|
|
66
|
+
: DEFAULT_VERIFY_MERGE_STRATEGY;
|
|
67
|
+
return {
|
|
68
|
+
resultPath: typeof verify.result_path === 'string' ? verify.result_path : DEFAULT_VERIFY_RESULT_PATH,
|
|
69
|
+
preRunCommand: typeof verify.pre_run_command === 'string'
|
|
70
|
+
? verify.pre_run_command
|
|
71
|
+
: typeof verify.test_command === 'string' ? verify.test_command : undefined,
|
|
72
|
+
regressionCommand: typeof verify.regression_command === 'string' ? verify.regression_command : undefined,
|
|
73
|
+
incrementalCommand: typeof verify.incremental_command === 'string' ? verify.incremental_command : undefined,
|
|
74
|
+
regressionResultPath: typeof verify.regression_result_path === 'string' ? verify.regression_result_path : undefined,
|
|
75
|
+
incrementalResultPath: typeof verify.incremental_result_path === 'string' ? verify.incremental_result_path : undefined,
|
|
76
|
+
mergeStrategy,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
export function readVerifyConfig(root) {
|
|
80
|
+
const config = asRecord(readJsonFile(join(root, 'logos', 'logos.config.json')));
|
|
81
|
+
return normalizeVerifyConfig(config?.verify);
|
|
82
|
+
}
|
|
83
|
+
export function hasVerifyPreRunConfig(rawVerify) {
|
|
84
|
+
const verify = normalizeVerifyConfig(rawVerify);
|
|
85
|
+
return Boolean(verify.preRunCommand || verify.regressionCommand || verify.incrementalCommand);
|
|
86
|
+
}
|
|
87
|
+
export function backfillVerifyPreRunConfig(root, config) {
|
|
88
|
+
const verify = asRecord(config.verify) ?? {};
|
|
89
|
+
let mutated = false;
|
|
90
|
+
if (!verify.result_path) {
|
|
91
|
+
verify.result_path = DEFAULT_VERIFY_RESULT_PATH;
|
|
92
|
+
mutated = true;
|
|
93
|
+
}
|
|
94
|
+
config.verify = verify;
|
|
95
|
+
if (hasVerifyPreRunConfig(verify)) {
|
|
96
|
+
return { status: 'exists', mutated };
|
|
97
|
+
}
|
|
98
|
+
const command = inferVerifyPreRunCommand(root);
|
|
99
|
+
if (!command)
|
|
100
|
+
return { status: 'todo', mutated };
|
|
101
|
+
verify.pre_run_command = command;
|
|
102
|
+
return { status: 'added', command, mutated: true };
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=verify-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-config.js","sourceRoot":"","sources":["../../src/lib/verify-config.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -62,6 +62,7 @@ test-writer 不写代码;code-implementor 不设计用例;code-reviewer 不
|
|
|
62
62
|
- 对应的 UT/ST 用例总数
|
|
63
63
|
- 技术栈确认(语言、框架、测试框架)
|
|
64
64
|
- 源码输出目录确认(读取 `sourceRoots.src` 和 `sourceRoots.test`,若不存在则默认 `src/` 和 `test/`)
|
|
65
|
+
- verify 预跑配置确认:`verify.pre_run_command`、`verify.regression_command` 或 `verify.incremental_command` 至少存在一个;若缺失则需要在实现前补齐或明确诊断
|
|
65
66
|
|
|
66
67
|
### Step 2: 规划分批策略
|
|
67
68
|
|
|
@@ -202,7 +203,7 @@ Playwright E2E 测试使用 `test.afterEach` + fixture 捕获结果,参见 `lo
|
|
|
202
203
|
2. **提示检查结果**:确认 `logos/resources/verify/test-results.jsonl` 已生成
|
|
203
204
|
3. **所有批次完成后**:引导用户运行 `openlogos verify` 执行 Gate 3.5 验收
|
|
204
205
|
4. **更新 sourceRoots**:如果实际使用的源码目录与 `logos.config.json` 中的 `sourceRoots` 不同,更新配置文件以反映实际路径。例如,如果业务代码放在 `app/` 而非默认的 `src/`,将 `sourceRoots.src` 更新为 `["app"]`
|
|
205
|
-
5. **自动写入 `verify.pre_run_command`**:检查 `logos.config.json` 是否已有 `verify.pre_run_command` 字段。若没有,根据 `logos-project.yaml` 的 `tech_stack` 推断默认命令并写入,确保后续 `openlogos verify` 能自动跑全量测试:
|
|
206
|
+
5. **自动写入 `verify.pre_run_command`**:检查 `logos.config.json` 是否已有 `verify.pre_run_command`、`verify.regression_command` 或 `verify.incremental_command` 字段。若没有,根据 `logos-project.yaml` 的 `tech_stack` 推断默认命令并写入,确保后续 `openlogos verify` 能自动跑全量测试:
|
|
206
207
|
|
|
207
208
|
| tech_stack 关键词 | 写入命令 |
|
|
208
209
|
|---|---|
|
|
@@ -213,7 +214,7 @@ Playwright E2E 测试使用 `test.afterEach` + fixture 捕获结果,参见 `lo
|
|
|
213
214
|
| cargo test | `cargo test` |
|
|
214
215
|
| 无法推断 | 提示用户手动在 `logos.config.json` 的 `verify.pre_run_command` 字段填写测试命令 |
|
|
215
216
|
|
|
216
|
-
**为什么必须配置**:`openlogos-reporter` 每次运行测试时会清空 `test-results.jsonl`,若只跑部分场景的测试,JSONL 将缺少其他场景的结果,导致 `openlogos verify`
|
|
217
|
+
**为什么必须配置**:`openlogos-reporter` 每次运行测试时会清空 `test-results.jsonl`,若只跑部分场景的测试,JSONL 将缺少其他场景的结果,导致 `openlogos verify` 覆盖率不足而失败。配置预跑命令后,`openlogos verify` 会在读取 JSONL 前自动执行全量测试,确保覆盖率完整。若项目明确使用两阶段模型,也可写入 `verify.regression_command` 与 `verify.incremental_command`,并保证阶段结果不会互相覆盖。
|
|
217
218
|
|
|
218
219
|
6. **写入实现清单**:在 `logos/resources/implementation/` 目录下创建实现清单文件(如 `implementation-manifest.md`),记录本次实现覆盖的场景、端点、用例 ID 等信息,标记 Phase 3-4 完成
|
|
219
220
|
|
|
@@ -186,6 +186,28 @@ Phase 检测逻辑必须包含:
|
|
|
186
186
|
- 必须创建 `logos/resources/test/smoke/`
|
|
187
187
|
- 必须创建 `logos/resources/verify/`
|
|
188
188
|
|
|
189
|
+
## verify 预跑配置初始化规则
|
|
190
|
+
|
|
191
|
+
项目初始化或已有项目接入时,必须为后续 `openlogos verify` 准备完整测试结果生成路径。
|
|
192
|
+
|
|
193
|
+
执行规则:
|
|
194
|
+
|
|
195
|
+
1. 创建 `logos.config.json` 时始终写入 `verify.result_path`。
|
|
196
|
+
2. 检测常见测试栈:
|
|
197
|
+
- `package.json` 且存在 `scripts.test` → 写入 `verify.pre_run_command: "npm test"`
|
|
198
|
+
- Vitest → 可写入 `npx vitest run`
|
|
199
|
+
- Jest → 可写入 `npx jest`
|
|
200
|
+
- pytest → 可写入 `pytest`
|
|
201
|
+
- Go → 可写入 `go test ./...`
|
|
202
|
+
- Cargo → 可写入 `cargo test`
|
|
203
|
+
3. 已有用户配置时不得覆盖。
|
|
204
|
+
4. 无法推断时,必须在输出中生成 TODO,提示用户补充 `verify.pre_run_command` 或 `verify.regression_command`。
|
|
205
|
+
5. 如果项目明确使用“回归 + 增量”模型,可写入 `verify.regression_command` 与 `verify.incremental_command`,并说明阶段结果合并策略。
|
|
206
|
+
|
|
207
|
+
原因说明:
|
|
208
|
+
|
|
209
|
+
`openlogos verify` 以 `logos/resources/test/*.md` 的全量用例作为覆盖分母。如果 reporter 只写入局部测试结果,verify 会正确报告覆盖不足,但用户容易误以为业务测试失败。初始化阶段尽早补齐预跑配置,可以让验收默认生成完整 JSONL。
|
|
210
|
+
|
|
189
211
|
## 实践经验
|
|
190
212
|
|
|
191
213
|
- **不要过度配置**:初始化时保持最少配置,让用户在使用过程中逐步完善
|
package/spec/cli-json-output.md
CHANGED
|
@@ -334,6 +334,33 @@ openlogos verify --format json # JSON 格式
|
|
|
334
334
|
}
|
|
335
335
|
]
|
|
336
336
|
},
|
|
337
|
+
"pre_run": {
|
|
338
|
+
"mode": "two_phase", // "none" | "pre_run_command" | "two_phase"
|
|
339
|
+
"commands": [
|
|
340
|
+
{
|
|
341
|
+
"stage": "regression", // "pre_run" | "regression" | "incremental"
|
|
342
|
+
"command": "npm test",
|
|
343
|
+
"status": "pass", // "pass" | "fail" | "skipped"
|
|
344
|
+
"exit_code": 0,
|
|
345
|
+
"duration_ms": 1200
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
"stage": "incremental",
|
|
349
|
+
"command": "npm run test:changed",
|
|
350
|
+
"status": "pass",
|
|
351
|
+
"exit_code": 0,
|
|
352
|
+
"duration_ms": 600
|
|
353
|
+
}
|
|
354
|
+
],
|
|
355
|
+
"result_paths": {
|
|
356
|
+
"final": "logos/resources/verify/test-results.jsonl",
|
|
357
|
+
"regression": "logos/resources/verify/test-results.regression.jsonl",
|
|
358
|
+
"incremental": "logos/resources/verify/test-results.incremental.jsonl"
|
|
359
|
+
},
|
|
360
|
+
"merge_strategy": "last-write-wins",
|
|
361
|
+
"diagnostics": [],
|
|
362
|
+
"suggestions": []
|
|
363
|
+
},
|
|
337
364
|
"report_path": "logos/resources/verify/acceptance-report.md"
|
|
338
365
|
}
|
|
339
366
|
```
|
|
@@ -363,6 +390,19 @@ openlogos verify --format json # JSON 格式
|
|
|
363
390
|
| `ac_trace.total` | number | 是 | 验收条件总数 |
|
|
364
391
|
| `ac_trace.passed` | number | 是 | 通过的验收条件数 |
|
|
365
392
|
| `ac_trace.failed_criteria` | array | 是 | 未通过的验收条件列表 |
|
|
393
|
+
| `pre_run.mode` | string | 是 | verify 预跑模式:`"none"`、`"pre_run_command"` 或 `"two_phase"` |
|
|
394
|
+
| `pre_run.commands` | array | 是 | 实际执行或跳过的命令阶段 |
|
|
395
|
+
| `pre_run.commands[].stage` | string | 是 | `pre_run`、`regression` 或 `incremental` |
|
|
396
|
+
| `pre_run.commands[].command` | string | 是 | 实际执行的命令文本 |
|
|
397
|
+
| `pre_run.commands[].status` | string | 是 | `pass`、`fail` 或 `skipped` |
|
|
398
|
+
| `pre_run.commands[].exit_code` | number | 否 | 命令退出码 |
|
|
399
|
+
| `pre_run.commands[].duration_ms` | number | 否 | 命令执行时长 |
|
|
400
|
+
| `pre_run.result_paths.final` | string | 是 | 最终验收读取的 JSONL 路径 |
|
|
401
|
+
| `pre_run.result_paths.regression` | string \| null | 否 | 回归阶段结果路径 |
|
|
402
|
+
| `pre_run.result_paths.incremental` | string \| null | 否 | 增量阶段结果路径 |
|
|
403
|
+
| `pre_run.merge_strategy` | string \| null | 否 | 两阶段合并策略,当前为 `last-write-wins` |
|
|
404
|
+
| `pre_run.diagnostics` | string[] | 是 | 可展示给用户的问题诊断 |
|
|
405
|
+
| `pre_run.suggestions` | string[] | 是 | 可展示给用户的修复建议 |
|
|
366
406
|
| `report_path` | string | 是 | 生成的验收报告路径 |
|
|
367
407
|
|
|
368
408
|
### 4.4 gate.reason 取值
|
|
@@ -375,6 +415,13 @@ openlogos verify --format json # JSON 格式
|
|
|
375
415
|
| `"checklist_incomplete"` | 设计时覆盖度校验未完全确认 |
|
|
376
416
|
| `"ac_trace_incomplete"` | 验收条件追溯未完全通过 |
|
|
377
417
|
|
|
418
|
+
### 4.5 预跑状态兼容规则
|
|
419
|
+
|
|
420
|
+
- 旧项目只配置 `verify.pre_run_command` 时,`pre_run.mode="pre_run_command"`。
|
|
421
|
+
- 配置 `verify.regression_command` 或 `verify.incremental_command` 时,`pre_run.mode="two_phase"`。
|
|
422
|
+
- 没有任何预跑命令时,`pre_run.mode="none"`。
|
|
423
|
+
- 覆盖不足且 `pre_run.mode="none"` 时,必须输出局部测试诊断和配置建议。
|
|
424
|
+
|
|
378
425
|
---
|
|
379
426
|
|
|
380
427
|
## 5. `openlogos smoke --format json`
|
|
@@ -51,11 +51,33 @@
|
|
|
51
51
|
"result_path": {
|
|
52
52
|
"type": "string",
|
|
53
53
|
"default": "logos/resources/verify/test-results.jsonl",
|
|
54
|
-
"description": "
|
|
54
|
+
"description": "最终测试结果 JSONL 文件路径(相对项目根目录)。两阶段模型合并后也写入此路径"
|
|
55
55
|
},
|
|
56
56
|
"pre_run_command": {
|
|
57
57
|
"type": "string",
|
|
58
|
-
"description": "
|
|
58
|
+
"description": "兼容字段:单阶段测试命令。配置后 openlogos verify 会先执行此命令再读取结果"
|
|
59
|
+
},
|
|
60
|
+
"regression_command": {
|
|
61
|
+
"type": "string",
|
|
62
|
+
"description": "回归测试命令。配置后 openlogos verify 会在增量测试前执行"
|
|
63
|
+
},
|
|
64
|
+
"incremental_command": {
|
|
65
|
+
"type": "string",
|
|
66
|
+
"description": "增量测试命令。配置后 openlogos verify 会在回归测试后执行"
|
|
67
|
+
},
|
|
68
|
+
"regression_result_path": {
|
|
69
|
+
"type": "string",
|
|
70
|
+
"description": "回归阶段 JSONL 结果路径。未配置时 CLI 必须通过快照或等价机制保留阶段结果"
|
|
71
|
+
},
|
|
72
|
+
"incremental_result_path": {
|
|
73
|
+
"type": "string",
|
|
74
|
+
"description": "增量阶段 JSONL 结果路径。未配置时 CLI 必须通过快照或等价机制保留阶段结果"
|
|
75
|
+
},
|
|
76
|
+
"merge_results": {
|
|
77
|
+
"type": "string",
|
|
78
|
+
"enum": ["last-write-wins"],
|
|
79
|
+
"default": "last-write-wins",
|
|
80
|
+
"description": "两阶段结果合并策略。同一用例 ID 多次出现时,最后一次结果生效"
|
|
59
81
|
},
|
|
60
82
|
"test_command": {
|
|
61
83
|
"type": "string",
|
|
@@ -190,6 +212,18 @@
|
|
|
190
212
|
"result_path": "logos/resources/verify/smoke-results.jsonl",
|
|
191
213
|
"report_path": "logos/resources/verify/smoke-report.md"
|
|
192
214
|
}
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
"name": "Two Phase Verify Project",
|
|
218
|
+
"documents": {},
|
|
219
|
+
"verify": {
|
|
220
|
+
"result_path": "logos/resources/verify/test-results.jsonl",
|
|
221
|
+
"regression_command": "npm test",
|
|
222
|
+
"incremental_command": "npm run test:changed",
|
|
223
|
+
"regression_result_path": "logos/resources/verify/test-results.regression.jsonl",
|
|
224
|
+
"incremental_result_path": "logos/resources/verify/test-results.incremental.jsonl",
|
|
225
|
+
"merge_results": "last-write-wins"
|
|
226
|
+
}
|
|
193
227
|
}
|
|
194
228
|
]
|
|
195
229
|
}
|
package/spec/test-results.md
CHANGED
|
@@ -85,9 +85,9 @@ logos/resources/verify/test-results.jsonl
|
|
|
85
85
|
|
|
86
86
|
## 运行约定
|
|
87
87
|
|
|
88
|
-
### `verify.pre_run_command
|
|
88
|
+
### `verify.pre_run_command`(兼容配置)
|
|
89
89
|
|
|
90
|
-
|
|
90
|
+
`verify.pre_run_command` 保持兼容,用于单阶段全量测试。配置后,`openlogos verify` 在读取 `verify.result_path` 前执行该命令:
|
|
91
91
|
|
|
92
92
|
```json
|
|
93
93
|
{
|
|
@@ -98,7 +98,9 @@ logos/resources/verify/test-results.jsonl
|
|
|
98
98
|
}
|
|
99
99
|
```
|
|
100
100
|
|
|
101
|
-
|
|
101
|
+
此字段适用于只需要一条命令生成完整 `test-results.jsonl` 的项目。若同时配置两阶段字段,`openlogos verify` 优先执行两阶段模型,并在输出中标记 `pre_run_command` 作为兼容配置保留。
|
|
102
|
+
|
|
103
|
+
**为什么需要预跑配置**:reporter 每次运行测试时会清空 `test-results.jsonl`,若只跑部分场景的测试(如变更提案只涉及 S03),JSONL 将缺少其他场景(S01、S02)的结果,导致 `openlogos verify` 覆盖率不足而失败。配置预跑命令后,verify 会先跑完整测试再读取结果,覆盖率始终完整。
|
|
102
104
|
|
|
103
105
|
常见框架对应命令:
|
|
104
106
|
|
|
@@ -112,13 +114,45 @@ logos/resources/verify/test-results.jsonl
|
|
|
112
114
|
|
|
113
115
|
> `code-implementor` Skill 在生成测试代码后会自动检查并写入此字段,无需手动配置。
|
|
114
116
|
|
|
117
|
+
### `verify.regression_command` 与 `verify.incremental_command`
|
|
118
|
+
|
|
119
|
+
两阶段模型用于先运行回归测试,再运行增量测试:
|
|
120
|
+
|
|
121
|
+
```json
|
|
122
|
+
{
|
|
123
|
+
"verify": {
|
|
124
|
+
"result_path": "logos/resources/verify/test-results.jsonl",
|
|
125
|
+
"regression_command": "npm test",
|
|
126
|
+
"incremental_command": "npm run test:changed",
|
|
127
|
+
"regression_result_path": "logos/resources/verify/test-results.regression.jsonl",
|
|
128
|
+
"incremental_result_path": "logos/resources/verify/test-results.incremental.jsonl",
|
|
129
|
+
"merge_results": "last-write-wins"
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
执行语义:
|
|
135
|
+
1. 若配置 `regression_command`,先执行回归测试。
|
|
136
|
+
2. 若配置 `incremental_command`,再执行增量测试。
|
|
137
|
+
3. CLI 合并阶段结果,写入 `result_path`。
|
|
138
|
+
4. 同一个用例 ID 多次出现时,最后一次结果生效。
|
|
139
|
+
5. 若未配置阶段结果路径,CLI 必须用临时快照或等价机制避免第二阶段 reporter 清空第一阶段结果。
|
|
140
|
+
|
|
141
|
+
### 覆盖不足诊断
|
|
142
|
+
|
|
143
|
+
当项目没有配置 `pre_run_command`、`regression_command` 或 `incremental_command`,且 verify 发现覆盖不足时,CLI 必须诊断这可能是只运行了局部测试导致,并建议配置 verify 预跑命令。
|
|
144
|
+
|
|
145
|
+
该诊断不改变 Gate 判定:覆盖不足仍为 FAIL。
|
|
146
|
+
|
|
115
147
|
### 清空策略
|
|
116
148
|
|
|
117
|
-
每次完整测试运行前,reporter 应**清空**(truncate
|
|
149
|
+
每次完整测试运行前,reporter 应**清空**(truncate)对应阶段的结果文件,确保文件只包含最近一次运行的结果。推荐方式:
|
|
118
150
|
|
|
119
151
|
- 在测试套件的 `globalSetup` 或等效钩子中清空文件
|
|
120
152
|
- 或者 reporter 的初始化阶段写入空文件
|
|
121
153
|
|
|
154
|
+
两阶段模型下,回归阶段和增量阶段可以写入不同结果文件;如果两个阶段都写入默认 `result_path`,CLI 必须在阶段之间保留快照,确保最终合并结果不会丢失第一阶段覆盖。
|
|
155
|
+
|
|
122
156
|
### 目录创建
|
|
123
157
|
|
|
124
158
|
reporter 在写入前应确保 `logos/resources/verify/` 目录存在(`mkdir -p` 等效操作)。
|
package/spec/workflow.md
CHANGED
|
@@ -265,7 +265,8 @@ AI 面前已有完整上下文(原型 + 场景 + API + DB + 部署方案 + 测
|
|
|
265
265
|
- **单元测试代码**:基于 Step 4a 的单元测试用例规格实现
|
|
266
266
|
- **场景测试代码**:基于 Step 4a 的场景测试用例规格实现
|
|
267
267
|
- **部署相关代码**:部署方案中要求的健康检查、迁移脚本、启动脚本或构建脚本
|
|
268
|
-
- **OpenLogos reporter 集成**:测试代码内嵌标准 reporter,将用例结果写入 `logos/resources/verify/test-results.jsonl
|
|
268
|
+
- **OpenLogos reporter 集成**:测试代码内嵌标准 reporter,将用例结果写入 `logos/resources/verify/test-results.jsonl` 或配置的阶段结果路径(格式见 [test-results.md](./test-results.md))
|
|
269
|
+
- **verify 预跑配置检查**:代码完成前必须检查 `logos.config.json` 是否存在 `verify.pre_run_command`、`verify.regression_command` 或 `verify.incremental_command`;缺失时必须补齐或明确说明无法推断
|
|
269
270
|
|
|
270
271
|
**Step 5 标准交付(不可拆分)**:
|
|
271
272
|
|
|
@@ -291,12 +292,14 @@ AI 面前已有完整上下文(原型 + 场景 + API + DB + 部署方案 + 测
|
|
|
291
292
|
- 仅当 Step 5 达到“业务代码 + UT/ST 测试代码 + reporter”完整交付时,才允许进入 Step 6
|
|
292
293
|
- 若发现“仅业务代码、无对应测试”或“测试代码缺少 reporter”,必须回到 Step 5 补齐后再执行验收
|
|
293
294
|
- Step 6 不承担“补写测试代码”的职责;其职责是对已完成的 Step 5 产物做自动化判定
|
|
295
|
+
- 项目应配置 verify 预跑命令;若无法推断,必须在交付说明中明确风险与手动配置方式
|
|
294
296
|
|
|
295
297
|
**验收流程**:
|
|
296
298
|
|
|
297
299
|
1. AI 在 Step 5 生成测试代码时,内嵌 OpenLogos reporter(见 [test-results.md](./test-results.md))
|
|
298
|
-
2.
|
|
299
|
-
3.
|
|
300
|
+
2. 用户明确授权运行 `openlogos verify`
|
|
301
|
+
3. CLI 根据 `logos.config.json` 执行 `pre_run_command`,或按 `regression_command` → `incremental_command` 顺序执行两阶段测试
|
|
302
|
+
4. CLI 合并阶段结果,读取 JSONL + `logos/resources/test/*.md` 中的用例 ID → 自动计算验收结果
|
|
300
303
|
|
|
301
304
|
**验收三层判定**:
|
|
302
305
|
|
|
@@ -304,6 +307,11 @@ AI 面前已有完整上下文(原型 + 场景 + API + DB + 部署方案 + 测
|
|
|
304
307
|
- **通过率**:status=pass 的用例数 / JSONL 中的总用例数
|
|
305
308
|
- **需求追溯**(可选):test-cases.md 中声明的覆盖范围是否覆盖 Phase 1 验收条件
|
|
306
309
|
|
|
310
|
+
**覆盖不足诊断**:
|
|
311
|
+
|
|
312
|
+
- 未配置任何 verify 预跑命令且覆盖不足时,CLI 必须提示可能只运行了局部测试
|
|
313
|
+
- 诊断必须建议配置 `verify.pre_run_command`,或配置 `verify.regression_command` + `verify.incremental_command`
|
|
314
|
+
|
|
307
315
|
**验收结果**:
|
|
308
316
|
|
|
309
317
|
- 全部通过 → 生成 `logos/resources/verify/acceptance-report.md`,终端输出 PASS
|