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.
Files changed (166) hide show
  1. package/README.md +3 -3
  2. package/build/bin/odai-dsh-agent.d.mts +3 -0
  3. package/build/bin/odai-dsh-agent.d.mts.map +1 -0
  4. package/build/bin/odai-dsh-agent.mjs +114 -0
  5. package/build/bin/odai-dsh-agent.mjs.map +1 -0
  6. package/build/src/dsh-version.d.mts +16 -0
  7. package/build/src/dsh-version.d.mts.map +1 -0
  8. package/build/src/dsh-version.mjs +20 -0
  9. package/build/src/dsh-version.mjs.map +1 -0
  10. package/build/src/installer.d.mts +46 -0
  11. package/build/src/installer.d.mts.map +1 -0
  12. package/build/src/installer.mjs +398 -0
  13. package/build/src/installer.mjs.map +1 -0
  14. package/package.json +13 -12
  15. package/preset/odai/runtime/compaction-config.d.mts +66 -0
  16. package/preset/odai/runtime/compaction-config.d.mts.map +1 -0
  17. package/preset/odai/runtime/compaction-config.mjs +320 -342
  18. package/preset/odai/runtime/compaction-config.mjs.map +1 -0
  19. package/preset/odai/runtime/compaction-runtime.d.mts +68 -0
  20. package/preset/odai/runtime/compaction-runtime.d.mts.map +1 -0
  21. package/preset/odai/runtime/compaction-runtime.mjs +157 -0
  22. package/preset/odai/runtime/compaction-runtime.mjs.map +1 -0
  23. package/preset/odai/runtime/context-activation.d.mts +31 -0
  24. package/preset/odai/runtime/context-activation.d.mts.map +1 -0
  25. package/preset/odai/runtime/context-activation.mjs +55 -49
  26. package/preset/odai/runtime/context-activation.mjs.map +1 -0
  27. package/preset/odai/runtime/context-capability.d.mts +16 -0
  28. package/preset/odai/runtime/context-capability.d.mts.map +1 -0
  29. package/preset/odai/runtime/context-capability.mjs +79 -74
  30. package/preset/odai/runtime/context-capability.mjs.map +1 -0
  31. package/preset/odai/runtime/governance.d.mts +30 -0
  32. package/preset/odai/runtime/governance.d.mts.map +1 -0
  33. package/preset/odai/runtime/governance.mjs +126 -113
  34. package/preset/odai/runtime/governance.mjs.map +1 -0
  35. package/preset/odai/runtime/human-care.d.mts +13 -0
  36. package/preset/odai/runtime/human-care.d.mts.map +1 -0
  37. package/preset/odai/runtime/human-care.mjs +45 -42
  38. package/preset/odai/runtime/human-care.mjs.map +1 -0
  39. package/preset/odai/runtime/human-safety-continuity-store.d.mts +43 -0
  40. package/preset/odai/runtime/human-safety-continuity-store.d.mts.map +1 -0
  41. package/preset/odai/runtime/human-safety-continuity-store.mjs +193 -215
  42. package/preset/odai/runtime/human-safety-continuity-store.mjs.map +1 -0
  43. package/preset/odai/runtime/human-safety-continuity.d.mts +27 -0
  44. package/preset/odai/runtime/human-safety-continuity.d.mts.map +1 -0
  45. package/preset/odai/runtime/human-safety-continuity.mjs +205 -216
  46. package/preset/odai/runtime/human-safety-continuity.mjs.map +1 -0
  47. package/preset/odai/runtime/human-safety.d.mts +14 -0
  48. package/preset/odai/runtime/human-safety.d.mts.map +1 -0
  49. package/preset/odai/runtime/human-safety.mjs +50 -47
  50. package/preset/odai/runtime/human-safety.mjs.map +1 -0
  51. package/preset/odai/runtime/index.d.mts +8 -0
  52. package/preset/odai/runtime/index.d.mts.map +1 -0
  53. package/preset/odai/runtime/index.mjs +190 -2473
  54. package/preset/odai/runtime/index.mjs.map +1 -0
  55. package/preset/odai/runtime/lifecycle-runtime.d.mts +83 -0
  56. package/preset/odai/runtime/lifecycle-runtime.d.mts.map +1 -0
  57. package/preset/odai/runtime/lifecycle-runtime.mjs +1140 -0
  58. package/preset/odai/runtime/lifecycle-runtime.mjs.map +1 -0
  59. package/preset/odai/runtime/model-route.d.mts +22 -0
  60. package/preset/odai/runtime/model-route.d.mts.map +1 -0
  61. package/preset/odai/runtime/model-route.mjs +68 -60
  62. package/preset/odai/runtime/model-route.mjs.map +1 -0
  63. package/preset/odai/runtime/output-config.d.mts +54 -0
  64. package/preset/odai/runtime/output-config.d.mts.map +1 -0
  65. package/preset/odai/runtime/output-config.mjs +289 -315
  66. package/preset/odai/runtime/output-config.mjs.map +1 -0
  67. package/preset/odai/runtime/output-policy-state.d.mts +3 -0
  68. package/preset/odai/runtime/output-policy-state.d.mts.map +1 -0
  69. package/preset/odai/runtime/output-policy-state.mjs +41 -29
  70. package/preset/odai/runtime/output-policy-state.mjs.map +1 -0
  71. package/preset/odai/runtime/prompt-runtime.d.mts +55 -0
  72. package/preset/odai/runtime/prompt-runtime.d.mts.map +1 -0
  73. package/preset/odai/runtime/prompt-runtime.mjs +303 -0
  74. package/preset/odai/runtime/prompt-runtime.mjs.map +1 -0
  75. package/preset/odai/runtime/research-packet.d.mts +30 -0
  76. package/preset/odai/runtime/research-packet.d.mts.map +1 -0
  77. package/preset/odai/runtime/research-packet.mjs +116 -117
  78. package/preset/odai/runtime/research-packet.mjs.map +1 -0
  79. package/preset/odai/runtime/responsibility-gap.d.mts +26 -0
  80. package/preset/odai/runtime/responsibility-gap.d.mts.map +1 -0
  81. package/preset/odai/runtime/responsibility-gap.mjs +93 -85
  82. package/preset/odai/runtime/responsibility-gap.mjs.map +1 -0
  83. package/preset/odai/runtime/responsibility-scope.d.mts +69 -0
  84. package/preset/odai/runtime/responsibility-scope.d.mts.map +1 -0
  85. package/preset/odai/runtime/responsibility-scope.mjs +199 -171
  86. package/preset/odai/runtime/responsibility-scope.mjs.map +1 -0
  87. package/preset/odai/runtime/role-overlays.d.mts +5 -0
  88. package/preset/odai/runtime/role-overlays.d.mts.map +1 -0
  89. package/preset/odai/runtime/role-overlays.mjs +15 -14
  90. package/preset/odai/runtime/role-overlays.mjs.map +1 -0
  91. package/preset/odai/runtime/route-card.d.mts +42 -0
  92. package/preset/odai/runtime/route-card.d.mts.map +1 -0
  93. package/preset/odai/runtime/route-card.mjs +158 -146
  94. package/preset/odai/runtime/route-card.mjs.map +1 -0
  95. package/preset/odai/runtime/router.d.mts +80 -0
  96. package/preset/odai/runtime/router.d.mts.map +1 -0
  97. package/preset/odai/runtime/router.mjs +509 -559
  98. package/preset/odai/runtime/router.mjs.map +1 -0
  99. package/preset/odai/runtime/routing-config.d.mts +76 -0
  100. package/preset/odai/runtime/routing-config.d.mts.map +1 -0
  101. package/preset/odai/runtime/routing-config.mjs +373 -438
  102. package/preset/odai/runtime/routing-config.mjs.map +1 -0
  103. package/preset/odai/runtime/routing-context.d.mts +64 -0
  104. package/preset/odai/runtime/routing-context.d.mts.map +1 -0
  105. package/preset/odai/runtime/routing-context.mjs +398 -277
  106. package/preset/odai/runtime/routing-context.mjs.map +1 -0
  107. package/preset/odai/runtime/runtime-config.d.mts +24 -0
  108. package/preset/odai/runtime/runtime-config.d.mts.map +1 -0
  109. package/preset/odai/runtime/runtime-config.mjs +181 -0
  110. package/preset/odai/runtime/runtime-config.mjs.map +1 -0
  111. package/preset/odai/runtime/runtime-support.d.mts +91 -0
  112. package/preset/odai/runtime/runtime-support.d.mts.map +1 -0
  113. package/preset/odai/runtime/runtime-support.mjs +371 -0
  114. package/preset/odai/runtime/runtime-support.mjs.map +1 -0
  115. package/preset/odai/runtime/runtime-types.d.mts +237 -0
  116. package/preset/odai/runtime/runtime-types.d.mts.map +1 -0
  117. package/preset/odai/runtime/runtime-types.mjs +4 -0
  118. package/preset/odai/runtime/runtime-types.mjs.map +1 -0
  119. package/preset/odai/runtime/semantic-memory-store.d.mts +110 -0
  120. package/preset/odai/runtime/semantic-memory-store.d.mts.map +1 -0
  121. package/preset/odai/runtime/semantic-memory-store.mjs +271 -385
  122. package/preset/odai/runtime/semantic-memory-store.mjs.map +1 -0
  123. package/preset/odai/runtime/semantic-memory.d.mts +88 -0
  124. package/preset/odai/runtime/semantic-memory.d.mts.map +1 -0
  125. package/preset/odai/runtime/semantic-memory.mjs +790 -750
  126. package/preset/odai/runtime/semantic-memory.mjs.map +1 -0
  127. package/preset/odai/runtime/session-compat.d.mts +31 -0
  128. package/preset/odai/runtime/session-compat.d.mts.map +1 -0
  129. package/preset/odai/runtime/session-compat.mjs +301 -328
  130. package/preset/odai/runtime/session-compat.mjs.map +1 -0
  131. package/preset/odai/runtime/session-evidence.d.mts +25 -0
  132. package/preset/odai/runtime/session-evidence.d.mts.map +1 -0
  133. package/preset/odai/runtime/session-evidence.mjs +309 -287
  134. package/preset/odai/runtime/session-evidence.mjs.map +1 -0
  135. package/preset/odai/runtime/skill-bundle.d.mts +53 -0
  136. package/preset/odai/runtime/skill-bundle.d.mts.map +1 -0
  137. package/preset/odai/runtime/skill-bundle.mjs +286 -276
  138. package/preset/odai/runtime/skill-bundle.mjs.map +1 -0
  139. package/preset/odai/runtime/skill-evolution.d.mts +112 -0
  140. package/preset/odai/runtime/skill-evolution.d.mts.map +1 -0
  141. package/preset/odai/runtime/skill-evolution.mjs +1287 -1261
  142. package/preset/odai/runtime/skill-evolution.mjs.map +1 -0
  143. package/preset/odai/runtime/skill-selection-state.d.mts +5 -0
  144. package/preset/odai/runtime/skill-selection-state.d.mts.map +1 -0
  145. package/preset/odai/runtime/skill-selection-state.mjs +59 -43
  146. package/preset/odai/runtime/skill-selection-state.mjs.map +1 -0
  147. package/preset/odai/runtime/skill-selector.d.mts +28 -0
  148. package/preset/odai/runtime/skill-selector.d.mts.map +1 -0
  149. package/preset/odai/runtime/skill-selector.mjs +100 -109
  150. package/preset/odai/runtime/skill-selector.mjs.map +1 -0
  151. package/preset/odai/runtime/skill-source-config.d.mts +32 -0
  152. package/preset/odai/runtime/skill-source-config.d.mts.map +1 -0
  153. package/preset/odai/runtime/skill-source-config.mjs +200 -210
  154. package/preset/odai/runtime/skill-source-config.mjs.map +1 -0
  155. package/preset/odai/runtime/store-lock.d.mts +2 -0
  156. package/preset/odai/runtime/store-lock.d.mts.map +1 -0
  157. package/preset/odai/runtime/store-lock.mjs +92 -87
  158. package/preset/odai/runtime/store-lock.mjs.map +1 -0
  159. package/preset/odai/runtime/tool-runtime.d.mts +43 -0
  160. package/preset/odai/runtime/tool-runtime.d.mts.map +1 -0
  161. package/preset/odai/runtime/tool-runtime.mjs +221 -0
  162. package/preset/odai/runtime/tool-runtime.mjs.map +1 -0
  163. package/bin/odai-dsh-agent.mjs +0 -108
  164. package/scripts/verify-agent-load.mjs +0 -260
  165. package/src/dsh-version.mjs +0 -24
  166. package/src/installer.mjs +0 -385
