@intutic/gate 2.9.0 → 3.0.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 (95) hide show
  1. package/dist/actions.d.ts +39 -0
  2. package/dist/actions.d.ts.map +1 -1
  3. package/dist/actions.js +139 -0
  4. package/dist/actions.js.map +1 -1
  5. package/dist/client.d.ts +10 -0
  6. package/dist/client.d.ts.map +1 -1
  7. package/dist/client.js +19 -0
  8. package/dist/client.js.map +1 -1
  9. package/dist/decide.d.ts +269 -0
  10. package/dist/decide.d.ts.map +1 -0
  11. package/dist/decide.js +757 -0
  12. package/dist/decide.js.map +1 -0
  13. package/dist/decideApi.d.ts +24 -0
  14. package/dist/decideApi.d.ts.map +1 -0
  15. package/dist/decideApi.js +32 -0
  16. package/dist/decideApi.js.map +1 -0
  17. package/dist/decideEngine.d.ts +195 -0
  18. package/dist/decideEngine.d.ts.map +1 -0
  19. package/dist/decideEngine.js +707 -0
  20. package/dist/decideEngine.js.map +1 -0
  21. package/dist/decideEvaluate.d.ts +250 -0
  22. package/dist/decideEvaluate.d.ts.map +1 -0
  23. package/dist/decideEvaluate.js +504 -0
  24. package/dist/decideEvaluate.js.map +1 -0
  25. package/dist/decideHostGuard.d.ts +56 -0
  26. package/dist/decideHostGuard.d.ts.map +1 -0
  27. package/dist/decideHostGuard.js +194 -0
  28. package/dist/decideHostGuard.js.map +1 -0
  29. package/dist/decideLog.d.ts +287 -0
  30. package/dist/decideLog.d.ts.map +1 -0
  31. package/dist/decideLog.js +521 -0
  32. package/dist/decideLog.js.map +1 -0
  33. package/dist/decideLogRedaction.d.ts +17 -0
  34. package/dist/decideLogRedaction.d.ts.map +1 -0
  35. package/dist/decideLogRedaction.js +33 -0
  36. package/dist/decideLogRedaction.js.map +1 -0
  37. package/dist/decideRecord.d.ts +128 -0
  38. package/dist/decideRecord.d.ts.map +1 -0
  39. package/dist/decideRecord.js +254 -0
  40. package/dist/decideRecord.js.map +1 -0
  41. package/dist/decideSdk.d.ts +86 -0
  42. package/dist/decideSdk.d.ts.map +1 -0
  43. package/dist/decideSdk.js +146 -0
  44. package/dist/decideSdk.js.map +1 -0
  45. package/dist/dsh.d.ts.map +1 -1
  46. package/dist/dsh.js +6 -1
  47. package/dist/dsh.js.map +1 -1
  48. package/dist/errors.d.ts +26 -2
  49. package/dist/errors.d.ts.map +1 -1
  50. package/dist/errors.js +38 -1
  51. package/dist/errors.js.map +1 -1
  52. package/dist/gate.d.ts +85 -1
  53. package/dist/gate.d.ts.map +1 -1
  54. package/dist/gate.js +314 -18
  55. package/dist/gate.js.map +1 -1
  56. package/dist/gateRuleRecord.d.ts +244 -0
  57. package/dist/gateRuleRecord.d.ts.map +1 -0
  58. package/dist/gateRuleRecord.js +459 -0
  59. package/dist/gateRuleRecord.js.map +1 -0
  60. package/dist/harness.d.ts.map +1 -1
  61. package/dist/harness.js +22 -10
  62. package/dist/harness.js.map +1 -1
  63. package/dist/index.d.ts +14 -5
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +5 -3
  66. package/dist/index.js.map +1 -1
  67. package/dist/lanes.d.ts +94 -0
  68. package/dist/lanes.d.ts.map +1 -0
  69. package/dist/lanes.js +150 -0
  70. package/dist/lanes.js.map +1 -0
  71. package/dist/limits.d.ts +6 -0
  72. package/dist/limits.d.ts.map +1 -1
  73. package/dist/limits.js +6 -0
  74. package/dist/limits.js.map +1 -1
  75. package/dist/refusalDetail.d.ts +58 -0
  76. package/dist/refusalDetail.d.ts.map +1 -0
  77. package/dist/refusalDetail.js +121 -0
  78. package/dist/refusalDetail.js.map +1 -0
  79. package/dist/scopeMatch.d.ts +156 -0
  80. package/dist/scopeMatch.d.ts.map +1 -0
  81. package/dist/scopeMatch.js +438 -0
  82. package/dist/scopeMatch.js.map +1 -0
  83. package/dist/snapshot.d.ts +51 -3
  84. package/dist/snapshot.d.ts.map +1 -1
  85. package/dist/snapshot.js +86 -13
  86. package/dist/snapshot.js.map +1 -1
  87. package/dist/testOutcome.d.ts +164 -0
  88. package/dist/testOutcome.d.ts.map +1 -0
  89. package/dist/testOutcome.js +439 -0
  90. package/dist/testOutcome.js.map +1 -0
  91. package/dist/wrapTools.d.ts +7 -1
  92. package/dist/wrapTools.d.ts.map +1 -1
  93. package/dist/wrapTools.js +30 -2
  94. package/dist/wrapTools.js.map +1 -1
  95. package/package.json +2 -2
