@provos/ironcurtain 0.7.2 → 0.9.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 (259) hide show
  1. package/README.md +29 -100
  2. package/dist/auth/auth-command.d.ts +15 -0
  3. package/dist/auth/auth-command.js +424 -0
  4. package/dist/auth/auth-command.js.map +1 -0
  5. package/dist/auth/oauth-flow.d.ts +46 -0
  6. package/dist/auth/oauth-flow.js +279 -0
  7. package/dist/auth/oauth-flow.js.map +1 -0
  8. package/dist/auth/oauth-provider.d.ts +55 -0
  9. package/dist/auth/oauth-provider.js +73 -0
  10. package/dist/auth/oauth-provider.js.map +1 -0
  11. package/dist/auth/oauth-registry.d.ts +34 -0
  12. package/dist/auth/oauth-registry.js +69 -0
  13. package/dist/auth/oauth-registry.js.map +1 -0
  14. package/dist/auth/oauth-token-provider.d.ts +52 -0
  15. package/dist/auth/oauth-token-provider.js +159 -0
  16. package/dist/auth/oauth-token-provider.js.map +1 -0
  17. package/dist/auth/oauth-token-store.d.ts +30 -0
  18. package/dist/auth/oauth-token-store.js +93 -0
  19. package/dist/auth/oauth-token-store.js.map +1 -0
  20. package/dist/auth/providers/google-scopes.d.ts +35 -0
  21. package/dist/auth/providers/google-scopes.js +183 -0
  22. package/dist/auth/providers/google-scopes.js.map +1 -0
  23. package/dist/auth/providers/google.d.ts +2 -0
  24. package/dist/auth/providers/google.js +28 -0
  25. package/dist/auth/providers/google.js.map +1 -0
  26. package/dist/cli.js +6 -0
  27. package/dist/cli.js.map +1 -1
  28. package/dist/config/config-command.js +39 -1
  29. package/dist/config/config-command.js.map +1 -1
  30. package/dist/config/constitution-readonly.md +14 -11
  31. package/dist/config/constitution-user-base.md +15 -0
  32. package/dist/config/first-start.js +4 -1
  33. package/dist/config/first-start.js.map +1 -1
  34. package/dist/config/generated/test-scenarios.json +1 -1
  35. package/dist/config/generated/tool-annotations.json +10617 -296
  36. package/dist/config/generated-readonly/compiled-policy.json +787 -244
  37. package/dist/config/index.d.ts +2 -2
  38. package/dist/config/index.js +8 -0
  39. package/dist/config/index.js.map +1 -1
  40. package/dist/config/mcp-servers.json +31 -2
  41. package/dist/config/paths.d.ts +20 -0
  42. package/dist/config/paths.js +43 -0
  43. package/dist/config/paths.js.map +1 -1
  44. package/dist/config/types.d.ts +8 -0
  45. package/dist/config/user-config.d.ts +29 -0
  46. package/dist/config/user-config.js +30 -0
  47. package/dist/config/user-config.js.map +1 -1
  48. package/dist/cron/constitution-generator.d.ts +2 -1
  49. package/dist/cron/constitution-generator.js +35 -36
  50. package/dist/cron/constitution-generator.js.map +1 -1
  51. package/dist/cron/headless-transport.d.ts +4 -0
  52. package/dist/cron/headless-transport.js +1 -1
  53. package/dist/cron/headless-transport.js.map +1 -1
  54. package/dist/daemon/ironcurtain-daemon.js +7 -1
  55. package/dist/daemon/ironcurtain-daemon.js.map +1 -1
  56. package/dist/docker/adapters/claude-code.js +32 -5
  57. package/dist/docker/adapters/claude-code.js.map +1 -1
  58. package/dist/docker/agent-adapter.d.ts +40 -0
  59. package/dist/docker/claude-md-seed.d.ts +27 -0
  60. package/dist/docker/claude-md-seed.js +42 -0
  61. package/dist/docker/claude-md-seed.js.map +1 -0
  62. package/dist/docker/docker-agent-session.d.ts +3 -1
  63. package/dist/docker/docker-agent-session.js +51 -28
  64. package/dist/docker/docker-agent-session.js.map +1 -1
  65. package/dist/docker/docker-infrastructure.d.ts +15 -1
  66. package/dist/docker/docker-infrastructure.js +105 -9
  67. package/dist/docker/docker-infrastructure.js.map +1 -1
  68. package/dist/docker/docker-manager.d.ts +2 -0
  69. package/dist/docker/docker-manager.js +9 -1
  70. package/dist/docker/docker-manager.js.map +1 -1
  71. package/dist/docker/mitm-proxy.d.ts +65 -0
  72. package/dist/docker/mitm-proxy.js +288 -31
  73. package/dist/docker/mitm-proxy.js.map +1 -1
  74. package/dist/docker/package-types.d.ts +127 -0
  75. package/dist/docker/package-types.js +8 -0
  76. package/dist/docker/package-types.js.map +1 -0
  77. package/dist/docker/package-validator.d.ts +41 -0
  78. package/dist/docker/package-validator.js +90 -0
  79. package/dist/docker/package-validator.js.map +1 -0
  80. package/dist/docker/platform.d.ts +6 -6
  81. package/dist/docker/platform.js +8 -6
  82. package/dist/docker/platform.js.map +1 -1
  83. package/dist/docker/proxy-tools.d.ts +80 -0
  84. package/dist/docker/proxy-tools.js +248 -0
  85. package/dist/docker/proxy-tools.js.map +1 -0
  86. package/dist/docker/pty-session.d.ts +15 -0
  87. package/dist/docker/pty-session.js +253 -73
  88. package/dist/docker/pty-session.js.map +1 -1
  89. package/dist/docker/pty-types.d.ts +28 -0
  90. package/dist/docker/pty-types.js +2 -0
  91. package/dist/docker/pty-types.js.map +1 -1
  92. package/dist/docker/registry-proxy.d.ts +142 -0
  93. package/dist/docker/registry-proxy.js +856 -0
  94. package/dist/docker/registry-proxy.js.map +1 -0
  95. package/dist/escalation/escalation-watcher.d.ts +3 -1
  96. package/dist/escalation/escalation-watcher.js +6 -2
  97. package/dist/escalation/escalation-watcher.js.map +1 -1
  98. package/dist/escalation/listener-command.js +24 -10
  99. package/dist/escalation/listener-command.js.map +1 -1
  100. package/dist/escalation/listener-lock.d.ts +5 -0
  101. package/dist/escalation/listener-lock.js +14 -0
  102. package/dist/escalation/listener-lock.js.map +1 -1
  103. package/dist/index.js +16 -3
  104. package/dist/index.js.map +1 -1
  105. package/dist/memory/auto-save.d.ts +25 -0
  106. package/dist/memory/auto-save.js +89 -0
  107. package/dist/memory/auto-save.js.map +1 -0
  108. package/dist/memory/memory-annotations.d.ts +47 -0
  109. package/dist/memory/memory-annotations.js +87 -0
  110. package/dist/memory/memory-annotations.js.map +1 -0
  111. package/dist/memory/memory-prompt.d.ts +12 -0
  112. package/dist/memory/memory-prompt.js +20 -0
  113. package/dist/memory/memory-prompt.js.map +1 -0
  114. package/dist/memory/resolve-memory-path.d.ts +20 -0
  115. package/dist/memory/resolve-memory-path.js +30 -0
  116. package/dist/memory/resolve-memory-path.js.map +1 -0
  117. package/dist/mux/mux-app.d.ts +4 -0
  118. package/dist/mux/mux-app.js +246 -28
  119. package/dist/mux/mux-app.js.map +1 -1
  120. package/dist/mux/mux-command.d.ts +2 -2
  121. package/dist/mux/mux-command.js +14 -22
  122. package/dist/mux/mux-command.js.map +1 -1
  123. package/dist/mux/mux-escalation-manager.d.ts +9 -3
  124. package/dist/mux/mux-escalation-manager.js +69 -19
  125. package/dist/mux/mux-escalation-manager.js.map +1 -1
  126. package/dist/mux/mux-input-handler.d.ts +59 -3
  127. package/dist/mux/mux-input-handler.js +270 -32
  128. package/dist/mux/mux-input-handler.js.map +1 -1
  129. package/dist/mux/mux-renderer.d.ts +19 -1
  130. package/dist/mux/mux-renderer.js +466 -11
  131. package/dist/mux/mux-renderer.js.map +1 -1
  132. package/dist/mux/persona-scanner.d.ts +19 -0
  133. package/dist/mux/persona-scanner.js +53 -0
  134. package/dist/mux/persona-scanner.js.map +1 -0
  135. package/dist/mux/pty-bridge.d.ts +8 -0
  136. package/dist/mux/pty-bridge.js +19 -1
  137. package/dist/mux/pty-bridge.js.map +1 -1
  138. package/dist/mux/session-scanner.d.ts +18 -0
  139. package/dist/mux/session-scanner.js +65 -0
  140. package/dist/mux/session-scanner.js.map +1 -0
  141. package/dist/mux/types.d.ts +36 -1
  142. package/dist/mux/types.js +14 -1
  143. package/dist/mux/types.js.map +1 -1
  144. package/dist/persona/persona-command.js +130 -93
  145. package/dist/persona/persona-command.js.map +1 -1
  146. package/dist/persona/persona-prompt.d.ts +7 -7
  147. package/dist/persona/persona-prompt.js +14 -29
  148. package/dist/persona/persona-prompt.js.map +1 -1
  149. package/dist/persona/resolve.js +5 -2
  150. package/dist/persona/resolve.js.map +1 -1
  151. package/dist/pipeline/annotate.js +1 -7
  152. package/dist/pipeline/annotate.js.map +1 -1
  153. package/dist/pipeline/compile.d.ts +5 -2
  154. package/dist/pipeline/compile.js +23 -11
  155. package/dist/pipeline/compile.js.map +1 -1
  156. package/dist/pipeline/constitution-compiler.d.ts +302 -3
  157. package/dist/pipeline/constitution-compiler.js +285 -23
  158. package/dist/pipeline/constitution-compiler.js.map +1 -1
  159. package/dist/pipeline/generate-with-repair.d.ts +2 -2
  160. package/dist/pipeline/generate-with-repair.js +2 -2
  161. package/dist/pipeline/handwritten-scenarios.d.ts +20 -7
  162. package/dist/pipeline/handwritten-scenarios.js +20 -41
  163. package/dist/pipeline/handwritten-scenarios.js.map +1 -1
  164. package/dist/pipeline/list-resolver.d.ts +18 -20
  165. package/dist/pipeline/list-resolver.js +28 -36
  166. package/dist/pipeline/list-resolver.js.map +1 -1
  167. package/dist/pipeline/pipeline-runner.d.ts +102 -13
  168. package/dist/pipeline/pipeline-runner.js +497 -237
  169. package/dist/pipeline/pipeline-runner.js.map +1 -1
  170. package/dist/pipeline/pipeline-shared.d.ts +7 -9
  171. package/dist/pipeline/pipeline-shared.js +8 -18
  172. package/dist/pipeline/pipeline-shared.js.map +1 -1
  173. package/dist/pipeline/policy-verifier.d.ts +32 -5
  174. package/dist/pipeline/policy-verifier.js +137 -8
  175. package/dist/pipeline/policy-verifier.js.map +1 -1
  176. package/dist/pipeline/proxy-mcp-connections.d.ts +25 -0
  177. package/dist/pipeline/proxy-mcp-connections.js +121 -0
  178. package/dist/pipeline/proxy-mcp-connections.js.map +1 -0
  179. package/dist/pipeline/refresh-lists.js +21 -13
  180. package/dist/pipeline/refresh-lists.js.map +1 -1
  181. package/dist/pipeline/scenario-generator.d.ts +29 -49
  182. package/dist/pipeline/scenario-generator.js +180 -143
  183. package/dist/pipeline/scenario-generator.js.map +1 -1
  184. package/dist/pipeline/scenario-schema-validator.d.ts +51 -0
  185. package/dist/pipeline/scenario-schema-validator.js +132 -0
  186. package/dist/pipeline/scenario-schema-validator.js.map +1 -0
  187. package/dist/pipeline/tool-annotator.d.ts +9 -8
  188. package/dist/pipeline/tool-annotator.js +48 -95
  189. package/dist/pipeline/tool-annotator.js.map +1 -1
  190. package/dist/pipeline/types.d.ts +31 -24
  191. package/dist/sandbox/index.d.ts +26 -10
  192. package/dist/sandbox/index.js +151 -40
  193. package/dist/sandbox/index.js.map +1 -1
  194. package/dist/servers/fetch-server.js +10 -5
  195. package/dist/servers/fetch-server.js.map +1 -1
  196. package/dist/session/agent-session.d.ts +8 -20
  197. package/dist/session/agent-session.js +22 -70
  198. package/dist/session/agent-session.js.map +1 -1
  199. package/dist/session/base-transport.d.ts +17 -1
  200. package/dist/session/base-transport.js +25 -1
  201. package/dist/session/base-transport.js.map +1 -1
  202. package/dist/session/cli-transport.d.ts +5 -0
  203. package/dist/session/cli-transport.js +48 -25
  204. package/dist/session/cli-transport.js.map +1 -1
  205. package/dist/session/index.d.ts +25 -1
  206. package/dist/session/index.js +57 -8
  207. package/dist/session/index.js.map +1 -1
  208. package/dist/session/prompts.js +8 -9
  209. package/dist/session/prompts.js.map +1 -1
  210. package/dist/session/session-manager.d.ts +6 -0
  211. package/dist/session/session-manager.js +12 -0
  212. package/dist/session/session-manager.js.map +1 -1
  213. package/dist/session/types.d.ts +11 -1
  214. package/dist/session/types.js.map +1 -1
  215. package/dist/session/workspace-validation.js +37 -6
  216. package/dist/session/workspace-validation.js.map +1 -1
  217. package/dist/signal/signal-bot-daemon.js +24 -8
  218. package/dist/signal/signal-bot-daemon.js.map +1 -1
  219. package/dist/signal/signal-transport.d.ts +5 -2
  220. package/dist/signal/signal-transport.js +3 -3
  221. package/dist/signal/signal-transport.js.map +1 -1
  222. package/dist/trusted-process/approval-whitelist.d.ts +117 -0
  223. package/dist/trusted-process/approval-whitelist.js +237 -0
  224. package/dist/trusted-process/approval-whitelist.js.map +1 -0
  225. package/dist/trusted-process/gworkspace-credentials.d.ts +40 -0
  226. package/dist/trusted-process/gworkspace-credentials.js +45 -0
  227. package/dist/trusted-process/gworkspace-credentials.js.map +1 -0
  228. package/dist/trusted-process/index.d.ts +11 -1
  229. package/dist/trusted-process/index.js +83 -53
  230. package/dist/trusted-process/index.js.map +1 -1
  231. package/dist/trusted-process/mcp-proxy-server.d.ts +23 -0
  232. package/dist/trusted-process/mcp-proxy-server.js +409 -94
  233. package/dist/trusted-process/mcp-proxy-server.js.map +1 -1
  234. package/dist/trusted-process/policy-engine.d.ts +12 -3
  235. package/dist/trusted-process/policy-engine.js +33 -23
  236. package/dist/trusted-process/policy-engine.js.map +1 -1
  237. package/dist/trusted-process/policy-types.d.ts +17 -0
  238. package/dist/trusted-process/sandbox-integration.d.ts +23 -0
  239. package/dist/trusted-process/sandbox-integration.js +115 -3
  240. package/dist/trusted-process/sandbox-integration.js.map +1 -1
  241. package/dist/trusted-process/token-file-refresher.d.ts +69 -0
  242. package/dist/trusted-process/token-file-refresher.js +120 -0
  243. package/dist/trusted-process/token-file-refresher.js.map +1 -0
  244. package/dist/types/argument-roles.d.ts +7 -1
  245. package/dist/types/argument-roles.js +50 -0
  246. package/dist/types/argument-roles.js.map +1 -1
  247. package/dist/types/audit.d.ts +11 -0
  248. package/docker/Dockerfile.base +22 -0
  249. package/docker/Dockerfile.base.arm64 +44 -4
  250. package/docker/Dockerfile.claude-code +2 -2
  251. package/docker/entrypoint-claude-code.sh +24 -6
  252. package/package.json +8 -2
  253. package/src/config/constitution-user-base.md +15 -0
  254. package/src/config/generated/test-scenarios.json +1 -1
  255. package/src/config/generated/tool-annotations.json +10617 -296
  256. package/src/config/mcp-servers.json +31 -2
  257. package/dist/pipeline/mcp-connections.d.ts +0 -16
  258. package/dist/pipeline/mcp-connections.js +0 -61
  259. package/dist/pipeline/mcp-connections.js.map +0 -1
