@flowdot.ai/guardian-agent 0.1.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 (188) hide show
  1. package/LICENSE +40 -0
  2. package/README.md +281 -0
  3. package/ROADMAP.md +109 -0
  4. package/dist/audit/attestor.d.ts +102 -0
  5. package/dist/audit/attestor.d.ts.map +1 -0
  6. package/dist/audit/attestor.js +103 -0
  7. package/dist/audit/attestor.js.map +1 -0
  8. package/dist/audit/chain.d.ts +30 -0
  9. package/dist/audit/chain.d.ts.map +1 -0
  10. package/dist/audit/chain.js +65 -0
  11. package/dist/audit/chain.js.map +1 -0
  12. package/dist/audit/correlation.d.ts +114 -0
  13. package/dist/audit/correlation.d.ts.map +1 -0
  14. package/dist/audit/correlation.js +259 -0
  15. package/dist/audit/correlation.js.map +1 -0
  16. package/dist/audit/index.d.ts +13 -0
  17. package/dist/audit/index.d.ts.map +1 -0
  18. package/dist/audit/index.js +8 -0
  19. package/dist/audit/index.js.map +1 -0
  20. package/dist/audit/reader.d.ts +30 -0
  21. package/dist/audit/reader.d.ts.map +1 -0
  22. package/dist/audit/reader.js +85 -0
  23. package/dist/audit/reader.js.map +1 -0
  24. package/dist/audit/signature.d.ts +39 -0
  25. package/dist/audit/signature.d.ts.map +1 -0
  26. package/dist/audit/signature.js +73 -0
  27. package/dist/audit/signature.js.map +1 -0
  28. package/dist/audit/stats.d.ts +106 -0
  29. package/dist/audit/stats.d.ts.map +1 -0
  30. package/dist/audit/stats.js +196 -0
  31. package/dist/audit/stats.js.map +1 -0
  32. package/dist/audit/writer.d.ts +96 -0
  33. package/dist/audit/writer.d.ts.map +1 -0
  34. package/dist/audit/writer.js +263 -0
  35. package/dist/audit/writer.js.map +1 -0
  36. package/dist/cli/guardian-baseline.d.ts +42 -0
  37. package/dist/cli/guardian-baseline.d.ts.map +1 -0
  38. package/dist/cli/guardian-baseline.js +265 -0
  39. package/dist/cli/guardian-baseline.js.map +1 -0
  40. package/dist/cli/guardian-correlator.d.ts +47 -0
  41. package/dist/cli/guardian-correlator.d.ts.map +1 -0
  42. package/dist/cli/guardian-correlator.js +217 -0
  43. package/dist/cli/guardian-correlator.js.map +1 -0
  44. package/dist/cli/guardian-verify.d.ts +30 -0
  45. package/dist/cli/guardian-verify.d.ts.map +1 -0
  46. package/dist/cli/guardian-verify.js +149 -0
  47. package/dist/cli/guardian-verify.js.map +1 -0
  48. package/dist/errors.d.ts +28 -0
  49. package/dist/errors.d.ts.map +1 -0
  50. package/dist/errors.js +40 -0
  51. package/dist/errors.js.map +1 -0
  52. package/dist/estop/heartbeat.d.ts +94 -0
  53. package/dist/estop/heartbeat.d.ts.map +1 -0
  54. package/dist/estop/heartbeat.js +135 -0
  55. package/dist/estop/heartbeat.js.map +1 -0
  56. package/dist/estop/hub.d.ts +76 -0
  57. package/dist/estop/hub.d.ts.map +1 -0
  58. package/dist/estop/hub.js +167 -0
  59. package/dist/estop/hub.js.map +1 -0
  60. package/dist/estop/index.d.ts +12 -0
  61. package/dist/estop/index.d.ts.map +1 -0
  62. package/dist/estop/index.js +6 -0
  63. package/dist/estop/index.js.map +1 -0
  64. package/dist/estop/local.d.ts +31 -0
  65. package/dist/estop/local.d.ts.map +1 -0
  66. package/dist/estop/local.js +101 -0
  67. package/dist/estop/local.js.map +1 -0
  68. package/dist/estop/middleware.d.ts +36 -0
  69. package/dist/estop/middleware.d.ts.map +1 -0
  70. package/dist/estop/middleware.js +40 -0
  71. package/dist/estop/middleware.js.map +1 -0
  72. package/dist/estop/poller.d.ts +36 -0
  73. package/dist/estop/poller.d.ts.map +1 -0
  74. package/dist/estop/poller.js +85 -0
  75. package/dist/estop/poller.js.map +1 -0
  76. package/dist/estop/types.d.ts +31 -0
  77. package/dist/estop/types.d.ts.map +1 -0
  78. package/dist/estop/types.js +5 -0
  79. package/dist/estop/types.js.map +1 -0
  80. package/dist/gate/async-callback.d.ts +27 -0
  81. package/dist/gate/async-callback.d.ts.map +1 -0
  82. package/dist/gate/async-callback.js +79 -0
  83. package/dist/gate/async-callback.js.map +1 -0
  84. package/dist/gate/cli.d.ts +29 -0
  85. package/dist/gate/cli.d.ts.map +1 -0
  86. package/dist/gate/cli.js +83 -0
  87. package/dist/gate/cli.js.map +1 -0
  88. package/dist/gate/data-channel.d.ts +41 -0
  89. package/dist/gate/data-channel.d.ts.map +1 -0
  90. package/dist/gate/data-channel.js +132 -0
  91. package/dist/gate/data-channel.js.map +1 -0
  92. package/dist/gate/index.d.ts +13 -0
  93. package/dist/gate/index.d.ts.map +1 -0
  94. package/dist/gate/index.js +7 -0
  95. package/dist/gate/index.js.map +1 -0
  96. package/dist/gate/options.d.ts +90 -0
  97. package/dist/gate/options.d.ts.map +1 -0
  98. package/dist/gate/options.js +131 -0
  99. package/dist/gate/options.js.map +1 -0
  100. package/dist/gate/programmatic.d.ts +9 -0
  101. package/dist/gate/programmatic.d.ts.map +1 -0
  102. package/dist/gate/programmatic.js +20 -0
  103. package/dist/gate/programmatic.js.map +1 -0
  104. package/dist/gate/two-key.d.ts +90 -0
  105. package/dist/gate/two-key.d.ts.map +1 -0
  106. package/dist/gate/two-key.js +78 -0
  107. package/dist/gate/two-key.js.map +1 -0
  108. package/dist/gate/types.d.ts +25 -0
  109. package/dist/gate/types.d.ts.map +1 -0
  110. package/dist/gate/types.js +5 -0
  111. package/dist/gate/types.js.map +1 -0
  112. package/dist/index.d.ts +33 -0
  113. package/dist/index.d.ts.map +1 -0
  114. package/dist/index.js +26 -0
  115. package/dist/index.js.map +1 -0
  116. package/dist/notify/console.d.ts +13 -0
  117. package/dist/notify/console.d.ts.map +1 -0
  118. package/dist/notify/console.js +27 -0
  119. package/dist/notify/console.js.map +1 -0
  120. package/dist/notify/index.d.ts +8 -0
  121. package/dist/notify/index.d.ts.map +1 -0
  122. package/dist/notify/index.js +4 -0
  123. package/dist/notify/index.js.map +1 -0
  124. package/dist/notify/multi.d.ts +14 -0
  125. package/dist/notify/multi.d.ts.map +1 -0
  126. package/dist/notify/multi.js +22 -0
  127. package/dist/notify/multi.js.map +1 -0
  128. package/dist/notify/types.d.ts +21 -0
  129. package/dist/notify/types.d.ts.map +1 -0
  130. package/dist/notify/types.js +5 -0
  131. package/dist/notify/types.js.map +1 -0
  132. package/dist/notify/webhook.d.ts +21 -0
  133. package/dist/notify/webhook.d.ts.map +1 -0
  134. package/dist/notify/webhook.js +37 -0
  135. package/dist/notify/webhook.js.map +1 -0
  136. package/dist/policy/attribution.d.ts +61 -0
  137. package/dist/policy/attribution.d.ts.map +1 -0
  138. package/dist/policy/attribution.js +116 -0
  139. package/dist/policy/attribution.js.map +1 -0
  140. package/dist/policy/evaluator.d.ts +36 -0
  141. package/dist/policy/evaluator.d.ts.map +1 -0
  142. package/dist/policy/evaluator.js +211 -0
  143. package/dist/policy/evaluator.js.map +1 -0
  144. package/dist/policy/index.d.ts +11 -0
  145. package/dist/policy/index.d.ts.map +1 -0
  146. package/dist/policy/index.js +7 -0
  147. package/dist/policy/index.js.map +1 -0
  148. package/dist/policy/integrity.d.ts +17 -0
  149. package/dist/policy/integrity.d.ts.map +1 -0
  150. package/dist/policy/integrity.js +31 -0
  151. package/dist/policy/integrity.js.map +1 -0
  152. package/dist/policy/loader.d.ts +9 -0
  153. package/dist/policy/loader.d.ts.map +1 -0
  154. package/dist/policy/loader.js +124 -0
  155. package/dist/policy/loader.js.map +1 -0
  156. package/dist/policy/site-key.d.ts +22 -0
  157. package/dist/policy/site-key.d.ts.map +1 -0
  158. package/dist/policy/site-key.js +48 -0
  159. package/dist/policy/site-key.js.map +1 -0
  160. package/dist/policy/store.d.ts +45 -0
  161. package/dist/policy/store.d.ts.map +1 -0
  162. package/dist/policy/store.js +223 -0
  163. package/dist/policy/store.js.map +1 -0
  164. package/dist/policy/types.d.ts +72 -0
  165. package/dist/policy/types.d.ts.map +1 -0
  166. package/dist/policy/types.js +5 -0
  167. package/dist/policy/types.js.map +1 -0
  168. package/dist/runtime/capability.d.ts +125 -0
  169. package/dist/runtime/capability.d.ts.map +1 -0
  170. package/dist/runtime/capability.js +121 -0
  171. package/dist/runtime/capability.js.map +1 -0
  172. package/dist/runtime/honeytokens.d.ts +104 -0
  173. package/dist/runtime/honeytokens.d.ts.map +1 -0
  174. package/dist/runtime/honeytokens.js +115 -0
  175. package/dist/runtime/honeytokens.js.map +1 -0
  176. package/dist/runtime/multi-rate-limiter.d.ts +90 -0
  177. package/dist/runtime/multi-rate-limiter.d.ts.map +1 -0
  178. package/dist/runtime/multi-rate-limiter.js +133 -0
  179. package/dist/runtime/multi-rate-limiter.js.map +1 -0
  180. package/dist/runtime/runtime.d.ts +94 -0
  181. package/dist/runtime/runtime.d.ts.map +1 -0
  182. package/dist/runtime/runtime.js +276 -0
  183. package/dist/runtime/runtime.js.map +1 -0
  184. package/dist/types.d.ts +97 -0
  185. package/dist/types.d.ts.map +1 -0
  186. package/dist/types.js +5 -0
  187. package/dist/types.js.map +1 -0
  188. package/package.json +83 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../src/policy/evaluator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export type { Policy, PolicyRule, PolicyScope, PolicyDecision, PolicyEvaluation, PolicyWhen, } from './types.js';
