@hiro-c/agent-gate 1.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.
- package/AGENTS.md +76 -0
- package/LICENSE +21 -0
- package/README.md +205 -0
- package/dist/adapters/Adapter.d.ts +32 -0
- package/dist/adapters/Adapter.d.ts.map +1 -0
- package/dist/adapters/Adapter.js +2 -0
- package/dist/adapters/claude-code/adapter.d.ts +3 -0
- package/dist/adapters/claude-code/adapter.d.ts.map +1 -0
- package/dist/adapters/claude-code/adapter.js +45 -0
- package/dist/adapters/claude-code/transcript.d.ts +16 -0
- package/dist/adapters/claude-code/transcript.d.ts.map +1 -0
- package/dist/adapters/claude-code/transcript.js +104 -0
- package/dist/adapters/cursor/adapter.d.ts +3 -0
- package/dist/adapters/cursor/adapter.d.ts.map +1 -0
- package/dist/adapters/cursor/adapter.js +89 -0
- package/dist/adapters/index.d.ts +8 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +20 -0
- package/dist/cli/agent-gate.d.ts +13 -0
- package/dist/cli/agent-gate.d.ts.map +1 -0
- package/dist/cli/agent-gate.js +226 -0
- package/dist/cli/installer.d.ts +21 -0
- package/dist/cli/installer.d.ts.map +1 -0
- package/dist/cli/installer.js +71 -0
- package/dist/collector/collectClaudeMd.d.ts +3 -0
- package/dist/collector/collectClaudeMd.d.ts.map +1 -0
- package/dist/collector/collectClaudeMd.js +87 -0
- package/dist/collector/collectRuleSources.d.ts +3 -0
- package/dist/collector/collectRuleSources.d.ts.map +1 -0
- package/dist/collector/collectRuleSources.js +151 -0
- package/dist/config/AgentGateConfig.d.ts +18 -0
- package/dist/config/AgentGateConfig.d.ts.map +1 -0
- package/dist/config/AgentGateConfig.js +34 -0
- package/dist/config/Config.d.ts +26 -0
- package/dist/config/Config.d.ts.map +1 -0
- package/dist/config/Config.js +25 -0
- package/dist/config/PluginConfigLoader.d.ts +3 -0
- package/dist/config/PluginConfigLoader.d.ts.map +1 -0
- package/dist/config/PluginConfigLoader.js +85 -0
- package/dist/config/defineConfig.d.ts +23 -0
- package/dist/config/defineConfig.d.ts.map +1 -0
- package/dist/config/defineConfig.js +10 -0
- package/dist/contracts/schemas/hookDataSchema.d.ts +7 -0
- package/dist/contracts/schemas/hookDataSchema.d.ts.map +1 -0
- package/dist/contracts/schemas/hookDataSchema.js +9 -0
- package/dist/contracts/types/Action.d.ts +23 -0
- package/dist/contracts/types/Action.d.ts.map +1 -0
- package/dist/contracts/types/Action.js +2 -0
- package/dist/contracts/types/ClaudeMdFile.d.ts +5 -0
- package/dist/contracts/types/ClaudeMdFile.d.ts.map +1 -0
- package/dist/contracts/types/ClaudeMdFile.js +2 -0
- package/dist/contracts/types/HookData.d.ts +6 -0
- package/dist/contracts/types/HookData.d.ts.map +1 -0
- package/dist/contracts/types/HookData.js +2 -0
- package/dist/contracts/types/ModelClient.d.ts +4 -0
- package/dist/contracts/types/ModelClient.d.ts.map +1 -0
- package/dist/contracts/types/ModelClient.js +2 -0
- package/dist/contracts/types/RuleSource.d.ts +7 -0
- package/dist/contracts/types/RuleSource.d.ts.map +1 -0
- package/dist/contracts/types/RuleSource.js +2 -0
- package/dist/contracts/types/SessionContext.d.ts +25 -0
- package/dist/contracts/types/SessionContext.d.ts.map +1 -0
- package/dist/contracts/types/SessionContext.js +2 -0
- package/dist/contracts/types/ValidationResult.d.ts +5 -0
- package/dist/contracts/types/ValidationResult.d.ts.map +1 -0
- package/dist/contracts/types/ValidationResult.js +2 -0
- package/dist/daemon/client.d.ts +17 -0
- package/dist/daemon/client.d.ts.map +1 -0
- package/dist/daemon/client.js +59 -0
- package/dist/daemon/protocol.d.ts +17 -0
- package/dist/daemon/protocol.d.ts.map +1 -0
- package/dist/daemon/protocol.js +8 -0
- package/dist/daemon/server.d.ts +27 -0
- package/dist/daemon/server.d.ts.map +1 -0
- package/dist/daemon/server.js +100 -0
- package/dist/deterministic/defaultRules.d.ts +11 -0
- package/dist/deterministic/defaultRules.d.ts.map +1 -0
- package/dist/deterministic/defaultRules.js +33 -0
- package/dist/deterministic/engine.d.ts +11 -0
- package/dist/deterministic/engine.d.ts.map +1 -0
- package/dist/deterministic/engine.js +12 -0
- package/dist/deterministic/factories.d.ts +20 -0
- package/dist/deterministic/factories.d.ts.map +1 -0
- package/dist/deterministic/factories.js +56 -0
- package/dist/deterministic/rules/preventBashSecretWrite.d.ts +3 -0
- package/dist/deterministic/rules/preventBashSecretWrite.d.ts.map +1 -0
- package/dist/deterministic/rules/preventBashSecretWrite.js +75 -0
- package/dist/deterministic/rules/preventForcePushMain.d.ts +7 -0
- package/dist/deterministic/rules/preventForcePushMain.d.ts.map +1 -0
- package/dist/deterministic/rules/preventForcePushMain.js +85 -0
- package/dist/deterministic/rules/preventRmRfRoot.d.ts +3 -0
- package/dist/deterministic/rules/preventRmRfRoot.d.ts.map +1 -0
- package/dist/deterministic/rules/preventRmRfRoot.js +68 -0
- package/dist/deterministic/rules/preventSecretFileWrite.d.ts +7 -0
- package/dist/deterministic/rules/preventSecretFileWrite.d.ts.map +1 -0
- package/dist/deterministic/rules/preventSecretFileWrite.js +55 -0
- package/dist/deterministic/rules/preventSystemPathWrite.d.ts +3 -0
- package/dist/deterministic/rules/preventSystemPathWrite.d.ts.map +1 -0
- package/dist/deterministic/rules/preventSystemPathWrite.js +38 -0
- package/dist/deterministic/types.d.ts +20 -0
- package/dist/deterministic/types.d.ts.map +1 -0
- package/dist/deterministic/types.js +2 -0
- package/dist/doctor/findings.d.ts +15 -0
- package/dist/doctor/findings.d.ts.map +1 -0
- package/dist/doctor/findings.js +2 -0
- package/dist/doctor/formatFindings.d.ts +3 -0
- package/dist/doctor/formatFindings.d.ts.map +1 -0
- package/dist/doctor/formatFindings.js +37 -0
- package/dist/doctor/lintRuleSources.d.ts +4 -0
- package/dist/doctor/lintRuleSources.d.ts.map +1 -0
- package/dist/doctor/lintRuleSources.js +87 -0
- package/dist/hooks/processHookData.d.ts +37 -0
- package/dist/hooks/processHookData.d.ts.map +1 -0
- package/dist/hooks/processHookData.js +181 -0
- package/dist/index.d.ts +38 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +54 -0
- package/dist/observability/decisionLogger.d.ts +15 -0
- package/dist/observability/decisionLogger.d.ts.map +1 -0
- package/dist/observability/decisionLogger.js +20 -0
- package/dist/observability/eventBus.d.ts +15 -0
- package/dist/observability/eventBus.d.ts.map +1 -0
- package/dist/observability/eventBus.js +33 -0
- package/dist/observability/sinks/JsonlFileSink.d.ts +13 -0
- package/dist/observability/sinks/JsonlFileSink.d.ts.map +1 -0
- package/dist/observability/sinks/JsonlFileSink.js +36 -0
- package/dist/observability/sinks/Sink.d.ts +46 -0
- package/dist/observability/sinks/Sink.d.ts.map +1 -0
- package/dist/observability/sinks/Sink.js +2 -0
- package/dist/observability/stats.d.ts +14 -0
- package/dist/observability/stats.d.ts.map +1 -0
- package/dist/observability/stats.js +78 -0
- package/dist/validation/models/AnthropicApi.d.ts +9 -0
- package/dist/validation/models/AnthropicApi.d.ts.map +1 -0
- package/dist/validation/models/AnthropicApi.js +44 -0
- package/dist/validation/models/ClaudeCli.d.ts +10 -0
- package/dist/validation/models/ClaudeCli.d.ts.map +1 -0
- package/dist/validation/models/ClaudeCli.js +64 -0
- package/dist/validation/models/CompositeModelClient.d.ts +20 -0
- package/dist/validation/models/CompositeModelClient.d.ts.map +1 -0
- package/dist/validation/models/CompositeModelClient.js +53 -0
- package/dist/validation/prompts/context.d.ts +3 -0
- package/dist/validation/prompts/context.d.ts.map +1 -0
- package/dist/validation/prompts/context.js +29 -0
- package/dist/validation/prompts/response.d.ts +2 -0
- package/dist/validation/prompts/response.d.ts.map +1 -0
- package/dist/validation/prompts/response.js +20 -0
- package/dist/validation/prompts/system-prompt.d.ts +7 -0
- package/dist/validation/prompts/system-prompt.d.ts.map +1 -0
- package/dist/validation/prompts/system-prompt.js +69 -0
- package/dist/validation/validator.d.ts +5 -0
- package/dist/validation/validator.d.ts.map +1 -0
- package/dist/validation/validator.js +98 -0
- package/package.json +67 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Config = exports.DEFAULT_MODEL = void 0;
|
|
4
|
+
exports.DEFAULT_MODEL = 'claude-sonnet-4-6';
|
|
5
|
+
class Config {
|
|
6
|
+
model;
|
|
7
|
+
apiKey;
|
|
8
|
+
cooldown;
|
|
9
|
+
disabled;
|
|
10
|
+
useSystemClaude;
|
|
11
|
+
reasonLang;
|
|
12
|
+
constructor(options) {
|
|
13
|
+
this.model = options?.model ?? process.env.AGENT_GATE_MODEL ?? exports.DEFAULT_MODEL;
|
|
14
|
+
this.apiKey = options?.apiKey ?? process.env.AGENT_GATE_API_KEY;
|
|
15
|
+
const parsedCooldown = parseInt(process.env.AGENT_GATE_COOLDOWN ?? '0', 10);
|
|
16
|
+
this.cooldown = options?.cooldown ?? (Number.isNaN(parsedCooldown) ? 0 : parsedCooldown);
|
|
17
|
+
this.disabled = options?.disabled ?? process.env.AGENT_GATE_DISABLED === 'true';
|
|
18
|
+
this.useSystemClaude = options?.useSystemClaude ?? process.env.USE_SYSTEM_CLAUDE === 'true';
|
|
19
|
+
this.reasonLang = options?.reasonLang ?? process.env.AGENT_GATE_REASON_LANG;
|
|
20
|
+
}
|
|
21
|
+
get useApi() {
|
|
22
|
+
return this.apiKey !== undefined && this.apiKey !== '';
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.Config = Config;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PluginConfigLoader.d.ts","sourceRoot":"","sources":["../../src/config/PluginConfigLoader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AA4EtD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,CAOnE"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadPluginConfig = loadPluginConfig;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const jiti_1 = require("jiti");
|
|
7
|
+
const CANDIDATE_FILENAMES = [
|
|
8
|
+
'.agent-gate.config.ts',
|
|
9
|
+
'.agent-gate.config.mts',
|
|
10
|
+
'.agent-gate.config.mjs',
|
|
11
|
+
'.agent-gate.config.cjs',
|
|
12
|
+
'.agent-gate.config.js',
|
|
13
|
+
];
|
|
14
|
+
const LEGACY_JSON_FILENAME = '.agent-gate.json';
|
|
15
|
+
function findConfigFile(cwd) {
|
|
16
|
+
let dir = cwd;
|
|
17
|
+
while (true) {
|
|
18
|
+
for (const name of CANDIDATE_FILENAMES) {
|
|
19
|
+
const p = (0, path_1.join)(dir, name);
|
|
20
|
+
if ((0, fs_1.existsSync)(p))
|
|
21
|
+
return p;
|
|
22
|
+
}
|
|
23
|
+
const legacy = (0, path_1.join)(dir, LEGACY_JSON_FILENAME);
|
|
24
|
+
if ((0, fs_1.existsSync)(legacy))
|
|
25
|
+
return legacy;
|
|
26
|
+
const parent = (0, path_1.dirname)(dir);
|
|
27
|
+
if (parent === dir)
|
|
28
|
+
return null;
|
|
29
|
+
dir = parent;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function normalizeFromJson(raw) {
|
|
33
|
+
return {
|
|
34
|
+
disabledRules: Array.isArray(raw.disabled_rules)
|
|
35
|
+
? raw.disabled_rules
|
|
36
|
+
: undefined,
|
|
37
|
+
protectedBranches: Array.isArray(raw.protected_branches)
|
|
38
|
+
? raw.protected_branches
|
|
39
|
+
: undefined,
|
|
40
|
+
extraSecretPathPrefixes: Array.isArray(raw.extra_secret_paths)
|
|
41
|
+
? raw.extra_secret_paths
|
|
42
|
+
: undefined,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function loadJsonFile(path) {
|
|
46
|
+
try {
|
|
47
|
+
const content = (0, fs_1.readFileSync)(path, 'utf-8');
|
|
48
|
+
const parsed = JSON.parse(content);
|
|
49
|
+
if (typeof parsed !== 'object' || parsed === null)
|
|
50
|
+
return {};
|
|
51
|
+
return normalizeFromJson(parsed);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return {};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function loadJsTsFile(path) {
|
|
58
|
+
try {
|
|
59
|
+
const jiti = (0, jiti_1.createJiti)(path, { interopDefault: true });
|
|
60
|
+
const mod = jiti(path);
|
|
61
|
+
if (typeof mod !== 'object' || mod === null)
|
|
62
|
+
return {};
|
|
63
|
+
// `interopDefault: true` unwraps `default` for ESM. Some configs
|
|
64
|
+
// still export raw modules; treat both as the config.
|
|
65
|
+
const inner = 'default' in mod &&
|
|
66
|
+
mod.default !== undefined
|
|
67
|
+
? mod.default
|
|
68
|
+
: mod;
|
|
69
|
+
if (typeof inner !== 'object' || inner === null)
|
|
70
|
+
return {};
|
|
71
|
+
return inner;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return {};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function loadPluginConfig(cwd) {
|
|
78
|
+
const path = findConfigFile(cwd);
|
|
79
|
+
if (!path)
|
|
80
|
+
return {};
|
|
81
|
+
if (path.endsWith('.json')) {
|
|
82
|
+
return loadJsonFile(path);
|
|
83
|
+
}
|
|
84
|
+
return loadJsTsFile(path);
|
|
85
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { DeterministicRule } from '../deterministic/types';
|
|
2
|
+
/**
|
|
3
|
+
* Shape of the object exported by `.agent-gate.config.{ts,js,mjs}`.
|
|
4
|
+
*
|
|
5
|
+
* All fields are optional. The plugin loader resolves precedence with
|
|
6
|
+
* existing `.agent-gate.json` (the richer config file wins on conflict).
|
|
7
|
+
*/
|
|
8
|
+
export interface AgentGatePluginConfig {
|
|
9
|
+
/** Rule ids that should not run. Merged with AGENT_GATE_DISABLED_RULES. */
|
|
10
|
+
disabledRules?: string[];
|
|
11
|
+
/** Override the protected branch list used by prevent-force-push-main. */
|
|
12
|
+
protectedBranches?: string[];
|
|
13
|
+
/** Additional path substrings treated as secret targets. */
|
|
14
|
+
extraSecretPathPrefixes?: string[];
|
|
15
|
+
/** User-defined deterministic rules appended after the built-ins. */
|
|
16
|
+
customRules?: DeterministicRule[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Identity helper that gives TypeScript users autocomplete and type
|
|
20
|
+
* checking inside `.agent-gate.config.ts`. Has no runtime behavior.
|
|
21
|
+
*/
|
|
22
|
+
export declare function defineConfig(config: AgentGatePluginConfig): AgentGatePluginConfig;
|
|
23
|
+
//# sourceMappingURL=defineConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defineConfig.d.ts","sourceRoot":"","sources":["../../src/config/defineConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE1D;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACpC,2EAA2E;IAC3E,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC5B,4DAA4D;IAC5D,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAA;IAClC,qEAAqE;IACrE,WAAW,CAAC,EAAE,iBAAiB,EAAE,CAAA;CAClC;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,qBAAqB,GAC5B,qBAAqB,CAEvB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.defineConfig = defineConfig;
|
|
4
|
+
/**
|
|
5
|
+
* Identity helper that gives TypeScript users autocomplete and type
|
|
6
|
+
* checking inside `.agent-gate.config.ts`. Has no runtime behavior.
|
|
7
|
+
*/
|
|
8
|
+
function defineConfig(config) {
|
|
9
|
+
return config;
|
|
10
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const HookDataSchema: z.ZodObject<{
|
|
3
|
+
hook_event_name: z.ZodString;
|
|
4
|
+
tool_name: z.ZodOptional<z.ZodString>;
|
|
5
|
+
tool_input: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
6
|
+
}, z.core.$strip>;
|
|
7
|
+
//# sourceMappingURL=hookDataSchema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hookDataSchema.d.ts","sourceRoot":"","sources":["../../../src/contracts/schemas/hookDataSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,cAAc;;;;iBAIzB,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HookDataSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
exports.HookDataSchema = zod_1.z.object({
|
|
6
|
+
hook_event_name: zod_1.z.string(),
|
|
7
|
+
tool_name: zod_1.z.string().optional(),
|
|
8
|
+
tool_input: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()).optional(),
|
|
9
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normalized representation of a pre-tool-use event from any AI coding tool.
|
|
3
|
+
* Adapters convert vendor-specific hook payloads into this shape so that the
|
|
4
|
+
* deterministic engine and AI validator can run unchanged regardless of
|
|
5
|
+
* which agent fired the hook.
|
|
6
|
+
*/
|
|
7
|
+
export interface Action {
|
|
8
|
+
toolName: string;
|
|
9
|
+
toolInput: Record<string, unknown>;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Result of parsing a hook payload. An adapter may yield an Action when the
|
|
13
|
+
* payload represents a pre-tool-use event we care about, or a Skip when the
|
|
14
|
+
* payload is not a relevant event (post-event, unrecognized shape, disabled).
|
|
15
|
+
*/
|
|
16
|
+
export type ParsedHook = {
|
|
17
|
+
kind: 'action';
|
|
18
|
+
action: Action;
|
|
19
|
+
} | {
|
|
20
|
+
kind: 'skip';
|
|
21
|
+
reason: string;
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=Action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Action.d.ts","sourceRoot":"","sources":["../../../src/contracts/types/Action.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAED;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClaudeMdFile.d.ts","sourceRoot":"","sources":["../../../src/contracts/types/ClaudeMdFile.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HookData.d.ts","sourceRoot":"","sources":["../../../src/contracts/types/HookData.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG;IACrB,eAAe,EAAE,MAAM,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACrC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelClient.d.ts","sourceRoot":"","sources":["../../../src/contracts/types/ModelClient.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CACrC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type RuleSourceKind = 'claude-md' | 'agents-md' | 'cursorrules' | 'cursor-mdc' | 'clinerules' | 'windsurf-rule' | 'copilot-instructions' | 'aider-conventions';
|
|
2
|
+
export interface RuleSource {
|
|
3
|
+
path: string;
|
|
4
|
+
content: string;
|
|
5
|
+
kind: RuleSourceKind;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=RuleSource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RuleSource.d.ts","sourceRoot":"","sources":["../../../src/contracts/types/RuleSource.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GACtB,WAAW,GACX,WAAW,GACX,aAAa,GACb,YAAY,GACZ,YAAY,GACZ,eAAe,GACf,sBAAsB,GACtB,mBAAmB,CAAA;AAEvB,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,cAAc,CAAA;CACrB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One past action in an AI coding session, normalized across vendors.
|
|
3
|
+
* Adapters convert their vendor-specific transcript events into this shape.
|
|
4
|
+
*/
|
|
5
|
+
export interface SessionEvent {
|
|
6
|
+
kind: 'tool-call' | 'tool-result' | 'user-message' | 'assistant-message';
|
|
7
|
+
toolName?: string;
|
|
8
|
+
toolInput?: Record<string, unknown>;
|
|
9
|
+
/** ISO 8601 timestamp if the adapter can supply one. */
|
|
10
|
+
timestamp?: string;
|
|
11
|
+
/** Raw vendor payload for rules that want the original detail. */
|
|
12
|
+
raw?: unknown;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Context built once per hook invocation and threaded through the
|
|
16
|
+
* deterministic engine and AI validator. Rules and prompts can read
|
|
17
|
+
* `history` to make context-aware decisions (TDD enforcement,
|
|
18
|
+
* detecting drift, spotting repeated rule violations).
|
|
19
|
+
*/
|
|
20
|
+
export interface SessionContext {
|
|
21
|
+
cwd: string;
|
|
22
|
+
projectRoot: string;
|
|
23
|
+
history: SessionEvent[];
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=SessionContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionContext.d.ts","sourceRoot":"","sources":["../../../src/contracts/types/SessionContext.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,WAAW,GAAG,aAAa,GAAG,cAAc,GAAG,mBAAmB,CAAA;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kEAAkE;IAClE,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,YAAY,EAAE,CAAA;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValidationResult.d.ts","sourceRoot":"","sources":["../../../src/contracts/types/ValidationResult.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAA;IAC7B,MAAM,EAAE,MAAM,CAAA;CACf,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { DaemonRequest, DaemonResponse } from './protocol';
|
|
2
|
+
export interface SendToDaemonOptions {
|
|
3
|
+
socketPath: string;
|
|
4
|
+
/** Connection + response timeout in ms. */
|
|
5
|
+
timeoutMs?: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Connect to a running agent-gate daemon and exchange one request.
|
|
9
|
+
*
|
|
10
|
+
* Returns the daemon's DaemonResponse on success.
|
|
11
|
+
* Returns null when the daemon is not running, the response cannot be
|
|
12
|
+
* parsed, the daemon reported an error, or the timeout elapsed. The
|
|
13
|
+
* caller is expected to fall back to direct (one-shot) mode in any of
|
|
14
|
+
* those cases.
|
|
15
|
+
*/
|
|
16
|
+
export declare function sendToDaemon(request: DaemonRequest, opts: SendToDaemonOptions): Promise<DaemonResponse | null>;
|
|
17
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/daemon/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE1D,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAA;IAClB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CA4ChC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sendToDaemon = sendToDaemon;
|
|
4
|
+
const net_1 = require("net");
|
|
5
|
+
/**
|
|
6
|
+
* Connect to a running agent-gate daemon and exchange one request.
|
|
7
|
+
*
|
|
8
|
+
* Returns the daemon's DaemonResponse on success.
|
|
9
|
+
* Returns null when the daemon is not running, the response cannot be
|
|
10
|
+
* parsed, the daemon reported an error, or the timeout elapsed. The
|
|
11
|
+
* caller is expected to fall back to direct (one-shot) mode in any of
|
|
12
|
+
* those cases.
|
|
13
|
+
*/
|
|
14
|
+
function sendToDaemon(request, opts) {
|
|
15
|
+
const timeoutMs = opts.timeoutMs ?? 2000;
|
|
16
|
+
return new Promise((resolve) => {
|
|
17
|
+
let settled = false;
|
|
18
|
+
const done = (val) => {
|
|
19
|
+
if (settled)
|
|
20
|
+
return;
|
|
21
|
+
settled = true;
|
|
22
|
+
resolve(val);
|
|
23
|
+
};
|
|
24
|
+
const sock = (0, net_1.createConnection)(opts.socketPath);
|
|
25
|
+
const timer = setTimeout(() => {
|
|
26
|
+
sock.destroy();
|
|
27
|
+
done(null);
|
|
28
|
+
}, timeoutMs);
|
|
29
|
+
let buffer = '';
|
|
30
|
+
sock.setEncoding('utf-8');
|
|
31
|
+
sock.on('connect', () => {
|
|
32
|
+
sock.write(JSON.stringify(request) + '\n');
|
|
33
|
+
});
|
|
34
|
+
sock.on('data', (chunk) => {
|
|
35
|
+
buffer += chunk;
|
|
36
|
+
});
|
|
37
|
+
sock.on('end', () => {
|
|
38
|
+
clearTimeout(timer);
|
|
39
|
+
const line = buffer.trim();
|
|
40
|
+
if (!line)
|
|
41
|
+
return done(null);
|
|
42
|
+
try {
|
|
43
|
+
const parsed = JSON.parse(line);
|
|
44
|
+
if ('error' in parsed)
|
|
45
|
+
return done(null);
|
|
46
|
+
if (typeof parsed.output !== 'string')
|
|
47
|
+
return done(null);
|
|
48
|
+
done(parsed);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
done(null);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
sock.on('error', () => {
|
|
55
|
+
clearTimeout(timer);
|
|
56
|
+
done(null);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface DaemonRequest {
|
|
2
|
+
/** Adapter id (e.g. "claude-code", "cursor"). */
|
|
3
|
+
adapter: string;
|
|
4
|
+
/** Raw hook payload (the vendor JSON the hook would have received). */
|
|
5
|
+
payload: string;
|
|
6
|
+
/** Working directory the hook is firing from. */
|
|
7
|
+
cwd: string;
|
|
8
|
+
}
|
|
9
|
+
export interface DaemonResponse {
|
|
10
|
+
/** Adapter-formatted stdout JSON the hook would have produced. */
|
|
11
|
+
output: string;
|
|
12
|
+
}
|
|
13
|
+
export interface DaemonErrorResponse {
|
|
14
|
+
error: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function defaultSocketPath(): string;
|
|
17
|
+
//# sourceMappingURL=protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/daemon/protocol.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAA;IACf,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAA;IACf,iDAAiD;IACjD,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,cAAc;IAC7B,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.defaultSocketPath = defaultSocketPath;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
const os_1 = require("os");
|
|
6
|
+
function defaultSocketPath() {
|
|
7
|
+
return (0, path_1.join)((0, os_1.tmpdir)(), 'agent-gate.sock');
|
|
8
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { DaemonRequest, DaemonResponse } from './protocol';
|
|
2
|
+
export type DaemonHandler = (req: DaemonRequest) => Promise<DaemonResponse>;
|
|
3
|
+
export interface DaemonServerOptions {
|
|
4
|
+
socketPath: string;
|
|
5
|
+
handler: DaemonHandler;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Long-lived agent-gate process accepting hook payloads over a Unix socket.
|
|
9
|
+
*
|
|
10
|
+
* Wire protocol per connection:
|
|
11
|
+
* - client writes one JSON object (DaemonRequest) terminated by '\n'.
|
|
12
|
+
* - server writes one JSON object back ({output: "..."} or {error: "..."})
|
|
13
|
+
* terminated by '\n', then closes the socket.
|
|
14
|
+
*
|
|
15
|
+
* Errors in the handler become {error: ...} responses; the client treats
|
|
16
|
+
* those as "fall back to direct mode" and the pipeline continues without
|
|
17
|
+
* blocking the agent.
|
|
18
|
+
*/
|
|
19
|
+
export declare class DaemonServer {
|
|
20
|
+
private readonly opts;
|
|
21
|
+
private server;
|
|
22
|
+
constructor(opts: DaemonServerOptions);
|
|
23
|
+
start(): Promise<void>;
|
|
24
|
+
stop(): Promise<void>;
|
|
25
|
+
private handleSocket;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/daemon/server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE1D,MAAM,MAAM,aAAa,GAAG,CAC1B,GAAG,EAAE,aAAa,KACf,OAAO,CAAC,cAAc,CAAC,CAAA;AAE5B,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,aAAa,CAAA;CACvB;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqB;IAC1C,OAAO,CAAC,MAAM,CAAsB;gBAExB,IAAI,EAAE,mBAAmB;IAIrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBrB,OAAO,CAAC,YAAY;CA6BrB"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DaemonServer = void 0;
|
|
4
|
+
const net_1 = require("net");
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
/**
|
|
7
|
+
* Long-lived agent-gate process accepting hook payloads over a Unix socket.
|
|
8
|
+
*
|
|
9
|
+
* Wire protocol per connection:
|
|
10
|
+
* - client writes one JSON object (DaemonRequest) terminated by '\n'.
|
|
11
|
+
* - server writes one JSON object back ({output: "..."} or {error: "..."})
|
|
12
|
+
* terminated by '\n', then closes the socket.
|
|
13
|
+
*
|
|
14
|
+
* Errors in the handler become {error: ...} responses; the client treats
|
|
15
|
+
* those as "fall back to direct mode" and the pipeline continues without
|
|
16
|
+
* blocking the agent.
|
|
17
|
+
*/
|
|
18
|
+
class DaemonServer {
|
|
19
|
+
opts;
|
|
20
|
+
server = null;
|
|
21
|
+
constructor(opts) {
|
|
22
|
+
this.opts = opts;
|
|
23
|
+
}
|
|
24
|
+
start() {
|
|
25
|
+
return new Promise((resolve, reject) => {
|
|
26
|
+
try {
|
|
27
|
+
if ((0, fs_1.existsSync)(this.opts.socketPath)) {
|
|
28
|
+
(0, fs_1.unlinkSync)(this.opts.socketPath);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch (e) {
|
|
32
|
+
reject(e);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const server = (0, net_1.createServer)((socket) => this.handleSocket(socket));
|
|
36
|
+
server.on('error', (err) => {
|
|
37
|
+
if (this.server === null)
|
|
38
|
+
reject(err);
|
|
39
|
+
});
|
|
40
|
+
server.listen(this.opts.socketPath, () => {
|
|
41
|
+
this.server = server;
|
|
42
|
+
resolve();
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
stop() {
|
|
47
|
+
return new Promise((resolve) => {
|
|
48
|
+
if (!this.server) {
|
|
49
|
+
resolve();
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const s = this.server;
|
|
53
|
+
this.server = null;
|
|
54
|
+
s.close(() => {
|
|
55
|
+
try {
|
|
56
|
+
if ((0, fs_1.existsSync)(this.opts.socketPath)) {
|
|
57
|
+
(0, fs_1.unlinkSync)(this.opts.socketPath);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// best effort
|
|
62
|
+
}
|
|
63
|
+
resolve();
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
handleSocket(socket) {
|
|
68
|
+
let buffer = '';
|
|
69
|
+
socket.setEncoding('utf-8');
|
|
70
|
+
socket.on('data', async (chunk) => {
|
|
71
|
+
buffer += chunk;
|
|
72
|
+
const newlineIdx = buffer.indexOf('\n');
|
|
73
|
+
if (newlineIdx === -1)
|
|
74
|
+
return;
|
|
75
|
+
const line = buffer.slice(0, newlineIdx);
|
|
76
|
+
buffer = '';
|
|
77
|
+
let req;
|
|
78
|
+
try {
|
|
79
|
+
req = JSON.parse(line);
|
|
80
|
+
}
|
|
81
|
+
catch (e) {
|
|
82
|
+
const msg = e instanceof Error ? e.message : 'invalid JSON';
|
|
83
|
+
socket.end(JSON.stringify({ error: msg }) + '\n');
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
try {
|
|
87
|
+
const resp = await this.opts.handler(req);
|
|
88
|
+
socket.end(JSON.stringify(resp) + '\n');
|
|
89
|
+
}
|
|
90
|
+
catch (e) {
|
|
91
|
+
const msg = e instanceof Error ? e.message : 'handler failed';
|
|
92
|
+
socket.end(JSON.stringify({ error: msg }) + '\n');
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
socket.on('error', () => {
|
|
96
|
+
// ignore — client side disconnected; nothing to do
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
exports.DaemonServer = DaemonServer;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { DeterministicRule } from './types';
|
|
2
|
+
import { AgentGateConfig } from '../config/AgentGateConfig';
|
|
3
|
+
/**
|
|
4
|
+
* Builds the deterministic rule list, applying config overrides where the
|
|
5
|
+
* rule supports them, appending any user-supplied customRules, and
|
|
6
|
+
* filtering out any rule ids listed in config.disabledRules.
|
|
7
|
+
* Built-ins come first; custom rules run after them in declaration order.
|
|
8
|
+
*/
|
|
9
|
+
export declare function buildDefaultDeterministicRules(config?: AgentGateConfig): DeterministicRule[];
|
|
10
|
+
export declare const defaultDeterministicRules: DeterministicRule[];
|
|
11
|
+
//# sourceMappingURL=defaultRules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultRules.d.ts","sourceRoot":"","sources":["../../src/deterministic/defaultRules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAM3C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAE3D;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,CAAC,EAAE,eAAe,GACvB,iBAAiB,EAAE,CAgBrB;AAED,eAAO,MAAM,yBAAyB,EAAE,iBAAiB,EACvB,CAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.defaultDeterministicRules = void 0;
|
|
4
|
+
exports.buildDefaultDeterministicRules = buildDefaultDeterministicRules;
|
|
5
|
+
const preventRmRfRoot_1 = require("./rules/preventRmRfRoot");
|
|
6
|
+
const preventSecretFileWrite_1 = require("./rules/preventSecretFileWrite");
|
|
7
|
+
const preventBashSecretWrite_1 = require("./rules/preventBashSecretWrite");
|
|
8
|
+
const preventForcePushMain_1 = require("./rules/preventForcePushMain");
|
|
9
|
+
const preventSystemPathWrite_1 = require("./rules/preventSystemPathWrite");
|
|
10
|
+
/**
|
|
11
|
+
* Builds the deterministic rule list, applying config overrides where the
|
|
12
|
+
* rule supports them, appending any user-supplied customRules, and
|
|
13
|
+
* filtering out any rule ids listed in config.disabledRules.
|
|
14
|
+
* Built-ins come first; custom rules run after them in declaration order.
|
|
15
|
+
*/
|
|
16
|
+
function buildDefaultDeterministicRules(config) {
|
|
17
|
+
const builtIn = [
|
|
18
|
+
preventRmRfRoot_1.preventRmRfRoot,
|
|
19
|
+
(0, preventSecretFileWrite_1.preventSecretFileWriteWith)({
|
|
20
|
+
extraSecretPathPrefixes: config?.extraSecretPathPrefixes,
|
|
21
|
+
}),
|
|
22
|
+
preventBashSecretWrite_1.preventBashSecretWrite,
|
|
23
|
+
(0, preventForcePushMain_1.preventForcePushMainWith)({
|
|
24
|
+
protectedBranches: config?.protectedBranches,
|
|
25
|
+
}),
|
|
26
|
+
preventSystemPathWrite_1.preventSystemPathWrite,
|
|
27
|
+
];
|
|
28
|
+
const custom = config?.customRules ?? [];
|
|
29
|
+
const all = [...builtIn, ...custom];
|
|
30
|
+
const disabled = new Set(config?.disabledRules ?? []);
|
|
31
|
+
return all.filter((r) => !disabled.has(r.id));
|
|
32
|
+
}
|
|
33
|
+
exports.defaultDeterministicRules = buildDefaultDeterministicRules();
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { DeterministicRule } from './types';
|
|
2
|
+
import { SessionContext } from '../contracts/types/SessionContext';
|
|
3
|
+
export type EngineResult = {
|
|
4
|
+
kind: 'allow';
|
|
5
|
+
} | {
|
|
6
|
+
kind: 'block';
|
|
7
|
+
reason: string;
|
|
8
|
+
ruleId: string;
|
|
9
|
+
};
|
|
10
|
+
export declare function runDeterministicRules(toolName: string, toolInput: Record<string, unknown>, rules: DeterministicRule[], ctx?: SessionContext): EngineResult;
|
|
11
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/deterministic/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AAElE,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAErD,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,KAAK,EAAE,iBAAiB,EAAE,EAC1B,GAAG,CAAC,EAAE,cAAc,GACnB,YAAY,CAQd"}
|