@@ -9,17 +9,18 @@
9
9
  * CLI flags:
10
10
  * --constitution <path> Use an alternative constitution file
11
11
  * --output-dir <path> Write compiled artifacts to this directory
12
+ * --server <name> Compile only this server (for debugging)
12
13
  */
13
14
  import { resolve } from 'node:path';
14
15
  import { fileURLToPath } from 'node:url';
15
16
  import { parseArgs } from 'node:util';
16
17
  import chalk from 'chalk';
17
- import { loadPipelineConfig, loadToolAnnotationsFile } from './pipeline-shared.js';
18
+ import { loadPipelineConfig, loadStoredToolAnnotationsFile } from './pipeline-shared.js';
18
19
  import { PipelineRunner, createPipelineModels } from './pipeline-runner.js';
19
20
  // Re-export utilities that test files import from this file.
20
- export { resolveRulePaths, mergeReplacements } from './pipeline-shared.js';
21
+ export { resolveRulePaths } from './pipeline-shared.js';
21
22
  /**
22
- * Parses --constitution and --output-dir from process.argv.
23
+ * Parses --constitution, --output-dir, and --server from process.argv.
23
24
  * Returns resolved absolute paths when provided.
24
25
  */
25
26
  export function parseCompilePolicyArgs(argv = process.argv.slice(2)) {
@@ -28,14 +29,20 @@ export function parseCompilePolicyArgs(argv = process.argv.slice(2)) {
28
29
  options: {
29
30
  constitution: { type: 'string' },
30
31
  'output-dir': { type: 'string' },
32
+ server: { type: 'string' },
33
+ 'no-mcp': { type: 'boolean' },
31
34
  },
32
35
  strict: false,
33
36
  });