package/dist/dsh.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"dsh.d.ts","sourceRoot":"","sources":["../src/dsh.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwFG;AAGH,OAAO,EAAE,IAAI,EAAW,MAAM,WAAW,CAAA;AACzC,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,WAAW,CAAA;AAItD;0CAC0C;AAC1C,eAAO,MAAM,WAAW,uBAAuB,CAAA;AAE/C;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;CAC5B;AAED;wEACwE;AACxE,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAA;AAEtB;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,CACA,KAAK,EAAE,mBAAmB,EAC1B,QAAQ,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,KAAK,OAAO,CAAC,kBAAkB,CAAC,GACzG,MAAM,OAAO,CAAA;CACjB;AAED;;;;oCAIoC;AACpC,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C;0EACsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;oDAGoD;AACpD,eAAO,MAAM,MAAM,UAAY,CAAA;AAwC/B;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,IAAI,GACT,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAoBlG;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,GAAE,aAAkB,GAAG,IAAI,CAY9E;AAED;;;;;oEAKoE;;;;;;AACpE,wBAAmD"}
1
+ {"version":3,"file":"dsh.d.ts","sourceRoot":"","sources":["../src/dsh.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwFG;AAGH,OAAO,EAAE,IAAI,EAAW,MAAM,WAAW,CAAA;AACzC,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,WAAW,CAAA;AAItD;0CAC0C;AAC1C,eAAO,MAAM,WAAW,uBAAuB,CAAA;AAE/C;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;CAC5B;AAED;wEACwE;AACxE,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAA;AAEtB;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,CACA,KAAK,EAAE,mBAAmB,EAC1B,QAAQ,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,KAAK,OAAO,CAAC,kBAAkB,CAAC,GACzG,MAAM,OAAO,CAAA;CACjB;AAED;;;;oCAIoC;AACpC,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C;0EACsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;oDAGoD;AACpD,eAAO,MAAM,MAAM,UAAY,CAAA;AAwC/B;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,IAAI,GACT,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAyBlG;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,GAAE,aAAkB,GAAG,IAAI,CAY9E;AAED;;;;;oEAKoE;;;;;;AACpE,wBAAmD"}
package/dist/dsh.js CHANGED
@@ -90,7 +90,7 @@
90
90
  import { randomUUID } from 'node:crypto';
91
91
  import { Gate, install } from './gate.js';
92
92
  import { GateClient } from './client.js';
93
- import { IntuticGateRefusal } from './errors.js';
93
+ import { IntuticGateEscalation, IntuticGateRefusal } from './errors.js';
94
94
  /** The Cordis Plugin id this module registers as. Shown in dsh's own plugin
95
95
  * diagnostics/`--dump-config` output. */
96
96
  export const PLUGIN_NAME = 'intutic-governance';
@@ -157,6 +157,11 @@ export function createPreExecuteListener(gate) {
157
157
  await gate.guard(exec.name, renderDshToolInput(exec.arguments));
158
158
  }
159
159
  catch (err) {
160
+ // A decide rule that could not decide asks the user through dsh's
161
+ // approval, which denies when no approval service is mounted.
162
+ if (err instanceof IntuticGateEscalation) {
163
+ return { kind: 'ask', reason: err.reason };
164
+ }
160
165
  if (err instanceof IntuticGateRefusal) {
161
166
  return { kind: 'deny', reason: err.message };
162
167
  }
package/dist/dsh.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"dsh.js","sourceRoot":"","sources":["../src/dsh.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwFG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAEhD;0CAC0C;AAC1C,MAAM,CAAC,MAAM,WAAW,GAAG,oBAAoB,CAAA;AA4C/C;;;oDAGoD;AACpD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,CAAA;AAE/B;;;;;;;;;GASG;AACH,SAAS,kBAAkB,CAAC,IAAa;IACvC,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACtE,OAAO,IAAiB,CAAA;IAC1B,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAA;AACzB,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAS,gBAAgB,CAAC,MAAqB;IAC7C,OAAO,MAAM,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,UAAU,EAAE,CAAA;AAC3E,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,wBAAwB,CACtC,IAAU;IAEV,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QAC1B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAA;QACjE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,kBAAkB,EAAE,CAAC;gBACtC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,CAAA;YAC9C,CAAC;YACD,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAC/D,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,+CAA+C,MAAM,8DAA8D;aAC5H,CAAA;QACH,CAAC;QACD,yEAAyE;QACzE,gEAAgE;QAChE,oEAAoE;QACpE,gCAAgC;QAChC,OAAO,IAAI,EAAE,CAAA;IACf,CAAC,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,KAAK,CAAC,GAAsB,EAAE,SAAwB,EAAE;IACtE,IAAI,MAAyB,CAAA;IAC7B,IAAI,CAAC;QACH,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACtF,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,GAAG,IAAI,CAAA;IACf,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,OAAO,CAAC,IAAI,CAAC,CAAA;IAEb,GAAG,CAAC,EAAE,CAAC,mBAAmB,EAAE,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAA;AAC7D,CAAC;AAED;;;;;oEAKoE;AACpE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA"}
1
+ {"version":3,"file":"dsh.js","sourceRoot":"","sources":["../src/dsh.ts"],"names":[],"mappings":"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"}
package/dist/errors.d.ts CHANGED
@@ -17,6 +17,7 @@
17
17
  * Open WebUI filter and the Python SDK raise — so harnesses and log scrapers
18
18
  * that already recognise that prefix recognise this refusal too.
19
19
  */
20
+ import type { RefusalEvidence, RefusalScope } from './refusalDetail.js';
20
21
  /** Base class for every error this package throws. */
21
22
  export declare class GateError extends Error {
22
23
  constructor(message: string);
@@ -31,7 +32,7 @@ export declare class GateConnectionError extends GateError {
31
32
  * `packages/shared-types/fixtures/refusal-codes.json` (`gate`) by a test, as
32
33
  * the Python gate's list and the gate SDK reference are.
33
34
  */
34
- export declare const GATE_REFUSAL_CODES: readonly ["SSO_GROUP", "SNAPSHOT", "HELD", "SERVER_BLOCKED", "SERVER_HELD", "SERVER_NOT_APPROVED", "TOOL_DISABLED", "SERVER_NOT_ALLOWED", "POLICY_SNAPSHOT_UNVERIFIED", "SOP_RULE", "HOOK_GATE", "INSUFFICIENT_SCOPE", "COMMAND_TOO_LARGE", "CHAOS_FAULT", "E_UNPINNED_LATEST", "E_UNPINNED_TAG", "E_UNKNOWN_REGISTRY", "E_UNKNOWN_IMAGE", "E_DIGEST_MISMATCH", "E_MANIFEST_UNPARSEABLE", "WORKFLOW_SANDBOX", "NO_GATE"];
35
+ export declare const GATE_REFUSAL_CODES: readonly ["SSO_GROUP", "SNAPSHOT", "HELD", "PREREQUISITE_UNMET", "OUT_OF_SCOPE", "OFF_PLAN", "PLAN_NOT_APPROVED", "SERVER_BLOCKED", "SERVER_HELD", "SERVER_NOT_APPROVED", "TOOL_DISABLED", "SERVER_NOT_ALLOWED", "POLICY_SNAPSHOT_UNVERIFIED", "SOP_RULE", "HOOK_GATE", "INSUFFICIENT_SCOPE", "COMMAND_TOO_LARGE", "CHAOS_FAULT", "E_UNPINNED_LATEST", "E_UNPINNED_TAG", "E_UNKNOWN_REGISTRY", "E_UNKNOWN_IMAGE", "E_DIGEST_MISMATCH", "E_MANIFEST_UNPARSEABLE", "DECIDE_REFUSED", "DECIDE_ESCALATED", "GOVERNANCE_UNAVAILABLE", "WORKFLOW_SANDBOX", "NO_GATE"];
35
36
  export type GateRefusalCode = (typeof GATE_REFUSAL_CODES)[number];
36
37
  /**
37
38
  * Raised when a tool call must not run.
@@ -44,7 +45,18 @@ export declare class IntuticGateRefusal extends GateError {
44
45
  readonly reason: string;
45
46
  readonly code: GateRefusalCode;
46
47
  readonly incidentId: string | undefined;
47
- constructor(reason: string, code: GateRefusalCode, incidentId?: string);
48
+ /**
49
+ * Where the refusal applies, so a retry can stay out of it (paths, tools,
50
+ * step, detector, rule), bounded as refusalDetail.ts says. Undefined when
51
+ * the refusal names none, and always in an OPAQUE workspace.
52
+ */
53
+ readonly scope: RefusalScope | undefined;
54
+ /** What the refuser saw, bounded; undefined when nothing, and in OPAQUE. */
55
+ readonly evidence: RefusalEvidence[] | undefined;
56
+ constructor(reason: string, code: GateRefusalCode, incidentId?: string, detail?: {
57
+ scope?: RefusalScope;
58
+ evidence?: RefusalEvidence[];
59
+ });
48
60
  }
49
61
  /**
50
62
  * Raised when a hold rule stopped the call to ask a person first (`code`
@@ -61,4 +73,16 @@ export declare class IntuticGateHold extends IntuticGateRefusal {
61
73
  readonly holdId: string | undefined;
62
74
  constructor(reason: string, holdId: string | undefined);
63
75
  }
76
+ /**
77
+ * Raised when a decide rule could not decide the call and a person should
78
+ * (`code` `DECIDE_ESCALATED`): the answers fell between its bands, or the
79
+ * option orders disagreed. A subclass, so a caller that stops on every
80
+ * refusal stops on this too; one that can ask its user (dsh's approval) asks
81
+ * with `reason` and runs the call only on a yes. `ruleId` names the rule
82
+ * (`decide.<ruleRef>`), and is `undefined` in an OPAQUE workspace.
83
+ */
84
+ export declare class IntuticGateEscalation extends IntuticGateRefusal {
85
+ readonly ruleId: string | undefined;
86
+ constructor(reason: string, ruleId: string | undefined);
87
+ }
64
88
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,sDAAsD;AACtD,qBAAa,SAAU,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM;CAI5B;AAED,kEAAkE;AAClE,qBAAa,mBAAoB,SAAQ,SAAS;gBACpC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,0ZA+BrB,CAAA;AAEV,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEjE;;;;;;GAMG;AACH,qBAAa,kBAAmB,SAAQ,SAAS;IAC/C,SAAgB,MAAM,EAAE,MAAM,CAAA;IAC9B,SAAgB,IAAI,EAAE,eAAe,CAAA;IACrC,SAAgB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;gBAElC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,CAAC,EAAE,MAAM;CAOvE;AAED;;;;;;;;;;GAUG;AACH,qBAAa,eAAgB,SAAQ,kBAAkB;IACrD,SAAgB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;gBAE9B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS;CAMvD"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEvE,sDAAsD;AACtD,qBAAa,SAAU,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM;CAI5B;AAED,kEAAkE;AAClE,qBAAa,mBAAoB,SAAQ,SAAS;gBACpC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,iiBA0CrB,CAAA;AAEV,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEjE;;;;;;GAMG;AACH,qBAAa,kBAAmB,SAAQ,SAAS;IAC/C,SAAgB,MAAM,EAAE,MAAM,CAAA;IAC9B,SAAgB,IAAI,EAAE,eAAe,CAAA;IACrC,SAAgB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9C;;;;OAIG;IACH,SAAgB,KAAK,EAAE,YAAY,GAAG,SAAS,CAAA;IAC/C,4EAA4E;IAC5E,SAAgB,QAAQ,EAAE,eAAe,EAAE,GAAG,SAAS,CAAA;gBAE3C,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,YAAY,CAAC;QAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAA;KAAE;CASxI;AAED;;;;;;;;;;GAUG;AACH,qBAAa,eAAgB,SAAQ,kBAAkB;IACrD,SAAgB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;gBAE9B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS;CAMvD;AAED;;;;;;;GAOG;AACH,qBAAa,qBAAsB,SAAQ,kBAAkB;IAC3D,SAAgB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;gBAE9B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS;CAKvD"}
package/dist/errors.js CHANGED
@@ -41,6 +41,12 @@ export const GATE_REFUSAL_CODES = [
41
41
  'SSO_GROUP',
42
42
  'SNAPSHOT',
43
43
  'HELD',
44
+ // Tier R, the snapshot's rule records (gateRuleRecord.ts): a qualified
45
+ // requires_before, scope_paths_mode: enforce, plan_approval.
46
+ 'PREREQUISITE_UNMET',
47
+ 'OUT_OF_SCOPE',
48
+ 'OFF_PLAN',
49
+ 'PLAN_NOT_APPROVED',
44
50
  // The MCP server registry and allowlist, from the policy snapshot or the
45
51
  // control plane's hook gate.
46
52
  'SERVER_BLOCKED',
@@ -65,6 +71,11 @@ export const GATE_REFUSAL_CODES = [
65
71
  'E_UNKNOWN_IMAGE',
66
72
  'E_DIGEST_MISMATCH',
67
73
  'E_MANIFEST_UNPARSEABLE',
74
+ // A decide rule (the Decide tier, after every deterministic tier allowed
75
+ // the call): refused, escalated with no way to ask, or its engine unavailable.
76
+ 'DECIDE_REFUSED',
77
+ 'DECIDE_ESCALATED',
78
+ 'GOVERNANCE_UNAVAILABLE',
68
79
  // The Workflow DevKit adapter (workflow.ts), before any tier runs.
69
80
  'WORKFLOW_SANDBOX',
70
81
  'NO_GATE',
@@ -80,12 +91,22 @@ export class IntuticGateRefusal extends GateError {
80
91
  reason;
81
92
  code;
82
93
  incidentId;
83
- constructor(reason, code, incidentId) {
94
+ /**
95
+ * Where the refusal applies, so a retry can stay out of it (paths, tools,
96
+ * step, detector, rule), bounded as refusalDetail.ts says. Undefined when
97
+ * the refusal names none, and always in an OPAQUE workspace.
98
+ */
99
+ scope;
100
+ /** What the refuser saw, bounded; undefined when nothing, and in OPAQUE. */
101
+ evidence;
102
+ constructor(reason, code, incidentId, detail) {
84
103
  super(`[Intutic Governance] BLOCKED: ${reason}`);
85
104
  this.name = 'IntuticGateRefusal';
86
105
  this.reason = reason;
87
106
  this.code = code;
88
107
  this.incidentId = incidentId;
108
+ this.scope = detail?.scope;
109
+ this.evidence = detail?.evidence;
89
110
  }
90
111
  }
91
112
  /**
@@ -108,4 +129,20 @@ export class IntuticGateHold extends IntuticGateRefusal {
108
129
  this.holdId = holdId;
109
130
  }
110
131
  }
132
+ /**
133
+ * Raised when a decide rule could not decide the call and a person should
134
+ * (`code` `DECIDE_ESCALATED`): the answers fell between its bands, or the
135
+ * option orders disagreed. A subclass, so a caller that stops on every
136
+ * refusal stops on this too; one that can ask its user (dsh's approval) asks
137
+ * with `reason` and runs the call only on a yes. `ruleId` names the rule
138
+ * (`decide.<ruleRef>`), and is `undefined` in an OPAQUE workspace.
139
+ */
140
+ export class IntuticGateEscalation extends IntuticGateRefusal {
141
+ ruleId;
142
+ constructor(reason, ruleId) {
143
+ super(reason, 'DECIDE_ESCALATED');
144
+ this.name = 'IntuticGateEscalation';
145
+ this.ruleId = ruleId;
146
+ }
147
+ }
111
148
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,sDAAsD;AACtD,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,WAAW,CAAA;IACzB,CAAC;CACF;AAED,kEAAkE;AAClE,MAAM,OAAO,mBAAoB,SAAQ,SAAS;IAChD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAA;IACnC,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,WAAW;IACX,UAAU;IACV,MAAM;IACN,yEAAyE;IACzE,6BAA6B;IAC7B,gBAAgB;IAChB,aAAa;IACb,qBAAqB;IACrB,eAAe;IACf,oBAAoB;IACpB,qEAAqE;IACrE,4BAA4B;IAC5B,UAAU;IACV,WAAW;IACX,+DAA+D;IAC/D,oBAAoB;IACpB,uEAAuE;IACvE,mBAAmB;IACnB,0EAA0E;IAC1E,+DAA+D;IAC/D,aAAa;IACb,mBAAmB;IACnB,gBAAgB;IAChB,oBAAoB;IACpB,iBAAiB;IACjB,mBAAmB;IACnB,wBAAwB;IACxB,mEAAmE;IACnE,kBAAkB;IAClB,SAAS;CACD,CAAA;AAIV;;;;;;GAMG;AACH,MAAM,OAAO,kBAAmB,SAAQ,SAAS;IAC/B,MAAM,CAAQ;IACd,IAAI,CAAiB;IACrB,UAAU,CAAoB;IAE9C,YAAY,MAAc,EAAE,IAAqB,EAAE,UAAmB;QACpE,KAAK,CAAC,iCAAiC,MAAM,EAAE,CAAC,CAAA;QAChD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAA;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;CACF;AAED;;;;;;;;;;GAUG;AACH,MAAM,OAAO,eAAgB,SAAQ,kBAAkB;IACrC,MAAM,CAAoB;IAE1C,YAAY,MAAc,EAAE,MAA0B;QACpD,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACrB,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAA;QAC7B,IAAI,CAAC,OAAO,GAAG,8BAA8B,MAAM,EAAE,CAAA;QACrD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;CACF"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,sDAAsD;AACtD,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,WAAW,CAAA;IACzB,CAAC;CACF;AAED,kEAAkE;AAClE,MAAM,OAAO,mBAAoB,SAAQ,SAAS;IAChD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAA;IACnC,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,WAAW;IACX,UAAU;IACV,MAAM;IACN,uEAAuE;IACvE,6DAA6D;IAC7D,oBAAoB;IACpB,cAAc;IACd,UAAU;IACV,mBAAmB;IACnB,yEAAyE;IACzE,6BAA6B;IAC7B,gBAAgB;IAChB,aAAa;IACb,qBAAqB;IACrB,eAAe;IACf,oBAAoB;IACpB,qEAAqE;IACrE,4BAA4B;IAC5B,UAAU;IACV,WAAW;IACX,+DAA+D;IAC/D,oBAAoB;IACpB,uEAAuE;IACvE,mBAAmB;IACnB,0EAA0E;IAC1E,+DAA+D;IAC/D,aAAa;IACb,mBAAmB;IACnB,gBAAgB;IAChB,oBAAoB;IACpB,iBAAiB;IACjB,mBAAmB;IACnB,wBAAwB;IACxB,yEAAyE;IACzE,+EAA+E;IAC/E,gBAAgB;IAChB,kBAAkB;IAClB,wBAAwB;IACxB,mEAAmE;IACnE,kBAAkB;IAClB,SAAS;CACD,CAAA;AAIV;;;;;;GAMG;AACH,MAAM,OAAO,kBAAmB,SAAQ,SAAS;IAC/B,MAAM,CAAQ;IACd,IAAI,CAAiB;IACrB,UAAU,CAAoB;IAC9C;;;;OAIG;IACa,KAAK,CAA0B;IAC/C,4EAA4E;IAC5D,QAAQ,CAA+B;IAEvD,YAAY,MAAc,EAAE,IAAqB,EAAE,UAAmB,EAAE,MAA+D;QACrI,KAAK,CAAC,iCAAiC,MAAM,EAAE,CAAC,CAAA;QAChD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAA;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,KAAK,GAAG,MAAM,EAAE,KAAK,CAAA;QAC1B,IAAI,CAAC,QAAQ,GAAG,MAAM,EAAE,QAAQ,CAAA;IAClC,CAAC;CACF;AAED;;;;;;;;;;GAUG;AACH,MAAM,OAAO,eAAgB,SAAQ,kBAAkB;IACrC,MAAM,CAAoB;IAE1C,YAAY,MAAc,EAAE,MAA0B;QACpD,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACrB,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAA;QAC7B,IAAI,CAAC,OAAO,GAAG,8BAA8B,MAAM,EAAE,CAAA;QACrD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,qBAAsB,SAAQ,kBAAkB;IAC3C,MAAM,CAAoB;IAE1C,YAAY,MAAc,EAAE,MAA0B;QACpD,KAAK,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;QACjC,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAA;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;CACF"}
package/dist/gate.d.ts CHANGED
@@ -9,15 +9,40 @@
9
9
  * PreToolUse hook for them. This package is that enforcement point: the
10
10
  * missing adapter, written against Intutic's own published gate contract.
11
11
  *
12
- * Six tiers, in order — identical precedence to the Python SDK:
12
+ * Eight tiers, in order — identical precedence to the Python SDK:
13
13
  *
14
14
  * A0 SSO group policy from the policy snapshot unknown groups refused
15
15
  * A1 policy snapshot port of intuticGate() fails CLOSED
16
+ * R rule records the snapshot's @rule records fails CLOSED (a rule failure)
16
17
  * M MCP registry from the policy snapshot unverified snapshot admits none
17
18
  * A3 SOP rules authored in the product fails OPEN (A2 covers it)
18
19
  * A2 image integrity local check fails CLOSED
20
+ * D decide rules the self-hosted decide engine fails CLOSED when enforcing
19
21
  * B POST /hook-gate control-plane check fail posture set by GateClient
20
22
  *
23
+ * Tier R evaluates the snapshot's `@rule` records (gateRuleRecord.ts,
24
+ * a byte-identical copy of `@intutic/shared-types`' module): a qualified
25
+ * `requires_before: action:run_tests[ok] -> X` refuses X with
26
+ * `PREREQUISITE_UNMET` unless the latest test run this gate recorded for the
27
+ * session ({@link Gate.recordOutcome}, which {@link wrapTool} calls) passed
28
+ * and no file changed since; `scope_paths_mode: enforce` refuses a file
29
+ * change outside the scope with `OUT_OF_SCOPE`; `plan_approval:` refuses
30
+ * with `PLAN_NOT_APPROVED` until the session's plan is approved
31
+ * (`GET /api/v1/plans/session/:id`, cached {@link PLAN_CACHE_MS}), and under
32
+ * `strict` a tool off the plan with `OFF_PLAN`. A plan that cannot be read
33
+ * refuses whatever `failClosed` says: rule failures always fail closed.
34
+ *
35
+ * Tier D runs only on a call every deterministic tier allowed: the snapshot's
36
+ * decide rules on the tool, asked of the self-hosted engine configured in
37
+ * `~/.intutic/decide/engine.json` and `INTUTIC_DECIDE_*`, within
38
+ * `INTUTIC_DECIDE_BUDGET_MS` (default {@link DECIDE_BUDGET_MS}). A rule refuses
39
+ * with `DECIDE_REFUSED`; one that cannot decide throws
40
+ * {@link IntuticGateEscalation} (`DECIDE_ESCALATED`), which a caller that can
41
+ * ask its user turns into a question; an engine that cannot answer refuses an
42
+ * enforcing rule with `GOVERNANCE_UNAVAILABLE` and lets a shadow rule's call
43
+ * on (decideEvaluate.ts, a byte-identical copy of `@intutic/shared-types`'
44
+ * module, holds the protections).
45
+ *
21
46
  * Tier M applies the workspace's MCP server registry and `mcpAllowedServers`
22
47
  * list to an `mcp__<server>__<tool>` call, from the snapshot's
23
48
  * `@mcp_registry` and `@mcp_allowlist` records, with the decision, codes,
@@ -81,6 +106,27 @@ import { GateClient } from './client.js';
81
106
  import * as imagecheck from './imagecheck.js';
82
107
  import * as snapshot from './snapshot.js';
83
108
  import * as soprules from './soprules.js';
109
+ /**
110
+ * Whether this gate evaluates the decide rules a snapshot carries (Tier D).
111
+ * Only a gate that does skips a decide rule's fallback line, and only when
112
+ * the rule's record decoded; otherwise the fallback line refuses its tools,
113
+ * as in a gate that reads no `@decide` records.
114
+ */
115
+ export declare const CAN_EVALUATE_DECIDE = true;
116
+ /**
117
+ * Whether this gate evaluates the `@rule` records a snapshot carries (Tier
118
+ * R). Only a gate that does skips a record's fallback line, and only when
119
+ * the record decoded.
120
+ */
121
+ export declare const CAN_EVALUATE_RULE_RECORDS = true;
122
+ /** How long Tier R keeps a session's plan before reading it again. */
123
+ export declare const PLAN_CACHE_MS = 30000;
124
+ /** What a tool call's result says about how it went, for {@link Gate.recordOutcome}. */
125
+ export interface ToolOutcome {
126
+ exitCode?: number | null;
127
+ isError?: boolean | null;
128
+ output?: string | null;
129
+ }
84
130
  /** Tools that cannot change anything. They still get the local snapshot check
85
131
  * (Tier A1), but skip the remote gate call (Tier B). */
86
132
  export declare const READ_ONLY_TOOLS: ReadonlySet<string>;
@@ -146,6 +192,10 @@ export declare class Gate {
146
192
  /** The SOP register said the workspace is OPAQUE (read with its rules). */
147
193
  private _registerOpaque;
148
194
  private _chaos;
195
+ /** The outcome state of each session (testOutcome.ts), by session id, in memory. */
196
+ private _outcomes;
197
+ /** Each session's plan, as Tier R last read it. */
198
+ private _plans;
149
199
  constructor(cfg?: GateConfig, client?: GateClient | null);
150
200
  private allowlistAbs;
151
201
  getSnapshot(): snapshot.Snapshot;
@@ -205,6 +255,40 @@ export declare class Gate {
205
255
  guard(toolName: string, toolInput: ToolInput): Promise<void>;
206
256
  /** The tiers: throws to refuse, resolves to allow. `note` collects a chaos run's record of the call. */
207
257
  private decide;
258
+ /**
259
+ * Records how a call that ran went, for Tier R. A test run
260
+ * (`action:run_tests`) records its outcome (testOutcome.ts: the exit code,
261
+ * else one read from `output`, the error flag and the runner summaries);
262
+ * any other call marks earlier outcomes as no longer adjacent, and a call
263
+ * that changed files (`isFileWriteCall`, scopeMatch.ts) makes an earlier pass stale.
264
+ * Kept in memory per {@link GateClient.sessionId}; with no session id
265
+ * nothing is kept, and a qualified rule stays unmet. {@link wrapTool} calls
266
+ * this after every call it ran.
267
+ */
268
+ recordOutcome(toolName: string, toolInput: ToolInput, result?: ToolOutcome): void;
269
+ /** The session's plan, read at most every {@link PLAN_CACHE_MS}. */
270
+ private sessionPlan;
271
+ /**
272
+ * Tier R. Throws {@link IntuticGateRefusal} when an enforcing rule record
273
+ * refuses the call (`PREREQUISITE_UNMET`, `OUT_OF_SCOPE`, `OFF_PLAN`,
274
+ * `PLAN_NOT_APPROVED`), with the refusal's scope; each shadow record's
275
+ * finding is reported as `tool_would_block` and the call goes on.
276
+ */
277
+ private guardRules;
278
+ /**
279
+ * Tier D. Throws when a decide rule on this tool refuses the call
280
+ * ({@link IntuticGateRefusal}, `DECIDE_REFUSED` or `GOVERNANCE_UNAVAILABLE`)
281
+ * or could not decide it ({@link IntuticGateEscalation}). Each shadow rule's
282
+ * finding is recorded; the call goes on.
283
+ */
284
+ private guardDecide;
285
+ /**
286
+ * Appends the call's decide record to `~/.intutic/logs/decide-<date>.jsonl`
287
+ * and updates each rule's drift stats, as `intutic decide check` does for
288
+ * the shell gates. Never throws: a log that cannot be written never
289
+ * changes the decision.
290
+ */
291
+ private logDecide;
208
292
  /**
209
293
  * Throws when the workspace's MCP server registry or allowlist refuses an
210
294
  * `mcp__<server>__<tool>` call: the registry first, as every gate orders
@@ -1 +1 @@
1
- {"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../src/gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8EG;AAUH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAGxC,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAGzC;yDACyD;AACzD,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,MAAM,CAM9C,CAAA;AAEF,mEAAmE;AACnE,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,UAAU,cAAc;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,OAAO,CAAA;IACpB,WAAW,EAAE,OAAO,CAAA;CACrB;AAaD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAoB/C;;;;;;GAMG;AACH,qBAAa,IAAI;IACf,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAA;IAC5B,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAA;IAClC,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,iBAAiB,CAAQ;IACjC,OAAO,CAAC,OAAO,CAAsC;IACrD;8EAC0E;IAC1E,OAAO,CAAC,SAAS,CAAkC;IACnD,2EAA2E;IAC3E,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,MAAM,CAA0B;gBAE5B,GAAG,GAAE,UAAe,EAAE,MAAM,GAAE,UAAU,GAAG,IAAW;IAKlE,OAAO,CAAC,YAAY;IAOpB,WAAW,IAAI,QAAQ,CAAC,QAAQ;IAOhC;;;;;;;OAOG;IACH,SAAS,IAAI,UAAU,CAAC,WAAW;IAwBnC;;;;;;OAMG;IACG,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IA+BhD;;;;;OAKG;IACH,OAAO,CAAC,KAAK;IAIb;;;;;;OAMG;IACH,OAAO,CAAC,MAAM;YAOA,IAAI;IAclB;;;;OAIG;YACW,wBAAwB;IAStC,2FAA2F;IAC3F,OAAO,CAAC,KAAK;IAgBb,+FAA+F;IAC/F,OAAO,CAAC,WAAW;IAoBnB;;;;;;;;;OASG;IACG,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BlE,wGAAwG;YAC1F,MAAM;IA4JpB;;;;;OAKG;YACW,QAAQ;IAkCtB;;;;OAIG;YACW,IAAI;CAqBnB;AAiCD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../src/gate.ts"],"names":[],"mappings":"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"}