pm-orchestrator-runner 1.0.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 (215) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +108 -0
  3. package/dist/cli/cli-interface.d.ts +150 -0
  4. package/dist/cli/cli-interface.d.ts.map +1 -0
  5. package/dist/cli/cli-interface.js +606 -0
  6. package/dist/cli/cli-interface.js.map +1 -0
  7. package/dist/cli/index.d.ts +13 -0
  8. package/dist/cli/index.d.ts.map +1 -0
  9. package/dist/cli/index.js +243 -0
  10. package/dist/cli/index.js.map +1 -0
  11. package/dist/cli/llm-sentinel.d.ts +15 -0
  12. package/dist/cli/llm-sentinel.d.ts.map +1 -0
  13. package/dist/cli/llm-sentinel.js +184 -0
  14. package/dist/cli/llm-sentinel.js.map +1 -0
  15. package/dist/config/configuration-manager.d.ts +149 -0
  16. package/dist/config/configuration-manager.d.ts.map +1 -0
  17. package/dist/config/configuration-manager.js +241 -0
  18. package/dist/config/configuration-manager.js.map +1 -0
  19. package/dist/continuation/continuation-control-manager.d.ts +154 -0
  20. package/dist/continuation/continuation-control-manager.d.ts.map +1 -0
  21. package/dist/continuation/continuation-control-manager.js +303 -0
  22. package/dist/continuation/continuation-control-manager.js.map +1 -0
  23. package/dist/core/runner-core.d.ts +474 -0
  24. package/dist/core/runner-core.d.ts.map +1 -0
  25. package/dist/core/runner-core.js +1311 -0
  26. package/dist/core/runner-core.js.map +1 -0
  27. package/dist/errors/error-codes.d.ts +105 -0
  28. package/dist/errors/error-codes.d.ts.map +1 -0
  29. package/dist/errors/error-codes.js +198 -0
  30. package/dist/errors/error-codes.js.map +1 -0
  31. package/dist/errors/runner-error.d.ts +14 -0
  32. package/dist/errors/runner-error.d.ts.map +1 -0
  33. package/dist/errors/runner-error.js +33 -0
  34. package/dist/errors/runner-error.js.map +1 -0
  35. package/dist/evidence/evidence-manager.d.ts +112 -0
  36. package/dist/evidence/evidence-manager.d.ts.map +1 -0
  37. package/dist/evidence/evidence-manager.js +337 -0
  38. package/dist/evidence/evidence-manager.js.map +1 -0
  39. package/dist/executor/claude-code-executor.d.ts +136 -0
  40. package/dist/executor/claude-code-executor.d.ts.map +1 -0
  41. package/dist/executor/claude-code-executor.js +643 -0
  42. package/dist/executor/claude-code-executor.js.map +1 -0
  43. package/dist/executor/deterministic-executor.d.ts +40 -0
  44. package/dist/executor/deterministic-executor.d.ts.map +1 -0
  45. package/dist/executor/deterministic-executor.js +269 -0
  46. package/dist/executor/deterministic-executor.js.map +1 -0
  47. package/dist/lifecycle/lifecycle-controller.d.ts +270 -0
  48. package/dist/lifecycle/lifecycle-controller.d.ts.map +1 -0
  49. package/dist/lifecycle/lifecycle-controller.js +596 -0
  50. package/dist/lifecycle/lifecycle-controller.js.map +1 -0
  51. package/dist/limits/resource-limit-manager.d.ts +200 -0
  52. package/dist/limits/resource-limit-manager.d.ts.map +1 -0
  53. package/dist/limits/resource-limit-manager.js +376 -0
  54. package/dist/limits/resource-limit-manager.js.map +1 -0
  55. package/dist/locks/lock-manager.d.ts +116 -0
  56. package/dist/locks/lock-manager.d.ts.map +1 -0
  57. package/dist/locks/lock-manager.js +306 -0
  58. package/dist/locks/lock-manager.js.map +1 -0
  59. package/dist/logging/index.d.ts +8 -0
  60. package/dist/logging/index.d.ts.map +1 -0
  61. package/dist/logging/index.js +22 -0
  62. package/dist/logging/index.js.map +1 -0
  63. package/dist/logging/sensitive-data-masker.d.ts +90 -0
  64. package/dist/logging/sensitive-data-masker.d.ts.map +1 -0
  65. package/dist/logging/sensitive-data-masker.js +228 -0
  66. package/dist/logging/sensitive-data-masker.js.map +1 -0
  67. package/dist/logging/task-log-manager.d.ts +215 -0
  68. package/dist/logging/task-log-manager.d.ts.map +1 -0
  69. package/dist/logging/task-log-manager.js +743 -0
  70. package/dist/logging/task-log-manager.js.map +1 -0
  71. package/dist/mediation/fail-closed-runner.d.ts +131 -0
  72. package/dist/mediation/fail-closed-runner.d.ts.map +1 -0
  73. package/dist/mediation/fail-closed-runner.js +245 -0
  74. package/dist/mediation/fail-closed-runner.js.map +1 -0
  75. package/dist/mediation/llm-client-with-evidence.d.ts +123 -0
  76. package/dist/mediation/llm-client-with-evidence.d.ts.map +1 -0
  77. package/dist/mediation/llm-client-with-evidence.js +245 -0
  78. package/dist/mediation/llm-client-with-evidence.js.map +1 -0
  79. package/dist/mediation/llm-client.d.ts +102 -0
  80. package/dist/mediation/llm-client.d.ts.map +1 -0
  81. package/dist/mediation/llm-client.js +206 -0
  82. package/dist/mediation/llm-client.js.map +1 -0
  83. package/dist/mediation/llm-evidence-manager.d.ts +108 -0
  84. package/dist/mediation/llm-evidence-manager.d.ts.map +1 -0
  85. package/dist/mediation/llm-evidence-manager.js +230 -0
  86. package/dist/mediation/llm-evidence-manager.js.map +1 -0
  87. package/dist/mediation/llm-mediation-layer.d.ts +175 -0
  88. package/dist/mediation/llm-mediation-layer.d.ts.map +1 -0
  89. package/dist/mediation/llm-mediation-layer.js +315 -0
  90. package/dist/mediation/llm-mediation-layer.js.map +1 -0
  91. package/dist/mediation/llm-sentinel.d.ts +107 -0
  92. package/dist/mediation/llm-sentinel.d.ts.map +1 -0
  93. package/dist/mediation/llm-sentinel.js +187 -0
  94. package/dist/mediation/llm-sentinel.js.map +1 -0
  95. package/dist/mediation/real-llm-mediation-layer.d.ts +104 -0
  96. package/dist/mediation/real-llm-mediation-layer.d.ts.map +1 -0
  97. package/dist/mediation/real-llm-mediation-layer.js +322 -0
  98. package/dist/mediation/real-llm-mediation-layer.js.map +1 -0
  99. package/dist/mediation/verdict-reporter.d.ts +61 -0
  100. package/dist/mediation/verdict-reporter.d.ts.map +1 -0
  101. package/dist/mediation/verdict-reporter.js +178 -0
  102. package/dist/mediation/verdict-reporter.js.map +1 -0
  103. package/dist/models/enums.d.ts +133 -0
  104. package/dist/models/enums.d.ts.map +1 -0
  105. package/dist/models/enums.js +201 -0
  106. package/dist/models/enums.js.map +1 -0
  107. package/dist/models/evidence.d.ts +60 -0
  108. package/dist/models/evidence.d.ts.map +1 -0
  109. package/dist/models/evidence.js +135 -0
  110. package/dist/models/evidence.js.map +1 -0
  111. package/dist/models/execution-result.d.ts +89 -0
  112. package/dist/models/execution-result.d.ts.map +1 -0
  113. package/dist/models/execution-result.js +197 -0
  114. package/dist/models/execution-result.js.map +1 -0
  115. package/dist/models/file-lock.d.ts +62 -0
  116. package/dist/models/file-lock.d.ts.map +1 -0
  117. package/dist/models/file-lock.js +133 -0
  118. package/dist/models/file-lock.js.map +1 -0
  119. package/dist/models/index.d.ts +12 -0
  120. package/dist/models/index.d.ts.map +1 -0
  121. package/dist/models/index.js +91 -0
  122. package/dist/models/index.js.map +1 -0
  123. package/dist/models/repl/index.d.ts +7 -0
  124. package/dist/models/repl/index.d.ts.map +1 -0
  125. package/dist/models/repl/index.js +32 -0
  126. package/dist/models/repl/index.js.map +1 -0
  127. package/dist/models/repl/model-registry.d.ts +73 -0
  128. package/dist/models/repl/model-registry.d.ts.map +1 -0
  129. package/dist/models/repl/model-registry.js +116 -0
  130. package/dist/models/repl/model-registry.js.map +1 -0
  131. package/dist/models/repl/repl-state.d.ts +86 -0
  132. package/dist/models/repl/repl-state.d.ts.map +1 -0
  133. package/dist/models/repl/repl-state.js +152 -0
  134. package/dist/models/repl/repl-state.js.map +1 -0
  135. package/dist/models/repl/task-log.d.ts +247 -0
  136. package/dist/models/repl/task-log.d.ts.map +1 -0
  137. package/dist/models/repl/task-log.js +178 -0
  138. package/dist/models/repl/task-log.js.map +1 -0
  139. package/dist/models/session.d.ts +71 -0
  140. package/dist/models/session.d.ts.map +1 -0
  141. package/dist/models/session.js +140 -0
  142. package/dist/models/session.js.map +1 -0
  143. package/dist/models/supporting.d.ts +97 -0
  144. package/dist/models/supporting.d.ts.map +1 -0
  145. package/dist/models/supporting.js +208 -0
  146. package/dist/models/supporting.js.map +1 -0
  147. package/dist/models/task.d.ts +77 -0
  148. package/dist/models/task.d.ts.map +1 -0
  149. package/dist/models/task.js +170 -0
  150. package/dist/models/task.js.map +1 -0
  151. package/dist/output/output-control-manager.d.ts +217 -0
  152. package/dist/output/output-control-manager.d.ts.map +1 -0
  153. package/dist/output/output-control-manager.js +378 -0
  154. package/dist/output/output-control-manager.js.map +1 -0
  155. package/dist/pool/agent-pool.d.ts +284 -0
  156. package/dist/pool/agent-pool.d.ts.map +1 -0
  157. package/dist/pool/agent-pool.js +451 -0
  158. package/dist/pool/agent-pool.js.map +1 -0
  159. package/dist/repl/commands/index.d.ts +12 -0
  160. package/dist/repl/commands/index.d.ts.map +1 -0
  161. package/dist/repl/commands/index.js +26 -0
  162. package/dist/repl/commands/index.js.map +1 -0
  163. package/dist/repl/commands/init.d.ts +31 -0
  164. package/dist/repl/commands/init.d.ts.map +1 -0
  165. package/dist/repl/commands/init.js +234 -0
  166. package/dist/repl/commands/init.js.map +1 -0
  167. package/dist/repl/commands/keys.d.ts +63 -0
  168. package/dist/repl/commands/keys.d.ts.map +1 -0
  169. package/dist/repl/commands/keys.js +114 -0
  170. package/dist/repl/commands/keys.js.map +1 -0
  171. package/dist/repl/commands/logs.d.ts +91 -0
  172. package/dist/repl/commands/logs.d.ts.map +1 -0
  173. package/dist/repl/commands/logs.js +200 -0
  174. package/dist/repl/commands/logs.js.map +1 -0
  175. package/dist/repl/commands/model.d.ts +85 -0
  176. package/dist/repl/commands/model.d.ts.map +1 -0
  177. package/dist/repl/commands/model.js +225 -0
  178. package/dist/repl/commands/model.js.map +1 -0
  179. package/dist/repl/commands/models.d.ts +50 -0
  180. package/dist/repl/commands/models.d.ts.map +1 -0
  181. package/dist/repl/commands/models.js +180 -0
  182. package/dist/repl/commands/models.js.map +1 -0
  183. package/dist/repl/commands/provider.d.ts +79 -0
  184. package/dist/repl/commands/provider.d.ts.map +1 -0
  185. package/dist/repl/commands/provider.js +291 -0
  186. package/dist/repl/commands/provider.js.map +1 -0
  187. package/dist/repl/commands/session.d.ts +50 -0
  188. package/dist/repl/commands/session.d.ts.map +1 -0
  189. package/dist/repl/commands/session.js +152 -0
  190. package/dist/repl/commands/session.js.map +1 -0
  191. package/dist/repl/commands/status.d.ts +55 -0
  192. package/dist/repl/commands/status.d.ts.map +1 -0
  193. package/dist/repl/commands/status.js +182 -0
  194. package/dist/repl/commands/status.js.map +1 -0
  195. package/dist/repl/index.d.ts +6 -0
  196. package/dist/repl/index.d.ts.map +1 -0
  197. package/dist/repl/index.js +25 -0
  198. package/dist/repl/index.js.map +1 -0
  199. package/dist/repl/repl-interface.d.ts +371 -0
  200. package/dist/repl/repl-interface.d.ts.map +1 -0
  201. package/dist/repl/repl-interface.js +1214 -0
  202. package/dist/repl/repl-interface.js.map +1 -0
  203. package/dist/session/session-manager.d.ts +85 -0
  204. package/dist/session/session-manager.d.ts.map +1 -0
  205. package/dist/session/session-manager.js +217 -0
  206. package/dist/session/session-manager.js.map +1 -0
  207. package/dist/supervisor/executor-supervisor.d.ts +90 -0
  208. package/dist/supervisor/executor-supervisor.d.ts.map +1 -0
  209. package/dist/supervisor/executor-supervisor.js +223 -0
  210. package/dist/supervisor/executor-supervisor.js.map +1 -0
  211. package/dist/supervisor/index.d.ts +5 -0
  212. package/dist/supervisor/index.d.ts.map +1 -0
  213. package/dist/supervisor/index.js +9 -0
  214. package/dist/supervisor/index.js.map +1 -0
  215. package/package.json +57 -0
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+ /**
3
+ * Models Command
4
+ *
5
+ * Per spec 10_REPL_UX.md Section 2.2:
6
+ * - /models: list models for current provider
7
+ * - /models <provider>: list models for specific provider
8
+ *
9
+ * Per spec 12_LLM_PROVIDER_AND_MODELS.md:
10
+ * - OpenAI models with pricing
11
+ * - Anthropic models with pricing
12
+ * - claude-code delegates model selection
13
+ */
14
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ var desc = Object.getOwnPropertyDescriptor(m, k);
17
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
+ desc = { enumerable: true, get: function() { return m[k]; } };
19
+ }
20
+ Object.defineProperty(o, k2, desc);
21
+ }) : (function(o, m, k, k2) {
22
+ if (k2 === undefined) k2 = k;
23
+ o[k2] = m[k];
24
+ }));
25
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
27
+ }) : function(o, v) {
28
+ o["default"] = v;
29
+ });
30
+ var __importStar = (this && this.__importStar) || (function () {
31
+ var ownKeys = function(o) {
32
+ ownKeys = Object.getOwnPropertyNames || function (o) {
33
+ var ar = [];
34
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
35
+ return ar;
36
+ };
37
+ return ownKeys(o);
38
+ };
39
+ return function (mod) {
40
+ if (mod && mod.__esModule) return mod;
41
+ var result = {};
42
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
43
+ __setModuleDefault(result, mod);
44
+ return result;
45
+ };
46
+ })();
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.ModelsCommand = void 0;
49
+ const fs = __importStar(require("fs"));
50
+ const path = __importStar(require("path"));
51
+ const repl_1 = require("../../models/repl");
52
+ const model_registry_1 = require("../../models/repl/model-registry");
53
+ /**
54
+ * REPL state file path
55
+ */
56
+ const REPL_STATE_FILE = 'repl.json';
57
+ /**
58
+ * Models Command class
59
+ */
60
+ class ModelsCommand {
61
+ /**
62
+ * List models for current or specified provider
63
+ *
64
+ * @param projectPath - Project path
65
+ * @param providerId - Optional provider ID (uses current if not specified)
66
+ * @returns Models result
67
+ */
68
+ async listModels(projectPath, providerId) {
69
+ let targetProvider = null;
70
+ let currentModel = null;
71
+ // If provider specified, validate it
72
+ if (providerId) {
73
+ const validation = (0, repl_1.validateProvider)(providerId);
74
+ if (!validation.valid) {
75
+ const validList = repl_1.VALID_PROVIDERS.join(', ');
76
+ return {
77
+ success: false,
78
+ message: 'Invalid provider',
79
+ error: {
80
+ code: 'E102',
81
+ message: 'Invalid provider: ' + providerId + '. Valid providers: ' + validList,
82
+ },
83
+ };
84
+ }
85
+ targetProvider = providerId;
86
+ }
87
+ else {
88
+ // Get current provider from repl.json
89
+ const claudeDir = path.join(projectPath, '.claude');
90
+ const statePath = path.join(claudeDir, REPL_STATE_FILE);
91
+ if (!fs.existsSync(claudeDir)) {
92
+ return {
93
+ success: false,
94
+ message: '.claude directory not found',
95
+ error: {
96
+ code: 'E101',
97
+ message: '.claude directory not found. Run /init first.',
98
+ },
99
+ };
100
+ }
101
+ if (fs.existsSync(statePath)) {
102
+ try {
103
+ const content = fs.readFileSync(statePath, 'utf-8');
104
+ const state = JSON.parse(content);
105
+ targetProvider = state.selected_provider;
106
+ currentModel = state.selected_model;
107
+ }
108
+ catch {
109
+ // Ignore parse errors
110
+ }
111
+ }
112
+ if (!targetProvider) {
113
+ return {
114
+ success: false,
115
+ message: 'No provider selected',
116
+ error: {
117
+ code: 'E109',
118
+ message: 'No provider selected. Use /provider <name> to select a provider first.',
119
+ },
120
+ };
121
+ }
122
+ }
123
+ // Get models for provider
124
+ const models = (0, model_registry_1.getModelsForProvider)(targetProvider);
125
+ const providerInfo = (0, model_registry_1.getProviderInfo)(targetProvider);
126
+ // claude-code has no model list (delegated)
127
+ if (targetProvider === 'claude-code') {
128
+ return {
129
+ success: true,
130
+ message: 'claude-code delegates model selection to Claude Code CLI',
131
+ provider: targetProvider,
132
+ models: [],
133
+ };
134
+ }
135
+ return {
136
+ success: true,
137
+ message: 'Models for ' + (providerInfo?.displayName || targetProvider),
138
+ provider: targetProvider,
139
+ models,
140
+ currentModel: currentModel || undefined,
141
+ };
142
+ }
143
+ /**
144
+ * Format model list for display
145
+ *
146
+ * @param models - Model list
147
+ * @param currentModel - Current selected model (optional)
148
+ * @param provider - Provider name
149
+ * @returns Formatted string
150
+ */
151
+ formatModelList(models, currentModel, provider) {
152
+ if (models.length === 0) {
153
+ if (provider === 'claude-code') {
154
+ return 'claude-code delegates model selection to Claude Code CLI.\n\n' +
155
+ 'No model configuration is needed - Claude Code CLI handles this automatically.';
156
+ }
157
+ return 'No models available for this provider.';
158
+ }
159
+ let output = 'Available Models:\n\n';
160
+ output += ' Model ID | Display Name | Input $/M | Output $/M | Context\n';
161
+ output += ' ----------------------------------|---------------------|-----------|------------|--------\n';
162
+ for (const model of models) {
163
+ const isCurrent = model.id === currentModel;
164
+ const marker = isCurrent ? '*' : ' ';
165
+ const id = (model.id + marker).padEnd(33);
166
+ const name = model.displayName.padEnd(19);
167
+ const inputPrice = ('$' + model.inputPricePerMillion.toFixed(2)).padStart(9);
168
+ const outputPrice = ('$' + model.outputPricePerMillion.toFixed(2)).padStart(10);
169
+ output += ' ' + id + ' | ' + name + ' | ' + inputPrice + ' | ' + outputPrice + ' | ' + model.contextSize + '\n';
170
+ }
171
+ output += '\n';
172
+ if (currentModel) {
173
+ output += '* = currently selected\n\n';
174
+ }
175
+ output += 'Use /model <model-id> to select a model.';
176
+ return output;
177
+ }
178
+ }
179
+ exports.ModelsCommand = ModelsCommand;
180
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/repl/commands/models.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Provider Command
3
+ *
4
+ * Per spec 10_REPL_UX.md Section 2.1:
5
+ * - /provider: show current selected_provider or "UNSET"
6
+ * - /provider show: list all providers
7
+ * - /provider select: interactive selection UI
8
+ * - /provider <name>: set provider directly
9
+ *
10
+ * Per spec 06_CORRECTNESS_PROPERTIES.md Property 23:
11
+ * - Provider/Model configuration under user control
12
+ */
13
+ import { ProviderInfo } from '../../models/repl/model-registry';
14
+ /**
15
+ * Provider command result
16
+ */
17
+ export interface ProviderResult {
18
+ success: boolean;
19
+ message: string;
20
+ provider?: string;
21
+ providers?: ProviderInfo[];
22
+ configPath?: string;
23
+ evidencePath?: string;
24
+ error?: {
25
+ code: string;
26
+ message: string;
27
+ };
28
+ }
29
+ /**
30
+ * REPL state file path
31
+ */
32
+ declare const REPL_STATE_FILE = "repl.json";
33
+ /**
34
+ * Provider Command class
35
+ */
36
+ export declare class ProviderCommand {
37
+ /**
38
+ * Get current provider
39
+ * Per spec 10_REPL_UX.md: Display "UNSET" if not configured
40
+ *
41
+ * @param projectPath - Project path
42
+ * @returns Provider result
43
+ */
44
+ getProvider(projectPath: string): Promise<ProviderResult>;
45
+ /**
46
+ * Set provider
47
+ * Per spec 10_REPL_UX.md: Save to .claude/repl.json and generate Evidence
48
+ * Per spec 12_LLM_PROVIDER_AND_MODELS.md: Provider change resets model selection
49
+ *
50
+ * @param projectPath - Project path
51
+ * @param providerName - Provider name to set
52
+ * @returns Provider result
53
+ */
54
+ setProvider(projectPath: string, providerName: string): Promise<ProviderResult>;
55
+ /**
56
+ * List all available providers
57
+ * Per spec 10_REPL_UX.md: /provider show lists all providers
58
+ *
59
+ * @returns Provider result with providers list
60
+ */
61
+ listProviders(): Promise<ProviderResult>;
62
+ /**
63
+ * Format providers for display
64
+ *
65
+ * @param providers - Provider list
66
+ * @param currentProvider - Current selected provider (optional)
67
+ * @returns Formatted string
68
+ */
69
+ formatProviderList(providers: ProviderInfo[], currentProvider?: string): string;
70
+ /**
71
+ * Format current provider for display
72
+ *
73
+ * @param provider - Provider ID or "UNSET"
74
+ * @returns Formatted string
75
+ */
76
+ formatCurrentProvider(provider: string): string;
77
+ }
78
+ export { REPL_STATE_FILE };
79
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/repl/commands/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAWH,OAAO,EACL,YAAY,EAGb,MAAM,kCAAkC,CAAC;AAG1C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;GAEG;AACH,QAAA,MAAM,eAAe,cAAc,CAAC;AAEpC;;GAEG;AACH,qBAAa,eAAe;IAC1B;;;;;;OAMG;IACG,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IA6D/D;;;;;;;;OAQG;IACG,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAgGrF;;;;;OAKG;IACG,aAAa,IAAI,OAAO,CAAC,cAAc,CAAC;IAU9C;;;;;;OAMG;IACH,kBAAkB,CAAC,SAAS,EAAE,YAAY,EAAE,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM;IA0B/E;;;;;OAKG;IACH,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAwBhD;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,291 @@
1
+ "use strict";
2
+ /**
3
+ * Provider Command
4
+ *
5
+ * Per spec 10_REPL_UX.md Section 2.1:
6
+ * - /provider: show current selected_provider or "UNSET"
7
+ * - /provider show: list all providers
8
+ * - /provider select: interactive selection UI
9
+ * - /provider <name>: set provider directly
10
+ *
11
+ * Per spec 06_CORRECTNESS_PROPERTIES.md Property 23:
12
+ * - Provider/Model configuration under user control
13
+ */
14
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ var desc = Object.getOwnPropertyDescriptor(m, k);
17
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
+ desc = { enumerable: true, get: function() { return m[k]; } };
19
+ }
20
+ Object.defineProperty(o, k2, desc);
21
+ }) : (function(o, m, k, k2) {
22
+ if (k2 === undefined) k2 = k;
23
+ o[k2] = m[k];
24
+ }));
25
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
27
+ }) : function(o, v) {
28
+ o["default"] = v;
29
+ });
30
+ var __importStar = (this && this.__importStar) || (function () {
31
+ var ownKeys = function(o) {
32
+ ownKeys = Object.getOwnPropertyNames || function (o) {
33
+ var ar = [];
34
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
35
+ return ar;
36
+ };
37
+ return ownKeys(o);
38
+ };
39
+ return function (mod) {
40
+ if (mod && mod.__esModule) return mod;
41
+ var result = {};
42
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
43
+ __setModuleDefault(result, mod);
44
+ return result;
45
+ };
46
+ })();
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.REPL_STATE_FILE = exports.ProviderCommand = void 0;
49
+ const fs = __importStar(require("fs"));
50
+ const path = __importStar(require("path"));
51
+ const repl_1 = require("../../models/repl");
52
+ const model_registry_1 = require("../../models/repl/model-registry");
53
+ const sensitive_data_masker_1 = require("../../logging/sensitive-data-masker");
54
+ /**
55
+ * REPL state file path
56
+ */
57
+ const REPL_STATE_FILE = 'repl.json';
58
+ exports.REPL_STATE_FILE = REPL_STATE_FILE;
59
+ /**
60
+ * Provider Command class
61
+ */
62
+ class ProviderCommand {
63
+ /**
64
+ * Get current provider
65
+ * Per spec 10_REPL_UX.md: Display "UNSET" if not configured
66
+ *
67
+ * @param projectPath - Project path
68
+ * @returns Provider result
69
+ */
70
+ async getProvider(projectPath) {
71
+ const claudeDir = path.join(projectPath, '.claude');
72
+ const statePath = path.join(claudeDir, REPL_STATE_FILE);
73
+ // Check if .claude directory exists
74
+ if (!fs.existsSync(claudeDir)) {
75
+ return {
76
+ success: false,
77
+ message: '.claude directory not found',
78
+ error: {
79
+ code: 'E101',
80
+ message: '.claude directory not found. Run /init first.',
81
+ },
82
+ };
83
+ }
84
+ // Read current state
85
+ if (!fs.existsSync(statePath)) {
86
+ return {
87
+ success: true,
88
+ message: 'Provider not configured',
89
+ provider: 'UNSET',
90
+ configPath: statePath,
91
+ };
92
+ }
93
+ try {
94
+ const content = fs.readFileSync(statePath, 'utf-8');
95
+ const state = JSON.parse(content);
96
+ if (!state.selected_provider) {
97
+ return {
98
+ success: true,
99
+ message: 'Provider not configured',
100
+ provider: 'UNSET',
101
+ configPath: statePath,
102
+ };
103
+ }
104
+ // Get provider info
105
+ const providerInfo = (0, model_registry_1.getProviderInfo)(state.selected_provider);
106
+ return {
107
+ success: true,
108
+ message: 'Provider configured',
109
+ provider: state.selected_provider,
110
+ configPath: statePath,
111
+ };
112
+ }
113
+ catch (err) {
114
+ // Per spec 10_REPL_UX.md: E105 for JSON parse error
115
+ return {
116
+ success: false,
117
+ message: 'Failed to parse repl.json',
118
+ error: {
119
+ code: 'E105',
120
+ message: 'Failed to parse repl.json: ' + err.message,
121
+ },
122
+ };
123
+ }
124
+ }
125
+ /**
126
+ * Set provider
127
+ * Per spec 10_REPL_UX.md: Save to .claude/repl.json and generate Evidence
128
+ * Per spec 12_LLM_PROVIDER_AND_MODELS.md: Provider change resets model selection
129
+ *
130
+ * @param projectPath - Project path
131
+ * @param providerName - Provider name to set
132
+ * @returns Provider result
133
+ */
134
+ async setProvider(projectPath, providerName) {
135
+ const claudeDir = path.join(projectPath, '.claude');
136
+ const statePath = path.join(claudeDir, REPL_STATE_FILE);
137
+ const evidenceDir = path.join(claudeDir, 'evidence');
138
+ // Check if .claude directory exists
139
+ if (!fs.existsSync(claudeDir)) {
140
+ return {
141
+ success: false,
142
+ message: '.claude directory not found',
143
+ error: {
144
+ code: 'E101',
145
+ message: '.claude directory not found. Run /init first.',
146
+ },
147
+ };
148
+ }
149
+ // Validate provider name
150
+ const validationResult = (0, repl_1.validateProvider)(providerName);
151
+ if (!validationResult.valid) {
152
+ const validList = repl_1.VALID_PROVIDERS.join(', ');
153
+ return {
154
+ success: false,
155
+ message: 'Invalid provider: ' + providerName,
156
+ error: {
157
+ code: 'E102',
158
+ message: 'Invalid provider: ' + providerName + '. Valid providers: ' + validList,
159
+ },
160
+ };
161
+ }
162
+ // Read current state or create new
163
+ let state = { ...repl_1.INITIAL_REPL_STATE };
164
+ if (fs.existsSync(statePath)) {
165
+ try {
166
+ const content = fs.readFileSync(statePath, 'utf-8');
167
+ state = JSON.parse(content);
168
+ }
169
+ catch {
170
+ // Ignore parse errors, start fresh
171
+ }
172
+ }
173
+ // Update state
174
+ // Per spec 12_LLM_PROVIDER_AND_MODELS.md: Provider change resets model
175
+ const previousProvider = state.selected_provider;
176
+ state.selected_provider = providerName;
177
+ state.selected_model = null; // Reset model when provider changes
178
+ state.updated_at = new Date().toISOString();
179
+ // Save state
180
+ try {
181
+ fs.writeFileSync(statePath, JSON.stringify(state, null, 2), 'utf-8');
182
+ }
183
+ catch (err) {
184
+ return {
185
+ success: false,
186
+ message: 'Failed to save repl.json',
187
+ error: {
188
+ code: 'E106',
189
+ message: 'Failed to save repl.json: ' + err.message,
190
+ },
191
+ };
192
+ }
193
+ // Generate Evidence
194
+ let evidencePath;
195
+ try {
196
+ if (!fs.existsSync(evidenceDir)) {
197
+ fs.mkdirSync(evidenceDir, { recursive: true });
198
+ }
199
+ const evidenceFilename = 'provider-change-' + Date.now() + '.json';
200
+ evidencePath = path.join(evidenceDir, evidenceFilename);
201
+ const evidence = {
202
+ type: 'provider_change',
203
+ timestamp: new Date().toISOString(),
204
+ previous_provider: previousProvider || null,
205
+ new_provider: providerName,
206
+ model_reset: true,
207
+ config_path: statePath,
208
+ };
209
+ fs.writeFileSync(evidencePath, JSON.stringify(evidence, null, 2), 'utf-8');
210
+ }
211
+ catch {
212
+ // Evidence generation is best-effort
213
+ }
214
+ return {
215
+ success: true,
216
+ message: 'Provider set to ' + providerName,
217
+ provider: providerName,
218
+ configPath: statePath,
219
+ evidencePath,
220
+ };
221
+ }
222
+ /**
223
+ * List all available providers
224
+ * Per spec 10_REPL_UX.md: /provider show lists all providers
225
+ *
226
+ * @returns Provider result with providers list
227
+ */
228
+ async listProviders() {
229
+ const providers = (0, model_registry_1.getAllProviders)();
230
+ return {
231
+ success: true,
232
+ message: 'Available providers',
233
+ providers,
234
+ };
235
+ }
236
+ /**
237
+ * Format providers for display
238
+ *
239
+ * @param providers - Provider list
240
+ * @param currentProvider - Current selected provider (optional)
241
+ * @returns Formatted string
242
+ */
243
+ formatProviderList(providers, currentProvider) {
244
+ let output = 'Available Providers:\n\n';
245
+ for (const provider of providers) {
246
+ const isCurrent = provider.id === currentProvider;
247
+ const marker = isCurrent ? ' (current)' : '';
248
+ const keyStatus = (0, sensitive_data_masker_1.checkApiKeyForProvider)(provider.id);
249
+ output += ' ' + provider.displayName + marker + '\n';
250
+ output += ' ID: ' + provider.id + '\n';
251
+ output += ' ' + provider.description + '\n';
252
+ if (keyStatus.required) {
253
+ output += ' API Key: ' + keyStatus.status + '\n';
254
+ }
255
+ else {
256
+ output += ' API Key: Not required\n';
257
+ }
258
+ output += '\n';
259
+ }
260
+ output += 'Use /provider <id> to select a provider.';
261
+ return output;
262
+ }
263
+ /**
264
+ * Format current provider for display
265
+ *
266
+ * @param provider - Provider ID or "UNSET"
267
+ * @returns Formatted string
268
+ */
269
+ formatCurrentProvider(provider) {
270
+ if (provider === 'UNSET') {
271
+ return 'Current provider: UNSET\n\nUse /provider show to see available providers.';
272
+ }
273
+ const info = (0, model_registry_1.getProviderInfo)(provider);
274
+ if (!info) {
275
+ return 'Current provider: ' + provider + ' (unknown)';
276
+ }
277
+ const keyStatus = (0, sensitive_data_masker_1.checkApiKeyForProvider)(provider);
278
+ let output = 'Current provider: ' + info.displayName + '\n';
279
+ output += ' ID: ' + info.id + '\n';
280
+ output += ' ' + info.description + '\n';
281
+ if (keyStatus.required) {
282
+ output += ' API Key: ' + keyStatus.status;
283
+ }
284
+ else {
285
+ output += ' API Key: Not required';
286
+ }
287
+ return output;
288
+ }
289
+ }
290
+ exports.ProviderCommand = ProviderCommand;
291
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/repl/commands/provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Session Commands Handler
3
+ * Manages /start, /continue, /approve commands
4
+ */
5
+ import { RunnerCore } from '../../core/runner-core';
6
+ import { REPLConfig } from '../repl-interface';
7
+ /**
8
+ * Session command result
9
+ */
10
+ export interface SessionResult {
11
+ success: boolean;
12
+ message?: string;
13
+ sessionId?: string;
14
+ runner?: RunnerCore;
15
+ }
16
+ /**
17
+ * REPL session state (shared with repl-interface)
18
+ */
19
+ export interface REPLSession {
20
+ sessionId: string | null;
21
+ projectPath: string;
22
+ runner: RunnerCore | null;
23
+ supervisor: any;
24
+ status: 'idle' | 'running' | 'paused';
25
+ }
26
+ /**
27
+ * Session commands handler
28
+ */
29
+ export declare class SessionCommands {
30
+ private session;
31
+ private config;
32
+ constructor(session: REPLSession, config: REPLConfig);
33
+ /**
34
+ * Start a new session
35
+ */
36
+ start(projectPath: string): Promise<SessionResult>;
37
+ /**
38
+ * Continue an existing session
39
+ */
40
+ continueSession(sessionId: string): Promise<SessionResult>;
41
+ /**
42
+ * Approve continuation for INCOMPLETE session
43
+ */
44
+ approve(sessionId: string): Promise<SessionResult>;
45
+ /**
46
+ * List available sessions
47
+ */
48
+ listSessions(): Promise<string[]>;
49
+ }
50
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/repl/commands/session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,GAAG,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;CACvC;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,MAAM,CAAa;gBAEf,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU;IAKpD;;OAEG;IACG,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA6BxD;;OAEG;IACG,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAwBhE;;OAEG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAmCxD;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAKxC"}