@corenel/harness 0.9.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. package/dist/approvals/decisionLog.d.ts +21 -0
  2. package/dist/approvals/decisionLog.d.ts.map +1 -0
  3. package/dist/approvals/decisionLog.js +129 -0
  4. package/dist/approvals/decisionLog.js.map +1 -0
  5. package/dist/approvals/hooks.d.ts +18 -0
  6. package/dist/approvals/hooks.d.ts.map +1 -0
  7. package/dist/approvals/hooks.js +34 -0
  8. package/dist/approvals/hooks.js.map +1 -0
  9. package/dist/approvals/index.d.ts +10 -0
  10. package/dist/approvals/index.d.ts.map +1 -0
  11. package/dist/approvals/index.js +10 -0
  12. package/dist/approvals/index.js.map +1 -0
  13. package/dist/approvals/service.d.ts +46 -0
  14. package/dist/approvals/service.d.ts.map +1 -0
  15. package/dist/approvals/service.js +181 -0
  16. package/dist/approvals/service.js.map +1 -0
  17. package/dist/approvals/settings.d.ts +20 -0
  18. package/dist/approvals/settings.d.ts.map +1 -0
  19. package/dist/approvals/settings.js +32 -0
  20. package/dist/approvals/settings.js.map +1 -0
  21. package/dist/approvals/shellTools.d.ts +10 -0
  22. package/dist/approvals/shellTools.d.ts.map +1 -0
  23. package/dist/approvals/shellTools.js +17 -0
  24. package/dist/approvals/shellTools.js.map +1 -0
  25. package/dist/approvals/standingStore.d.ts +15 -0
  26. package/dist/approvals/standingStore.d.ts.map +1 -0
  27. package/dist/approvals/standingStore.js +50 -0
  28. package/dist/approvals/standingStore.js.map +1 -0
  29. package/dist/approvals/suggest.d.ts +15 -0
  30. package/dist/approvals/suggest.d.ts.map +1 -0
  31. package/dist/approvals/suggest.js +23 -0
  32. package/dist/approvals/suggest.js.map +1 -0
  33. package/dist/approvals/summarize.d.ts +7 -0
  34. package/dist/approvals/summarize.d.ts.map +1 -0
  35. package/dist/approvals/summarize.js +70 -0
  36. package/dist/approvals/summarize.js.map +1 -0
  37. package/dist/approvals/testTextStore.d.ts +6 -0
  38. package/dist/approvals/testTextStore.d.ts.map +1 -0
  39. package/dist/approvals/testTextStore.js +11 -0
  40. package/dist/approvals/testTextStore.js.map +1 -0
  41. package/dist/approvals/textStore.d.ts +9 -0
  42. package/dist/approvals/textStore.d.ts.map +1 -0
  43. package/dist/approvals/textStore.js +2 -0
  44. package/dist/approvals/textStore.js.map +1 -0
  45. package/dist/audit/canonical.d.ts +5 -0
  46. package/dist/audit/canonical.d.ts.map +1 -0
  47. package/dist/audit/canonical.js +15 -0
  48. package/dist/audit/canonical.js.map +1 -0
  49. package/dist/audit/ids.d.ts +3 -0
  50. package/dist/audit/ids.d.ts.map +1 -0
  51. package/dist/audit/ids.js +11 -0
  52. package/dist/audit/ids.js.map +1 -0
  53. package/dist/audit/index.d.ts +7 -0
  54. package/dist/audit/index.d.ts.map +1 -0
  55. package/dist/audit/index.js +7 -0
  56. package/dist/audit/index.js.map +1 -0
  57. package/dist/audit/log.d.ts +64 -0
  58. package/dist/audit/log.d.ts.map +1 -0
  59. package/dist/audit/log.js +457 -0
  60. package/dist/audit/log.js.map +1 -0
  61. package/dist/audit/recorder.d.ts +31 -0
  62. package/dist/audit/recorder.d.ts.map +1 -0
  63. package/dist/audit/recorder.js +185 -0
  64. package/dist/audit/recorder.js.map +1 -0
  65. package/dist/audit/runAudit.d.ts +38 -0
  66. package/dist/audit/runAudit.d.ts.map +1 -0
  67. package/dist/audit/runAudit.js +99 -0
  68. package/dist/audit/runAudit.js.map +1 -0
  69. package/dist/audit/verify.d.ts +14 -0
  70. package/dist/audit/verify.d.ts.map +1 -0
  71. package/dist/audit/verify.js +47 -0
  72. package/dist/audit/verify.js.map +1 -0
  73. package/dist/conversation.d.ts +31 -0
  74. package/dist/conversation.d.ts.map +1 -1
  75. package/dist/conversation.js +33 -0
  76. package/dist/conversation.js.map +1 -1
  77. package/dist/core/hash.d.ts +2 -0
  78. package/dist/core/hash.d.ts.map +1 -0
  79. package/dist/core/hash.js +9 -0
  80. package/dist/core/hash.js.map +1 -0
  81. package/dist/core/loop.d.ts +18 -0
  82. package/dist/core/loop.d.ts.map +1 -1
  83. package/dist/core/loop.js +61 -5
  84. package/dist/core/loop.js.map +1 -1
  85. package/dist/core/spawn.d.ts +59 -4
  86. package/dist/core/spawn.d.ts.map +1 -1
  87. package/dist/core/spawn.js +83 -5
  88. package/dist/core/spawn.js.map +1 -1
  89. package/dist/core/turnVerify.d.ts +25 -0
  90. package/dist/core/turnVerify.d.ts.map +1 -0
  91. package/dist/core/turnVerify.js +177 -0
  92. package/dist/core/turnVerify.js.map +1 -0
  93. package/dist/dag/executeNode.d.ts +7 -0
  94. package/dist/dag/executeNode.d.ts.map +1 -1
  95. package/dist/dag/executeNode.js +3 -0
  96. package/dist/dag/executeNode.js.map +1 -1
  97. package/dist/guardrail/guardrail.d.ts +7 -0
  98. package/dist/guardrail/guardrail.d.ts.map +1 -1
  99. package/dist/guardrail/guardrail.js +8 -0
  100. package/dist/guardrail/guardrail.js.map +1 -1
  101. package/dist/guardrail/index.d.ts +2 -2
  102. package/dist/guardrail/index.d.ts.map +1 -1
  103. package/dist/guardrail/index.js +2 -2
  104. package/dist/guardrail/index.js.map +1 -1
  105. package/dist/guardrail/permission-service.d.ts +37 -6
  106. package/dist/guardrail/permission-service.d.ts.map +1 -1
  107. package/dist/guardrail/permission-service.js +111 -11
  108. package/dist/guardrail/permission-service.js.map +1 -1
  109. package/dist/guardrail/serialize.d.ts.map +1 -1
  110. package/dist/guardrail/serialize.js +2 -0
  111. package/dist/guardrail/serialize.js.map +1 -1
  112. package/dist/guardrail/validate.d.ts.map +1 -1
  113. package/dist/guardrail/validate.js +3 -1
  114. package/dist/guardrail/validate.js.map +1 -1
  115. package/dist/install/lockfile.d.ts +13 -5
  116. package/dist/install/lockfile.d.ts.map +1 -1
  117. package/dist/install/lockfile.js +31 -2
  118. package/dist/install/lockfile.js.map +1 -1
  119. package/dist/orchestrator/agentSearch.d.ts +15 -0
  120. package/dist/orchestrator/agentSearch.d.ts.map +1 -0
  121. package/dist/orchestrator/agentSearch.js +102 -0
  122. package/dist/orchestrator/agentSearch.js.map +1 -0
  123. package/dist/orchestrator/agentTags.d.ts +13 -0
  124. package/dist/orchestrator/agentTags.d.ts.map +1 -0
  125. package/dist/orchestrator/agentTags.js +48 -0
  126. package/dist/orchestrator/agentTags.js.map +1 -0
  127. package/dist/orchestrator/branch.d.ts +9 -0
  128. package/dist/orchestrator/branch.d.ts.map +1 -0
  129. package/dist/orchestrator/branch.js +26 -0
  130. package/dist/orchestrator/branch.js.map +1 -0
  131. package/dist/orchestrator/checks.d.ts +16 -0
  132. package/dist/orchestrator/checks.d.ts.map +1 -0
  133. package/dist/orchestrator/checks.js +66 -0
  134. package/dist/orchestrator/checks.js.map +1 -0
  135. package/dist/orchestrator/planDoc.d.ts +15 -0
  136. package/dist/orchestrator/planDoc.d.ts.map +1 -0
  137. package/dist/orchestrator/planDoc.js +59 -0
  138. package/dist/orchestrator/planDoc.js.map +1 -0
  139. package/dist/orchestrator/record.d.ts +103 -0
  140. package/dist/orchestrator/record.d.ts.map +1 -0
  141. package/dist/orchestrator/record.js +168 -0
  142. package/dist/orchestrator/record.js.map +1 -0
  143. package/dist/orchestrator/sidecarTools.d.ts +7 -0
  144. package/dist/orchestrator/sidecarTools.d.ts.map +1 -0
  145. package/dist/orchestrator/sidecarTools.js +141 -0
  146. package/dist/orchestrator/sidecarTools.js.map +1 -0
  147. package/dist/prompts/config.d.ts.map +1 -1
  148. package/dist/prompts/config.js +11 -0
  149. package/dist/prompts/config.js.map +1 -1
  150. package/dist/prompts/index.d.ts +0 -6
  151. package/dist/prompts/index.d.ts.map +1 -1
  152. package/dist/prompts/index.js +10 -17
  153. package/dist/prompts/index.js.map +1 -1
  154. package/dist/prompts/library/defaults.generated.d.ts.map +1 -1
  155. package/dist/prompts/library/defaults.generated.js +29 -12
  156. package/dist/prompts/library/defaults.generated.js.map +1 -1
  157. package/dist/redact.d.ts.map +1 -1
  158. package/dist/redact.js +1 -0
  159. package/dist/redact.js.map +1 -1
  160. package/dist/rooms/findings.d.ts +14 -0
  161. package/dist/rooms/findings.d.ts.map +1 -1
  162. package/dist/rooms/findings.js +37 -0
  163. package/dist/rooms/findings.js.map +1 -1
  164. package/dist/sessions/blobGc.d.ts.map +1 -1
  165. package/dist/sessions/blobGc.js +2 -5
  166. package/dist/sessions/blobGc.js.map +1 -1
  167. package/dist/sessions/childSessions.d.ts +12 -0
  168. package/dist/sessions/childSessions.d.ts.map +1 -0
  169. package/dist/sessions/childSessions.js +43 -0
  170. package/dist/sessions/childSessions.js.map +1 -0
  171. package/dist/sessions/fileRecallStore.d.ts.map +1 -1
  172. package/dist/sessions/fileRecallStore.js +1 -3
  173. package/dist/sessions/fileRecallStore.js.map +1 -1
  174. package/dist/sessions/fileSessionStore.d.ts +13 -8
  175. package/dist/sessions/fileSessionStore.d.ts.map +1 -1
  176. package/dist/sessions/fileSessionStore.js +53 -17
  177. package/dist/sessions/fileSessionStore.js.map +1 -1
  178. package/dist/sessions/inflight.js +0 -0
  179. package/dist/sessions/inflight.js.map +1 -1
  180. package/dist/sessions/jsonl.d.ts +9 -0
  181. package/dist/sessions/jsonl.d.ts.map +1 -1
  182. package/dist/sessions/jsonl.js +11 -0
  183. package/dist/sessions/jsonl.js.map +1 -1
  184. package/dist/sessions/testFs.d.ts.map +1 -1
  185. package/dist/sessions/testFs.js +1 -1
  186. package/dist/sessions/testFs.js.map +1 -1
  187. package/dist/sidecar/host.d.ts +178 -1
  188. package/dist/sidecar/host.d.ts.map +1 -1
  189. package/dist/sidecar/host.js +363 -3
  190. package/dist/sidecar/host.js.map +1 -1
  191. package/dist/sidecar/identity.d.ts +44 -0
  192. package/dist/sidecar/identity.d.ts.map +1 -0
  193. package/dist/sidecar/identity.js +45 -0
  194. package/dist/sidecar/identity.js.map +1 -0
  195. package/dist/sidecar/server.d.ts +273 -6
  196. package/dist/sidecar/server.d.ts.map +1 -1
  197. package/dist/sidecar/server.js +1009 -40
  198. package/dist/sidecar/server.js.map +1 -1
  199. package/dist/skillSource.js +1 -1
  200. package/dist/skillSource.js.map +1 -1
  201. package/dist/skills.d.ts +23 -7
  202. package/dist/skills.d.ts.map +1 -1
  203. package/dist/skills.js +62 -37
  204. package/dist/skills.js.map +1 -1
  205. package/dist/tools/callAgent.d.ts +29 -12
  206. package/dist/tools/callAgent.d.ts.map +1 -1
  207. package/dist/tools/callAgent.js +120 -14
  208. package/dist/tools/callAgent.js.map +1 -1
  209. package/dist/tools/crewList.d.ts +33 -0
  210. package/dist/tools/crewList.d.ts.map +1 -0
  211. package/dist/tools/crewList.js +66 -0
  212. package/dist/tools/crewList.js.map +1 -0
  213. package/dist/tools/files.d.ts.map +1 -1
  214. package/dist/tools/files.js +11 -5
  215. package/dist/tools/files.js.map +1 -1
  216. package/dist/tools/findAgent.d.ts +23 -0
  217. package/dist/tools/findAgent.d.ts.map +1 -0
  218. package/dist/tools/findAgent.js +58 -0
  219. package/dist/tools/findAgent.js.map +1 -0
  220. package/dist/tools/namespaces.d.ts.map +1 -1
  221. package/dist/tools/namespaces.js +7 -0
  222. package/dist/tools/namespaces.js.map +1 -1
  223. package/dist/tools/orchestrate.d.ts +4 -0
  224. package/dist/tools/orchestrate.d.ts.map +1 -0
  225. package/dist/tools/orchestrate.js +38 -0
  226. package/dist/tools/orchestrate.js.map +1 -0
  227. package/dist/tools/orchestration.d.ts +24 -0
  228. package/dist/tools/orchestration.d.ts.map +1 -0
  229. package/dist/tools/orchestration.js +173 -0
  230. package/dist/tools/orchestration.js.map +1 -0
  231. package/dist/tools/orchestrationSet.d.ts +6 -0
  232. package/dist/tools/orchestrationSet.d.ts.map +1 -0
  233. package/dist/tools/orchestrationSet.js +12 -0
  234. package/dist/tools/orchestrationSet.js.map +1 -0
  235. package/dist/tools/roomTools.d.ts +6 -0
  236. package/dist/tools/roomTools.d.ts.map +1 -1
  237. package/dist/tools/roomTools.js +26 -2
  238. package/dist/tools/roomTools.js.map +1 -1
  239. package/dist/tools/skillTool.d.ts +15 -0
  240. package/dist/tools/skillTool.d.ts.map +1 -0
  241. package/dist/tools/skillTool.js +39 -0
  242. package/dist/tools/skillTool.js.map +1 -0
  243. package/dist/tools/urlGuard.d.ts +7 -0
  244. package/dist/tools/urlGuard.d.ts.map +1 -1
  245. package/dist/tools/urlGuard.js +54 -18
  246. package/dist/tools/urlGuard.js.map +1 -1
  247. package/package.json +8 -3
