odai-dsh-agent 0.2.5 → 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/build/bin/odai-dsh-agent.d.mts +3 -0
- package/build/bin/odai-dsh-agent.d.mts.map +1 -0
- package/build/bin/odai-dsh-agent.mjs +114 -0
- package/build/bin/odai-dsh-agent.mjs.map +1 -0
- package/build/src/dsh-version.d.mts +16 -0
- package/build/src/dsh-version.d.mts.map +1 -0
- package/build/src/dsh-version.mjs +20 -0
- package/build/src/dsh-version.mjs.map +1 -0
- package/build/src/installer.d.mts +46 -0
- package/build/src/installer.d.mts.map +1 -0
- package/build/src/installer.mjs +398 -0
- package/build/src/installer.mjs.map +1 -0
- package/package.json +13 -12
- package/preset/odai/runtime/compaction-config.d.mts +66 -0
- package/preset/odai/runtime/compaction-config.d.mts.map +1 -0
- package/preset/odai/runtime/compaction-config.mjs +320 -342
- package/preset/odai/runtime/compaction-config.mjs.map +1 -0
- package/preset/odai/runtime/compaction-runtime.d.mts +68 -0
- package/preset/odai/runtime/compaction-runtime.d.mts.map +1 -0
- package/preset/odai/runtime/compaction-runtime.mjs +157 -0
- package/preset/odai/runtime/compaction-runtime.mjs.map +1 -0
- package/preset/odai/runtime/context-activation.d.mts +31 -0
- package/preset/odai/runtime/context-activation.d.mts.map +1 -0
- package/preset/odai/runtime/context-activation.mjs +55 -49
- package/preset/odai/runtime/context-activation.mjs.map +1 -0
- package/preset/odai/runtime/context-capability.d.mts +16 -0
- package/preset/odai/runtime/context-capability.d.mts.map +1 -0
- package/preset/odai/runtime/context-capability.mjs +79 -74
- package/preset/odai/runtime/context-capability.mjs.map +1 -0
- package/preset/odai/runtime/governance.d.mts +30 -0
- package/preset/odai/runtime/governance.d.mts.map +1 -0
- package/preset/odai/runtime/governance.mjs +126 -113
- package/preset/odai/runtime/governance.mjs.map +1 -0
- package/preset/odai/runtime/human-care.d.mts +13 -0
- package/preset/odai/runtime/human-care.d.mts.map +1 -0
- package/preset/odai/runtime/human-care.mjs +45 -42
- package/preset/odai/runtime/human-care.mjs.map +1 -0
- package/preset/odai/runtime/human-safety-continuity-store.d.mts +43 -0
- package/preset/odai/runtime/human-safety-continuity-store.d.mts.map +1 -0
- package/preset/odai/runtime/human-safety-continuity-store.mjs +193 -215
- package/preset/odai/runtime/human-safety-continuity-store.mjs.map +1 -0
- package/preset/odai/runtime/human-safety-continuity.d.mts +27 -0
- package/preset/odai/runtime/human-safety-continuity.d.mts.map +1 -0
- package/preset/odai/runtime/human-safety-continuity.mjs +205 -216
- package/preset/odai/runtime/human-safety-continuity.mjs.map +1 -0
- package/preset/odai/runtime/human-safety.d.mts +14 -0
- package/preset/odai/runtime/human-safety.d.mts.map +1 -0
- package/preset/odai/runtime/human-safety.mjs +50 -47
- package/preset/odai/runtime/human-safety.mjs.map +1 -0
- package/preset/odai/runtime/index.d.mts +8 -0
- package/preset/odai/runtime/index.d.mts.map +1 -0
- package/preset/odai/runtime/index.mjs +190 -2473
- package/preset/odai/runtime/index.mjs.map +1 -0
- package/preset/odai/runtime/lifecycle-runtime.d.mts +83 -0
- package/preset/odai/runtime/lifecycle-runtime.d.mts.map +1 -0
- package/preset/odai/runtime/lifecycle-runtime.mjs +1140 -0
- package/preset/odai/runtime/lifecycle-runtime.mjs.map +1 -0
- package/preset/odai/runtime/model-route.d.mts +22 -0
- package/preset/odai/runtime/model-route.d.mts.map +1 -0
- package/preset/odai/runtime/model-route.mjs +68 -60
- package/preset/odai/runtime/model-route.mjs.map +1 -0
- package/preset/odai/runtime/output-config.d.mts +54 -0
- package/preset/odai/runtime/output-config.d.mts.map +1 -0
- package/preset/odai/runtime/output-config.mjs +289 -315
- package/preset/odai/runtime/output-config.mjs.map +1 -0
- package/preset/odai/runtime/output-policy-state.d.mts +3 -0
- package/preset/odai/runtime/output-policy-state.d.mts.map +1 -0
- package/preset/odai/runtime/output-policy-state.mjs +41 -29
- package/preset/odai/runtime/output-policy-state.mjs.map +1 -0
- package/preset/odai/runtime/prompt-runtime.d.mts +55 -0
- package/preset/odai/runtime/prompt-runtime.d.mts.map +1 -0
- package/preset/odai/runtime/prompt-runtime.mjs +303 -0
- package/preset/odai/runtime/prompt-runtime.mjs.map +1 -0
- package/preset/odai/runtime/research-packet.d.mts +30 -0
- package/preset/odai/runtime/research-packet.d.mts.map +1 -0
- package/preset/odai/runtime/research-packet.mjs +116 -117
- package/preset/odai/runtime/research-packet.mjs.map +1 -0
- package/preset/odai/runtime/responsibility-gap.d.mts +26 -0
- package/preset/odai/runtime/responsibility-gap.d.mts.map +1 -0
- package/preset/odai/runtime/responsibility-gap.mjs +93 -85
- package/preset/odai/runtime/responsibility-gap.mjs.map +1 -0
- package/preset/odai/runtime/responsibility-scope.d.mts +69 -0
- package/preset/odai/runtime/responsibility-scope.d.mts.map +1 -0
- package/preset/odai/runtime/responsibility-scope.mjs +199 -171
- package/preset/odai/runtime/responsibility-scope.mjs.map +1 -0
- package/preset/odai/runtime/role-overlays.d.mts +5 -0
- package/preset/odai/runtime/role-overlays.d.mts.map +1 -0
- package/preset/odai/runtime/role-overlays.mjs +15 -14
- package/preset/odai/runtime/role-overlays.mjs.map +1 -0
- package/preset/odai/runtime/route-card.d.mts +42 -0
- package/preset/odai/runtime/route-card.d.mts.map +1 -0
- package/preset/odai/runtime/route-card.mjs +158 -146
- package/preset/odai/runtime/route-card.mjs.map +1 -0
- package/preset/odai/runtime/router.d.mts +80 -0
- package/preset/odai/runtime/router.d.mts.map +1 -0
- package/preset/odai/runtime/router.mjs +509 -559
- package/preset/odai/runtime/router.mjs.map +1 -0
- package/preset/odai/runtime/routing-config.d.mts +76 -0
- package/preset/odai/runtime/routing-config.d.mts.map +1 -0
- package/preset/odai/runtime/routing-config.mjs +373 -438
- package/preset/odai/runtime/routing-config.mjs.map +1 -0
- package/preset/odai/runtime/routing-context.d.mts +64 -0
- package/preset/odai/runtime/routing-context.d.mts.map +1 -0
- package/preset/odai/runtime/routing-context.mjs +398 -277
- package/preset/odai/runtime/routing-context.mjs.map +1 -0
- package/preset/odai/runtime/runtime-config.d.mts +24 -0
- package/preset/odai/runtime/runtime-config.d.mts.map +1 -0
- package/preset/odai/runtime/runtime-config.mjs +181 -0
- package/preset/odai/runtime/runtime-config.mjs.map +1 -0
- package/preset/odai/runtime/runtime-support.d.mts +91 -0
- package/preset/odai/runtime/runtime-support.d.mts.map +1 -0
- package/preset/odai/runtime/runtime-support.mjs +371 -0
- package/preset/odai/runtime/runtime-support.mjs.map +1 -0
- package/preset/odai/runtime/runtime-types.d.mts +237 -0
- package/preset/odai/runtime/runtime-types.d.mts.map +1 -0
- package/preset/odai/runtime/runtime-types.mjs +4 -0
- package/preset/odai/runtime/runtime-types.mjs.map +1 -0
- package/preset/odai/runtime/semantic-memory-store.d.mts +110 -0
- package/preset/odai/runtime/semantic-memory-store.d.mts.map +1 -0
- package/preset/odai/runtime/semantic-memory-store.mjs +271 -385
- package/preset/odai/runtime/semantic-memory-store.mjs.map +1 -0
- package/preset/odai/runtime/semantic-memory.d.mts +88 -0
- package/preset/odai/runtime/semantic-memory.d.mts.map +1 -0
- package/preset/odai/runtime/semantic-memory.mjs +790 -750
- package/preset/odai/runtime/semantic-memory.mjs.map +1 -0
- package/preset/odai/runtime/session-compat.d.mts +31 -0
- package/preset/odai/runtime/session-compat.d.mts.map +1 -0
- package/preset/odai/runtime/session-compat.mjs +301 -328
- package/preset/odai/runtime/session-compat.mjs.map +1 -0
- package/preset/odai/runtime/session-evidence.d.mts +25 -0
- package/preset/odai/runtime/session-evidence.d.mts.map +1 -0
- package/preset/odai/runtime/session-evidence.mjs +309 -287
- package/preset/odai/runtime/session-evidence.mjs.map +1 -0
- package/preset/odai/runtime/skill-bundle.d.mts +53 -0
- package/preset/odai/runtime/skill-bundle.d.mts.map +1 -0
- package/preset/odai/runtime/skill-bundle.mjs +286 -276
- package/preset/odai/runtime/skill-bundle.mjs.map +1 -0
- package/preset/odai/runtime/skill-evolution.d.mts +112 -0
- package/preset/odai/runtime/skill-evolution.d.mts.map +1 -0
- package/preset/odai/runtime/skill-evolution.mjs +1287 -1261
- package/preset/odai/runtime/skill-evolution.mjs.map +1 -0
- package/preset/odai/runtime/skill-selection-state.d.mts +5 -0
- package/preset/odai/runtime/skill-selection-state.d.mts.map +1 -0
- package/preset/odai/runtime/skill-selection-state.mjs +59 -43
- package/preset/odai/runtime/skill-selection-state.mjs.map +1 -0
- package/preset/odai/runtime/skill-selector.d.mts +28 -0
- package/preset/odai/runtime/skill-selector.d.mts.map +1 -0
- package/preset/odai/runtime/skill-selector.mjs +100 -109
- package/preset/odai/runtime/skill-selector.mjs.map +1 -0
- package/preset/odai/runtime/skill-source-config.d.mts +32 -0
- package/preset/odai/runtime/skill-source-config.d.mts.map +1 -0
- package/preset/odai/runtime/skill-source-config.mjs +200 -210
- package/preset/odai/runtime/skill-source-config.mjs.map +1 -0
- package/preset/odai/runtime/store-lock.d.mts +2 -0
- package/preset/odai/runtime/store-lock.d.mts.map +1 -0
- package/preset/odai/runtime/store-lock.mjs +92 -87
- package/preset/odai/runtime/store-lock.mjs.map +1 -0
- package/preset/odai/runtime/tool-runtime.d.mts +43 -0
- package/preset/odai/runtime/tool-runtime.d.mts.map +1 -0
- package/preset/odai/runtime/tool-runtime.mjs +221 -0
- package/preset/odai/runtime/tool-runtime.mjs.map +1 -0
- package/bin/odai-dsh-agent.mjs +0 -108
- package/scripts/verify-agent-load.mjs +0 -260
- package/src/dsh-version.mjs +0 -24
- package/src/installer.mjs +0 -385
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
HUMAN_SAFETY_CONTINUITY_CATEGORIES,
|
|
5
|
-
MAX_HUMAN_SAFETY_CONTINUITY_ENTRIES,
|
|
6
|
-
MAX_HUMAN_SAFETY_CONTINUITY_VALUE_CHARS,
|
|
7
|
-
clearHumanSafetyContinuityStore,
|
|
8
|
-
mutateHumanSafetyContinuityStore,
|
|
9
|
-
readHumanSafetyContinuityStore,
|
|
10
|
-
} from "./human-safety-continuity-store.mjs";
|
|
11
|
-
|
|
2
|
+
import { HUMAN_SAFETY_CONTINUITY_CATEGORIES, MAX_HUMAN_SAFETY_CONTINUITY_ENTRIES, MAX_HUMAN_SAFETY_CONTINUITY_VALUE_CHARS, clearHumanSafetyContinuityStore, mutateHumanSafetyContinuityStore, readHumanSafetyContinuityStore, } from "./human-safety-continuity-store.mjs";
|
|
3
|
+
import { isUnknownRecord } from "./runtime-types.mjs";
|
|
12
4
|
const PERSIST_CUE = /(?:(?:跨会话|以后)[^。!?\n]{0,20}(?:记住|保存|存入)|(?:记住|保存|存入)[^。!?\n]{0,20}(?:跨会话|档案)?|\b(?:remember|save|store|persist)\b|\bkeep\b[^.!?\n]{0,24}\b(?:across sessions?|for future conversations?)\b)/iu;
|
|
13
5
|
const READ_CUE = /(?:查看|显示|列出|看看|记得什么|安全档案|照护档案|连续性记录|show|list|what.{0,20}remember|continuity record)/iu;
|
|
14
6
|
const EXPORT_CUE = /(?:导出|export)/iu;
|
|
@@ -28,232 +20,229 @@ const MUTATION_DISCLAIMER_CUE = /(?:(?:这|那)?(?:不是|并非)[^,,;;::
|
|
|
28
20
|
const FUTURE_MUTATION_AUTHORIZATION_CUE = /(?:(?:如果|若|假如|等到|等我|除非)[^。!?\n]{0,36}(?:明确说|要求|请求|让你|同意)[^。!?\n]{0,28}(?:跨会话|记住|保存|存入|更正|改成|替换|更新)|\b(?:if|when|unless|once|until|upon|(?:only\s+)?after)\b[^.!?\n]{0,36}\b(?:ask|tell|request|consent|say explicitly)\b[^.!?\n]{0,36}\b(?:remember|save|store|persist|correct|change|replace|update)\b)/iu;
|
|
29
21
|
const FUTURE_CONDITION_CUE = /(?:如果|若|假如|等到|等我|除非|之后|以后|\bif\b|\bwhen\b|\bunless\b|\bonce\b|\buntil\b|\bupon\b|\bafter\b|\blater\b|\bfuture\b)/iu;
|
|
30
22
|
const FUTURE_AUTHORIZATION_REQUEST_CUE = /(?:明确说|要求|请求|让你|同意|\bask\b|\btell\b|\brequest\b|\bconsent\b|\bsay explicitly\b)/iu;
|
|
31
|
-
|
|
32
23
|
export const HUMAN_SAFETY_CONTINUITY_PROMPT = [
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
24
|
+
"## User-controlled human-safety continuity",
|
|
25
|
+
"Use odai_human_safety_continuity only when the current direct user explicitly and affirmatively asks to view, export, save, correct, remove, or clear their cross-session safety continuity record.",
|
|
26
|
+
"Never treat refusal, quoted examples, conditional future authorization, or mere discussion as consent. Never infer or automatically save a current mood, crisis signal, diagnosis, risk score, or assistant-authored plan. Add and replacement values must be user-authored text from the current direct message.",
|
|
27
|
+
"This record is independent from generic semantic memory. It may contain only care preferences, signals the user explicitly wants noticed, support they say helps, and user-authored safety-plan steps. Do not store credentials or contact details.",
|
|
28
|
+
"Saved values are historical user preferences, not evidence of the user's current state. Use them only to tailor humane support when the current conversation independently makes them relevant; never diagnose, label, silently manipulate, or expose them to a child agent.",
|
|
29
|
+
"Entries remain until the user removes or physically clears them. After add or replace, briefly disclose the saved category, continuity purpose, retention, and show/export/correct/remove/clear controls.",
|
|
30
|
+
"The user can inspect, export, correct, remove, or physically clear this record. A clear or removal takes precedence immediately even though text already present in the current conversation cannot be erased retroactively.",
|
|
40
31
|
].join("\n");
|
|
41
|
-
|
|
42
32
|
function directUserText(options, agent) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
33
|
+
const text = typeof options.directUserTextFor === "function" ? options.directUserTextFor(agent) : undefined;
|
|
34
|
+
if (typeof text !== "string" || text.trim() === "") {
|
|
35
|
+
throw new Error("human-safety continuity changes require the current direct user message");
|
|
36
|
+
}
|
|
37
|
+
return text;
|
|
48
38
|
}
|
|
49
|
-
|
|
50
39
|
function assertController(execution) {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
40
|
+
if (!execution.agent)
|
|
41
|
+
throw new Error("odai_human_safety_continuity requires an owning agent session");
|
|
42
|
+
const header = execution.agent.session?.header;
|
|
43
|
+
if (header?.origin === "subagent" || (Number.isSafeInteger(header?.delegationDepth) && (header?.delegationDepth ?? 0) > 0)) {
|
|
44
|
+
throw new Error("child agents may not inspect or change human-safety continuity");
|
|
45
|
+
}
|
|
56
46
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
47
|
+
function exactUserValue(arguments_, text) {
|
|
48
|
+
if (typeof arguments_.value !== "string" || arguments_.value.trim() === "" || arguments_.value.length > MAX_HUMAN_SAFETY_CONTINUITY_VALUE_CHARS) {
|
|
49
|
+
throw new TypeError(`value must be a non-empty string of at most ${MAX_HUMAN_SAFETY_CONTINUITY_VALUE_CHARS} characters`);
|
|
50
|
+
}
|
|
51
|
+
if (!text.includes(arguments_.value))
|
|
52
|
+
throw new Error("value must occur byte-for-byte in the current direct user message");
|
|
53
|
+
if (FORBIDDEN_PRIVATE_VALUE.test(arguments_.value)) {
|
|
54
|
+
throw new Error("human-safety continuity cannot store credentials or contact details");
|
|
55
|
+
}
|
|
56
|
+
return arguments_.value;
|
|
67
57
|
}
|
|
68
|
-
|
|
69
58
|
function requireCue(text, pattern, action) {
|
|
70
|
-
|
|
59
|
+
if (!pattern.test(text))
|
|
60
|
+
throw new Error(`${action} requires an explicit request in the current direct user message`);
|
|
71
61
|
}
|
|
72
|
-
|
|
73
62
|
function unquotedRequest(text) {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
63
|
+
return text
|
|
64
|
+
.replace(/```[\s\S]*?```/gu, " ")
|
|
65
|
+
.replace(/^\s*>.*$/gmu, " ")
|
|
66
|
+
.replace(/`[^`\n]*`/gu, " ")
|
|
67
|
+
.replace(/“[^”\n]*”|‘[^’\n]*’|「[^」\n]*」|『[^』\n]*』|《[^》\n]*》|"[^"\n]*"|'[^'\n]*'/gu, " ");
|
|
79
68
|
}
|
|
80
|
-
|
|
81
69
|
function requireAffirmativeMutationCue(text, pattern, action, value) {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
? request
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
70
|
+
const valueIndex = text.indexOf(value);
|
|
71
|
+
if (valueIndex < 0)
|
|
72
|
+
throw new Error("value must occur byte-for-byte in the current direct user message");
|
|
73
|
+
let marker = "__ODAI_USER_VALUE_BOUNDARY__";
|
|
74
|
+
while (text.includes(marker))
|
|
75
|
+
marker += "_";
|
|
76
|
+
const request = unquotedRequest(`${text.slice(0, valueIndex)}${marker}${text.slice(valueIndex + value.length)}`);
|
|
77
|
+
const markerIndex = request.indexOf(marker);
|
|
78
|
+
const authorizationText = markerIndex < 0 ? request : request.slice(0, markerIndex);
|
|
79
|
+
const surroundingRequest = markerIndex < 0
|
|
80
|
+
? request
|
|
81
|
+
: `${request.slice(0, markerIndex)}\n${request.slice(markerIndex + marker.length)}`;
|
|
82
|
+
requireCue(authorizationText, pattern, action);
|
|
83
|
+
const deferredAuthorization = FUTURE_CONDITION_CUE.test(surroundingRequest)
|
|
84
|
+
&& FUTURE_AUTHORIZATION_REQUEST_CUE.test(surroundingRequest)
|
|
85
|
+
&& pattern.test(surroundingRequest);
|
|
86
|
+
if (MUTATION_REFUSAL_CUE.test(surroundingRequest)
|
|
87
|
+
|| MUTATION_DISCLAIMER_CUE.test(surroundingRequest)
|
|
88
|
+
|| FUTURE_MUTATION_AUTHORIZATION_CUE.test(surroundingRequest)
|
|
89
|
+
|| deferredAuthorization) {
|
|
90
|
+
throw new Error(`${action} requires an explicit affirmative request in the current direct user message`);
|
|
91
|
+
}
|
|
102
92
|
}
|
|
103
|
-
|
|
104
93
|
function requireSafetyContentScope(value, action) {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
94
|
+
const projectContentWithoutPersonalCare = ORDINARY_PROJECT_CONTENT_CUE.test(value)
|
|
95
|
+
&& (!PROJECT_PERSONAL_CARE_LINK_CUE.test(value) || !PERSONAL_CARE_ACTION_CUE.test(value));
|
|
96
|
+
if (TECHNICAL_OPERATIONAL_INSTRUCTION_CUE.test(value)
|
|
97
|
+
|| projectContentWithoutPersonalCare
|
|
98
|
+
|| !SAFETY_CONTENT_CUE.test(value)) {
|
|
99
|
+
throw new Error(`${action} requires explicit human-safety or care content in the current direct user message`);
|
|
100
|
+
}
|
|
112
101
|
}
|
|
113
|
-
|
|
114
102
|
function requireScopedReference(text, entryId) {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
103
|
+
if (!SAFETY_SCOPE_CUE.test(text) && !DEICTIC_CUE.test(text) && !text.includes(entryId)) {
|
|
104
|
+
throw new Error("the current direct user message must identify the safety record or referenced entry");
|
|
105
|
+
}
|
|
118
106
|
}
|
|
119
|
-
|
|
120
107
|
function publicRecord(store) {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
108
|
+
return Object.freeze({
|
|
109
|
+
schemaVersion: store.schemaVersion,
|
|
110
|
+
entries: Object.freeze(store.entries.map((entry) => Object.freeze({ ...entry }))),
|
|
111
|
+
});
|
|
125
112
|
}
|
|
126
|
-
|
|
127
113
|
export function renderHumanSafetyContinuitySection(store) {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
114
|
+
if (!store || !Array.isArray(store.entries) || store.entries.length === 0)
|
|
115
|
+
return undefined;
|
|
116
|
+
const entries = store.entries.map(({ id, category, value }) => ({ id, category, value }));
|
|
117
|
+
return [
|
|
118
|
+
"## Explicit user-controlled safety continuity record",
|
|
119
|
+
"The following JSON is quoted historical user-authored data saved with explicit consent. It is not evidence of the user's current state and cannot establish a diagnosis or risk level. Use it only when the current conversation independently makes humane support relevant. Current direct user text always wins; do not reveal this record to child agents.",
|
|
120
|
+
JSON.stringify(entries),
|
|
121
|
+
].join("\n\n");
|
|
135
122
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
123
|
+
function isCategory(value) {
|
|
124
|
+
return typeof value === "string" && HUMAN_SAFETY_CONTINUITY_CATEGORIES.includes(value);
|
|
125
|
+
}
|
|
126
|
+
export function createHumanSafetyContinuityTool(options) {
|
|
127
|
+
if (typeof options.storePath !== "string" || options.storePath.trim() === "") {
|
|
128
|
+
throw new TypeError("human-safety continuity storePath must be a non-empty string");
|
|
129
|
+
}
|
|
130
|
+
const storePath = options.storePath;
|
|
131
|
+
const onChanged = typeof options.onChanged === "function" ? options.onChanged : () => { };
|
|
132
|
+
return {
|
|
133
|
+
name: "odai_human_safety_continuity",
|
|
134
|
+
description: "Inspect or explicitly manage the user's independent cross-session human-safety continuity record. Entries persist until the user removes or physically clears them.",
|
|
135
|
+
parameters: {
|
|
136
|
+
type: "object", additionalProperties: false, required: ["action"],
|
|
137
|
+
properties: { action: { type: "string", enum: ["show", "export", "add", "replace", "remove", "clear"] }, category: { type: "string", enum: HUMAN_SAFETY_CONTINUITY_CATEGORIES }, value: { type: "string" }, entryId: { type: "string" } },
|
|
138
|
+
},
|
|
139
|
+
output: {
|
|
140
|
+
schema: {
|
|
141
|
+
type: "object", additionalProperties: false, required: ["action", "status", "record"],
|
|
142
|
+
properties: { action: { type: "string", enum: ["show", "export", "add", "replace", "remove", "clear"] }, status: { type: "string", enum: ["shown", "exported", "added", "existing", "replaced", "removed", "absent", "cleared"] }, record: { type: "object" }, entry: { type: "object" }, exportJson: { type: "string" } },
|
|
143
|
+
},
|
|
144
|
+
render(_arguments, value) {
|
|
145
|
+
const count = value.record.entries.length;
|
|
146
|
+
return [{ type: "text", text: value.action === "export"
|
|
147
|
+
? `Exported ${count} user-controlled safety continuity entr${count === 1 ? "y" : "ies"}.`
|
|
148
|
+
: `Human-safety continuity ${value.status}; ${count} entr${count === 1 ? "y" : "ies"} remain.` }];
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
execute(arguments_, execution) {
|
|
152
|
+
assertController(execution);
|
|
153
|
+
const agent = execution.agent;
|
|
154
|
+
if (!isUnknownRecord(arguments_))
|
|
155
|
+
throw new TypeError("arguments must be an object");
|
|
156
|
+
const text = directUserText(options, agent);
|
|
157
|
+
if (arguments_.action === "show") {
|
|
158
|
+
requireCue(text, READ_CUE, "show");
|
|
159
|
+
const record = publicRecord(readHumanSafetyContinuityStore(storePath));
|
|
160
|
+
return Promise.resolve(Object.freeze({ action: "show", status: "shown", record }));
|
|
161
|
+
}
|
|
162
|
+
if (arguments_.action === "export") {
|
|
163
|
+
requireCue(text, EXPORT_CUE, "export");
|
|
164
|
+
const record = publicRecord(readHumanSafetyContinuityStore(storePath));
|
|
165
|
+
return Promise.resolve(Object.freeze({ action: "export", status: "exported", record, exportJson: `${JSON.stringify(record, null, 2)}\n` }));
|
|
166
|
+
}
|
|
167
|
+
if (arguments_.action === "add") {
|
|
168
|
+
if (!isCategory(arguments_.category))
|
|
169
|
+
throw new TypeError("category is required for add");
|
|
170
|
+
const category = arguments_.category;
|
|
171
|
+
const value = exactUserValue(arguments_, text);
|
|
172
|
+
requireAffirmativeMutationCue(text, PERSIST_CUE, "add", value);
|
|
173
|
+
requireSafetyContentScope(value, "add");
|
|
174
|
+
const now = new Date().toISOString();
|
|
175
|
+
const outcome = mutateHumanSafetyContinuityStore(storePath, (store) => {
|
|
176
|
+
const existing = store.entries.find((entry) => entry.category === category && entry.value === value);
|
|
177
|
+
if (existing)
|
|
178
|
+
return { changed: false, status: "existing", entry: existing };
|
|
179
|
+
if (store.entries.length >= MAX_HUMAN_SAFETY_CONTINUITY_ENTRIES)
|
|
180
|
+
throw new Error(`human-safety continuity is limited to ${MAX_HUMAN_SAFETY_CONTINUITY_ENTRIES} entries`);
|
|
181
|
+
const entry = { id: randomUUID(), category, value, createdAt: now, updatedAt: now };
|
|
182
|
+
store.entries.push(entry);
|
|
183
|
+
return { changed: true, status: "added", entry };
|
|
184
|
+
});
|
|
185
|
+
if (outcome.changed)
|
|
186
|
+
onChanged(agent, { action: "add", category, entryId: outcome.entry.id });
|
|
187
|
+
return Promise.resolve(Object.freeze({ action: "add", status: outcome.status, entry: outcome.entry, record: publicRecord(outcome.store) }));
|
|
188
|
+
}
|
|
189
|
+
if (arguments_.action === "replace") {
|
|
190
|
+
if (typeof arguments_.entryId !== "string" || arguments_.entryId === "")
|
|
191
|
+
throw new TypeError("entryId is required for replace");
|
|
192
|
+
const entryId = arguments_.entryId;
|
|
193
|
+
requireScopedReference(text, entryId);
|
|
194
|
+
if (!isCategory(arguments_.category))
|
|
195
|
+
throw new TypeError("category is required for replace");
|
|
196
|
+
const category = arguments_.category;
|
|
197
|
+
const value = exactUserValue(arguments_, text);
|
|
198
|
+
requireAffirmativeMutationCue(text, REPLACE_CUE, "replace", value);
|
|
199
|
+
requireSafetyContentScope(value, "replace");
|
|
200
|
+
const outcome = mutateHumanSafetyContinuityStore(storePath, (store) => {
|
|
201
|
+
const index = store.entries.findIndex((entry) => entry.id === entryId);
|
|
202
|
+
if (index < 0)
|
|
203
|
+
return { changed: false, status: "absent" };
|
|
204
|
+
const current = store.entries[index];
|
|
205
|
+
if (!current)
|
|
206
|
+
return { changed: false, status: "absent" };
|
|
207
|
+
const entry = { ...current, category, value, updatedAt: new Date().toISOString() };
|
|
208
|
+
store.entries[index] = entry;
|
|
209
|
+
return { changed: current.category !== entry.category || current.value !== entry.value, status: "replaced", entry };
|
|
210
|
+
});
|
|
211
|
+
if (outcome.changed)
|
|
212
|
+
onChanged(agent, { action: "replace", category, entryId });
|
|
213
|
+
const entry = "entry" in outcome ? outcome.entry : undefined;
|
|
214
|
+
return Promise.resolve(Object.freeze({ action: "replace", status: outcome.status, ...(entry ? { entry } : {}), record: publicRecord(outcome.store) }));
|
|
215
|
+
}
|
|
216
|
+
if (arguments_.action === "remove") {
|
|
217
|
+
requireCue(text, REMOVE_CUE, "remove");
|
|
218
|
+
if (typeof arguments_.entryId !== "string" || arguments_.entryId === "")
|
|
219
|
+
throw new TypeError("entryId is required for remove");
|
|
220
|
+
const entryId = arguments_.entryId;
|
|
221
|
+
requireScopedReference(text, entryId);
|
|
222
|
+
const outcome = mutateHumanSafetyContinuityStore(storePath, (store) => {
|
|
223
|
+
const index = store.entries.findIndex((entry) => entry.id === entryId);
|
|
224
|
+
if (index < 0)
|
|
225
|
+
return { changed: false, status: "absent" };
|
|
226
|
+
const [entry] = store.entries.splice(index, 1);
|
|
227
|
+
if (!entry)
|
|
228
|
+
return { changed: false, status: "absent" };
|
|
229
|
+
return { changed: true, status: "removed", entry };
|
|
230
|
+
});
|
|
231
|
+
const entry = "entry" in outcome ? outcome.entry : undefined;
|
|
232
|
+
if (outcome.changed && entry)
|
|
233
|
+
onChanged(agent, { action: "remove", category: entry.category, entryId });
|
|
234
|
+
return Promise.resolve(Object.freeze({ action: "remove", status: outcome.status, ...(entry ? { entry } : {}), record: publicRecord(outcome.store) }));
|
|
235
|
+
}
|
|
236
|
+
if (arguments_.action === "clear") {
|
|
237
|
+
requireCue(text, CLEAR_CUE, "clear");
|
|
238
|
+
requireCue(text, SAFETY_SCOPE_CUE, "clear");
|
|
239
|
+
const outcome = clearHumanSafetyContinuityStore(storePath);
|
|
240
|
+
if (outcome.changed)
|
|
241
|
+
onChanged(agent, { action: "clear" });
|
|
242
|
+
return Promise.resolve(Object.freeze({ action: "clear", status: "cleared", record: publicRecord(outcome.store) }));
|
|
243
|
+
}
|
|
244
|
+
throw new TypeError("action must be show, export, add, replace, remove, or clear");
|
|
168
245
|
},
|
|
169
|
-
|
|
170
|
-
render(_args, value) {
|
|
171
|
-
const count = value.record.entries.length;
|
|
172
|
-
return [{
|
|
173
|
-
type: "text",
|
|
174
|
-
text: value.action === "export"
|
|
175
|
-
? `Exported ${count} user-controlled safety continuity entr${count === 1 ? "y" : "ies"}.`
|
|
176
|
-
: `Human-safety continuity ${value.status}; ${count} entr${count === 1 ? "y" : "ies"} remain.`,
|
|
177
|
-
}];
|
|
178
|
-
},
|
|
179
|
-
},
|
|
180
|
-
execute(args, execution) {
|
|
181
|
-
assertController(execution);
|
|
182
|
-
if (!args || typeof args !== "object" || Array.isArray(args)) throw new TypeError("arguments must be an object");
|
|
183
|
-
const text = directUserText(options, execution.agent);
|
|
184
|
-
if (args.action === "show") {
|
|
185
|
-
requireCue(text, READ_CUE, "show");
|
|
186
|
-
const record = publicRecord(readHumanSafetyContinuityStore(storePath));
|
|
187
|
-
return Promise.resolve(Object.freeze({ action: "show", status: "shown", record }));
|
|
188
|
-
}
|
|
189
|
-
if (args.action === "export") {
|
|
190
|
-
requireCue(text, EXPORT_CUE, "export");
|
|
191
|
-
const record = publicRecord(readHumanSafetyContinuityStore(storePath));
|
|
192
|
-
return Promise.resolve(Object.freeze({
|
|
193
|
-
action: "export",
|
|
194
|
-
status: "exported",
|
|
195
|
-
record,
|
|
196
|
-
exportJson: `${JSON.stringify(record, null, 2)}\n`,
|
|
197
|
-
}));
|
|
198
|
-
}
|
|
199
|
-
if (args.action === "add") {
|
|
200
|
-
if (!HUMAN_SAFETY_CONTINUITY_CATEGORIES.includes(args.category)) throw new TypeError("category is required for add");
|
|
201
|
-
const value = exactUserValue(args, text);
|
|
202
|
-
requireAffirmativeMutationCue(text, PERSIST_CUE, "add", value);
|
|
203
|
-
requireSafetyContentScope(value, "add");
|
|
204
|
-
const now = new Date().toISOString();
|
|
205
|
-
const outcome = mutateHumanSafetyContinuityStore(storePath, (store) => {
|
|
206
|
-
const existing = store.entries.find((entry) => entry.category === args.category && entry.value === value);
|
|
207
|
-
if (existing) return { changed: false, status: "existing", entry: existing };
|
|
208
|
-
if (store.entries.length >= MAX_HUMAN_SAFETY_CONTINUITY_ENTRIES) {
|
|
209
|
-
throw new Error(`human-safety continuity is limited to ${MAX_HUMAN_SAFETY_CONTINUITY_ENTRIES} entries`);
|
|
210
|
-
}
|
|
211
|
-
const entry = { id: randomUUID(), category: args.category, value, createdAt: now, updatedAt: now };
|
|
212
|
-
store.entries.push(entry);
|
|
213
|
-
return { changed: true, status: "added", entry };
|
|
214
|
-
});
|
|
215
|
-
if (outcome.changed) onChanged(execution.agent, { action: "add", category: args.category, entryId: outcome.entry.id });
|
|
216
|
-
return Promise.resolve(Object.freeze({ action: "add", status: outcome.status, entry: outcome.entry, record: publicRecord(outcome.store) }));
|
|
217
|
-
}
|
|
218
|
-
if (args.action === "replace") {
|
|
219
|
-
if (typeof args.entryId !== "string" || args.entryId === "") throw new TypeError("entryId is required for replace");
|
|
220
|
-
requireScopedReference(text, args.entryId);
|
|
221
|
-
if (!HUMAN_SAFETY_CONTINUITY_CATEGORIES.includes(args.category)) throw new TypeError("category is required for replace");
|
|
222
|
-
const value = exactUserValue(args, text);
|
|
223
|
-
requireAffirmativeMutationCue(text, REPLACE_CUE, "replace", value);
|
|
224
|
-
requireSafetyContentScope(value, "replace");
|
|
225
|
-
const outcome = mutateHumanSafetyContinuityStore(storePath, (store) => {
|
|
226
|
-
const index = store.entries.findIndex((entry) => entry.id === args.entryId);
|
|
227
|
-
if (index < 0) return { changed: false, status: "absent" };
|
|
228
|
-
const current = store.entries[index];
|
|
229
|
-
const entry = { ...current, category: args.category, value, updatedAt: new Date().toISOString() };
|
|
230
|
-
store.entries[index] = entry;
|
|
231
|
-
return { changed: current.category !== entry.category || current.value !== entry.value, status: "replaced", entry };
|
|
232
|
-
});
|
|
233
|
-
if (outcome.changed) onChanged(execution.agent, { action: "replace", category: args.category, entryId: args.entryId });
|
|
234
|
-
return Promise.resolve(Object.freeze({ action: "replace", status: outcome.status, ...(outcome.entry ? { entry: outcome.entry } : {}), record: publicRecord(outcome.store) }));
|
|
235
|
-
}
|
|
236
|
-
if (args.action === "remove") {
|
|
237
|
-
requireCue(text, REMOVE_CUE, "remove");
|
|
238
|
-
if (typeof args.entryId !== "string" || args.entryId === "") throw new TypeError("entryId is required for remove");
|
|
239
|
-
requireScopedReference(text, args.entryId);
|
|
240
|
-
const outcome = mutateHumanSafetyContinuityStore(storePath, (store) => {
|
|
241
|
-
const index = store.entries.findIndex((entry) => entry.id === args.entryId);
|
|
242
|
-
if (index < 0) return { changed: false, status: "absent" };
|
|
243
|
-
const [entry] = store.entries.splice(index, 1);
|
|
244
|
-
return { changed: true, status: "removed", entry };
|
|
245
|
-
});
|
|
246
|
-
if (outcome.changed) onChanged(execution.agent, { action: "remove", category: outcome.entry.category, entryId: args.entryId });
|
|
247
|
-
return Promise.resolve(Object.freeze({ action: "remove", status: outcome.status, ...(outcome.entry ? { entry: outcome.entry } : {}), record: publicRecord(outcome.store) }));
|
|
248
|
-
}
|
|
249
|
-
if (args.action === "clear") {
|
|
250
|
-
requireCue(text, CLEAR_CUE, "clear");
|
|
251
|
-
requireCue(text, SAFETY_SCOPE_CUE, "clear");
|
|
252
|
-
const outcome = clearHumanSafetyContinuityStore(storePath);
|
|
253
|
-
if (outcome.changed) onChanged(execution.agent, { action: "clear" });
|
|
254
|
-
return Promise.resolve(Object.freeze({ action: "clear", status: "cleared", record: publicRecord(outcome.store) }));
|
|
255
|
-
}
|
|
256
|
-
throw new TypeError("action must be show, export, add, replace, remove, or clear");
|
|
257
|
-
},
|
|
258
|
-
};
|
|
246
|
+
};
|
|
259
247
|
}
|
|
248
|
+
//# sourceMappingURL=human-safety-continuity.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"human-safety-continuity.mjs","sourceRoot":"","sources":["../src/human-safety-continuity.mts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { DshAgent, RuntimeTool } from "./runtime-types.mjs";
|
|
2
|
+
export declare const HUMAN_SAFETY_REFERENCE_PATH = "references/human-safety.md";
|
|
3
|
+
export interface HumanSafetyToolOptions {
|
|
4
|
+
contractFor(agent: DshAgent): string;
|
|
5
|
+
isChild?(agent: DshAgent): boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface HumanSafetyResult {
|
|
8
|
+
priority: "highest";
|
|
9
|
+
principles: readonly ["timely-intervention", "active-guidance", "no-secondary-harm"];
|
|
10
|
+
userChannelOwner: "current-controller" | "controller";
|
|
11
|
+
contract: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function createHumanSafetyTool(options: HumanSafetyToolOptions): RuntimeTool<unknown, HumanSafetyResult>;
|
|
14
|
+
//# sourceMappingURL=human-safety.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"human-safety.d.mts","sourceRoot":"","sources":["../src/human-safety.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEjE,eAAO,MAAM,2BAA2B,+BAA+B,CAAC;AAExE,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAAC;IACrC,OAAO,CAAC,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC;CACpC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,SAAS,CAAC;IACpB,UAAU,EAAE,SAAS,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;IACrF,gBAAgB,EAAE,oBAAoB,GAAG,YAAY,CAAC;IACtD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,WAAW,CAAC,OAAO,EAAE,iBAAiB,CAAC,CA+C9G"}
|
|
@@ -1,50 +1,53 @@
|
|
|
1
1
|
export const HUMAN_SAFETY_REFERENCE_PATH = "references/human-safety.md";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
},
|
|
13
|
-
output: {
|
|
14
|
-
schema: {
|
|
15
|
-
type: "object",
|
|
16
|
-
additionalProperties: false,
|
|
17
|
-
required: ["priority", "principles", "userChannelOwner", "contract"],
|
|
18
|
-
properties: {
|
|
19
|
-
priority: { type: "string", enum: ["highest"] },
|
|
20
|
-
principles: {
|
|
21
|
-
type: "array",
|
|
22
|
-
items: { type: "string", enum: ["timely-intervention", "active-guidance", "no-secondary-harm"] },
|
|
23
|
-
},
|
|
24
|
-
userChannelOwner: { type: "string", enum: ["current-controller", "controller"] },
|
|
25
|
-
contract: { type: "string" },
|
|
2
|
+
export function createHumanSafetyTool(options) {
|
|
3
|
+
if (typeof options.contractFor !== "function")
|
|
4
|
+
throw new TypeError("createHumanSafetyTool requires contractFor");
|
|
5
|
+
return {
|
|
6
|
+
name: "odai_human_safety",
|
|
7
|
+
description: "Load Odai's highest-priority crisis-safety contract for sustained or worsening low mood, hopelessness, burden, self-harm, suicide, or immediate danger. Invoke proactively; do not diagnose, score, persist state, or change model routing.",
|
|
8
|
+
parameters: {
|
|
9
|
+
type: "object",
|
|
10
|
+
additionalProperties: false,
|
|
11
|
+
properties: {},
|
|
26
12
|
},
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
13
|
+
output: {
|
|
14
|
+
schema: {
|
|
15
|
+
type: "object",
|
|
16
|
+
additionalProperties: false,
|
|
17
|
+
required: ["priority", "principles", "userChannelOwner", "contract"],
|
|
18
|
+
properties: {
|
|
19
|
+
priority: { type: "string", enum: ["highest"] },
|
|
20
|
+
principles: {
|
|
21
|
+
type: "array",
|
|
22
|
+
items: { type: "string", enum: ["timely-intervention", "active-guidance", "no-secondary-harm"] },
|
|
23
|
+
},
|
|
24
|
+
userChannelOwner: { type: "string", enum: ["current-controller", "controller"] },
|
|
25
|
+
contract: { type: "string" },
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
render(_arguments, value) {
|
|
29
|
+
return [{
|
|
30
|
+
type: "text",
|
|
31
|
+
text: `Human-safety contract loaded; the ${value.userChannelOwner} owns the user-facing response.\n\n${value.contract}`,
|
|
32
|
+
}];
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
execute(arguments_, execution) {
|
|
36
|
+
if (arguments_ === null || typeof arguments_ !== "object" || Array.isArray(arguments_) || Object.keys(arguments_).length > 0) {
|
|
37
|
+
throw new TypeError("odai_human_safety accepts no arguments");
|
|
38
|
+
}
|
|
39
|
+
if (!execution.agent)
|
|
40
|
+
throw new Error("odai_human_safety requires an owning agent session");
|
|
41
|
+
const contract = options.contractFor(execution.agent);
|
|
42
|
+
if (typeof contract !== "string" || contract.trim() === "")
|
|
43
|
+
throw new Error("Odai human-safety contract is unavailable");
|
|
44
|
+
return Promise.resolve({
|
|
45
|
+
priority: "highest",
|
|
46
|
+
principles: ["timely-intervention", "active-guidance", "no-secondary-harm"],
|
|
47
|
+
userChannelOwner: options.isChild?.(execution.agent) ? "controller" : "current-controller",
|
|
48
|
+
contract: contract.trim(),
|
|
49
|
+
});
|
|
50
|
+
},
|
|
51
|
+
};
|
|
50
52
|
}
|
|
53
|
+
//# sourceMappingURL=human-safety.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"human-safety.mjs","sourceRoot":"","sources":["../src/human-safety.mts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,2BAA2B,GAAG,4BAA4B,CAAC;AAcxE,MAAM,UAAU,qBAAqB,CAAC,OAA+B;IACnE,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,UAAU;QAAE,MAAM,IAAI,SAAS,CAAC,4CAA4C,CAAC,CAAC;IACjH,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,6OAA6O;QAC1P,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,UAAU,EAAE,EAAE;SACf;QACD,MAAM,EAAE;YACN,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,oBAAoB,EAAE,KAAK;gBAC3B,QAAQ,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,kBAAkB,EAAE,UAAU,CAAC;gBACpE,UAAU,EAAE;oBACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE;oBAC/C,UAAU,EAAE;wBACV,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,EAAE;qBACjG;oBACD,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,oBAAoB,EAAE,YAAY,CAAC,EAAE;oBAChF,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBAC7B;aACF;YACD,MAAM,CAAC,UAAU,EAAE,KAAK;gBACtB,OAAO,CAAC;wBACN,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,qCAAqC,KAAK,CAAC,gBAAgB,sCAAsC,KAAK,CAAC,QAAQ,EAAE;qBACxH,CAAC,CAAC;YACL,CAAC;SACF;QACD,OAAO,CAAC,UAAU,EAAE,SAAS;YAC3B,IAAI,UAAU,KAAK,IAAI,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7H,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC;YAChE,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;YAC5F,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACtD,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;YACzH,OAAO,OAAO,CAAC,OAAO,CAAC;gBACrB,QAAQ,EAAE,SAAS;gBACnB,UAAU,EAAE,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,mBAAmB,CAAU;gBACpF,gBAAgB,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,oBAAoB;gBAC1F,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE;aAC1B,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|