@@ -0,0 +1,43 @@
1
+ import type { UnknownRecord } from "./runtime-types.mjs";
2
+ export declare const HUMAN_SAFETY_CONTINUITY_SCHEMA_VERSION = 1;
3
+ export declare const HUMAN_SAFETY_CONTINUITY_CATEGORIES: readonly ["care-preference", "noticed-signal", "effective-support", "safety-plan"];
4
+ export type HumanSafetyContinuityCategory = (typeof HUMAN_SAFETY_CONTINUITY_CATEGORIES)[number];
5
+ export declare const MAX_HUMAN_SAFETY_CONTINUITY_ENTRIES = 80;
6
+ export declare const MAX_HUMAN_SAFETY_CONTINUITY_VALUE_CHARS = 600;
7
+ export interface HumanSafetyContinuityEntry {
8
+ readonly id: string;
9
+ readonly category: HumanSafetyContinuityCategory;
10
+ readonly value: string;
11
+ readonly createdAt: string;
12
+ readonly updatedAt: string;
13
+ }
14
+ export interface HumanSafetyContinuityStore {
15
+ readonly schemaVersion: 1;
16
+ readonly entries: readonly HumanSafetyContinuityEntry[];
17
+ }
18
+ export interface MutableHumanSafetyContinuityEntry {
19
+ id: string;
20
+ category: HumanSafetyContinuityCategory;
21
+ value: string;
22
+ createdAt: string;
23
+ updatedAt: string;
24
+ }
25
+ export interface MutableHumanSafetyContinuityStore {
26
+ schemaVersion: 1;
27
+ entries: MutableHumanSafetyContinuityEntry[];
28
+ }
29
+ export interface ContinuityMutationOutcome extends UnknownRecord {
30
+ changed?: boolean;
31
+ }
32
+ export declare class HumanSafetyContinuityStoreValidationError extends Error {
33
+ }
34
+ export declare function resolveHumanSafetyContinuityStorePath(configuredPath?: unknown, env?: Readonly<Record<string, string | undefined>>): string;
35
+ export declare function readHumanSafetyContinuityStore(storePath: string): Readonly<HumanSafetyContinuityStore>;
36
+ export declare function mutateHumanSafetyContinuityStore<TOutcome extends ContinuityMutationOutcome>(storePath: string, mutate: (store: MutableHumanSafetyContinuityStore) => TOutcome): Readonly<TOutcome & {
37
+ store: Readonly<HumanSafetyContinuityStore>;
38
+ }>;
39
+ export declare function clearHumanSafetyContinuityStore(storePath: string): Readonly<{
40
+ changed: boolean;
41
+ store: Readonly<HumanSafetyContinuityStore>;
42
+ }>;
43
+ //# sourceMappingURL=human-safety-continuity-store.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"human-safety-continuity-store.d.mts","sourceRoot":"","sources":["../src/human-safety-continuity-store.mts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGzD,eAAO,MAAM,sCAAsC,IAAI,CAAC;AACxD,eAAO,MAAM,kCAAkC,oFAKpC,CAAC;AACZ,MAAM,MAAM,6BAA6B,GAAG,CAAC,OAAO,kCAAkC,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhG,eAAO,MAAM,mCAAmC,KAAK,CAAC;AACtD,eAAO,MAAM,uCAAuC,MAAM,CAAC;AAE3D,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,6BAA6B,CAAC;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,SAAS,0BAA0B,EAAE,CAAC;CACzD;AAED,MAAM,WAAW,iCAAiC;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,6BAA6B,CAAC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iCAAiC;IAChD,aAAa,EAAE,CAAC,CAAC;IACjB,OAAO,EAAE,iCAAiC,EAAE,CAAC;CAC9C;AAED,MAAM,WAAW,yBAA0B,SAAQ,aAAa;IAC9D,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAWD,qBAAa,yCAA0C,SAAQ,KAAK;CAAG;AA6GvE,wBAAgB,qCAAqC,CACnD,cAAc,GAAE,OAAmB,EACnC,GAAG,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAe,GAC9D,MAAM,CAWR;AAED,wBAAgB,8BAA8B,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,CAAC,0BAA0B,CAAC,CAyBtG;AA6BD,wBAAgB,gCAAgC,CAAC,QAAQ,SAAS,yBAAyB,EACzF,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,CAAC,KAAK,EAAE,iCAAiC,KAAK,QAAQ,GAC7D,QAAQ,CAAC,QAAQ,GAAG;IAAE,KAAK,EAAE,QAAQ,CAAC,0BAA0B,CAAC,CAAA;CAAE,CAAC,CAoBtE;AAED,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,MAAM,GAChB,QAAQ,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAC,0BAA0B,CAAC,CAAA;CAAE,CAAC,CAY7E"}
@@ -1,254 +1,232 @@
1
1
  import { randomUUID } from "node:crypto";
