popeye-cli 1.0.1 → 1.1.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.
Files changed (166) hide show
  1. package/README.md +521 -125
  2. package/dist/adapters/claude.d.ts +16 -4
  3. package/dist/adapters/claude.d.ts.map +1 -1
  4. package/dist/adapters/claude.js +679 -33
  5. package/dist/adapters/claude.js.map +1 -1
  6. package/dist/adapters/gemini.d.ts +55 -0
  7. package/dist/adapters/gemini.d.ts.map +1 -0
  8. package/dist/adapters/gemini.js +318 -0
  9. package/dist/adapters/gemini.js.map +1 -0
  10. package/dist/adapters/openai.d.ts.map +1 -1
  11. package/dist/adapters/openai.js +41 -7
  12. package/dist/adapters/openai.js.map +1 -1
  13. package/dist/auth/claude.d.ts +11 -9
  14. package/dist/auth/claude.d.ts.map +1 -1
  15. package/dist/auth/claude.js +107 -71
  16. package/dist/auth/claude.js.map +1 -1
  17. package/dist/auth/gemini.d.ts +58 -0
  18. package/dist/auth/gemini.d.ts.map +1 -0
  19. package/dist/auth/gemini.js +172 -0
  20. package/dist/auth/gemini.js.map +1 -0
  21. package/dist/auth/index.d.ts +11 -7
  22. package/dist/auth/index.d.ts.map +1 -1
  23. package/dist/auth/index.js +23 -5
  24. package/dist/auth/index.js.map +1 -1
  25. package/dist/auth/keychain.d.ts +20 -7
  26. package/dist/auth/keychain.d.ts.map +1 -1
  27. package/dist/auth/keychain.js +85 -29
  28. package/dist/auth/keychain.js.map +1 -1
  29. package/dist/auth/openai.d.ts +2 -2
  30. package/dist/auth/openai.d.ts.map +1 -1
  31. package/dist/auth/openai.js +30 -32
  32. package/dist/auth/openai.js.map +1 -1
  33. package/dist/cli/interactive.d.ts.map +1 -1
  34. package/dist/cli/interactive.js +1151 -110
  35. package/dist/cli/interactive.js.map +1 -1
  36. package/dist/config/defaults.d.ts +6 -1
  37. package/dist/config/defaults.d.ts.map +1 -1
  38. package/dist/config/defaults.js +10 -2
  39. package/dist/config/defaults.js.map +1 -1
  40. package/dist/config/index.d.ts +10 -0
  41. package/dist/config/index.d.ts.map +1 -1
  42. package/dist/config/index.js +19 -0
  43. package/dist/config/index.js.map +1 -1
  44. package/dist/config/schema.d.ts +20 -0
  45. package/dist/config/schema.d.ts.map +1 -1
  46. package/dist/config/schema.js +7 -0
  47. package/dist/config/schema.js.map +1 -1
  48. package/dist/generators/python.d.ts.map +1 -1
  49. package/dist/generators/python.js +1 -0
  50. package/dist/generators/python.js.map +1 -1
  51. package/dist/generators/typescript.d.ts.map +1 -1
  52. package/dist/generators/typescript.js +1 -0
  53. package/dist/generators/typescript.js.map +1 -1
  54. package/dist/state/index.d.ts +108 -0
  55. package/dist/state/index.d.ts.map +1 -1
  56. package/dist/state/index.js +551 -4
  57. package/dist/state/index.js.map +1 -1
  58. package/dist/state/registry.d.ts +52 -0
  59. package/dist/state/registry.d.ts.map +1 -0
  60. package/dist/state/registry.js +215 -0
  61. package/dist/state/registry.js.map +1 -0
  62. package/dist/types/cli.d.ts +4 -0
  63. package/dist/types/cli.d.ts.map +1 -1
  64. package/dist/types/cli.js.map +1 -1
  65. package/dist/types/consensus.d.ts +69 -4
  66. package/dist/types/consensus.d.ts.map +1 -1
  67. package/dist/types/consensus.js +24 -3
  68. package/dist/types/consensus.js.map +1 -1
  69. package/dist/types/workflow.d.ts +55 -0
  70. package/dist/types/workflow.d.ts.map +1 -1
  71. package/dist/types/workflow.js +16 -0
  72. package/dist/types/workflow.js.map +1 -1
  73. package/dist/workflow/auto-fix.d.ts +45 -0
  74. package/dist/workflow/auto-fix.d.ts.map +1 -0
  75. package/dist/workflow/auto-fix.js +274 -0
  76. package/dist/workflow/auto-fix.js.map +1 -0
  77. package/dist/workflow/consensus.d.ts +44 -2
  78. package/dist/workflow/consensus.d.ts.map +1 -1
  79. package/dist/workflow/consensus.js +565 -17
  80. package/dist/workflow/consensus.js.map +1 -1
  81. package/dist/workflow/execution-mode.d.ts +10 -4
  82. package/dist/workflow/execution-mode.d.ts.map +1 -1
  83. package/dist/workflow/execution-mode.js +547 -58
  84. package/dist/workflow/execution-mode.js.map +1 -1
  85. package/dist/workflow/index.d.ts +14 -2
  86. package/dist/workflow/index.d.ts.map +1 -1
  87. package/dist/workflow/index.js +69 -6
  88. package/dist/workflow/index.js.map +1 -1
  89. package/dist/workflow/milestone-workflow.d.ts +34 -0
  90. package/dist/workflow/milestone-workflow.d.ts.map +1 -0
  91. package/dist/workflow/milestone-workflow.js +414 -0
  92. package/dist/workflow/milestone-workflow.js.map +1 -0
  93. package/dist/workflow/plan-mode.d.ts +14 -1
  94. package/dist/workflow/plan-mode.d.ts.map +1 -1
  95. package/dist/workflow/plan-mode.js +589 -47
  96. package/dist/workflow/plan-mode.js.map +1 -1
  97. package/dist/workflow/plan-storage.d.ts +142 -0
  98. package/dist/workflow/plan-storage.d.ts.map +1 -0
  99. package/dist/workflow/plan-storage.js +331 -0
  100. package/dist/workflow/plan-storage.js.map +1 -0
  101. package/dist/workflow/project-verification.d.ts +37 -0
  102. package/dist/workflow/project-verification.d.ts.map +1 -0
  103. package/dist/workflow/project-verification.js +381 -0
  104. package/dist/workflow/project-verification.js.map +1 -0
  105. package/dist/workflow/task-workflow.d.ts +37 -0
  106. package/dist/workflow/task-workflow.d.ts.map +1 -0
  107. package/dist/workflow/task-workflow.js +383 -0
  108. package/dist/workflow/task-workflow.js.map +1 -0
  109. package/dist/workflow/test-runner.d.ts +1 -0
  110. package/dist/workflow/test-runner.d.ts.map +1 -1
  111. package/dist/workflow/test-runner.js +9 -5
  112. package/dist/workflow/test-runner.js.map +1 -1
  113. package/dist/workflow/ui-designer.d.ts +82 -0
  114. package/dist/workflow/ui-designer.d.ts.map +1 -0
  115. package/dist/workflow/ui-designer.js +234 -0
  116. package/dist/workflow/ui-designer.js.map +1 -0
  117. package/dist/workflow/ui-setup.d.ts +58 -0
  118. package/dist/workflow/ui-setup.d.ts.map +1 -0
  119. package/dist/workflow/ui-setup.js +685 -0
  120. package/dist/workflow/ui-setup.js.map +1 -0
  121. package/dist/workflow/ui-verification.d.ts +114 -0
  122. package/dist/workflow/ui-verification.d.ts.map +1 -0
  123. package/dist/workflow/ui-verification.js +258 -0
  124. package/dist/workflow/ui-verification.js.map +1 -0
  125. package/dist/workflow/workflow-logger.d.ts +110 -0
  126. package/dist/workflow/workflow-logger.d.ts.map +1 -0
  127. package/dist/workflow/workflow-logger.js +267 -0
  128. package/dist/workflow/workflow-logger.js.map +1 -0
  129. package/package.json +2 -2
  130. package/src/adapters/claude.ts +815 -34
  131. package/src/adapters/gemini.ts +373 -0
  132. package/src/adapters/openai.ts +40 -7
  133. package/src/auth/claude.ts +120 -78
  134. package/src/auth/gemini.ts +207 -0
  135. package/src/auth/index.ts +28 -8
  136. package/src/auth/keychain.ts +95 -28
  137. package/src/auth/openai.ts +29 -36
  138. package/src/cli/interactive.ts +1357 -115
  139. package/src/config/defaults.ts +10 -2
  140. package/src/config/index.ts +21 -0
  141. package/src/config/schema.ts +7 -0
  142. package/src/generators/python.ts +1 -0
  143. package/src/generators/typescript.ts +1 -0
  144. package/src/state/index.ts +713 -4
  145. package/src/state/registry.ts +278 -0
  146. package/src/types/cli.ts +4 -0
  147. package/src/types/consensus.ts +65 -6
  148. package/src/types/workflow.ts +35 -0
  149. package/src/workflow/auto-fix.ts +340 -0
  150. package/src/workflow/consensus.ts +750 -16
  151. package/src/workflow/execution-mode.ts +673 -74
  152. package/src/workflow/index.ts +95 -6
  153. package/src/workflow/milestone-workflow.ts +576 -0
  154. package/src/workflow/plan-mode.ts +696 -50
  155. package/src/workflow/plan-storage.ts +482 -0
  156. package/src/workflow/project-verification.ts +471 -0
  157. package/src/workflow/task-workflow.ts +525 -0
  158. package/src/workflow/test-runner.ts +10 -5
  159. package/src/workflow/ui-designer.ts +337 -0
  160. package/src/workflow/ui-setup.ts +797 -0
  161. package/src/workflow/ui-verification.ts +357 -0
  162. package/src/workflow/workflow-logger.ts +353 -0
  163. package/tests/config/config.test.ts +1 -1
  164. package/tests/types/consensus.test.ts +3 -3
  165. package/tests/workflow/plan-mode.test.ts +213 -0
  166. package/tests/workflow/test-runner.test.ts +5 -3
