popeye-cli 1.0.1 → 1.2.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 +24 -1
- package/CONTRIBUTING.md +275 -0
- package/OPEN_SOURCE_MANIFESTO.md +172 -0
- package/README.md +832 -123
- package/dist/adapters/claude.d.ts +19 -4
- package/dist/adapters/claude.d.ts.map +1 -1
- package/dist/adapters/claude.js +908 -42
- package/dist/adapters/claude.js.map +1 -1
- package/dist/adapters/gemini.d.ts +55 -0
- package/dist/adapters/gemini.d.ts.map +1 -0
- package/dist/adapters/gemini.js +318 -0
- package/dist/adapters/gemini.js.map +1 -0
- package/dist/adapters/grok.d.ts +73 -0
- package/dist/adapters/grok.d.ts.map +1 -0
- package/dist/adapters/grok.js +430 -0
- package/dist/adapters/grok.js.map +1 -0
- package/dist/adapters/openai.d.ts +1 -1
- package/dist/adapters/openai.d.ts.map +1 -1
- package/dist/adapters/openai.js +47 -8
- package/dist/adapters/openai.js.map +1 -1
- package/dist/auth/claude.d.ts +11 -9
- package/dist/auth/claude.d.ts.map +1 -1
- package/dist/auth/claude.js +107 -71
- package/dist/auth/claude.js.map +1 -1
- package/dist/auth/gemini.d.ts +58 -0
- package/dist/auth/gemini.d.ts.map +1 -0
- package/dist/auth/gemini.js +172 -0
- package/dist/auth/gemini.js.map +1 -0
- package/dist/auth/grok.d.ts +73 -0
- package/dist/auth/grok.d.ts.map +1 -0
- package/dist/auth/grok.js +211 -0
- package/dist/auth/grok.js.map +1 -0
- package/dist/auth/index.d.ts +14 -7
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +41 -6
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/keychain.d.ts +20 -7
- package/dist/auth/keychain.d.ts.map +1 -1
- package/dist/auth/keychain.js +85 -29
- package/dist/auth/keychain.js.map +1 -1
- package/dist/auth/openai.d.ts +2 -2
- package/dist/auth/openai.d.ts.map +1 -1
- package/dist/auth/openai.js +30 -32
- package/dist/auth/openai.js.map +1 -1
- package/dist/cli/commands/auth.d.ts +1 -1
- package/dist/cli/commands/auth.d.ts.map +1 -1
- package/dist/cli/commands/auth.js +79 -8
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/commands/create.d.ts.map +1 -1
- package/dist/cli/commands/create.js +15 -4
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/interactive.d.ts.map +1 -1
- package/dist/cli/interactive.js +1494 -114
- package/dist/cli/interactive.js.map +1 -1
- package/dist/config/defaults.d.ts +9 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +19 -2
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/index.d.ts +19 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +33 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/schema.d.ts +47 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +29 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/generators/fullstack.d.ts +32 -0
- package/dist/generators/fullstack.d.ts.map +1 -0
- package/dist/generators/fullstack.js +497 -0
- package/dist/generators/fullstack.js.map +1 -0
- package/dist/generators/index.d.ts +4 -3
- package/dist/generators/index.d.ts.map +1 -1
- package/dist/generators/index.js +15 -1
- package/dist/generators/index.js.map +1 -1
- package/dist/generators/python.d.ts +17 -1
- package/dist/generators/python.d.ts.map +1 -1
- package/dist/generators/python.js +34 -20
- package/dist/generators/python.js.map +1 -1
- package/dist/generators/templates/fullstack.d.ts +113 -0
- package/dist/generators/templates/fullstack.d.ts.map +1 -0
- package/dist/generators/templates/fullstack.js +1004 -0
- package/dist/generators/templates/fullstack.js.map +1 -0
- package/dist/generators/typescript.d.ts +19 -1
- package/dist/generators/typescript.d.ts.map +1 -1
- package/dist/generators/typescript.js +37 -20
- package/dist/generators/typescript.js.map +1 -1
- package/dist/state/index.d.ts +108 -0
- package/dist/state/index.d.ts.map +1 -1
- package/dist/state/index.js +551 -4
- package/dist/state/index.js.map +1 -1
- package/dist/state/registry.d.ts +52 -0
- package/dist/state/registry.d.ts.map +1 -0
- package/dist/state/registry.js +215 -0
- package/dist/state/registry.js.map +1 -0
- package/dist/types/cli.d.ts +8 -0
- package/dist/types/cli.d.ts.map +1 -1
- package/dist/types/cli.js.map +1 -1
- package/dist/types/consensus.d.ts +186 -4
- package/dist/types/consensus.d.ts.map +1 -1
- package/dist/types/consensus.js +35 -3
- package/dist/types/consensus.js.map +1 -1
- package/dist/types/project.d.ts +76 -0
- package/dist/types/project.d.ts.map +1 -1
- package/dist/types/project.js +1 -1
- package/dist/types/project.js.map +1 -1
- package/dist/types/workflow.d.ts +217 -16
- package/dist/types/workflow.d.ts.map +1 -1
- package/dist/types/workflow.js +40 -1
- package/dist/types/workflow.js.map +1 -1
- package/dist/workflow/auto-fix.d.ts +45 -0
- package/dist/workflow/auto-fix.d.ts.map +1 -0
- package/dist/workflow/auto-fix.js +274 -0
- package/dist/workflow/auto-fix.js.map +1 -0
- package/dist/workflow/consensus.d.ts +70 -2
- package/dist/workflow/consensus.d.ts.map +1 -1
- package/dist/workflow/consensus.js +872 -17
- package/dist/workflow/consensus.js.map +1 -1
- package/dist/workflow/execution-mode.d.ts +10 -4
- package/dist/workflow/execution-mode.d.ts.map +1 -1
- package/dist/workflow/execution-mode.js +547 -58
- package/dist/workflow/execution-mode.js.map +1 -1
- package/dist/workflow/index.d.ts +14 -2
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +69 -6
- package/dist/workflow/index.js.map +1 -1
- package/dist/workflow/milestone-workflow.d.ts +34 -0
- package/dist/workflow/milestone-workflow.d.ts.map +1 -0
- package/dist/workflow/milestone-workflow.js +414 -0
- package/dist/workflow/milestone-workflow.js.map +1 -0
- package/dist/workflow/plan-mode.d.ts +80 -3
- package/dist/workflow/plan-mode.d.ts.map +1 -1
- package/dist/workflow/plan-mode.js +767 -49
- package/dist/workflow/plan-mode.js.map +1 -1
- package/dist/workflow/plan-storage.d.ts +386 -0
- package/dist/workflow/plan-storage.d.ts.map +1 -0
- package/dist/workflow/plan-storage.js +878 -0
- package/dist/workflow/plan-storage.js.map +1 -0
- package/dist/workflow/project-verification.d.ts +37 -0
- package/dist/workflow/project-verification.d.ts.map +1 -0
- package/dist/workflow/project-verification.js +381 -0
- package/dist/workflow/project-verification.js.map +1 -0
- package/dist/workflow/task-workflow.d.ts +37 -0
- package/dist/workflow/task-workflow.d.ts.map +1 -0
- package/dist/workflow/task-workflow.js +386 -0
- package/dist/workflow/task-workflow.js.map +1 -0
- package/dist/workflow/test-runner.d.ts +9 -0
- package/dist/workflow/test-runner.d.ts.map +1 -1
- package/dist/workflow/test-runner.js +101 -5
- package/dist/workflow/test-runner.js.map +1 -1
- package/dist/workflow/ui-designer.d.ts +82 -0
- package/dist/workflow/ui-designer.d.ts.map +1 -0
- package/dist/workflow/ui-designer.js +234 -0
- package/dist/workflow/ui-designer.js.map +1 -0
- package/dist/workflow/ui-setup.d.ts +58 -0
- package/dist/workflow/ui-setup.d.ts.map +1 -0
- package/dist/workflow/ui-setup.js +685 -0
- package/dist/workflow/ui-setup.js.map +1 -0
- package/dist/workflow/ui-verification.d.ts +114 -0
- package/dist/workflow/ui-verification.d.ts.map +1 -0
- package/dist/workflow/ui-verification.js +258 -0
- package/dist/workflow/ui-verification.js.map +1 -0
- package/dist/workflow/workflow-logger.d.ts +110 -0
- package/dist/workflow/workflow-logger.d.ts.map +1 -0
- package/dist/workflow/workflow-logger.js +267 -0
- package/dist/workflow/workflow-logger.js.map +1 -0
- package/dist/workflow/workspace-manager.d.ts +342 -0
- package/dist/workflow/workspace-manager.d.ts.map +1 -0
- package/dist/workflow/workspace-manager.js +733 -0
- package/dist/workflow/workspace-manager.js.map +1 -0
- package/package.json +2 -2
- package/src/adapters/claude.ts +1067 -47
- package/src/adapters/gemini.ts +373 -0
- package/src/adapters/grok.ts +492 -0
- package/src/adapters/openai.ts +48 -9
- package/src/auth/claude.ts +120 -78
- package/src/auth/gemini.ts +207 -0
- package/src/auth/grok.ts +255 -0
- package/src/auth/index.ts +47 -9
- package/src/auth/keychain.ts +95 -28
- package/src/auth/openai.ts +29 -36
- package/src/cli/commands/auth.ts +89 -10
- package/src/cli/commands/create.ts +13 -4
- package/src/cli/interactive.ts +1774 -142
- package/src/config/defaults.ts +19 -2
- package/src/config/index.ts +36 -1
- package/src/config/schema.ts +30 -1
- package/src/generators/fullstack.ts +551 -0
- package/src/generators/index.ts +25 -1
- package/src/generators/python.ts +65 -20
- package/src/generators/templates/fullstack.ts +1047 -0
- package/src/generators/typescript.ts +69 -20
- package/src/state/index.ts +713 -4
- package/src/state/registry.ts +278 -0
- package/src/types/cli.ts +8 -0
- package/src/types/consensus.ts +197 -6
- package/src/types/project.ts +82 -1
- package/src/types/workflow.ts +90 -1
- package/src/workflow/auto-fix.ts +340 -0
- package/src/workflow/consensus.ts +1180 -16
- package/src/workflow/execution-mode.ts +673 -74
- package/src/workflow/index.ts +95 -6
- package/src/workflow/milestone-workflow.ts +576 -0
- package/src/workflow/plan-mode.ts +924 -50
- package/src/workflow/plan-storage.ts +1282 -0
- package/src/workflow/project-verification.ts +471 -0
- package/src/workflow/task-workflow.ts +528 -0
- package/src/workflow/test-runner.ts +120 -5
- package/src/workflow/ui-designer.ts +337 -0
- package/src/workflow/ui-setup.ts +797 -0
- package/src/workflow/ui-verification.ts +357 -0
- package/src/workflow/workflow-logger.ts +353 -0
- package/src/workflow/workspace-manager.ts +912 -0
- package/tests/config/config.test.ts +1 -1
- package/tests/types/consensus.test.ts +3 -3
- package/tests/workflow/plan-mode.test.ts +213 -0
- package/tests/workflow/test-runner.test.ts +5 -3
package/src/config/defaults.ts
CHANGED
|
@@ -11,8 +11,11 @@ import type { Config } from './schema.js';
|
|
|
11
11
|
export const DEFAULT_CONFIG: Config = {
|
|
12
12
|
consensus: {
|
|
13
13
|
threshold: 95,
|
|
14
|
-
max_disagreements:
|
|
14
|
+
max_disagreements: 10,
|
|
15
15
|
escalation_action: 'pause',
|
|
16
|
+
reviewer: 'openai',
|
|
17
|
+
arbitrator: 'off',
|
|
18
|
+
enable_arbitration: false,
|
|
16
19
|
},
|
|
17
20
|
apis: {
|
|
18
21
|
openai: {
|
|
@@ -24,6 +27,12 @@ export const DEFAULT_CONFIG: Config = {
|
|
|
24
27
|
claude: {
|
|
25
28
|
model: 'claude-sonnet-4-20250514',
|
|
26
29
|
},
|
|
30
|
+
grok: {
|
|
31
|
+
model: 'grok-3',
|
|
32
|
+
temperature: 0.3,
|
|
33
|
+
max_tokens: 4096,
|
|
34
|
+
api_url: 'https://api.x.ai/v1',
|
|
35
|
+
},
|
|
27
36
|
},
|
|
28
37
|
project: {
|
|
29
38
|
default_language: 'python',
|
|
@@ -88,6 +97,8 @@ export const SERVICE_NAME = 'popeye-cli';
|
|
|
88
97
|
export const KEYCHAIN_ACCOUNTS = {
|
|
89
98
|
CLAUDE: 'claude-cli',
|
|
90
99
|
OPENAI: 'openai-api',
|
|
100
|
+
GEMINI: 'gemini-api',
|
|
101
|
+
GROK: 'grok-api',
|
|
91
102
|
} as const;
|
|
92
103
|
|
|
93
104
|
/**
|
|
@@ -96,8 +107,14 @@ export const KEYCHAIN_ACCOUNTS = {
|
|
|
96
107
|
export const ENV_VARS = {
|
|
97
108
|
OPENAI_KEY: 'POPEYE_OPENAI_KEY',
|
|
98
109
|
ANTHROPIC_KEY: 'POPEYE_ANTHROPIC_KEY',
|
|
110
|
+
GEMINI_KEY: 'POPEYE_GEMINI_KEY',
|
|
111
|
+
GROK_KEY: 'POPEYE_GROK_KEY',
|
|
99
112
|
DEFAULT_LANGUAGE: 'POPEYE_DEFAULT_LANGUAGE',
|
|
100
113
|
OPENAI_MODEL: 'POPEYE_OPENAI_MODEL',
|
|
114
|
+
GEMINI_MODEL: 'POPEYE_GEMINI_MODEL',
|
|
115
|
+
GROK_MODEL: 'POPEYE_GROK_MODEL',
|
|
116
|
+
CONSENSUS_REVIEWER: 'POPEYE_CONSENSUS_REVIEWER',
|
|
117
|
+
CONSENSUS_ARBITRATOR: 'POPEYE_CONSENSUS_ARBITRATOR',
|
|
101
118
|
CONSENSUS_THRESHOLD: 'POPEYE_CONSENSUS_THRESHOLD',
|
|
102
119
|
MAX_DISAGREEMENTS: 'POPEYE_MAX_DISAGREEMENTS',
|
|
103
120
|
LOG_LEVEL: 'POPEYE_LOG_LEVEL',
|
|
@@ -106,7 +123,7 @@ export const ENV_VARS = {
|
|
|
106
123
|
/**
|
|
107
124
|
* CLI version
|
|
108
125
|
*/
|
|
109
|
-
export const CLI_VERSION = '1.0.
|
|
126
|
+
export const CLI_VERSION = '1.0.2';
|
|
110
127
|
|
|
111
128
|
/**
|
|
112
129
|
* State file version
|
package/src/config/index.ts
CHANGED
|
@@ -86,12 +86,26 @@ function loadEnvConfig(): Partial<Config> {
|
|
|
86
86
|
model: openaiModel as Config['apis']['openai']['model'],
|
|
87
87
|
},
|
|
88
88
|
claude: DEFAULT_CONFIG.apis.claude,
|
|
89
|
+
grok: DEFAULT_CONFIG.apis.grok,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Grok model
|
|
94
|
+
const grokModel = process.env[ENV_VARS.GROK_MODEL];
|
|
95
|
+
if (grokModel) {
|
|
96
|
+
config.apis = {
|
|
97
|
+
...DEFAULT_CONFIG.apis,
|
|
98
|
+
...(config.apis || {}),
|
|
99
|
+
grok: {
|
|
100
|
+
...DEFAULT_CONFIG.apis.grok,
|
|
101
|
+
model: grokModel,
|
|
102
|
+
},
|
|
89
103
|
};
|
|
90
104
|
}
|
|
91
105
|
|
|
92
106
|
// Default language
|
|
93
107
|
const defaultLanguage = process.env[ENV_VARS.DEFAULT_LANGUAGE];
|
|
94
|
-
if (defaultLanguage && (defaultLanguage === 'python' || defaultLanguage === 'typescript')) {
|
|
108
|
+
if (defaultLanguage && (defaultLanguage === 'python' || defaultLanguage === 'typescript' || defaultLanguage === 'fullstack')) {
|
|
95
109
|
config.project = {
|
|
96
110
|
...DEFAULT_CONFIG.project,
|
|
97
111
|
default_language: defaultLanguage,
|
|
@@ -124,6 +138,27 @@ function loadEnvConfig(): Partial<Config> {
|
|
|
124
138
|
}
|
|
125
139
|
}
|
|
126
140
|
|
|
141
|
+
// Reviewer
|
|
142
|
+
const reviewer = process.env[ENV_VARS.CONSENSUS_REVIEWER];
|
|
143
|
+
if (reviewer && (reviewer === 'openai' || reviewer === 'gemini' || reviewer === 'grok')) {
|
|
144
|
+
config.consensus = {
|
|
145
|
+
...DEFAULT_CONFIG.consensus,
|
|
146
|
+
...(config.consensus || {}),
|
|
147
|
+
reviewer,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Arbitrator
|
|
152
|
+
const arbitrator = process.env[ENV_VARS.CONSENSUS_ARBITRATOR];
|
|
153
|
+
if (arbitrator && (arbitrator === 'openai' || arbitrator === 'gemini' || arbitrator === 'grok' || arbitrator === 'off')) {
|
|
154
|
+
config.consensus = {
|
|
155
|
+
...DEFAULT_CONFIG.consensus,
|
|
156
|
+
...(config.consensus || {}),
|
|
157
|
+
arbitrator,
|
|
158
|
+
enable_arbitration: arbitrator !== 'off',
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
|
|
127
162
|
// Verbose/log level
|
|
128
163
|
const logLevel = process.env[ENV_VARS.LOG_LEVEL];
|
|
129
164
|
if (logLevel === 'debug') {
|
package/src/config/schema.ts
CHANGED
|
@@ -12,6 +12,10 @@ export const ConsensusSettingsSchema = z.object({
|
|
|
12
12
|
threshold: z.number().min(0).max(100).default(95),
|
|
13
13
|
max_disagreements: z.number().min(1).max(10).default(5),
|
|
14
14
|
escalation_action: z.enum(['pause', 'continue', 'abort']).default('pause'),
|
|
15
|
+
// Reviewer and arbitrator settings (persisted across sessions)
|
|
16
|
+
reviewer: z.enum(['openai', 'gemini', 'grok']).default('openai'),
|
|
17
|
+
arbitrator: z.enum(['openai', 'gemini', 'grok', 'off']).default('off'),
|
|
18
|
+
enable_arbitration: z.boolean().default(false),
|
|
15
19
|
});
|
|
16
20
|
|
|
17
21
|
/**
|
|
@@ -35,6 +39,16 @@ export const ClaudeSettingsSchema = z.object({
|
|
|
35
39
|
model: z.string().default('claude-sonnet-4-20250514'),
|
|
36
40
|
});
|
|
37
41
|
|
|
42
|
+
/**
|
|
43
|
+
* Grok API settings schema
|
|
44
|
+
*/
|
|
45
|
+
export const GrokSettingsSchema = z.object({
|
|
46
|
+
model: z.string().default('grok-3'),
|
|
47
|
+
temperature: z.number().min(0).max(2).default(0.3),
|
|
48
|
+
max_tokens: z.number().min(100).max(32000).default(4096),
|
|
49
|
+
api_url: z.string().default('https://api.x.ai/v1'),
|
|
50
|
+
});
|
|
51
|
+
|
|
38
52
|
/**
|
|
39
53
|
* API configuration schema
|
|
40
54
|
*/
|
|
@@ -48,6 +62,12 @@ export const APISettingsSchema = z.object({
|
|
|
48
62
|
claude: ClaudeSettingsSchema.default({
|
|
49
63
|
model: 'claude-sonnet-4-20250514',
|
|
50
64
|
}),
|
|
65
|
+
grok: GrokSettingsSchema.default({
|
|
66
|
+
model: 'grok-3',
|
|
67
|
+
temperature: 0.3,
|
|
68
|
+
max_tokens: 4096,
|
|
69
|
+
api_url: 'https://api.x.ai/v1',
|
|
70
|
+
}),
|
|
51
71
|
});
|
|
52
72
|
|
|
53
73
|
/**
|
|
@@ -72,7 +92,7 @@ export const TypeScriptSettingsSchema = z.object({
|
|
|
72
92
|
* Project defaults schema
|
|
73
93
|
*/
|
|
74
94
|
export const ProjectSettingsSchema = z.object({
|
|
75
|
-
default_language: z.enum(['python', 'typescript']).default('python'),
|
|
95
|
+
default_language: z.enum(['python', 'typescript', 'fullstack']).default('python'),
|
|
76
96
|
python: PythonSettingsSchema.default({
|
|
77
97
|
package_manager: 'pip',
|
|
78
98
|
test_framework: 'pytest',
|
|
@@ -112,6 +132,9 @@ export const ConfigSchema = z.object({
|
|
|
112
132
|
threshold: 95,
|
|
113
133
|
max_disagreements: 5,
|
|
114
134
|
escalation_action: 'pause',
|
|
135
|
+
reviewer: 'openai',
|
|
136
|
+
arbitrator: 'off',
|
|
137
|
+
enable_arbitration: false,
|
|
115
138
|
}),
|
|
116
139
|
apis: APISettingsSchema.default({
|
|
117
140
|
openai: {
|
|
@@ -123,6 +146,12 @@ export const ConfigSchema = z.object({
|
|
|
123
146
|
claude: {
|
|
124
147
|
model: 'claude-sonnet-4-20250514',
|
|
125
148
|
},
|
|
149
|
+
grok: {
|
|
150
|
+
model: 'grok-3',
|
|
151
|
+
temperature: 0.3,
|
|
152
|
+
max_tokens: 4096,
|
|
153
|
+
api_url: 'https://api.x.ai/v1',
|
|
154
|
+
},
|
|
126
155
|
}),
|
|
127
156
|
project: ProjectSettingsSchema.default({
|
|
128
157
|
default_language: 'python',
|