2
- import {
3
- closeSync,
4
- constants,
5
- existsSync,
6
- fstatSync,
7
- fsyncSync,
8
- lstatSync,
9
- mkdirSync,
10
- openSync,
11
- readFileSync,
12
- renameSync,
13
- rmSync,
14
- writeFileSync,
15
- } from "node:fs";
2
+ import { closeSync, constants, existsSync, fstatSync, fsyncSync, lstatSync, mkdirSync, openSync, readFileSync, renameSync, rmSync, writeFileSync, } from "node:fs";
16
3
  import { homedir } from "node:os";
17
4
  import { dirname, resolve } from "node:path";
18
-
19
5
  import { acquireOwnedStoreLock } from "./store-lock.mjs";
20
-
6
+ import { isUnknownRecord } from "./runtime-types.mjs";
21
7
  export const HUMAN_SAFETY_CONTINUITY_SCHEMA_VERSION = 1;
22
8
  export const HUMAN_SAFETY_CONTINUITY_CATEGORIES = Object.freeze([
23
- "care-preference",
24
- "noticed-signal",
25
- "effective-support",
26
- "safety-plan",
9
+ "care-preference",
10
+ "noticed-signal",
11
+ "effective-support",
12
+ "safety-plan",
27
13
  ]);
28
14
  export const MAX_HUMAN_SAFETY_CONTINUITY_ENTRIES = 80;