34
37
  const constitution = typeof values.constitution === 'string' ? values.constitution : undefined;
35
38
  const outputDir = typeof values['output-dir'] === 'string' ? values['output-dir'] : undefined;
39
+ const server = typeof values.server === 'string' ? values.server : undefined;
40
+ const noMcp = values['no-mcp'] ?? false;
36
41
  return {
37
42
  constitution: constitution ? resolve(constitution) : undefined,
38
43
  outputDir: outputDir ? resolve(outputDir) : undefined,
44
+ server,
45
+ noMcp,
39
46
  };
40
47
  }
41
48
  // ---------------------------------------------------------------------------
@@ -45,18 +52,22 @@ export async function main() {
45
52
  const cliArgs = parseCompilePolicyArgs();
46
53
  const config = loadPipelineConfig(cliArgs);
47
54
  // Load tool annotations early to validate they exist before printing the banner
48
- const toolAnnotationsFile = loadToolAnnotationsFile(config.generatedDir, config.packageGeneratedDir);
49
- if (!toolAnnotationsFile) {
55
+ const storedAnnotationsFile = loadStoredToolAnnotationsFile(config.generatedDir, config.packageGeneratedDir);
56
+ if (!storedAnnotationsFile) {
50
57
  console.error(chalk.red.bold("Error: tool-annotations.json not found. Run 'npm run annotate-tools' first to generate tool annotations."));
51
58
  process.exit(1);
52
59
  }
53
- const allAnnotations = Object.values(toolAnnotationsFile.servers).flatMap((server) => server.tools);
54
- console.error(chalk.bold('Policy Compilation Pipeline'));
55
- console.error(chalk.bold('==========================='));
60
+ const allAnnotations = Object.values(storedAnnotationsFile.servers).flatMap((server) => server.tools);
61
+ const serverNames = Object.keys(storedAnnotationsFile.servers);
62
+ console.error(chalk.bold('Policy Compilation Pipeline (per-server)'));
63
+ console.error(chalk.bold('========================================='));
56
64
  console.error(`Constitution: ${chalk.dim(config.constitutionPath)}`);
57
65
  console.error(`Sandbox: ${chalk.dim(config.allowedDirectory)}`);
58
66
  console.error(`Output: ${chalk.dim(config.generatedDir + '/')}`);
59
- console.error(`Annotations: ${chalk.dim(`${allAnnotations.length} tools from ${Object.keys(toolAnnotationsFile.servers).length} server(s)`)}`);
67
+ console.error(`Annotations: ${chalk.dim(`${allAnnotations.length} tools from ${serverNames.length} server(s): ${serverNames.join(', ')}`)}`);
68
+ if (cliArgs.server) {
69
+ console.error(`Server filter: ${chalk.cyan(cliArgs.server)}`);
70
+ }
60
71
  console.error('');
61
72
  const models = await createPipelineModels(config.generatedDir);
62
73
  const runner = new PipelineRunner(models);
@@ -69,9 +80,10 @@ export async function main() {
69
80
  toolAnnotationsFallbackDir: config.packageGeneratedDir,
70
81
  allowedDirectory: config.allowedDirectory,
71
82
  protectedPaths: config.protectedPaths,
72
- mcpServers: config.mcpServers,
83
+ mcpServers: cliArgs.noMcp ? undefined : config.mcpServers,
73
84
  llmLogPath: models.logPath,
74
- preloadedToolAnnotations: toolAnnotationsFile,
85
+ preloadedStoredAnnotations: storedAnnotationsFile,
86
+ serverFilter: cliArgs.server ? [cliArgs.server] : undefined,
75
87
  });
76
88
  }
