popeye-cli 1.2.1 → 1.3.0
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/.env.example +4 -1
- package/CONTRIBUTING.md +10 -0
- package/README.md +111 -2
- package/dist/adapters/claude.d.ts +3 -2
- package/dist/adapters/claude.d.ts.map +1 -1
- package/dist/adapters/claude.js +214 -0
- package/dist/adapters/claude.js.map +1 -1
- package/dist/adapters/grok.d.ts +2 -1
- package/dist/adapters/grok.d.ts.map +1 -1
- package/dist/adapters/grok.js.map +1 -1
- package/dist/adapters/index.d.ts +8 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +12 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/openai.d.ts +2 -2
- package/dist/adapters/openai.d.ts.map +1 -1
- package/dist/adapters/openai.js.map +1 -1
- package/dist/cli/commands/create.d.ts.map +1 -1
- package/dist/cli/commands/create.js +25 -5
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/interactive.d.ts.map +1 -1
- package/dist/cli/interactive.js +47 -6
- package/dist/cli/interactive.js.map +1 -1
- package/dist/generators/all.d.ts +40 -0
- package/dist/generators/all.d.ts.map +1 -0
- package/dist/generators/all.js +826 -0
- package/dist/generators/all.js.map +1 -0
- package/dist/generators/fullstack.d.ts +9 -0
- package/dist/generators/fullstack.d.ts.map +1 -1
- package/dist/generators/fullstack.js.map +1 -1
- package/dist/generators/index.d.ts +3 -1
- package/dist/generators/index.d.ts.map +1 -1
- package/dist/generators/index.js +33 -0
- package/dist/generators/index.js.map +1 -1
- package/dist/generators/templates/index.d.ts +2 -0
- package/dist/generators/templates/index.d.ts.map +1 -1
- package/dist/generators/templates/index.js +2 -0
- package/dist/generators/templates/index.js.map +1 -1
- package/dist/generators/templates/website.d.ts +85 -0
- package/dist/generators/templates/website.d.ts.map +1 -0
- package/dist/generators/templates/website.js +877 -0
- package/dist/generators/templates/website.js.map +1 -0
- package/dist/generators/website.d.ts +56 -0
- package/dist/generators/website.d.ts.map +1 -0
- package/dist/generators/website.js +269 -0
- package/dist/generators/website.js.map +1 -0
- package/dist/types/consensus.d.ts +8 -3
- package/dist/types/consensus.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -2
- package/dist/types/index.js.map +1 -1
- package/dist/types/project.d.ts +115 -1
- package/dist/types/project.d.ts.map +1 -1
- package/dist/types/project.js +41 -1
- package/dist/types/project.js.map +1 -1
- package/dist/workflow/consensus.d.ts +2 -1
- package/dist/workflow/consensus.d.ts.map +1 -1
- package/dist/workflow/consensus.js.map +1 -1
- package/dist/workflow/index.d.ts +6 -0
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +8 -0
- package/dist/workflow/index.js.map +1 -1
- package/dist/workflow/plan-mode.d.ts +3 -3
- package/dist/workflow/plan-mode.d.ts.map +1 -1
- package/dist/workflow/plan-mode.js.map +1 -1
- package/dist/workflow/plan-parser.d.ts +97 -0
- package/dist/workflow/plan-parser.d.ts.map +1 -0
- package/dist/workflow/plan-parser.js +235 -0
- package/dist/workflow/plan-parser.js.map +1 -0
- package/dist/workflow/plan-storage.d.ts +40 -12
- package/dist/workflow/plan-storage.d.ts.map +1 -1
- package/dist/workflow/plan-storage.js +47 -20
- package/dist/workflow/plan-storage.js.map +1 -1
- package/dist/workflow/seo-tests.d.ts +43 -0
- package/dist/workflow/seo-tests.d.ts.map +1 -0
- package/dist/workflow/seo-tests.js +192 -0
- package/dist/workflow/seo-tests.js.map +1 -0
- package/dist/workflow/separation-guard.d.ts +35 -0
- package/dist/workflow/separation-guard.d.ts.map +1 -0
- package/dist/workflow/separation-guard.js +154 -0
- package/dist/workflow/separation-guard.js.map +1 -0
- package/dist/workflow/test-runner.d.ts.map +1 -1
- package/dist/workflow/test-runner.js +128 -0
- package/dist/workflow/test-runner.js.map +1 -1
- package/dist/workflow/workspace-manager.d.ts +31 -20
- package/dist/workflow/workspace-manager.d.ts.map +1 -1
- package/dist/workflow/workspace-manager.js +38 -9
- package/dist/workflow/workspace-manager.js.map +1 -1
- package/package.json +1 -1
- package/src/adapters/claude.ts +221 -4
- package/src/adapters/grok.ts +2 -1
- package/src/adapters/index.ts +15 -0
- package/src/adapters/openai.ts +2 -2
- package/src/cli/commands/create.ts +25 -5
- package/src/cli/interactive.ts +47 -6
- package/src/generators/all.ts +897 -0
- package/src/generators/fullstack.ts +10 -0
- package/src/generators/index.ts +54 -0
- package/src/generators/templates/index.ts +2 -0
- package/src/generators/templates/website.ts +906 -0
- package/src/generators/website.ts +350 -0
- package/src/types/consensus.ts +9 -3
- package/src/types/index.ts +33 -0
- package/src/types/project.ts +139 -2
- package/src/workflow/consensus.ts +3 -2
- package/src/workflow/index.ts +8 -0
- package/src/workflow/plan-mode.ts +3 -3
- package/src/workflow/plan-parser.ts +317 -0
- package/src/workflow/plan-storage.ts +69 -30
- package/src/workflow/seo-tests.ts +246 -0
- package/src/workflow/separation-guard.ts +200 -0
- package/src/workflow/test-runner.ts +149 -0
- package/src/workflow/workspace-manager.ts +68 -31
package/src/cli/interactive.ts
CHANGED
|
@@ -302,7 +302,12 @@ function drawInputBoxTop(state: SessionState): void {
|
|
|
302
302
|
|
|
303
303
|
// Hints line (above the box)
|
|
304
304
|
const hints = [
|
|
305
|
-
theme.dim('/lang ') +
|
|
305
|
+
theme.dim('/lang ') +
|
|
306
|
+
theme.primary('be') + theme.dim('|') +
|
|
307
|
+
theme.primary('fe') + theme.dim('|') +
|
|
308
|
+
theme.primary('fs') + theme.dim('|') +
|
|
309
|
+
theme.primary('web') + theme.dim('|') +
|
|
310
|
+
theme.primary('all'),
|
|
306
311
|
theme.dim('/config'),
|
|
307
312
|
theme.dim('/help'),
|
|
308
313
|
theme.dim('/exit'),
|
|
@@ -310,7 +315,14 @@ function drawInputBoxTop(state: SessionState): void {
|
|
|
310
315
|
console.log(' ' + hints.join(' '));
|
|
311
316
|
|
|
312
317
|
// Status items for the top line
|
|
313
|
-
const
|
|
318
|
+
const langShortcuts: Record<OutputLanguage, string> = {
|
|
319
|
+
python: 'be',
|
|
320
|
+
typescript: 'fe',
|
|
321
|
+
fullstack: 'fs',
|
|
322
|
+
website: 'web',
|
|
323
|
+
all: 'all',
|
|
324
|
+
};
|
|
325
|
+
const langStatus = langShortcuts[state.language] || state.language;
|
|
314
326
|
const reviewerStatus = state.reviewer === 'openai' ? 'O' : state.reviewer === 'grok' ? 'X' : 'G';
|
|
315
327
|
const arbitratorStatus = state.enableArbitration
|
|
316
328
|
? (state.arbitrator === 'openai' ? 'O' : state.arbitrator === 'grok' ? 'X' : 'G')
|
|
@@ -1046,12 +1058,24 @@ async function handleConfig(state: SessionState, args: string[] = []): Promise<v
|
|
|
1046
1058
|
if (args.length > 1) {
|
|
1047
1059
|
// Map shortcuts to full language names
|
|
1048
1060
|
const langAliases: Record<string, OutputLanguage> = {
|
|
1061
|
+
// Backend aliases
|
|
1049
1062
|
'py': 'python',
|
|
1050
1063
|
'python': 'python',
|
|
1064
|
+
'be': 'python',
|
|
1065
|
+
'backend': 'python',
|
|
1066
|
+
// Frontend aliases
|
|
1051
1067
|
'ts': 'typescript',
|
|
1052
1068
|
'typescript': 'typescript',
|
|
1069
|
+
'fe': 'typescript',
|
|
1070
|
+
'frontend': 'typescript',
|
|
1071
|
+
// Fullstack aliases
|
|
1053
1072
|
'fs': 'fullstack',
|
|
1054
1073
|
'fullstack': 'fullstack',
|
|
1074
|
+
// Website aliases
|
|
1075
|
+
'web': 'website',
|
|
1076
|
+
'website': 'website',
|
|
1077
|
+
// All aliases
|
|
1078
|
+
'all': 'all',
|
|
1055
1079
|
};
|
|
1056
1080
|
const input = args[1].toLowerCase();
|
|
1057
1081
|
const lang = langAliases[input];
|
|
@@ -1059,7 +1083,7 @@ async function handleConfig(state: SessionState, args: string[] = []): Promise<v
|
|
|
1059
1083
|
state.language = lang;
|
|
1060
1084
|
printSuccess(`Language set to ${lang}`);
|
|
1061
1085
|
} else {
|
|
1062
|
-
printError('Invalid language. Use:
|
|
1086
|
+
printError('Invalid language. Use: be, fe, fs, web, all (or python, typescript, fullstack, website, all)');
|
|
1063
1087
|
}
|
|
1064
1088
|
} else {
|
|
1065
1089
|
printKeyValue('Language', state.language);
|
|
@@ -1098,7 +1122,7 @@ async function handleConfig(state: SessionState, args: string[] = []): Promise<v
|
|
|
1098
1122
|
console.log(theme.secondary(' Change settings:'));
|
|
1099
1123
|
console.log(theme.dim(' /config reviewer <openai|gemini|grok>'));
|
|
1100
1124
|
console.log(theme.dim(' /config arbitrator <openai|gemini|grok|off>'));
|
|
1101
|
-
console.log(theme.dim(' /config language <
|
|
1125
|
+
console.log(theme.dim(' /config language <be|fe|fs|web|all>'));
|
|
1102
1126
|
console.log();
|
|
1103
1127
|
}
|
|
1104
1128
|
|
|
@@ -1109,25 +1133,42 @@ function handleLanguage(args: string[], state: SessionState): void {
|
|
|
1109
1133
|
if (args.length === 0) {
|
|
1110
1134
|
console.log();
|
|
1111
1135
|
printKeyValue('Current language', state.language);
|
|
1112
|
-
printInfo('Use /language <
|
|
1136
|
+
printInfo('Use /language <be|fe|fs|web|all> to change');
|
|
1137
|
+
console.log(theme.dim(' be/backend - Python (FastAPI)'));
|
|
1138
|
+
console.log(theme.dim(' fe/frontend - TypeScript (React/Vite)'));
|
|
1139
|
+
console.log(theme.dim(' fs/fullstack - FE + BE monorepo'));
|
|
1140
|
+
console.log(theme.dim(' web/website - Next.js marketing site'));
|
|
1141
|
+
console.log(theme.dim(' all - FE + BE + Website'));
|
|
1113
1142
|
return;
|
|
1114
1143
|
}
|
|
1115
1144
|
|
|
1116
1145
|
// Map shortcuts to full language names
|
|
1117
1146
|
const langAliases: Record<string, OutputLanguage> = {
|
|
1147
|
+
// Backend aliases
|
|
1118
1148
|
'py': 'python',
|
|
1119
1149
|
'python': 'python',
|
|
1150
|
+
'be': 'python',
|
|
1151
|
+
'backend': 'python',
|
|
1152
|
+
// Frontend aliases
|
|
1120
1153
|
'ts': 'typescript',
|
|
1121
1154
|
'typescript': 'typescript',
|
|
1155
|
+
'fe': 'typescript',
|
|
1156
|
+
'frontend': 'typescript',
|
|
1157
|
+
// Fullstack aliases
|
|
1122
1158
|
'fs': 'fullstack',
|
|
1123
1159
|
'fullstack': 'fullstack',
|
|
1160
|
+
// Website aliases
|
|
1161
|
+
'web': 'website',
|
|
1162
|
+
'website': 'website',
|
|
1163
|
+
// All aliases
|
|
1164
|
+
'all': 'all',
|
|
1124
1165
|
};
|
|
1125
1166
|
|
|
1126
1167
|
const input = args[0].toLowerCase();
|
|
1127
1168
|
const lang = langAliases[input];
|
|
1128
1169
|
|
|
1129
1170
|
if (!lang) {
|
|
1130
|
-
printError('Invalid language. Use:
|
|
1171
|
+
printError('Invalid language. Use: be, fe, fs, web, all');
|
|
1131
1172
|
return;
|
|
1132
1173
|
}
|
|
1133
1174
|
|