@hopping-dev/hub 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/assets/hopping-skill/SKILL.md +221 -0
- package/dist/approval/manager.d.ts +60 -0
- package/dist/approval/manager.d.ts.map +1 -0
- package/dist/approval/manager.js +101 -0
- package/dist/approval/manager.js.map +1 -0
- package/dist/approval/session-memory.d.ts +37 -0
- package/dist/approval/session-memory.d.ts.map +1 -0
- package/dist/approval/session-memory.js +63 -0
- package/dist/approval/session-memory.js.map +1 -0
- package/dist/cli/config-writer.d.ts +57 -0
- package/dist/cli/config-writer.d.ts.map +1 -0
- package/dist/cli/config-writer.js +318 -0
- package/dist/cli/config-writer.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +82 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/path-resolver.d.ts +48 -0
- package/dist/cli/path-resolver.d.ts.map +1 -0
- package/dist/cli/path-resolver.js +212 -0
- package/dist/cli/path-resolver.js.map +1 -0
- package/dist/cli/setup.d.ts +10 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +268 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/cloud/connector.d.ts +74 -0
- package/dist/cloud/connector.d.ts.map +1 -0
- package/dist/cloud/connector.js +524 -0
- package/dist/cloud/connector.js.map +1 -0
- package/dist/cloud/index.d.ts +3 -0
- package/dist/cloud/index.d.ts.map +1 -0
- package/dist/cloud/index.js +6 -0
- package/dist/cloud/index.js.map +1 -0
- package/dist/config/manager.d.ts +76 -0
- package/dist/config/manager.d.ts.map +1 -0
- package/dist/config/manager.js +296 -0
- package/dist/config/manager.js.map +1 -0
- package/dist/dev-mode.d.ts +30 -0
- package/dist/dev-mode.d.ts.map +1 -0
- package/dist/dev-mode.js +53 -0
- package/dist/dev-mode.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +354 -0
- package/dist/index.js.map +1 -0
- package/dist/ipc/index.d.ts +12 -0
- package/dist/ipc/index.d.ts.map +1 -0
- package/dist/ipc/index.js +15 -0
- package/dist/ipc/index.js.map +1 -0
- package/dist/ipc/watcher.d.ts +226 -0
- package/dist/ipc/watcher.d.ts.map +1 -0
- package/dist/ipc/watcher.js +745 -0
- package/dist/ipc/watcher.js.map +1 -0
- package/dist/local/approval-dialog.d.ts +30 -0
- package/dist/local/approval-dialog.d.ts.map +1 -0
- package/dist/local/approval-dialog.js +214 -0
- package/dist/local/approval-dialog.js.map +1 -0
- package/dist/local/index.d.ts +8 -0
- package/dist/local/index.d.ts.map +1 -0
- package/dist/local/index.js +13 -0
- package/dist/local/index.js.map +1 -0
- package/dist/local/local-approval.d.ts +55 -0
- package/dist/local/local-approval.d.ts.map +1 -0
- package/dist/local/local-approval.js +125 -0
- package/dist/local/local-approval.js.map +1 -0
- package/dist/local/notifier.d.ts +19 -0
- package/dist/local/notifier.d.ts.map +1 -0
- package/dist/local/notifier.js +110 -0
- package/dist/local/notifier.js.map +1 -0
- package/dist/local/sanitize.d.ts +20 -0
- package/dist/local/sanitize.d.ts.map +1 -0
- package/dist/local/sanitize.js +28 -0
- package/dist/local/sanitize.js.map +1 -0
- package/dist/mcp/file-extractor.d.ts +11 -0
- package/dist/mcp/file-extractor.d.ts.map +1 -0
- package/dist/mcp/file-extractor.js +74 -0
- package/dist/mcp/file-extractor.js.map +1 -0
- package/dist/mcp/risk-level.d.ts +44 -0
- package/dist/mcp/risk-level.d.ts.map +1 -0
- package/dist/mcp/risk-level.js +127 -0
- package/dist/mcp/risk-level.js.map +1 -0
- package/dist/mcp/schemas.d.ts +83 -0
- package/dist/mcp/schemas.d.ts.map +1 -0
- package/dist/mcp/schemas.js +84 -0
- package/dist/mcp/schemas.js.map +1 -0
- package/dist/mcp/summary.d.ts +11 -0
- package/dist/mcp/summary.d.ts.map +1 -0
- package/dist/mcp/summary.js +150 -0
- package/dist/mcp/summary.js.map +1 -0
- package/dist/mcp/tools.d.ts +45 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +1217 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/pairing/auto-pairing.d.ts +37 -0
- package/dist/pairing/auto-pairing.d.ts.map +1 -0
- package/dist/pairing/auto-pairing.js +144 -0
- package/dist/pairing/auto-pairing.js.map +1 -0
- package/dist/pairing/binding-poller.d.ts +26 -0
- package/dist/pairing/binding-poller.d.ts.map +1 -0
- package/dist/pairing/binding-poller.js +108 -0
- package/dist/pairing/binding-poller.js.map +1 -0
- package/dist/pairing/pairing-server.d.ts +14 -0
- package/dist/pairing/pairing-server.d.ts.map +1 -0
- package/dist/pairing/pairing-server.js +277 -0
- package/dist/pairing/pairing-server.js.map +1 -0
- package/dist/pairing/qr-display.d.ts +14 -0
- package/dist/pairing/qr-display.d.ts.map +1 -0
- package/dist/pairing/qr-display.js +40 -0
- package/dist/pairing/qr-display.js.map +1 -0
- package/dist/policy/engine.d.ts +31 -0
- package/dist/policy/engine.d.ts.map +1 -0
- package/dist/policy/engine.js +187 -0
- package/dist/policy/engine.js.map +1 -0
- package/dist/policy/store.d.ts +26 -0
- package/dist/policy/store.d.ts.map +1 -0
- package/dist/policy/store.js +70 -0
- package/dist/policy/store.js.map +1 -0
- package/dist/policy/system-policies.d.ts +15 -0
- package/dist/policy/system-policies.d.ts.map +1 -0
- package/dist/policy/system-policies.js +265 -0
- package/dist/policy/system-policies.js.map +1 -0
- package/dist/policy/tool-mapping.d.ts +45 -0
- package/dist/policy/tool-mapping.d.ts.map +1 -0
- package/dist/policy/tool-mapping.js +88 -0
- package/dist/policy/tool-mapping.js.map +1 -0
- package/dist/policy/tool-registry.json +85 -0
- package/dist/store/db.d.ts +17 -0
- package/dist/store/db.d.ts.map +1 -0
- package/dist/store/db.js +193 -0
- package/dist/store/db.js.map +1 -0
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +7 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/metadata.d.ts +31 -0
- package/dist/store/metadata.d.ts.map +1 -0
- package/dist/store/metadata.js +178 -0
- package/dist/store/metadata.js.map +1 -0
- package/dist/store/operations.d.ts +26 -0
- package/dist/store/operations.d.ts.map +1 -0
- package/dist/store/operations.js +171 -0
- package/dist/store/operations.js.map +1 -0
- package/dist/utils/json.d.ts +7 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +33 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/logger.d.ts +13 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +58 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/open-browser.d.ts +8 -0
- package/dist/utils/open-browser.d.ts.map +1 -0
- package/dist/utils/open-browser.js +38 -0
- package/dist/utils/open-browser.js.map +1 -0
- package/node_modules/@hopping/shared/dist/types.d.ts +649 -0
- package/node_modules/@hopping/shared/dist/types.js +48 -0
- package/node_modules/@hopping/shared/dist/types.js.map +1 -0
- package/node_modules/@hopping/shared/package.json +14 -0
- package/node_modules/@hopping/shared/tsconfig.json +16 -0
- package/node_modules/@hopping/shared/types.d.ts +650 -0
- package/node_modules/@hopping/shared/types.d.ts.map +1 -0
- package/node_modules/@hopping/shared/types.js +48 -0
- package/node_modules/@hopping/shared/types.js.map +1 -0
- package/node_modules/@hopping/shared/types.ts +895 -0
- package/package.json +52 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.showNotification = showNotification;
|
|
37
|
+
const child_process_1 = require("child_process");
|
|
38
|
+
const os = __importStar(require("os"));
|
|
39
|
+
const sanitize_1 = require("./sanitize");
|
|
40
|
+
/**
|
|
41
|
+
* 發送跨平台桌面通知(fire-and-forget)。
|
|
42
|
+
*
|
|
43
|
+
* - macOS:osascript display notification
|
|
44
|
+
* - Linux:notify-send
|
|
45
|
+
* - Windows:PowerShell BalloonTip
|
|
46
|
+
*
|
|
47
|
+
* 任何失敗(命令不存在、無 GUI session、權限拒絕)均靜默降級(logger.warn),
|
|
48
|
+
* 不影響審核流程。
|
|
49
|
+
*/
|
|
50
|
+
async function showNotification(opts, logger) {
|
|
51
|
+
const platform = os.platform();
|
|
52
|
+
try {
|
|
53
|
+
await runNotification(opts, platform);
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
logger.warn('showNotification: failed (non-fatal)', {
|
|
57
|
+
platform,
|
|
58
|
+
error: err instanceof Error ? err.message : String(err),
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function runNotification(opts, platform) {
|
|
63
|
+
return new Promise((resolve, reject) => {
|
|
64
|
+
if (platform === 'darwin') {
|
|
65
|
+
const { title, subtitle = 'Approval Required', message, soundEnabled = true } = opts;
|
|
66
|
+
const sound = soundEnabled ? ` sound name "Glass"` : '';
|
|
67
|
+
const script = `display notification "${(0, sanitize_1.sanitizeAppleScript)(message)}" with title "${(0, sanitize_1.sanitizeAppleScript)(title)}" subtitle "${(0, sanitize_1.sanitizeAppleScript)(subtitle)}"${sound}`;
|
|
68
|
+
(0, child_process_1.execFile)('osascript', ['-e', script], (err) => {
|
|
69
|
+
if (err)
|
|
70
|
+
reject(err);
|
|
71
|
+
else
|
|
72
|
+
resolve();
|
|
73
|
+
});
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (platform === 'linux') {
|
|
77
|
+
const { title, message } = opts;
|
|
78
|
+
(0, child_process_1.execFile)('notify-send', ['-u', 'critical', title, message], (err) => {
|
|
79
|
+
if (err)
|
|
80
|
+
reject(err);
|
|
81
|
+
else
|
|
82
|
+
resolve();
|
|
83
|
+
});
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if (platform === 'win32') {
|
|
87
|
+
const title = (0, sanitize_1.sanitizePowerShell)(opts.title);
|
|
88
|
+
const message = (0, sanitize_1.sanitizePowerShell)(opts.message);
|
|
89
|
+
const script = [
|
|
90
|
+
'[void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")',
|
|
91
|
+
'$notify = New-Object System.Windows.Forms.NotifyIcon',
|
|
92
|
+
'$notify.Icon = [System.Drawing.SystemIcons]::Information',
|
|
93
|
+
'$notify.Visible = $true',
|
|
94
|
+
`$notify.ShowBalloonTip(5000, "${title}", "${message}", [System.Windows.Forms.ToolTipIcon]::Info)`,
|
|
95
|
+
'Start-Sleep -Milliseconds 500',
|
|
96
|
+
'$notify.Dispose()',
|
|
97
|
+
].join('; ');
|
|
98
|
+
(0, child_process_1.execFile)('powershell', ['-NoProfile', '-Command', script], (err) => {
|
|
99
|
+
if (err)
|
|
100
|
+
reject(err);
|
|
101
|
+
else
|
|
102
|
+
resolve();
|
|
103
|
+
});
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
// 不支援的平台:靜默略過
|
|
107
|
+
resolve();
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=notifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notifier.js","sourceRoot":"","sources":["../../src/local/notifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 跨平台字串安全化工具(REQ-HUB-032/033)
|
|
3
|
+
*
|
|
4
|
+
* 用於 notifier.ts 和 approval-dialog.ts 中,
|
|
5
|
+
* 確保用戶輸入不會破壞 shell 命令語法或造成注入。
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* 安全化字串以用於 AppleScript 字串字面值(雙引號界定)。
|
|
9
|
+
* - 反斜線 → 正斜線(避免轉義問題)
|
|
10
|
+
* - 雙引號 → 單引號(避免字串提前終止)
|
|
11
|
+
*/
|
|
12
|
+
export declare function sanitizeAppleScript(s: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* 安全化字串以用於 PowerShell 雙引號字串。
|
|
15
|
+
* - 雙引號 → 單引號(避免字串提前終止)
|
|
16
|
+
* - 反引號移除(PowerShell 轉義字元)
|
|
17
|
+
* - `$` 移除(避免變數展開和子表達式執行,如 `$env:PATH` 或 `$(cmd)`)
|
|
18
|
+
*/
|
|
19
|
+
export declare function sanitizePowerShell(s: string): string;
|
|
20
|
+
//# sourceMappingURL=sanitize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../src/local/sanitize.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEpD"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 跨平台字串安全化工具(REQ-HUB-032/033)
|
|
4
|
+
*
|
|
5
|
+
* 用於 notifier.ts 和 approval-dialog.ts 中,
|
|
6
|
+
* 確保用戶輸入不會破壞 shell 命令語法或造成注入。
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.sanitizeAppleScript = sanitizeAppleScript;
|
|
10
|
+
exports.sanitizePowerShell = sanitizePowerShell;
|
|
11
|
+
/**
|
|
12
|
+
* 安全化字串以用於 AppleScript 字串字面值(雙引號界定)。
|
|
13
|
+
* - 反斜線 → 正斜線(避免轉義問題)
|
|
14
|
+
* - 雙引號 → 單引號(避免字串提前終止)
|
|
15
|
+
*/
|
|
16
|
+
function sanitizeAppleScript(s) {
|
|
17
|
+
return s.replace(/\\/g, '/').replace(/"/g, "'");
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 安全化字串以用於 PowerShell 雙引號字串。
|
|
21
|
+
* - 雙引號 → 單引號(避免字串提前終止)
|
|
22
|
+
* - 反引號移除(PowerShell 轉義字元)
|
|
23
|
+
* - `$` 移除(避免變數展開和子表達式執行,如 `$env:PATH` 或 `$(cmd)`)
|
|
24
|
+
*/
|
|
25
|
+
function sanitizePowerShell(s) {
|
|
26
|
+
return s.replace(/"/g, "'").replace(/`/g, '').replace(/\$/g, '');
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=sanitize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../../src/local/sanitize.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAOH,kDAEC;AAQD,gDAEC;AAjBD;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,CAAS;IAC3C,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAClD,CAAC;AAED;;;;;GAKG;AACH,SAAgB,kBAAkB,CAAC,CAAS;IAC1C,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extract file paths from toolInput based on tool type.
|
|
3
|
+
*
|
|
4
|
+
* - For Write/Edit/Read/Glob/Grep/NotebookEdit: extract from `file_path`, `path`, `notebook_path`
|
|
5
|
+
* - For Bash: use regex to find paths in `command` string
|
|
6
|
+
* - For other tools: scan string values for path-like patterns
|
|
7
|
+
*
|
|
8
|
+
* @returns Deduplicated array of file paths (may be empty)
|
|
9
|
+
*/
|
|
10
|
+
export declare function extractFilePaths(toolName: string, toolInput: Record<string, unknown>): string[];
|
|
11
|
+
//# sourceMappingURL=file-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-extractor.d.ts","sourceRoot":"","sources":["../../src/mcp/file-extractor.ts"],"names":[],"mappings":"AAwBA;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CA+B/F"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================
|
|
3
|
+
// File Path Extractor
|
|
4
|
+
// Extracts relevant file paths from toolInput
|
|
5
|
+
// ============================================
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.extractFilePaths = extractFilePaths;
|
|
8
|
+
/**
|
|
9
|
+
* Regex for extracting file paths from shell commands.
|
|
10
|
+
* Matches absolute paths (/...) and relative paths (./ or ../)
|
|
11
|
+
* Does not attempt full shell parsing — extracts obvious paths only.
|
|
12
|
+
*/
|
|
13
|
+
const FILE_PATH_REGEX = /(?:^|\s)((?:\/|\.\.?\/)[^\s;|&><'"]+)/g;
|
|
14
|
+
/**
|
|
15
|
+
* Tools that have a direct file_path or path field in toolInput.
|
|
16
|
+
*/
|
|
17
|
+
const DIRECT_PATH_TOOLS = new Set([
|
|
18
|
+
'Write',
|
|
19
|
+
'Edit',
|
|
20
|
+
'Read',
|
|
21
|
+
'Glob',
|
|
22
|
+
'Grep',
|
|
23
|
+
'NotebookEdit',
|
|
24
|
+
]);
|
|
25
|
+
/**
|
|
26
|
+
* Extract file paths from toolInput based on tool type.
|
|
27
|
+
*
|
|
28
|
+
* - For Write/Edit/Read/Glob/Grep/NotebookEdit: extract from `file_path`, `path`, `notebook_path`
|
|
29
|
+
* - For Bash: use regex to find paths in `command` string
|
|
30
|
+
* - For other tools: scan string values for path-like patterns
|
|
31
|
+
*
|
|
32
|
+
* @returns Deduplicated array of file paths (may be empty)
|
|
33
|
+
*/
|
|
34
|
+
function extractFilePaths(toolName, toolInput) {
|
|
35
|
+
const paths = new Set();
|
|
36
|
+
if (DIRECT_PATH_TOOLS.has(toolName)) {
|
|
37
|
+
// Direct extraction from known fields
|
|
38
|
+
for (const key of ['file_path', 'path', 'notebook_path']) {
|
|
39
|
+
const val = toolInput[key];
|
|
40
|
+
if (typeof val === 'string' && val.length > 0) {
|
|
41
|
+
paths.add(val);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return [...paths];
|
|
45
|
+
}
|
|
46
|
+
if (toolName === 'Bash') {
|
|
47
|
+
const command = toolInput['command'];
|
|
48
|
+
if (typeof command === 'string') {
|
|
49
|
+
extractPathsFromString(command, paths);
|
|
50
|
+
}
|
|
51
|
+
return [...paths];
|
|
52
|
+
}
|
|
53
|
+
// Generic: scan all string values
|
|
54
|
+
for (const key of Object.keys(toolInput)) {
|
|
55
|
+
const val = toolInput[key];
|
|
56
|
+
if (typeof val === 'string' && val.length > 0) {
|
|
57
|
+
extractPathsFromString(val, paths);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return [...paths];
|
|
61
|
+
}
|
|
62
|
+
function extractPathsFromString(text, paths) {
|
|
63
|
+
let match;
|
|
64
|
+
// Reset regex state
|
|
65
|
+
FILE_PATH_REGEX.lastIndex = 0;
|
|
66
|
+
while ((match = FILE_PATH_REGEX.exec(text)) !== null) {
|
|
67
|
+
const p = match[1].trim();
|
|
68
|
+
// Filter out common false positives
|
|
69
|
+
if (p.length > 1 && !p.startsWith('//')) {
|
|
70
|
+
paths.add(p);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=file-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-extractor.js","sourceRoot":"","sources":["../../src/mcp/file-extractor.ts"],"names":[],"mappings":";AAAA,+CAA+C;AAC/C,sBAAsB;AACtB,8CAA8C;AAC9C,+CAA+C;;AA8B/C,4CA+BC;AA3DD;;;;GAIG;AACH,MAAM,eAAe,GAAG,wCAAwC,CAAC;AAEjE;;GAEG;AACH,MAAM,iBAAiB,GAAwB,IAAI,GAAG,CAAC;IACrD,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,cAAc;CACf,CAAC,CAAC;AAEH;;;;;;;;GAQG;AACH,SAAgB,gBAAgB,CAAC,QAAgB,EAAE,SAAkC;IACnF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhC,IAAI,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,sCAAsC;QACtC,KAAK,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,CAAC;YACzD,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9C,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,sBAAsB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,kCAAkC;IAClC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,sBAAsB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAY,EAAE,KAAkB;IAC9D,IAAI,KAA6B,CAAC;IAClC,oBAAoB;IACpB,eAAe,CAAC,SAAS,GAAG,CAAC,CAAC;IAC9B,OAAO,CAAC,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACrD,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1B,oCAAoC;QACpC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACf,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Risk Level 評估模組
|
|
3
|
+
*
|
|
4
|
+
* 從 tools.ts 提取的共用函式,供 IpcWatcher 和 hopping.check 共用。
|
|
5
|
+
* 負責:
|
|
6
|
+
* 1. deriveRiskLevel — 依 PolicyEngine finalAction + content pattern 推導風險等級
|
|
7
|
+
* 2. CRITICAL_PATTERNS — 高風險內容匹配(rm -rf, DROP TABLE 等)
|
|
8
|
+
* 3. OPERATION_TYPE_DESCRIPTIONS — OperationType → 人類可讀描述
|
|
9
|
+
*/
|
|
10
|
+
import type { PolicyAction, RiskLevel, ProgressUpdatePayload } from '@hopping/shared';
|
|
11
|
+
/** OperationType → 可讀描述映射(供 toolContext.description) */
|
|
12
|
+
export declare const OPERATION_TYPE_DESCRIPTIONS: Record<string, string>;
|
|
13
|
+
/**
|
|
14
|
+
* Content patterns that indicate critical risk level.
|
|
15
|
+
* These override the policy-based risk level when detected.
|
|
16
|
+
*/
|
|
17
|
+
export declare const CRITICAL_PATTERNS: ReadonlyArray<{
|
|
18
|
+
test: RegExp;
|
|
19
|
+
label: string;
|
|
20
|
+
}>;
|
|
21
|
+
/**
|
|
22
|
+
* 推導風險等級
|
|
23
|
+
*
|
|
24
|
+
* 1. 先掃描 content 是否匹配 CRITICAL_PATTERNS(critical 覆蓋所有 policy 判斷)
|
|
25
|
+
* 2. 再依 PolicyEngine finalAction 推導:ALLOW → low, ASK → medium, WARN → high
|
|
26
|
+
*
|
|
27
|
+
* @param finalAction - PolicyEngine 評估結果
|
|
28
|
+
* @param toolName - 被審核的工具名稱
|
|
29
|
+
* @param toolInput - 工具參數
|
|
30
|
+
*/
|
|
31
|
+
export declare function deriveRiskLevel(finalAction: PolicyAction, toolName: string, toolInput: Record<string, unknown>): RiskLevel;
|
|
32
|
+
/**
|
|
33
|
+
* 建構 YOLO 觀測模式的 progress_update payload
|
|
34
|
+
* 供 tools.ts(handleCheck)和 watcher.ts(handlePendingFile)共用
|
|
35
|
+
*/
|
|
36
|
+
export declare function buildYoloProgressPayload(params: {
|
|
37
|
+
agentId: string;
|
|
38
|
+
sessionId: string;
|
|
39
|
+
toolName: string;
|
|
40
|
+
riskLevel: RiskLevel;
|
|
41
|
+
timestamp: string;
|
|
42
|
+
filePaths?: string[];
|
|
43
|
+
}): ProgressUpdatePayload;
|
|
44
|
+
//# sourceMappingURL=risk-level.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"risk-level.d.ts","sourceRoot":"","sources":["../../src/mcp/risk-level.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAMtF,wDAAwD;AACxD,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAO9D,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAY5E,CAAC;AAiCF;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,YAAY,EACzB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,SAAS,CAoBX;AAMD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,GAAG,qBAAqB,CAYxB"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Risk Level 評估模組
|
|
4
|
+
*
|
|
5
|
+
* 從 tools.ts 提取的共用函式,供 IpcWatcher 和 hopping.check 共用。
|
|
6
|
+
* 負責:
|
|
7
|
+
* 1. deriveRiskLevel — 依 PolicyEngine finalAction + content pattern 推導風險等級
|
|
8
|
+
* 2. CRITICAL_PATTERNS — 高風險內容匹配(rm -rf, DROP TABLE 等)
|
|
9
|
+
* 3. OPERATION_TYPE_DESCRIPTIONS — OperationType → 人類可讀描述
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.CRITICAL_PATTERNS = exports.OPERATION_TYPE_DESCRIPTIONS = void 0;
|
|
13
|
+
exports.deriveRiskLevel = deriveRiskLevel;
|
|
14
|
+
exports.buildYoloProgressPayload = buildYoloProgressPayload;
|
|
15
|
+
// ============================================
|
|
16
|
+
// Operation Type Descriptions (REQ-HUB-002 toolContext)
|
|
17
|
+
// ============================================
|
|
18
|
+
/** OperationType → 可讀描述映射(供 toolContext.description) */
|
|
19
|
+
exports.OPERATION_TYPE_DESCRIPTIONS = {
|
|
20
|
+
shell_execute: 'Execute shell command',
|
|
21
|
+
file_write: 'Write/edit file',
|
|
22
|
+
file_read: 'Read file',
|
|
23
|
+
network_read: 'Network request',
|
|
24
|
+
sensitive_action: 'Sensitive operation',
|
|
25
|
+
unknown: 'Unknown operation',
|
|
26
|
+
};
|
|
27
|
+
// ============================================
|
|
28
|
+
// Critical Content Patterns
|
|
29
|
+
// ============================================
|
|
30
|
+
/**
|
|
31
|
+
* Content patterns that indicate critical risk level.
|
|
32
|
+
* These override the policy-based risk level when detected.
|
|
33
|
+
*/
|
|
34
|
+
exports.CRITICAL_PATTERNS = [
|
|
35
|
+
{ test: /\brm\s+-[a-z]*r[a-z]*f\s+\//i, label: 'rm -rf /' },
|
|
36
|
+
{ test: /\bDROP\s+(?:DATABASE|TABLE|SCHEMA)\b/i, label: 'DROP DATABASE/TABLE' },
|
|
37
|
+
{ test: /\bTRUNCATE\s+TABLE\b/i, label: 'TRUNCATE TABLE' },
|
|
38
|
+
{
|
|
39
|
+
test: /(?:^|\s|\/)\.env(?!\.(?:example|sample|template)\b)(?:\.\w+)?\b/,
|
|
40
|
+
label: '.env file access',
|
|
41
|
+
},
|
|
42
|
+
{ test: /\b(?:id_rsa|id_ed25519|\.pem)\b/, label: 'private key access' },
|
|
43
|
+
{ test: /\bgit\s+push\s+.*--force\b/i, label: 'git force push' },
|
|
44
|
+
{ test: /\bformat\s+[A-Za-z]:\b/i, label: 'disk format' },
|
|
45
|
+
{ test: /\bmkfs\b/i, label: 'filesystem create' },
|
|
46
|
+
];
|
|
47
|
+
// ============================================
|
|
48
|
+
// Risk Level Derivation
|
|
49
|
+
// ============================================
|
|
50
|
+
/**
|
|
51
|
+
* Recursively collect all string values from a nested structure.
|
|
52
|
+
* Avoids JSON.stringify to prevent JSON syntax characters interfering with regex matching.
|
|
53
|
+
*/
|
|
54
|
+
function collectStrings(value, out) {
|
|
55
|
+
if (typeof value === 'string') {
|
|
56
|
+
out.push(value);
|
|
57
|
+
}
|
|
58
|
+
else if (Array.isArray(value)) {
|
|
59
|
+
for (const item of value) {
|
|
60
|
+
collectStrings(item, out);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else if (value !== null && typeof value === 'object') {
|
|
64
|
+
for (const key of Object.keys(value)) {
|
|
65
|
+
collectStrings(value[key], out);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Build a single string from tool input for content-based risk scanning.
|
|
71
|
+
*/
|
|
72
|
+
function buildContentString(toolName, toolInput) {
|
|
73
|
+
const parts = [toolName];
|
|
74
|
+
collectStrings(toolInput, parts);
|
|
75
|
+
return parts.join(' ');
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 推導風險等級
|
|
79
|
+
*
|
|
80
|
+
* 1. 先掃描 content 是否匹配 CRITICAL_PATTERNS(critical 覆蓋所有 policy 判斷)
|
|
81
|
+
* 2. 再依 PolicyEngine finalAction 推導:ALLOW → low, ASK → medium, WARN → high
|
|
82
|
+
*
|
|
83
|
+
* @param finalAction - PolicyEngine 評估結果
|
|
84
|
+
* @param toolName - 被審核的工具名稱
|
|
85
|
+
* @param toolInput - 工具參數
|
|
86
|
+
*/
|
|
87
|
+
function deriveRiskLevel(finalAction, toolName, toolInput) {
|
|
88
|
+
// Check for critical content patterns first
|
|
89
|
+
const contentToScan = buildContentString(toolName, toolInput);
|
|
90
|
+
for (const { test } of exports.CRITICAL_PATTERNS) {
|
|
91
|
+
if (test.test(contentToScan)) {
|
|
92
|
+
return 'critical';
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Fall back to policy-based risk level
|
|
96
|
+
switch (finalAction) {
|
|
97
|
+
case 'ALLOW':
|
|
98
|
+
return 'low';
|
|
99
|
+
case 'ASK':
|
|
100
|
+
return 'medium';
|
|
101
|
+
case 'WARN':
|
|
102
|
+
return 'high';
|
|
103
|
+
default:
|
|
104
|
+
return 'medium';
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// ============================================
|
|
108
|
+
// YOLO Observe Mode Helpers
|
|
109
|
+
// ============================================
|
|
110
|
+
/**
|
|
111
|
+
* 建構 YOLO 觀測模式的 progress_update payload
|
|
112
|
+
* 供 tools.ts(handleCheck)和 watcher.ts(handlePendingFile)共用
|
|
113
|
+
*/
|
|
114
|
+
function buildYoloProgressPayload(params) {
|
|
115
|
+
return {
|
|
116
|
+
agentId: params.agentId,
|
|
117
|
+
sessionId: params.sessionId,
|
|
118
|
+
message: `🔍 [YOLO] ${params.toolName} auto-approved (${params.riskLevel})`,
|
|
119
|
+
timestamp: params.timestamp,
|
|
120
|
+
messageType: 'yolo_observation',
|
|
121
|
+
toolName: params.toolName,
|
|
122
|
+
riskLevel: params.riskLevel,
|
|
123
|
+
decision: 'auto_approved',
|
|
124
|
+
filePaths: params.filePaths,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=risk-level.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"risk-level.js","sourceRoot":"","sources":["../../src/mcp/risk-level.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const HoppingCheckInputSchema: z.ZodObject<{
|
|
3
|
+
toolName: z.ZodString;
|
|
4
|
+
toolInput: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
5
|
+
sessionId: z.ZodOptional<z.ZodString>;
|
|
6
|
+
cwd: z.ZodOptional<z.ZodString>;
|
|
7
|
+
context: z.ZodOptional<z.ZodObject<{
|
|
8
|
+
recentFiles: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
9
|
+
branch: z.ZodOptional<z.ZodString>;
|
|
10
|
+
project: z.ZodOptional<z.ZodString>;
|
|
11
|
+
taskDescription: z.ZodOptional<z.ZodString>;
|
|
12
|
+
reasoning: z.ZodOptional<z.ZodString>;
|
|
13
|
+
userPrompt: z.ZodOptional<z.ZodString>;
|
|
14
|
+
}, z.core.$strip>>;
|
|
15
|
+
}, z.core.$strip>;
|
|
16
|
+
export declare const HoppingReportInputSchema: z.ZodObject<{
|
|
17
|
+
toolName: z.ZodString;
|
|
18
|
+
toolParams: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
19
|
+
result: z.ZodOptional<z.ZodString>;
|
|
20
|
+
duration: z.ZodOptional<z.ZodNumber>;
|
|
21
|
+
success: z.ZodOptional<z.ZodBoolean>;
|
|
22
|
+
filePaths: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
23
|
+
sessionId: z.ZodOptional<z.ZodString>;
|
|
24
|
+
agentType: z.ZodOptional<z.ZodString>;
|
|
25
|
+
context: z.ZodOptional<z.ZodObject<{
|
|
26
|
+
branch: z.ZodOptional<z.ZodString>;
|
|
27
|
+
project: z.ZodOptional<z.ZodString>;
|
|
28
|
+
cwd: z.ZodOptional<z.ZodString>;
|
|
29
|
+
taskCompleted: z.ZodOptional<z.ZodBoolean>;
|
|
30
|
+
}, z.core.$strip>>;
|
|
31
|
+
}, z.core.$strip>;
|
|
32
|
+
export declare const HoppingStatusInputSchema: z.ZodObject<{
|
|
33
|
+
query: z.ZodOptional<z.ZodEnum<{
|
|
34
|
+
pending: "pending";
|
|
35
|
+
sessions: "sessions";
|
|
36
|
+
stats: "stats";
|
|
37
|
+
all: "all";
|
|
38
|
+
}>>;
|
|
39
|
+
agentId: z.ZodOptional<z.ZodString>;
|
|
40
|
+
}, z.core.$strip>;
|
|
41
|
+
export declare const HoppingPairInputSchema: z.ZodObject<{
|
|
42
|
+
pairingCode: z.ZodString;
|
|
43
|
+
cloudUrl: z.ZodOptional<z.ZodString>;
|
|
44
|
+
}, z.core.$strip>;
|
|
45
|
+
export declare const HoppingRespondInputSchema: z.ZodObject<{
|
|
46
|
+
approvalId: z.ZodString;
|
|
47
|
+
decision: z.ZodEnum<{
|
|
48
|
+
approved: "approved";
|
|
49
|
+
denied: "denied";
|
|
50
|
+
}>;
|
|
51
|
+
reason: z.ZodOptional<z.ZodString>;
|
|
52
|
+
}, z.core.$strip>;
|
|
53
|
+
export declare const HoppingAskInputSchema: z.ZodObject<{
|
|
54
|
+
question: z.ZodString;
|
|
55
|
+
responseType: z.ZodEnum<{
|
|
56
|
+
freetext: "freetext";
|
|
57
|
+
choice: "choice";
|
|
58
|
+
}>;
|
|
59
|
+
options: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
60
|
+
id: z.ZodString;
|
|
61
|
+
label: z.ZodString;
|
|
62
|
+
description: z.ZodOptional<z.ZodString>;
|
|
63
|
+
isOther: z.ZodOptional<z.ZodBoolean>;
|
|
64
|
+
}, z.core.$strip>>>;
|
|
65
|
+
placeholder: z.ZodOptional<z.ZodString>;
|
|
66
|
+
context: z.ZodOptional<z.ZodObject<{
|
|
67
|
+
taskDescription: z.ZodOptional<z.ZodString>;
|
|
68
|
+
reasoning: z.ZodOptional<z.ZodString>;
|
|
69
|
+
}, z.core.$strip>>;
|
|
70
|
+
}, z.core.$strip>;
|
|
71
|
+
export declare const HoppingModeInputSchema: z.ZodObject<{
|
|
72
|
+
mode: z.ZodEnum<{
|
|
73
|
+
local: "local";
|
|
74
|
+
away: "away";
|
|
75
|
+
}>;
|
|
76
|
+
}, z.core.$strip>;
|
|
77
|
+
/** Backend 配對 API 回傳的 runtime 驗證 schema */
|
|
78
|
+
export declare const PairApiResponseSchema: z.ZodObject<{
|
|
79
|
+
agentId: z.ZodString;
|
|
80
|
+
name: z.ZodString;
|
|
81
|
+
token: z.ZodString;
|
|
82
|
+
}, z.core.$strip>;
|
|
83
|
+
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/mcp/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;iBAelC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;iBAiBnC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;iBAGnC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;iBAGjC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;iBAIpC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;iBAoBhC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;iBAEjC,CAAC;AAEH,2CAA2C;AAC3C,eAAO,MAAM,qBAAqB;;;;iBAIhC,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PairApiResponseSchema = exports.HoppingModeInputSchema = exports.HoppingAskInputSchema = exports.HoppingRespondInputSchema = exports.HoppingPairInputSchema = exports.HoppingStatusInputSchema = exports.HoppingReportInputSchema = exports.HoppingCheckInputSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
// ============================================
|
|
6
|
+
// Zod schemas for MCP tool input validation
|
|
7
|
+
// Mirrors shared/types.ts interfaces
|
|
8
|
+
// ============================================
|
|
9
|
+
exports.HoppingCheckInputSchema = zod_1.z.object({
|
|
10
|
+
toolName: zod_1.z.string(),
|
|
11
|
+
toolInput: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()),
|
|
12
|
+
sessionId: zod_1.z.string().optional(),
|
|
13
|
+
cwd: zod_1.z.string().optional(),
|
|
14
|
+
context: zod_1.z
|
|
15
|
+
.object({
|
|
16
|
+
recentFiles: zod_1.z.array(zod_1.z.string()).optional(),
|
|
17
|
+
branch: zod_1.z.string().optional(),
|
|
18
|
+
project: zod_1.z.string().optional(),
|
|
19
|
+
taskDescription: zod_1.z.string().optional(),
|
|
20
|
+
reasoning: zod_1.z.string().optional(),
|
|
21
|
+
userPrompt: zod_1.z.string().optional(),
|
|
22
|
+
})
|
|
23
|
+
.optional(),
|
|
24
|
+
});
|
|
25
|
+
exports.HoppingReportInputSchema = zod_1.z.object({
|
|
26
|
+
toolName: zod_1.z.string(),
|
|
27
|
+
toolParams: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()).optional(),
|
|
28
|
+
result: zod_1.z.string().optional(),
|
|
29
|
+
duration: zod_1.z.number().optional(),
|
|
30
|
+
success: zod_1.z.boolean().optional(),
|
|
31
|
+
filePaths: zod_1.z.array(zod_1.z.string()).optional(),
|
|
32
|
+
sessionId: zod_1.z.string().optional(),
|
|
33
|
+
agentType: zod_1.z.string().optional(),
|
|
34
|
+
context: zod_1.z
|
|
35
|
+
.object({
|
|
36
|
+
branch: zod_1.z.string().optional(),
|
|
37
|
+
project: zod_1.z.string().optional(),
|
|
38
|
+
cwd: zod_1.z.string().optional(),
|
|
39
|
+
taskCompleted: zod_1.z.boolean().optional(),
|
|
40
|
+
})
|
|
41
|
+
.optional(),
|
|
42
|
+
});
|
|
43
|
+
exports.HoppingStatusInputSchema = zod_1.z.object({
|
|
44
|
+
query: zod_1.z.enum(['sessions', 'pending', 'stats', 'all']).optional(),
|
|
45
|
+
agentId: zod_1.z.string().optional(),
|
|
46
|
+
});
|
|
47
|
+
exports.HoppingPairInputSchema = zod_1.z.object({
|
|
48
|
+
pairingCode: zod_1.z.string().min(1),
|
|
49
|
+
cloudUrl: zod_1.z.string().url().optional(),
|
|
50
|
+
});
|
|
51
|
+
exports.HoppingRespondInputSchema = zod_1.z.object({
|
|
52
|
+
approvalId: zod_1.z.string().min(1),
|
|
53
|
+
decision: zod_1.z.enum(['approved', 'denied']),
|
|
54
|
+
reason: zod_1.z.string().optional(),
|
|
55
|
+
});
|
|
56
|
+
exports.HoppingAskInputSchema = zod_1.z.object({
|
|
57
|
+
question: zod_1.z.string().min(1),
|
|
58
|
+
responseType: zod_1.z.enum(['choice', 'freetext']),
|
|
59
|
+
options: zod_1.z
|
|
60
|
+
.array(zod_1.z.object({
|
|
61
|
+
id: zod_1.z.string(),
|
|
62
|
+
label: zod_1.z.string(),
|
|
63
|
+
description: zod_1.z.string().optional(),
|
|
64
|
+
isOther: zod_1.z.boolean().optional(),
|
|
65
|
+
}))
|
|
66
|
+
.optional(),
|
|
67
|
+
placeholder: zod_1.z.string().optional(),
|
|
68
|
+
context: zod_1.z
|
|
69
|
+
.object({
|
|
70
|
+
taskDescription: zod_1.z.string().optional(),
|
|
71
|
+
reasoning: zod_1.z.string().optional(),
|
|
72
|
+
})
|
|
73
|
+
.optional(),
|
|
74
|
+
});
|
|
75
|
+
exports.HoppingModeInputSchema = zod_1.z.object({
|
|
76
|
+
mode: zod_1.z.enum(['local', 'away']),
|
|
77
|
+
});
|
|
78
|
+
/** Backend 配對 API 回傳的 runtime 驗證 schema */
|
|
79
|
+
exports.PairApiResponseSchema = zod_1.z.object({
|
|
80
|
+
agentId: zod_1.z.string().min(1),
|
|
81
|
+
name: zod_1.z.string(),
|
|
82
|
+
token: zod_1.z.string().min(1),
|
|
83
|
+
});
|
|
84
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/mcp/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate a human-readable summary from toolName + toolInput.
|
|
3
|
+
*
|
|
4
|
+
* Design principles:
|
|
5
|
+
* - Max 200 chars (fits push notifications)
|
|
6
|
+
* - English (technical content is inherently English)
|
|
7
|
+
* - No sensitive content leakage (passwords, tokens, secrets)
|
|
8
|
+
* - Graceful fallback for unknown tools
|
|
9
|
+
*/
|
|
10
|
+
export declare function generateSummary(toolName: string, toolInput: Record<string, unknown>): string;
|
|
11
|
+
//# sourceMappingURL=summary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../src/mcp/summary.ts"],"names":[],"mappings":"AAQA;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CA+B5F"}
|