77
89
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/pipeline/compile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/pipeline/compile.ts"],"names":[],"mappings":"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"}
@@ -7,17 +7,29 @@
7
7
  * that faithfully implements the non-structural principles.
8
8
  */
9
9
  import type { LanguageModel, SystemModelMessage } from 'ai';
10
- import type { ToolAnnotation, CompiledRule, RepairContext, ListDefinition, TestScenario } from './types.js';
10
+ import { z } from 'zod';
11
+ import type { ToolAnnotation, CompiledRule, RepairContext, ListDefinition, TestScenario, RulePatchOp } from './types.js';
11
12
  export interface CompilerConfig {
12
13
  protectedPaths: string[];
14
+ allowedDirectory?: string;
13
15
  }
14
16
  export interface CompilationOutput {
15
17
  rules: CompiledRule[];
16
18
  listDefinitions: ListDefinition[];
17
19
  }
20
+ /**
21
+ * Options for building the compiler response schema.
22
+ */
23
+ export interface CompilerSchemaOptions {
24
+ /**
25
+ * When true, the `server` field in rule conditions is required (not optional).
26
+ * Used by per-server compilation to enforce server scoping at the schema level.
27
+ */
28
+ requireServer?: boolean;
29
+ }
18
30
  /**
19
31
  * Formats tool annotations into a multi-line summary for LLM system prompts.
20
- * Each entry shows server/tool name, comment, side-effects flag, and per-argument roles.
32
+ * Each entry shows server/tool name, comment, and per-argument roles.
21
33
  * Used by both the constitution compiler and task-policy compiler prompts.
22
34
  */
