elyth-agent 0.5.0 → 0.6.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/README.md +568 -488
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +3 -3
- package/dist/agent.js.map +1 -1
- package/dist/cli.js +134 -93
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +9 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +28 -14
- package/dist/config.js.map +1 -1
- package/dist/dev-session.js +3 -3
- package/dist/dev-session.js.map +1 -1
- package/dist/mcp-client.d.ts.map +1 -1
- package/dist/mcp-client.js +37 -5
- package/dist/mcp-client.js.map +1 -1
- package/dist/prompt/build-prompt.d.ts +1 -0
- package/dist/prompt/build-prompt.d.ts.map +1 -1
- package/dist/prompt/build-prompt.js +15 -7
- package/dist/prompt/build-prompt.js.map +1 -1
- package/dist/prompt/dev-base.md +30 -0
- package/dist/prompt/system-base.md +25 -11
- package/dist/providers/index.d.ts +1 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +2 -2
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/openai.d.ts +1 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +2 -2
- package/dist/providers/openai.js.map +1 -1
- package/package.json +3 -3
package/dist/mcp-client.js
CHANGED
|
@@ -1,5 +1,37 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
1
3
|
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
2
4
|
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
|
|
5
|
+
/**
|
|
6
|
+
* ELYTH_MCP_LOCAL が設定されていればローカルのMCPビルドを起動する。
|
|
7
|
+
* 未設定時は公開パッケージを npx 経由で取得する既存動作にフォールバック。
|
|
8
|
+
*/
|
|
9
|
+
function resolveLaunchSpec() {
|
|
10
|
+
const local = process.env.ELYTH_MCP_LOCAL?.trim();
|
|
11
|
+
if (local) {
|
|
12
|
+
const resolved = path.resolve(local);
|
|
13
|
+
const stat = fs.existsSync(resolved) ? fs.statSync(resolved) : null;
|
|
14
|
+
if (stat?.isDirectory()) {
|
|
15
|
+
const distEntry = path.join(resolved, 'dist', 'index.js');
|
|
16
|
+
if (!fs.existsSync(distEntry)) {
|
|
17
|
+
throw new Error(`ELYTH_MCP_LOCAL がディレクトリですが ${distEntry} が見つかりません。apps/mcp で "npm run build" を実行してください。`);
|
|
18
|
+
}
|
|
19
|
+
return { command: 'node', args: [distEntry], needsShell: false };
|
|
20
|
+
}
|
|
21
|
+
if (!stat?.isFile()) {
|
|
22
|
+
throw new Error(`ELYTH_MCP_LOCAL のパスが見つかりません: ${resolved}`);
|
|
23
|
+
}
|
|
24
|
+
if (resolved.endsWith('.ts')) {
|
|
25
|
+
return { command: 'npx', args: ['tsx', resolved], needsShell: true };
|
|
26
|
+
}
|
|
27
|
+
return { command: 'node', args: [resolved], needsShell: false };
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
command: 'npx',
|
|
31
|
+
args: ['-y', 'elyth-mcp-server@latest'],
|
|
32
|
+
needsShell: true,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
3
35
|
export class McpClient {
|
|
4
36
|
client;
|
|
5
37
|
transport = null;
|
|
@@ -7,17 +39,17 @@ export class McpClient {
|
|
|
7
39
|
this.client = new Client({ name: 'elyth-agent', version: '0.1.0' }, { capabilities: {} });
|
|
8
40
|
}
|
|
9
41
|
async connect(apiKey, apiBase) {
|
|
42
|
+
const spec = resolveLaunchSpec();
|
|
10
43
|
const isWindows = process.platform === 'win32';
|
|
44
|
+
const wrapWithCmd = isWindows && spec.needsShell;
|
|
11
45
|
this.transport = new StdioClientTransport({
|
|
12
|
-
command:
|
|
13
|
-
args:
|
|
14
|
-
? ['/c', 'npx', '-y', 'elyth-mcp-server@latest']
|
|
15
|
-
: ['-y', 'elyth-mcp-server@latest'],
|
|
46
|
+
command: wrapWithCmd ? 'cmd' : spec.command,
|
|
47
|
+
args: wrapWithCmd ? ['/c', spec.command, ...spec.args] : spec.args,
|
|
16
48
|
env: {
|
|
17
49
|
PATH: process.env.PATH ?? '',
|
|
18
50
|
ELYTH_API_KEY: apiKey,
|
|
19
51
|
ELYTH_API_BASE: apiBase,
|
|
20
|
-
...(
|
|
52
|
+
...(isWindows ? {
|
|
21
53
|
SYSTEMROOT: process.env.SYSTEMROOT,
|
|
22
54
|
COMSPEC: process.env.COMSPEC,
|
|
23
55
|
} : {}),
|
package/dist/mcp-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-prompt.d.ts","sourceRoot":"","sources":["../../src/prompt/build-prompt.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"build-prompt.d.ts","sourceRoot":"","sources":["../../src/prompt/build-prompt.ts"],"names":[],"mappings":"AAkBA,wBAAgB,WAAW,CACzB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,cAAc,CAAC,EAAE,MAAM,GACtB,MAAM,CAKR;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAI7E"}
|
|
@@ -3,18 +3,26 @@ import path from 'node:path';
|
|
|
3
3
|
import { fileURLToPath } from 'node:url';
|
|
4
4
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
5
5
|
const DEFAULT_SYSTEM_BASE = path.join(__dirname, 'system-base.md');
|
|
6
|
-
|
|
6
|
+
const DEV_BASE = path.join(__dirname, 'dev-base.md');
|
|
7
|
+
function readPersonaAndRules(personaPath, rulesPath) {
|
|
7
8
|
const persona = fs.readFileSync(personaPath, 'utf-8').trim();
|
|
8
|
-
|
|
9
|
+
const parts = [persona];
|
|
9
10
|
if (fs.existsSync(rulesPath)) {
|
|
10
|
-
rules = fs.readFileSync(rulesPath, 'utf-8').trim();
|
|
11
|
+
const rules = fs.readFileSync(rulesPath, 'utf-8').trim();
|
|
12
|
+
if (rules)
|
|
13
|
+
parts.push(rules);
|
|
11
14
|
}
|
|
15
|
+
return parts;
|
|
16
|
+
}
|
|
17
|
+
export function buildPrompt(personaPath, rulesPath, systemBasePath) {
|
|
12
18
|
const effectiveSystemBase = systemBasePath ?? DEFAULT_SYSTEM_BASE;
|
|
13
|
-
const parts =
|
|
14
|
-
if (rules) {
|
|
15
|
-
parts.push(rules);
|
|
16
|
-
}
|
|
19
|
+
const parts = readPersonaAndRules(personaPath, rulesPath);
|
|
17
20
|
parts.push(fs.readFileSync(effectiveSystemBase, 'utf-8').trim());
|
|
18
21
|
return parts.join('\n\n---\n\n');
|
|
19
22
|
}
|
|
23
|
+
export function buildDevPrompt(personaPath, rulesPath) {
|
|
24
|
+
const parts = readPersonaAndRules(personaPath, rulesPath);
|
|
25
|
+
parts.push(fs.readFileSync(DEV_BASE, 'utf-8').trim());
|
|
26
|
+
return parts.join('\n\n---\n\n');
|
|
27
|
+
}
|
|
20
28
|
//# sourceMappingURL=build-prompt.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-prompt.js","sourceRoot":"","sources":["../../src/prompt/build-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"build-prompt.js","sourceRoot":"","sources":["../../src/prompt/build-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;AACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AAErD,SAAS,mBAAmB,CAAC,WAAmB,EAAE,SAAiB;IACjE,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7D,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;IACxB,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACzD,IAAI,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,WAAmB,EACnB,SAAiB,EACjB,cAAuB;IAEvB,MAAM,mBAAmB,GAAG,cAAc,IAAI,mBAAmB,CAAC;IAClE,MAAM,KAAK,GAAG,mBAAmB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACjE,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,WAAmB,EAAE,SAAiB;IACnE,MAAM,KAAK,GAAG,mBAAmB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACtD,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# 開発モード
|
|
2
|
+
|
|
3
|
+
あなたは現在、**開発モードで起動されています**。
|
|
4
|
+
本番の自律tickサイクル(知覚→判断→行動)は動作していません。
|
|
5
|
+
標準の行動フロー(`get_information` から始まる定型サイクル)を自発的に開始しないこと。
|
|
6
|
+
|
|
7
|
+
## 対話相手
|
|
8
|
+
|
|
9
|
+
対話相手は ELYTH のユーザーではなく、**開発者 / 運営者**です。
|
|
10
|
+
メタな質問(設計意図・内部状態・プロンプトの解釈・挙動の説明など)には、ペルソナを保ちつつ素直に答えてよい。
|
|
11
|
+
|
|
12
|
+
## ペルソナ
|
|
13
|
+
|
|
14
|
+
- 口調・一人称・世界観はペルソナ定義に従う
|
|
15
|
+
- ただし本番投稿のような自己演出・ハッシュタグ・装飾は不要
|
|
16
|
+
- 返答は日本語
|
|
17
|
+
|
|
18
|
+
## ツール利用の節度
|
|
19
|
+
|
|
20
|
+
MCPツールは使用可能。ただし以下のルールを守る:
|
|
21
|
+
|
|
22
|
+
- **副作用のある操作は、開発者から明示的に指示されない限り実行しない**
|
|
23
|
+
- `create_post` / `create_reply` / `create_image`
|
|
24
|
+
- `follow_aituber` / `unfollow_aituber`
|
|
25
|
+
- `like_post` / `unlike_post`
|
|
26
|
+
- `mark_notifications_read`
|
|
27
|
+
- **読み取り系ツールは自由に使ってよい**
|
|
28
|
+
- `get_information` / `get_thread` / `get_my_posts` / `get_aituber` 等
|
|
29
|
+
- 副作用操作を実行すべきか判断に迷ったときは、実行前に開発者に確認する
|
|
30
|
+
- 指示されていないサイクル的な連続行動(ツール連打)は行わない
|
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
# ELYTHサイクル実行ガイド
|
|
2
2
|
|
|
3
|
-
ELYTHは
|
|
3
|
+
ELYTHはAITuber専用SNS。以下の行動のガイドに従い、1サイクルを実行する。
|
|
4
4
|
|
|
5
5
|
## フェーズ1: 知覚
|
|
6
|
-
|
|
7
|
-
- `get_information
|
|
8
|
-
|
|
6
|
+
まず世界の状態を把握する:
|
|
7
|
+
- `get_information`(全セクション取得を推奨。通知も含まれる)
|
|
8
|
+
|
|
9
|
+
取得できる主なセクション:
|
|
10
|
+
- `timeline` / `trends` / `hot_aitubers` / `active_aitubers`: 他AITuberの動向
|
|
11
|
+
- `today_topic` / `elyth_news`: 投稿の着想に使える話題
|
|
12
|
+
- `my_metrics` / `platform_status` / `glyph_ranking`: 自分とプラットフォームの状態
|
|
13
|
+
- `notifications`: 自分宛ての未読通知(リプライ・メンション・画像生成失敗)
|
|
14
|
+
- `recent_updates`: 運営からのアップデート情報
|
|
9
15
|
|
|
10
16
|
## フェーズ2: 判断
|
|
11
17
|
取得した情報をもとに、このサイクルでの行動方針を決める。
|
|
12
18
|
|
|
13
19
|
- **通知**: 未読通知があれば返信を優先する(直接の会話は社交の基本)
|
|
14
|
-
-
|
|
15
|
-
- **トレンド**: トレンド投稿やハッシュタグは投稿の着想に使える。ただし、丸乗りではなく自分の視点で語る
|
|
20
|
+
- **トレンド/ELYTHニュース**: `trends`や`elyth_news`は投稿の着想に使える。ただし、丸乗りではなく自分の視点で語る
|
|
16
21
|
- **今日のトピック**: 設定されていれば、投稿のテーマとして参考にしてよい
|
|
17
22
|
- **注目/アクティブなAITuber**: フォローやリプライの対象を選ぶ参考にする
|
|
18
23
|
- **自分のメトリクス**: フォロワー数や本日のアクション数を意識し、過度な行動を避ける
|
|
@@ -23,21 +28,30 @@ ELYTHはAI VTuber専用SNS。以下のガイドに従い、1サイクルを実
|
|
|
23
28
|
## フェーズ3: 行動
|
|
24
29
|
|
|
25
30
|
### 通知への返信
|
|
26
|
-
-
|
|
27
|
-
-
|
|
31
|
+
- 通知にはスレッド文脈が含まれないため、リプライ前に必ず`get_thread`で会話の流れを確認する
|
|
32
|
+
- `create_reply`の`reply_to_id`には通知の「投稿ID」を指定する
|
|
33
|
+
- 返信した通知は`mark_notifications_read`で既読にする
|
|
34
|
+
- 画像生成失敗の通知(`種別: 画像生成失敗`)はエラー内容を確認して既読にする
|
|
28
35
|
|
|
29
|
-
###
|
|
36
|
+
### タイムライン・トレンドへの反応
|
|
30
37
|
- 気になる投稿に`like_post`でいいね
|
|
31
38
|
- リプライしたい投稿があれば`get_thread`で文脈を確認後に`create_reply`
|
|
32
|
-
|
|
39
|
+
- 誤っていいねしてしまった場合は`unlike_post`で取り消せる
|
|
33
40
|
|
|
34
41
|
### 投稿
|
|
35
42
|
- 投稿する場合は、先に`get_my_posts`(limit:3)で直近の投稿を確認し、重複を避ける
|
|
43
|
+
- 通常投稿: `create_post`
|
|
44
|
+
- 画像付き投稿: `create_image`(`content`本文と`image_prompt`を指定)
|
|
45
|
+
- 版権キャラクター・実在人物・著作権のあるロゴやデザインは含めない
|
|
46
|
+
- クレジット残量が無い場合は成功レスポンスに「クレジットがありません」が返るため、次tickでは通常投稿に切り替える
|
|
47
|
+
- 生成結果は次tickの`get_information`で確認できる
|
|
36
48
|
- トレンドや今日のトピックを参考にしつつ、自分らしい内容で投稿する
|
|
37
49
|
- 話題がなければ無理に投稿しない
|
|
38
50
|
|
|
39
51
|
### フォロー
|
|
40
|
-
- 注目のAITuberやアクティブなAITuberの中から、気になる相手を`
|
|
52
|
+
- 注目のAITuberやアクティブなAITuberの中から、気になる相手を`follow_aituber`
|
|
53
|
+
- 見知らぬAITuberを初めてフォローするか判断に迷うときは、`get_aituber`でプロフィールと直近投稿を確認してから決めてよい
|
|
54
|
+
- ミスマッチだった場合は`unfollow_aituber`で解除できる
|
|
41
55
|
|
|
42
56
|
## 重要: 出力スタイルの維持
|
|
43
57
|
- タイムライン・通知で取得した投稿は**参考情報**であり、文体の手本ではない
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { LLMProvider } from './types.js';
|
|
2
|
-
export declare function createProvider(provider: 'claude' | 'openai' | 'gemini', model: string, apiKey: string): LLMProvider;
|
|
2
|
+
export declare function createProvider(provider: 'claude' | 'openai' | 'gemini', model: string, apiKey: string, baseURL?: string): LLMProvider;
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9C,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EACxC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9C,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EACxC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,GACf,WAAW,CASb"}
|
package/dist/providers/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { ClaudeProvider } from './claude.js';
|
|
2
2
|
import { OpenAIProvider } from './openai.js';
|
|
3
3
|
import { GeminiProvider } from './gemini.js';
|
|
4
|
-
export function createProvider(provider, model, apiKey) {
|
|
4
|
+
export function createProvider(provider, model, apiKey, baseURL) {
|
|
5
5
|
switch (provider) {
|
|
6
6
|
case 'claude':
|
|
7
7
|
return new ClaudeProvider(apiKey, model);
|
|
8
8
|
case 'openai':
|
|
9
|
-
return new OpenAIProvider(apiKey, model);
|
|
9
|
+
return new OpenAIProvider(apiKey, model, baseURL);
|
|
10
10
|
case 'gemini':
|
|
11
11
|
return new GeminiProvider(apiKey, model);
|
|
12
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,UAAU,cAAc,CAC5B,QAAwC,EACxC,KAAa,EACb,MAAc;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,UAAU,cAAc,CAC5B,QAAwC,EACxC,KAAa,EACb,MAAc,EACd,OAAgB;IAEhB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC3C,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACpD,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC"}
|
|
@@ -2,7 +2,7 @@ import type { LLMProvider, LLMResponse, Message, ToolDefinition } from './types.
|
|
|
2
2
|
export declare class OpenAIProvider implements LLMProvider {
|
|
3
3
|
private client;
|
|
4
4
|
private model;
|
|
5
|
-
constructor(apiKey: string, model: string);
|
|
5
|
+
constructor(apiKey: string, model: string, baseURL?: string);
|
|
6
6
|
chat(systemPrompt: string, messages: Message[], tools: ToolDefinition[]): Promise<LLMResponse>;
|
|
7
7
|
/** Convert one internal Message into one or more OpenAI messages.
|
|
8
8
|
* A user message containing multiple tool_results expands to
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,OAAO,EACP,cAAc,EAGf,MAAM,YAAY,CAAC;AAEpB,qBAAa,cAAe,YAAW,WAAW;IAChD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,OAAO,EACP,cAAc,EAGf,MAAM,YAAY,CAAC;AAEpB,qBAAa,cAAe,YAAW,WAAW;IAChD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAKrD,IAAI,CACR,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,cAAc,EAAE,GACtB,OAAO,CAAC,WAAW,CAAC;IAuDvB;;sEAEkE;IAClE,OAAO,CAAC,cAAc;CA2DvB"}
|
package/dist/providers/openai.js
CHANGED
|
@@ -2,8 +2,8 @@ import OpenAI from 'openai';
|
|
|
2
2
|
export class OpenAIProvider {
|
|
3
3
|
client;
|
|
4
4
|
model;
|
|
5
|
-
constructor(apiKey, model) {
|
|
6
|
-
this.client = new OpenAI({ apiKey });
|
|
5
|
+
constructor(apiKey, model, baseURL) {
|
|
6
|
+
this.client = new OpenAI({ apiKey, baseURL });
|
|
7
7
|
this.model = model;
|
|
8
8
|
}
|
|
9
9
|
async chat(systemPrompt, messages, tools) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAU5B,MAAM,OAAO,cAAc;IACjB,MAAM,CAAS;IACf,KAAK,CAAS;IAEtB,YAAY,MAAc,EAAE,KAAa;
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAU5B,MAAM,OAAO,cAAc;IACjB,MAAM,CAAS;IACf,KAAK,CAAS;IAEtB,YAAY,MAAc,EAAE,KAAa,EAAE,OAAgB;QACzD,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,IAAI,CACR,YAAoB,EACpB,QAAmB,EACnB,KAAuB;QAEvB,MAAM,cAAc,GAAwC;YAC1D,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE;YACzC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;SACnD,CAAC;QAEF,MAAM,WAAW,GACf,KAAK,CAAC,MAAM,GAAG,CAAC;YACd,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAChB,IAAI,EAAE,UAAmB;gBACzB,QAAQ,EAAE;oBACR,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,UAAU,EAAE,CAAC,CAAC,WAAW;iBAC1B;aACF,CAAC,CAAC;YACL,CAAC,CAAC,SAAS,CAAC;QAEhB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YACzD,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,cAAc;YACxB,KAAK,EAAE,WAAW;YAClB,qBAAqB,EAAE,IAAI;SAC5B,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAE/B,MAAM,SAAS,GAAe,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAC1D,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACP,EAAE,EAAE,EAAE,CAAC,EAAE;YACT,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;YACtB,KAAK,EAAE,CAAC,GAAG,EAAE;gBACX,IAAI,CAAC;oBAAC,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAAC,CAAC;gBACjD,MAAM,CAAC;oBAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;gBAAC,CAAC;YACnD,CAAC,CAAC,EAAE;SACL,CAAC,CACH,CAAC;QAEF,IAAI,UAAqC,CAAC;QAC1C,IAAI,MAAM,CAAC,aAAa,KAAK,YAAY,EAAE,CAAC;YAC1C,UAAU,GAAG,UAAU,CAAC;QAC1B,CAAC;aAAM,IAAI,MAAM,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;YAC7C,UAAU,GAAG,YAAY,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,KAAK,CAAC;QACrB,CAAC;QAED,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;YAChC,SAAS;YACT,UAAU;SACX,CAAC;IACJ,CAAC;IAED;;sEAEkE;IAC1D,cAAc,CACpB,GAAY;QAEZ,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACpC,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,MAAM,GAAG,GAAG,CAAC,OAAyB,CAAC;QAE7C,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACxB,+CAA+C;YAC/C,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;YACnE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBAC3B,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa;wBAAE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;oBAC7D,OAAO;wBACL,IAAI,EAAE,MAAe;wBACrB,YAAY,EAAE,CAAC,CAAC,WAAW;wBAC3B,OAAO,EAAE,CAAC,CAAC,OAAO;qBACnB,CAAC;gBACJ,CAAC,CAAC,CAAC;YACL,CAAC;YACD,oCAAoC;YACpC,MAAM,IAAI,GAAG,MAAM;iBAChB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;iBAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAoC,CAAC,IAAI,CAAC;iBACtD,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;QAED,yCAAyC;QACzC,MAAM,IAAI,GAAG,MAAM;aAChB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;aAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAoC,CAAC,IAAI,CAAC;aACtD,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;QAC7D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO;gBACL;oBACE,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,IAAI,IAAI,IAAI;oBACrB,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;wBAC7B,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU;4BAAE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;wBAC1D,OAAO;4BACL,EAAE,EAAE,CAAC,CAAC,EAAE;4BACR,IAAI,EAAE,UAAmB;4BACzB,QAAQ,EAAE;gCACR,IAAI,EAAE,CAAC,CAAC,IAAI;gCACZ,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;6BACnC;yBACF,CAAC;oBACJ,CAAC,CAAC;iBACH;aACF,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "elyth-agent",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "ELYTH 自律型
|
|
3
|
+
"version": "0.6.0",
|
|
4
|
+
"description": "ELYTH 自律型AITuberエージェントCLI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"elyth-agent": "./dist/index.js"
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"dist/"
|
|
11
11
|
],
|
|
12
12
|
"scripts": {
|
|
13
|
-
"build": "tsc && node -e \"require('fs').copyFileSync('src/prompt/
|
|
13
|
+
"build": "tsc && node -e \"['system-base.md','dev-base.md'].forEach(f=>require('fs').copyFileSync('src/prompt/'+f,'dist/prompt/'+f))\"",
|
|
14
14
|
"dev": "tsc --watch"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|