chati-dev 2.1.2 → 3.0.1
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 +95 -24
- package/bin/chati.js +1 -1
- package/framework/agents/build/dev.md +1 -0
- package/framework/agents/deploy/devops.md +1 -0
- package/framework/agents/discover/brief.md +1 -0
- package/framework/agents/discover/brownfield-wu.md +1 -0
- package/framework/agents/discover/greenfield-wu.md +1 -0
- package/framework/agents/plan/architect.md +1 -0
- package/framework/agents/plan/detail.md +1 -0
- package/framework/agents/plan/phases.md +3 -2
- package/framework/agents/plan/tasks.md +1 -0
- package/framework/agents/plan/ux.md +1 -0
- package/framework/agents/quality/qa-implementation.md +1 -0
- package/framework/agents/quality/qa-planning.md +1 -0
- package/framework/config.yaml +21 -2
- package/framework/constitution.md +67 -2
- package/framework/context/governance.md +16 -3
- package/framework/context/root.md +3 -3
- package/framework/data/entity-registry.yaml +1 -1
- package/framework/domains/agents/brownfield-wu.yaml +4 -0
- package/framework/domains/agents/detail.yaml +1 -1
- package/framework/domains/agents/dev.yaml +4 -0
- package/framework/domains/agents/orchestrator.yaml +8 -0
- package/framework/domains/agents/phases.yaml +2 -2
- package/framework/domains/agents/tasks.yaml +2 -2
- package/framework/domains/constitution.yaml +30 -2
- package/framework/domains/global.yaml +20 -0
- package/framework/hooks/model-governance.js +17 -15
- package/framework/hooks/read-protection.js +1 -0
- package/framework/i18n/en.yaml +11 -4
- package/framework/i18n/es.yaml +11 -4
- package/framework/i18n/fr.yaml +11 -4
- package/framework/i18n/pt.yaml +11 -4
- package/framework/intelligence/context-engine.md +31 -2
- package/framework/intelligence/decision-engine.md +1 -1
- package/framework/intelligence/memory-layer.md +17 -0
- package/framework/orchestrator/chati.md +94 -14
- package/framework/patterns/elicitation-library.yaml +2 -2
- package/framework/schemas/config.schema.json +44 -0
- package/framework/schemas/session.schema.json +27 -0
- package/framework/tasks/brownfield-wu-dependency-scan.md +1 -1
- package/framework/tasks/brownfield-wu-migration-plan.md +4 -4
- package/framework/tasks/brownfield-wu-risk-assess.md +2 -2
- package/framework/tasks/detail-expand-prd.md +2 -2
- package/framework/tasks/greenfield-wu-report.md +1 -1
- package/framework/tasks/orchestrator-handoff.md +2 -2
- package/framework/tasks/orchestrator-resume.md +1 -1
- package/framework/tasks/qa-impl-performance-test.md +2 -2
- package/framework/tasks/qa-impl-sast-scan.md +6 -6
- package/framework/tasks/qa-planning-consolidate.md +1 -1
- package/framework/tasks/qa-planning-coverage-plan.md +9 -9
- package/framework/tasks/qa-planning-gate-define.md +6 -6
- package/framework/tasks/qa-planning-risk-matrix.md +1 -1
- package/framework/tasks/tasks-consolidate.md +5 -5
- package/package.json +5 -1
- package/scripts/changelog-generator.js +2 -2
- package/scripts/ide-sync.js +9 -4
- package/scripts/pr-review.js +5 -5
- package/scripts/semantic-lint.js +3 -3
- package/src/autonomy/build-loop.js +194 -0
- package/src/autonomy/build-state.js +269 -0
- package/src/autonomy/execution-profile.js +151 -0
- package/src/config/context-file-generator.js +203 -0
- package/src/config/ide-configs.js +6 -6
- package/src/gates/g2-qa-planning.js +4 -2
- package/src/gates/g4-qa-implementation.js +5 -2
- package/src/gates/gate-base.js +33 -1
- package/src/health/engine.js +245 -0
- package/src/installer/core.js +54 -16
- package/src/installer/templates.js +131 -2
- package/src/installer/validator.js +5 -3
- package/src/intelligence/file-tracker.js +117 -0
- package/src/intelligence/registry-manager.js +2 -2
- package/src/intelligence/timeline.js +144 -0
- package/src/memory/gotchas-auto-capture.js +253 -0
- package/src/preview/detector.js +1 -1
- package/src/terminal/adapters/claude-adapter.js +33 -0
- package/src/terminal/adapters/codex-adapter.js +31 -0
- package/src/terminal/adapters/copilot-adapter.js +28 -0
- package/src/terminal/adapters/gemini-adapter.js +28 -0
- package/src/terminal/adapters/index.js +8 -0
- package/src/terminal/cli-registry.js +190 -0
- package/src/terminal/prompt-builder.js +9 -20
- package/src/terminal/run-agent.js +2 -1
- package/src/terminal/spawner.js +44 -14
- package/src/terminal/wave-analyzer.js +143 -0
- package/src/utils/config-parser.js +97 -0
- package/src/wizard/feedback.js +1 -1
- package/src/wizard/i18n.js +11 -4
- package/src/wizard/index.js +22 -10
- package/src/wizard/questions.js +50 -2
- package/framework/manifest.json +0 -5
- package/framework/manifest.sig +0 -1
- /package/assets/{logo - co/314/201pia.png" → logo - c/303/263pia.png"} +0 -0
- /package/assets/{logo - co/314/201pia.svg" → logo - c/303/263pia.svg"} +0 -0
package/src/wizard/index.js
CHANGED
|
@@ -3,7 +3,7 @@ import { readFileSync } from 'fs';
|
|
|
3
3
|
import { join, dirname, basename } from 'path';
|
|
4
4
|
import { fileURLToPath } from 'url';
|
|
5
5
|
import { logBanner } from '../utils/logger.js';
|
|
6
|
-
import { stepLanguage, stepProjectType, stepConfirmation } from './questions.js';
|
|
6
|
+
import { stepLanguage, stepProjectType, stepLlmProvider, stepConfirmation } from './questions.js';
|
|
7
7
|
import { createSpinner, showStep, showValidation, showQuickStart } from './feedback.js';
|
|
8
8
|
import { installFramework } from '../installer/core.js';
|
|
9
9
|
import { validateInstallation } from '../installer/validator.js';
|
|
@@ -35,16 +35,20 @@ export async function runWizard(targetDir, options = {}) {
|
|
|
35
35
|
// Step 2: Project Type
|
|
36
36
|
const projectType = options.projectType || await stepProjectType(targetDir);
|
|
37
37
|
|
|
38
|
+
// Step 3: LLM Provider
|
|
39
|
+
const llmProvider = options.llmProvider || await stepLlmProvider();
|
|
40
|
+
|
|
38
41
|
// Auto-configured: Claude Code + default MCPs
|
|
39
42
|
const selectedIDEs = options.ides || ['claude-code'];
|
|
40
43
|
const selectedMCPs = options.mcps || DEFAULT_MCPS;
|
|
41
44
|
|
|
42
|
-
// Step
|
|
45
|
+
// Step 4: Confirmation
|
|
43
46
|
const projectName = basename(targetDir);
|
|
44
47
|
const config = {
|
|
45
48
|
projectName,
|
|
46
49
|
projectType,
|
|
47
50
|
language,
|
|
51
|
+
llmProvider,
|
|
48
52
|
selectedIDEs,
|
|
49
53
|
selectedMCPs,
|
|
50
54
|
targetDir,
|
|
@@ -53,7 +57,7 @@ export async function runWizard(targetDir, options = {}) {
|
|
|
53
57
|
|
|
54
58
|
await stepConfirmation(config);
|
|
55
59
|
|
|
56
|
-
// Step
|
|
60
|
+
// Step 5: Installation + Validation
|
|
57
61
|
console.log();
|
|
58
62
|
const installSpinner = createSpinner(t('installer.installing'));
|
|
59
63
|
installSpinner.start();
|
|
@@ -80,14 +84,21 @@ export async function runWizard(targetDir, options = {}) {
|
|
|
80
84
|
const validation = await validateInstallation(targetDir);
|
|
81
85
|
validateSpinner.stop();
|
|
82
86
|
|
|
83
|
-
|
|
87
|
+
// Show validation results based on actual checks
|
|
88
|
+
if (validation.agents?.pass) showValidation(t('installer.agents_valid'));
|
|
89
|
+
if (validation.constitution?.pass) showValidation(t('installer.constitution_ok'));
|
|
90
|
+
if (validation.intelligence?.pass) showValidation(t('installer.intelligence_valid'));
|
|
91
|
+
if (validation.registry?.pass) showValidation(t('installer.registry_valid'));
|
|
92
|
+
if (validation.memories?.pass) showValidation(t('installer.memories_valid'));
|
|
93
|
+
if (validation.session?.pass) showValidation(t('installer.session_ok'));
|
|
84
94
|
showValidation(t('installer.handoff_ok'));
|
|
85
95
|
showValidation(t('installer.validation_ok'));
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
96
|
+
|
|
97
|
+
// Warn if any checks failed
|
|
98
|
+
if (validation.passed < validation.total) {
|
|
99
|
+
const failed = validation.total - validation.passed;
|
|
100
|
+
p.log.warn(`${failed} validation check(s) did not pass. Run 'npx chati-dev health' for details.`);
|
|
101
|
+
}
|
|
91
102
|
|
|
92
103
|
console.log();
|
|
93
104
|
p.outro(t('installer.success'));
|
|
@@ -101,7 +112,8 @@ export async function runWizard(targetDir, options = {}) {
|
|
|
101
112
|
return { success: true, config, validation };
|
|
102
113
|
} catch (err) {
|
|
103
114
|
installSpinner.stop();
|
|
104
|
-
|
|
115
|
+
const phase = err.message?.includes('validat') ? 'Validation' : 'Installation';
|
|
116
|
+
p.cancel(`${phase} failed: ${err.message}`);
|
|
105
117
|
return { success: false, error: err.message };
|
|
106
118
|
}
|
|
107
119
|
}
|
package/src/wizard/questions.js
CHANGED
|
@@ -3,6 +3,7 @@ import { t, SUPPORTED_LANGUAGES, loadLanguage } from './i18n.js';
|
|
|
3
3
|
import { detectProjectType } from '../utils/detector.js';
|
|
4
4
|
import { showSummary, showChecklist } from './feedback.js';
|
|
5
5
|
import { brand, dim, success } from '../utils/colors.js';
|
|
6
|
+
import { isProviderAvailable } from '../terminal/cli-registry.js';
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* Step 1: Language Selection (always in English)
|
|
@@ -58,12 +59,58 @@ export async function stepProjectType(targetDir) {
|
|
|
58
59
|
}
|
|
59
60
|
|
|
60
61
|
/**
|
|
61
|
-
* Step 3:
|
|
62
|
+
* Step 3: LLM Provider Selection
|
|
63
|
+
*/
|
|
64
|
+
export async function stepLlmProvider() {
|
|
65
|
+
const providers = [
|
|
66
|
+
{ name: 'claude', label: t('installer.llm_provider_claude') },
|
|
67
|
+
{ name: 'gemini', label: t('installer.llm_provider_gemini') },
|
|
68
|
+
{ name: 'codex', label: t('installer.llm_provider_codex') },
|
|
69
|
+
{ name: 'copilot', label: t('installer.llm_provider_copilot') },
|
|
70
|
+
];
|
|
71
|
+
|
|
72
|
+
// Check availability of each provider
|
|
73
|
+
const availability = {};
|
|
74
|
+
for (const prov of providers) {
|
|
75
|
+
try {
|
|
76
|
+
availability[prov.name] = await isProviderAvailable(prov.name);
|
|
77
|
+
} catch {
|
|
78
|
+
availability[prov.name] = prov.name === 'claude'; // claude always available
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const options = providers.map(prov => {
|
|
83
|
+
const installed = availability[prov.name];
|
|
84
|
+
const suffix = installed ? '' : ` ${dim(t('installer.llm_provider_not_installed'))}`;
|
|
85
|
+
return {
|
|
86
|
+
value: prov.name,
|
|
87
|
+
label: `${prov.label}${suffix}`,
|
|
88
|
+
};
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
const provider = await p.select({
|
|
92
|
+
message: t('installer.llm_provider_title'),
|
|
93
|
+
options,
|
|
94
|
+
initialValue: 'claude',
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
if (p.isCancel(provider)) {
|
|
98
|
+
p.cancel('Installation cancelled.');
|
|
99
|
+
process.exit(0);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return provider;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Step 4: Confirmation
|
|
62
107
|
*/
|
|
63
108
|
export async function stepConfirmation(config) {
|
|
64
|
-
const { projectName, projectType, language, selectedMCPs } = config;
|
|
109
|
+
const { projectName, projectType, language, llmProvider, selectedMCPs } = config;
|
|
65
110
|
|
|
66
111
|
const langName = SUPPORTED_LANGUAGES.find(l => l.value === language)?.label || language;
|
|
112
|
+
const providerNames = { claude: 'Claude (Anthropic)', gemini: 'Gemini (Google)', codex: 'Codex (OpenAI)', copilot: 'Copilot (GitHub)' };
|
|
113
|
+
const providerDisplay = providerNames[llmProvider] || llmProvider;
|
|
67
114
|
const ideNames = 'Claude Code (auto-configured)';
|
|
68
115
|
const mcpNames = selectedMCPs.length > 0
|
|
69
116
|
? `${selectedMCPs.join(', ')} (auto-installed)`
|
|
@@ -74,6 +121,7 @@ export async function stepConfirmation(config) {
|
|
|
74
121
|
showSummary({
|
|
75
122
|
[t('installer.project_label')]: `${projectName} (${projectType === 'greenfield' ? 'Greenfield' : 'Brownfield'})`,
|
|
76
123
|
[t('installer.language_label')]: langName,
|
|
124
|
+
[t('installer.llm_provider_label')]: providerDisplay,
|
|
77
125
|
[t('installer.ides_label')]: ideNames,
|
|
78
126
|
[t('installer.mcps_label')]: mcpNames,
|
|
79
127
|
});
|
package/framework/manifest.json
DELETED
package/framework/manifest.sig
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
Wjy+M0Wcyt+KTzRu0E4fc8sB97cTe7ye+qEtNGq/av7AzcB2GsSNlwrOhfMV64ukMBHSrBMQ995sDbTtzNKADA==
|
|
File without changes
|
|
File without changes
|