@sun-asterisk/sungen 2.7.0-beta.1 → 3.0.0-beta.72
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 +1 -1
- package/dist/cli/commands/add.js +3 -3
- package/dist/cli/commands/add.js.map +1 -1
- package/dist/cli/commands/audit.d.ts +3 -0
- package/dist/cli/commands/audit.d.ts.map +1 -0
- package/dist/cli/commands/audit.js +134 -0
- package/dist/cli/commands/audit.js.map +1 -0
- package/dist/cli/commands/blindspot.d.ts +3 -0
- package/dist/cli/commands/blindspot.d.ts.map +1 -0
- package/dist/cli/commands/blindspot.js +58 -0
- package/dist/cli/commands/blindspot.js.map +1 -0
- package/dist/cli/commands/capability.d.ts +3 -0
- package/dist/cli/commands/capability.d.ts.map +1 -0
- package/dist/cli/commands/capability.js +196 -0
- package/dist/cli/commands/capability.js.map +1 -0
- package/dist/cli/commands/challenge.d.ts +3 -0
- package/dist/cli/commands/challenge.d.ts.map +1 -0
- package/dist/cli/commands/challenge.js +102 -0
- package/dist/cli/commands/challenge.js.map +1 -0
- package/dist/cli/commands/feedback.d.ts +3 -0
- package/dist/cli/commands/feedback.d.ts.map +1 -0
- package/dist/cli/commands/feedback.js +72 -0
- package/dist/cli/commands/feedback.js.map +1 -0
- package/dist/cli/commands/flow-check.d.ts +3 -0
- package/dist/cli/commands/flow-check.d.ts.map +1 -0
- package/dist/cli/commands/flow-check.js +136 -0
- package/dist/cli/commands/flow-check.js.map +1 -0
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +50 -2
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/ledger.d.ts +3 -0
- package/dist/cli/commands/ledger.d.ts.map +1 -0
- package/dist/cli/commands/ledger.js +71 -0
- package/dist/cli/commands/ledger.js.map +1 -0
- package/dist/cli/commands/manifest.d.ts +3 -0
- package/dist/cli/commands/manifest.d.ts.map +1 -0
- package/dist/cli/commands/manifest.js +101 -0
- package/dist/cli/commands/manifest.js.map +1 -0
- package/dist/cli/commands/script-check.d.ts +3 -0
- package/dist/cli/commands/script-check.d.ts.map +1 -0
- package/dist/cli/commands/script-check.js +97 -0
- package/dist/cli/commands/script-check.js.map +1 -0
- package/dist/cli/commands/trace.d.ts +3 -0
- package/dist/cli/commands/trace.d.ts.map +1 -0
- package/dist/cli/commands/trace.js +110 -0
- package/dist/cli/commands/trace.js.map +1 -0
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +22 -9
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/index.js +20 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/generators/test-generator/adapters/adapter-interface.d.ts +1 -0
- package/dist/generators/test-generator/adapters/adapter-interface.d.ts.map +1 -1
- package/dist/generators/test-generator/adapters/adapter-registry.d.ts +13 -0
- package/dist/generators/test-generator/adapters/adapter-registry.d.ts.map +1 -1
- package/dist/generators/test-generator/adapters/adapter-registry.js +73 -1
- package/dist/generators/test-generator/adapters/adapter-registry.js.map +1 -1
- package/dist/generators/test-generator/adapters/index.d.ts +1 -1
- package/dist/generators/test-generator/adapters/index.d.ts.map +1 -1
- package/dist/generators/test-generator/adapters/index.js +5 -1
- package/dist/generators/test-generator/adapters/index.js.map +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/capture-variable.hbs +1 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/all-contain-assertion.hbs +7 -0
- package/dist/generators/test-generator/adapters/playwright/templates/test-file.hbs +6 -0
- package/dist/generators/test-generator/code-generator.d.ts.map +1 -1
- package/dist/generators/test-generator/code-generator.js +6 -2
- package/dist/generators/test-generator/code-generator.js.map +1 -1
- package/dist/generators/test-generator/patterns/capture-patterns.d.ts +16 -0
- package/dist/generators/test-generator/patterns/capture-patterns.d.ts.map +1 -0
- package/dist/generators/test-generator/patterns/capture-patterns.js +54 -0
- package/dist/generators/test-generator/patterns/capture-patterns.js.map +1 -0
- package/dist/generators/test-generator/patterns/form-patterns.d.ts.map +1 -1
- package/dist/generators/test-generator/patterns/form-patterns.js +3 -1
- package/dist/generators/test-generator/patterns/form-patterns.js.map +1 -1
- package/dist/generators/test-generator/patterns/index.d.ts.map +1 -1
- package/dist/generators/test-generator/patterns/index.js +2 -0
- package/dist/generators/test-generator/patterns/index.js.map +1 -1
- package/dist/generators/test-generator/step-mapper.d.ts.map +1 -1
- package/dist/generators/test-generator/step-mapper.js +1 -0
- package/dist/generators/test-generator/step-mapper.js.map +1 -1
- package/dist/generators/test-generator/utils/data-resolver.d.ts +5 -0
- package/dist/generators/test-generator/utils/data-resolver.d.ts.map +1 -1
- package/dist/generators/test-generator/utils/data-resolver.js +17 -0
- package/dist/generators/test-generator/utils/data-resolver.js.map +1 -1
- package/dist/generators/test-generator/utils/runtime-data-transformer.d.ts.map +1 -1
- package/dist/generators/test-generator/utils/runtime-data-transformer.js +4 -0
- package/dist/generators/test-generator/utils/runtime-data-transformer.js.map +1 -1
- package/dist/generators/test-generator/utils/selector-resolver.d.ts.map +1 -1
- package/dist/generators/test-generator/utils/selector-resolver.js +12 -6
- package/dist/generators/test-generator/utils/selector-resolver.js.map +1 -1
- package/dist/harness/audit.d.ts +24 -0
- package/dist/harness/audit.d.ts.map +1 -0
- package/dist/harness/audit.js +115 -0
- package/dist/harness/audit.js.map +1 -0
- package/dist/harness/blindspot.d.ts +15 -0
- package/dist/harness/blindspot.d.ts.map +1 -0
- package/dist/harness/blindspot.js +85 -0
- package/dist/harness/blindspot.js.map +1 -0
- package/dist/harness/capability-plan.d.ts +49 -0
- package/dist/harness/capability-plan.d.ts.map +1 -0
- package/dist/harness/capability-plan.js +215 -0
- package/dist/harness/capability-plan.js.map +1 -0
- package/dist/harness/capability.d.ts +23 -0
- package/dist/harness/capability.d.ts.map +1 -0
- package/dist/harness/capability.js +98 -0
- package/dist/harness/capability.js.map +1 -0
- package/dist/harness/catalog/drivers.yaml +57 -0
- package/dist/harness/catalog/universal-viewpoints.yaml +114 -0
- package/dist/harness/challenge.d.ts +21 -0
- package/dist/harness/challenge.d.ts.map +1 -0
- package/dist/harness/challenge.js +151 -0
- package/dist/harness/challenge.js.map +1 -0
- package/dist/harness/feedback.d.ts +29 -0
- package/dist/harness/feedback.d.ts.map +1 -0
- package/dist/harness/feedback.js +106 -0
- package/dist/harness/feedback.js.map +1 -0
- package/dist/harness/flow-check.d.ts +23 -0
- package/dist/harness/flow-check.d.ts.map +1 -0
- package/dist/harness/flow-check.js +132 -0
- package/dist/harness/flow-check.js.map +1 -0
- package/dist/harness/flow-plan.d.ts +23 -0
- package/dist/harness/flow-plan.d.ts.map +1 -0
- package/dist/harness/flow-plan.js +166 -0
- package/dist/harness/flow-plan.js.map +1 -0
- package/dist/harness/intent.d.ts +11 -0
- package/dist/harness/intent.d.ts.map +1 -0
- package/dist/harness/intent.js +86 -0
- package/dist/harness/intent.js.map +1 -0
- package/dist/harness/ledger.d.ts +42 -0
- package/dist/harness/ledger.d.ts.map +1 -0
- package/dist/harness/ledger.js +171 -0
- package/dist/harness/ledger.js.map +1 -0
- package/dist/harness/manifest.d.ts +42 -0
- package/dist/harness/manifest.d.ts.map +1 -0
- package/dist/harness/manifest.js +209 -0
- package/dist/harness/manifest.js.map +1 -0
- package/dist/harness/parse.d.ts +22 -0
- package/dist/harness/parse.d.ts.map +1 -0
- package/dist/harness/parse.js +163 -0
- package/dist/harness/parse.js.map +1 -0
- package/dist/harness/script-check.d.ts +39 -0
- package/dist/harness/script-check.d.ts.map +1 -0
- package/dist/harness/script-check.js +251 -0
- package/dist/harness/script-check.js.map +1 -0
- package/dist/harness/secret-scan.d.ts +8 -0
- package/dist/harness/secret-scan.d.ts.map +1 -0
- package/dist/harness/secret-scan.js +88 -0
- package/dist/harness/secret-scan.js.map +1 -0
- package/dist/harness/sensors.d.ts +88 -0
- package/dist/harness/sensors.d.ts.map +1 -0
- package/dist/harness/sensors.js +232 -0
- package/dist/harness/sensors.js.map +1 -0
- package/dist/harness/trace.d.ts +31 -0
- package/dist/harness/trace.d.ts.map +1 -0
- package/dist/harness/trace.js +173 -0
- package/dist/harness/trace.js.map +1 -0
- package/dist/orchestrator/ai-rules-updater.d.ts +1 -0
- package/dist/orchestrator/ai-rules-updater.d.ts.map +1 -1
- package/dist/orchestrator/ai-rules-updater.js +55 -11
- package/dist/orchestrator/ai-rules-updater.js.map +1 -1
- package/dist/orchestrator/figma/spec-figma-renderer.d.ts +2 -2
- package/dist/orchestrator/figma/spec-figma-renderer.js +2 -2
- package/dist/orchestrator/figma/spec-figma-section-renderers.d.ts +1 -1
- package/dist/orchestrator/figma/spec-figma-section-renderers.js +1 -1
- package/dist/orchestrator/project-initializer.d.ts +5 -0
- package/dist/orchestrator/project-initializer.d.ts.map +1 -1
- package/dist/orchestrator/project-initializer.js +30 -6
- package/dist/orchestrator/project-initializer.js.map +1 -1
- package/dist/orchestrator/templates/ai-instructions/claude-agent-challenge.md +46 -0
- package/dist/orchestrator/templates/ai-instructions/claude-agent-discovery.md +32 -0
- package/dist/orchestrator/templates/ai-instructions/claude-agent-reviewer.md +37 -0
- package/dist/orchestrator/templates/ai-instructions/claude-cmd-add-flow.md +3 -3
- package/dist/orchestrator/templates/ai-instructions/claude-cmd-add-screen.md +5 -5
- package/dist/orchestrator/templates/ai-instructions/claude-cmd-create-test.md +36 -12
- package/dist/orchestrator/templates/ai-instructions/claude-cmd-design.md +12 -0
- package/dist/orchestrator/templates/ai-instructions/claude-cmd-feedback.md +36 -0
- package/dist/orchestrator/templates/ai-instructions/claude-cmd-review.md +27 -30
- package/dist/orchestrator/templates/ai-instructions/claude-cmd-run-test.md +4 -1
- package/dist/orchestrator/templates/ai-instructions/claude-config.md +1 -4
- package/dist/orchestrator/templates/ai-instructions/claude-skill-capture-mode-figma-mcp.md +82 -0
- package/dist/orchestrator/templates/ai-instructions/{github-skill-sungen-figma-source.md → claude-skill-capture-mode-figma-pat.md} +14 -48
- package/dist/orchestrator/templates/ai-instructions/claude-skill-capture-mode-live.md +60 -0
- package/dist/orchestrator/templates/ai-instructions/claude-skill-capture-mode-local.md +38 -0
- package/dist/orchestrator/templates/ai-instructions/claude-skill-capture.md +35 -0
- package/dist/orchestrator/templates/ai-instructions/claude-skill-harness-audit.md +84 -0
- package/dist/orchestrator/templates/ai-instructions/claude-skill-tc-generation.md +40 -1
- package/dist/orchestrator/templates/ai-instructions/copilot-cmd-add-flow.md +3 -3
- package/dist/orchestrator/templates/ai-instructions/copilot-cmd-add-screen.md +4 -4
- package/dist/orchestrator/templates/ai-instructions/copilot-cmd-create-test.md +18 -10
- package/dist/orchestrator/templates/ai-instructions/copilot-cmd-design.md +13 -0
- package/dist/orchestrator/templates/ai-instructions/copilot-cmd-feedback.md +24 -0
- package/dist/orchestrator/templates/ai-instructions/copilot-cmd-review.md +20 -30
- package/dist/orchestrator/templates/ai-instructions/copilot-cmd-run-test.md +2 -1
- package/dist/orchestrator/templates/ai-instructions/copilot-config.md +1 -4
- package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-capture-mode-figma-mcp.md +82 -0
- package/{src/orchestrator/templates/ai-instructions/claude-skill-figma-source.md → dist/orchestrator/templates/ai-instructions/github-skill-sungen-capture-mode-figma-pat.md} +14 -48
- package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-capture-mode-live.md +60 -0
- package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-capture-mode-local.md +38 -0
- package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-capture.md +35 -0
- package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-harness-audit.md +84 -0
- package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-selector-fix.md +1 -1
- package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-tc-generation.md +40 -1
- package/dist/orchestrator/templates/specs-test-data.ts +20 -6
- package/dist/tools/figma/figma-auth.d.ts +5 -2
- package/dist/tools/figma/figma-auth.d.ts.map +1 -1
- package/dist/tools/figma/figma-auth.js +19 -9
- package/dist/tools/figma/figma-auth.js.map +1 -1
- package/docs/orchestration-spec.md +267 -0
- package/package.json +12 -7
- package/src/cli/commands/add.ts +3 -3
- package/src/cli/commands/audit.ts +92 -0
- package/src/cli/commands/blindspot.ts +48 -0
- package/src/cli/commands/capability.ts +160 -0
- package/src/cli/commands/challenge.ts +55 -0
- package/src/cli/commands/feedback.ts +65 -0
- package/src/cli/commands/flow-check.ts +97 -0
- package/src/cli/commands/generate.ts +47 -2
- package/src/cli/commands/ledger.ts +61 -0
- package/src/cli/commands/manifest.ts +55 -0
- package/src/cli/commands/script-check.ts +50 -0
- package/src/cli/commands/trace.ts +60 -0
- package/src/cli/commands/update.ts +30 -10
- package/src/cli/index.ts +20 -0
- package/src/generators/test-generator/adapters/adapter-interface.ts +1 -0
- package/src/generators/test-generator/adapters/adapter-registry.ts +37 -0
- package/src/generators/test-generator/adapters/index.ts +4 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/capture-variable.hbs +1 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/all-contain-assertion.hbs +7 -0
- package/src/generators/test-generator/adapters/playwright/templates/test-file.hbs +6 -0
- package/src/generators/test-generator/code-generator.ts +6 -2
- package/src/generators/test-generator/patterns/capture-patterns.ts +59 -0
- package/src/generators/test-generator/patterns/form-patterns.ts +3 -1
- package/src/generators/test-generator/patterns/index.ts +2 -0
- package/src/generators/test-generator/step-mapper.ts +1 -0
- package/src/generators/test-generator/utils/data-resolver.ts +20 -0
- package/src/generators/test-generator/utils/runtime-data-transformer.ts +8 -0
- package/src/generators/test-generator/utils/selector-resolver.ts +13 -6
- package/src/harness/audit.ts +112 -0
- package/src/harness/blindspot.ts +51 -0
- package/src/harness/capability-plan.ts +180 -0
- package/src/harness/capability.ts +75 -0
- package/src/harness/catalog/drivers.yaml +57 -0
- package/src/harness/catalog/universal-viewpoints.yaml +114 -0
- package/src/harness/challenge.ts +131 -0
- package/src/harness/feedback.ts +84 -0
- package/src/harness/flow-check.ts +99 -0
- package/src/harness/flow-plan.ts +135 -0
- package/src/harness/intent.ts +58 -0
- package/src/harness/ledger.ts +155 -0
- package/src/harness/manifest.ts +173 -0
- package/src/harness/parse.ts +145 -0
- package/src/harness/script-check.ts +222 -0
- package/src/harness/secret-scan.ts +51 -0
- package/src/harness/sensors.ts +279 -0
- package/src/harness/trace.ts +138 -0
- package/src/orchestrator/ai-rules-updater.ts +57 -10
- package/src/orchestrator/figma/spec-figma-renderer.ts +2 -2
- package/src/orchestrator/figma/spec-figma-section-renderers.ts +1 -1
- package/src/orchestrator/project-initializer.ts +33 -7
- package/src/orchestrator/templates/ai-instructions/claude-agent-challenge.md +46 -0
- package/src/orchestrator/templates/ai-instructions/claude-agent-discovery.md +32 -0
- package/src/orchestrator/templates/ai-instructions/claude-agent-reviewer.md +37 -0
- package/src/orchestrator/templates/ai-instructions/claude-cmd-add-flow.md +3 -3
- package/src/orchestrator/templates/ai-instructions/claude-cmd-add-screen.md +5 -5
- package/src/orchestrator/templates/ai-instructions/claude-cmd-create-test.md +36 -12
- package/src/orchestrator/templates/ai-instructions/claude-cmd-design.md +12 -0
- package/src/orchestrator/templates/ai-instructions/claude-cmd-feedback.md +36 -0
- package/src/orchestrator/templates/ai-instructions/claude-cmd-review.md +27 -30
- package/src/orchestrator/templates/ai-instructions/claude-cmd-run-test.md +4 -1
- package/src/orchestrator/templates/ai-instructions/claude-config.md +1 -4
- package/src/orchestrator/templates/ai-instructions/claude-skill-capture-mode-figma-mcp.md +82 -0
- package/{dist/orchestrator/templates/ai-instructions/copilot-skill-figma-source.md → src/orchestrator/templates/ai-instructions/claude-skill-capture-mode-figma-pat.md} +14 -48
- package/src/orchestrator/templates/ai-instructions/claude-skill-capture-mode-live.md +60 -0
- package/src/orchestrator/templates/ai-instructions/claude-skill-capture-mode-local.md +38 -0
- package/src/orchestrator/templates/ai-instructions/claude-skill-capture.md +35 -0
- package/src/orchestrator/templates/ai-instructions/claude-skill-harness-audit.md +84 -0
- package/src/orchestrator/templates/ai-instructions/claude-skill-tc-generation.md +40 -1
- package/src/orchestrator/templates/ai-instructions/copilot-cmd-add-flow.md +3 -3
- package/src/orchestrator/templates/ai-instructions/copilot-cmd-add-screen.md +4 -4
- package/src/orchestrator/templates/ai-instructions/copilot-cmd-create-test.md +18 -10
- package/src/orchestrator/templates/ai-instructions/copilot-cmd-design.md +13 -0
- package/src/orchestrator/templates/ai-instructions/copilot-cmd-feedback.md +24 -0
- package/src/orchestrator/templates/ai-instructions/copilot-cmd-review.md +20 -30
- package/src/orchestrator/templates/ai-instructions/copilot-cmd-run-test.md +2 -1
- package/src/orchestrator/templates/ai-instructions/copilot-config.md +1 -4
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-capture-mode-figma-mcp.md +82 -0
- package/{dist/orchestrator/templates/ai-instructions/claude-skill-figma-source.md → src/orchestrator/templates/ai-instructions/github-skill-sungen-capture-mode-figma-pat.md} +14 -48
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-capture-mode-live.md +60 -0
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-capture-mode-local.md +38 -0
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-capture.md +35 -0
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-harness-audit.md +84 -0
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-selector-fix.md +1 -1
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-tc-generation.md +40 -1
- package/src/orchestrator/templates/specs-test-data.ts +20 -6
- package/src/tools/figma/figma-auth.ts +20 -9
- package/dist/orchestrator/templates/ai-instructions/claude-skill-capture-figma.md +0 -142
- package/dist/orchestrator/templates/ai-instructions/claude-skill-capture-live.md +0 -112
- package/dist/orchestrator/templates/ai-instructions/claude-skill-capture-local.md +0 -73
- package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-capture-figma.md +0 -142
- package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-capture-live.md +0 -112
- package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-capture-local.md +0 -73
- package/src/orchestrator/templates/ai-instructions/claude-skill-capture-figma.md +0 -142
- package/src/orchestrator/templates/ai-instructions/claude-skill-capture-live.md +0 -112
- package/src/orchestrator/templates/ai-instructions/claude-skill-capture-local.md +0 -73
- package/src/orchestrator/templates/ai-instructions/copilot-skill-figma-source.md +0 -151
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-capture-figma.md +0 -142
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-capture-live.md +0 -112
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-capture-local.md +0 -73
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-figma-source.md +0 -151
package/README.md
CHANGED
|
@@ -428,4 +428,4 @@ Full documentation at **[sungen.sun-asterisk.vn](https://sungen.sun-asterisk.vn)
|
|
|
428
428
|
|
|
429
429
|
MIT License - see LICENSE file for details.
|
|
430
430
|
|
|
431
|
-
**Made with ❤️ by
|
|
431
|
+
**Made with ❤️ by eqe team (engineer & quality) — Sun Asterisk**
|
package/dist/cli/commands/add.js
CHANGED
|
@@ -94,15 +94,15 @@ function registerAddCommand(program) {
|
|
|
94
94
|
if (result.specMdCreated) {
|
|
95
95
|
console.log(` qa/screens/${options.screen}/requirements/spec.md (stub created)`);
|
|
96
96
|
}
|
|
97
|
-
// Loud banner: Tell the calling agent to
|
|
98
|
-
//
|
|
97
|
+
// Loud banner: Tell the calling agent to invoke the `sungen-capture` skill
|
|
98
|
+
// (mode figma-pat) to synthesize the narrative sections in spec_figma.md, since
|
|
99
99
|
// the CLI cannot do this (synthesis is LLM-driven off the cached raw JSON).
|
|
100
100
|
console.log('');
|
|
101
101
|
console.log('==============================================================');
|
|
102
102
|
console.log(' NEXT STEP (REQUIRED — DO NOT SKIP)');
|
|
103
103
|
console.log('==============================================================');
|
|
104
104
|
console.log(' spec_figma.md envelope is written but narrative is EMPTY.');
|
|
105
|
-
console.log(' Invoke
|
|
105
|
+
console.log(' Invoke `sungen-capture` (mode figma-pat) NOW to synthesize');
|
|
106
106
|
console.log(' the 7 sections (Purpose / ASCII Layout / Regions / Actions /');
|
|
107
107
|
console.log(' Form Fields / Data Columns / Navigation) below the');
|
|
108
108
|
console.log(' `<!-- SYNTHESIS-BELOW -->` marker.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/cli/commands/add.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/cli/commands/add.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/audit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwDpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmC3D"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.registerAuditCommand = registerAuditCommand;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const audit_1 = require("../../harness/audit");
|
|
40
|
+
function findScreenDir(name) {
|
|
41
|
+
const screen = path.join(process.cwd(), 'qa', 'screens', name);
|
|
42
|
+
if (fs.existsSync(screen))
|
|
43
|
+
return screen;
|
|
44
|
+
const flow = path.join(process.cwd(), 'qa', 'flows', name);
|
|
45
|
+
if (fs.existsSync(flow))
|
|
46
|
+
return flow;
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
function bar(ratio, width = 20) {
|
|
50
|
+
const n = Math.round(ratio * width);
|
|
51
|
+
return '█'.repeat(n) + '░'.repeat(width - n);
|
|
52
|
+
}
|
|
53
|
+
function render(r) {
|
|
54
|
+
const L = console.log;
|
|
55
|
+
L('');
|
|
56
|
+
L(`━━━ Harness Audit: ${r.screen} (${r.scenarioCount} scenarios) ━━━`);
|
|
57
|
+
L('');
|
|
58
|
+
L(` Quality score (business-weighted): ${r.score.overall}/10 [Viewpoint Gate: ${r.gateStatus}]`);
|
|
59
|
+
L(` Intent: focus=${r.intent.focus} · depth threshold ${r.depth.threshold.toFixed(2)} (${r.intent.source})`);
|
|
60
|
+
L(` coverage ${bar(r.score.coverage)} ${(r.score.coverage * 100).toFixed(0)}%`);
|
|
61
|
+
L(` businessDepth ${bar(r.score.businessDepth)} ${(r.score.businessDepth * 100).toFixed(0)}% [${r.depth.verdict.toUpperCase()}]`);
|
|
62
|
+
L(` balance ${bar(r.score.balance)} ${(r.score.balance * 100).toFixed(0)}%`);
|
|
63
|
+
L(` traceability ${bar(r.score.traceability)} ${(r.score.traceability * 100).toFixed(0)}%`);
|
|
64
|
+
L(` (${r.score.formula})`);
|
|
65
|
+
L('');
|
|
66
|
+
L(` ① Viewpoint Gate — page-type: ${r.gate.pageType ?? 'unknown'} — themes ${r.gate.themesCovered}/${r.gate.themesTotal} covered`);
|
|
67
|
+
if (r.gate.gaps.length)
|
|
68
|
+
for (const g of r.gate.gaps)
|
|
69
|
+
L(` ✗ ${g.status === 'shallow' ? 'SHALLOW' : 'MISSING'}: ${g.theme}`);
|
|
70
|
+
else
|
|
71
|
+
L(' ✓ all critical themes covered (with data assertions)');
|
|
72
|
+
L('');
|
|
73
|
+
L(` ② Assertion depth — ${r.depth.businessCriticalShallow}/${r.depth.businessCriticalTotal} business-critical scenarios are shallow (visibility/nav only)`);
|
|
74
|
+
for (const s of r.depth.shallowBusinessCritical.slice(0, 8))
|
|
75
|
+
L(` ⚠ ${s.category}: ${s.name}`);
|
|
76
|
+
if (r.depth.shallowBusinessCritical.length > 8)
|
|
77
|
+
L(` … +${r.depth.shallowBusinessCritical.length - 8} more`);
|
|
78
|
+
L('');
|
|
79
|
+
L(` ③ Coverage balance — ${r.balance.imbalanced ? '⚠ IMBALANCED' : '✓ balanced'}`);
|
|
80
|
+
L(` buckets: ${Object.entries(r.balance.byBucket).map(([k, v]) => `${k}=${v}`).join(' ')}`);
|
|
81
|
+
L('');
|
|
82
|
+
L(` ④ Duplicate — ${r.duplicates.clusters.length} same-shape cluster(s), ${r.duplicates.exactDuplicateCount} likely exact dup(s)`);
|
|
83
|
+
for (const c of r.duplicates.clusters.slice(0, 3)) {
|
|
84
|
+
L(` ${c.sameDataLikely ? '✗ exact' : '○ EP/data family'} (${c.scenarios.length}): ${c.scenarios.slice(0, 3).join(' | ')}${c.scenarios.length > 3 ? ' …' : ''}`);
|
|
85
|
+
}
|
|
86
|
+
L('');
|
|
87
|
+
L(` ⑤ Traceability — ${(r.trace.mappedRatio * 100).toFixed(0)}% scenarios linked to viewpoint-overview`);
|
|
88
|
+
L(` ${r.trace.note}`);
|
|
89
|
+
L('');
|
|
90
|
+
L(' ── Findings (Repair targets) ──');
|
|
91
|
+
if (r.findings.length === 0)
|
|
92
|
+
L(' ✓ none — output passes the harness');
|
|
93
|
+
for (const f of r.findings)
|
|
94
|
+
L(` • ${f}`);
|
|
95
|
+
L('');
|
|
96
|
+
}
|
|
97
|
+
function registerAuditCommand(program) {
|
|
98
|
+
program
|
|
99
|
+
.command('audit')
|
|
100
|
+
.description('Harness: measure test-design quality (viewpoint gate, depth, balance, duplicates, traceability)')
|
|
101
|
+
.option('-s, --screen <name>', 'Screen or flow name to audit')
|
|
102
|
+
.option('--json', 'Output the raw JSON report')
|
|
103
|
+
.action((options) => {
|
|
104
|
+
try {
|
|
105
|
+
const name = options.screen;
|
|
106
|
+
if (!name)
|
|
107
|
+
throw new Error('Provide --screen <name>');
|
|
108
|
+
const dir = findScreenDir(name);
|
|
109
|
+
if (!dir)
|
|
110
|
+
throw new Error(`Screen/flow not found: qa/screens/${name} or qa/flows/${name}`);
|
|
111
|
+
const report = (0, audit_1.runAudit)(dir, name);
|
|
112
|
+
// Persist report under .sungen/reports/
|
|
113
|
+
const outDir = path.join(process.cwd(), '.sungen', 'reports');
|
|
114
|
+
fs.mkdirSync(outDir, { recursive: true });
|
|
115
|
+
const outPath = path.join(outDir, `${name}-audit.json`);
|
|
116
|
+
fs.writeFileSync(outPath, JSON.stringify(report, null, 2), 'utf-8');
|
|
117
|
+
if (options.json) {
|
|
118
|
+
console.log(JSON.stringify(report, null, 2));
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
render(report);
|
|
122
|
+
console.log(` Report: ${path.relative(process.cwd(), outPath)}`);
|
|
123
|
+
console.log('');
|
|
124
|
+
}
|
|
125
|
+
// Non-zero exit when the gate fails — usable in CI / repair loop.
|
|
126
|
+
process.exit(report.gateStatus === 'FAIL' ? 2 : 0);
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
console.error('Error:', error instanceof Error ? error.message : error);
|
|
130
|
+
process.exit(1);
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/cli/commands/audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blindspot.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/blindspot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4C/D"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerBlindspotCommand = registerBlindspotCommand;
|
|
4
|
+
const blindspot_1 = require("../../harness/blindspot");
|
|
5
|
+
function registerBlindspotCommand(program) {
|
|
6
|
+
const bs = program
|
|
7
|
+
.command('blindspot')
|
|
8
|
+
.description('Blind-Spot Memory: reusable patterns so the harness stops repeating a known miss');
|
|
9
|
+
bs
|
|
10
|
+
.command('add')
|
|
11
|
+
.description('Record a blind-spot pattern (promote a recurring miss to a reusable rule)')
|
|
12
|
+
.requiredOption('--pattern <name>', 'Short pattern name, e.g. "add-action-no-duplicate-check"')
|
|
13
|
+
.requiredOption('--rule <text>', 'The generalised rule to apply next time')
|
|
14
|
+
.option('--example <text>', 'A concrete instance that motivated it')
|
|
15
|
+
.option('--screen <name>', 'Where it was first noticed')
|
|
16
|
+
.option('--source <who>', 'qa | challenge | feedback', 'qa')
|
|
17
|
+
.action((o) => {
|
|
18
|
+
try {
|
|
19
|
+
(0, blindspot_1.addBlindspot)({ pattern: o.pattern, rule: o.rule, example: o.example, screen: o.screen, source: o.source });
|
|
20
|
+
console.log(`✓ blindspot recorded: [${o.pattern}]`);
|
|
21
|
+
}
|
|
22
|
+
catch (e) {
|
|
23
|
+
console.error('Error:', e instanceof Error ? e.message : e);
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
bs
|
|
28
|
+
.command('list')
|
|
29
|
+
.description('List recorded blind-spot patterns')
|
|
30
|
+
.option('--prompt', 'Output the compact bullet form used in generator/critic prompts')
|
|
31
|
+
.action((o) => {
|
|
32
|
+
try {
|
|
33
|
+
if (o.prompt) {
|
|
34
|
+
const s = (0, blindspot_1.blindspotsForPrompt)();
|
|
35
|
+
console.log(s || '(none)');
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const all = (0, blindspot_1.listBlindspots)();
|
|
39
|
+
if (!all.length) {
|
|
40
|
+
console.log('No blind-spots recorded yet. Add one with `sungen blindspot add`.');
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
console.log(`\n━━━ Blind-Spot Memory (${all.length}) ━━━`);
|
|
44
|
+
for (const b of all) {
|
|
45
|
+
console.log(` • [${b.pattern}]${b.screen ? ` (${b.screen})` : ''}`);
|
|
46
|
+
console.log(` rule: ${b.rule}`);
|
|
47
|
+
if (b.example)
|
|
48
|
+
console.log(` e.g.: ${b.example}`);
|
|
49
|
+
}
|
|
50
|
+
console.log('');
|
|
51
|
+
}
|
|
52
|
+
catch (e) {
|
|
53
|
+
console.error('Error:', e instanceof Error ? e.message : e);
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=blindspot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blindspot.js","sourceRoot":"","sources":["../../../src/cli/commands/blindspot.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/capability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6IhE"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.registerCapabilityCommand = registerCapabilityCommand;
|
|
37
|
+
const child_process_1 = require("child_process");
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const capability_1 = require("../../harness/capability");
|
|
41
|
+
const capability_plan_1 = require("../../harness/capability-plan");
|
|
42
|
+
const adapters_1 = require("../../generators/test-generator/adapters");
|
|
43
|
+
function findScreenDir(name) {
|
|
44
|
+
const s = path.join(process.cwd(), 'qa', 'screens', name);
|
|
45
|
+
if (fs.existsSync(s))
|
|
46
|
+
return s;
|
|
47
|
+
const f = path.join(process.cwd(), 'qa', 'flows', name);
|
|
48
|
+
if (fs.existsSync(f))
|
|
49
|
+
return f;
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
function registerCapabilityCommand(program) {
|
|
53
|
+
const cap = program
|
|
54
|
+
.command('capability')
|
|
55
|
+
.description('Manage execution drivers (platform + capability) — opt-in, installed only on consent');
|
|
56
|
+
// ── list ────────────────────────────────────────────────────────────────
|
|
57
|
+
cap
|
|
58
|
+
.command('list')
|
|
59
|
+
.description('Show the project platform + enabled drivers + the available driver catalog')
|
|
60
|
+
.action(() => {
|
|
61
|
+
try {
|
|
62
|
+
const cwd = process.cwd();
|
|
63
|
+
const profile = (0, capability_1.readCapabilities)(cwd);
|
|
64
|
+
const catalog = (0, capability_1.loadDriverCatalog)();
|
|
65
|
+
console.log('\n━━━ Capabilities ━━━');
|
|
66
|
+
console.log(` platform: ${profile.platform ?? '(none — run `sungen capability add web|mobile`)'}`);
|
|
67
|
+
console.log(` enabled: ${profile.enabled.length ? profile.enabled.join(', ') : '(none)'} [${profile.source}]`);
|
|
68
|
+
console.log('\n Available drivers (install with `sungen capability add <id>`):');
|
|
69
|
+
for (const d of Object.values(catalog)) {
|
|
70
|
+
const on = profile.enabled.includes(d.id) ? '●' : '○';
|
|
71
|
+
const unblocks = d.unblocks?.length ? ` unblocks ${d.unblocks.join('/')}` : '';
|
|
72
|
+
console.log(` ${on} ${d.id.padEnd(13)} [${d.kind}] ${d.package}${unblocks}`);
|
|
73
|
+
}
|
|
74
|
+
console.log('');
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
console.error('Error:', e instanceof Error ? e.message : e);
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
// ── plan (Planner — recommend-only, no install) ──────────────────────────
|
|
82
|
+
cap
|
|
83
|
+
.command('plan')
|
|
84
|
+
.description('Capability Planner: classify execution modes + @manual reasons (M1–M9) + recommend drivers (no install)')
|
|
85
|
+
.requiredOption('-s, --screen <name>', 'Screen or flow name')
|
|
86
|
+
.option('--json', 'Output the raw plan JSON')
|
|
87
|
+
.action((o) => {
|
|
88
|
+
try {
|
|
89
|
+
const dir = findScreenDir(o.screen);
|
|
90
|
+
if (!dir)
|
|
91
|
+
throw new Error(`Screen/flow not found: qa/screens/${o.screen} or qa/flows/${o.screen}`);
|
|
92
|
+
const plan = (0, capability_plan_1.buildPlan)(dir, o.screen);
|
|
93
|
+
const outDir = path.join(process.cwd(), '.sungen', 'reports');
|
|
94
|
+
fs.mkdirSync(outDir, { recursive: true });
|
|
95
|
+
const outPath = path.join(outDir, `${o.screen}-plan.json`);
|
|
96
|
+
fs.writeFileSync(outPath, JSON.stringify(plan, null, 2), 'utf-8');
|
|
97
|
+
if (o.json) {
|
|
98
|
+
console.log(JSON.stringify(plan, null, 2));
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const L = console.log;
|
|
102
|
+
L(`\n━━━ Capability Plan: ${plan.screen} (${plan.total} scenarios) ━━━`);
|
|
103
|
+
L(` Execution modes: ${Object.entries(plan.modes).map(([m, n]) => `${m} ${n}`).join(' · ')}`);
|
|
104
|
+
const reasons = Object.entries(plan.byReason).sort().map(([c, n]) => `${c}×${n}`).join(' ') || '(no manual)';
|
|
105
|
+
L(` Manual by reason: ${reasons}`);
|
|
106
|
+
if (plan.modes['manual']) {
|
|
107
|
+
L(` capability-manual: ${plan.capabilityManual} (${plan.capabilityManualPct}%) judgment-manual: ${plan.judgmentManual} cross-screen→flow: ${plan.crossScreen}`);
|
|
108
|
+
}
|
|
109
|
+
if (plan.crossScreen) {
|
|
110
|
+
L(` Cross-screen (XS×${plan.crossScreen}): automate via a flow — \`/sungen:add-flow\` (not a single-screen driver gap).`);
|
|
111
|
+
}
|
|
112
|
+
if (plan.recommendations.length) {
|
|
113
|
+
L(' Recommendations (recommend-only — install with `sungen capability add`):');
|
|
114
|
+
for (const r of plan.recommendations) {
|
|
115
|
+
L(` • ${r.count} @manual:${r.reason} → enable \`${r.driver}\` (${r.pkg}) → would unblock ${r.count}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
if (plan.keep.length) {
|
|
119
|
+
L(` Keep manual (judgment floor — do NOT automate): ${plan.keep.map((k) => `${k.code}×${k.count} (${capability_plan_1.MANUAL_REASONS[k.code].label})`).join(', ')}`);
|
|
120
|
+
}
|
|
121
|
+
if (plan.unclassified.length) {
|
|
122
|
+
L(` ⚠ Unclassified (add @manual:Mx or a clearer reason): ${plan.unclassified.length}`);
|
|
123
|
+
for (const u of plan.unclassified.slice(0, 8))
|
|
124
|
+
L(` - ${u.name}`);
|
|
125
|
+
}
|
|
126
|
+
L(`\n Report: ${path.relative(process.cwd(), outPath)}\n`);
|
|
127
|
+
}
|
|
128
|
+
catch (e) {
|
|
129
|
+
console.error('Error:', e instanceof Error ? e.message : e);
|
|
130
|
+
process.exit(1);
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
// ── add (the consent action) ─────────────────────────────────────────────
|
|
134
|
+
cap
|
|
135
|
+
.command('add <driver>')
|
|
136
|
+
.description('Enable a driver: install its package (if external) + record it in qa/capabilities.yaml')
|
|
137
|
+
.option('--skip-install', 'Only record in the profile; do not run npm install')
|
|
138
|
+
.action((driver, o) => {
|
|
139
|
+
try {
|
|
140
|
+
const cwd = process.cwd();
|
|
141
|
+
const meta = (0, capability_1.driverMeta)(driver);
|
|
142
|
+
if (!meta) {
|
|
143
|
+
throw new Error(`Unknown driver "${driver}". Known: ${Object.keys((0, capability_1.loadDriverCatalog)()).join(', ')}`);
|
|
144
|
+
}
|
|
145
|
+
const adapterName = meta.adapter || meta.id;
|
|
146
|
+
const bundled = adapters_1.adapterRegistry.hasAdapter(adapterName); // e.g. `web` is bundled in Phase 2a
|
|
147
|
+
if (!bundled && !o.skipInstall) {
|
|
148
|
+
console.log(`📦 Installing ${meta.package} (dev dependency)...`);
|
|
149
|
+
const r = (0, child_process_1.spawnSync)('npm', ['install', '-D', meta.package], { stdio: 'inherit', shell: true });
|
|
150
|
+
if (r.status !== 0)
|
|
151
|
+
throw new Error(`npm install -D ${meta.package} failed.`);
|
|
152
|
+
}
|
|
153
|
+
else if (bundled) {
|
|
154
|
+
console.log(`✓ ${driver} is built-in (no install needed).`);
|
|
155
|
+
}
|
|
156
|
+
// Verify it can load (skip for bundled — already registered).
|
|
157
|
+
if (!bundled) {
|
|
158
|
+
adapters_1.adapterRegistry.loadDriver(adapterName, meta.package, cwd); // throws if not loadable
|
|
159
|
+
}
|
|
160
|
+
const profile = (0, capability_1.readCapabilities)(cwd);
|
|
161
|
+
const enabled = Array.from(new Set([...profile.enabled, driver]));
|
|
162
|
+
const platform = meta.kind === 'platform' ? driver : profile.platform;
|
|
163
|
+
(0, capability_1.writeCapabilities)(cwd, { platform, enabled });
|
|
164
|
+
console.log(`✓ capability "${driver}" enabled${meta.kind === 'platform' ? ` (platform=${driver})` : ''}.`);
|
|
165
|
+
console.log('');
|
|
166
|
+
}
|
|
167
|
+
catch (e) {
|
|
168
|
+
console.error('Error:', e instanceof Error ? e.message : e);
|
|
169
|
+
process.exit(1);
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
// ── remove ─────────────────────────────────────────────────────────────
|
|
173
|
+
cap
|
|
174
|
+
.command('remove <driver>')
|
|
175
|
+
.description('Disable a driver in qa/capabilities.yaml (optionally uninstall the package)')
|
|
176
|
+
.option('--uninstall', 'Also run npm uninstall for the driver package')
|
|
177
|
+
.action((driver, o) => {
|
|
178
|
+
try {
|
|
179
|
+
const cwd = process.cwd();
|
|
180
|
+
const profile = (0, capability_1.readCapabilities)(cwd);
|
|
181
|
+
const enabled = profile.enabled.filter((d) => d !== driver);
|
|
182
|
+
const platform = profile.platform === driver ? undefined : profile.platform;
|
|
183
|
+
(0, capability_1.writeCapabilities)(cwd, { platform, enabled });
|
|
184
|
+
const meta = (0, capability_1.driverMeta)(driver);
|
|
185
|
+
if (o.uninstall && meta && !adapters_1.adapterRegistry.hasAdapter(meta.adapter || meta.id)) {
|
|
186
|
+
(0, child_process_1.spawnSync)('npm', ['uninstall', meta.package], { stdio: 'inherit', shell: true });
|
|
187
|
+
}
|
|
188
|
+
console.log(`✓ capability "${driver}" disabled.`);
|
|
189
|
+
}
|
|
190
|
+
catch (e) {
|
|
191
|
+
console.error('Error:', e instanceof Error ? e.message : e);
|
|
192
|
+
process.exit(1);
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=capability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability.js","sourceRoot":"","sources":["../../../src/cli/commands/capability.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"challenge.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/challenge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyC/D"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.registerChallengeCommand = registerChallengeCommand;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const challenge_1 = require("../../harness/challenge");
|
|
40
|
+
function findScreenDir(name) {
|
|
41
|
+
const screen = path.join(process.cwd(), 'qa', 'screens', name);
|
|
42
|
+
if (fs.existsSync(screen))
|
|
43
|
+
return screen;
|
|
44
|
+
const flow = path.join(process.cwd(), 'qa', 'flows', name);
|
|
45
|
+
if (fs.existsSync(flow))
|
|
46
|
+
return flow;
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
function registerChallengeCommand(program) {
|
|
50
|
+
program
|
|
51
|
+
.command('challenge')
|
|
52
|
+
.description('Exploration mode (Loop 2): attack the existing suite for blind spots — advisory, never auto-merges')
|
|
53
|
+
.requiredOption('-s, --screen <name>', 'Screen or flow name')
|
|
54
|
+
.option('--json', 'Output the raw JSON report')
|
|
55
|
+
.action((o) => {
|
|
56
|
+
try {
|
|
57
|
+
const dir = findScreenDir(o.screen);
|
|
58
|
+
if (!dir)
|
|
59
|
+
throw new Error(`Screen/flow not found: qa/screens/${o.screen} or qa/flows/${o.screen}`);
|
|
60
|
+
const report = (0, challenge_1.buildChallenge)(dir, o.screen);
|
|
61
|
+
const outDir = path.join(process.cwd(), '.sungen', 'reports');
|
|
62
|
+
fs.mkdirSync(outDir, { recursive: true });
|
|
63
|
+
const md = (0, challenge_1.renderChallengeMarkdown)(report);
|
|
64
|
+
const outPath = path.join(outDir, `${o.screen}-challenge.md`);
|
|
65
|
+
fs.writeFileSync(outPath, md, 'utf-8');
|
|
66
|
+
if (o.json) {
|
|
67
|
+
console.log(JSON.stringify(report, null, 2));
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const L = console.log;
|
|
71
|
+
L(`\n━━━ Challenge (exploration mode): ${report.screen} ━━━`);
|
|
72
|
+
L(' Advisory — does NOT change the official suite; surfaces what production missed.\n');
|
|
73
|
+
L(' ① Depth — title claims a collection but asserts a single element');
|
|
74
|
+
if (report.collectionClaimSingular.length) {
|
|
75
|
+
for (const f of report.collectionClaimSingular)
|
|
76
|
+
L(` ⚠ ${f.scenario}\n → ${f.suggestion}`);
|
|
77
|
+
}
|
|
78
|
+
else
|
|
79
|
+
L(' ✓ none');
|
|
80
|
+
L(' ② Coverage — over-covered / shallow');
|
|
81
|
+
if (report.overCovered.length)
|
|
82
|
+
for (const o2 of report.overCovered)
|
|
83
|
+
L(` • ${o2.bucket}: ${o2.note}`);
|
|
84
|
+
if (report.shallowThemes.length)
|
|
85
|
+
L(` • shallow themes: ${report.shallowThemes.join(', ')}`);
|
|
86
|
+
if (!report.overCovered.length && !report.shallowThemes.length)
|
|
87
|
+
L(' ✓ balanced');
|
|
88
|
+
L(' ③ Novelty — prompts for the `sungen-challenge` agent (≤20% of official, no auto-merge)');
|
|
89
|
+
for (const p of report.noveltyPrompts)
|
|
90
|
+
L(` • ${p}`);
|
|
91
|
+
L(' ── Exploration readiness ──');
|
|
92
|
+
for (const e of report.explorationReadiness)
|
|
93
|
+
L(` • ${e}`);
|
|
94
|
+
L(`\n Report: ${path.relative(process.cwd(), outPath)}\n`);
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
console.error('Error:', error instanceof Error ? error.message : error);
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=challenge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"challenge.js","sourceRoot":"","sources":["../../../src/cli/commands/challenge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/feedback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0D9D"}
|