29
15
  export const MAX_HUMAN_SAFETY_CONTINUITY_VALUE_CHARS = 600;
30
-
31
16
  const STORE_FIELDS = new Set(["schemaVersion", "entries"]);
32
17
  const ENTRY_FIELDS = new Set(["id", "category", "value", "createdAt", "updatedAt"]);
33
-
34
- export class HumanSafetyContinuityStoreValidationError extends Error {}
35
-
36
- function assertPlainObject(value, field) {
37
- if (value === null || typeof value !== "object" || Array.isArray(value)) {
38
- throw new TypeError(`${field} must be an object`);
39
- }
40
- return value;
41
- }
42
-
18
+ export class HumanSafetyContinuityStoreValidationError extends Error {
19
+ }
20
+ function errorCode(error) {
21
+ if (error === null || typeof error !== "object" || !("code" in error))
22
+ return undefined;
23
+ return typeof error.code === "string" ? error.code : undefined;
24
+ }
43
25
  function rejectUnknown(value, allowed, field) {
44
- const unknown = Object.keys(value).filter((name) => !allowed.has(name));
45
- if (unknown.length > 0) throw new TypeError(`${field} has unknown fields: ${unknown.join(", ")}`);
26
+ const unknownFields = Object.keys(value).filter((name) => !allowed.has(name));
27
+ if (unknownFields.length > 0)
28
+ throw new TypeError(`${field} has unknown fields: ${unknownFields.join(", ")}`);
46
29
  }
47
-
48
30
  function requiredString(value, field, max) {
49
- if (typeof value !== "string" || value.trim() === "" || value.length > max) {
50
- throw new TypeError(`${field} must be a non-empty string of at most ${max} characters`);
51
- }
52
- return value;
31
+ if (typeof value !== "string" || value.trim() === "" || value.length > max) {
32
+ throw new TypeError(`${field} must be a non-empty string of at most ${max} characters`);
33
+ }
34
+ return value;
53
35
  }
54
-
55
36
  function validateTimestamp(value, field) {
56
- requiredString(value, field, 64);
57
- if (!Number.isFinite(Date.parse(value))) throw new TypeError(`${field} must be an ISO timestamp`);
58
- return value;
37
+ const timestamp = requiredString(value, field, 64);
38
+ if (!Number.isFinite(Date.parse(timestamp)))
39
+ throw new TypeError(`${field} must be an ISO timestamp`);
40
+ return timestamp;
41
+ }
42
+ function isContinuityCategory(value) {
43
+ return typeof value === "string" && HUMAN_SAFETY_CONTINUITY_CATEGORIES.includes(value);
59
44
  }
