@make-u-free/migi 0.2.1 → 0.2.2
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/.env.example +9 -0
- package/README.md +47 -0
- package/bin/migi.js +1 -2
- package/package.json +1 -1
- package/src/agent.js +5 -1
- package/src/setup.js +2 -1
- package/src/tls.js +31 -0
package/.env.example
CHANGED
|
@@ -1 +1,10 @@
|
|
|
1
1
|
OPENAI_API_KEY=sk-...
|
|
2
|
+
|
|
3
|
+
# 企業ネットワーク(Zscaler等のSSLインスペクション)対応
|
|
4
|
+
# CA証明書を ~/.migi/ に置くと自動で読み込まれます(下記いずれか)
|
|
5
|
+
# ~/.migi/zscaler-ca.pem ← 推奨
|
|
6
|
+
# ~/.migi/zscaler-ca.crt
|
|
7
|
+
# ~/.migi/ca-bundle.pem ← 複数CA連結バンドル
|
|
8
|
+
#
|
|
9
|
+
# または環境変数で直接指定することも可能です:
|
|
10
|
+
# NODE_EXTRA_CA_CERTS=/path/to/your-ca.pem
|
package/README.md
CHANGED
|
@@ -215,3 +215,50 @@ node /path/to/migi/bin/migi.js
|
|
|
215
215
|
> /config # 設定変更
|
|
216
216
|
> /exit # 終了
|
|
217
217
|
```
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## 企業ネットワーク(Zscaler等)対応
|
|
222
|
+
|
|
223
|
+
ZscalerなどSSLインスペクションを行う企業プロキシ環境では、CA証明書を追加することで安全に通信できます。
|
|
224
|
+
|
|
225
|
+
### 手順
|
|
226
|
+
|
|
227
|
+
**1. ZscalerのCA証明書を取得する**
|
|
228
|
+
|
|
229
|
+
ブラウザ(Chrome)の場合:
|
|
230
|
+
1. `chrome://settings/security` → 証明書の管理 → 認証局
|
|
231
|
+
2. Zscaler Root CA を選択してエクスポート(PEM形式)
|
|
232
|
+
|
|
233
|
+
または社内IT部門から `ZscalerRootCertificate.crt` を入手する。
|
|
234
|
+
|
|
235
|
+
**2. `~/.migi/` に配置する**
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
# Windows(PowerShell)
|
|
239
|
+
mkdir $env:USERPROFILE\.migi
|
|
240
|
+
copy ZscalerRootCertificate.crt $env:USERPROFILE\.migi\zscaler-ca.crt
|
|
241
|
+
|
|
242
|
+
# Mac / Linux
|
|
243
|
+
mkdir -p ~/.migi
|
|
244
|
+
cp ZscalerRootCertificate.crt ~/.migi/zscaler-ca.pem
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
**3. そのまま起動する**
|
|
248
|
+
|
|
249
|
+
migi は起動時に以下の順で CA ファイルを自動検出します:
|
|
250
|
+
|
|
251
|
+
```
|
|
252
|
+
~/.migi/zscaler-ca.pem ← 推奨
|
|
253
|
+
~/.migi/zscaler-ca.crt
|
|
254
|
+
~/.migi/ca-bundle.pem ← 複数CA連結バンドルも可
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
見つかった場合は自動的に TLS に組み込まれます。手動での設定は不要です。
|
|
258
|
+
|
|
259
|
+
**環境変数で直接指定することも可能:**
|
|
260
|
+
|
|
261
|
+
```bash
|
|
262
|
+
set NODE_EXTRA_CA_CERTS=C:\path\to\your-ca.pem # Windows
|
|
263
|
+
export NODE_EXTRA_CA_CERTS=~/certs/your-ca.pem # Mac/Linux
|
|
264
|
+
```
|
package/bin/migi.js
CHANGED
package/package.json
CHANGED
package/src/agent.js
CHANGED
|
@@ -3,10 +3,14 @@ import chalk from 'chalk'
|
|
|
3
3
|
import { homedir } from 'os'
|
|
4
4
|
import { toolSchemas, executeTool } from './tools.js'
|
|
5
5
|
import { createPermissionChecker } from './permissions.js'
|
|
6
|
+
import { httpsAgent } from './tls.js'
|
|
6
7
|
|
|
7
8
|
export class MigiAgent {
|
|
8
9
|
constructor({ context = '', promptFn = null, apiKey = null, model = 'gpt-4.1-2025-04-14', name = 'Migi', userName = '' } = {}) {
|
|
9
|
-
this.client = new OpenAI({
|
|
10
|
+
this.client = new OpenAI({
|
|
11
|
+
apiKey: apiKey || process.env.OPENAI_API_KEY,
|
|
12
|
+
...(httpsAgent ? { httpAgent: httpsAgent } : {})
|
|
13
|
+
})
|
|
10
14
|
this.model = model
|
|
11
15
|
this.history = []
|
|
12
16
|
this.checkPermission = createPermissionChecker(promptFn || (() => Promise.resolve('y')))
|
package/src/setup.js
CHANGED
|
@@ -4,6 +4,7 @@ import { homedir } from 'os'
|
|
|
4
4
|
import readline from 'readline'
|
|
5
5
|
import chalk from 'chalk'
|
|
6
6
|
import OpenAI from 'openai'
|
|
7
|
+
import { httpsAgent } from './tls.js'
|
|
7
8
|
|
|
8
9
|
export const MIGI_DIR = join(homedir(), '.migi')
|
|
9
10
|
export const CONFIG_PATH = join(MIGI_DIR, 'config.json')
|
|
@@ -20,7 +21,7 @@ export function loadGlobalConfig() {
|
|
|
20
21
|
async function extractName(apiKey, model, input) {
|
|
21
22
|
if (!input) return 'Migi'
|
|
22
23
|
try {
|
|
23
|
-
const client = new OpenAI({ apiKey })
|
|
24
|
+
const client = new OpenAI({ apiKey, ...(httpsAgent ? { httpAgent: httpsAgent } : {}) })
|
|
24
25
|
const res = await client.chat.completions.create({
|
|
25
26
|
model,
|
|
26
27
|
messages: [{
|
package/src/tls.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'fs'
|
|
2
|
+
import { join } from 'path'
|
|
3
|
+
import { homedir } from 'os'
|
|
4
|
+
import https from 'https'
|
|
5
|
+
|
|
6
|
+
// CA ファイルの検索順(単体 .crt / bundle.pem どちらでも可)
|
|
7
|
+
const CA_CANDIDATES = [
|
|
8
|
+
process.env.NODE_EXTRA_CA_CERTS, // 環境変数で明示指定
|
|
9
|
+
join(homedir(), '.migi', 'zscaler-ca.pem'), // Zscaler 推奨パス
|
|
10
|
+
join(homedir(), '.migi', 'zscaler-ca.crt'), // .crt 形式でも OK
|
|
11
|
+
join(homedir(), '.migi', 'ca-bundle.pem'), // 複数CA連結 bundle
|
|
12
|
+
].filter(Boolean)
|
|
13
|
+
|
|
14
|
+
function findCA() {
|
|
15
|
+
for (const p of CA_CANDIDATES) {
|
|
16
|
+
if (existsSync(p)) return p
|
|
17
|
+
}
|
|
18
|
+
return null
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export const caPath = findCA()
|
|
22
|
+
|
|
23
|
+
// NODE_EXTRA_CA_CERTS: Node 18+ built-in fetch / undici 向け
|
|
24
|
+
if (caPath && !process.env.NODE_EXTRA_CA_CERTS) {
|
|
25
|
+
process.env.NODE_EXTRA_CA_CERTS = caPath
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// https.Agent: openai SDK の httpAgent オプション向け
|
|
29
|
+
export const httpsAgent = caPath
|
|
30
|
+
? new https.Agent({ ca: readFileSync(caPath) })
|
|
31
|
+
: null
|