@@ -0,0 +1,50 @@
1
+ const EMPTY = () => ({ version: 1, rules: [], dismissed: [] });
2
+ export function subjectMatchesRule(subject, tool) {
3
+ return (!!subject.address && tool === subject.address) || tool === subject.name;
4
+ }
5
+ function parse(text) {
6
+ try {
7
+ const v = JSON.parse(text);
8
+ if (!v || v.version !== 1 || !Array.isArray(v.rules) || !Array.isArray(v.dismissed))
9
+ return null;
10
+ return {
11
+ version: 1,
12
+ rules: v.rules.filter((r) => !!r && typeof r.tool === 'string'),
13
+ dismissed: v.dismissed.filter((d) => !!d && typeof d.tool === 'string'),
14
+ };
15
+ }
16
+ catch {
17
+ return null;
18
+ }
19
+ }
20
+ export function createStandingStore(opts) {
21
+ const now = opts.now ?? (() => new Date().toISOString());
22
+ /** `strict` = a read failure propagates. Lookups are lenient (a failure reads
23
+ * as empty, so it can only ever mean "ask the human"); writes are strict, so
24
+ * a store that cannot be read right now is never overwritten with only the
25
+ * one rule being added -- that would silently revoke every other rule. */
26
+ async function load(strict = false) {
27
+ const raw = strict ? await opts.store.read() : await opts.store.read().catch(() => null);
28
+ if (raw == null)
29
+ return { file: EMPTY(), raw, bad: false };
30
+ const file = parse(raw);
31
+ return file ? { file, raw, bad: false } : { file: EMPTY(), raw, bad: true };
32
+ }
33
+ async function update(fn) {
34
+ const { file, raw, bad } = await load(true);
35
+ if (bad && raw != null && opts.store.preserve)
36
+ await opts.store.preserve(raw);
37
+ await opts.store.write(JSON.stringify(fn(file), null, 2) + '\n');
38
+ }
39
+ return {
40
+ async read() { return (await load()).file; },
41
+ async matches(subject) {
42
+ const { file } = await load();
43
+ return file.rules.some((r) => subjectMatchesRule(subject, r.tool));
44
+ },
45
+ addRule: (tool, source) => update((f) => (f.rules.some((r) => r.tool === tool) ? f : { ...f, rules: [...f.rules, { tool, createdAt: now(), source }] })),
46
+ removeRule: (tool) => update((f) => ({ ...f, rules: f.rules.filter((r) => r.tool !== tool) })),
47
+ setDismissal: (d) => update((f) => ({ ...f, dismissed: [...f.dismissed.filter((x) => x.tool !== d.tool), d] })),
48
+ };
49
+ }
50
+ //# sourceMappingURL=standingStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standingStore.js","sourceRoot":"","sources":["../../approvals/standingStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { DecisionRecord, Dismissal } from '@corenel/protocol';
2
+ export declare function toolKey(r: {
3
+ tool: string;
4
+ address?: string;
5
+ }): string;
6
+ export declare function allowStreak(records: readonly DecisionRecord[], key: string): number;
7
+ export interface SuggestInput {
8
+ key: string;
9
+ streak: number;
10
+ threshold: number;
11
+ standing: boolean;
12
+ dismissal?: Dismissal;
13
+ }
14
+ export declare function shouldSuggest(i: SuggestInput): boolean;
15
+ //# sourceMappingURL=suggest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../approvals/suggest.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnE,wBAAgB,OAAO,CAAC,CAAC,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAErE;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAOnF;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,YAAY,GAAG,OAAO,CAOtD"}
@@ -0,0 +1,23 @@
1
+ export function toolKey(r) {
2
+ return r.address ?? r.tool;
3
+ }
4
+ export function allowStreak(records, key) {
5
+ let n = 0;
6
+ for (const rec of records) {
7
+ if (rec.by !== 'human' || toolKey(rec) !== key)
8
+ continue;
9
+ n = rec.decision === 'deny' ? 0 : n + 1;
10
+ }
11
+ return n;
12
+ }
13
+ export function shouldSuggest(i) {
14
+ if (i.threshold <= 0 || i.standing)
15
+ return false;
16
+ if (i.dismissal) {
17
+ if (i.dismissal.snoozeUntilCount === undefined)
18
+ return false;
19
+ return i.streak >= i.dismissal.snoozeUntilCount;
20
+ }
21
+ return i.streak >= i.threshold;
22
+ }
23
+ //# sourceMappingURL=suggest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggest.js","sourceRoot":"","sources":["../../approvals/suggest.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,OAAO,CAAC,CAAqC;IAC3D,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAkC,EAAE,GAAW;IACzE,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,GAAG,CAAC,EAAE,KAAK,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG;YAAE,SAAS;QACzD,CAAC,GAAG,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAUD,MAAM,UAAU,aAAa,CAAC,CAAe;IAC3C,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IACjD,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;QAChB,IAAI,CAAC,CAAC,SAAS,CAAC,gBAAgB,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC7D,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC;IAClD,CAAC;IACD,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,CAAC;AACjC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ArgSummary } from '@corenel/protocol';
2
+ export declare const MAX_PATH = 512;
3
+ export declare const MAX_RAW = 2048;
4
+ export declare function isPathLike(s: string): boolean;
5
+ export declare function summarizeArgs(input: unknown): ArgSummary;
6
+ export declare function rawArgs(input: unknown): Record<string, string>;
7
+ //# sourceMappingURL=summarize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarize.d.ts","sourceRoot":"","sources":["../../approvals/summarize.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAY,UAAU,EAAW,MAAM,mBAAmB,CAAC;AAEvE,eAAO,MAAM,QAAQ,MAAM,CAAC;AAC5B,eAAO,MAAM,OAAO,OAAO,CAAC;AAU5B,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAM7C;AAyBD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAMxD;AAOD,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAM9D"}
@@ -0,0 +1,70 @@
1
+ export const MAX_PATH = 512;
2
+ export const MAX_RAW = 2048;
3
+ /* A string that looks like a path but may carry a secret is NOT a path: a URL
4
+ * (webhook tokens live in the path, credentials in the userinfo or query), a
5
+ * data: URI, anything with a query/assignment/userinfo marker, or base64
6
+ * padding. A Windows drive letter (C:\ or C:/) is the one scheme-shaped prefix
7
+ * that is still a path. */
8
+ const DRIVE = /^[A-Za-z]:[\\/]/;
9
+ const SCHEME = /^[A-Za-z][A-Za-z0-9+.-]*:/;
10
+ export function isPathLike(s) {
11
+ if (!s || s.length > MAX_PATH || /\s/.test(s))
12
+ return false;
13
+ if (SCHEME.test(s) && !DRIVE.test(s))
14
+ return false;
15
+ if (/[?=@]/.test(s))
16
+ return false;
17
+ if (/^(\/|\.\/|\.\.\/|~\/|[A-Za-z]:[\\/])/.test(s))
18
+ return true;
19
+ return s.includes('/') || s.includes('\\');
20
+ }
21
+ function typeOf(v) {
22
+ if (v === null)
23
+ return 'null';
24
+ if (Array.isArray(v))
25
+ return 'array';
26
+ const t = typeof v;
27
+ if (t === 'string' || t === 'number' || t === 'boolean')
28
+ return t;
29
+ return 'object';
30
+ }
31
+ function shape(v) {
32
+ const type = typeOf(v);
33
+ if (type === 'string') {
34
+ const s = v;
35
+ return isPathLike(s) ? { type, len: s.length, path: s } : { type, len: s.length };
36
+ }
37
+ if (type === 'array')
38
+ return { type, len: v.length };
39
+ if (type === 'object')
40
+ return { type, len: Object.keys(v).length };
41
+ return { type };
42
+ }
43
+ function isRecord(v) {
44
+ return typeof v === 'object' && v !== null && !Array.isArray(v);
45
+ }
46
+ export function summarizeArgs(input) {
47
+ if (input === undefined)
48
+ return {};
49
+ if (!isRecord(input))
50
+ return { _: shape(input) };
51
+ const out = {};
52
+ for (const [k, v] of Object.entries(input))
53
+ out[k] = shape(v);
54
+ return out;
55
+ }
56
+ function stringify(v) {
57
+ const s = typeof v === 'string' ? v : (JSON.stringify(v) ?? String(v));
58
+ return s.length > MAX_RAW ? s.slice(0, MAX_RAW) : s;
59
+ }
60
+ export function rawArgs(input) {
61
+ if (input === undefined)
62
+ return {};
63
+ if (!isRecord(input))
64
+ return { _: stringify(input) };
65
+ const out = {};
66
+ for (const [k, v] of Object.entries(input))
67
+ out[k] = stringify(v);
68
+ return out;
69
+ }
70
+ //# sourceMappingURL=summarize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarize.js","sourceRoot":"","sources":["../../approvals/summarize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { TextStore } from './textStore';
2
+ export declare function makeTestTextStore(initial?: string | null): TextStore & {
3
+ text: string | null;
4
+ preserved: string[];
5
+ };
6
+ //# sourceMappingURL=testTextStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testTextStore.d.ts","sourceRoot":"","sources":["../../approvals/testTextStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,MAAM,GAAG,IAAW,GAAG,SAAS,GAAG;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CASzH"}
@@ -0,0 +1,11 @@
1
+ export function makeTestTextStore(initial = null) {
2
+ const store = {
3
+ text: initial,
4
+ preserved: [],
5
+ async read() { return store.text; },
6
+ async write(text) { store.text = text; },
7
+ async preserve(text) { store.preserved.push(text); },
8
+ };
9
+ return store;
10
+ }
11
+ //# sourceMappingURL=testTextStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testTextStore.js","sourceRoot":"","sources":["../../approvals/testTextStore.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,iBAAiB,CAAC,UAAyB,IAAI;IAC7D,MAAM,KAAK,GAAG;QACZ,IAAI,EAAE,OAAO;QACb,SAAS,EAAE,EAAc;QACzB,KAAK,CAAC,IAAI,KAAK,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACnC,KAAK,CAAC,KAAK,CAAC,IAAY,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;QAChD,KAAK,CAAC,QAAQ,CAAC,IAAY,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAC7D,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface TextStore {
2
+ /** The stored text, or null when nothing is stored. */
3
+ read(): Promise<string | null>;
4
+ write(text: string): Promise<void>;
5
+ /** Keep a copy of unreadable content before it is overwritten. Optional: a
6
+ * host with nowhere to put it simply loses the unreadable copy. */
7
+ preserve?(text: string): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=textStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textStore.d.ts","sourceRoot":"","sources":["../../approvals/textStore.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,SAAS;IACxB,uDAAuD;IACvD,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC/B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC;uEACmE;IACnE,QAAQ,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=textStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textStore.js","sourceRoot":"","sources":["../../approvals/textStore.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ /** JSON with object keys sorted recursively and no whitespace, so equal values
2
+ * hash equally regardless of key order. */
3
+ export declare function canonicalJson(v: unknown): string;
4
+ export declare function argsHash(args: unknown): Promise<string>;
5
+ //# sourceMappingURL=canonical.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical.d.ts","sourceRoot":"","sources":["../../audit/canonical.ts"],"names":[],"mappings":"AAEA;2CAC2C;AAC3C,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAKhD;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAE7D"}
@@ -0,0 +1,15 @@
1
+ import { sha256Hex } from '../core/hash.js';
2
+ /** JSON with object keys sorted recursively and no whitespace, so equal values
3
+ * hash equally regardless of key order. */
4
+ export function canonicalJson(v) {
5
+ if (v === null || typeof v !== 'object')
6
+ return JSON.stringify(v) ?? 'null';
7
+ if (Array.isArray(v))
8
+ return `[${v.map((x) => canonicalJson(x)).join(',')}]`;
9
+ const o = v;
10
+ return `{${Object.keys(o).sort().filter((k) => o[k] !== undefined).map((k) => `${JSON.stringify(k)}:${canonicalJson(o[k])}`).join(',')}}`;
11
+ }
12
+ export async function argsHash(args) {
13
+ return `sha256:${await sha256Hex(canonicalJson(args ?? {}))}`;
14
+ }
15
+ //# sourceMappingURL=canonical.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical.js","sourceRoot":"","sources":["../../audit/canonical.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC;2CAC2C;AAC3C,MAAM,UAAU,aAAa,CAAC,CAAU;IACtC,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;IAC5E,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAC7E,MAAM,CAAC,GAAG,CAA4B,CAAC;IACvC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAC5I,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAa;IAC1C,OAAO,UAAU,MAAM,SAAS,CAAC,aAAa,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;AAChE,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const newTraceId: () => string;
2
+ export declare const newSpanId: () => string;
3
+ //# sourceMappingURL=ids.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../audit/ids.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,UAAU,QAAO,MAAiB,CAAC;AAChD,eAAO,MAAM,SAAS,QAAO,MAAgB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /** W3C-shaped ids: 32 lowercase hex chars for a trace, 16 for a span. Uses
2
+ * WebCrypto so the same code runs in the browser worker and in Node (the
3
+ * sidecar) without a crypto-module import. */
4
+ function hex(bytes) {
5
+ const a = new Uint8Array(bytes);
6
+ globalThis.crypto.getRandomValues(a);
7
+ return Array.from(a, (b) => b.toString(16).padStart(2, '0')).join('');
8
+ }
9
+ export const newTraceId = () => hex(16);
10
+ export const newSpanId = () => hex(8);
11
+ //# sourceMappingURL=ids.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.js","sourceRoot":"","sources":["../../audit/ids.ts"],"names":[],"mappings":"AAAA;;8CAE8C;AAC9C,SAAS,GAAG,CAAC,KAAa;IACxB,MAAM,CAAC,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IAChC,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACrC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxE,CAAC;AACD,MAAM,CAAC,MAAM,UAAU,GAAG,GAAW,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChD,MAAM,CAAC,MAAM,SAAS,GAAG,GAAW,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './canonical';
2
+ export * from './ids';
3
+ export * from './log';
4
+ export * from './recorder';
5
+ export * from './verify';
6
+ export * from './runAudit';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../audit/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC;AACtB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './canonical.js';
2
+ export * from './ids.js';
3
+ export * from './log.js';
4
+ export * from './recorder.js';
5
+ export * from './verify.js';
6
+ export * from './runAudit.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../audit/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC;AACtB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC"}
@@ -0,0 +1,64 @@
1
+ import type { AuditDraft, AuditHost, FileService } from '@corenel/protocol';
2
+ import { flattenFiles } from '@corenel/protocol';
3
+ export declare const AUDIT_SEGMENT_LINES = 1000;
4
+ export declare const AUDIT_RETENTION_DAYS = 180;
5
+ export declare const AUDIT_GENESIS = "sha256:genesis";
6
+ export declare function activeSegmentName(host: AuditHost, writerId?: string): string;
7
+ export interface AuditArchive {
8
+ name: string;
9
+ date: string;
10
+ n: number;
11
+ }
12
+ /** The files of `host` that belong to a writer OTHER than `ownWriterId`: every
13
+ * `audit-<host>-<writerId>.jsonl` active segment and
14
+ * `audit-<host>-<writerId>-<yyyymmdd>-<n>.jsonl` archive whose writerId
15
+ * differs. Files without a writerId (the daemon's) and other hosts' files
16
+ * never match: a writerless archive `audit-<host>-<date>-<n>.jsonl` has no
17
+ * way to fit `<writerId>` (no `-`) followed by `.jsonl` or a full
18
+ * `-<8 digits>-<n>` suffix. `date` is set for an archive, absent for an active segment. */
19
+ export declare function foreignWriterFiles(names: string[], host: AuditHost, ownWriterId: string): {
20
+ name: string;
21
+ date?: string;
22
+ }[];
23
+ /** The archived segments of one file set (`host`, plus `writerId` when set)
24
+ * among `names` (basenames), oldest first by (date, n). Shared with the
25
+ * verifier so both walk the same order. Without a writerId only the host's
26
+ * own archives match: a writerId holds no `-` and a date is exactly 8 digits
27
+ * then `-`, so `audit-<host>-<writerId>-...` never parses as
28
+ * `audit-<host>-<date>-<n>`. */
29
+ export declare function sortedAuditArchives(names: string[], host: AuditHost, writerId?: string): AuditArchive[];
30
+ /** Basenames of every file under `root` (as decisionLog does, via flattenFiles). */
31
+ export declare function auditFileNames(nodes: Parameters<typeof flattenFiles>[0]): string[];
32
+ /** The non-empty lines of a segment's text, without their newlines. */
33
+ export declare function segmentLines(text: string): string[];
34
+ export declare function lineHash(line: string): Promise<string>;
35
+ export interface AuditLog {
36
+ append(d: AuditDraft): void;
37
+ flush(): Promise<void>;
38
+ /** Entries lost since creation (for the run's incomplete marker). */
39
+ lost(): number;
40
+ }
41
+ export interface AuditLogOptions {
42
+ files: () => Promise<FileService | null>;
43
+ root: string;
44
+ host: AuditHost;
45
+ /** Distinguishes writers that share one root+host (see the header): the
46
+ * log then owns `audit-<host>-<writerId>*.jsonl` only. Letters, digits and
47
+ * `_` only; omitted -> `audit-<host>*.jsonl`. */
48
+ writerId?: string;
49
+ /** Whether the log is on. A plain boolean is fixed for the log's life; a
50
+ * callback is resolved fresh at every append and flush, so a setting
51
+ * toggled mid-life (e.g. by a Settings UI) reaches the SAME log instance --
52
+ * writing its `disabled`/`enabled` marker in order -- rather than requiring
53
+ * a second instance on the same root+host, which two live writers forbid. */
54
+ enabled: boolean | (() => boolean);
55
+ now?: () => number;
56
+ segmentLines?: number;
57
+ retentionDays?: number;
58
+ flushMs?: number;
59
+ flushAt?: number;
60
+ }
61
+ /** Test-only: forget every retention run so each test starts independent. */
62
+ export declare function __resetAuditRetentionForTest(): void;
63
+ export declare function createAuditLog(opts: AuditLogOptions): AuditLog;
64
+ //# sourceMappingURL=log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../audit/log.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAIjD,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,eAAO,MAAM,aAAa,mBAAmB,CAAC;AAe9C,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED,MAAM,WAAW,YAAY;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE;AAEvE;;;;;;2FAM2F;AAC3F,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,CAS3H;AAED;;;;;gCAKgC;AAChC,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE,CAQvG;AAED,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAElF;AAED,uEAAuE;AACvE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAEnD;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE5D;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,qEAAqE;IACrE,IAAI,IAAI,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB;;qDAEiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;iFAI6E;IAC7E,OAAO,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC;IACnC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD,6EAA6E;AAC7E,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD;AA2CD,wBAAgB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,QAAQ,CA6T9D"}