60
-
61
45
  function validateEntry(value, field) {
62
- const entry = assertPlainObject(value, field);
63
- rejectUnknown(entry, ENTRY_FIELDS, field);
64
- requiredString(entry.id, `${field}.id`, 64);
65
- if (!HUMAN_SAFETY_CONTINUITY_CATEGORIES.includes(entry.category)) {
66
- throw new TypeError(`${field}.category is not supported`);
67
- }
68
- requiredString(entry.value, `${field}.value`, MAX_HUMAN_SAFETY_CONTINUITY_VALUE_CHARS);
69
- validateTimestamp(entry.createdAt, `${field}.createdAt`);
70
- validateTimestamp(entry.updatedAt, `${field}.updatedAt`);
71
- return Object.freeze({
72
- id: entry.id,
73
- category: entry.category,
74
- value: entry.value,
75
- createdAt: entry.createdAt,
76
- updatedAt: entry.updatedAt,
77
- });
78
- }
79
-
46
+ if (!isUnknownRecord(value))
47
+ throw new TypeError(`${field} must be an object`);
48
+ rejectUnknown(value, ENTRY_FIELDS, field);
49
+ const id = requiredString(value.id, `${field}.id`, 64);
50
+ if (!isContinuityCategory(value.category))
51
+ throw new TypeError(`${field}.category is not supported`);
52
+ const entryValue = requiredString(value.value, `${field}.value`, MAX_HUMAN_SAFETY_CONTINUITY_VALUE_CHARS);
53
+ const createdAt = validateTimestamp(value.createdAt, `${field}.createdAt`);
54
+ const updatedAt = validateTimestamp(value.updatedAt, `${field}.updatedAt`);
55
+ return Object.freeze({ id, category: value.category, value: entryValue, createdAt, updatedAt });
56
+ }
80
57
  function validateStore(value, field) {
81
- const store = assertPlainObject(value, field);
82
- rejectUnknown(store, STORE_FIELDS, field);
83
- if (store.schemaVersion !== HUMAN_SAFETY_CONTINUITY_SCHEMA_VERSION) {
84
- throw new TypeError(`${field}.schemaVersion must be ${HUMAN_SAFETY_CONTINUITY_SCHEMA_VERSION}`);
85
- }
86
- if (!Array.isArray(store.entries) || store.entries.length > MAX_HUMAN_SAFETY_CONTINUITY_ENTRIES) {
87
- throw new TypeError(`${field}.entries must contain at most ${MAX_HUMAN_SAFETY_CONTINUITY_ENTRIES} items`);
88
- }
89
- const entries = store.entries.map((entry, index) => validateEntry(entry, `${field}.entries[${index}]`));
90
- const ids = new Set();
91
- for (const entry of entries) {
92
- if (ids.has(entry.id)) throw new TypeError(`${field}.entries contains duplicate id ${entry.id}`);
93
- ids.add(entry.id);
94
- }
95
- return Object.freeze({
96
- schemaVersion: HUMAN_SAFETY_CONTINUITY_SCHEMA_VERSION,
97
- entries: Object.freeze(entries),
98
- });
99
- }
100
-
58
+ if (!isUnknownRecord(value))
59
+ throw new TypeError(`${field} must be an object`);
60
+ rejectUnknown(value, STORE_FIELDS, field);
61
+ if (value.schemaVersion !== HUMAN_SAFETY_CONTINUITY_SCHEMA_VERSION) {
62
+ throw new TypeError(`${field}.schemaVersion must be ${HUMAN_SAFETY_CONTINUITY_SCHEMA_VERSION}`);
63
+ }
64
+ if (!Array.isArray(value.entries) || value.entries.length > MAX_HUMAN_SAFETY_CONTINUITY_ENTRIES) {
65
+ throw new TypeError(`${field}.entries must contain at most ${MAX_HUMAN_SAFETY_CONTINUITY_ENTRIES} items`);
66
+ }
67
+ const entries = value.entries.map((entry, index) => validateEntry(entry, `${field}.entries[${index}]`));
68
+ const ids = new Set();
69
+ for (const entry of entries) {
70
+ if (ids.has(entry.id))
71
+ throw new TypeError(`${field}.entries contains duplicate id ${entry.id}`);
72
+ ids.add(entry.id);
73
+ }
74
+ return Object.freeze({ schemaVersion: HUMAN_SAFETY_CONTINUITY_SCHEMA_VERSION, entries: Object.freeze(entries) });
75
+ }
101
76
  function emptyStore() {
102
- return Object.freeze({
103
- schemaVersion: HUMAN_SAFETY_CONTINUITY_SCHEMA_VERSION,
104
- entries: Object.freeze([]),
105
- });
77
+ return Object.freeze({ schemaVersion: HUMAN_SAFETY_CONTINUITY_SCHEMA_VERSION, entries: Object.freeze([]) });
106
78
  }
107
-
108
79
  function assertNoSymlink(path, label) {
109
- if (!existsSync(path)) return;
110
- if (lstatSync(path).isSymbolicLink()) throw new Error(`${label} must not be a symbolic link: ${path}`);
80
+ if (!existsSync(path))
81
+ return;
82
+ if (lstatSync(path).isSymbolicLink())
83
+ throw new Error(`${label} must not be a symbolic link: ${path}`);
111
84
  }
