@bolloon/bolloon-agent 0.1.1 → 0.1.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/bin/bolloon-cli.cjs +157 -0
- package/bin/bolloon-daemon.sh +207 -0
- package/bin/bolloon.cmd +11 -0
- package/dist/agents/constraint-layer.js +10 -15
- package/dist/agents/pi-sdk.js +433 -106
- package/dist/agents/protocol.js +82 -1
- package/dist/agents/subagent-manager.js +2 -2
- package/dist/agents/workflow-engine.js +15 -20
- package/dist/agents/workflow-pivot-loop.js +541 -0
- package/dist/bollharness/src/index.js +5 -0
- package/dist/bollharness/src/scripts/checks/check_adr_plan_numbering.js +6 -0
- package/dist/bollharness/src/scripts/checks/check_api_types.js +45 -0
- package/dist/bollharness/src/scripts/checks/check_artifact_link.js +146 -0
- package/dist/bollharness/src/scripts/checks/check_bridge_deps.js +6 -0
- package/dist/bollharness/src/scripts/checks/check_bugfix_binding.js +6 -0
- package/dist/bollharness/src/scripts/checks/check_bugfix_binding_ci.js +6 -0
- package/dist/bollharness/src/scripts/checks/check_doc_file_references.js +6 -0
- package/dist/bollharness/src/scripts/checks/check_doc_freshness.js +135 -0
- package/dist/bollharness/src/scripts/checks/check_doc_links.js +31 -0
- package/dist/bollharness/src/scripts/checks/check_file_existence_claims.js +6 -0
- package/dist/bollharness/src/scripts/checks/check_fragment_integrity.js +34 -0
- package/dist/bollharness/src/scripts/checks/check_hook_installed.js +63 -0
- package/dist/bollharness/src/scripts/checks/check_issue_closure.js +41 -0
- package/dist/bollharness/src/scripts/checks/check_mcp_parity.js +6 -0
- package/dist/bollharness/src/scripts/checks/check_security.js +48 -0
- package/dist/bollharness/src/scripts/checks/check_skill_parity.js +6 -0
- package/dist/bollharness/src/scripts/checks/check_versions.js +6 -0
- package/dist/bollharness/src/scripts/checks/finding.js +13 -0
- package/dist/bollharness/src/scripts/checks/next_decision_number.js +20 -0
- package/dist/bollharness/src/scripts/checks/regenerate_magic_docs.js +6 -0
- package/dist/bollharness/src/scripts/ci/detect_rebaseline_triggers.js +8 -0
- package/dist/bollharness/src/scripts/ci/scan_subprocess_cfg.js +8 -0
- package/dist/bollharness/src/scripts/ci/scan_verify_artifacts.js +8 -0
- package/dist/bollharness/src/scripts/ci/scan_yaml_schema.js +8 -0
- package/dist/bollharness/src/scripts/context_router.js +67 -0
- package/dist/bollharness/src/scripts/deploy-guard.js +157 -0
- package/dist/bollharness/src/scripts/guard-feedback.js +192 -0
- package/dist/bollharness/src/scripts/guard_router.js +158 -0
- package/dist/bollharness/src/scripts/hooks/_hook_output.js +6 -0
- package/dist/bollharness/src/scripts/hooks/auto-python3.js +6 -0
- package/dist/bollharness/src/scripts/hooks/deploy-progress-on-session-end.js +6 -0
- package/dist/bollharness/src/scripts/hooks/failure-analyzer.js +6 -0
- package/dist/bollharness/src/scripts/hooks/gate-judgment-inject.js +92 -0
- package/dist/bollharness/src/scripts/hooks/gate-transition-judgment.js +63 -0
- package/dist/bollharness/src/scripts/hooks/inbox-ack.js +6 -0
- package/dist/bollharness/src/scripts/hooks/inbox-inject-on-start.js +6 -0
- package/dist/bollharness/src/scripts/hooks/inbox-validate.js +6 -0
- package/dist/bollharness/src/scripts/hooks/inbox-write-ledger.js +6 -0
- package/dist/bollharness/src/scripts/hooks/initializer-agent.js +6 -0
- package/dist/bollharness/src/scripts/hooks/loop-detection.js +73 -0
- package/dist/bollharness/src/scripts/hooks/owner-guard.js +6 -0
- package/dist/bollharness/src/scripts/hooks/precompact.js +6 -0
- package/dist/bollharness/src/scripts/hooks/review-agent-gatekeeper.js +6 -0
- package/dist/bollharness/src/scripts/hooks/risk-tracker.js +108 -0
- package/dist/bollharness/src/scripts/hooks/sanitize-on-read.js +6 -0
- package/dist/bollharness/src/scripts/hooks/session-reflection.js +7 -0
- package/dist/bollharness/src/scripts/hooks/session-start-magic-docs.js +7 -0
- package/dist/bollharness/src/scripts/hooks/session-start-reset-risk.js +7 -0
- package/dist/bollharness/src/scripts/hooks/session-start-toolkit-reminder.js +7 -0
- package/dist/bollharness/src/scripts/hooks/stop-evaluator.js +157 -0
- package/dist/bollharness/src/scripts/hooks/tool-call-counter.js +6 -0
- package/dist/bollharness/src/scripts/hooks/trace-analyzer.js +10 -0
- package/dist/bollharness/src/scripts/install/install-trust-token.js +7 -0
- package/dist/bollharness/src/scripts/install/multi_project_registry.js +9 -0
- package/dist/bollharness/src/scripts/install/phase2_auto.js +21 -0
- package/dist/bollharness/src/scripts/install/pre_commit_installer.js +6 -0
- package/dist/bollharness/src/scripts/install/tier_selector.js +7 -0
- package/dist/bollharness/src/scripts/install/transcript_miner.js +7 -0
- package/dist/bollharness/src/scripts/lib/claim_patterns.js +10 -0
- package/dist/bollharness/src/scripts/lib/sanitize_patterns.js +12 -0
- package/dist/bollharness/src/scripts/sanitize.js +6 -0
- package/dist/bollharness-integration/channel-judgment-engine.js +530 -0
- package/dist/bollharness-integration/context-chain-router.js +383 -0
- package/dist/bollharness-integration/context-router-judgment.js +13 -21
- package/dist/bollharness-integration/context-router.js +22 -64
- package/dist/bollharness-integration/gate-state-machine.js +14 -19
- package/dist/bollharness-integration/gate-transition-hooks.js +16 -61
- package/dist/bollharness-integration/guard-checker.js +21 -68
- package/dist/bollharness-integration/index.js +14 -124
- package/dist/bollharness-integration/integration.js +13 -20
- package/dist/bollharness-integration/llm-judgment-engine.js +569 -0
- package/dist/bollharness-integration/skill-adapter.js +18 -64
- package/dist/cli-entry.js +261 -0
- package/dist/constraint-runtime/src/commands.js +17 -7
- package/dist/constraint-runtime/src/constraint/budget.js +1 -6
- package/dist/constraint-runtime/src/constraint/permission.js +1 -6
- package/dist/constraint-runtime/src/models.js +1 -3
- package/dist/constraint-runtime/src/tools.js +17 -7
- package/dist/constraints/index.js +1 -7
- package/dist/documents/reader.js +8 -49
- package/dist/heartbeat/DaemonManager.js +242 -0
- package/dist/heartbeat/HealthMonitor.js +285 -0
- package/dist/heartbeat/StartupVerifier.js +205 -0
- package/dist/heartbeat/Watchdog.js +168 -0
- package/dist/heartbeat/index.js +84 -0
- package/dist/heartbeat/types.js +5 -0
- package/dist/index.js +381 -28
- package/dist/llm/config-store.js +31 -57
- package/dist/llm/llm-judgment-client.js +389 -0
- package/dist/llm/pi-ai.js +9 -52
- package/dist/network/agent-network.js +46 -90
- package/dist/network/hybrid-messenger.js +125 -0
- package/dist/network/iroh-bootstrap.js +38 -0
- package/dist/network/iroh-discovery.js +145 -0
- package/dist/network/iroh-integration.js +9 -16
- package/dist/network/iroh-transport.js +10 -48
- package/dist/network/p2p.js +23 -62
- package/dist/network/storage/adapters/json-adapter.js +4 -42
- package/dist/network/storage/index.js +147 -0
- package/dist/network/storage/types.js +14 -0
- package/dist/pi-ecosystem/index.js +233 -0
- package/dist/pi-ecosystem-colony/index.js +29 -90
- package/dist/pi-ecosystem-goals/index.js +20 -74
- package/dist/pi-ecosystem-judgment/decision.js +29 -47
- package/dist/pi-ecosystem-judgment/distillation.js +16 -29
- package/dist/pi-ecosystem-judgment/human-value-store.js +13 -60
- package/dist/pi-ecosystem-judgment/index.js +21 -74
- package/dist/pi-ecosystem-judgment/value-injection.js +26 -72
- package/dist/pi-ecosystem-mcp/index.js +24 -78
- package/dist/pi-ecosystem-subagents/index.js +20 -69
- package/dist/social/ant-colony/AdaptiveHeartbeat.js +3 -8
- package/dist/social/ant-colony/PheromoneEngine.js +11 -49
- package/dist/social/ant-colony/index.js +6 -0
- package/dist/social/ant-colony/types.js +4 -8
- package/dist/social/channels/ChannelManager.js +8 -46
- package/dist/social/channels/DiapChannelBridge.js +9 -47
- package/dist/social/channels/InterestMatcher.js +2 -7
- package/dist/social/channels/channel-agent-session.js +309 -0
- package/dist/social/channels/channel-heartbeat-agent.js +494 -0
- package/dist/social/channels/diap-doc-parser.js +204 -0
- package/dist/social/channels/harness-workflow-integrator.js +446 -0
- package/dist/social/channels/index.js +9 -0
- package/dist/social/channels/types.js +3 -7
- package/dist/social/global-shared-context.js +6 -47
- package/dist/social/heartbeat.js +29 -72
- package/dist/social/persona/enhanced-persona.js +299 -0
- package/dist/web/client.js +302 -136
- package/dist/web/components/p2p/index.js +159 -9
- package/dist/web/components/p2p/p2p-connection.js +136 -0
- package/dist/web/components/p2p/p2p-manager.js +24 -0
- package/dist/web/components/p2p/p2p-store-memory.js +1 -1
- package/dist/web/components/p2p/types.js +7 -0
- package/dist/web/index.html +5 -0
- package/dist/web/style.css +118 -0
- package/package.json +12 -6
- package/scripts/build-cli.js +206 -0
- package/scripts/postinstall.js +153 -0
- package/src/agents/pi-sdk.ts +347 -28
- package/src/agents/protocol.ts +95 -1
- package/src/agents/workflow-pivot-loop.ts +674 -0
- package/src/bollharness/CLAUDE.md +73 -0
- package/src/bollharness/README.md +143 -0
- package/src/bollharness/README.zh-CN.md +131 -0
- package/src/bollharness/reference/boll-reference/scripts/hooks/stop-evaluator.md +57 -0
- package/src/bollharness/scripts/context-fragments/artifact-linkage.md +14 -0
- package/src/bollharness/scripts/context-fragments/auth-consumers.md +17 -0
- package/src/bollharness/scripts/context-fragments/bridge-constitution.md +13 -0
- package/src/bollharness/scripts/context-fragments/catalyst-distributed.md +18 -0
- package/src/bollharness/scripts/context-fragments/closure-checklist.md +13 -0
- package/src/bollharness/scripts/context-fragments/contract-consumers.md +15 -0
- package/src/bollharness/scripts/context-fragments/db-shared-structures.md +15 -0
- package/src/bollharness/scripts/context-fragments/fixed-three-layers.md +19 -0
- package/src/bollharness/scripts/context-fragments/general-dev-principles.md +11 -0
- package/src/bollharness/scripts/context-fragments/issue-first.md +8 -0
- package/src/bollharness/scripts/context-fragments/mcp-parity.md +16 -0
- package/src/bollharness/scripts/context-fragments/pi-agent-operations.md +108 -0
- package/src/bollharness/scripts/context-fragments/protocol-consumers.md +15 -0
- package/src/bollharness/scripts/context-fragments/run-events-consumers.md +15 -0
- package/src/bollharness/scripts/context-fragments/scene-fidelity.md +13 -0
- package/src/bollharness/scripts/context-fragments/truth-source-hierarchy.md +15 -0
- package/src/bollharness/scripts/context-fragments/two-language.md +15 -0
- package/src/bollharness/scripts/context-fragments/version-sources.md +14 -0
- package/src/bollharness/scripts/hooks/stop-evaluator.md +83 -0
- package/src/bollharness/templates/scaffold/CLAUDE.md +89 -0
- package/src/cli-entry.ts +304 -0
- package/src/heartbeat/DaemonManager.ts +283 -0
- package/src/heartbeat/HealthMonitor.ts +316 -0
- package/src/heartbeat/StartupVerifier.ts +223 -0
- package/src/heartbeat/Watchdog.ts +198 -0
- package/src/heartbeat/index.ts +108 -0
- package/src/heartbeat/types.ts +82 -0
- package/src/llm/config-store.ts +23 -5
- package/src/network/iroh-transport.ts +3 -3
- package/src/web/client.js +302 -136
- package/src/web/components/p2p/P2PModal.tsx +91 -3
- package/src/web/components/p2p/index.ts +171 -9
- package/src/web/components/p2p/p2p-connection.ts +153 -1
- package/src/web/components/p2p/p2p-manager.ts +39 -1
- package/src/web/components/p2p/p2p-store-memory.ts +1 -1
- package/src/web/components/p2p/p2p-tools.ts +315 -0
- package/src/web/components/p2p/types.ts +58 -0
- package/src/web/design.md +99 -0
- package/src/web/index.html +5 -0
- package/src/web/server.ts +353 -36
- package/src/web/style.css +118 -0
- package/tsconfig.cli.json +16 -0
- package/tsconfig.electron.json +1 -1
- package/tsconfig.json +1 -2
- package/dist/web/server.js +0 -1647
- package/dist/web/server.js.map +0 -1
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* Human Value Store - 存储人类判断价值观的机制
|
|
4
3
|
*
|
|
@@ -14,53 +13,8 @@
|
|
|
14
13
|
* - outcome: 决策结果
|
|
15
14
|
* - values: 提取的价值观标签
|
|
16
15
|
*/
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
20
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
21
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
22
|
-
}
|
|
23
|
-
Object.defineProperty(o, k2, desc);
|
|
24
|
-
}) : (function(o, m, k, k2) {
|
|
25
|
-
if (k2 === undefined) k2 = k;
|
|
26
|
-
o[k2] = m[k];
|
|
27
|
-
}));
|
|
28
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
29
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
30
|
-
}) : function(o, v) {
|
|
31
|
-
o["default"] = v;
|
|
32
|
-
});
|
|
33
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
34
|
-
var ownKeys = function(o) {
|
|
35
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
36
|
-
var ar = [];
|
|
37
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
38
|
-
return ar;
|
|
39
|
-
};
|
|
40
|
-
return ownKeys(o);
|
|
41
|
-
};
|
|
42
|
-
return function (mod) {
|
|
43
|
-
if (mod && mod.__esModule) return mod;
|
|
44
|
-
var result = {};
|
|
45
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
46
|
-
__setModuleDefault(result, mod);
|
|
47
|
-
return result;
|
|
48
|
-
};
|
|
49
|
-
})();
|
|
50
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
51
|
-
exports.initializeValueStore = initializeValueStore;
|
|
52
|
-
exports.storeHumanJudgment = storeHumanJudgment;
|
|
53
|
-
exports.learnFromTrajectory = learnFromTrajectory;
|
|
54
|
-
exports.learnFromFeedback = learnFromFeedback;
|
|
55
|
-
exports.learnFromCorrection = learnFromCorrection;
|
|
56
|
-
exports.loadAllJudgments = loadAllJudgments;
|
|
57
|
-
exports.getRelevantValues = getRelevantValues;
|
|
58
|
-
exports.getValueProfile = getValueProfile;
|
|
59
|
-
exports.getPriorityRules = getPriorityRules;
|
|
60
|
-
exports.getValueStats = getValueStats;
|
|
61
|
-
exports.clearCache = clearCache;
|
|
62
|
-
const fs = __importStar(require("fs/promises"));
|
|
63
|
-
const path = __importStar(require("path"));
|
|
16
|
+
import * as fs from 'fs/promises';
|
|
17
|
+
import * as path from 'path';
|
|
64
18
|
const VALUE_STORE_DIR = path.join(process.env.HOME || '/tmp', '.bolloon', 'human-values');
|
|
65
19
|
const JUDGMENTS_FILE = path.join(VALUE_STORE_DIR, 'judgments.json');
|
|
66
20
|
// In-memory cache
|
|
@@ -76,7 +30,7 @@ function generateId() {
|
|
|
76
30
|
/**
|
|
77
31
|
* 初始化存储(创建目录和空文件)
|
|
78
32
|
*/
|
|
79
|
-
async function initializeValueStore() {
|
|
33
|
+
export async function initializeValueStore() {
|
|
80
34
|
if (initialized)
|
|
81
35
|
return;
|
|
82
36
|
try {
|
|
@@ -98,7 +52,7 @@ async function initializeValueStore() {
|
|
|
98
52
|
/**
|
|
99
53
|
* 存储人类判断
|
|
100
54
|
*/
|
|
101
|
-
async function storeHumanJudgment(judgment) {
|
|
55
|
+
export async function storeHumanJudgment(judgment) {
|
|
102
56
|
const fullJudgment = {
|
|
103
57
|
...judgment,
|
|
104
58
|
id: generateId(),
|
|
@@ -117,7 +71,7 @@ async function storeHumanJudgment(judgment) {
|
|
|
117
71
|
/**
|
|
118
72
|
* 从决策结果学习(轨迹学习)
|
|
119
73
|
*/
|
|
120
|
-
async function learnFromTrajectory(trajectory) {
|
|
74
|
+
export async function learnFromTrajectory(trajectory) {
|
|
121
75
|
// 提取价值观
|
|
122
76
|
const values = extractValuesFromTrajectory(trajectory);
|
|
123
77
|
return storeHumanJudgment({
|
|
@@ -140,7 +94,7 @@ async function learnFromTrajectory(trajectory) {
|
|
|
140
94
|
/**
|
|
141
95
|
* 从批准/拒绝学习
|
|
142
96
|
*/
|
|
143
|
-
async function learnFromFeedback(action, approved, reason) {
|
|
97
|
+
export async function learnFromFeedback(action, approved, reason) {
|
|
144
98
|
return storeHumanJudgment({
|
|
145
99
|
decision: action,
|
|
146
100
|
decision_type: approved ? 'approve' : 'reject',
|
|
@@ -158,7 +112,7 @@ async function learnFromFeedback(action, approved, reason) {
|
|
|
158
112
|
/**
|
|
159
113
|
* 从建议修正学习
|
|
160
114
|
*/
|
|
161
|
-
async function learnFromCorrection(original, corrected, reason) {
|
|
115
|
+
export async function learnFromCorrection(original, corrected, reason) {
|
|
162
116
|
return storeHumanJudgment({
|
|
163
117
|
decision: corrected,
|
|
164
118
|
decision_type: 'modify',
|
|
@@ -179,7 +133,7 @@ async function learnFromCorrection(original, corrected, reason) {
|
|
|
179
133
|
/**
|
|
180
134
|
* 加载所有人类判断
|
|
181
135
|
*/
|
|
182
|
-
async function loadAllJudgments() {
|
|
136
|
+
export async function loadAllJudgments() {
|
|
183
137
|
if (!initialized) {
|
|
184
138
|
await initializeValueStore();
|
|
185
139
|
}
|
|
@@ -200,7 +154,7 @@ async function loadAllJudgments() {
|
|
|
200
154
|
* 获取相关价值观
|
|
201
155
|
* 将 context 拆分为关键词,任意一个匹配即可
|
|
202
156
|
*/
|
|
203
|
-
async function getRelevantValues(context, domain) {
|
|
157
|
+
export async function getRelevantValues(context, domain) {
|
|
204
158
|
const judgments = await loadAllJudgments();
|
|
205
159
|
const keywords = context.split(/[\s,,、]+/).filter(k => k.length >= 2);
|
|
206
160
|
const contextLower = context.toLowerCase();
|
|
@@ -244,7 +198,7 @@ async function getRelevantValues(context, domain) {
|
|
|
244
198
|
/**
|
|
245
199
|
* 获取价值画像
|
|
246
200
|
*/
|
|
247
|
-
async function getValueProfile(agentId) {
|
|
201
|
+
export async function getValueProfile(agentId) {
|
|
248
202
|
if (valueProfileCache.has(agentId)) {
|
|
249
203
|
return valueProfileCache.get(agentId);
|
|
250
204
|
}
|
|
@@ -257,7 +211,7 @@ async function getValueProfile(agentId) {
|
|
|
257
211
|
/**
|
|
258
212
|
* 获取优先级规则
|
|
259
213
|
*/
|
|
260
|
-
async function getPriorityRules() {
|
|
214
|
+
export async function getPriorityRules() {
|
|
261
215
|
const judgments = await loadAllJudgments();
|
|
262
216
|
const seen = new Set();
|
|
263
217
|
return judgments
|
|
@@ -429,7 +383,7 @@ function extractValuesFromCorrection(original, corrected) {
|
|
|
429
383
|
// ============================================================
|
|
430
384
|
// 统计
|
|
431
385
|
// ============================================================
|
|
432
|
-
async function getValueStats() {
|
|
386
|
+
export async function getValueStats() {
|
|
433
387
|
const judgments = await loadAllJudgments();
|
|
434
388
|
const byType = {};
|
|
435
389
|
const bySource = {};
|
|
@@ -456,8 +410,7 @@ async function getValueStats() {
|
|
|
456
410
|
top_values: topValues
|
|
457
411
|
};
|
|
458
412
|
}
|
|
459
|
-
function clearCache() {
|
|
413
|
+
export function clearCache() {
|
|
460
414
|
judgmentCache = [];
|
|
461
415
|
valueProfileCache.clear();
|
|
462
416
|
}
|
|
463
|
-
//# sourceMappingURL=human-value-store.js.map
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* Pi Judgment Integration for Bolloon
|
|
4
3
|
*
|
|
@@ -15,59 +14,8 @@
|
|
|
15
14
|
* - High-frequency rules: Embedded in context-fragments/*.md YAML frontmatter
|
|
16
15
|
* - Long-term preferences: .bolloon/judgments/*.yaml
|
|
17
16
|
*/
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
21
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
22
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
23
|
-
}
|
|
24
|
-
Object.defineProperty(o, k2, desc);
|
|
25
|
-
}) : (function(o, m, k, k2) {
|
|
26
|
-
if (k2 === undefined) k2 = k;
|
|
27
|
-
o[k2] = m[k];
|
|
28
|
-
}));
|
|
29
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
30
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
31
|
-
}) : function(o, v) {
|
|
32
|
-
o["default"] = v;
|
|
33
|
-
});
|
|
34
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
35
|
-
var ownKeys = function(o) {
|
|
36
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
37
|
-
var ar = [];
|
|
38
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
39
|
-
return ar;
|
|
40
|
-
};
|
|
41
|
-
return ownKeys(o);
|
|
42
|
-
};
|
|
43
|
-
return function (mod) {
|
|
44
|
-
if (mod && mod.__esModule) return mod;
|
|
45
|
-
var result = {};
|
|
46
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
47
|
-
__setModuleDefault(result, mod);
|
|
48
|
-
return result;
|
|
49
|
-
};
|
|
50
|
-
})();
|
|
51
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
52
|
-
exports.initializeJudgmentStore = initializeJudgmentStore;
|
|
53
|
-
exports.bootstrapJudgmentSystem = bootstrapJudgmentSystem;
|
|
54
|
-
exports.loadJudgments = loadJudgments;
|
|
55
|
-
exports.createJudgment = createJudgment;
|
|
56
|
-
exports.updateJudgmentConfidence = updateJudgmentConfidence;
|
|
57
|
-
exports.getAllJudgments = getAllJudgments;
|
|
58
|
-
exports.getJudgmentsByType = getJudgmentsByType;
|
|
59
|
-
exports.getJudgmentsForContext = getJudgmentsForContext;
|
|
60
|
-
exports.calculateConfidence = calculateConfidence;
|
|
61
|
-
exports.buildValueFunction = buildValueFunction;
|
|
62
|
-
exports.getValueFunction = getValueFunction;
|
|
63
|
-
exports.extractFromFragment = extractFromFragment;
|
|
64
|
-
exports.loadFragmentJudgments = loadFragmentJudgments;
|
|
65
|
-
exports.getCombinedJudgments = getCombinedJudgments;
|
|
66
|
-
exports.getJudgmentStats = getJudgmentStats;
|
|
67
|
-
exports.clearCache = clearCache;
|
|
68
|
-
exports.resetJudgmentStore = resetJudgmentStore;
|
|
69
|
-
const fs = __importStar(require("fs/promises"));
|
|
70
|
-
const path = __importStar(require("path"));
|
|
17
|
+
import * as fs from 'fs/promises';
|
|
18
|
+
import * as path from 'path';
|
|
71
19
|
const JUDGMENTS_DIR = path.join(process.env.HOME || '/tmp', '.bolloon', 'judgments');
|
|
72
20
|
const JUDGMENT_FILES = {
|
|
73
21
|
rules: path.join(JUDGMENTS_DIR, 'rules.yaml'),
|
|
@@ -85,7 +33,7 @@ function generateJudgmentId() {
|
|
|
85
33
|
/**
|
|
86
34
|
* Initialize the judgment store, creating all YAML files if they don't exist
|
|
87
35
|
*/
|
|
88
|
-
async function initializeJudgmentStore() {
|
|
36
|
+
export async function initializeJudgmentStore() {
|
|
89
37
|
if (storeInitialized)
|
|
90
38
|
return;
|
|
91
39
|
await fs.mkdir(JUDGMENTS_DIR, { recursive: true });
|
|
@@ -105,12 +53,12 @@ async function initializeJudgmentStore() {
|
|
|
105
53
|
/**
|
|
106
54
|
* Bootstrap the entire judgment system - initializes all stores and LLM
|
|
107
55
|
*/
|
|
108
|
-
async function bootstrapJudgmentSystem() {
|
|
56
|
+
export async function bootstrapJudgmentSystem() {
|
|
109
57
|
console.log('[Judgment] Bootstrapping judgment system...');
|
|
110
58
|
await initializeJudgmentStore();
|
|
111
|
-
const { initializeValueStore } = await
|
|
59
|
+
const { initializeValueStore } = await import('./human-value-store.js');
|
|
112
60
|
await initializeValueStore();
|
|
113
|
-
const { initializeDistillation } = await
|
|
61
|
+
const { initializeDistillation } = await import('./distillation.js');
|
|
114
62
|
await initializeDistillation();
|
|
115
63
|
cacheDirty = true;
|
|
116
64
|
valueFunctionCache = null;
|
|
@@ -119,7 +67,7 @@ async function bootstrapJudgmentSystem() {
|
|
|
119
67
|
/**
|
|
120
68
|
* Load all judgments from YAML files
|
|
121
69
|
*/
|
|
122
|
-
async function loadJudgments() {
|
|
70
|
+
export async function loadJudgments() {
|
|
123
71
|
if (!storeInitialized) {
|
|
124
72
|
await initializeJudgmentStore();
|
|
125
73
|
}
|
|
@@ -158,7 +106,7 @@ async function saveJudgments(type, judgments) {
|
|
|
158
106
|
/**
|
|
159
107
|
* Create a new judgment
|
|
160
108
|
*/
|
|
161
|
-
async function createJudgment(params) {
|
|
109
|
+
export async function createJudgment(params) {
|
|
162
110
|
const judgment = {
|
|
163
111
|
id: generateJudgmentId(),
|
|
164
112
|
type: params.type,
|
|
@@ -181,7 +129,7 @@ async function createJudgment(params) {
|
|
|
181
129
|
/**
|
|
182
130
|
* Update judgment confidence based on feedback
|
|
183
131
|
*/
|
|
184
|
-
async function updateJudgmentConfidence(id, delta, feedbackType) {
|
|
132
|
+
export async function updateJudgmentConfidence(id, delta, feedbackType) {
|
|
185
133
|
const judgments = await loadJudgments();
|
|
186
134
|
for (const [type, typeJudgments] of judgments.entries()) {
|
|
187
135
|
const judgment = typeJudgments.find((j) => j.id === id);
|
|
@@ -207,7 +155,7 @@ async function updateJudgmentConfidence(id, delta, feedbackType) {
|
|
|
207
155
|
/**
|
|
208
156
|
* Get all judgments
|
|
209
157
|
*/
|
|
210
|
-
async function getAllJudgments() {
|
|
158
|
+
export async function getAllJudgments() {
|
|
211
159
|
const judgments = await loadJudgments();
|
|
212
160
|
const all = [];
|
|
213
161
|
for (const typeJudgments of judgments.values()) {
|
|
@@ -218,14 +166,14 @@ async function getAllJudgments() {
|
|
|
218
166
|
/**
|
|
219
167
|
* Get judgments by type
|
|
220
168
|
*/
|
|
221
|
-
async function getJudgmentsByType(type) {
|
|
169
|
+
export async function getJudgmentsByType(type) {
|
|
222
170
|
const judgments = await loadJudgments();
|
|
223
171
|
return judgments.get(type) || [];
|
|
224
172
|
}
|
|
225
173
|
/**
|
|
226
174
|
* Get judgments relevant to a context
|
|
227
175
|
*/
|
|
228
|
-
async function getJudgmentsForContext(context) {
|
|
176
|
+
export async function getJudgmentsForContext(context) {
|
|
229
177
|
const all = await getAllJudgments();
|
|
230
178
|
return all.filter((j) => {
|
|
231
179
|
if (!j.context)
|
|
@@ -236,7 +184,7 @@ async function getJudgmentsForContext(context) {
|
|
|
236
184
|
/**
|
|
237
185
|
* Calculate confidence score for a decision
|
|
238
186
|
*/
|
|
239
|
-
function calculateConfidence(judgments) {
|
|
187
|
+
export function calculateConfidence(judgments) {
|
|
240
188
|
if (judgments.length === 0)
|
|
241
189
|
return 0.5;
|
|
242
190
|
let totalSourceWeight = 0;
|
|
@@ -251,7 +199,7 @@ function calculateConfidence(judgments) {
|
|
|
251
199
|
/**
|
|
252
200
|
* Build ValueFunction from judgments
|
|
253
201
|
*/
|
|
254
|
-
async function buildValueFunction(context) {
|
|
202
|
+
export async function buildValueFunction(context) {
|
|
255
203
|
const judgments = context
|
|
256
204
|
? await getJudgmentsForContext(context)
|
|
257
205
|
: await getAllJudgments();
|
|
@@ -273,7 +221,7 @@ async function buildValueFunction(context) {
|
|
|
273
221
|
/**
|
|
274
222
|
* Get cached ValueFunction
|
|
275
223
|
*/
|
|
276
|
-
async function getValueFunction(context) {
|
|
224
|
+
export async function getValueFunction(context) {
|
|
277
225
|
if (!valueFunctionCache || cacheDirty) {
|
|
278
226
|
valueFunctionCache = await buildValueFunction(context);
|
|
279
227
|
}
|
|
@@ -283,7 +231,7 @@ async function getValueFunction(context) {
|
|
|
283
231
|
* Extract judgments from context fragment YAML frontmatter
|
|
284
232
|
* Falls back to using file content + filename as context when no frontmatter judgment exists
|
|
285
233
|
*/
|
|
286
|
-
async function extractFromFragment(fragmentPath) {
|
|
234
|
+
export async function extractFromFragment(fragmentPath) {
|
|
287
235
|
try {
|
|
288
236
|
const content = await fs.readFile(fragmentPath, 'utf-8');
|
|
289
237
|
const frontmatter = extractFrontmatter(content);
|
|
@@ -330,7 +278,7 @@ async function extractFromFragment(fragmentPath) {
|
|
|
330
278
|
/**
|
|
331
279
|
* Load judgments from all context fragments
|
|
332
280
|
*/
|
|
333
|
-
async function loadFragmentJudgments() {
|
|
281
|
+
export async function loadFragmentJudgments() {
|
|
334
282
|
const FRAGMENTS_DIR = path.join(process.cwd(), 'src', 'bollharness', 'scripts', 'context-fragments');
|
|
335
283
|
const fragmentJudgments = [];
|
|
336
284
|
try {
|
|
@@ -350,7 +298,7 @@ async function loadFragmentJudgments() {
|
|
|
350
298
|
/**
|
|
351
299
|
* Get combined judgments (file + fragments)
|
|
352
300
|
*/
|
|
353
|
-
async function getCombinedJudgments() {
|
|
301
|
+
export async function getCombinedJudgments() {
|
|
354
302
|
const [fileJudgments, fragmentJudgments] = await Promise.all([
|
|
355
303
|
getAllJudgments(),
|
|
356
304
|
loadFragmentJudgments(),
|
|
@@ -537,7 +485,7 @@ function extractMarkdownContent(content) {
|
|
|
537
485
|
/**
|
|
538
486
|
* Get judgment statistics
|
|
539
487
|
*/
|
|
540
|
-
async function getJudgmentStats() {
|
|
488
|
+
export async function getJudgmentStats() {
|
|
541
489
|
const judgments = await getAllJudgments();
|
|
542
490
|
const byType = {
|
|
543
491
|
rule: 0,
|
|
@@ -566,7 +514,7 @@ async function getJudgmentStats() {
|
|
|
566
514
|
/**
|
|
567
515
|
* Clear judgment cache
|
|
568
516
|
*/
|
|
569
|
-
function clearCache() {
|
|
517
|
+
export function clearCache() {
|
|
570
518
|
valueFunctionCache = null;
|
|
571
519
|
cacheDirty = true;
|
|
572
520
|
judgmentCache = new Map();
|
|
@@ -574,8 +522,7 @@ function clearCache() {
|
|
|
574
522
|
/**
|
|
575
523
|
* Reset judgment store initialization (forces re-initialization on next use)
|
|
576
524
|
*/
|
|
577
|
-
function resetJudgmentStore() {
|
|
525
|
+
export function resetJudgmentStore() {
|
|
578
526
|
storeInitialized = false;
|
|
579
527
|
clearCache();
|
|
580
528
|
}
|
|
581
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* Value Injection - 人类价值观注入到 LLM Prompt
|
|
4
3
|
*
|
|
@@ -13,53 +12,9 @@
|
|
|
13
12
|
* 3. 优先级规则 - 冲突时的决策倾向
|
|
14
13
|
* 4. 边界条件 - 在什么情况下会改变决定
|
|
15
14
|
*/
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
20
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
21
|
-
}
|
|
22
|
-
Object.defineProperty(o, k2, desc);
|
|
23
|
-
}) : (function(o, m, k, k2) {
|
|
24
|
-
if (k2 === undefined) k2 = k;
|
|
25
|
-
o[k2] = m[k];
|
|
26
|
-
}));
|
|
27
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
28
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
29
|
-
}) : function(o, v) {
|
|
30
|
-
o["default"] = v;
|
|
31
|
-
});
|
|
32
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
33
|
-
var ownKeys = function(o) {
|
|
34
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
35
|
-
var ar = [];
|
|
36
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
37
|
-
return ar;
|
|
38
|
-
};
|
|
39
|
-
return ownKeys(o);
|
|
40
|
-
};
|
|
41
|
-
return function (mod) {
|
|
42
|
-
if (mod && mod.__esModule) return mod;
|
|
43
|
-
var result = {};
|
|
44
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
45
|
-
__setModuleDefault(result, mod);
|
|
46
|
-
return result;
|
|
47
|
-
};
|
|
48
|
-
})();
|
|
49
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
-
exports.DEFAULT_INJECTION_CONFIG = void 0;
|
|
51
|
-
exports.generateValueInjection = generateValueInjection;
|
|
52
|
-
exports.getSituationallyRelevantJudgments = getSituationallyRelevantJudgments;
|
|
53
|
-
exports.generateSituationalValueInjection = generateSituationalValueInjection;
|
|
54
|
-
exports.generateSituationAwarePrompt = generateSituationAwarePrompt;
|
|
55
|
-
exports.generateSystemPromptWithValues = generateSystemPromptWithValues;
|
|
56
|
-
exports.generateJudgmentPromptWithValues = generateJudgmentPromptWithValues;
|
|
57
|
-
exports.generateValueSummary = generateValueSummary;
|
|
58
|
-
exports.detectValueConflicts = detectValueConflicts;
|
|
59
|
-
exports.suggestBasedOnValues = suggestBasedOnValues;
|
|
60
|
-
const human_value_store_js_1 = require("./human-value-store.js");
|
|
61
|
-
const pi_ai_js_1 = require("../llm/pi-ai.js");
|
|
62
|
-
exports.DEFAULT_INJECTION_CONFIG = {
|
|
15
|
+
import { getRelevantValues, getValueProfile, getPriorityRules } from './human-value-store.js';
|
|
16
|
+
import { getModel, isModelAvailable } from '../llm/pi-ai.js';
|
|
17
|
+
export const DEFAULT_INJECTION_CONFIG = {
|
|
63
18
|
mode: 'standard',
|
|
64
19
|
maxTokens: 800,
|
|
65
20
|
includeExamples: true,
|
|
@@ -73,17 +28,17 @@ exports.DEFAULT_INJECTION_CONFIG = {
|
|
|
73
28
|
/**
|
|
74
29
|
* 生成价值观注入内容
|
|
75
30
|
*/
|
|
76
|
-
async function generateValueInjection(context, config = {}) {
|
|
77
|
-
const cfg = { ...
|
|
31
|
+
export async function generateValueInjection(context, config = {}) {
|
|
32
|
+
const cfg = { ...DEFAULT_INJECTION_CONFIG, ...config };
|
|
78
33
|
const parts = [];
|
|
79
34
|
// 1. 获取相关价值观
|
|
80
|
-
const values = await
|
|
35
|
+
const values = await getRelevantValues(context);
|
|
81
36
|
if (values.length > 0) {
|
|
82
37
|
parts.push(generateValuesSection(values, cfg.mode));
|
|
83
38
|
}
|
|
84
39
|
// 2. 获取优先级规则
|
|
85
40
|
if (cfg.includeRules) {
|
|
86
|
-
const rules = await
|
|
41
|
+
const rules = await getPriorityRules();
|
|
87
42
|
if (rules.length > 0) {
|
|
88
43
|
parts.push(generateRulesSection(rules, cfg.mode));
|
|
89
44
|
}
|
|
@@ -109,10 +64,10 @@ async function generateValueInjection(context, config = {}) {
|
|
|
109
64
|
* 返回 situationalScore (0-1) 和 reason
|
|
110
65
|
*/
|
|
111
66
|
async function scoreJudgmentRelevance(judgment, situation) {
|
|
112
|
-
if (!
|
|
67
|
+
if (!isModelAvailable()) {
|
|
113
68
|
return { score: 0.5, reason: 'LLM 不可用,使用默认分数' };
|
|
114
69
|
}
|
|
115
|
-
const model =
|
|
70
|
+
const model = getModel();
|
|
116
71
|
const prompt = `判断以下人类判断在当前情境下的相关性。
|
|
117
72
|
|
|
118
73
|
情境:${situation}
|
|
@@ -155,8 +110,8 @@ async function scoreJudgmentRelevance(judgment, situation) {
|
|
|
155
110
|
* 使用 LLM 对所有 judgment 做情境语义匹配
|
|
156
111
|
* 这是情境感知注入的核心
|
|
157
112
|
*/
|
|
158
|
-
async function getSituationallyRelevantJudgments(situation, history = [], options = {}) {
|
|
159
|
-
const { loadAllJudgments } = await
|
|
113
|
+
export async function getSituationallyRelevantJudgments(situation, history = [], options = {}) {
|
|
114
|
+
const { loadAllJudgments } = await import('./human-value-store.js');
|
|
160
115
|
const judgments = await loadAllJudgments();
|
|
161
116
|
if (judgments.length === 0) {
|
|
162
117
|
return [];
|
|
@@ -194,9 +149,9 @@ async function getSituationallyRelevantJudgments(situation, history = [], option
|
|
|
194
149
|
* 生成情境感知的价值观注入
|
|
195
150
|
* 使用 LLM 语义匹配而非关键词匹配
|
|
196
151
|
*/
|
|
197
|
-
async function generateSituationalValueInjection(situation, history = [], options = {}) {
|
|
152
|
+
export async function generateSituationalValueInjection(situation, history = [], options = {}) {
|
|
198
153
|
const { mode = 'standard', maxJudgments = 5, includeExamples = true, includeReasoning = true, minJudgmentCountForLLM = 3, } = options;
|
|
199
|
-
const { loadAllJudgments } = await
|
|
154
|
+
const { loadAllJudgments } = await import('./human-value-store.js');
|
|
200
155
|
const totalJudgments = (await loadAllJudgments()).length;
|
|
201
156
|
if (totalJudgments < minJudgmentCountForLLM) {
|
|
202
157
|
const fallbackInjection = await generateValueInjection(situation, {
|
|
@@ -328,7 +283,7 @@ function generateSituationBasedExamples(matches, mode) {
|
|
|
328
283
|
* 生成完整的基于情境的判断 Prompt
|
|
329
284
|
* 这是 generateJudgmentPromptWithValues 的情境感知版本
|
|
330
285
|
*/
|
|
331
|
-
async function generateSituationAwarePrompt(userInput, situation, history = [], options = {}) {
|
|
286
|
+
export async function generateSituationAwarePrompt(userInput, situation, history = [], options = {}) {
|
|
332
287
|
const injection = await generateSituationalValueInjection(situation, history, options);
|
|
333
288
|
const historyStr = history.length > 0
|
|
334
289
|
? history.slice(-5).map((m, i) => `[${i + 1}] ${m}`).join('\n')
|
|
@@ -441,7 +396,7 @@ ${judgments.slice(0, 3).map(j => `- **情况**: "${j.decision.substring(0, 50)}.
|
|
|
441
396
|
* 获取决策例子
|
|
442
397
|
*/
|
|
443
398
|
async function getDecisionExamples(context, limit) {
|
|
444
|
-
const { loadAllJudgments } = await
|
|
399
|
+
const { loadAllJudgments } = await import('./human-value-store.js');
|
|
445
400
|
const judgments = await loadAllJudgments();
|
|
446
401
|
const keywords = context.split(/[\s,,、]+/).filter(k => k.length >= 2);
|
|
447
402
|
const contextLower = context.toLowerCase();
|
|
@@ -478,7 +433,7 @@ async function getDecisionExamples(context, limit) {
|
|
|
478
433
|
/**
|
|
479
434
|
* 生成完整的系统 Prompt(包含价值观注入)
|
|
480
435
|
*/
|
|
481
|
-
async function generateSystemPromptWithValues(basePrompt, context, config = {}) {
|
|
436
|
+
export async function generateSystemPromptWithValues(basePrompt, context, config = {}) {
|
|
482
437
|
const injection = await generateValueInjection(context, config);
|
|
483
438
|
return `${basePrompt}
|
|
484
439
|
|
|
@@ -497,8 +452,8 @@ ${injection}
|
|
|
497
452
|
/**
|
|
498
453
|
* 生成判断用的 Prompt(包含价值观)
|
|
499
454
|
*/
|
|
500
|
-
async function generateJudgmentPromptWithValues(userInput, context, history, config = {}) {
|
|
501
|
-
const cfg = { ...
|
|
455
|
+
export async function generateJudgmentPromptWithValues(userInput, context, history, config = {}) {
|
|
456
|
+
const cfg = { ...DEFAULT_INJECTION_CONFIG, ...config };
|
|
502
457
|
const valueInjection = await generateValueInjection(context, cfg);
|
|
503
458
|
const historyStr = history.length > 0
|
|
504
459
|
? history.slice(-5).map((m, i) => `[${i + 1}] ${m}`).join('\n')
|
|
@@ -523,8 +478,8 @@ ${historyStr}
|
|
|
523
478
|
/**
|
|
524
479
|
* 生成价值摘要
|
|
525
480
|
*/
|
|
526
|
-
async function generateValueSummary() {
|
|
527
|
-
const { getValueStats } = await
|
|
481
|
+
export async function generateValueSummary() {
|
|
482
|
+
const { getValueStats } = await import('./human-value-store.js');
|
|
528
483
|
const stats = await getValueStats();
|
|
529
484
|
if (stats.total_judgments === 0) {
|
|
530
485
|
return '暂无价值观数据,请先通过决策学习积累判断样本。';
|
|
@@ -540,9 +495,9 @@ async function generateValueSummary() {
|
|
|
540
495
|
/**
|
|
541
496
|
* 检测价值观冲突
|
|
542
497
|
*/
|
|
543
|
-
async function detectValueConflicts(decision1, decision2) {
|
|
544
|
-
const values1 = await
|
|
545
|
-
const values2 = await
|
|
498
|
+
export async function detectValueConflicts(decision1, decision2) {
|
|
499
|
+
const values1 = await getRelevantValues(decision1);
|
|
500
|
+
const values2 = await getRelevantValues(decision2);
|
|
546
501
|
const conflicts = [];
|
|
547
502
|
for (const v1 of values1) {
|
|
548
503
|
for (const v2 of values2) {
|
|
@@ -561,9 +516,9 @@ async function detectValueConflicts(decision1, decision2) {
|
|
|
561
516
|
/**
|
|
562
517
|
* 根据价值观建议决策方向
|
|
563
518
|
*/
|
|
564
|
-
async function suggestBasedOnValues(situation, options) {
|
|
565
|
-
const profile = await
|
|
566
|
-
const values = await
|
|
519
|
+
export async function suggestBasedOnValues(situation, options) {
|
|
520
|
+
const profile = await getValueProfile('current');
|
|
521
|
+
const values = await getRelevantValues(situation);
|
|
567
522
|
// 简单评分
|
|
568
523
|
const scores = options.map(option => {
|
|
569
524
|
let score = 0;
|
|
@@ -589,4 +544,3 @@ async function suggestBasedOnValues(situation, options) {
|
|
|
589
544
|
`建议选择"${recommended}"。`;
|
|
590
545
|
return { recommended, reasoning };
|
|
591
546
|
}
|
|
592
|
-
//# sourceMappingURL=value-injection.js.map
|