2
+ export { PolicyEvaluator, globMatch } from './evaluator.js';
3
+ export { flatGlobMatch, matchAttributionPath, renderAttributionPath, ATTRIBUTION_MISSING_SEGMENT, } from './attribution.js';
4
+ export { PolicyStore } from './store.js';
5
+ export type { PolicyStoreOptions } from './store.js';
6
+ export { parsePolicy, validatePolicy } from './loader.js';
7
+ export { signPayload, verifyPayload } from './integrity.js';
8
+ export type { SignedPolicyFile } from './integrity.js';
9
+ export { loadOrCreateSiteKey, siteKeyFromBytes, SITE_KEY_BYTES } from './site-key.js';
10
+ export type { SiteKey } from './site-key.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/policy/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,MAAM,EACN,UAAU,EACV,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC5D,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACtF,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { PolicyEvaluator, globMatch } from './evaluator.js';
2
+ export { flatGlobMatch, matchAttributionPath, renderAttributionPath, ATTRIBUTION_MISSING_SEGMENT, } from './attribution.js';
3
+ export { PolicyStore } from './store.js';
4
+ export { parsePolicy, validatePolicy } from './loader.js';
5
+ export { signPayload, verifyPayload } from './integrity.js';
6
+ export { loadOrCreateSiteKey, siteKeyFromBytes, SITE_KEY_BYTES } from './site-key.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/policy/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE5D,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * HMAC-SHA256 integrity for policy files. SPEC §3.5.
3
+ *
4
+ * Signatures are produced over the canonical UTF-8 bytes of the policy data,
5
+ * using a 32-byte site key.
6
+ */
7
+ export interface SignedPolicyFile {
8
+ version: 1;
9
+ signed_at: string;
10
+ signature: string;
11
+ data: string;
12
+ }
13
+ /** Compute HMAC-SHA256 over `data` using `key`. Returns base64. */
14
+ export declare function signPayload(data: string | Buffer, key: Buffer): string;
15
+ /** Constant-time HMAC verification. Returns true iff the signature matches. */
16
+ export declare function verifyPayload(data: string | Buffer, signature: string, key: Buffer): boolean;
17
+ //# sourceMappingURL=integrity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrity.d.ts","sourceRoot":"","sources":["../../src/policy/integrity.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,mEAAmE;AACnE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAItE;AAED,+EAA+E;AAC/E,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,GACV,OAAO,CAaT"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * HMAC-SHA256 integrity for policy files. SPEC §3.5.
3
+ *
4
+ * Signatures are produced over the canonical UTF-8 bytes of the policy data,
5
+ * using a 32-byte site key.
6
+ */
7
+ import { createHmac, timingSafeEqual } from 'node:crypto';
8
+ /** Compute HMAC-SHA256 over `data` using `key`. Returns base64. */
9
+ export function signPayload(data, key) {
10
+ const hmac = createHmac('sha256', key);
11
+ hmac.update(typeof data === 'string' ? Buffer.from(data, 'utf-8') : data);
12
+ return hmac.digest('base64');
13
+ }
14
+ /** Constant-time HMAC verification. Returns true iff the signature matches. */
15
+ export function verifyPayload(data, signature, key) {
16
+ const expected = signPayload(data, key);
17
+ const expectedBuf = Buffer.from(expected, 'base64');
18
+ let providedBuf;
19
+ /* c8 ignore start */
20
+ try {
21
+ providedBuf = Buffer.from(signature, 'base64');
22
+ }
23
+ catch {
24
+ return false;
25
+ }
26
+ /* c8 ignore stop */
27
+ if (providedBuf.length !== expectedBuf.length)
28
+ return false;
29
+ return timingSafeEqual(providedBuf, expectedBuf);
30
+ }
31
+ //# sourceMappingURL=integrity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrity.js","sourceRoot":"","sources":["../../src/policy/integrity.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAS1D,mEAAmE;AACnE,MAAM,UAAU,WAAW,CAAC,IAAqB,EAAE,GAAW;IAC5D,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC1E,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,aAAa,CAC3B,IAAqB,EACrB,SAAiB,EACjB,GAAW;IAEX,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACxC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACpD,IAAI,WAAmB,CAAC;IACxB,qBAAqB;IACrB,IAAI,CAAC;QACH,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IACD,oBAAoB;IACpB,IAAI,WAAW,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC5D,OAAO,eAAe,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Parse + validate a Policy. SPEC §3.1.
3
+ */
4
+ import type { Policy } from './types.js';
5
+ /** Parse a YAML string into a validated Policy. */
6
+ export declare function parsePolicy(yaml: string): Policy;
7
+ /** Validate a parsed object as a Policy. Throws GuardianConfigError on issues. */
8
+ export declare function validatePolicy(raw: unknown): Policy;
9
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/policy/loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,MAAM,EAA2B,MAAM,YAAY,CAAC;AAKlE,mDAAmD;AACnD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGhD;AAED,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAoDnD"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Parse + validate a Policy. SPEC §3.1.
3
+ */
4
+ import { parse as parseYaml } from 'yaml';
5
+ import { GuardianConfigError } from '../errors.js';
6
+ const VALID_SCOPES = ['once', 'session', 'forever', 'banned'];
7
+ const VALID_DEFAULT_SCOPES = ['prompt', ...VALID_SCOPES];
8
+ /** Parse a YAML string into a validated Policy. */
9
+ export function parsePolicy(yaml) {
10
+ const raw = parseYaml(yaml);
11
+ return validatePolicy(raw);
12
+ }
13
+ /** Validate a parsed object as a Policy. Throws GuardianConfigError on issues. */
14
+ export function validatePolicy(raw) {
15
+ if (!isObject(raw)) {
16
+ throw new GuardianConfigError('policy must be an object');
17
+ }
18
+ const version = raw.version;
19
+ if (typeof version !== 'string' || version.length === 0) {
20
+ throw new GuardianConfigError('policy.version must be a non-empty string');
21
+ }
22
+ const agent_id = raw.agent_id;
23
+ if (typeof agent_id !== 'string' || agent_id.length === 0) {
24
+ throw new GuardianConfigError('policy.agent_id must be a non-empty string');
25
+ }
26
+ const defaultsRaw = raw.defaults;
27
+ if (!isObject(defaultsRaw)) {
28
+ throw new GuardianConfigError('policy.defaults must be an object');
29
+ }
30
+ const defaultsScope = defaultsRaw.scope;
31
+ if (typeof defaultsScope !== 'string' || !VALID_DEFAULT_SCOPES.includes(defaultsScope)) {
32
+ throw new GuardianConfigError(`policy.defaults.scope must be one of ${VALID_DEFAULT_SCOPES.join(', ')}`);
33
+ }
34
+ const defaultsDecision = defaultsRaw.decision;
35
+ if (defaultsDecision !== undefined && defaultsDecision !== 'allow' && defaultsDecision !== 'deny') {
36
+ throw new GuardianConfigError('policy.defaults.decision must be "allow" or "deny" if set');
37
+ }
38
+ const rulesRaw = raw.rules;
39
+ if (rulesRaw !== undefined && !Array.isArray(rulesRaw)) {
40
+ throw new GuardianConfigError('policy.rules must be an array if present');
41
+ }
42
+ const rules = [];
43
+ if (Array.isArray(rulesRaw)) {
44
+ for (let i = 0; i < rulesRaw.length; i++) {
45
+ rules.push(validateRule(rulesRaw[i], i));
46
+ }
47
+ }
48
+ const defaults = {
49
+ scope: defaultsScope,
50
+ };
51
+ if (defaultsDecision !== undefined) {
52
+ defaults.decision = defaultsDecision;
53
+ }
54
+ return {
55
+ version,
56
+ agent_id,
57
+ defaults,
58
+ rules,
59
+ };
60
+ }
61
+ function validateRule(raw, index) {
62
+ if (!isObject(raw)) {
63
+ throw new GuardianConfigError(`rule[${index}] must be an object`);
64
+ }
65
+ const tool = raw.tool;
66
+ if (typeof tool !== 'string' || tool.length === 0) {
67
+ throw new GuardianConfigError(`rule[${index}].tool must be a non-empty string`);
68
+ }
69
+ if (tool.startsWith('guardian.') ||
70
+ tool.startsWith('runtime.') ||
71
+ tool.startsWith('internal.')) {
72
+ throw new GuardianConfigError(`rule[${index}].tool uses a reserved prefix`);
73
+ }
74
+ const scope = raw.scope;
75
+ if (typeof scope !== 'string' || !VALID_SCOPES.includes(scope)) {
76
+ throw new GuardianConfigError(`rule[${index}].scope must be one of ${VALID_SCOPES.join(', ')}`);
77
+ }
78
+ const decision = raw.decision;
79
+ if (decision !== undefined && decision !== 'allow' && decision !== 'deny') {
80
+ throw new GuardianConfigError(`rule[${index}].decision must be "allow" or "deny" if set`);
81
+ }
82
+ const notes = raw.notes;
83
+ if (notes !== undefined && typeof notes !== 'string') {
84
+ throw new GuardianConfigError(`rule[${index}].notes must be a string if set`);
85
+ }
86
+ const when = raw.when;
87
+ let validatedWhen;
88
+ if (when !== undefined) {
89
+ if (!isObject(when)) {
90
+ throw new GuardianConfigError(`rule[${index}].when must be an object if set`);
91
+ }
92
+ validatedWhen = {};
93
+ if (when['model.provider'] !== undefined) {
94
+ if (typeof when['model.provider'] !== 'string') {
95
+ throw new GuardianConfigError(`rule[${index}].when['model.provider'] must be a string`);
96
+ }
97
+ validatedWhen['model.provider'] = when['model.provider'];
98
+ }
99
+ if (when['model.id'] !== undefined) {
100
+ if (typeof when['model.id'] !== 'string') {
101
+ throw new GuardianConfigError(`rule[${index}].when['model.id'] must be a string`);
102
+ }
103
+ validatedWhen['model.id'] = when['model.id'];
104
+ }
105
+ }
106
+ const out = {
107
+ tool,
108
+ scope: scope,
109
+ };
110
+ if (decision !== undefined) {
111
+ out.decision = decision;
112
+ }
113
+ if (notes !== undefined) {
114
+ out.notes = notes;
115
+ }
116
+ if (validatedWhen !== undefined) {
117
+ out.when = validatedWhen;
118
+ }
119
+ return out;
120
+ }
121
+ function isObject(v) {
122
+ return typeof v === 'object' && v !== null && !Array.isArray(v);
123
+ }
124
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/policy/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * SiteKey — 32 random bytes used as the HMAC key for policy file integrity.
3
+ *
4
+ * Generated on first run; persisted under `.guardian/site.key` (or whatever
5
+ * directory the consumer points us at). Mode 0o600. Never logged.
6
+ *
7
+ * SPEC §3.5.
8
+ */
9
+ declare const SITE_KEY_BYTES = 32;
10
+ export interface SiteKey {
11
+ bytes: Buffer;
12
+ path: string;
13
+ }
14
+ /**
15
+ * Load the site key from `path`, or generate and persist a new one if absent.
16
+ * Throws if the file exists but has the wrong length.
17
+ */
18
+ export declare function loadOrCreateSiteKey(path: string): SiteKey;
19
+ /** Build a SiteKey from raw bytes (for testing). */
20
+ export declare function siteKeyFromBytes(bytes: Buffer): SiteKey;
21
+ export { SITE_KEY_BYTES };
22
+ //# sourceMappingURL=site-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"site-key.d.ts","sourceRoot":"","sources":["../../src/policy/site-key.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,QAAA,MAAM,cAAc,KAAK,CAAC;AAE1B,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAuBzD;AAED,oDAAoD;AACpD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAOvD;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * SiteKey — 32 random bytes used as the HMAC key for policy file integrity.
3
+ *
4
+ * Generated on first run; persisted under `.guardian/site.key` (or whatever
5
+ * directory the consumer points us at). Mode 0o600. Never logged.
6
+ *
7
+ * SPEC §3.5.
8
+ */
9
+ import { existsSync, readFileSync, writeFileSync, chmodSync, mkdirSync } from 'node:fs';
10
+ import { randomBytes } from 'node:crypto';
11
+ import { dirname } from 'node:path';
12
+ import { GuardianConfigError } from '../errors.js';
13
+ const SITE_KEY_BYTES = 32;
14
+ /**
15
+ * Load the site key from `path`, or generate and persist a new one if absent.
16
+ * Throws if the file exists but has the wrong length.
17
+ */
18
+ export function loadOrCreateSiteKey(path) {
19
+ if (existsSync(path)) {
20
+ const bytes = readFileSync(path);
21
+ if (bytes.length !== SITE_KEY_BYTES) {
22
+ throw new GuardianConfigError(`site key at ${path} is ${bytes.length} bytes, expected ${SITE_KEY_BYTES}`);
23
+ }
24
+ return { bytes, path };
25
+ }
26
+ mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
27
+ const bytes = randomBytes(SITE_KEY_BYTES);
28
+ writeFileSync(path, bytes, { mode: 0o600 });
29
+ // Re-chmod in case umask suppressed it.
30
+ /* c8 ignore start */
31
+ try {
32
+ chmodSync(path, 0o600);
33
+ }
34
+ catch {
35
+ // Windows: mode bits may not be enforceable. Best-effort.
36
+ }
37
+ /* c8 ignore stop */
38
+ return { bytes, path };
39
+ }
40
+ /** Build a SiteKey from raw bytes (for testing). */
41
+ export function siteKeyFromBytes(bytes) {
42
+ if (bytes.length !== SITE_KEY_BYTES) {
43
+ throw new GuardianConfigError(`site key bytes are ${bytes.length}, expected ${SITE_KEY_BYTES}`);
44
+ }
45
+ return { bytes, path: '<in-memory>' };
46
+ }
47
+ export { SITE_KEY_BYTES };
48
+ //# sourceMappingURL=site-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"site-key.js","sourceRoot":"","sources":["../../src/policy/site-key.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,cAAc,GAAG,EAAE,CAAC;AAO1B;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,KAAK,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;YACpC,MAAM,IAAI,mBAAmB,CAC3B,eAAe,IAAI,OAAO,KAAK,CAAC,MAAM,oBAAoB,cAAc,EAAE,CAC3E,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;IAC1C,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5C,wCAAwC;IACxC,qBAAqB;IACrB,IAAI,CAAC;QACH,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,0DAA0D;IAC5D,CAAC;IACD,oBAAoB;IACpB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,IAAI,KAAK,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;QACpC,MAAM,IAAI,mBAAmB,CAC3B,sBAAsB,KAAK,CAAC,MAAM,cAAc,cAAc,EAAE,CACjE,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;AACxC,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * PolicyStore — HMAC-signed permissions.yaml + unsigned session.yaml.
3
+ * SPEC §3.1 / §3.5 / §3.6.
4
+ *
5
+ * Pre-alpha: simple sync I/O strategy + per-store async queue to serialize
6
+ * writes. Cross-process locking via `proper-lockfile` is planned for v0.4+;
7
+ * for now, the library assumes a single process per `.guardian/` directory.
8
+ */
9
+ import type { Policy, PolicyRule, PolicyScope } from './types.js';
10
+ import { type SiteKey } from './site-key.js';
11
+ export interface PolicyStoreOptions {
12
+ /** Directory holding permissions.yaml, session.yaml, site.key. */
13
+ dir: string;
14
+ /** Agent id this store is for. */
15
+ agentId: string;
16
+ /** Default behavior when no rule matches. Used to seed an empty store. */
17
+ defaultScope?: 'prompt' | PolicyScope;
18
+ /** Pre-supplied site key (testing). If absent, loaded or created at `dir/site.key`. */
19
+ siteKey?: SiteKey;
20
+ }
21
+ export declare class PolicyStore {
22
+ readonly dir: string;
23
+ readonly agentId: string;
24
+ private readonly siteKey;
25
+ private readonly defaultScope;
26
+ private writeQueue;
27
+ constructor(options: PolicyStoreOptions);
28
+ /** Read merged policy: persistent rules + session rules. */
29
+ getPolicy(): Policy;
30
+ /** Add a rule. session/once go to session.yaml; forever/banned go to permissions.yaml. */
31
+ addRule(rule: PolicyRule): Promise<void>;
32
+ /** Remove a rule by tool + scope. No-op if absent. */
33
+ removeRule(tool: string, scope: PolicyScope): Promise<void>;
34
+ /** Drop session rules. */
35
+ clearSession(): Promise<void>;
36
+ /** Idempotent close. */
37
+ close(): Promise<void>;
38
+ private enqueue;
39
+ private emptyPolicy;
40
+ private readPersistent;
41
+ private writePersistent;
42
+ private readSession;
43
+ private writeSession;
44
+ }
45
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/policy/store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiBH,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGlE,OAAO,EAAuB,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAElE,MAAM,WAAW,kBAAkB;IACjC,kEAAkE;IAClE,GAAG,EAAE,MAAM,CAAC;IACZ,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;IACtC,uFAAuF;IACvF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAOD,qBAAa,WAAW;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyB;IAEtD,OAAO,CAAC,UAAU,CAAuC;gBAE7C,OAAO,EAAE,kBAAkB;IAQvC,4DAA4D;IAC5D,SAAS,IAAI,MAAM;IAWnB,0FAA0F;IAC1F,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBxC,sDAAsD;IACtD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAc3D,0BAA0B;IAC1B,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAS7B,wBAAwB;IAClB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAa5B,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,cAAc;IAqBtB,OAAO,CAAC,eAAe;IA0BvB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,YAAY;CAiBrB"}
@@ -0,0 +1,223 @@
1
+ /**
2
+ * PolicyStore — HMAC-signed permissions.yaml + unsigned session.yaml.
3
+ * SPEC §3.1 / §3.5 / §3.6.
4
+ *
5
+ * Pre-alpha: simple sync I/O strategy + per-store async queue to serialize
6
+ * writes. Cross-process locking via `proper-lockfile` is planned for v0.4+;
7
+ * for now, the library assumes a single process per `.guardian/` directory.
8
+ */
9
+ import { existsSync, readFileSync, writeFileSync, chmodSync, mkdirSync, unlinkSync, statSync, } from 'node:fs';
10
+ import { randomFillSync } from 'node:crypto';
11
+ import { join } from 'node:path';
12
+ import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
13
+ import { GuardianIntegrityError } from '../errors.js';
14
+ import { validatePolicy } from './loader.js';
15
+ import { signPayload, verifyPayload } from './integrity.js';
16
+ import { loadOrCreateSiteKey } from './site-key.js';
17
+ const PERMISSIONS_FILE = 'permissions.yaml';
18
+ const SESSION_FILE = 'session.yaml';
19
+ const SITE_KEY_FILE = 'site.key';
20
+ const POLICY_FILE_VERSION = 1;
21
+ export class PolicyStore {
22
+ dir;
23
+ agentId;
24
+ siteKey;
25
+ defaultScope;
26
+ writeQueue = Promise.resolve();
27
+ constructor(options) {
28
+ this.dir = options.dir;
29
+ this.agentId = options.agentId;
30
+ this.defaultScope = options.defaultScope ?? 'prompt';
31
+ mkdirSync(this.dir, { recursive: true, mode: 0o700 });
32
+ this.siteKey = options.siteKey ?? loadOrCreateSiteKey(join(this.dir, SITE_KEY_FILE));
33
+ }
34
+ /** Read merged policy: persistent rules + session rules. */
35
+ getPolicy() {
36
+ const persistent = this.readPersistent();
37
+ const session = this.readSession();
38
+ return {
39
+ version: persistent.version,
40
+ agent_id: this.agentId,
41
+ defaults: persistent.defaults,
42
+ rules: [...persistent.rules, ...session.rules],
43
+ };
44
+ }
45
+ /** Add a rule. session/once go to session.yaml; forever/banned go to permissions.yaml. */
46
+ addRule(rule) {
47
+ return this.enqueue(() => {
48
+ if (rule.scope === 'session' || rule.scope === 'once') {
49
+ const cur = this.readSession();
50
+ cur.rules = [
51
+ ...cur.rules.filter((r) => !(r.tool === rule.tool && r.scope === rule.scope)),
52
+ rule,
53
+ ];
54
+ this.writeSession(cur);
55
+ }
56
+ else {
57
+ const cur = this.readPersistent();
58
+ cur.rules = [
59
+ ...cur.rules.filter((r) => !(r.tool === rule.tool && r.scope === rule.scope)),
60
+ rule,
61
+ ];
62
+ this.writePersistent(cur);
63
+ }
64
+ });
65
+ }
66
+ /** Remove a rule by tool + scope. No-op if absent. */
67
+ removeRule(tool, scope) {
68
+ return this.enqueue(() => {
69
+ if (scope === 'session' || scope === 'once') {
70
+ const cur = this.readSession();
71
+ cur.rules = cur.rules.filter((r) => !(r.tool === tool && r.scope === scope));
72
+ this.writeSession(cur);
73
+ }
74
+ else {
75
+ const cur = this.readPersistent();
76
+ cur.rules = cur.rules.filter((r) => !(r.tool === tool && r.scope === scope));
77
+ this.writePersistent(cur);
78
+ }
79
+ });
80
+ }
81
+ /** Drop session rules. */
82
+ clearSession() {
83
+ return this.enqueue(() => {
84
+ const sessionPath = join(this.dir, SESSION_FILE);
85
+ if (existsSync(sessionPath)) {
86
+ secureUnlink(sessionPath);
87
+ }
88
+ });
89
+ }
90
+ /** Idempotent close. */
91
+ async close() {
92
+ /* c8 ignore start */
93
+ try {
94
+ await this.writeQueue;
95
+ }
96
+ catch {
97
+ // Defensive: enqueue() re-wraps with .catch(() => undefined), so
98
+ // writeQueue never actually rejects. Belt-and-braces.
99
+ }
100
+ /* c8 ignore stop */
101
+ }
102
+ // ---- internal --------------------------------------------------------------
103
+ enqueue(fn) {
104
+ const result = this.writeQueue.then(() => fn());
105
+ this.writeQueue = result.catch(() => undefined);
106
+ return result;
107
+ }
108
+ emptyPolicy() {
109
+ return {
110
+ version: '0.2',
111
+ agent_id: this.agentId,
112
+ defaults: { scope: this.defaultScope },
113
+ rules: [],
114
+ };
115
+ }
116
+ readPersistent() {
117
+ const path = join(this.dir, PERMISSIONS_FILE);
118
+ if (!existsSync(path)) {
119
+ return this.emptyPolicy();
120
+ }
121
+ const raw = readFileSync(path, 'utf-8');
122
+ const signed = parseYaml(raw);
123
+ if (!isSignedFile(signed)) {
124
+ throw new GuardianIntegrityError(`permissions.yaml at ${path} is not in signed-file format`);
125
+ }
126
+ if (!verifyPayload(signed.data, signed.signature, this.siteKey.bytes)) {
127
+ throw new GuardianIntegrityError(`permissions.yaml at ${path} failed HMAC verification`);
128
+ }
129
+ const data = parseYaml(signed.data);
130
+ return validatePolicy(data);
131
+ }
132
+ writePersistent(policy) {
133
+ const path = join(this.dir, PERMISSIONS_FILE);
134
+ const payload = {
135
+ version: policy.version,
136
+ agent_id: this.agentId,
137
+ defaults: policy.defaults,
138
+ rules: policy.rules,
139
+ };
140
+ const dataStr = stringifyYaml(payload, { sortMapEntries: true });
141
+ const signature = signPayload(dataStr, this.siteKey.bytes);
142
+ const file = {
143
+ version: POLICY_FILE_VERSION,
144
+ signed_at: new Date().toISOString(),
145
+ signature,
146
+ data: dataStr,
147
+ };
148
+ writeFileSync(path, stringifyYaml(file), { mode: 0o600 });
149
+ /* c8 ignore start */
150
+ try {
151
+ chmodSync(path, 0o600);
152
+ }
153
+ catch {
154
+ // Windows / mode-bit unsupported FS — best effort.
155
+ }
156
+ /* c8 ignore stop */
157
+ }
158
+ readSession() {
159
+ const path = join(this.dir, SESSION_FILE);
160
+ if (!existsSync(path)) {
161
+ return this.emptyPolicy();
162
+ }
163
+ const raw = readFileSync(path, 'utf-8');
164
+ if (raw.length === 0)
165
+ return this.emptyPolicy();
166
+ const parsed = parseYaml(raw);
167
+ return validatePolicy(parsed);
168
+ }
169
+ writeSession(policy) {
170
+ const path = join(this.dir, SESSION_FILE);
171
+ const payload = {
172
+ version: policy.version,
173
+ agent_id: this.agentId,
174
+ defaults: policy.defaults,
175
+ rules: policy.rules,
176
+ };
177
+ writeFileSync(path, stringifyYaml(payload, { sortMapEntries: true }), { mode: 0o600 });
178
+ /* c8 ignore start */
179
+ try {
180
+ chmodSync(path, 0o600);
181
+ }
182
+ catch {
183
+ // ignore
184
+ }
185
+ /* c8 ignore stop */
186
+ }
187
+ }
188
+ function isSignedFile(v) {
189
+ if (typeof v !== 'object' || v === null)
190
+ return false;
191
+ const obj = v;
192
+ return (obj.version === POLICY_FILE_VERSION &&
193
+ typeof obj.signed_at === 'string' &&
194
+ typeof obj.signature === 'string' &&
195
+ typeof obj.data === 'string');
196
+ }
197
+ /* c8 ignore start — defensive secure-delete helper: stat / write / unlink
198
+ failure modes are platform-specific (Windows file locks, EACCES on read-only
199
+ mounts). Catches preserved as best-effort. */
200
+ function secureUnlink(path) {
201
+ try {
202
+ const stat = statSync(path);
203
+ const len = stat.size;
204
+ if (len > 0) {
205
+ const buf = Buffer.alloc(len);
206
+ for (let i = 0; i < 3; i++) {
207
+ randomFillSync(buf);
208
+ writeFileSync(path, buf);
209
+ }
210
+ }
211
+ }
212
+ catch {
213
+ // ignore — best-effort
214
+ }
215
+ try {
216
+ unlinkSync(path);
217
+ }
218
+ catch {
219
+ // ignore
220
+ }
221
+ }
222
+ /* c8 ignore stop */
223
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/policy/store.ts"],"names":[],"mappings":"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"}