23
35
  export declare function formatAnnotationsSummary(annotations: ToolAnnotation[]): string;
@@ -26,7 +38,18 @@ export declare function formatAnnotationsSummary(annotations: ToolAnnotation[]):
26
38
  * Contains: role preamble, constitution, annotations, structural invariants, and instructions.
27
39
  * This is the cacheable part — it stays the same across repair rounds.
28
40
  */
29
- export declare function buildCompilerSystemPrompt(constitutionText: string, annotations: ToolAnnotation[], config: CompilerConfig, handwrittenScenarios?: TestScenario[]): string;
41
+ /**
42
+ * Options for customizing the compiler system prompt.
43
+ */
44
+ export interface CompilerPromptOptions {
45
+ /**
46
+ * When set, appends a "Server Scope" section to the prompt telling the LLM
47
+ * it is compiling rules for this single server only. Every emitted rule must
48
+ * include `"server": [serverScope]` in its condition.
49
+ */
50
+ serverScope?: string;
51
+ }
52
+ export declare function buildCompilerSystemPrompt(constitutionText: string, annotations: ToolAnnotation[], config: CompilerConfig, handwrittenScenarios?: TestScenario[], promptOptions?: CompilerPromptOptions): string;
30
53
  /** Builds the repair instructions sent as the user prompt during repair rounds. */
