openhorse 0.1.10 → 0.1.12
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/dist/cli.js +16 -20
- package/dist/cli.js.map +1 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +3 -2
- package/dist/commands/index.js.map +1 -1
- package/dist/core/agent.d.ts +25 -7
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +6 -3
- package/dist/core/agent.js.map +1 -1
- package/dist/core/brain.d.ts +13 -4
- package/dist/core/brain.d.ts.map +1 -1
- package/dist/core/brain.js +7 -4
- package/dist/core/brain.js.map +1 -1
- package/dist/core/security-warning.d.ts +59 -0
- package/dist/core/security-warning.d.ts.map +1 -0
- package/dist/core/security-warning.js +163 -0
- package/dist/core/security-warning.js.map +1 -0
- package/dist/core/state.d.ts +94 -0
- package/dist/core/state.d.ts.map +1 -0
- package/dist/core/state.js +178 -0
- package/dist/core/state.js.map +1 -0
- package/dist/framework/query.d.ts +3 -2
- package/dist/framework/query.d.ts.map +1 -1
- package/dist/framework/query.js +20 -2
- package/dist/framework/query.js.map +1 -1
- package/dist/framework/tool.d.ts +3 -1
- package/dist/framework/tool.d.ts.map +1 -1
- package/dist/framework/tool.js.map +1 -1
- package/dist/harness/harness.d.ts.map +1 -1
- package/dist/harness/harness.js +29 -17
- package/dist/harness/harness.js.map +1 -1
- package/dist/harness/safety.d.ts.map +1 -1
- package/dist/harness/safety.js +8 -0
- package/dist/harness/safety.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +18 -14
- package/dist/init.js.map +1 -1
- package/dist/memory/embeddings.d.ts +2 -2
- package/dist/memory/embeddings.d.ts.map +1 -1
- package/dist/memory/embeddings.js +20 -6
- package/dist/memory/embeddings.js.map +1 -1
- package/dist/memory/entrypoint.d.ts +55 -0
- package/dist/memory/entrypoint.d.ts.map +1 -0
- package/dist/memory/entrypoint.js +151 -0
- package/dist/memory/entrypoint.js.map +1 -0
- package/dist/memory/relevant-finder.d.ts +54 -0
- package/dist/memory/relevant-finder.d.ts.map +1 -0
- package/dist/memory/relevant-finder.js +157 -0
- package/dist/memory/relevant-finder.js.map +1 -0
- package/dist/memory/storage.d.ts +5 -0
- package/dist/memory/storage.d.ts.map +1 -1
- package/dist/memory/storage.js +33 -3
- package/dist/memory/storage.js.map +1 -1
- package/dist/memory/team-paths.d.ts +63 -0
- package/dist/memory/team-paths.d.ts.map +1 -0
- package/dist/memory/team-paths.js +151 -0
- package/dist/memory/team-paths.js.map +1 -0
- package/dist/memory/vector-store.d.ts +2 -2
- package/dist/memory/vector-store.d.ts.map +1 -1
- package/dist/memory/vector-store.js +39 -12
- package/dist/memory/vector-store.js.map +1 -1
- package/dist/sdk/index.d.ts +10 -0
- package/dist/sdk/index.d.ts.map +1 -0
- package/dist/sdk/index.js +23 -0
- package/dist/sdk/index.js.map +1 -0
- package/dist/sdk/init.d.ts +24 -0
- package/dist/sdk/init.d.ts.map +1 -0
- package/dist/sdk/init.js +48 -0
- package/dist/sdk/init.js.map +1 -0
- package/dist/sdk/query.d.ts +19 -0
- package/dist/sdk/query.d.ts.map +1 -0
- package/dist/sdk/query.js +43 -0
- package/dist/sdk/query.js.map +1 -0
- package/dist/sdk/sessions.d.ts +19 -0
- package/dist/sdk/sessions.d.ts.map +1 -0
- package/dist/sdk/sessions.js +57 -0
- package/dist/sdk/sessions.js.map +1 -0
- package/dist/sdk/types.d.ts +47 -0
- package/dist/sdk/types.d.ts.map +1 -0
- package/dist/sdk/types.js +8 -0
- package/dist/sdk/types.js.map +1 -0
- package/dist/services/mcp/transports.d.ts.map +1 -1
- package/dist/services/mcp/transports.js +14 -2
- package/dist/services/mcp/transports.js.map +1 -1
- package/dist/tools/_validate.d.ts +11 -0
- package/dist/tools/_validate.d.ts.map +1 -0
- package/dist/tools/_validate.js +55 -0
- package/dist/tools/_validate.js.map +1 -0
- package/dist/tools/git.d.ts +1 -0
- package/dist/tools/git.d.ts.map +1 -1
- package/dist/tools/git.js +13 -1
- package/dist/tools/git.js.map +1 -1
- package/dist/tools/index.d.ts +2 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +46 -14
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/web.d.ts +3 -0
- package/dist/tools/web.d.ts.map +1 -1
- package/dist/tools/web.js +199 -58
- package/dist/tools/web.js.map +1 -1
- package/dist/ui/command-panel.d.ts +4 -0
- package/dist/ui/command-panel.d.ts.map +1 -1
- package/dist/ui/command-panel.js +57 -17
- package/dist/ui/command-panel.js.map +1 -1
- package/package.json +1 -7
package/dist/core/brain.js
CHANGED
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
* x-agent - 决策引擎
|
|
4
4
|
*
|
|
5
5
|
* 负责 Agent 的任务分配、优先级排序和调度
|
|
6
|
+
*
|
|
7
|
+
* Issue #32 #2.4: 类型安全重构
|
|
6
8
|
*/
|
|
7
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
10
|
exports.Brain = void 0;
|
|
@@ -23,10 +25,11 @@ class Brain {
|
|
|
23
25
|
}
|
|
24
26
|
/**
|
|
25
27
|
* 提交任务
|
|
28
|
+
* Issue #32 修复:返回 Promise,正确 await dispatch
|
|
26
29
|
*/
|
|
27
|
-
submitTask(task) {
|
|
30
|
+
async submitTask(task) {
|
|
28
31
|
this.taskQueue.push(task);
|
|
29
|
-
this.dispatch();
|
|
32
|
+
await this.dispatch();
|
|
30
33
|
}
|
|
31
34
|
/**
|
|
32
35
|
* 任务分发
|
|
@@ -78,13 +81,13 @@ class Brain {
|
|
|
78
81
|
return agents[0] || null;
|
|
79
82
|
}
|
|
80
83
|
/**
|
|
81
|
-
* 获取状态
|
|
84
|
+
* 获取状态 (Issue #32 #2.4: 显式类型)
|
|
82
85
|
*/
|
|
83
86
|
getStatus() {
|
|
84
87
|
return {
|
|
85
88
|
agents: Array.from(this.agents.values()).map(a => a.getStatus()),
|
|
86
89
|
pendingTasks: this.taskQueue.length,
|
|
87
|
-
strategy: this.config.strategy,
|
|
90
|
+
strategy: this.config.strategy || 'priority',
|
|
88
91
|
};
|
|
89
92
|
}
|
|
90
93
|
}
|
package/dist/core/brain.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brain.js","sourceRoot":"","sources":["../../src/core/brain.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"brain.js","sourceRoot":"","sources":["../../src/core/brain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* openhorse - Token 安全警告
|
|
3
|
+
*
|
|
4
|
+
* v0.1.11: 检测对话中 Token/密钥暴露,提醒用户安全风险
|
|
5
|
+
*
|
|
6
|
+
* 检测类型:
|
|
7
|
+
* - GitHub Token (ghp_)
|
|
8
|
+
* - OpenAI API Key (sk-)
|
|
9
|
+
* - AWS Access Key (AKIA)
|
|
10
|
+
* - Generic secret pattern
|
|
11
|
+
*/
|
|
12
|
+
export declare const TOKEN_PATTERNS: {
|
|
13
|
+
name: string;
|
|
14
|
+
pattern: RegExp;
|
|
15
|
+
description: string;
|
|
16
|
+
severity: string;
|
|
17
|
+
}[];
|
|
18
|
+
export type TokenSeverity = 'high' | 'medium' | 'low';
|
|
19
|
+
export interface DetectedToken {
|
|
20
|
+
name: string;
|
|
21
|
+
pattern: string;
|
|
22
|
+
match: string;
|
|
23
|
+
severity: TokenSeverity;
|
|
24
|
+
description: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 检测消息中的 Token/密钥
|
|
28
|
+
* @param content - 要检测的内容
|
|
29
|
+
* @returns 检测到的 Token 列表
|
|
30
|
+
*/
|
|
31
|
+
export declare function detectSecretsInMessage(content: string): DetectedToken[];
|
|
32
|
+
/**
|
|
33
|
+
* 检查是否包含高风险 Token
|
|
34
|
+
*/
|
|
35
|
+
export declare function hasHighRiskSecret(content: string): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* 生成安全警告消息
|
|
38
|
+
*/
|
|
39
|
+
export declare function generateSecurityWarning(detected: DetectedToken[]): string;
|
|
40
|
+
/**
|
|
41
|
+
* 对消息内容进行安全检查并返回警告(如果有)
|
|
42
|
+
*/
|
|
43
|
+
export declare function checkMessageSecurity(content: string): {
|
|
44
|
+
safe: boolean;
|
|
45
|
+
warning?: string;
|
|
46
|
+
};
|
|
47
|
+
export declare const SECURITY_WARNING_MODULE: {
|
|
48
|
+
detectSecretsInMessage: typeof detectSecretsInMessage;
|
|
49
|
+
hasHighRiskSecret: typeof hasHighRiskSecret;
|
|
50
|
+
generateSecurityWarning: typeof generateSecurityWarning;
|
|
51
|
+
checkMessageSecurity: typeof checkMessageSecurity;
|
|
52
|
+
TOKEN_PATTERNS: {
|
|
53
|
+
name: string;
|
|
54
|
+
pattern: RegExp;
|
|
55
|
+
description: string;
|
|
56
|
+
severity: string;
|
|
57
|
+
}[];
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=security-warning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-warning.d.ts","sourceRoot":"","sources":["../../src/core/security-warning.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,eAAO,MAAM,cAAc;;;;;GAiD1B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEtD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,aAAa,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CAmBvE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAG1D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,CAoCzE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAWzF;AAMD,eAAO,MAAM,uBAAuB;;;;;;;;;;;CAMnC,CAAC"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* openhorse - Token 安全警告
|
|
4
|
+
*
|
|
5
|
+
* v0.1.11: 检测对话中 Token/密钥暴露,提醒用户安全风险
|
|
6
|
+
*
|
|
7
|
+
* 检测类型:
|
|
8
|
+
* - GitHub Token (ghp_)
|
|
9
|
+
* - OpenAI API Key (sk-)
|
|
10
|
+
* - AWS Access Key (AKIA)
|
|
11
|
+
* - Generic secret pattern
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.SECURITY_WARNING_MODULE = exports.TOKEN_PATTERNS = void 0;
|
|
15
|
+
exports.detectSecretsInMessage = detectSecretsInMessage;
|
|
16
|
+
exports.hasHighRiskSecret = hasHighRiskSecret;
|
|
17
|
+
exports.generateSecurityWarning = generateSecurityWarning;
|
|
18
|
+
exports.checkMessageSecurity = checkMessageSecurity;
|
|
19
|
+
// ============================================================================
|
|
20
|
+
// Token Pattern Definitions
|
|
21
|
+
// ============================================================================
|
|
22
|
+
exports.TOKEN_PATTERNS = [
|
|
23
|
+
{
|
|
24
|
+
name: 'GitHub Personal Access Token',
|
|
25
|
+
pattern: /ghp_[A-Za-z0-9]{36}/,
|
|
26
|
+
description: 'GitHub personal access token',
|
|
27
|
+
severity: 'high',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: 'GitHub OAuth Access Token',
|
|
31
|
+
pattern: /gho_[A-Za-z0-9]{36}/,
|
|
32
|
+
description: 'GitHub OAuth access token',
|
|
33
|
+
severity: 'high',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: 'GitHub App Token',
|
|
37
|
+
pattern: /ghu_[A-Za-z0-9]{36}/,
|
|
38
|
+
description: 'GitHub app user-to-server token',
|
|
39
|
+
severity: 'high',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: 'OpenAI API Key',
|
|
43
|
+
pattern: /sk-[A-Za-z0-9]{48}/,
|
|
44
|
+
description: 'OpenAI API secret key',
|
|
45
|
+
severity: 'high',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: 'OpenAI Project Key',
|
|
49
|
+
pattern: /sk-proj-[A-Za-z0-9]{48}/,
|
|
50
|
+
description: 'OpenAI project API key',
|
|
51
|
+
severity: 'high',
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: 'AWS Access Key ID',
|
|
55
|
+
pattern: /AKIA[A-Z0-9]{16}/,
|
|
56
|
+
description: 'AWS access key ID',
|
|
57
|
+
severity: 'high',
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'Anthropic API Key',
|
|
61
|
+
pattern: /sk-ant-[A-Za-z0-9-_]{80}/,
|
|
62
|
+
description: 'Anthropic API key',
|
|
63
|
+
severity: 'high',
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
name: 'Generic Secret Pattern',
|
|
67
|
+
pattern: /[A-Za-z0-9]{32}-[A-Za-z0-9]{32}/,
|
|
68
|
+
description: 'Generic API secret format',
|
|
69
|
+
severity: 'medium',
|
|
70
|
+
},
|
|
71
|
+
];
|
|
72
|
+
// ============================================================================
|
|
73
|
+
// Detection Functions
|
|
74
|
+
// ============================================================================
|
|
75
|
+
/**
|
|
76
|
+
* 检测消息中的 Token/密钥
|
|
77
|
+
* @param content - 要检测的内容
|
|
78
|
+
* @returns 检测到的 Token 列表
|
|
79
|
+
*/
|
|
80
|
+
function detectSecretsInMessage(content) {
|
|
81
|
+
const detected = [];
|
|
82
|
+
for (const tokenDef of exports.TOKEN_PATTERNS) {
|
|
83
|
+
const matches = content.match(tokenDef.pattern);
|
|
84
|
+
if (matches) {
|
|
85
|
+
for (const match of matches) {
|
|
86
|
+
detected.push({
|
|
87
|
+
name: tokenDef.name,
|
|
88
|
+
pattern: tokenDef.pattern.source,
|
|
89
|
+
match: match,
|
|
90
|
+
severity: tokenDef.severity,
|
|
91
|
+
description: tokenDef.description,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return detected;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* 检查是否包含高风险 Token
|
|
100
|
+
*/
|
|
101
|
+
function hasHighRiskSecret(content) {
|
|
102
|
+
const detected = detectSecretsInMessage(content);
|
|
103
|
+
return detected.some(t => t.severity === 'high');
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* 生成安全警告消息
|
|
107
|
+
*/
|
|
108
|
+
function generateSecurityWarning(detected) {
|
|
109
|
+
if (detected.length === 0)
|
|
110
|
+
return '';
|
|
111
|
+
const lines = [];
|
|
112
|
+
lines.push('⚠️ Security Alert: Token/Secret detected in message');
|
|
113
|
+
lines.push('');
|
|
114
|
+
const highRisk = detected.filter(t => t.severity === 'high');
|
|
115
|
+
const mediumRisk = detected.filter(t => t.severity === 'medium');
|
|
116
|
+
if (highRisk.length > 0) {
|
|
117
|
+
lines.push('HIGH RISK tokens detected:');
|
|
118
|
+
for (const t of highRisk) {
|
|
119
|
+
// Mask the actual token value
|
|
120
|
+
const masked = t.match.slice(0, 8) + '...' + t.match.slice(-4);
|
|
121
|
+
lines.push(` - ${t.name}: ${masked}`);
|
|
122
|
+
}
|
|
123
|
+
lines.push('');
|
|
124
|
+
lines.push('These tokens should be revoked immediately after use.');
|
|
125
|
+
}
|
|
126
|
+
if (mediumRisk.length > 0) {
|
|
127
|
+
lines.push('POTENTIAL secrets detected:');
|
|
128
|
+
for (const t of mediumRisk) {
|
|
129
|
+
const masked = t.match.slice(0, 8) + '...' + t.match.slice(-4);
|
|
130
|
+
lines.push(` - ${t.name}: ${masked}`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
lines.push('');
|
|
134
|
+
lines.push('Recommendation:');
|
|
135
|
+
lines.push(' 1. Never share tokens/secrets in chat');
|
|
136
|
+
lines.push(' 2. Use environment variables or secure storage');
|
|
137
|
+
lines.push(' 3. Rotate compromised tokens immediately');
|
|
138
|
+
return lines.join('\n');
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* 对消息内容进行安全检查并返回警告(如果有)
|
|
142
|
+
*/
|
|
143
|
+
function checkMessageSecurity(content) {
|
|
144
|
+
const detected = detectSecretsInMessage(content);
|
|
145
|
+
if (detected.length === 0) {
|
|
146
|
+
return { safe: true };
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
safe: false,
|
|
150
|
+
warning: generateSecurityWarning(detected),
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
// ============================================================================
|
|
154
|
+
// Export
|
|
155
|
+
// ============================================================================
|
|
156
|
+
exports.SECURITY_WARNING_MODULE = {
|
|
157
|
+
detectSecretsInMessage,
|
|
158
|
+
hasHighRiskSecret,
|
|
159
|
+
generateSecurityWarning,
|
|
160
|
+
checkMessageSecurity,
|
|
161
|
+
TOKEN_PATTERNS: exports.TOKEN_PATTERNS,
|
|
162
|
+
};
|
|
163
|
+
//# sourceMappingURL=security-warning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-warning.js","sourceRoot":"","sources":["../../src/core/security-warning.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* openhorse - Bootstrap State 管理
|
|
3
|
+
*
|
|
4
|
+
* v0.1.11: 全局状态字段规范化
|
|
5
|
+
*
|
|
6
|
+
* 提供项目标识、成本追踪、会话状态、缓存等状态管理
|
|
7
|
+
*/
|
|
8
|
+
export interface ModelUsage {
|
|
9
|
+
tokens: number;
|
|
10
|
+
cost: number;
|
|
11
|
+
}
|
|
12
|
+
export interface GlobalState {
|
|
13
|
+
projectRoot: string;
|
|
14
|
+
sessionId: string;
|
|
15
|
+
totalCostUSD: number;
|
|
16
|
+
modelUsage: Map<string, ModelUsage>;
|
|
17
|
+
sessionBypassPermissionsMode: boolean;
|
|
18
|
+
hasExitedPlanMode: boolean;
|
|
19
|
+
cachedMemoryContent: string | null;
|
|
20
|
+
initializedAt: number;
|
|
21
|
+
lastActivityAt: number;
|
|
22
|
+
toolCallCount: number;
|
|
23
|
+
errorCount: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* 初始化全局状态
|
|
27
|
+
* @param projectRoot - 项目根目录
|
|
28
|
+
* @param sessionId - 会话 ID
|
|
29
|
+
*/
|
|
30
|
+
export declare function initGlobalState(projectRoot: string, sessionId?: string): GlobalState;
|
|
31
|
+
/**
|
|
32
|
+
* 获取全局状态
|
|
33
|
+
*/
|
|
34
|
+
export declare function getGlobalState(): GlobalState | null;
|
|
35
|
+
/**
|
|
36
|
+
* 确保全局状态已初始化
|
|
37
|
+
*/
|
|
38
|
+
export declare function ensureGlobalState(): GlobalState;
|
|
39
|
+
/**
|
|
40
|
+
* 重置全局状态
|
|
41
|
+
*/
|
|
42
|
+
export declare function resetGlobalState(): void;
|
|
43
|
+
/**
|
|
44
|
+
* 更新最后活动时间
|
|
45
|
+
*/
|
|
46
|
+
export declare function updateActivity(): void;
|
|
47
|
+
/**
|
|
48
|
+
* 记录工具调用
|
|
49
|
+
*/
|
|
50
|
+
export declare function recordToolCall(): void;
|
|
51
|
+
/**
|
|
52
|
+
* 记录错误
|
|
53
|
+
*/
|
|
54
|
+
export declare function recordError(): void;
|
|
55
|
+
/**
|
|
56
|
+
* 添加成本
|
|
57
|
+
*/
|
|
58
|
+
export declare function addCost(model: string, tokens: number, costUSD: number): void;
|
|
59
|
+
/**
|
|
60
|
+
* 设置内存缓存
|
|
61
|
+
*/
|
|
62
|
+
export declare function setCachedMemory(content: string): void;
|
|
63
|
+
/**
|
|
64
|
+
* 清除内存缓存
|
|
65
|
+
*/
|
|
66
|
+
export declare function clearCachedMemory(): void;
|
|
67
|
+
/**
|
|
68
|
+
* 设置绕过权限模式
|
|
69
|
+
*/
|
|
70
|
+
export declare function setBypassPermissionsMode(enabled: boolean): void;
|
|
71
|
+
/**
|
|
72
|
+
* 标记已退出计划模式
|
|
73
|
+
*/
|
|
74
|
+
export declare function markExitedPlanMode(): void;
|
|
75
|
+
/**
|
|
76
|
+
* 获取状态摘要
|
|
77
|
+
*/
|
|
78
|
+
export declare function getStateSummary(): string;
|
|
79
|
+
export declare const STATE_MANAGER: {
|
|
80
|
+
initGlobalState: typeof initGlobalState;
|
|
81
|
+
getGlobalState: typeof getGlobalState;
|
|
82
|
+
ensureGlobalState: typeof ensureGlobalState;
|
|
83
|
+
resetGlobalState: typeof resetGlobalState;
|
|
84
|
+
updateActivity: typeof updateActivity;
|
|
85
|
+
recordToolCall: typeof recordToolCall;
|
|
86
|
+
recordError: typeof recordError;
|
|
87
|
+
addCost: typeof addCost;
|
|
88
|
+
setCachedMemory: typeof setCachedMemory;
|
|
89
|
+
clearCachedMemory: typeof clearCachedMemory;
|
|
90
|
+
setBypassPermissionsMode: typeof setBypassPermissionsMode;
|
|
91
|
+
markExitedPlanMode: typeof markExitedPlanMode;
|
|
92
|
+
getStateSummary: typeof getStateSummary;
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAE1B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAGlB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAGpC,4BAA4B,EAAE,OAAO,CAAC;IACtC,iBAAiB,EAAE,OAAO,CAAC;IAG3B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IAGnC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IAGvB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAQD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,WAAW,CAqBpF;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,WAAW,GAAG,IAAI,CAEnD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,WAAW,CAK/C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAMD;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAGrC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAIrC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAGlC;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAU5E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAGrD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAGxC;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAG/D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAGzC;AAYD;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAcxC;AAMD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;CAczB,CAAC"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* openhorse - Bootstrap State 管理
|
|
4
|
+
*
|
|
5
|
+
* v0.1.11: 全局状态字段规范化
|
|
6
|
+
*
|
|
7
|
+
* 提供项目标识、成本追踪、会话状态、缓存等状态管理
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.STATE_MANAGER = void 0;
|
|
11
|
+
exports.initGlobalState = initGlobalState;
|
|
12
|
+
exports.getGlobalState = getGlobalState;
|
|
13
|
+
exports.ensureGlobalState = ensureGlobalState;
|
|
14
|
+
exports.resetGlobalState = resetGlobalState;
|
|
15
|
+
exports.updateActivity = updateActivity;
|
|
16
|
+
exports.recordToolCall = recordToolCall;
|
|
17
|
+
exports.recordError = recordError;
|
|
18
|
+
exports.addCost = addCost;
|
|
19
|
+
exports.setCachedMemory = setCachedMemory;
|
|
20
|
+
exports.clearCachedMemory = clearCachedMemory;
|
|
21
|
+
exports.setBypassPermissionsMode = setBypassPermissionsMode;
|
|
22
|
+
exports.markExitedPlanMode = markExitedPlanMode;
|
|
23
|
+
exports.getStateSummary = getStateSummary;
|
|
24
|
+
// ============================================================================
|
|
25
|
+
// Global State Singleton
|
|
26
|
+
// ============================================================================
|
|
27
|
+
let globalState = null;
|
|
28
|
+
/**
|
|
29
|
+
* 初始化全局状态
|
|
30
|
+
* @param projectRoot - 项目根目录
|
|
31
|
+
* @param sessionId - 会话 ID
|
|
32
|
+
*/
|
|
33
|
+
function initGlobalState(projectRoot, sessionId) {
|
|
34
|
+
globalState = {
|
|
35
|
+
projectRoot,
|
|
36
|
+
sessionId: sessionId || generateSessionId(),
|
|
37
|
+
totalCostUSD: 0,
|
|
38
|
+
modelUsage: new Map(),
|
|
39
|
+
sessionBypassPermissionsMode: false,
|
|
40
|
+
hasExitedPlanMode: false,
|
|
41
|
+
cachedMemoryContent: null,
|
|
42
|
+
initializedAt: Date.now(),
|
|
43
|
+
lastActivityAt: Date.now(),
|
|
44
|
+
toolCallCount: 0,
|
|
45
|
+
errorCount: 0,
|
|
46
|
+
};
|
|
47
|
+
return globalState;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* 获取全局状态
|
|
51
|
+
*/
|
|
52
|
+
function getGlobalState() {
|
|
53
|
+
return globalState;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* 确保全局状态已初始化
|
|
57
|
+
*/
|
|
58
|
+
function ensureGlobalState() {
|
|
59
|
+
if (!globalState) {
|
|
60
|
+
return initGlobalState(process.cwd());
|
|
61
|
+
}
|
|
62
|
+
return globalState;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* 重置全局状态
|
|
66
|
+
*/
|
|
67
|
+
function resetGlobalState() {
|
|
68
|
+
globalState = null;
|
|
69
|
+
}
|
|
70
|
+
// ============================================================================
|
|
71
|
+
// State Updates
|
|
72
|
+
// ============================================================================
|
|
73
|
+
/**
|
|
74
|
+
* 更新最后活动时间
|
|
75
|
+
*/
|
|
76
|
+
function updateActivity() {
|
|
77
|
+
const state = ensureGlobalState();
|
|
78
|
+
state.lastActivityAt = Date.now();
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* 记录工具调用
|
|
82
|
+
*/
|
|
83
|
+
function recordToolCall() {
|
|
84
|
+
const state = ensureGlobalState();
|
|
85
|
+
state.toolCallCount++;
|
|
86
|
+
updateActivity();
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* 记录错误
|
|
90
|
+
*/
|
|
91
|
+
function recordError() {
|
|
92
|
+
const state = ensureGlobalState();
|
|
93
|
+
state.errorCount++;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* 添加成本
|
|
97
|
+
*/
|
|
98
|
+
function addCost(model, tokens, costUSD) {
|
|
99
|
+
const state = ensureGlobalState();
|
|
100
|
+
state.totalCostUSD += costUSD;
|
|
101
|
+
const existing = state.modelUsage.get(model) || { tokens: 0, cost: 0 };
|
|
102
|
+
state.modelUsage.set(model, {
|
|
103
|
+
tokens: existing.tokens + tokens,
|
|
104
|
+
cost: existing.cost + costUSD,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* 设置内存缓存
|
|
109
|
+
*/
|
|
110
|
+
function setCachedMemory(content) {
|
|
111
|
+
const state = ensureGlobalState();
|
|
112
|
+
state.cachedMemoryContent = content;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* 清除内存缓存
|
|
116
|
+
*/
|
|
117
|
+
function clearCachedMemory() {
|
|
118
|
+
const state = ensureGlobalState();
|
|
119
|
+
state.cachedMemoryContent = null;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* 设置绕过权限模式
|
|
123
|
+
*/
|
|
124
|
+
function setBypassPermissionsMode(enabled) {
|
|
125
|
+
const state = ensureGlobalState();
|
|
126
|
+
state.sessionBypassPermissionsMode = enabled;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* 标记已退出计划模式
|
|
130
|
+
*/
|
|
131
|
+
function markExitedPlanMode() {
|
|
132
|
+
const state = ensureGlobalState();
|
|
133
|
+
state.hasExitedPlanMode = true;
|
|
134
|
+
}
|
|
135
|
+
// ============================================================================
|
|
136
|
+
// Helpers
|
|
137
|
+
// ============================================================================
|
|
138
|
+
function generateSessionId() {
|
|
139
|
+
const timestamp = Date.now().toString(36);
|
|
140
|
+
const random = Math.random().toString(36).slice(2, 8);
|
|
141
|
+
return `${timestamp}-${random}`;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* 获取状态摘要
|
|
145
|
+
*/
|
|
146
|
+
function getStateSummary() {
|
|
147
|
+
const state = getGlobalState();
|
|
148
|
+
if (!state)
|
|
149
|
+
return 'State not initialized';
|
|
150
|
+
const lines = [
|
|
151
|
+
`Project: ${state.projectRoot}`,
|
|
152
|
+
`Session: ${state.sessionId}`,
|
|
153
|
+
`Cost: $${state.totalCostUSD.toFixed(4)}`,
|
|
154
|
+
`Tool calls: ${state.toolCallCount}`,
|
|
155
|
+
`Errors: ${state.errorCount}`,
|
|
156
|
+
`Uptime: ${Math.round((Date.now() - state.initializedAt) / 1000)}s`,
|
|
157
|
+
];
|
|
158
|
+
return lines.join('\n');
|
|
159
|
+
}
|
|
160
|
+
// ============================================================================
|
|
161
|
+
// Export
|
|
162
|
+
// ============================================================================
|
|
163
|
+
exports.STATE_MANAGER = {
|
|
164
|
+
initGlobalState,
|
|
165
|
+
getGlobalState,
|
|
166
|
+
ensureGlobalState,
|
|
167
|
+
resetGlobalState,
|
|
168
|
+
updateActivity,
|
|
169
|
+
recordToolCall,
|
|
170
|
+
recordError,
|
|
171
|
+
addCost,
|
|
172
|
+
setCachedMemory,
|
|
173
|
+
clearCachedMemory,
|
|
174
|
+
setBypassPermissionsMode,
|
|
175
|
+
markExitedPlanMode,
|
|
176
|
+
getStateSummary,
|
|
177
|
+
};
|
|
178
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -52,8 +52,9 @@ export interface QueryParams {
|
|
|
52
52
|
messages: Message[];
|
|
53
53
|
/** Available tools */
|
|
54
54
|
tools: OpenHorseTool[];
|
|
55
|
-
/** Tool executor: (name, args) => result string
|
|
56
|
-
|
|
55
|
+
/** Tool executor: (name, args, abortSignal?) => result string
|
|
56
|
+
* Issue #32 #3.2: 支持 abortSignal 透传 */
|
|
57
|
+
toolExecutor: (name: string, args: Record<string, unknown>, abortSignal?: AbortSignal) => Promise<string>;
|
|
57
58
|
/** LLM service instance */
|
|
58
59
|
llm: LLMService;
|
|
59
60
|
/** Maximum turns (default: no limit, relies on safety mechanisms) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/framework/query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAQ,MAAM,iBAAiB,CAAC;AAClF,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAoB,MAAM,QAAQ,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAyB,KAAK,eAAe,EAAuB,MAAM,0BAA0B,CAAC;AAQ5G,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5H;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACzG;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAMrH,MAAM,WAAW,WAAW;IAC1B,yEAAyE;IACzE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,sBAAsB;IACtB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/framework/query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAQ,MAAM,iBAAiB,CAAC;AAClF,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAoB,MAAM,QAAQ,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAyB,KAAK,eAAe,EAAuB,MAAM,0BAA0B,CAAC;AAQ5G,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5H;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACzG;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAMrH,MAAM,WAAW,WAAW;IAC1B,yEAAyE;IACzE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,sBAAsB;IACtB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB;4CACwC;IACxC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1G,2BAA2B;IAC3B,GAAG,EAAE,UAAU,CAAC;IAChB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,2DAA2D;IAC3D,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,yCAAyC;IACzC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,6BAA6B;IAC7B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,uCAAuC;IACvC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,kDAAkD;IAClD,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAMD;;;;;;;;;;;;;;GAcG;AACH,wBAAuB,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,CA4N5E"}
|
package/dist/framework/query.js
CHANGED
|
@@ -117,11 +117,29 @@ async function* query(params) {
|
|
|
117
117
|
});
|
|
118
118
|
}
|
|
119
119
|
else {
|
|
120
|
-
|
|
120
|
+
// Issue #32 #3.2: 透传 abortSignal
|
|
121
|
+
try {
|
|
122
|
+
result = await toolExecutor(tc.function.name, args, abortSignal);
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
result = JSON.stringify({
|
|
126
|
+
success: false,
|
|
127
|
+
error: `Tool execution error: ${err.message}`,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
121
130
|
}
|
|
122
131
|
}
|
|
123
132
|
else {
|
|
124
|
-
|
|
133
|
+
// Issue #32 #3.2: 透传 abortSignal
|
|
134
|
+
try {
|
|
135
|
+
result = await toolExecutor(tc.function.name, args, abortSignal);
|
|
136
|
+
}
|
|
137
|
+
catch (err) {
|
|
138
|
+
result = JSON.stringify({
|
|
139
|
+
success: false,
|
|
140
|
+
error: `Tool execution error: ${err.message}`,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
125
143
|
}
|
|
126
144
|
const duration = Date.now() - start;
|
|
127
145
|
// Issue #21 修复:解析结果,提取 success/error 字段
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/framework/query.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/framework/query.ts"],"names":[],"mappings":"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"}
|