@@ -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: 5,
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: {
@@ -88,6 +91,7 @@ export const SERVICE_NAME = 'popeye-cli';
88
91
  export const KEYCHAIN_ACCOUNTS = {
89
92
  CLAUDE: 'claude-cli',
90
93
  OPENAI: 'openai-api',
94
+ GEMINI: 'gemini-api',
91
95
  } as const;
92
96
 
93
97
  /**
@@ -96,8 +100,12 @@ export const KEYCHAIN_ACCOUNTS = {
96
100
  export const ENV_VARS = {
97
101
  OPENAI_KEY: 'POPEYE_OPENAI_KEY',
98
102
  ANTHROPIC_KEY: 'POPEYE_ANTHROPIC_KEY',
103
+ GEMINI_KEY: 'POPEYE_GEMINI_KEY',
99
104
  DEFAULT_LANGUAGE: 'POPEYE_DEFAULT_LANGUAGE',
100
105
  OPENAI_MODEL: 'POPEYE_OPENAI_MODEL',
106
+ GEMINI_MODEL: 'POPEYE_GEMINI_MODEL',
107
+ CONSENSUS_REVIEWER: 'POPEYE_CONSENSUS_REVIEWER',
108
+ CONSENSUS_ARBITRATOR: 'POPEYE_CONSENSUS_ARBITRATOR',
101
109
  CONSENSUS_THRESHOLD: 'POPEYE_CONSENSUS_THRESHOLD',
102
110
  MAX_DISAGREEMENTS: 'POPEYE_MAX_DISAGREEMENTS',
103
111
  LOG_LEVEL: 'POPEYE_LOG_LEVEL',
@@ -106,7 +114,7 @@ export const ENV_VARS = {
106
114
  /**
107
115
  * CLI version
108
116
  */
109
- export const CLI_VERSION = '1.0.0';
117
+ export const CLI_VERSION = '1.0.2';
110
118
 
111
119
  /**
112
120
  * State file version
@@ -124,6 +124,27 @@ function loadEnvConfig(): Partial<Config> {
124
124
  }
125
125
  }
126
126
 
127
+ // Reviewer
128
+ const reviewer = process.env[ENV_VARS.CONSENSUS_REVIEWER];
129
+ if (reviewer && (reviewer === 'openai' || reviewer === 'gemini')) {
130
+ config.consensus = {
131
+ ...DEFAULT_CONFIG.consensus,
132
+ ...(config.consensus || {}),
133
+ reviewer,
134
+ };
135
+ }
136
+
137
+ // Arbitrator
138
+ const arbitrator = process.env[ENV_VARS.CONSENSUS_ARBITRATOR];
139
+ if (arbitrator && (arbitrator === 'openai' || arbitrator === 'gemini' || arbitrator === 'off')) {
140
+ config.consensus = {
141
+ ...DEFAULT_CONFIG.consensus,
142
+ ...(config.consensus || {}),
143
+ arbitrator,
144
+ enable_arbitration: arbitrator !== 'off',
145
+ };
146
+ }
147
+
127
148
  // Verbose/log level
128
149
  const logLevel = process.env[ENV_VARS.LOG_LEVEL];
129
150
  if (logLevel === 'debug') {
@@ -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']).default('openai'),
17
+ arbitrator: z.enum(['openai', 'gemini', 'off']).default('off'),
18
+ enable_arbitration: z.boolean().default(false),
15
19
  });
16
20
 
17
21
  /**
@@ -112,6 +116,9 @@ export const ConfigSchema = z.object({
112
116
  threshold: 95,
113
117
  max_disagreements: 5,
114
118
  escalation_action: 'pause',
119
+ reviewer: 'openai',
120
+ arbitrator: 'off',
121
+ enable_arbitration: false,
115
122
  }),
116
123
  apis: APISettingsSchema.default({
117
124
  openai: {
@@ -74,6 +74,7 @@ export async function generatePythonProject(
74
74
  await ensureDir(path.join(projectDir, 'src', packageName));
75
75
  await ensureDir(path.join(projectDir, 'tests'));
76
76
  await ensureDir(path.join(projectDir, 'data'));
77
+ await ensureDir(path.join(projectDir, 'docs'));
77
78
 
78
79
  // Generate and write files
79
80
  const files: Array<{ path: string; content: string }> = [
@@ -66,6 +66,7 @@ export async function generateTypeScriptProject(
66
66
  await ensureDir(path.join(projectDir, 'src'));
67
67
  await ensureDir(path.join(projectDir, 'tests'));
68
68
  await ensureDir(path.join(projectDir, 'data'));
69
+ await ensureDir(path.join(projectDir, 'docs'));
69
70
 
70
71
  // Generate and write files
71
72
  const files: Array<{ path: string; content: string }> = [