31
54
  export declare function buildRepairInstructions(repairContext: RepairContext): string;
32
55
  export declare function compileConstitution(constitutionText: string, annotations: ToolAnnotation[], config: CompilerConfig, llm: LanguageModel, repairContext?: RepairContext, onProgress?: (message: string) => void, system?: string | SystemModelMessage): Promise<CompilationOutput>;
@@ -47,14 +70,18 @@ export declare function compileConstitution(constitutionText: string, annotation
47
70
  export declare class ConstitutionCompilerSession {
48
71
  private readonly systemPrompt;
49
72
  private readonly model;
73
+ private readonly serverNames;
74
+ private readonly toolNames;
50
75
  private readonly schema;
51
76
  private readonly history;
52
77
  private readonly schemaHint;
78
+ private readonly schemaOptions?;
53
79
  private turns;
54
80
  constructor(options: {
55
81
  system: string | SystemModelMessage;
56
82
  model: LanguageModel;
57
83
  annotations: ToolAnnotation[];
84
+ schemaOptions?: CompilerSchemaOptions;
58
85
  });
59
86
  /**
60
87
  * Initial compilation: sends the first user message and returns compiled rules.
@@ -72,8 +99,280 @@ export declare class ConstitutionCompilerSession {
72
99
  private callAndParse;
73
100
  /** Attempts to parse LLM output, returning a discriminated result. */
74
101
  private tryParse;
102
+ /**
103
+ * Point-fix repair: sends patch instructions instead of requesting a full
104
+ * recompilation. The LLM returns a small set of update/add/delete operations
105
+ * that are mechanically applied to the existing rules, avoiding oscillation.
106
+ *
107
+ * Falls back to full recompile if the patch cannot be applied.
108
+ */
109
+ repairPointFix(existingRules: CompiledRule[], repairContext: RepairContext, existingListDefinitions?: ListDefinition[], onProgress?: (message: string) => void): Promise<CompilationOutput>;
75
110
  private parseOutput;
76
111
  }
112
+ /**
113
+ * Builds the Zod schema for patch responses. Reuses the same compiled rule
114
+ * field schemas as the full compilation schema, but wraps them in a
115
+ * discriminated union of update/add/delete operations.
116
+ */
117
+ export declare function buildPatchResponseSchema(serverNames: [string, ...string[]], toolNames: [string, ...string[]], existingRuleNames: [string, ...string[]], options?: CompilerSchemaOptions): z.ZodObject<{
118
+ reasoning: z.ZodString;
119
+ operations: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
120
+ op: z.ZodLiteral<"update">;
121
+ ruleName: z.ZodEnum<{
122
+ [x: string]: string;
123
+ }>;
124
+ rule: z.ZodObject<{
125
+ name: z.ZodString;
126
+ description: z.ZodString;
127
+ principle: z.ZodString;
128
+ if: z.ZodObject<{
129
+ roles: z.ZodOptional<z.ZodArray<z.ZodEnum<{
130
+ "read-path": "read-path";
131
+ "write-path": "write-path";
132
+ "delete-path": "delete-path";
133
+ "write-history": "write-history";
134
+ "delete-history": "delete-history";
135
+ "fetch-url": "fetch-url";
136
+ "git-remote-url": "git-remote-url";
137
+ "github-owner": "github-owner";
138
+ "github-repo": "github-repo";
139
+ "branch-name": "branch-name";
140
+ "commit-message": "commit-message";
141
+ "email-address": "email-address";
142
+ "email-body": "email-body";
143
+ "share-permission": "share-permission";
144
+ none: "none";
145
+ }>>>;
146
+ server: z.ZodArray<z.ZodEnum<{
147
+ [x: string]: string;
148
+ }>> | z.ZodOptional<z.ZodArray<z.ZodEnum<{
149
+ [x: string]: string;
150
+ }>>>;
151
+ tool: z.ZodOptional<z.ZodArray<z.ZodEnum<{
152
+ [x: string]: string;
153
+ }>>>;
154
+ paths: z.ZodOptional<z.ZodObject<{
155
+ roles: z.ZodArray<z.ZodEnum<{
156
+ "read-path": "read-path";
157
+ "write-path": "write-path";
158
+ "delete-path": "delete-path";
159
+ "write-history": "write-history";
160
+ "delete-history": "delete-history";
161
+ "fetch-url": "fetch-url";
162
+ "git-remote-url": "git-remote-url";
163
+ "github-owner": "github-owner";
164
+ "github-repo": "github-repo";
165
+ "branch-name": "branch-name";
166
+ "commit-message": "commit-message";
167
+ "email-address": "email-address";
168
+ "email-body": "email-body";
169
+ "share-permission": "share-permission";
170
+ none: "none";
171
+ }>>;
172
+ within: z.ZodString;
173
+ }, z.core.$strip>>;
174
+ domains: z.ZodOptional<z.ZodObject<{
175
+ roles: z.ZodArray<z.ZodEnum<{
176
+ "read-path": "read-path";
177
+ "write-path": "write-path";
178
+ "delete-path": "delete-path";
179
+ "write-history": "write-history";
180
+ "delete-history": "delete-history";
181
+ "fetch-url": "fetch-url";
182
+ "git-remote-url": "git-remote-url";
183
+ "github-owner": "github-owner";
184
+ "github-repo": "github-repo";
185
+ "branch-name": "branch-name";
186
+ "commit-message": "commit-message";
187
+ "email-address": "email-address";
188
+ "email-body": "email-body";
189
+ "share-permission": "share-permission";
190
+ none: "none";
191
+ }>>;
192
+ allowed: z.ZodArray<z.ZodString>;
193
+ }, z.core.$strip>>;
194
+ lists: z.ZodOptional<z.ZodArray<z.ZodObject<{
195
+ roles: z.ZodArray<z.ZodEnum<{
196
+ "read-path": "read-path";
197
+ "write-path": "write-path";
198
+ "delete-path": "delete-path";
199
+ "write-history": "write-history";
200
+ "delete-history": "delete-history";
201
+ "fetch-url": "fetch-url";
202
+ "git-remote-url": "git-remote-url";
203
+ "github-owner": "github-owner";
204
+ "github-repo": "github-repo";
205
+ "branch-name": "branch-name";
206
+ "commit-message": "commit-message";
207
+ "email-address": "email-address";
208
+ "email-body": "email-body";
209
+ "share-permission": "share-permission";
210
+ none: "none";
211
+ }>>;
212
+ allowed: z.ZodArray<z.ZodString>;
213
+ matchType: z.ZodEnum<{
214
+ domains: "domains";
215
+ emails: "emails";
216
+ identifiers: "identifiers";
217
+ }>;
218
+ }, z.core.$strip>>>;
219
+ }, z.core.$strip>;
220
+ then: z.ZodEnum<{
221
+ allow: "allow";
222
+ escalate: "escalate";
223
+ }>;
224
+ reason: z.ZodString;
225
+ }, z.core.$strip>;
226
+ }, z.core.$strip>, z.ZodObject<{
227
+ op: z.ZodLiteral<"add">;
228
+ afterRule: z.ZodOptional<z.ZodEnum<{
229
+ [x: string]: string;
230
+ }>>;
231
+ rule: z.ZodObject<{
232
+ name: z.ZodString;
233
+ description: z.ZodString;
234
+ principle: z.ZodString;
235
+ if: z.ZodObject<{
236
+ roles: z.ZodOptional<z.ZodArray<z.ZodEnum<{
237
+ "read-path": "read-path";
238
+ "write-path": "write-path";
239
+ "delete-path": "delete-path";
240
+ "write-history": "write-history";
241
+ "delete-history": "delete-history";
242
+ "fetch-url": "fetch-url";
243
+ "git-remote-url": "git-remote-url";
244
+ "github-owner": "github-owner";
245
+ "github-repo": "github-repo";
246
+ "branch-name": "branch-name";
247
+ "commit-message": "commit-message";
248
+ "email-address": "email-address";
249
+ "email-body": "email-body";
250
+ "share-permission": "share-permission";
251
+ none: "none";
252
+ }>>>;
253
+ server: z.ZodArray<z.ZodEnum<{
254
+ [x: string]: string;
255
+ }>> | z.ZodOptional<z.ZodArray<z.ZodEnum<{
256
+ [x: string]: string;
257
+ }>>>;
258
+ tool: z.ZodOptional<z.ZodArray<z.ZodEnum<{
259
+ [x: string]: string;
260
+ }>>>;
261
+ paths: z.ZodOptional<z.ZodObject<{
262
+ roles: z.ZodArray<z.ZodEnum<{
263
+ "read-path": "read-path";
264
+ "write-path": "write-path";
265
+ "delete-path": "delete-path";
266
+ "write-history": "write-history";
267
+ "delete-history": "delete-history";
268
+ "fetch-url": "fetch-url";
269
+ "git-remote-url": "git-remote-url";
270
+ "github-owner": "github-owner";
271
+ "github-repo": "github-repo";
272
+ "branch-name": "branch-name";
273
+ "commit-message": "commit-message";
274
+ "email-address": "email-address";
275
+ "email-body": "email-body";
276
+ "share-permission": "share-permission";
277
+ none: "none";
278
+ }>>;
279
+ within: z.ZodString;
280
+ }, z.core.$strip>>;
281
+ domains: z.ZodOptional<z.ZodObject<{
282
+ roles: z.ZodArray<z.ZodEnum<{
283
+ "read-path": "read-path";
284
+ "write-path": "write-path";
285
+ "delete-path": "delete-path";
286
+ "write-history": "write-history";
287
+ "delete-history": "delete-history";
288
+ "fetch-url": "fetch-url";
289
+ "git-remote-url": "git-remote-url";
290
+ "github-owner": "github-owner";
291
+ "github-repo": "github-repo";
292
+ "branch-name": "branch-name";
293
+ "commit-message": "commit-message";
294
+ "email-address": "email-address";
295
+ "email-body": "email-body";
296
+ "share-permission": "share-permission";
297
+ none: "none";
298
+ }>>;
299
+ allowed: z.ZodArray<z.ZodString>;
300
+ }, z.core.$strip>>;
301
+ lists: z.ZodOptional<z.ZodArray<z.ZodObject<{
302
+ roles: z.ZodArray<z.ZodEnum<{
303
+ "read-path": "read-path";
304
+ "write-path": "write-path";
305
+ "delete-path": "delete-path";
306
+ "write-history": "write-history";
307
+ "delete-history": "delete-history";
308
+ "fetch-url": "fetch-url";
309
+ "git-remote-url": "git-remote-url";
310
+ "github-owner": "github-owner";
311
+ "github-repo": "github-repo";
312
+ "branch-name": "branch-name";
313
+ "commit-message": "commit-message";
314
+ "email-address": "email-address";
315
+ "email-body": "email-body";
316
+ "share-permission": "share-permission";
317
+ none: "none";
318
+ }>>;
319
+ allowed: z.ZodArray<z.ZodString>;
320
+ matchType: z.ZodEnum<{
321
+ domains: "domains";
322
+ emails: "emails";
323
+ identifiers: "identifiers";
324
+ }>;
325
+ }, z.core.$strip>>>;
326
+ }, z.core.$strip>;
327
+ then: z.ZodEnum<{
328
+ allow: "allow";
329
+ escalate: "escalate";
330
+ }>;
331
+ reason: z.ZodString;
332
+ }, z.core.$strip>;
333
+ }, z.core.$strip>, z.ZodObject<{
334
+ op: z.ZodLiteral<"delete">;
335
+ ruleName: z.ZodEnum<{
336
+ [x: string]: string;
337
+ }>;
338
+ }, z.core.$strip>], "op">>;
339
+ listDefinitions: z.ZodOptional<z.ZodArray<z.ZodObject<{
340
+ name: z.ZodString;
341
+ type: z.ZodEnum<{
342
+ domains: "domains";
343
+ emails: "emails";
344
+ identifiers: "identifiers";
345
+ }>;
346
+ principle: z.ZodString;
347
+ generationPrompt: z.ZodString;
348
+ requiresMcp: z.ZodBoolean;
349
+ mcpServerHint: z.ZodOptional<z.ZodString>;
350
+ }, z.core.$strip>>>;
351
+ }, z.core.$strip>;
352
+ /**
353
+ * Builds the user prompt for point-fix repair. Shows the existing rules in
354
+ * a compact numbered format, failed scenarios, and judge analysis. Instructs
355
+ * the LLM to emit a minimal patch rather than a full rule set.
356
+ */
357
+ export declare function buildPointFixRepairInstructions(existingRules: CompiledRule[], repairContext: RepairContext): string;
358
+ /**
359
+ * Mechanically applies patch operations to an existing rule list.
360
+ * Operations are applied sequentially in order. Returns the new rule list
361
+ * or an error if an operation references a nonexistent rule.
362
+ */
363
+ export declare function applyRulePatch(existingRules: CompiledRule[], operations: RulePatchOp[]): {
364
+ ok: true;
365
+ rules: CompiledRule[];
366
+ } | {
367
+ ok: false;
368
+ error: string;
369
+ };
370
+ /**
371
+ * Merges existing list definitions with new ones from a patch.
372
+ * Existing lists are always preserved; new lists (by name) are appended.
373
+ * Duplicates (same name as an existing list) are silently ignored.
374
+ */
375
+ export declare function mergeListDefinitions(existing: ListDefinition[], patchLists: ListDefinition[] | undefined): ListDefinition[];
77
376
  export interface RuleValidationResult {
78
377
  valid: boolean;
79
378
  errors: string[];