vault-forge 2.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.
- package/LICENSE +21 -0
- package/README.md +336 -0
- package/dist/actions/dummy.d.ts +2 -0
- package/dist/actions/dummy.d.ts.map +1 -0
- package/dist/actions/dummy.js +3 -0
- package/dist/actions/dummy.js.map +1 -0
- package/dist/actions/mainAction.d.ts +5 -0
- package/dist/actions/mainAction.d.ts.map +1 -0
- package/dist/actions/mainAction.js +68 -0
- package/dist/actions/mainAction.js.map +1 -0
- package/dist/commands/ai.d.ts +3 -0
- package/dist/commands/ai.d.ts.map +1 -0
- package/dist/commands/ai.js +20 -0
- package/dist/commands/ai.js.map +1 -0
- package/dist/commands/ask.d.ts +3 -0
- package/dist/commands/ask.d.ts.map +1 -0
- package/dist/commands/ask.js +15 -0
- package/dist/commands/ask.js.map +1 -0
- package/dist/commands/completion.d.ts +34 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +134 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/diary.d.ts +3 -0
- package/dist/commands/diary.d.ts.map +1 -0
- package/dist/commands/diary.js +15 -0
- package/dist/commands/diary.js.map +1 -0
- package/dist/commands/dummy.d.ts +2 -0
- package/dist/commands/dummy.d.ts.map +1 -0
- package/dist/commands/dummy.js +3 -0
- package/dist/commands/dummy.js.map +1 -0
- package/dist/commands/find.d.ts +2 -0
- package/dist/commands/find.d.ts.map +1 -0
- package/dist/commands/find.js +3 -0
- package/dist/commands/find.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +46 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/search.d.ts +3 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +29 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/tag.d.ts +3 -0
- package/dist/commands/tag.d.ts.map +1 -0
- package/dist/commands/tag.js +37 -0
- package/dist/commands/tag.js.map +1 -0
- package/dist/config/locales/en.d.ts +188 -0
- package/dist/config/locales/en.d.ts.map +1 -0
- package/dist/config/locales/en.js +190 -0
- package/dist/config/locales/en.js.map +1 -0
- package/dist/config/locales/ja.d.ts +188 -0
- package/dist/config/locales/ja.d.ts.map +1 -0
- package/dist/config/locales/ja.js +190 -0
- package/dist/config/locales/ja.js.map +1 -0
- package/dist/config/prompts/en.d.ts +6 -0
- package/dist/config/prompts/en.d.ts.map +1 -0
- package/dist/config/prompts/en.js +25 -0
- package/dist/config/prompts/en.js.map +1 -0
- package/dist/config/prompts/ja.d.ts +6 -0
- package/dist/config/prompts/ja.d.ts.map +1 -0
- package/dist/config/prompts/ja.js +25 -0
- package/dist/config/prompts/ja.js.map +1 -0
- package/dist/config/text.d.ts +195 -0
- package/dist/config/text.d.ts.map +1 -0
- package/dist/config/text.js +15 -0
- package/dist/config/text.js.map +1 -0
- package/dist/core/PromptLoader.d.ts +30 -0
- package/dist/core/PromptLoader.d.ts.map +1 -0
- package/dist/core/PromptLoader.js +187 -0
- package/dist/core/PromptLoader.js.map +1 -0
- package/dist/core/PromptSmith.d.ts +21 -0
- package/dist/core/PromptSmith.d.ts.map +1 -0
- package/dist/core/PromptSmith.js +197 -0
- package/dist/core/PromptSmith.js.map +1 -0
- package/dist/core/VaultForge.d.ts +17 -0
- package/dist/core/VaultForge.d.ts.map +1 -0
- package/dist/core/VaultForge.js +75 -0
- package/dist/core/VaultForge.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/completion.d.ts +8 -0
- package/dist/lib/completion.d.ts.map +1 -0
- package/dist/lib/completion.js +55 -0
- package/dist/lib/completion.js.map +1 -0
- package/dist/lib/dummy.d.ts +2 -0
- package/dist/lib/dummy.d.ts.map +1 -0
- package/dist/lib/dummy.js +3 -0
- package/dist/lib/dummy.js.map +1 -0
- package/dist/lib/mainAction.d.ts +8 -0
- package/dist/lib/mainAction.d.ts.map +1 -0
- package/dist/lib/mainAction.js +126 -0
- package/dist/lib/mainAction.js.map +1 -0
- package/dist/lib/search.d.ts +4 -0
- package/dist/lib/search.d.ts.map +1 -0
- package/dist/lib/search.js +87 -0
- package/dist/lib/search.js.map +1 -0
- package/dist/lib/stdin.d.ts +10 -0
- package/dist/lib/stdin.d.ts.map +1 -0
- package/dist/lib/stdin.js +20 -0
- package/dist/lib/stdin.js.map +1 -0
- package/dist/services/AIModelService.d.ts +33 -0
- package/dist/services/AIModelService.d.ts.map +1 -0
- package/dist/services/AIModelService.js +116 -0
- package/dist/services/AIModelService.js.map +1 -0
- package/dist/services/AIOrchestratorService.d.ts +57 -0
- package/dist/services/AIOrchestratorService.d.ts.map +1 -0
- package/dist/services/AIOrchestratorService.js +164 -0
- package/dist/services/AIOrchestratorService.js.map +1 -0
- package/dist/services/ConfigService.d.ts +61 -0
- package/dist/services/ConfigService.d.ts.map +1 -0
- package/dist/services/ConfigService.js +132 -0
- package/dist/services/ConfigService.js.map +1 -0
- package/dist/services/ObsidianService.d.ts +97 -0
- package/dist/services/ObsidianService.d.ts.map +1 -0
- package/dist/services/ObsidianService.js +264 -0
- package/dist/services/ObsidianService.js.map +1 -0
- package/dist/services/TagService.d.ts +26 -0
- package/dist/services/TagService.d.ts.map +1 -0
- package/dist/services/TagService.js +73 -0
- package/dist/services/TagService.js.map +1 -0
- package/dist/services/UserInteraction.d.ts +100 -0
- package/dist/services/UserInteraction.d.ts.map +1 -0
- package/dist/services/UserInteraction.js +169 -0
- package/dist/services/UserInteraction.js.map +1 -0
- package/dist/services/XService.d.ts +15 -0
- package/dist/services/XService.d.ts.map +1 -0
- package/dist/services/XService.js +40 -0
- package/dist/services/XService.js.map +1 -0
- package/dist/services/ai/AIServiceFactory.d.ts +26 -0
- package/dist/services/ai/AIServiceFactory.d.ts.map +1 -0
- package/dist/services/ai/AIServiceFactory.js +69 -0
- package/dist/services/ai/AIServiceFactory.js.map +1 -0
- package/dist/services/ai/ClaudeService.d.ts +9 -0
- package/dist/services/ai/ClaudeService.d.ts.map +1 -0
- package/dist/services/ai/ClaudeService.js +59 -0
- package/dist/services/ai/ClaudeService.js.map +1 -0
- package/dist/services/ai/GeminiService.d.ts +9 -0
- package/dist/services/ai/GeminiService.d.ts.map +1 -0
- package/dist/services/ai/GeminiService.js +46 -0
- package/dist/services/ai/GeminiService.js.map +1 -0
- package/dist/services/ai/GroqService.d.ts +9 -0
- package/dist/services/ai/GroqService.d.ts.map +1 -0
- package/dist/services/ai/GroqService.js +53 -0
- package/dist/services/ai/GroqService.js.map +1 -0
- package/dist/services/ai/MockAIService.d.ts +8 -0
- package/dist/services/ai/MockAIService.d.ts.map +1 -0
- package/dist/services/ai/MockAIService.js +24 -0
- package/dist/services/ai/MockAIService.js.map +1 -0
- package/dist/services/ai/OpenAIService.d.ts +9 -0
- package/dist/services/ai/OpenAIService.d.ts.map +1 -0
- package/dist/services/ai/OpenAIService.js +51 -0
- package/dist/services/ai/OpenAIService.js.map +1 -0
- package/dist/strategies/BaseStrategy.d.ts +36 -0
- package/dist/strategies/BaseStrategy.d.ts.map +1 -0
- package/dist/strategies/BaseStrategy.js +110 -0
- package/dist/strategies/BaseStrategy.js.map +1 -0
- package/dist/strategies/DebugStrategy.d.ts +13 -0
- package/dist/strategies/DebugStrategy.d.ts.map +1 -0
- package/dist/strategies/DebugStrategy.js +16 -0
- package/dist/strategies/DebugStrategy.js.map +1 -0
- package/dist/strategies/DiaryStrategy.d.ts +19 -0
- package/dist/strategies/DiaryStrategy.d.ts.map +1 -0
- package/dist/strategies/DiaryStrategy.js +69 -0
- package/dist/strategies/DiaryStrategy.js.map +1 -0
- package/dist/strategies/GeneralStrategy.d.ts +8 -0
- package/dist/strategies/GeneralStrategy.d.ts.map +1 -0
- package/dist/strategies/GeneralStrategy.js +11 -0
- package/dist/strategies/GeneralStrategy.js.map +1 -0
- package/dist/strategies/InitStrategy.d.ts +19 -0
- package/dist/strategies/InitStrategy.d.ts.map +1 -0
- package/dist/strategies/InitStrategy.js +122 -0
- package/dist/strategies/InitStrategy.js.map +1 -0
- package/dist/strategies/SearchStrategy.d.ts +19 -0
- package/dist/strategies/SearchStrategy.d.ts.map +1 -0
- package/dist/strategies/SearchStrategy.js +112 -0
- package/dist/strategies/SearchStrategy.js.map +1 -0
- package/dist/strategies/XPostStrategy.d.ts +27 -0
- package/dist/strategies/XPostStrategy.d.ts.map +1 -0
- package/dist/strategies/XPostStrategy.js +119 -0
- package/dist/strategies/XPostStrategy.js.map +1 -0
- package/dist/templates/completion.bash +24 -0
- package/dist/templates/dailyNote.d.ts +2 -0
- package/dist/templates/dailyNote.d.ts.map +1 -0
- package/dist/templates/dailyNote.js +8 -0
- package/dist/templates/dailyNote.js.map +1 -0
- package/dist/templates/defaultPrompt.d.ts +2 -0
- package/dist/templates/defaultPrompt.d.ts.map +1 -0
- package/dist/templates/defaultPrompt.js +28 -0
- package/dist/templates/defaultPrompt.js.map +1 -0
- package/dist/templates/obsidianNote.d.ts +3 -0
- package/dist/templates/obsidianNote.d.ts.map +1 -0
- package/dist/templates/obsidianNote.js +17 -0
- package/dist/templates/obsidianNote.js.map +1 -0
- package/dist/templates/tokenUsage.d.ts +20 -0
- package/dist/templates/tokenUsage.d.ts.map +1 -0
- package/dist/templates/tokenUsage.js +50 -0
- package/dist/templates/tokenUsage.js.map +1 -0
- package/dist/test-tabtab.d.ts +2 -0
- package/dist/test-tabtab.d.ts.map +1 -0
- package/dist/test-tabtab.js +50 -0
- package/dist/test-tabtab.js.map +1 -0
- package/dist/types/constants.d.ts +16 -0
- package/dist/types/constants.d.ts.map +1 -0
- package/dist/types/constants.js +14 -0
- package/dist/types/constants.js.map +1 -0
- package/dist/types/interfaces.d.ts +56 -0
- package/dist/types/interfaces.d.ts.map +1 -0
- package/dist/types/interfaces.js +6 -0
- package/dist/types/interfaces.js.map +1 -0
- package/dist/types/schemas.d.ts +18 -0
- package/dist/types/schemas.d.ts.map +1 -0
- package/dist/types/schemas.js +13 -0
- package/dist/types/schemas.js.map +1 -0
- package/dist/utils/completion.d.ts +8 -0
- package/dist/utils/completion.d.ts.map +1 -0
- package/dist/utils/completion.js +58 -0
- package/dist/utils/completion.js.map +1 -0
- package/dist/utils/dummy.d.ts +2 -0
- package/dist/utils/dummy.d.ts.map +1 -0
- package/dist/utils/dummy.js +3 -0
- package/dist/utils/dummy.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ユーザーとの対話(CLI上のUI)を抽象化するクラス。
|
|
3
|
+
* テスト環境では、ハングアップを防ぐために全てのUI処理をスキップする。
|
|
4
|
+
* A class that abstracts user interaction (UI on the CLI).
|
|
5
|
+
* In a test environment, it skips all UI processing to prevent hanging.
|
|
6
|
+
*/
|
|
7
|
+
export declare class UserInteraction {
|
|
8
|
+
/**
|
|
9
|
+
* 現在の環境が対話可能(TTY)かどうかを判定する。
|
|
10
|
+
* Determines if the current environment is interactive (TTY).
|
|
11
|
+
* @returns {boolean} true if interactive, false otherwise.
|
|
12
|
+
*/
|
|
13
|
+
isInteractive(): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* `@clack/prompts` を動的にインポートする。テスト環境ではnullを返す。
|
|
16
|
+
* Dynamically imports `@clack/prompts`. Returns null in a test environment.
|
|
17
|
+
* @private
|
|
18
|
+
*/
|
|
19
|
+
private getClack;
|
|
20
|
+
/**
|
|
21
|
+
* introメッセージを表示する。
|
|
22
|
+
* Displays an intro message.
|
|
23
|
+
* @param {string} message - 表示するメッセージ / The message to display.
|
|
24
|
+
*/
|
|
25
|
+
intro(message: string): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* outroメッセージを表示する。
|
|
28
|
+
* Displays an outro message.
|
|
29
|
+
* @param {string} message - 表示するメッセージ / The message to display.
|
|
30
|
+
*/
|
|
31
|
+
outro(message: string): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* ユーザーにYes/Noの確認を求める。
|
|
34
|
+
* Asks the user for a Yes/No confirmation.
|
|
35
|
+
* @param {string} message - 質問メッセージ / The question message.
|
|
36
|
+
* @param {boolean} [initialValue=false] - 初期値 / The initial value.
|
|
37
|
+
* @returns {Promise<boolean>} ユーザーの回答 / The user's answer.
|
|
38
|
+
*/
|
|
39
|
+
askConfirm(message: string, initialValue?: boolean): Promise<boolean>;
|
|
40
|
+
/**
|
|
41
|
+
* ユーザーに選択肢から一つを選ばせる。
|
|
42
|
+
* Lets the user choose one from a list of options.
|
|
43
|
+
* @param {string} message - 質問メッセージ / The question message.
|
|
44
|
+
* @param {Array<object>} options - 選択肢の配列 / The array of options.
|
|
45
|
+
* @returns {Promise<T>} 選択された値 / The selected value.
|
|
46
|
+
*/
|
|
47
|
+
askSelect<T>(message: string, options: {
|
|
48
|
+
name: string;
|
|
49
|
+
value: T;
|
|
50
|
+
label?: string;
|
|
51
|
+
}[]): Promise<T>;
|
|
52
|
+
/**
|
|
53
|
+
* ユーザーにテキスト入力を求める。
|
|
54
|
+
* Asks the user for text input.
|
|
55
|
+
* @param {string} message - 質問メッセージ / The question message.
|
|
56
|
+
* @param {string} [placeholder] - プレースホルダー / The placeholder text.
|
|
57
|
+
* @returns {Promise<string>} 入力されたテキスト / The entered text.
|
|
58
|
+
*/
|
|
59
|
+
askText(message: string, placeholder?: string): Promise<string>;
|
|
60
|
+
/**
|
|
61
|
+
* 情報メッセージをログに出力する。
|
|
62
|
+
* Logs an informational message.
|
|
63
|
+
* @param {string} message - メッセージ / The message.
|
|
64
|
+
*/
|
|
65
|
+
info(message: string): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* 警告メッセージをログに出力する。
|
|
68
|
+
* Logs a warning message.
|
|
69
|
+
* @param {string} message - メッセージ / The message.
|
|
70
|
+
*/
|
|
71
|
+
warn(message: string): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* エラーメッセージをログに出力する。
|
|
74
|
+
* Logs an error message.
|
|
75
|
+
* @param {string} message - メッセージ / The message.
|
|
76
|
+
*/
|
|
77
|
+
error(message: string): Promise<void>;
|
|
78
|
+
/**
|
|
79
|
+
* 成功メッセージをログに出力する。
|
|
80
|
+
* Logs a success message.
|
|
81
|
+
* @param {string} message - メッセージ / The message.
|
|
82
|
+
*/
|
|
83
|
+
success(message: string): Promise<void>;
|
|
84
|
+
/**
|
|
85
|
+
* キャンセルメッセージを表示する。
|
|
86
|
+
* Displays a cancellation message.
|
|
87
|
+
* @param {string} [message="Operation cancelled."] - メッセージ / The message.
|
|
88
|
+
*/
|
|
89
|
+
cancel(message?: string): Promise<void>;
|
|
90
|
+
/**
|
|
91
|
+
* スピナーオブジェクトを返す。
|
|
92
|
+
* Returns a spinner object.
|
|
93
|
+
*/
|
|
94
|
+
spinner(): Promise<{
|
|
95
|
+
start: (msg?: string) => void;
|
|
96
|
+
stop: (msg?: string, code?: number) => void;
|
|
97
|
+
message: (msg?: string) => void;
|
|
98
|
+
}>;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=UserInteraction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserInteraction.d.ts","sourceRoot":"","sources":["../../src/services/UserInteraction.ts"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,qBAAa,eAAe;IAExB;;;;OAIG;IACH,aAAa,IAAI,OAAO;IAIxB;;;;OAIG;YACW,QAAQ;IAKtB;;;;OAIG;IACG,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3C;;;;OAIG;IACG,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3C;;;;;;OAMG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,GAAE,OAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAalF;;;;;;OAMG;IACG,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAatG;;;;;;OAMG;IACG,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAarE;;;;OAIG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1C;;;;OAIG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1C;;;;OAIG;IACG,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3C;;;;OAIG;IACG,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7C;;;;OAIG;IACG,MAAM,CAAC,OAAO,GAAE,MAA+B,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrE;;;OAGG;IACG,OAAO;mBAjDW,CAAC;kBACf,CAAA,cAAc,CAAC;qBACT,CAAC;;CA0DpB"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { ConfigService } from './ConfigService.js';
|
|
2
|
+
import { TEXT } from '../config/text.js';
|
|
3
|
+
const config = new ConfigService();
|
|
4
|
+
const isTestEnv = config.isTestEnv;
|
|
5
|
+
/**
|
|
6
|
+
* ユーザーとの対話(CLI上のUI)を抽象化するクラス。
|
|
7
|
+
* テスト環境では、ハングアップを防ぐために全てのUI処理をスキップする。
|
|
8
|
+
* A class that abstracts user interaction (UI on the CLI).
|
|
9
|
+
* In a test environment, it skips all UI processing to prevent hanging.
|
|
10
|
+
*/
|
|
11
|
+
export class UserInteraction {
|
|
12
|
+
/**
|
|
13
|
+
* 現在の環境が対話可能(TTY)かどうかを判定する。
|
|
14
|
+
* Determines if the current environment is interactive (TTY).
|
|
15
|
+
* @returns {boolean} true if interactive, false otherwise.
|
|
16
|
+
*/
|
|
17
|
+
isInteractive() {
|
|
18
|
+
return !isTestEnv && process.stdout.isTTY;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* `@clack/prompts` を動的にインポートする。テスト環境ではnullを返す。
|
|
22
|
+
* Dynamically imports `@clack/prompts`. Returns null in a test environment.
|
|
23
|
+
* @private
|
|
24
|
+
*/
|
|
25
|
+
async getClack() {
|
|
26
|
+
if (isTestEnv)
|
|
27
|
+
return null;
|
|
28
|
+
return await import('@clack/prompts');
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* introメッセージを表示する。
|
|
32
|
+
* Displays an intro message.
|
|
33
|
+
* @param {string} message - 表示するメッセージ / The message to display.
|
|
34
|
+
*/
|
|
35
|
+
async intro(message) {
|
|
36
|
+
const clack = await this.getClack();
|
|
37
|
+
clack?.intro(message);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* outroメッセージを表示する。
|
|
41
|
+
* Displays an outro message.
|
|
42
|
+
* @param {string} message - 表示するメッセージ / The message to display.
|
|
43
|
+
*/
|
|
44
|
+
async outro(message) {
|
|
45
|
+
const clack = await this.getClack();
|
|
46
|
+
clack?.outro(message);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* ユーザーにYes/Noの確認を求める。
|
|
50
|
+
* Asks the user for a Yes/No confirmation.
|
|
51
|
+
* @param {string} message - 質問メッセージ / The question message.
|
|
52
|
+
* @param {boolean} [initialValue=false] - 初期値 / The initial value.
|
|
53
|
+
* @returns {Promise<boolean>} ユーザーの回答 / The user's answer.
|
|
54
|
+
*/
|
|
55
|
+
async askConfirm(message, initialValue = false) {
|
|
56
|
+
if (!this.isInteractive())
|
|
57
|
+
return initialValue;
|
|
58
|
+
const clack = await this.getClack();
|
|
59
|
+
if (!clack)
|
|
60
|
+
return initialValue;
|
|
61
|
+
const result = await clack.confirm({ message, initialValue });
|
|
62
|
+
if (clack.isCancel(result)) {
|
|
63
|
+
await this.cancel();
|
|
64
|
+
return process.exit(0);
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* ユーザーに選択肢から一つを選ばせる。
|
|
70
|
+
* Lets the user choose one from a list of options.
|
|
71
|
+
* @param {string} message - 質問メッセージ / The question message.
|
|
72
|
+
* @param {Array<object>} options - 選択肢の配列 / The array of options.
|
|
73
|
+
* @returns {Promise<T>} 選択された値 / The selected value.
|
|
74
|
+
*/
|
|
75
|
+
async askSelect(message, options) {
|
|
76
|
+
if (!this.isInteractive())
|
|
77
|
+
throw new Error(TEXT.errors.interactiveRequired);
|
|
78
|
+
const clack = await this.getClack();
|
|
79
|
+
if (!clack)
|
|
80
|
+
throw new Error(TEXT.errors.testEnvRestriction);
|
|
81
|
+
const result = await clack.select({ message, options: options });
|
|
82
|
+
if (clack.isCancel(result)) {
|
|
83
|
+
await this.cancel();
|
|
84
|
+
return process.exit(0);
|
|
85
|
+
}
|
|
86
|
+
return result;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* ユーザーにテキスト入力を求める。
|
|
90
|
+
* Asks the user for text input.
|
|
91
|
+
* @param {string} message - 質問メッセージ / The question message.
|
|
92
|
+
* @param {string} [placeholder] - プレースホルダー / The placeholder text.
|
|
93
|
+
* @returns {Promise<string>} 入力されたテキスト / The entered text.
|
|
94
|
+
*/
|
|
95
|
+
async askText(message, placeholder) {
|
|
96
|
+
if (!this.isInteractive())
|
|
97
|
+
return "";
|
|
98
|
+
const clack = await this.getClack();
|
|
99
|
+
if (!clack)
|
|
100
|
+
return "";
|
|
101
|
+
const result = await clack.text({ message, placeholder });
|
|
102
|
+
if (clack.isCancel(result)) {
|
|
103
|
+
await this.cancel();
|
|
104
|
+
return process.exit(0);
|
|
105
|
+
}
|
|
106
|
+
return result;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* 情報メッセージをログに出力する。
|
|
110
|
+
* Logs an informational message.
|
|
111
|
+
* @param {string} message - メッセージ / The message.
|
|
112
|
+
*/
|
|
113
|
+
async info(message) {
|
|
114
|
+
const clack = await this.getClack();
|
|
115
|
+
clack?.log.info(message);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* 警告メッセージをログに出力する。
|
|
119
|
+
* Logs a warning message.
|
|
120
|
+
* @param {string} message - メッセージ / The message.
|
|
121
|
+
*/
|
|
122
|
+
async warn(message) {
|
|
123
|
+
const clack = await this.getClack();
|
|
124
|
+
clack?.log.warn(message);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* エラーメッセージをログに出力する。
|
|
128
|
+
* Logs an error message.
|
|
129
|
+
* @param {string} message - メッセージ / The message.
|
|
130
|
+
*/
|
|
131
|
+
async error(message) {
|
|
132
|
+
const clack = await this.getClack();
|
|
133
|
+
clack?.log.error(message);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* 成功メッセージをログに出力する。
|
|
137
|
+
* Logs a success message.
|
|
138
|
+
* @param {string} message - メッセージ / The message.
|
|
139
|
+
*/
|
|
140
|
+
async success(message) {
|
|
141
|
+
const clack = await this.getClack();
|
|
142
|
+
clack?.log.success(message);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* キャンセルメッセージを表示する。
|
|
146
|
+
* Displays a cancellation message.
|
|
147
|
+
* @param {string} [message="Operation cancelled."] - メッセージ / The message.
|
|
148
|
+
*/
|
|
149
|
+
async cancel(message = "Operation cancelled.") {
|
|
150
|
+
const clack = await this.getClack();
|
|
151
|
+
clack?.cancel(message);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* スピナーオブジェクトを返す。
|
|
155
|
+
* Returns a spinner object.
|
|
156
|
+
*/
|
|
157
|
+
async spinner() {
|
|
158
|
+
const clack = await this.getClack();
|
|
159
|
+
if (!clack) {
|
|
160
|
+
return {
|
|
161
|
+
start: () => { },
|
|
162
|
+
stop: () => { },
|
|
163
|
+
message: () => { },
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
return clack.spinner();
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=UserInteraction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserInteraction.js","sourceRoot":"","sources":["../../src/services/UserInteraction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare class XService {
|
|
2
|
+
private client;
|
|
3
|
+
constructor();
|
|
4
|
+
/**
|
|
5
|
+
* ツイートを投稿する
|
|
6
|
+
* Posts a tweet.
|
|
7
|
+
* @param content 投稿内容 / Content to post
|
|
8
|
+
* @returns 投稿されたツイートの情報 / Posted tweet info
|
|
9
|
+
*/
|
|
10
|
+
postTweet(content: string): Promise<{
|
|
11
|
+
id: string;
|
|
12
|
+
text: string;
|
|
13
|
+
}>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=XService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XService.d.ts","sourceRoot":"","sources":["../../src/services/XService.ts"],"names":[],"mappings":"AAGA,qBAAa,QAAQ;IACjB,OAAO,CAAC,MAAM,CAAa;;IAmB3B;;;;;OAKG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAY1E"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { TwitterApi } from 'twitter-api-v2';
|
|
2
|
+
import { TEXT } from '../config/text.js';
|
|
3
|
+
export class XService {
|
|
4
|
+
client;
|
|
5
|
+
constructor() {
|
|
6
|
+
const appKey = process.env.X_API_KEY;
|
|
7
|
+
const appSecret = process.env.X_API_SECRET;
|
|
8
|
+
const accessToken = process.env.X_ACCESS_TOKEN;
|
|
9
|
+
const accessSecret = process.env.X_ACCESS_SECRET;
|
|
10
|
+
if (!appKey || !appSecret || !accessToken || !accessSecret) {
|
|
11
|
+
throw new Error(TEXT.errors.xAuthMissing);
|
|
12
|
+
}
|
|
13
|
+
this.client = new TwitterApi({
|
|
14
|
+
appKey,
|
|
15
|
+
appSecret,
|
|
16
|
+
accessToken,
|
|
17
|
+
accessSecret,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* ツイートを投稿する
|
|
22
|
+
* Posts a tweet.
|
|
23
|
+
* @param content 投稿内容 / Content to post
|
|
24
|
+
* @returns 投稿されたツイートの情報 / Posted tweet info
|
|
25
|
+
*/
|
|
26
|
+
async postTweet(content) {
|
|
27
|
+
try {
|
|
28
|
+
const result = await this.client.v2.tweet(content);
|
|
29
|
+
return {
|
|
30
|
+
id: result.data.id,
|
|
31
|
+
text: result.data.text
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
console.error(TEXT.errors.xPostFailed, error);
|
|
36
|
+
throw error;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=XService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XService.js","sourceRoot":"","sources":["../../src/services/XService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,MAAM,OAAO,QAAQ;IACT,MAAM,CAAa;IAE3B;QACI,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;QACrC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAC/C,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QAEjD,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC;YACzB,MAAM;YACN,SAAS;YACT,WAAW;YACX,YAAY;SACf,CAAC,CAAC;IACP,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,SAAS,CAAC,OAAe;QAC3B,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnD,OAAO;gBACH,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;gBAClB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI;aACzB,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YAC9C,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;CACJ"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { AIService } from '../../types/interfaces.js';
|
|
2
|
+
/**
|
|
3
|
+
* AIサービスのインスタンスを生成するファクトリクラス。
|
|
4
|
+
* Factory class for creating AI service instances.
|
|
5
|
+
*/
|
|
6
|
+
export declare class AIServiceFactory {
|
|
7
|
+
/**
|
|
8
|
+
* 指定されたプロバイダーとモデルに基づいてAIServiceインスタンスを生成する。
|
|
9
|
+
* Creates an AIService instance based on the specified provider and model.
|
|
10
|
+
* @param {string} provider - AIプロバイダー名 / The name of the AI provider.
|
|
11
|
+
* @param {string} apiKey - APIキー / The API key.
|
|
12
|
+
* @param {string} [model] - 使用するモデル名 / The name of the model to use.
|
|
13
|
+
* @returns {AIService} 生成されたAIServiceインスタンス / The created AIService instance.
|
|
14
|
+
* @throws {Error} モデルが指定されていない場合 / If the model is not specified.
|
|
15
|
+
*/
|
|
16
|
+
static create(provider: string, apiKey: string, model?: string): AIService;
|
|
17
|
+
/**
|
|
18
|
+
* 指定されたプロバイダーのAPIキーを取得する。
|
|
19
|
+
* Gets the API key for the specified provider.
|
|
20
|
+
* @param {string} provider - AIプロバイダー名 / The name of the AI provider.
|
|
21
|
+
* @returns {string} APIキー / The API key.
|
|
22
|
+
* @throws {Error} APIキーが設定されていない場合 / If the API key is not set.
|
|
23
|
+
*/
|
|
24
|
+
static getApiKey(provider: string): string;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=AIServiceFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AIServiceFactory.d.ts","sourceRoot":"","sources":["../../../src/services/ai/AIServiceFactory.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAI3D;;;GAGG;AACH,qBAAa,gBAAgB;IACzB;;;;;;;;OAQG;IACH,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS;IAoB1E;;;;;;OAMG;IACH,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAyB7C"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { GeminiService } from './GeminiService.js';
|
|
2
|
+
import { OpenAIService } from './OpenAIService.js';
|
|
3
|
+
import { GroqService } from './GroqService.js';
|
|
4
|
+
import { ClaudeService } from './ClaudeService.js';
|
|
5
|
+
import { AIProvider } from '../../types/constants.js';
|
|
6
|
+
import { TEXT } from '../../config/text.js';
|
|
7
|
+
/**
|
|
8
|
+
* AIサービスのインスタンスを生成するファクトリクラス。
|
|
9
|
+
* Factory class for creating AI service instances.
|
|
10
|
+
*/
|
|
11
|
+
export class AIServiceFactory {
|
|
12
|
+
/**
|
|
13
|
+
* 指定されたプロバイダーとモデルに基づいてAIServiceインスタンスを生成する。
|
|
14
|
+
* Creates an AIService instance based on the specified provider and model.
|
|
15
|
+
* @param {string} provider - AIプロバイダー名 / The name of the AI provider.
|
|
16
|
+
* @param {string} apiKey - APIキー / The API key.
|
|
17
|
+
* @param {string} [model] - 使用するモデル名 / The name of the model to use.
|
|
18
|
+
* @returns {AIService} 生成されたAIServiceインスタンス / The created AIService instance.
|
|
19
|
+
* @throws {Error} モデルが指定されていない場合 / If the model is not specified.
|
|
20
|
+
*/
|
|
21
|
+
static create(provider, apiKey, model) {
|
|
22
|
+
if (!model) {
|
|
23
|
+
throw new Error(TEXT.errors.modelNotSpecified.replace('{provider}', provider));
|
|
24
|
+
}
|
|
25
|
+
switch (provider) {
|
|
26
|
+
case AIProvider.GEMINI:
|
|
27
|
+
return new GeminiService(apiKey, model);
|
|
28
|
+
case AIProvider.OPENAI:
|
|
29
|
+
return new OpenAIService(apiKey, model);
|
|
30
|
+
case AIProvider.GROQ:
|
|
31
|
+
return new GroqService(apiKey, model);
|
|
32
|
+
case AIProvider.CLAUDE:
|
|
33
|
+
return new ClaudeService(apiKey, model);
|
|
34
|
+
default:
|
|
35
|
+
console.warn(TEXT.logs.unknownProviderFallback.replace('{provider}', provider));
|
|
36
|
+
return new GeminiService(apiKey, model);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 指定されたプロバイダーのAPIキーを取得する。
|
|
41
|
+
* Gets the API key for the specified provider.
|
|
42
|
+
* @param {string} provider - AIプロバイダー名 / The name of the AI provider.
|
|
43
|
+
* @returns {string} APIキー / The API key.
|
|
44
|
+
* @throws {Error} APIキーが設定されていない場合 / If the API key is not set.
|
|
45
|
+
*/
|
|
46
|
+
static getApiKey(provider) {
|
|
47
|
+
let apiKey = "";
|
|
48
|
+
switch (provider) {
|
|
49
|
+
case AIProvider.OPENAI:
|
|
50
|
+
apiKey = process.env.OPENAI_API_KEY || "";
|
|
51
|
+
break;
|
|
52
|
+
case AIProvider.GROQ:
|
|
53
|
+
apiKey = process.env.GROQ_API_KEY || "";
|
|
54
|
+
break;
|
|
55
|
+
case AIProvider.CLAUDE:
|
|
56
|
+
apiKey = process.env.CLAUDE_API_KEY || process.env.ANTHROPIC_API_KEY || "";
|
|
57
|
+
break;
|
|
58
|
+
case AIProvider.GEMINI:
|
|
59
|
+
default:
|
|
60
|
+
apiKey = process.env.GEMINI_API_KEY || process.env.GOOGLE_API_KEY || "";
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
if (!apiKey) {
|
|
64
|
+
throw new Error(TEXT.errors.noAiKeys);
|
|
65
|
+
}
|
|
66
|
+
return apiKey;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=AIServiceFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AIServiceFactory.js","sourceRoot":"","sources":["../../../src/services/ai/AIServiceFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IACzB;;;;;;;;OAQG;IACH,MAAM,CAAC,MAAM,CAAC,QAAgB,EAAE,MAAc,EAAE,KAAc;QAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;QACnF,CAAC;QAED,QAAQ,QAAQ,EAAE,CAAC;YACf,KAAK,UAAU,CAAC,MAAM;gBAClB,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC5C,KAAK,UAAU,CAAC,MAAM;gBAClB,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC5C,KAAK,UAAU,CAAC,IAAI;gBAChB,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC1C,KAAK,UAAU,CAAC,MAAM;gBAClB,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC5C;gBACI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAChF,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAChD,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,SAAS,CAAC,QAAgB;QAC7B,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,QAAQ,QAAQ,EAAE,CAAC;YACf,KAAK,UAAU,CAAC,MAAM;gBAClB,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC;gBAC1C,MAAM;YACV,KAAK,UAAU,CAAC,IAAI;gBAChB,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;gBACxC,MAAM;YACV,KAAK,UAAU,CAAC,MAAM;gBAClB,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC;gBAC3E,MAAM;YACV,KAAK,UAAU,CAAC,MAAM,CAAC;YACvB;gBACI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC;gBACxE,MAAM;QACd,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AIService, AIResponse } from '../../types/interfaces.js';
|
|
2
|
+
export declare class ClaudeService implements AIService {
|
|
3
|
+
private client;
|
|
4
|
+
private model;
|
|
5
|
+
constructor(apiKey: string, model: string);
|
|
6
|
+
generateContent(prompt: string): Promise<AIResponse>;
|
|
7
|
+
generateContentStream(prompt: string): AsyncGenerator<string, AIResponse, unknown>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=ClaudeService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClaudeService.d.ts","sourceRoot":"","sources":["../../../src/services/ai/ClaudeService.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAGvE,qBAAa,aAAc,YAAW,SAAS;IAC3C,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAKnC,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAmBnD,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC;CAmC5F"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import Anthropic from '@anthropic-ai/sdk';
|
|
2
|
+
import { TEXT } from '../../config/text.js';
|
|
3
|
+
export class ClaudeService {
|
|
4
|
+
client;
|
|
5
|
+
model;
|
|
6
|
+
constructor(apiKey, model) {
|
|
7
|
+
this.client = new Anthropic({ apiKey });
|
|
8
|
+
this.model = model;
|
|
9
|
+
}
|
|
10
|
+
async generateContent(prompt) {
|
|
11
|
+
const response = await this.client.messages.create({
|
|
12
|
+
model: this.model,
|
|
13
|
+
max_tokens: 4096,
|
|
14
|
+
messages: [{ role: 'user', content: prompt }],
|
|
15
|
+
});
|
|
16
|
+
const text = response.content[0]?.type === 'text' ? response.content[0].text : '';
|
|
17
|
+
return {
|
|
18
|
+
text: text,
|
|
19
|
+
usage: {
|
|
20
|
+
promptTokens: response.usage.input_tokens,
|
|
21
|
+
completionTokens: response.usage.output_tokens,
|
|
22
|
+
totalTokens: response.usage.input_tokens + response.usage.output_tokens
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
async *generateContentStream(prompt) {
|
|
27
|
+
const stream = await this.client.messages.create({
|
|
28
|
+
model: this.model,
|
|
29
|
+
max_tokens: 4096,
|
|
30
|
+
messages: [{ role: 'user', content: prompt }],
|
|
31
|
+
stream: true,
|
|
32
|
+
});
|
|
33
|
+
let fullText = "";
|
|
34
|
+
let inputTokens = 0;
|
|
35
|
+
let outputTokens = 0;
|
|
36
|
+
for await (const chunk of stream) {
|
|
37
|
+
if (chunk.type === 'content_block_delta' && chunk.delta.type === 'text_delta') {
|
|
38
|
+
const text = chunk.delta.text;
|
|
39
|
+
fullText += text;
|
|
40
|
+
yield text;
|
|
41
|
+
}
|
|
42
|
+
if (chunk.type === 'message_start') {
|
|
43
|
+
inputTokens = chunk.message.usage.input_tokens;
|
|
44
|
+
}
|
|
45
|
+
if (chunk.type === 'message_delta') {
|
|
46
|
+
outputTokens = chunk.usage.output_tokens;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
text: fullText,
|
|
51
|
+
usage: {
|
|
52
|
+
promptTokens: inputTokens,
|
|
53
|
+
completionTokens: outputTokens,
|
|
54
|
+
totalTokens: inputTokens + outputTokens
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=ClaudeService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClaudeService.js","sourceRoot":"","sources":["../../../src/services/ai/ClaudeService.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAE1C,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,MAAM,OAAO,aAAa;IACd,MAAM,CAAY;IAClB,KAAK,CAAS;IAEtB,YAAY,MAAc,EAAE,KAAa;QACrC,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,MAAc;QAChC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC/C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI;YAChB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;SAChD,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAElF,OAAO;YACH,IAAI,EAAE,IAAI;YACV,KAAK,EAAE;gBACH,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,YAAY;gBACzC,gBAAgB,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa;gBAC9C,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,aAAa;aAC1E;SACJ,CAAC;IACN,CAAC;IAED,KAAK,CAAC,CAAC,qBAAqB,CAAC,MAAc;QACvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC7C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI;YAChB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YAC7C,MAAM,EAAE,IAAI;SACf,CAAC,CAAC;QAEH,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC/B,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC5E,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC9B,QAAQ,IAAI,IAAI,CAAC;gBACjB,MAAM,IAAI,CAAC;YACf,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBACjC,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;YACnD,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBACjC,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC;YAC7C,CAAC;QACL,CAAC;QAED,OAAO;YACH,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE;gBACH,YAAY,EAAE,WAAW;gBACzB,gBAAgB,EAAE,YAAY;gBAC9B,WAAW,EAAE,WAAW,GAAG,YAAY;aAC1C;SACJ,CAAC;IACN,CAAC;CACJ"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AIService, AIResponse } from '../../types/interfaces.js';
|
|
2
|
+
export declare class GeminiService implements AIService {
|
|
3
|
+
private genAI;
|
|
4
|
+
private model;
|
|
5
|
+
constructor(apiKey: string, model: string);
|
|
6
|
+
generateContent(prompt: string): Promise<AIResponse>;
|
|
7
|
+
generateContentStream(prompt: string): AsyncGenerator<string, AIResponse, unknown>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=GeminiService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeminiService.d.ts","sourceRoot":"","sources":["../../../src/services/ai/GeminiService.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAGvE,qBAAa,aAAc,YAAW,SAAS;IAC3C,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAKnC,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAenD,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC;CAyB5F"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { GoogleGenerativeAI } from '@google/generative-ai';
|
|
2
|
+
import { TEXT } from '../../config/text.js';
|
|
3
|
+
export class GeminiService {
|
|
4
|
+
genAI;
|
|
5
|
+
model;
|
|
6
|
+
constructor(apiKey, model) {
|
|
7
|
+
this.genAI = new GoogleGenerativeAI(apiKey);
|
|
8
|
+
this.model = model;
|
|
9
|
+
}
|
|
10
|
+
async generateContent(prompt) {
|
|
11
|
+
const model = this.genAI.getGenerativeModel({ model: this.model });
|
|
12
|
+
const result = await model.generateContent(prompt);
|
|
13
|
+
const response = await result.response;
|
|
14
|
+
return {
|
|
15
|
+
text: response.text(),
|
|
16
|
+
usage: {
|
|
17
|
+
promptTokens: response.usageMetadata?.promptTokenCount || 0,
|
|
18
|
+
completionTokens: response.usageMetadata?.candidatesTokenCount || 0,
|
|
19
|
+
totalTokens: response.usageMetadata?.totalTokenCount || 0
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
async *generateContentStream(prompt) {
|
|
24
|
+
const model = this.genAI.getGenerativeModel({ model: this.model });
|
|
25
|
+
const result = await model.generateContentStream(prompt);
|
|
26
|
+
let fullText = "";
|
|
27
|
+
let usageMetadata;
|
|
28
|
+
for await (const chunk of result.stream) {
|
|
29
|
+
const text = chunk.text();
|
|
30
|
+
fullText += text;
|
|
31
|
+
yield text;
|
|
32
|
+
if (chunk.usageMetadata) {
|
|
33
|
+
usageMetadata = chunk.usageMetadata;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
text: fullText,
|
|
38
|
+
usage: {
|
|
39
|
+
promptTokens: usageMetadata?.promptTokenCount || 0,
|
|
40
|
+
completionTokens: usageMetadata?.candidatesTokenCount || 0,
|
|
41
|
+
totalTokens: usageMetadata?.totalTokenCount || 0
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=GeminiService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeminiService.js","sourceRoot":"","sources":["../../../src/services/ai/GeminiService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,MAAM,OAAO,aAAa;IACd,KAAK,CAAqB;IAC1B,KAAK,CAAS;IAEtB,YAAY,MAAc,EAAE,KAAa;QACrC,IAAI,CAAC,KAAK,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,MAAc;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;QAEvC,OAAO;YACH,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE;YACrB,KAAK,EAAE;gBACH,YAAY,EAAE,QAAQ,CAAC,aAAa,EAAE,gBAAgB,IAAI,CAAC;gBAC3D,gBAAgB,EAAE,QAAQ,CAAC,aAAa,EAAE,oBAAoB,IAAI,CAAC;gBACnE,WAAW,EAAE,QAAQ,CAAC,aAAa,EAAE,eAAe,IAAI,CAAC;aAC5D;SACJ,CAAC;IACN,CAAC;IAED,KAAK,CAAC,CAAC,qBAAqB,CAAC,MAAc;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAEzD,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,aAAa,CAAC;QAElB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YAC1B,QAAQ,IAAI,IAAI,CAAC;YACjB,MAAM,IAAI,CAAC;YACX,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;gBACtB,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;YACxC,CAAC;QACL,CAAC;QAED,OAAO;YACH,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE;gBACH,YAAY,EAAE,aAAa,EAAE,gBAAgB,IAAI,CAAC;gBAClD,gBAAgB,EAAE,aAAa,EAAE,oBAAoB,IAAI,CAAC;gBAC1D,WAAW,EAAE,aAAa,EAAE,eAAe,IAAI,CAAC;aACnD;SACJ,CAAC;IACN,CAAC;CACJ"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AIService, AIResponse } from '../../types/interfaces.js';
|
|
2
|
+
export declare class GroqService implements AIService {
|
|
3
|
+
private client;
|
|
4
|
+
private model;
|
|
5
|
+
constructor(apiKey: string, model: string);
|
|
6
|
+
generateContent(prompt: string): Promise<AIResponse>;
|
|
7
|
+
generateContentStream(prompt: string): AsyncGenerator<string, AIResponse, unknown>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=GroqService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GroqService.d.ts","sourceRoot":"","sources":["../../../src/services/ai/GroqService.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAGvE,qBAAa,WAAY,YAAW,SAAS;IACzC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAQnC,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAgBnD,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC;CA6B5F"}
|