112
-
113
85
  function assertSafeStorePath(storePath) {
114
- const parent = dirname(storePath);
115
- const grandparent = dirname(parent);
116
- assertNoSymlink(grandparent, "Odai human-safety continuity parent");
117
- assertNoSymlink(parent, "Odai human-safety continuity directory");
118
- assertNoSymlink(storePath, "Odai human-safety continuity store");
119
- if (existsSync(parent) && !lstatSync(parent).isDirectory()) {
120
- throw new Error(`Odai human-safety continuity directory is not a directory: ${parent}`);
121
- }
122
- if (existsSync(storePath) && !lstatSync(storePath).isFile()) {
123
- throw new Error(`Odai human-safety continuity store is not a regular file: ${storePath}`);
124
- }
125
- return [grandparent, parent]
126
- .filter((path) => existsSync(path))
127
- .map((path) => {
128
- const stat = lstatSync(path);
129
- return Object.freeze({ path, dev: stat.dev, ino: stat.ino });
86
+ const parent = dirname(storePath);
87
+ const grandparent = dirname(parent);
88
+ assertNoSymlink(grandparent, "Odai human-safety continuity parent");
89
+ assertNoSymlink(parent, "Odai human-safety continuity directory");
90
+ assertNoSymlink(storePath, "Odai human-safety continuity store");
91
+ if (existsSync(parent) && !lstatSync(parent).isDirectory()) {
92
+ throw new Error(`Odai human-safety continuity directory is not a directory: ${parent}`);
93
+ }
94
+ if (existsSync(storePath) && !lstatSync(storePath).isFile()) {
95
+ throw new Error(`Odai human-safety continuity store is not a regular file: ${storePath}`);
96
+ }
97
+ return [grandparent, parent]
98
+ .filter((path) => existsSync(path))
99
+ .map((path) => {
100
+ const stat = lstatSync(path);
101
+ return Object.freeze({ path, dev: stat.dev, ino: stat.ino });
130
102
  });
131
103
  }
132
-
133
104
  function assertDirectoryIdentities(identities) {
134
- for (const identity of identities) {
135
- const stat = lstatSync(identity.path);
136
- if (stat.isSymbolicLink() || !stat.isDirectory() || stat.dev !== identity.dev || stat.ino !== identity.ino) {
137
- throw new Error(`Odai human-safety continuity directory identity changed during an operation: ${identity.path}`);
105
+ for (const identity of identities) {
106
+ const stat = lstatSync(identity.path);
107
+ if (stat.isSymbolicLink() || !stat.isDirectory() || stat.dev !== identity.dev || stat.ino !== identity.ino) {
108
+ throw new Error(`Odai human-safety continuity directory identity changed during an operation: ${identity.path}`);
109
+ }
138
110
  }
139
- }
140
111
  }
141
-
142
112
  function readRegularFileNoFollow(path) {
143
- const noFollow = typeof constants.O_NOFOLLOW === "number" ? constants.O_NOFOLLOW : 0;
144
- let fd;
145
- try {
146
- fd = openSync(path, constants.O_RDONLY | noFollow);
147
- const stat = fstatSync(fd);
148
- if (!stat.isFile()) throw new Error(`Odai human-safety continuity store is not a regular file: ${path}`);
149
- return readFileSync(fd, "utf8");
150
- } finally {
151
- if (fd !== undefined) closeSync(fd);
152
- }
153
- }
154
-
155
- export function resolveHumanSafetyContinuityStorePath(configuredPath, env = process.env) {
156
- if (configuredPath !== undefined) {
157
- if (typeof configuredPath !== "string" || configuredPath.trim() === "") {
158
- throw new TypeError("human-safety continuity store path must be a non-empty string");
159
- }
160
- return resolve(configuredPath.trim());
161
- }
162
- const dshHome = typeof env.DSH_HOME === "string" && env.DSH_HOME.trim() !== ""
163
- ? resolve(env.DSH_HOME.trim())
164
- : resolve(homedir(), ".dsh");
165
- return resolve(dshHome, "odai", "human-safety-continuity.json");
166
- }
167
-
113
+ const noFollow = typeof constants.O_NOFOLLOW === "number" ? constants.O_NOFOLLOW : 0;
114
+ let fileDescriptor;
115
+ try {
116
+ fileDescriptor = openSync(path, constants.O_RDONLY | noFollow);
117
+ const stat = fstatSync(fileDescriptor);
118
+ if (!stat.isFile())
119
+ throw new Error(`Odai human-safety continuity store is not a regular file: ${path}`);
120
+ return readFileSync(fileDescriptor, "utf8");
121
+ }
122
+ finally {
123
+ if (fileDescriptor !== undefined)
124
+ closeSync(fileDescriptor);
125
+ }
126
+ }
127
+ export function resolveHumanSafetyContinuityStorePath(configuredPath = undefined, env = process.env) {
128
+ if (configuredPath !== undefined) {
129
+ if (typeof configuredPath !== "string" || configuredPath.trim() === "") {
130
+ throw new TypeError("human-safety continuity store path must be a non-empty string");
131
+ }
132
+ return resolve(configuredPath.trim());
133
+ }
134
+ const dshHome = typeof env.DSH_HOME === "string" && env.DSH_HOME.trim() !== ""
135
+ ? resolve(env.DSH_HOME.trim())
136
+ : resolve(homedir(), ".dsh");
137
+ return resolve(dshHome, "odai", "human-safety-continuity.json");
138
+ }
168
139
  export function readHumanSafetyContinuityStore(storePath) {
169
- const identities = assertSafeStorePath(storePath);
170
- let text;
171
- try {
172
- text = readRegularFileNoFollow(storePath);
173
- } catch (error) {
140
+ const identities = assertSafeStorePath(storePath);
141
+ let text;
142
+ try {
143
+ text = readRegularFileNoFollow(storePath);
144
+ }
145
+ catch (error) {
146
+ assertDirectoryIdentities(identities);
147
+ if (errorCode(error) === "ENOENT")
148
+ return emptyStore();
149
+ throw new Error(`cannot read Odai human-safety continuity ${storePath}: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
150
+ }
174
151
  assertDirectoryIdentities(identities);
175
- if (error?.code === "ENOENT") return emptyStore();
176
- throw new Error(`cannot read Odai human-safety continuity ${storePath}: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
177
- }
178
- assertDirectoryIdentities(identities);
179
- let parsed;
180
- try {
181
- parsed = JSON.parse(text);
182
- } catch (error) {
183
- throw new HumanSafetyContinuityStoreValidationError(`Odai human-safety continuity ${storePath} is not valid JSON`, { cause: error });
184
- }
185
- try {
186
- return validateStore(parsed, `Odai human-safety continuity ${storePath}`);
187
- } catch (error) {
188
- throw new HumanSafetyContinuityStoreValidationError(
189
- `Odai human-safety continuity ${storePath} failed validation: ${error instanceof Error ? error.message : String(error)}`,
190
- { cause: error },
191
- );
192
- }
193
- }
194
-
195
- function writeStore(storePath, store) {
196
- const value = validateStore(store, "Odai human-safety continuity write");
197
- const parent = dirname(storePath);
198
- assertSafeStorePath(storePath);
199
- mkdirSync(parent, { recursive: true, mode: 0o700 });
200
- const identities = assertSafeStorePath(storePath);
201
- const temporary = `${storePath}.tmp-${process.pid}-${randomUUID()}`;
202
- const noFollow = typeof constants.O_NOFOLLOW === "number" ? constants.O_NOFOLLOW : 0;
203
- try {
204
- let fd;
152
+ let parsed;
205
153
  try {
206
- fd = openSync(temporary, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | noFollow, 0o600);
207
- writeFileSync(fd, `${JSON.stringify(value, null, 2)}\n`, { encoding: "utf8" });
208
- fsyncSync(fd);
209
- } finally {
210
- if (fd !== undefined) closeSync(fd);
154
+ parsed = JSON.parse(text);
211
155
  }
156
+ catch (error) {
157
+ throw new HumanSafetyContinuityStoreValidationError(`Odai human-safety continuity ${storePath} is not valid JSON`, { cause: error });
158
+ }
159
+ try {
160
+ return validateStore(parsed, `Odai human-safety continuity ${storePath}`);
161
+ }
162
+ catch (error) {
163
+ throw new HumanSafetyContinuityStoreValidationError(`Odai human-safety continuity ${storePath} failed validation: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
164
+ }
165
+ }
166
+ function writeStore(storePath, store) {
167
+ const value = validateStore(store, "Odai human-safety continuity write");
168
+ const parent = dirname(storePath);
212
169
  assertSafeStorePath(storePath);
213
- assertDirectoryIdentities(identities);
214
- renameSync(temporary, storePath);
215
- assertDirectoryIdentities(identities);
216
- } finally {
217
- rmSync(temporary, { force: true });
218
- }
219
- return value;
170
+ mkdirSync(parent, { recursive: true, mode: 0o700 });
171
+ const identities = assertSafeStorePath(storePath);
172
+ const temporary = `${storePath}.tmp-${process.pid}-${randomUUID()}`;
173
+ const noFollow = typeof constants.O_NOFOLLOW === "number" ? constants.O_NOFOLLOW : 0;
174
+ try {
175
+ let fileDescriptor;
176
+ try {
177
+ fileDescriptor = openSync(temporary, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | noFollow, 0o600);
178
+ writeFileSync(fileDescriptor, `${JSON.stringify(value, null, 2)}\n`, { encoding: "utf8" });
179
+ fsyncSync(fileDescriptor);
180
+ }
181
+ finally {
182
+ if (fileDescriptor !== undefined)
183
+ closeSync(fileDescriptor);
184
+ }
185
+ assertSafeStorePath(storePath);
186
+ assertDirectoryIdentities(identities);
187
+ renameSync(temporary, storePath);
188
+ assertDirectoryIdentities(identities);
189
+ }
190
+ finally {
191
+ rmSync(temporary, { force: true });
192
+ }
193
+ return value;
220
194
  }
221
-
222
195
  export function mutateHumanSafetyContinuityStore(storePath, mutate) {
223
- if (typeof mutate !== "function") throw new TypeError("human-safety continuity mutator must be a function");
224
- const identities = assertSafeStorePath(storePath);
225
- const releaseLock = acquireOwnedStoreLock(storePath, "Odai human-safety continuity");
226
- try {
227
- assertDirectoryIdentities(identities);
228
- const current = readHumanSafetyContinuityStore(storePath);
229
- const mutable = {
230
- schemaVersion: HUMAN_SAFETY_CONTINUITY_SCHEMA_VERSION,
231
- entries: current.entries.map((entry) => ({ ...entry })),
232
- };
233
- const outcome = mutate(mutable);
234
- if (!outcome || outcome.changed !== true) return Object.freeze({ store: current, ...(outcome ?? {}) });
235
- const store = writeStore(storePath, mutable);
236
- return Object.freeze({ ...outcome, changed: true, store });
237
- } finally {
238
- releaseLock();
239
- }
240
- }
241
-
196
+ if (typeof mutate !== "function")
197
+ throw new TypeError("human-safety continuity mutator must be a function");
198
+ const identities = assertSafeStorePath(storePath);
199
+ const releaseLock = acquireOwnedStoreLock(storePath, "Odai human-safety continuity");
200
+ try {
201
+ assertDirectoryIdentities(identities);
202
+ const current = readHumanSafetyContinuityStore(storePath);
203
+ const mutable = {
204
+ schemaVersion: HUMAN_SAFETY_CONTINUITY_SCHEMA_VERSION,
205
+ entries: current.entries.map((entry) => ({ ...entry })),
206
+ };
207
+ const outcome = mutate(mutable);
208
+ if (!outcome || outcome.changed !== true) {
209
+ return Object.freeze({ store: current, ...outcome });
210
+ }
211
+ const store = writeStore(storePath, mutable);
212
+ return Object.freeze({ ...outcome, changed: true, store });
213
+ }
214
+ finally {
215
+ releaseLock();
216
+ }
217
+ }
242
218
  export function clearHumanSafetyContinuityStore(storePath) {
243
- const identities = assertSafeStorePath(storePath);
244
- const releaseLock = acquireOwnedStoreLock(storePath, "Odai human-safety continuity");
245
- try {
246
- assertDirectoryIdentities(identities);
247
- const existed = existsSync(storePath);
248
- rmSync(storePath, { force: true });
249
- assertDirectoryIdentities(identities);
250
- return Object.freeze({ changed: existed, store: emptyStore() });
251
- } finally {
252
- releaseLock();
253
- }
219
+ const identities = assertSafeStorePath(storePath);
220
+ const releaseLock = acquireOwnedStoreLock(storePath, "Odai human-safety continuity");
221
+ try {
222
+ assertDirectoryIdentities(identities);
223
+ const existed = existsSync(storePath);
224
+ rmSync(storePath, { force: true });
225
+ assertDirectoryIdentities(identities);
226
+ return Object.freeze({ changed: existed, store: emptyStore() });
227
+ }
228
+ finally {
229
+ releaseLock();
230
+ }
254
231
  }
232
+ //# sourceMappingURL=human-safety-continuity-store.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"human-safety-continuity-store.mjs","sourceRoot":"","sources":["../src/human-safety-continuity-store.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { type HumanSafetyContinuityCategory, type HumanSafetyContinuityEntry, type HumanSafetyContinuityStore } from "./human-safety-continuity-store.mjs";
2
+ import type { DshAgent, RuntimeTool } from "./runtime-types.mjs";
3
+ export declare const HUMAN_SAFETY_CONTINUITY_PROMPT: string;
4
+ export interface HumanSafetyContinuityToolOptions {
5
+ storePath: string;
6
+ directUserTextFor?(agent: DshAgent): string | undefined;
7
+ onChanged?(agent: DshAgent, event: HumanSafetyContinuityChangedEvent): void;
8
+ }
9
+ export type HumanSafetyContinuityChangedEvent = {
10
+ action: "add" | "replace" | "remove";
11
+ category: HumanSafetyContinuityCategory;
12
+ entryId: string;
13
+ } | {
14
+ action: "clear";
15
+ };
16
+ export type HumanSafetyContinuityAction = "show" | "export" | "add" | "replace" | "remove" | "clear";
17
+ export type HumanSafetyContinuityStatus = "shown" | "exported" | "added" | "existing" | "replaced" | "removed" | "absent" | "cleared";
18
+ export interface HumanSafetyContinuityResult {
19
+ action: HumanSafetyContinuityAction;
20
+ status: HumanSafetyContinuityStatus;
21
+ record: Readonly<HumanSafetyContinuityStore>;
22
+ entry?: HumanSafetyContinuityEntry;
23
+ exportJson?: string;
24
+ }
25
+ export declare function renderHumanSafetyContinuitySection(store: HumanSafetyContinuityStore | undefined): string | undefined;
26
+ export declare function createHumanSafetyContinuityTool(options: HumanSafetyContinuityToolOptions): RuntimeTool<unknown, HumanSafetyContinuityResult>;
27
+ //# sourceMappingURL=human-safety-continuity.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"human-safety-continuity.d.mts","sourceRoot":"","sources":["../src/human-safety-continuity.mts"],"names":[],"mappings":"AAEA,OAAO,EAOL,KAAK,6BAA6B,EAClC,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAChC,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAgC,MAAM,qBAAqB,CAAC;AAuB/F,eAAO,MAAM,8BAA8B,QAQ/B,CAAC;AAEb,MAAM,WAAW,gCAAgC;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;IACxD,SAAS,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,iCAAiC,GAAG,IAAI,CAAC;CAC7E;AAED,MAAM,MAAM,iCAAiC,GACzC;IAAE,MAAM,EAAE,KAAK,GAAG,SAAS,GAAG,QAAQ,CAAC;IAAC,QAAQ,EAAE,6BAA6B,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAClG;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC;AAExB,MAAM,MAAM,2BAA2B,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AACrG,MAAM,MAAM,2BAA2B,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEtI,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,2BAA2B,CAAC;IACpC,MAAM,EAAE,2BAA2B,CAAC;IACpC,MAAM,EAAE,QAAQ,CAAC,0BAA0B,CAAC,CAAC;IAC7C,KAAK,CAAC,EAAE,0BAA0B,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAuFD,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,0BAA0B,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAQpH;AAMD,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,gCAAgC,GACxC,WAAW,CAAC,OAAO,EAAE,2BAA2B,CAAC,CA0GnD"}