@mingxy/ocosay 1.0.1 → 1.0.3
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 +64 -7
- package/dist/config.d.ts +21 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +14 -3
- package/dist/config.js.map +1 -1
- package/dist/plugin.d.ts +4 -2
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +1907 -138
- package/dist/plugin.js.map +7 -1
- package/package.json +4 -2
- package/src/config.ts +38 -4
- package/src/plugin.ts +1 -1
- package/tests/config.test.ts +2 -2
- package/tests/plugin.test.ts +2 -1
package/README.md
CHANGED
|
@@ -46,20 +46,56 @@ ocx install @mingxy/ocosay
|
|
|
46
46
|
npm install @mingxy/ocosay
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
-
在 OpenCode
|
|
49
|
+
在 OpenCode 配置文件中添加插件:
|
|
50
50
|
|
|
51
|
-
```
|
|
51
|
+
```jsonc
|
|
52
52
|
{
|
|
53
|
-
"
|
|
53
|
+
"plugin": [
|
|
54
54
|
"@mingxy/ocosay"
|
|
55
|
-
]
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
> **首次安装**:重启 OpenCode 后,插件会自动在 `~/.config/opencode/ocosay.jsonc` 生成默认配置文件。
|
|
60
|
+
> 请编辑该文件,填写您的 `apiKey` 和 `baseURL`。
|
|
61
|
+
|
|
62
|
+
## 快速开始
|
|
63
|
+
|
|
64
|
+
### 1. 添加插件
|
|
65
|
+
|
|
66
|
+
在 `~/.config/opencode/opencode.jsonc` 中添加:
|
|
67
|
+
|
|
68
|
+
```jsonc
|
|
69
|
+
{
|
|
70
|
+
"plugin": [
|
|
71
|
+
"@mingxy/ocosay"
|
|
72
|
+
]
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### 2. 重启 OpenCode
|
|
77
|
+
|
|
78
|
+
插件会自动下载并初始化。
|
|
79
|
+
|
|
80
|
+
### 3. 填写配置
|
|
81
|
+
|
|
82
|
+
首次启动后,插件会自动生成 `~/.config/opencode/ocosay.jsonc` 配置文件。
|
|
83
|
+
|
|
84
|
+
编辑该文件,填写必填项:
|
|
85
|
+
|
|
86
|
+
```jsonc
|
|
87
|
+
{
|
|
88
|
+
"providers": {
|
|
89
|
+
"minimax": {
|
|
90
|
+
"apiKey": "您的API_KEY", // ⚠️ 必填
|
|
91
|
+
"baseURL": "https://api.minimaxi.com" // ⚠️ 必填
|
|
92
|
+
}
|
|
59
93
|
}
|
|
60
94
|
}
|
|
61
95
|
```
|
|
62
96
|
|
|
97
|
+
### 4. 重启 OpenCode 使配置生效
|
|
98
|
+
|
|
63
99
|
## 快速开始
|
|
64
100
|
|
|
65
101
|
### 初始化
|
|
@@ -541,6 +577,27 @@ npm test
|
|
|
541
577
|
npm run watch
|
|
542
578
|
```
|
|
543
579
|
|
|
580
|
+
## Changelog
|
|
581
|
+
|
|
582
|
+
### v1.0.2 (2026-04-05)
|
|
583
|
+
**Bug Fix:**
|
|
584
|
+
- 🐛 修复 OpenCode 加载失败 `Plugin export is not a function`
|
|
585
|
+
- 根因:OpenCode 插件加载器期望 `{ server: Plugin }` 格式导出
|
|
586
|
+
- 修复:`export default { server: OcosayPlugin }`
|
|
587
|
+
- 🎵 默认 TTS 模型改为 `speech-2.8-hd`
|
|
588
|
+
|
|
589
|
+
### v1.0.1 (2026-04-05)
|
|
590
|
+
- 📚 多平台 AudioBackend 架构(6 种后端)
|
|
591
|
+
- 🔌 OpenCode 插件标准集成
|
|
592
|
+
- 📋 完整测试覆盖(304 测试)
|
|
593
|
+
|
|
594
|
+
### v1.0.0 (2026-04-05)
|
|
595
|
+
- 🎙️ 初始版本
|
|
596
|
+
- 🔊 多 TTS 模型支持
|
|
597
|
+
- 🎭 多种音色选择
|
|
598
|
+
- 🎛️ 播放控制(暂停、恢复、停止)
|
|
599
|
+
- 📡 豆包模式(边接收边朗读)
|
|
600
|
+
|
|
544
601
|
## Contributing
|
|
545
602
|
|
|
546
603
|
欢迎提交 Issue 和 PR!
|
package/dist/config.d.ts
CHANGED
|
@@ -1,4 +1,24 @@
|
|
|
1
|
-
|
|
1
|
+
export interface OcosayConfig {
|
|
2
|
+
enabled: boolean;
|
|
3
|
+
autoPlay: boolean;
|
|
4
|
+
autoRead: boolean;
|
|
5
|
+
streamMode: boolean;
|
|
6
|
+
streamBufferSize: number;
|
|
7
|
+
streamBufferTimeout: number;
|
|
8
|
+
speed: number;
|
|
9
|
+
volume: number;
|
|
10
|
+
pitch: number;
|
|
11
|
+
providers: {
|
|
12
|
+
minimax: {
|
|
13
|
+
apiKey: string;
|
|
14
|
+
baseURL: string;
|
|
15
|
+
voiceId: string;
|
|
16
|
+
model: 'sync' | 'async' | 'stream';
|
|
17
|
+
ttsModel: string;
|
|
18
|
+
audioFormat: 'mp3' | 'wav' | 'flac';
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
}
|
|
2
22
|
export declare function generateDefaultConfig(): OcosayConfig;
|
|
3
23
|
export declare function stripComments(jsonc: string): string;
|
|
4
24
|
export declare function mergeWithDefaults(loaded: Partial<OcosayConfig>, defaults: Omit<OcosayConfig, 'providers'>): Omit<OcosayConfig, 'providers'>;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,EAAE,OAAO,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE;QACT,OAAO,EAAE;YACP,MAAM,EAAE,MAAM,CAAA;YACd,OAAO,EAAE,MAAM,CAAA;YACf,OAAO,EAAE,MAAM,CAAA;YACf,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAA;YAClC,QAAQ,EAAE,MAAM,CAAA;YAChB,WAAW,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAAA;SACpC,CAAA;KACF,CAAA;CACF;AAiBD,wBAAgB,qBAAqB,IAAI,YAAY,CAcpD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAmDnD;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,EAC7B,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,GACxC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAYjC;AAED,wBAAgB,kBAAkB,IAAI,YAAY,CAsDjD"}
|
package/dist/config.js
CHANGED
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import * as os from 'os';
|
|
4
|
-
|
|
4
|
+
// 默认配置
|
|
5
|
+
const DEFAULT_CONFIG = {
|
|
6
|
+
enabled: true,
|
|
7
|
+
autoPlay: false,
|
|
8
|
+
autoRead: false,
|
|
9
|
+
streamMode: true,
|
|
10
|
+
streamBufferSize: 30,
|
|
11
|
+
streamBufferTimeout: 2000,
|
|
12
|
+
speed: 1.0,
|
|
13
|
+
volume: 80,
|
|
14
|
+
pitch: 1.0
|
|
15
|
+
};
|
|
5
16
|
const CONFIG_PATH = path.join(os.homedir(), '.config', 'opencode', 'ocosay.jsonc');
|
|
6
17
|
export function generateDefaultConfig() {
|
|
7
18
|
return {
|
|
@@ -12,7 +23,7 @@ export function generateDefaultConfig() {
|
|
|
12
23
|
baseURL: '',
|
|
13
24
|
voiceId: '',
|
|
14
25
|
model: 'stream',
|
|
15
|
-
ttsModel: 'speech-
|
|
26
|
+
ttsModel: 'speech-2.8-hd',
|
|
16
27
|
audioFormat: 'mp3'
|
|
17
28
|
}
|
|
18
29
|
}
|
|
@@ -118,7 +129,7 @@ export function loadOrCreateConfig() {
|
|
|
118
129
|
baseURL: loaded.providers?.minimax?.baseURL ?? '',
|
|
119
130
|
voiceId: loaded.providers?.minimax?.voiceId ?? '',
|
|
120
131
|
model: loaded.providers?.minimax?.model ?? 'stream',
|
|
121
|
-
ttsModel: loaded.providers?.minimax?.ttsModel ?? 'speech-
|
|
132
|
+
ttsModel: loaded.providers?.minimax?.ttsModel ?? 'speech-2.8-hd',
|
|
122
133
|
audioFormat: loaded.providers?.minimax?.audioFormat ?? 'mp3'
|
|
123
134
|
}
|
|
124
135
|
}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.d.ts
CHANGED
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAA8B,MAAM,qBAAqB,CAAA
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAA8B,MAAM,qBAAqB,CAAA;;;;AAgL7E,wBAAuC"}
|