@channelfactory/cliend 0.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.
- package/dist/bin/cliend.d.ts +3 -0
- package/dist/bin/cliend.d.ts.map +1 -0
- package/dist/bin/cliend.js +7 -0
- package/dist/bin/cliend.js.map +1 -0
- package/dist/src/auth/auth-manager.d.ts +16 -0
- package/dist/src/auth/auth-manager.d.ts.map +1 -0
- package/dist/src/auth/auth-manager.js +135 -0
- package/dist/src/auth/auth-manager.js.map +1 -0
- package/dist/src/auth/credentials-store.d.ts +12 -0
- package/dist/src/auth/credentials-store.d.ts.map +1 -0
- package/dist/src/auth/credentials-store.js +95 -0
- package/dist/src/auth/credentials-store.js.map +1 -0
- package/dist/src/auth/local-server.d.ts +14 -0
- package/dist/src/auth/local-server.d.ts.map +1 -0
- package/dist/src/auth/local-server.js +49 -0
- package/dist/src/auth/local-server.js.map +1 -0
- package/dist/src/config/config-manager.d.ts +11 -0
- package/dist/src/config/config-manager.d.ts.map +1 -0
- package/dist/src/config/config-manager.js +102 -0
- package/dist/src/config/config-manager.js.map +1 -0
- package/dist/src/config/config.schema.d.ts +276 -0
- package/dist/src/config/config.schema.d.ts.map +1 -0
- package/dist/src/config/config.schema.js +46 -0
- package/dist/src/config/config.schema.js.map +1 -0
- package/dist/src/config/defaults.d.ts +3 -0
- package/dist/src/config/defaults.d.ts.map +1 -0
- package/dist/src/config/defaults.js +46 -0
- package/dist/src/config/defaults.js.map +1 -0
- package/dist/src/core/context-builder.d.ts +6 -0
- package/dist/src/core/context-builder.d.ts.map +1 -0
- package/dist/src/core/context-builder.js +55 -0
- package/dist/src/core/context-builder.js.map +1 -0
- package/dist/src/core/fan-out-executor.d.ts +16 -0
- package/dist/src/core/fan-out-executor.d.ts.map +1 -0
- package/dist/src/core/fan-out-executor.js +55 -0
- package/dist/src/core/fan-out-executor.js.map +1 -0
- package/dist/src/core/judge.d.ts +15 -0
- package/dist/src/core/judge.d.ts.map +1 -0
- package/dist/src/core/judge.js +133 -0
- package/dist/src/core/judge.js.map +1 -0
- package/dist/src/core/orchestrator.d.ts +19 -0
- package/dist/src/core/orchestrator.d.ts.map +1 -0
- package/dist/src/core/orchestrator.js +76 -0
- package/dist/src/core/orchestrator.js.map +1 -0
- package/dist/src/errors/auth-error.d.ts +16 -0
- package/dist/src/errors/auth-error.d.ts.map +1 -0
- package/dist/src/errors/auth-error.js +30 -0
- package/dist/src/errors/auth-error.js.map +1 -0
- package/dist/src/errors/base-error.d.ts +13 -0
- package/dist/src/errors/base-error.d.ts.map +1 -0
- package/dist/src/errors/base-error.js +13 -0
- package/dist/src/errors/base-error.js.map +1 -0
- package/dist/src/errors/error-handler.d.ts +7 -0
- package/dist/src/errors/error-handler.d.ts.map +1 -0
- package/dist/src/errors/error-handler.js +20 -0
- package/dist/src/errors/error-handler.js.map +1 -0
- package/dist/src/errors/integration-error.d.ts +20 -0
- package/dist/src/errors/integration-error.d.ts.map +1 -0
- package/dist/src/errors/integration-error.js +29 -0
- package/dist/src/errors/integration-error.js.map +1 -0
- package/dist/src/errors/provider-error.d.ts +23 -0
- package/dist/src/errors/provider-error.d.ts.map +1 -0
- package/dist/src/errors/provider-error.js +49 -0
- package/dist/src/errors/provider-error.js.map +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +20 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/integrations/atlassian/jira-client.d.ts +16 -0
- package/dist/src/integrations/atlassian/jira-client.d.ts.map +1 -0
- package/dist/src/integrations/atlassian/jira-client.js +100 -0
- package/dist/src/integrations/atlassian/jira-client.js.map +1 -0
- package/dist/src/integrations/atlassian/oauth.d.ts +2 -0
- package/dist/src/integrations/atlassian/oauth.d.ts.map +1 -0
- package/dist/src/integrations/atlassian/oauth.js +3 -0
- package/dist/src/integrations/atlassian/oauth.js.map +1 -0
- package/dist/src/integrations/atlassian/rovo-client.d.ts +13 -0
- package/dist/src/integrations/atlassian/rovo-client.d.ts.map +1 -0
- package/dist/src/integrations/atlassian/rovo-client.js +17 -0
- package/dist/src/integrations/atlassian/rovo-client.js.map +1 -0
- package/dist/src/integrations/atlassian/token-store.d.ts +2 -0
- package/dist/src/integrations/atlassian/token-store.d.ts.map +1 -0
- package/dist/src/integrations/atlassian/token-store.js +3 -0
- package/dist/src/integrations/atlassian/token-store.js.map +1 -0
- package/dist/src/integrations/bitbucket/bitbucket-client.d.ts +23 -0
- package/dist/src/integrations/bitbucket/bitbucket-client.d.ts.map +1 -0
- package/dist/src/integrations/bitbucket/bitbucket-client.js +58 -0
- package/dist/src/integrations/bitbucket/bitbucket-client.js.map +1 -0
- package/dist/src/integrations/bitbucket/obsidian-reader.d.ts +21 -0
- package/dist/src/integrations/bitbucket/obsidian-reader.d.ts.map +1 -0
- package/dist/src/integrations/bitbucket/obsidian-reader.js +85 -0
- package/dist/src/integrations/bitbucket/obsidian-reader.js.map +1 -0
- package/dist/src/providers/chatgpt.provider.d.ts +17 -0
- package/dist/src/providers/chatgpt.provider.d.ts.map +1 -0
- package/dist/src/providers/chatgpt.provider.js +66 -0
- package/dist/src/providers/chatgpt.provider.js.map +1 -0
- package/dist/src/providers/claude.provider.d.ts +17 -0
- package/dist/src/providers/claude.provider.d.ts.map +1 -0
- package/dist/src/providers/claude.provider.js +70 -0
- package/dist/src/providers/claude.provider.js.map +1 -0
- package/dist/src/providers/codex.provider.d.ts +17 -0
- package/dist/src/providers/codex.provider.d.ts.map +1 -0
- package/dist/src/providers/codex.provider.js +64 -0
- package/dist/src/providers/codex.provider.js.map +1 -0
- package/dist/src/providers/provider-registry.d.ts +10 -0
- package/dist/src/providers/provider-registry.d.ts.map +1 -0
- package/dist/src/providers/provider-registry.js +29 -0
- package/dist/src/providers/provider-registry.js.map +1 -0
- package/dist/src/providers/provider.interface.d.ts +10 -0
- package/dist/src/providers/provider.interface.d.ts.map +1 -0
- package/dist/src/providers/provider.interface.js +2 -0
- package/dist/src/providers/provider.interface.js.map +1 -0
- package/dist/src/repl/command-registry.d.ts +25 -0
- package/dist/src/repl/command-registry.d.ts.map +1 -0
- package/dist/src/repl/command-registry.js +19 -0
- package/dist/src/repl/command-registry.js.map +1 -0
- package/dist/src/repl/commands/auth.d.ts +3 -0
- package/dist/src/repl/commands/auth.d.ts.map +1 -0
- package/dist/src/repl/commands/auth.js +17 -0
- package/dist/src/repl/commands/auth.js.map +1 -0
- package/dist/src/repl/commands/config.d.ts +3 -0
- package/dist/src/repl/commands/config.d.ts.map +1 -0
- package/dist/src/repl/commands/config.js +39 -0
- package/dist/src/repl/commands/config.js.map +1 -0
- package/dist/src/repl/commands/help.d.ts +3 -0
- package/dist/src/repl/commands/help.d.ts.map +1 -0
- package/dist/src/repl/commands/help.js +33 -0
- package/dist/src/repl/commands/help.js.map +1 -0
- package/dist/src/repl/commands/memory.d.ts +3 -0
- package/dist/src/repl/commands/memory.d.ts.map +1 -0
- package/dist/src/repl/commands/memory.js +30 -0
- package/dist/src/repl/commands/memory.js.map +1 -0
- package/dist/src/repl/commands/obsidian.d.ts +3 -0
- package/dist/src/repl/commands/obsidian.d.ts.map +1 -0
- package/dist/src/repl/commands/obsidian.js +30 -0
- package/dist/src/repl/commands/obsidian.js.map +1 -0
- package/dist/src/repl/commands/sessions.d.ts +5 -0
- package/dist/src/repl/commands/sessions.d.ts.map +1 -0
- package/dist/src/repl/commands/sessions.js +77 -0
- package/dist/src/repl/commands/sessions.js.map +1 -0
- package/dist/src/repl/commands/status.d.ts +3 -0
- package/dist/src/repl/commands/status.d.ts.map +1 -0
- package/dist/src/repl/commands/status.js +32 -0
- package/dist/src/repl/commands/status.js.map +1 -0
- package/dist/src/repl/commands/ticket.d.ts +3 -0
- package/dist/src/repl/commands/ticket.d.ts.map +1 -0
- package/dist/src/repl/commands/ticket.js +38 -0
- package/dist/src/repl/commands/ticket.js.map +1 -0
- package/dist/src/repl/input-parser.d.ts +13 -0
- package/dist/src/repl/input-parser.d.ts.map +1 -0
- package/dist/src/repl/input-parser.js +25 -0
- package/dist/src/repl/input-parser.js.map +1 -0
- package/dist/src/repl/repl.d.ts +34 -0
- package/dist/src/repl/repl.d.ts.map +1 -0
- package/dist/src/repl/repl.js +180 -0
- package/dist/src/repl/repl.js.map +1 -0
- package/dist/src/session/history.d.ts +8 -0
- package/dist/src/session/history.d.ts.map +1 -0
- package/dist/src/session/history.js +26 -0
- package/dist/src/session/history.js.map +1 -0
- package/dist/src/session/memory-manager.d.ts +20 -0
- package/dist/src/session/memory-manager.d.ts.map +1 -0
- package/dist/src/session/memory-manager.js +65 -0
- package/dist/src/session/memory-manager.js.map +1 -0
- package/dist/src/session/session-manager.d.ts +15 -0
- package/dist/src/session/session-manager.d.ts.map +1 -0
- package/dist/src/session/session-manager.js +139 -0
- package/dist/src/session/session-manager.js.map +1 -0
- package/dist/src/session/session.d.ts +31 -0
- package/dist/src/session/session.d.ts.map +1 -0
- package/dist/src/session/session.js +49 -0
- package/dist/src/session/session.js.map +1 -0
- package/dist/src/types/ai-response.d.ts +40 -0
- package/dist/src/types/ai-response.d.ts.map +1 -0
- package/dist/src/types/ai-response.js +2 -0
- package/dist/src/types/ai-response.js.map +1 -0
- package/dist/src/types/config.d.ts +51 -0
- package/dist/src/types/config.d.ts.map +1 -0
- package/dist/src/types/config.js +2 -0
- package/dist/src/types/config.js.map +1 -0
- package/dist/src/types/context.d.ts +18 -0
- package/dist/src/types/context.d.ts.map +1 -0
- package/dist/src/types/context.js +2 -0
- package/dist/src/types/context.js.map +1 -0
- package/dist/src/types/message.d.ts +13 -0
- package/dist/src/types/message.d.ts.map +1 -0
- package/dist/src/types/message.js +2 -0
- package/dist/src/types/message.js.map +1 -0
- package/dist/src/types/session.d.ts +30 -0
- package/dist/src/types/session.d.ts.map +1 -0
- package/dist/src/types/session.js +2 -0
- package/dist/src/types/session.js.map +1 -0
- package/dist/src/types/ticket.d.ts +18 -0
- package/dist/src/types/ticket.d.ts.map +1 -0
- package/dist/src/types/ticket.js +2 -0
- package/dist/src/types/ticket.js.map +1 -0
- package/dist/src/ui/logger.d.ts +3 -0
- package/dist/src/ui/logger.d.ts.map +1 -0
- package/dist/src/ui/logger.js +10 -0
- package/dist/src/ui/logger.js.map +1 -0
- package/dist/src/ui/output-formatter.d.ts +4 -0
- package/dist/src/ui/output-formatter.d.ts.map +1 -0
- package/dist/src/ui/output-formatter.js +52 -0
- package/dist/src/ui/output-formatter.js.map +1 -0
- package/dist/src/ui/prompt-line.d.ts +2 -0
- package/dist/src/ui/prompt-line.d.ts.map +1 -0
- package/dist/src/ui/prompt-line.js +4 -0
- package/dist/src/ui/prompt-line.js.map +1 -0
- package/dist/src/ui/spinner.d.ts +3 -0
- package/dist/src/ui/spinner.d.ts.map +1 -0
- package/dist/src/ui/spinner.js +5 -0
- package/dist/src/ui/spinner.js.map +1 -0
- package/dist/src/ui/welcome.d.ts +2 -0
- package/dist/src/ui/welcome.d.ts.map +1 -0
- package/dist/src/ui/welcome.js +14 -0
- package/dist/src/ui/welcome.js.map +1 -0
- package/dist/src/utils/crypto.d.ts +2 -0
- package/dist/src/utils/crypto.d.ts.map +1 -0
- package/dist/src/utils/crypto.js +3 -0
- package/dist/src/utils/crypto.js.map +1 -0
- package/dist/src/utils/http-client.d.ts +8 -0
- package/dist/src/utils/http-client.d.ts.map +1 -0
- package/dist/src/utils/http-client.js +36 -0
- package/dist/src/utils/http-client.js.map +1 -0
- package/dist/src/utils/retry.d.ts +7 -0
- package/dist/src/utils/retry.d.ts.map +1 -0
- package/dist/src/utils/retry.js +23 -0
- package/dist/src/utils/retry.js.map +1 -0
- package/dist/src/utils/validation.d.ts +9 -0
- package/dist/src/utils/validation.d.ts.map +1 -0
- package/dist/src/utils/validation.js +19 -0
- package/dist/src/utils/validation.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import Anthropic from '@anthropic-ai/sdk';
|
|
2
|
+
export class Judge {
|
|
3
|
+
config;
|
|
4
|
+
apiKey;
|
|
5
|
+
logger;
|
|
6
|
+
client = null;
|
|
7
|
+
constructor(config, apiKey, logger) {
|
|
8
|
+
this.config = config;
|
|
9
|
+
this.apiKey = apiKey;
|
|
10
|
+
this.logger = logger;
|
|
11
|
+
}
|
|
12
|
+
async evaluate(taskDescription, responses) {
|
|
13
|
+
const successful = responses.filter((r) => r.success && r.output);
|
|
14
|
+
// If only one succeeded, auto-select
|
|
15
|
+
if (successful.length === 1) {
|
|
16
|
+
const winner = successful[0];
|
|
17
|
+
return {
|
|
18
|
+
scores: [
|
|
19
|
+
{
|
|
20
|
+
providerName: winner.providerName,
|
|
21
|
+
readability: 0,
|
|
22
|
+
performance: 0,
|
|
23
|
+
standards: 0,
|
|
24
|
+
completeness: 0,
|
|
25
|
+
security: 0,
|
|
26
|
+
totalScore: 0,
|
|
27
|
+
reasoning: 'Only provider that responded successfully.',
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
winner: winner.providerName,
|
|
31
|
+
winningOutput: winner.output,
|
|
32
|
+
summary: `${winner.providerName} was the only provider that responded.`,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
if (successful.length === 0) {
|
|
36
|
+
return {
|
|
37
|
+
scores: [],
|
|
38
|
+
winner: 'none',
|
|
39
|
+
winningOutput: { code: '', explanation: 'All providers failed.' },
|
|
40
|
+
summary: 'All providers failed to generate a response.',
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
// Use Claude to judge
|
|
44
|
+
return this.judgeWithAI(taskDescription, successful);
|
|
45
|
+
}
|
|
46
|
+
async judgeWithAI(taskDescription, responses) {
|
|
47
|
+
if (!this.client) {
|
|
48
|
+
this.client = new Anthropic({ apiKey: this.apiKey });
|
|
49
|
+
}
|
|
50
|
+
const w = this.config.weights;
|
|
51
|
+
const systemPrompt = `You are an expert code reviewer. You will receive multiple code outputs from different AI systems for the same task. Score each output on 5 dimensions (0-10 scale):
|
|
52
|
+
|
|
53
|
+
1. **Readability** (weight: ${w.readability}): Code clarity, naming, structure
|
|
54
|
+
2. **Performance** (weight: ${w.performance}): Algorithm efficiency, resource usage
|
|
55
|
+
3. **Standards** (weight: ${w.standards}): Adherence to project conventions and best practices
|
|
56
|
+
4. **Completeness** (weight: ${w.completeness}): How fully the task is addressed, edge cases handled
|
|
57
|
+
5. **Security** (weight: ${w.security}): Input validation, no introduced vulnerabilities
|
|
58
|
+
|
|
59
|
+
Respond ONLY with valid JSON matching this schema:
|
|
60
|
+
{
|
|
61
|
+
"scores": [
|
|
62
|
+
{
|
|
63
|
+
"providerName": "string",
|
|
64
|
+
"readability": number,
|
|
65
|
+
"performance": number,
|
|
66
|
+
"standards": number,
|
|
67
|
+
"completeness": number,
|
|
68
|
+
"security": number,
|
|
69
|
+
"reasoning": "string"
|
|
70
|
+
}
|
|
71
|
+
],
|
|
72
|
+
"summary": "string"
|
|
73
|
+
}`;
|
|
74
|
+
const userMessage = this.buildJudgePrompt(taskDescription, responses);
|
|
75
|
+
const response = await this.client.messages.create({
|
|
76
|
+
model: this.config.model,
|
|
77
|
+
max_tokens: 4096,
|
|
78
|
+
system: systemPrompt,
|
|
79
|
+
messages: [{ role: 'user', content: userMessage }],
|
|
80
|
+
});
|
|
81
|
+
const text = response.content
|
|
82
|
+
.filter((block) => block.type === 'text')
|
|
83
|
+
.map((block) => block.text)
|
|
84
|
+
.join('');
|
|
85
|
+
try {
|
|
86
|
+
const parsed = JSON.parse(text);
|
|
87
|
+
const scores = parsed.scores.map((s) => ({
|
|
88
|
+
...s,
|
|
89
|
+
totalScore: this.computeTotal(s),
|
|
90
|
+
}));
|
|
91
|
+
scores.sort((a, b) => b.totalScore - a.totalScore);
|
|
92
|
+
const winnerName = scores[0].providerName;
|
|
93
|
+
const winnerResponse = responses.find((r) => r.providerName === winnerName);
|
|
94
|
+
return {
|
|
95
|
+
scores,
|
|
96
|
+
winner: winnerName,
|
|
97
|
+
winningOutput: winnerResponse?.output ?? { code: '', explanation: '' },
|
|
98
|
+
summary: parsed.summary,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
this.logger.error({ err: error, raw: text }, 'Failed to parse judge response');
|
|
103
|
+
// Fallback: pick the first successful response
|
|
104
|
+
const fallback = responses[0];
|
|
105
|
+
return {
|
|
106
|
+
scores: [],
|
|
107
|
+
winner: fallback.providerName,
|
|
108
|
+
winningOutput: fallback.output,
|
|
109
|
+
summary: 'Judge failed to evaluate. Using first provider output.',
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
buildJudgePrompt(taskDescription, responses) {
|
|
114
|
+
const parts = [`## Task\n${taskDescription}\n`];
|
|
115
|
+
for (const r of responses) {
|
|
116
|
+
parts.push(`## Output from: ${r.providerName}`);
|
|
117
|
+
parts.push('```');
|
|
118
|
+
parts.push(r.output.code);
|
|
119
|
+
parts.push('```\n');
|
|
120
|
+
}
|
|
121
|
+
return parts.join('\n');
|
|
122
|
+
}
|
|
123
|
+
computeTotal(scores) {
|
|
124
|
+
const w = this.config.weights;
|
|
125
|
+
return Math.round((scores.readability * w.readability +
|
|
126
|
+
scores.performance * w.performance +
|
|
127
|
+
scores.standards * w.standards +
|
|
128
|
+
scores.completeness * w.completeness +
|
|
129
|
+
scores.security * w.security) *
|
|
130
|
+
10);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=judge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"judge.js","sourceRoot":"","sources":["../../../src/core/judge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Logger } from 'pino';
|
|
2
|
+
import type { AppConfig } from '../types/config.js';
|
|
3
|
+
import type { SessionInstance } from '../session/session.js';
|
|
4
|
+
import type { MessageMetadata } from '../types/message.js';
|
|
5
|
+
export interface OrchestratorResult {
|
|
6
|
+
content: string;
|
|
7
|
+
metadata?: MessageMetadata;
|
|
8
|
+
}
|
|
9
|
+
export declare class Orchestrator {
|
|
10
|
+
private readonly config;
|
|
11
|
+
private readonly logger;
|
|
12
|
+
private readonly contextBuilder;
|
|
13
|
+
private readonly fanOut;
|
|
14
|
+
private readonly judge;
|
|
15
|
+
private readonly registry;
|
|
16
|
+
constructor(config: AppConfig, logger: Logger);
|
|
17
|
+
process(session: SessionInstance, userMessage: string): Promise<OrchestratorResult>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/core/orchestrator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAO3D,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED,qBAAa,YAAY;IAOrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPzB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;gBAGzB,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,MAAM;IAQ3B,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;CA8D1F"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { ContextBuilder } from './context-builder.js';
|
|
3
|
+
import { FanOutExecutor } from './fan-out-executor.js';
|
|
4
|
+
import { Judge } from './judge.js';
|
|
5
|
+
import { ProviderRegistry } from '../providers/provider-registry.js';
|
|
6
|
+
import { renderScoreTable, renderWinnerCode } from '../ui/output-formatter.js';
|
|
7
|
+
export class Orchestrator {
|
|
8
|
+
config;
|
|
9
|
+
logger;
|
|
10
|
+
contextBuilder;
|
|
11
|
+
fanOut;
|
|
12
|
+
judge;
|
|
13
|
+
registry;
|
|
14
|
+
constructor(config, logger) {
|
|
15
|
+
this.config = config;
|
|
16
|
+
this.logger = logger;
|
|
17
|
+
this.contextBuilder = new ContextBuilder();
|
|
18
|
+
this.fanOut = new FanOutExecutor(logger);
|
|
19
|
+
this.judge = new Judge(config.judge, config.providers.claude.apiKey, logger);
|
|
20
|
+
this.registry = new ProviderRegistry(config.providers);
|
|
21
|
+
}
|
|
22
|
+
async process(session, userMessage) {
|
|
23
|
+
// Step 1: Build context from session state
|
|
24
|
+
const context = this.contextBuilder.build(session, userMessage);
|
|
25
|
+
// Step 2: Get available providers
|
|
26
|
+
const providers = await this.registry.getAvailable();
|
|
27
|
+
if (providers.length === 0) {
|
|
28
|
+
return {
|
|
29
|
+
content: 'No AI providers are configured or available. Check /config and ensure API keys are set.',
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
console.log(chalk.dim(` Sending to ${providers.length} AI provider${providers.length > 1 ? 's' : ''}...`));
|
|
33
|
+
// Step 3: Fan-out to all providers in parallel
|
|
34
|
+
const responses = await this.fanOut.execute(providers, context, session.history);
|
|
35
|
+
const successful = responses.filter((r) => r.success);
|
|
36
|
+
const failed = responses.filter((r) => !r.success);
|
|
37
|
+
// Report failures
|
|
38
|
+
for (const f of failed) {
|
|
39
|
+
console.log(chalk.yellow(` ${f.providerName}: failed — ${f.error}`));
|
|
40
|
+
}
|
|
41
|
+
if (successful.length === 0) {
|
|
42
|
+
return {
|
|
43
|
+
content: 'All AI providers failed to respond. Check /status for connectivity.',
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
// Step 4: Judge and score (if multiple succeeded)
|
|
47
|
+
let result;
|
|
48
|
+
if (successful.length === 1) {
|
|
49
|
+
const winner = successful[0];
|
|
50
|
+
console.log(chalk.dim(` Only ${winner.providerName} responded. Skipping judge.\n`));
|
|
51
|
+
result = {
|
|
52
|
+
scores: [],
|
|
53
|
+
winner: winner.providerName,
|
|
54
|
+
winningOutput: winner.output,
|
|
55
|
+
summary: `${winner.providerName} was the only responder.`,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
console.log(chalk.dim(' Evaluating outputs...\n'));
|
|
60
|
+
result = await this.judge.evaluate(userMessage, responses);
|
|
61
|
+
// Display score table
|
|
62
|
+
if (result.scores.length > 0) {
|
|
63
|
+
renderScoreTable(result.scores);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Step 5: Display winning output
|
|
67
|
+
renderWinnerCode(result.winner, result.winningOutput);
|
|
68
|
+
return {
|
|
69
|
+
content: result.winningOutput.code,
|
|
70
|
+
metadata: {
|
|
71
|
+
providerScores: result,
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../src/core/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { CliendError } from './base-error.js';
|
|
2
|
+
export declare class AuthenticationError extends CliendError {
|
|
3
|
+
constructor(options: {
|
|
4
|
+
code: string;
|
|
5
|
+
message: string;
|
|
6
|
+
userMessage: string;
|
|
7
|
+
cause?: Error;
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
export declare class TokenExpiredError extends AuthenticationError {
|
|
11
|
+
constructor(cause?: Error);
|
|
12
|
+
}
|
|
13
|
+
export declare class OAuthFlowError extends AuthenticationError {
|
|
14
|
+
constructor(message: string, cause?: Error);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=auth-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-error.d.ts","sourceRoot":"","sources":["../../../src/errors/auth-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,qBAAa,mBAAoB,SAAQ,WAAW;gBACtC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE;CAI3F;AAED,qBAAa,iBAAkB,SAAQ,mBAAmB;gBAC5C,KAAK,CAAC,EAAE,KAAK;CAS1B;AAED,qBAAa,cAAe,SAAQ,mBAAmB;gBACzC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAS3C"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { CliendError } from './base-error.js';
|
|
2
|
+
export class AuthenticationError extends CliendError {
|
|
3
|
+
constructor(options) {
|
|
4
|
+
super({ ...options, recoverable: true });
|
|
5
|
+
this.name = 'AuthenticationError';
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export class TokenExpiredError extends AuthenticationError {
|
|
9
|
+
constructor(cause) {
|
|
10
|
+
super({
|
|
11
|
+
code: 'AUTH_TOKEN_EXPIRED',
|
|
12
|
+
message: 'OAuth access token has expired',
|
|
13
|
+
userMessage: 'Your session has expired. Attempting to refresh...',
|
|
14
|
+
cause,
|
|
15
|
+
});
|
|
16
|
+
this.name = 'TokenExpiredError';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export class OAuthFlowError extends AuthenticationError {
|
|
20
|
+
constructor(message, cause) {
|
|
21
|
+
super({
|
|
22
|
+
code: 'AUTH_OAUTH_FAILED',
|
|
23
|
+
message,
|
|
24
|
+
userMessage: 'Authentication failed. Run /auth to re-authenticate.',
|
|
25
|
+
cause,
|
|
26
|
+
});
|
|
27
|
+
this.name = 'OAuthFlowError';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=auth-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-error.js","sourceRoot":"","sources":["../../../src/errors/auth-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,OAAO,mBAAoB,SAAQ,WAAW;IAClD,YAAY,OAA8E;QACxF,KAAK,CAAC,EAAE,GAAG,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,mBAAmB;IACxD,YAAY,KAAa;QACvB,KAAK,CAAC;YACJ,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE,gCAAgC;YACzC,WAAW,EAAE,oDAAoD;YACjE,KAAK;SACN,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,mBAAmB;IACrD,YAAY,OAAe,EAAE,KAAa;QACxC,KAAK,CAAC;YACJ,IAAI,EAAE,mBAAmB;YACzB,OAAO;YACP,WAAW,EAAE,sDAAsD;YACnE,KAAK;SACN,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare class CliendError extends Error {
|
|
2
|
+
readonly code: string;
|
|
3
|
+
readonly userMessage: string;
|
|
4
|
+
readonly recoverable: boolean;
|
|
5
|
+
constructor(options: {
|
|
6
|
+
code: string;
|
|
7
|
+
message: string;
|
|
8
|
+
userMessage: string;
|
|
9
|
+
recoverable?: boolean;
|
|
10
|
+
cause?: Error;
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=base-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-error.d.ts","sourceRoot":"","sources":["../../../src/errors/base-error.ts"],"names":[],"mappings":"AAAA,qBAAa,WAAY,SAAQ,KAAK;IACpC,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,WAAW,EAAE,MAAM,CAAC;IACpC,SAAgB,WAAW,EAAE,OAAO,CAAC;gBAEzB,OAAO,EAAE;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,KAAK,CAAC,EAAE,KAAK,CAAC;KACf;CAOF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export class CliendError extends Error {
|
|
2
|
+
code;
|
|
3
|
+
userMessage;
|
|
4
|
+
recoverable;
|
|
5
|
+
constructor(options) {
|
|
6
|
+
super(options.message, { cause: options.cause });
|
|
7
|
+
this.name = 'CliendError';
|
|
8
|
+
this.code = options.code;
|
|
9
|
+
this.userMessage = options.userMessage;
|
|
10
|
+
this.recoverable = options.recoverable ?? false;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=base-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-error.js","sourceRoot":"","sources":["../../../src/errors/base-error.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpB,IAAI,CAAS;IACb,WAAW,CAAS;IACpB,WAAW,CAAU;IAErC,YAAY,OAMX;QACC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,KAAK,CAAC;IAClD,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../../src/errors/error-handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAE3C,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;CAc/B"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { CliendError } from './base-error.js';
|
|
2
|
+
export class ErrorHandler {
|
|
3
|
+
logger;
|
|
4
|
+
constructor(logger) {
|
|
5
|
+
this.logger = logger;
|
|
6
|
+
}
|
|
7
|
+
handle(error) {
|
|
8
|
+
if (error instanceof CliendError) {
|
|
9
|
+
this.logger.error({ code: error.code, cause: error.cause }, error.message);
|
|
10
|
+
return error.userMessage;
|
|
11
|
+
}
|
|
12
|
+
if (error instanceof Error) {
|
|
13
|
+
this.logger.error({ err: error }, 'Unexpected error');
|
|
14
|
+
return `Something went wrong: ${error.message}`;
|
|
15
|
+
}
|
|
16
|
+
this.logger.error({ err: error }, 'Unknown error');
|
|
17
|
+
return 'An unexpected error occurred.';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=error-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../../src/errors/error-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C,MAAM,OAAO,YAAY;IACM;IAA7B,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE/C,MAAM,CAAC,KAAc;QACnB,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAC3E,OAAO,KAAK,CAAC,WAAW,CAAC;QAC3B,CAAC;QAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,kBAAkB,CAAC,CAAC;YACtD,OAAO,yBAAyB,KAAK,CAAC,OAAO,EAAE,CAAC;QAClD,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,eAAe,CAAC,CAAC;QACnD,OAAO,+BAA+B,CAAC;IACzC,CAAC;CACF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { CliendError } from './base-error.js';
|
|
2
|
+
export declare class IntegrationError extends CliendError {
|
|
3
|
+
constructor(options: {
|
|
4
|
+
code: string;
|
|
5
|
+
message: string;
|
|
6
|
+
userMessage: string;
|
|
7
|
+
recoverable?: boolean;
|
|
8
|
+
cause?: Error;
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
export declare class JiraApiError extends IntegrationError {
|
|
12
|
+
constructor(code: string, message: string, userMessage: string, cause?: Error);
|
|
13
|
+
static issueNotFound(key: string): JiraApiError;
|
|
14
|
+
static forbidden(key: string): JiraApiError;
|
|
15
|
+
}
|
|
16
|
+
export declare class BitbucketApiError extends IntegrationError {
|
|
17
|
+
constructor(code: string, message: string, userMessage: string, cause?: Error);
|
|
18
|
+
static repoNotFound(workspace: string, slug: string): BitbucketApiError;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=integration-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integration-error.d.ts","sourceRoot":"","sources":["../../../src/errors/integration-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,qBAAa,gBAAiB,SAAQ,WAAW;gBACnC,OAAO,EAAE;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,KAAK,CAAC,EAAE,KAAK,CAAC;KACf;CAIF;AAED,qBAAa,YAAa,SAAQ,gBAAgB;gBACpC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;IAK7E,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY;IAQ/C,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY;CAO5C;AAED,qBAAa,iBAAkB,SAAQ,gBAAgB;gBACzC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;IAK7E,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,iBAAiB;CAOxE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { CliendError } from './base-error.js';
|
|
2
|
+
export class IntegrationError extends CliendError {
|
|
3
|
+
constructor(options) {
|
|
4
|
+
super(options);
|
|
5
|
+
this.name = 'IntegrationError';
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export class JiraApiError extends IntegrationError {
|
|
9
|
+
constructor(code, message, userMessage, cause) {
|
|
10
|
+
super({ code, message, userMessage, recoverable: true, cause });
|
|
11
|
+
this.name = 'JiraApiError';
|
|
12
|
+
}
|
|
13
|
+
static issueNotFound(key) {
|
|
14
|
+
return new JiraApiError('JIRA_ISSUE_NOT_FOUND', `Jira issue ${key} not found`, `Ticket ${key} was not found. Check the ticket ID and try again.`);
|
|
15
|
+
}
|
|
16
|
+
static forbidden(key) {
|
|
17
|
+
return new JiraApiError('JIRA_FORBIDDEN', `No permission to access ${key}`, `No permission to access ${key}. Run /auth to re-authenticate.`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export class BitbucketApiError extends IntegrationError {
|
|
21
|
+
constructor(code, message, userMessage, cause) {
|
|
22
|
+
super({ code, message, userMessage, recoverable: true, cause });
|
|
23
|
+
this.name = 'BitbucketApiError';
|
|
24
|
+
}
|
|
25
|
+
static repoNotFound(workspace, slug) {
|
|
26
|
+
return new BitbucketApiError('BITBUCKET_REPO_NOT_FOUND', `Repository ${workspace}/${slug} not found`, `Bitbucket repo ${workspace}/${slug} not found. Check /config.`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=integration-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integration-error.js","sourceRoot":"","sources":["../../../src/errors/integration-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,OAAO,gBAAiB,SAAQ,WAAW;IAC/C,YAAY,OAMX;QACC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,gBAAgB;IAChD,YAAY,IAAY,EAAE,OAAe,EAAE,WAAmB,EAAE,KAAa;QAC3E,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,GAAW;QAC9B,OAAO,IAAI,YAAY,CACrB,sBAAsB,EACtB,cAAc,GAAG,YAAY,EAC7B,UAAU,GAAG,oDAAoD,CAClE,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,GAAW;QAC1B,OAAO,IAAI,YAAY,CACrB,gBAAgB,EAChB,2BAA2B,GAAG,EAAE,EAChC,2BAA2B,GAAG,iCAAiC,CAChE,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,gBAAgB;IACrD,YAAY,IAAY,EAAE,OAAe,EAAE,WAAmB,EAAE,KAAa;QAC3E,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,SAAiB,EAAE,IAAY;QACjD,OAAO,IAAI,iBAAiB,CAC1B,0BAA0B,EAC1B,cAAc,SAAS,IAAI,IAAI,YAAY,EAC3C,kBAAkB,SAAS,IAAI,IAAI,4BAA4B,CAChE,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { CliendError } from './base-error.js';
|
|
2
|
+
export declare class AIProviderError extends CliendError {
|
|
3
|
+
readonly providerName: string;
|
|
4
|
+
constructor(options: {
|
|
5
|
+
code: string;
|
|
6
|
+
providerName: string;
|
|
7
|
+
message: string;
|
|
8
|
+
userMessage: string;
|
|
9
|
+
recoverable?: boolean;
|
|
10
|
+
cause?: Error;
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
export declare class ProviderTimeoutError extends AIProviderError {
|
|
14
|
+
constructor(providerName: string, timeoutMs: number);
|
|
15
|
+
}
|
|
16
|
+
export declare class ProviderRateLimitError extends AIProviderError {
|
|
17
|
+
constructor(providerName: string, cause?: Error);
|
|
18
|
+
}
|
|
19
|
+
export declare class AllProvidersFailedError extends CliendError {
|
|
20
|
+
readonly errors: AIProviderError[];
|
|
21
|
+
constructor(errors: AIProviderError[]);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=provider-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-error.d.ts","sourceRoot":"","sources":["../../../src/errors/provider-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,SAAgB,YAAY,EAAE,MAAM,CAAC;gBAEzB,OAAO,EAAE;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,KAAK,CAAC,EAAE,KAAK,CAAC;KACf;CAKF;AAED,qBAAa,oBAAqB,SAAQ,eAAe;gBAC3C,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAUpD;AAED,qBAAa,sBAAuB,SAAQ,eAAe;gBAC7C,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAWhD;AAED,qBAAa,uBAAwB,SAAQ,WAAW;IACtD,SAAgB,MAAM,EAAE,eAAe,EAAE,CAAC;gBAE9B,MAAM,EAAE,eAAe,EAAE;CAWtC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { CliendError } from './base-error.js';
|
|
2
|
+
export class AIProviderError extends CliendError {
|
|
3
|
+
providerName;
|
|
4
|
+
constructor(options) {
|
|
5
|
+
super(options);
|
|
6
|
+
this.name = 'AIProviderError';
|
|
7
|
+
this.providerName = options.providerName;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export class ProviderTimeoutError extends AIProviderError {
|
|
11
|
+
constructor(providerName, timeoutMs) {
|
|
12
|
+
super({
|
|
13
|
+
code: 'PROVIDER_TIMEOUT',
|
|
14
|
+
providerName,
|
|
15
|
+
message: `${providerName} timed out after ${timeoutMs}ms`,
|
|
16
|
+
userMessage: `${providerName} took too long to respond. Skipping.`,
|
|
17
|
+
recoverable: true,
|
|
18
|
+
});
|
|
19
|
+
this.name = 'ProviderTimeoutError';
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export class ProviderRateLimitError extends AIProviderError {
|
|
23
|
+
constructor(providerName, cause) {
|
|
24
|
+
super({
|
|
25
|
+
code: 'PROVIDER_RATE_LIMITED',
|
|
26
|
+
providerName,
|
|
27
|
+
message: `${providerName} rate limited`,
|
|
28
|
+
userMessage: `${providerName} rate limit hit. Will retry.`,
|
|
29
|
+
recoverable: true,
|
|
30
|
+
cause,
|
|
31
|
+
});
|
|
32
|
+
this.name = 'ProviderRateLimitError';
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export class AllProvidersFailedError extends CliendError {
|
|
36
|
+
errors;
|
|
37
|
+
constructor(errors) {
|
|
38
|
+
const names = errors.map((e) => e.providerName).join(', ');
|
|
39
|
+
super({
|
|
40
|
+
code: 'PROVIDER_ALL_FAILED',
|
|
41
|
+
message: `All AI providers failed: ${names}`,
|
|
42
|
+
userMessage: 'All AI providers failed to respond. Please try again.',
|
|
43
|
+
recoverable: false,
|
|
44
|
+
});
|
|
45
|
+
this.name = 'AllProvidersFailedError';
|
|
46
|
+
this.errors = errors;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=provider-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-error.js","sourceRoot":"","sources":["../../../src/errors/provider-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,OAAO,eAAgB,SAAQ,WAAW;IAC9B,YAAY,CAAS;IAErC,YAAY,OAOX;QACC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAC3C,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,eAAe;IACvD,YAAY,YAAoB,EAAE,SAAiB;QACjD,KAAK,CAAC;YACJ,IAAI,EAAE,kBAAkB;YACxB,YAAY;YACZ,OAAO,EAAE,GAAG,YAAY,oBAAoB,SAAS,IAAI;YACzD,WAAW,EAAE,GAAG,YAAY,sCAAsC;YAClE,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,eAAe;IACzD,YAAY,YAAoB,EAAE,KAAa;QAC7C,KAAK,CAAC;YACJ,IAAI,EAAE,uBAAuB;YAC7B,YAAY;YACZ,OAAO,EAAE,GAAG,YAAY,eAAe;YACvC,WAAW,EAAE,GAAG,YAAY,8BAA8B;YAC1D,WAAW,EAAE,IAAI;YACjB,KAAK;SACN,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED,MAAM,OAAO,uBAAwB,SAAQ,WAAW;IACtC,MAAM,CAAoB;IAE1C,YAAY,MAAyB;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,KAAK,CAAC;YACJ,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,4BAA4B,KAAK,EAAE;YAC5C,WAAW,EAAE,uDAAuD;YACpE,WAAW,EAAE,KAAK;SACnB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAMA,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBxD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Repl } from './repl/repl.js';
|
|
2
|
+
import { ConfigManager } from './config/config-manager.js';
|
|
3
|
+
import { SessionManager } from './session/session-manager.js';
|
|
4
|
+
import { AuthManager } from './auth/auth-manager.js';
|
|
5
|
+
import { createLogger } from './ui/logger.js';
|
|
6
|
+
export async function main(argv) {
|
|
7
|
+
const logger = createLogger();
|
|
8
|
+
const configManager = new ConfigManager();
|
|
9
|
+
const config = await configManager.load();
|
|
10
|
+
const authManager = new AuthManager(config, logger);
|
|
11
|
+
const sessionManager = new SessionManager(process.cwd(), logger);
|
|
12
|
+
const repl = new Repl({
|
|
13
|
+
config,
|
|
14
|
+
authManager,
|
|
15
|
+
sessionManager,
|
|
16
|
+
logger,
|
|
17
|
+
});
|
|
18
|
+
await repl.start();
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAc;IACvC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;IAE1C,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpD,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IAEjE,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC;QACpB,MAAM;QACN,WAAW;QACX,cAAc;QACd,MAAM;KACP,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Logger } from 'pino';
|
|
2
|
+
import type { AppConfig } from '../../types/config.js';
|
|
3
|
+
import type { JiraTicket } from '../../types/ticket.js';
|
|
4
|
+
export declare class JiraClient {
|
|
5
|
+
private readonly config;
|
|
6
|
+
private readonly logger;
|
|
7
|
+
private readonly authManager;
|
|
8
|
+
constructor(config: AppConfig, logger: Logger);
|
|
9
|
+
getIssue(issueKey: string): Promise<JiraTicket>;
|
|
10
|
+
private getCloudId;
|
|
11
|
+
private request;
|
|
12
|
+
private mapIssue;
|
|
13
|
+
private extractText;
|
|
14
|
+
private extractCustomField;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=jira-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jira-client.d.ts","sourceRoot":"","sources":["../../../../src/integrations/atlassian/jira-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAMxD,qBAAa,UAAU;IAInB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;gBAGvB,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,MAAM;IAK3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;YAwBvC,UAAU;YAgCV,OAAO;IAUrB,OAAO,CAAC,QAAQ;IAgBhB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,kBAAkB;CAc3B"}
|