@intutic/cli 2.9.1 → 3.0.1

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 (57) hide show
  1. package/dist/cli.js +103 -1
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/connect.d.ts.map +1 -1
  4. package/dist/commands/connect.js +15 -2
  5. package/dist/commands/connect.js.map +1 -1
  6. package/dist/commands/decide.d.ts +220 -0
  7. package/dist/commands/decide.d.ts.map +1 -0
  8. package/dist/commands/decide.js +1297 -0
  9. package/dist/commands/decide.js.map +1 -0
  10. package/dist/commands/doctor.d.ts +10 -0
  11. package/dist/commands/doctor.d.ts.map +1 -1
  12. package/dist/commands/doctor.js +56 -2
  13. package/dist/commands/doctor.js.map +1 -1
  14. package/dist/commands/gates.d.ts +5 -0
  15. package/dist/commands/gates.d.ts.map +1 -1
  16. package/dist/commands/gates.js +42 -1
  17. package/dist/commands/gates.js.map +1 -1
  18. package/dist/commands/judge.d.ts +21 -1
  19. package/dist/commands/judge.d.ts.map +1 -1
  20. package/dist/commands/judge.js +71 -5
  21. package/dist/commands/judge.js.map +1 -1
  22. package/dist/commands/rollback.d.ts.map +1 -1
  23. package/dist/commands/rollback.js +11 -0
  24. package/dist/commands/rollback.js.map +1 -1
  25. package/dist/commands/skill.d.ts +17 -0
  26. package/dist/commands/skill.d.ts.map +1 -1
  27. package/dist/commands/skill.js +172 -7
  28. package/dist/commands/skill.js.map +1 -1
  29. package/dist/commands/start.d.ts +6 -0
  30. package/dist/commands/start.d.ts.map +1 -1
  31. package/dist/commands/start.js +31 -1
  32. package/dist/commands/start.js.map +1 -1
  33. package/dist/lib/decideBudget.d.ts +40 -0
  34. package/dist/lib/decideBudget.d.ts.map +1 -0
  35. package/dist/lib/decideBudget.js +46 -0
  36. package/dist/lib/decideBudget.js.map +1 -0
  37. package/dist/lib/decideEval.d.ts +126 -0
  38. package/dist/lib/decideEval.d.ts.map +1 -0
  39. package/dist/lib/decideEval.js +412 -0
  40. package/dist/lib/decideEval.js.map +1 -0
  41. package/dist/lib/decideLocal.d.ts +84 -0
  42. package/dist/lib/decideLocal.d.ts.map +1 -0
  43. package/dist/lib/decideLocal.js +178 -0
  44. package/dist/lib/decideLocal.js.map +1 -0
  45. package/dist/lib/decideRules.d.ts +43 -0
  46. package/dist/lib/decideRules.d.ts.map +1 -0
  47. package/dist/lib/decideRules.js +104 -0
  48. package/dist/lib/decideRules.js.map +1 -0
  49. package/dist/lib/localGates.d.ts +7 -7
  50. package/dist/lib/localGates.d.ts.map +1 -1
  51. package/dist/lib/localGates.js +94 -11
  52. package/dist/lib/localGates.js.map +1 -1
  53. package/dist/lib/policySnapshot.d.ts +27 -0
  54. package/dist/lib/policySnapshot.d.ts.map +1 -1
  55. package/dist/lib/policySnapshot.js +64 -2
  56. package/dist/lib/policySnapshot.js.map +1 -1
  57. package/package.json +5 -5
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Where `intutic decide` keeps its machine state, under `~/.intutic/decide/`:
3
+ *
4
+ * - `engine.json` (0600): the engine's url, adapter, model, timeoutMs,
5
+ * parallel and structured, and the per-call p95 `doctor` measured
6
+ * (`q95Ms`). Never the key: `INTUTIC_DECIDE_API_KEY` is read from the
7
+ * environment only, and never written or logged.
8
+ * - `evals/<ruleHash>/<digest>.json`: a pin a passing `decide eval` earned,
9
+ * which the snapshot writer reads; `evals/<ruleHash>/runs/<id>.json`, each
10
+ * run's report; `evals/<ruleHash>/candidates/<digest>.json`, what
11
+ * `decide calibrate` fitted.
12
+ * - `canary.json`, the canary cache; `stats/<ruleHash>.json`, the drift
13
+ * stats; `disabled`, the `decide disable` marker.
14
+ *
15
+ * The decide log is `~/.intutic/logs/decide-YYYY-MM-DD.jsonl`.
16
+ *
17
+ * Every path is computed at call time from the home directory, so a test's
18
+ * HOME applies. Nothing here imports the sync daemon: `decide check` runs
19
+ * on every gated call and its start-up time is the gate's budget.
20
+ *
21
+ * @module
22
+ */
23
+ import * as node_fs from 'node:fs';
24
+ import { createHash } from 'node:crypto';
25
+ import { homedir } from 'node:os';
26
+ import { join } from 'node:path';
27
+ import { createDecideEngine, DecideEngineError, decideStoredQ95Ms, resolveDecideEngineConfig, } from '@intutic/shared-types';
28
+ export const sha256Hex = (text) => createHash('sha256').update(text, 'utf8').digest('hex');
29
+ export function decideDir() {
30
+ return join(homedir(), '.intutic', 'decide');
31
+ }
32
+ export function engineFile() {
33
+ return join(decideDir(), 'engine.json');
34
+ }
35
+ export function evalsDir(ruleHash) {
36
+ return join(decideDir(), 'evals', ruleHash);
37
+ }
38
+ export function runsDir(ruleHash) {
39
+ return join(evalsDir(ruleHash), 'runs');
40
+ }
41
+ export function candidatesDir(ruleHash) {
42
+ return join(evalsDir(ruleHash), 'candidates');
43
+ }
44
+ export function statsDir() {
45
+ return join(decideDir(), 'stats');
46
+ }
47
+ export function canaryFile() {
48
+ return join(decideDir(), 'canary.json');
49
+ }
50
+ export function disabledFile() {
51
+ return join(decideDir(), 'disabled');
52
+ }
53
+ export function logsDir() {
54
+ return join(homedir(), '.intutic', 'logs');
55
+ }
56
+ /** A model digest as a file name: anything but `[A-Za-z0-9._-]` becomes `-`. */
57
+ export function digestFileName(modelDigest) {
58
+ return `${modelDigest.replace(/[^A-Za-z0-9._-]/g, '-')}.json`;
59
+ }
60
+ /** The fields `engine.json` may hold. The key is never one of them. */
61
+ export const ENGINE_FILE_FIELDS = ['url', 'adapter', 'model', 'timeoutMs', 'parallel', 'structured', 'ollama', 'q95Ms', 'q95MeasuredAt'];
62
+ /** engine.json, parsed, or null when there is none. Throws when it does not parse. */
63
+ export function readEngineFile() {
64
+ let text;
65
+ try {
66
+ text = node_fs.readFileSync(engineFile(), 'utf8');
67
+ }
68
+ catch {
69
+ return null;
70
+ }
71
+ const v = JSON.parse(text);
72
+ if (typeof v !== 'object' || v === null || Array.isArray(v))
73
+ throw new Error(`${engineFile()} must hold a JSON object`);
74
+ return v;
75
+ }
76
+ /** Writes engine.json (0600 in a 0700 directory), keeping only the known fields: a key passed in by mistake is dropped. */
77
+ export function writeEngineFile(values) {
78
+ const kept = {};
79
+ for (const k of ENGINE_FILE_FIELDS)
80
+ if (values[k] !== undefined)
81
+ kept[k] = values[k];
82
+ writeJson(engineFile(), kept);
83
+ }
84
+ /** Writes JSON whole by a rename, mode 0600, its directory 0700. */
85
+ export function writeJson(file, value) {
86
+ const dir = file.replace(/[\\/][^\\/]*$/, '');
87
+ node_fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
88
+ const tmp = `${file}.${process.pid}.${Date.now()}.tmp`;
89
+ node_fs.writeFileSync(tmp, JSON.stringify(value, null, 2) + '\n', { mode: 0o600 });
90
+ node_fs.renameSync(tmp, file);
91
+ }
92
+ export function readJson(file) {
93
+ try {
94
+ return JSON.parse(node_fs.readFileSync(file, 'utf8'));
95
+ }
96
+ catch {
97
+ return null;
98
+ }
99
+ }
100
+ /** The environment variables the engine configuration reads, and only those. */
101
+ export function decideEnv() {
102
+ return {
103
+ INTUTIC_DECIDE_ENGINE_URL: process.env.INTUTIC_DECIDE_ENGINE_URL,
104
+ INTUTIC_DECIDE_ADAPTER: process.env.INTUTIC_DECIDE_ADAPTER,
105
+ INTUTIC_DECIDE_MODEL: process.env.INTUTIC_DECIDE_MODEL,
106
+ INTUTIC_DECIDE_TIMEOUT_MS: process.env.INTUTIC_DECIDE_TIMEOUT_MS,
107
+ INTUTIC_DECIDE_PARALLEL: process.env.INTUTIC_DECIDE_PARALLEL,
108
+ INTUTIC_DECIDE_API_KEY: process.env.INTUTIC_DECIDE_API_KEY,
109
+ INTUTIC_DECIDE_MODEL_DIGEST: process.env.INTUTIC_DECIDE_MODEL_DIGEST,
110
+ INTUTIC_SELF_HOSTED_DECISION_HOSTS: process.env.INTUTIC_SELF_HOSTED_DECISION_HOSTS,
111
+ INTUTIC_DECIDE_MAX_RESPONSE_STATE_BYTES: process.env.INTUTIC_DECIDE_MAX_RESPONSE_STATE_BYTES,
112
+ };
113
+ }
114
+ /** The engine engine.json and the environment describe. Never throws. */
115
+ export function loadEngine(env = decideEnv()) {
116
+ let file;
117
+ try {
118
+ file = readEngineFile();
119
+ }
120
+ catch (err) {
121
+ return { cfg: null, engine: new DecideEngineError('not_configured', err instanceof Error ? err.message : String(err)), q95Ms: null };
122
+ }
123
+ // Read as every gate's decide tier reads it.
124
+ const q95 = decideStoredQ95Ms(file);
125
+ let cfg;
126
+ try {
127
+ cfg = resolveDecideEngineConfig(file, env);
128
+ }
129
+ catch (err) {
130
+ return { cfg: null, engine: err instanceof DecideEngineError ? err : new DecideEngineError('not_configured', String(err)), q95Ms: q95 };
131
+ }
132
+ try {
133
+ return { cfg, engine: createDecideEngine(cfg), q95Ms: q95 };
134
+ }
135
+ catch (err) {
136
+ return { cfg, engine: err instanceof DecideEngineError ? err : new DecideEngineError('not_configured', String(err)), q95Ms: q95 };
137
+ }
138
+ }
139
+ /** `host:port` of an engine URL, for logs; never its path, query or credentials. */
140
+ export function engineHost(url) {
141
+ try {
142
+ const u = new URL(url);
143
+ return u.port ? `${u.hostname}:${u.port}` : u.hostname;
144
+ }
145
+ catch {
146
+ return '';
147
+ }
148
+ }
149
+ /**
150
+ * What 3.0 does not do with a readable rule as written, one sentence each,
151
+ * for `decide lint`, `gates install` and `doctor`:
152
+ *
153
+ * - `context: ["last_user_turn"]`: reserved. No gate supplies the user's last
154
+ * turn, so the rule is asked without one, and `decide test` and
155
+ * `decide eval` ask it the same way so the eval measures what a gate asks.
156
+ *
157
+ * An `on: response` rule is carried out: the gateway judges each complete
158
+ * response by it.
159
+ */
160
+ export function decideRuleNotes(rule) {
161
+ const out = [];
162
+ if ((rule.context ?? []).includes('last_user_turn')) {
163
+ out.push(`decide rule ${rule.id} declares context: ["last_user_turn"], which is reserved and not supplied in 3.0: ` +
164
+ 'no gate passes the user\'s last turn, so the rule is asked without it (in `decide test` and `decide eval` too)');
165
+ }
166
+ return out;
167
+ }
168
+ /** The drift baseline of a stored eval run, or null. */
169
+ export function readEvalRunBaseline(ruleHash, evalRunId) {
170
+ if (!/^[A-Za-z0-9._-]+$/.test(evalRunId))
171
+ return null;
172
+ const run = readJson(join(runsDir(ruleHash), `${evalRunId}.json`));
173
+ const b = run?.baseline;
174
+ if (!b || typeof b.escalationRate !== 'number' || typeof b.questions !== 'object' || b.questions === null)
175
+ return null;
176
+ return b;
177
+ }
178
+ //# sourceMappingURL=decideLocal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decideLocal.js","sourceRoot":"","sources":["../../src/lib/decideLocal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * The local SOPs' `decide:` rules as `intutic decide` sees them: each line
3
+ * with its file and line number, parsed as the snapshot writer parses it
4
+ * (`localDecideRules`), and the snapshot rewritten after a pin or the
5
+ * disable marker changes.
6
+ *
7
+ * @module
8
+ */
9
+ import { type DecideDecl } from '@intutic/shared-types';
10
+ export interface LocalDecideLine {
11
+ sopId: string;
12
+ /** `.intutic/sops/<file>` or `.intutic/sops/<folder>/<file>`. */
13
+ file: string;
14
+ /** 1-based line number in the file. */
15
+ line: number;
16
+ sopTitle: string;
17
+ ruleText: string;
18
+ decl: DecideDecl;
19
+ /** `<sopId>#<id>` for a readable rule. */
20
+ ref: string | null;
21
+ ruleHash: string | null;
22
+ }
23
+ /** The workspace the decide commands read: the recorded one, else the current directory. */
24
+ export declare function decideWorkspaceRoot(override?: string): string;
25
+ /** Every local SOP's `decide:` lines, in snapshot order, each parsed with its SOP's other lines. */
26
+ export declare function loadLocalDecideLines(root: string): Promise<LocalDecideLine[]>;
27
+ /**
28
+ * The rule `spec` names: its ref (`local:data.md#prod-data-export`), its id
29
+ * when only one local rule has it, or `<file>#<id>` / `<file>` for a SOP
30
+ * file with one rule. Throws a message for the user otherwise.
31
+ */
32
+ export declare function findDecideRule(lines: readonly LocalDecideLine[], spec: string): LocalDecideLine & {
33
+ decl: Extract<DecideDecl, {
34
+ kind: 'rule';
35
+ }>;
36
+ };
37
+ /**
38
+ * Writes the policy snapshot again so a changed pin or the disable marker
39
+ * applies now: the local snapshot (`intutic gates install`'s) is rewritten
40
+ * here; a connected machine's sync daemon rewrites its own on its next poll.
41
+ */
42
+ export declare function rewriteDecideSnapshot(): Promise<'local' | 'connected' | 'none'>;
43
+ //# sourceMappingURL=decideRules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decideRules.d.ts","sourceRoot":"","sources":["../../src/lib/decideRules.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAKL,KAAK,UAAU,EAEhB,MAAM,uBAAuB,CAAA;AAO9B,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAA;IACZ,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,UAAU,CAAA;IAChB,0CAA0C;IAC1C,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB;AAED,4FAA4F;AAC5F,wBAAgB,mBAAmB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAG7D;AAMD,oGAAoG;AACpG,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CA4BnF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,eAAe,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAgBjJ;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,OAAO,GAAG,WAAW,GAAG,MAAM,CAAC,CAcrF"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * The local SOPs' `decide:` rules as `intutic decide` sees them: each line
3
+ * with its file and line number, parsed as the snapshot writer parses it
4
+ * (`localDecideRules`), and the snapshot rewritten after a pin or the
5
+ * disable marker changes.
6
+ *
7
+ * @module
8
+ */
9
+ import * as node_path from 'node:path';
10
+ import { decideRuleHash, decideRuleRef, parseDecideLines, splitFrontMatter, } from '@intutic/shared-types';
11
+ import { homedir } from 'node:os';
12
+ import { loadLocalSopEntries, localDecideRules, localHoldTokensFor, writeLocalPolicySnapshot } from '@intutic/sync-daemon';
13
+ import { loadConfig, loadCredentials } from '../config/store.js';
14
+ import { decideDir, sha256Hex } from './decideLocal.js';
15
+ import { gatesSource } from './localGates.js';
16
+ /** The workspace the decide commands read: the recorded one, else the current directory. */
17
+ export function decideWorkspaceRoot(override) {
18
+ if (override)
19
+ return node_path.resolve(override);
20
+ return loadConfig()?.workspaceRoot ?? process.cwd();
21
+ }
22
+ function sopFile(sopId) {
23
+ return `.intutic/sops/${sopId.replace(/^local:/, '').replace(':', '/')}`;
24
+ }
25
+ /** Every local SOP's `decide:` lines, in snapshot order, each parsed with its SOP's other lines. */
26
+ export async function loadLocalDecideLines(root) {
27
+ const entries = await loadLocalSopEntries(root, [], { ignoreSelection: true });
28
+ const served = await localDecideRules(entries, { decideDir: decideDir() });
29
+ const out = [];
30
+ for (const entry of entries) {
31
+ const { front } = splitFrontMatter(entry.content);
32
+ const numbered = front
33
+ .split('\n')
34
+ .map((l, k) => ({ text: l.trim(), line: k + 1 }))
35
+ .filter((l) => l.text.startsWith('decide:'));
36
+ if (numbered.length === 0)
37
+ continue;
38
+ const mine = served.filter((s) => s.sopId === entry.sopId);
39
+ const decls = parseDecideLines(numbered.map((l) => l.text.slice('decide:'.length)));
40
+ decls.forEach((decl, i) => {
41
+ const s = mine[i];
42
+ out.push({
43
+ sopId: entry.sopId,
44
+ file: sopFile(entry.sopId),
45
+ line: numbered[i].line,
46
+ sopTitle: s?.sopTitle ?? entry.title,
47
+ ruleText: s?.ruleText ?? '',
48
+ decl,
49
+ ref: decl.kind === 'rule' ? decideRuleRef(entry.sopId, decl.rule.id) : null,
50
+ ruleHash: decl.kind === 'rule' ? decideRuleHash(decl.rule, sha256Hex) : null,
51
+ });
52
+ });
53
+ }
54
+ return out;
55
+ }
56
+ /**
57
+ * The rule `spec` names: its ref (`local:data.md#prod-data-export`), its id
58
+ * when only one local rule has it, or `<file>#<id>` / `<file>` for a SOP
59
+ * file with one rule. Throws a message for the user otherwise.
60
+ */
61
+ export function findDecideRule(lines, spec) {
62
+ const readable = lines.filter((l) => l.decl.kind === 'rule');
63
+ let hits = readable.filter((l) => l.ref === spec);
64
+ if (hits.length === 0)
65
+ hits = readable.filter((l) => l.decl.rule.id === spec);
66
+ if (hits.length === 0) {
67
+ const [file, id] = spec.split('#');
68
+ const base = node_path.basename(file);
69
+ hits = readable.filter((l) => (l.file === file || l.file.endsWith(`/${file}`) || node_path.basename(l.file) === base) && (id === undefined || l.decl.rule.id === id));
70
+ }
71
+ if (hits.length === 1)
72
+ return hits[0];
73
+ if (hits.length === 0) {
74
+ const broken = lines.find((l) => l.decl.kind === 'unreadable' && (l.decl.id === spec || spec.endsWith(`#${l.decl.id}`)));
75
+ if (broken && broken.decl.kind === 'unreadable')
76
+ throw new Error(`${broken.file}:${broken.line}: ${broken.decl.error}`);
77
+ throw new Error(`No local decide rule named ${spec}. \`intutic decide lint\` lists them.`);
78
+ }
79
+ throw new Error(`${spec} names ${hits.length} rules: use one of ${hits.map((h) => h.ref).join(', ')}`);
80
+ }
81
+ /**
82
+ * Writes the policy snapshot again so a changed pin or the disable marker
83
+ * applies now: the local snapshot (`intutic gates install`'s) is rewritten
84
+ * here; a connected machine's sync daemon rewrites its own on its next poll.
85
+ */
86
+ export async function rewriteDecideSnapshot() {
87
+ if ((await loadCredentials()) !== null)
88
+ return 'connected';
89
+ if ((await gatesSource()) !== 'local')
90
+ return 'none';
91
+ const config = loadConfig();
92
+ if (!config)
93
+ return 'none';
94
+ const disconnected = new Set(config.disconnectedHarnesses ?? []);
95
+ const harnesses = config.harnesses.filter((h) => !disconnected.has(h));
96
+ const root = config.workspaceRoot;
97
+ const holdTokens = await localHoldTokensFor(root, [], undefined, harnesses);
98
+ const localSops = await loadLocalSopEntries(root, harnesses, { ignoreSelection: true });
99
+ const decideRules = await localDecideRules(localSops, { decideDir: decideDir() });
100
+ // The rule records and lane holds the snapshot carries beside the decide rules.
101
+ await writeLocalPolicySnapshot({ localHoldTokens: holdTokens, snapshotDir: node_path.join(homedir(), '.intutic', 'hooks'), decideRules, localSops });
102
+ return 'local';
103
+ }
104
+ //# sourceMappingURL=decideRules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decideRules.js","sourceRoot":"","sources":["../../src/lib/decideRules.ts"],"names":[],"mappings":"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"}
@@ -3,13 +3,13 @@
3
3
  * `intutic gates install` writes, and `intutic start` refreshes.
4
4
  *
5
5
  * The same writers `intutic connect` runs, fed from this machine only: the
6
- * local `.intutic/sops` for the rules files and the `review_before:` tokens,
7
- * and a policy snapshot compiled from no workspace policy
8
- * (`writeLocalPolicySnapshot`), which still carries the destructive-command
9
- * and skill tiers. Nothing here fetches, drains or reports; no MCP server is
10
- * wrapped and no file is made immutable. The harnesses' LLM traffic is
11
- * pointed at the local proxy only with `routing`, since a harness routed at a
12
- * proxy that is not running stops working.
6
+ * local `.intutic/sops` for the rules files, the `review_before:` tokens and
7
+ * the `decide:` rules, and a policy snapshot compiled from no workspace
8
+ * policy (`writeLocalPolicySnapshot`), which still carries the
9
+ * destructive-command and skill tiers. Nothing here fetches, drains or
10
+ * reports; no MCP server is wrapped and no file is made immutable. The
11
+ * harnesses' LLM traffic is pointed at the local proxy only with `routing`,
12
+ * since a harness routed at a proxy that is not running stops working.
13
13
  *
14
14
  * @module
15
15
  */
@@ -1 +1 @@
1
- {"version":3,"file":"localGates.d.ts","sourceRoot":"","sources":["../../src/lib/localGates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAmBrD,gGAAgG;AAChG,eAAO,MAAM,wBAAwB,QAAmB,CAAA;AAExD,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAA;IACrB,0EAA0E;IAC1E,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;IAC5B,gEAAgE;IAChE,OAAO,EAAE,OAAO,CAAA;IAChB,yCAAyC;IACzC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,yBAAyB;IACzB,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAC9B;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,QAAQ,CAAA;IACd,yEAAyE;IACzE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,6DAA6D;IAC7D,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,KAAK,EAAE,SAAS,EAAE,CAAA;IAClB,wEAAwE;IACxE,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;IAC/C,0DAA0D;IAC1D,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAA;CACjB;AAMD;;;GAGG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC,CAYzE;AAED,qEAAqE;AACrE,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CAE5D;AAyBD;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA+D1F"}
1
+ {"version":3,"file":"localGates.d.ts","sourceRoot":"","sources":["../../src/lib/localGates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,uBAAuB,CAAA;AAqBnE,gGAAgG;AAChG,eAAO,MAAM,wBAAwB,QAAmB,CAAA;AAExD,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAA;IACrB,0EAA0E;IAC1E,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;IAC5B,gEAAgE;IAChE,OAAO,EAAE,OAAO,CAAA;IAChB,yCAAyC;IACzC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,yBAAyB;IACzB,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAC9B;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,QAAQ,CAAA;IACd,yEAAyE;IACzE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,6DAA6D;IAC7D,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,KAAK,EAAE,SAAS,EAAE,CAAA;IAClB,wEAAwE;IACxE,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;IAC/C,0DAA0D;IAC1D,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAA;CACjB;AAMD;;;GAGG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC,CAYzE;AAED,qEAAqE;AACrE,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CAE5D;AAqFD;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgF1F"}
@@ -3,25 +3,26 @@
3
3
  * `intutic gates install` writes, and `intutic start` refreshes.
4
4
  *
5
5
  * The same writers `intutic connect` runs, fed from this machine only: the
6
- * local `.intutic/sops` for the rules files and the `review_before:` tokens,
7
- * and a policy snapshot compiled from no workspace policy
8
- * (`writeLocalPolicySnapshot`), which still carries the destructive-command
9
- * and skill tiers. Nothing here fetches, drains or reports; no MCP server is
10
- * wrapped and no file is made immutable. The harnesses' LLM traffic is
11
- * pointed at the local proxy only with `routing`, since a harness routed at a
12
- * proxy that is not running stops working.
6
+ * local `.intutic/sops` for the rules files, the `review_before:` tokens and
7
+ * the `decide:` rules, and a policy snapshot compiled from no workspace
8
+ * policy (`writeLocalPolicySnapshot`), which still carries the
9
+ * destructive-command and skill tiers. Nothing here fetches, drains or
10
+ * reports; no MCP server is wrapped and no file is made immutable. The
11
+ * harnesses' LLM traffic is pointed at the local proxy only with `routing`,
12
+ * since a harness routed at a proxy that is not running stops working.
13
13
  *
14
14
  * @module
15
15
  */
16
16
  import * as node_fs from 'node:fs/promises';
17
17
  import * as node_path from 'node:path';
18
18
  import { homedir } from 'node:os';
19
- import { gateKindForHarness, HarnessType } from '@intutic/shared-types';
20
- import { buildSnapshotRules, findGateFile, loadLocalSopEntries, localHoldTokensFor, localResolvedPolicy, noteProxyUrl, SNAPSHOT_JSON, SNAPSHOT_RULES, updatePreToolUseHooks, writeLocalPolicySnapshot, writeRuntimeEnv, } from '@intutic/sync-daemon';
19
+ import { DECIDE_MAX_RULES_PER_CALL, gateKindForHarness, HarnessType, parseDecideLines, parseFrontMatterEnforcing, splitFrontMatter } from '@intutic/shared-types';
20
+ import { buildSnapshotRules, findGateFile, loadLocalSopEntries, localDecideRules, localHoldTokensFor, localResolvedPolicy, noteProxyUrl, SNAPSHOT_JSON, SNAPSHOT_RULES, updatePreToolUseHooks, writeLocalPolicySnapshot, writeRuntimeEnv, } from '@intutic/sync-daemon';
21
21
  import { getAdapter } from '../harness/detector.js';
22
22
  import { writeHarnessConfigs } from '../harness/writeHarnessConfigs.js';
23
23
  import { loadCredentials } from '../config/store.js';
24
24
  import { localProxyPort } from './localProxy.js';
25
+ import { decideRuleNotes } from './decideLocal.js';
25
26
  /** The hook events log is rotated past this size; nothing drains it without a control plane. */
26
27
  export const HOOK_EVENTS_ROTATE_BYTES = 10 * 1024 * 1024;
27
28
  function snapshotDir() {
@@ -75,6 +76,70 @@ async function rotateHookEvents(workspaceRoot, dryRun) {
75
76
  await node_fs.rename(log, `${log}.1`);
76
77
  return `${log}.1`;
77
78
  }
79
+ /**
80
+ * One warning per `decide:` line that does not read, naming its SOP file and
81
+ * line number. The snapshot refuses the tools such a line names until it is
82
+ * fixed. A bare or non-JSON line gets the one-rule-per-line hint.
83
+ */
84
+ function unreadableDecideLines(entries) {
85
+ const out = [];
86
+ for (const entry of entries) {
87
+ const numbered = splitFrontMatter(entry.content)
88
+ .front.split('\n')
89
+ .map((l, k) => ({ text: l.trim(), line: k + 1 }))
90
+ .filter((l) => l.text.startsWith('decide:'));
91
+ if (numbered.length === 0)
92
+ continue;
93
+ const file = `.intutic/sops/${entry.sopId.replace(/^local:/, '').replace(':', '/')}`;
94
+ parseDecideLines(numbered.map((l) => l.text.slice('decide:'.length))).forEach((d, i) => {
95
+ if (d.kind === 'unreadable')
96
+ out.push(`${file}:${numbered[i].line}: decide line ${i + 1} does not read, so its tools are refused: ${d.error}`);
97
+ });
98
+ }
99
+ return out;
100
+ }
101
+ /**
102
+ * One warning per readable `decide:` rule 3.0 does not carry out as written
103
+ * (`decideRuleNotes`: a reserved `context`), naming its SOP file and line
104
+ * number.
105
+ */
106
+ function notedDecideRules(entries) {
107
+ const out = [];
108
+ for (const entry of entries) {
109
+ const numbered = splitFrontMatter(entry.content)
110
+ .front.split('\n')
111
+ .map((l, k) => ({ text: l.trim(), line: k + 1 }))
112
+ .filter((l) => l.text.startsWith('decide:'));
113
+ if (numbered.length === 0)
114
+ continue;
115
+ const file = `.intutic/sops/${entry.sopId.replace(/^local:/, '').replace(':', '/')}`;
116
+ parseDecideLines(numbered.map((l) => l.text.slice('decide:'.length))).forEach((d, i) => {
117
+ if (d.kind === 'rule')
118
+ for (const note of decideRuleNotes(d.rule))
119
+ out.push(`${file}:${numbered[i].line}: ${note}`);
120
+ });
121
+ }
122
+ return out;
123
+ }
124
+ /** Tools more than {@link DECIDE_MAX_RULES_PER_CALL} local decide rules name: a call evaluates only that many. */
125
+ function crowdedDecideTools(entries) {
126
+ const byTool = new Map();
127
+ for (const entry of entries) {
128
+ const values = splitFrontMatter(entry.content)
129
+ .front.split('\n')
130
+ .map((l) => l.trim())
131
+ .filter((l) => l.startsWith('decide:'))
132
+ .map((l) => l.slice('decide:'.length));
133
+ for (const d of parseDecideLines(values)) {
134
+ if (d.kind === 'rule' && d.rule.on === 'tool_call')
135
+ for (const t of new Set(d.rule.tools ?? []))
136
+ byTool.set(t, (byTool.get(t) ?? 0) + 1);
137
+ }
138
+ }
139
+ return [...byTool]
140
+ .filter(([, n]) => n > DECIDE_MAX_RULES_PER_CALL)
141
+ .map(([tool, n]) => `${n} decide rules name ${tool}; a call evaluates at most ${DECIDE_MAX_RULES_PER_CALL}, and an enforcing rule past that refuses the call`);
142
+ }
78
143
  /**
79
144
  * Writes (or with `dryRun`, reports) the local gates. See the module note for
80
145
  * what it does not do.
@@ -93,12 +158,30 @@ export async function installLocalGates(opts) {
93
158
  onError: (err) => warn(`Could not read every local SOP in .intutic/sops; the rules files are written without the ones that failed: ${err instanceof Error ? err.message : String(err)}`),
94
159
  });
95
160
  const holdTokens = await localHoldTokensFor(root, [], undefined, harnesses);
161
+ // Every local SOP's decide: rules, whatever the session selected, as for
162
+ // the holds: the selection narrows the rules files, never what is enforced.
163
+ const allSops = await loadLocalSopEntries(root, harnesses, { ignoreSelection: true });
164
+ const decideRules = await localDecideRules(allSops, { decideDir: node_path.join(homedir(), '.intutic', 'decide') });
165
+ for (const line of [...unreadableDecideLines(allSops), ...notedDecideRules(allSops), ...crowdedDecideTools(allSops)])
166
+ warn(line);
167
+ // Every local SOP's rule records and lane holds: qualified
168
+ // requires_before, scope_paths_mode: enforce, plan_approval:, closed_lanes:.
169
+ // With no control plane, plan_approval: refuses every call that is not a
170
+ // read (no plan can be approved), and a lane hold refuses rather than holds.
171
+ for (const entry of allSops) {
172
+ // An enforcing plan_approval record compiles from a SOP with no roles:,
173
+ // not in mode: shadow (compileSopGateRecords, @intutic/shared-types).
174
+ const fm = parseFrontMatterEnforcing(splitFrontMatter(entry.content).front);
175
+ if (fm.planApproval !== null && fm.roles.length === 0 && fm.mode !== 'shadow') {
176
+ warn(`${entry.sopId} sets plan_approval:, and with no control plane no plan can be approved: every gated call that is not a read is refused (PLAN_NOT_APPROVED). Remove it, or connect a workspace.`);
177
+ }
178
+ }
96
179
  let snapshot;
97
180
  if (dryRun) {
98
- snapshot = { digest: '', ruleCount: buildSnapshotRules(localResolvedPolicy(), holdTokens, 'block').length };
181
+ snapshot = { digest: '', ruleCount: buildSnapshotRules({ ...localResolvedPolicy(), decideRules }, holdTokens, 'block', allSops).length };
99
182
  }
100
183
  else {
101
- snapshot = await writeLocalPolicySnapshot({ localHoldTokens: holdTokens, snapshotDir: snapshotDir() });
184
+ snapshot = await writeLocalPolicySnapshot({ localHoldTokens: holdTokens, snapshotDir: snapshotDir(), decideRules, localSops: allSops });
102
185
  }
103
186
  files.push(node_path.join(snapshotDir(), SNAPSHOT_RULES), node_path.join(snapshotDir(), SNAPSHOT_JSON));
104
187
  if (dryRun) {
@@ -1 +1 @@
1
- {"version":3,"file":"localGates.js","sourceRoot":"","sources":["../../src/lib/localGates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"localGates.js","sourceRoot":"","sources":["../../src/lib/localGates.ts"],"names":[],"mappings":"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"}
@@ -56,6 +56,25 @@ export interface PolicySnapshotHealth {
56
56
  ruleCount: number;
57
57
  /** Rules dropped because their regex would not compile. */
58
58
  droppedRules: number;
59
+ /** The format its `@format` record names; 1 without one. */
60
+ formatVersion: number;
61
+ /**
62
+ * Decide rules whose `@decide` records decode, as the gates read them. Each
63
+ * one's fallback line is left out of {@link ruleCount} only when the gates
64
+ * evaluate decide rules ({@link CAN_EVALUATE_DECIDE}). 0 on `invalid`.
65
+ */
66
+ decideRules: number;
67
+ /**
68
+ * Rule records (`@rule`) that decode, as the gates read them. The
69
+ * fallback line each enforcing one names is left out of {@link ruleCount}:
70
+ * every v23 hook gate evaluates the record instead. 0 on `invalid`.
71
+ */
72
+ gateRules: number;
73
+ /**
74
+ * Whether a `plan_approval:` record is in force: every call waits for an
75
+ * approved plan, which only a control plane can hold.
76
+ */
77
+ planApproval: boolean;
59
78
  /** Where the snapshot was looked for. */
60
79
  path: string;
61
80
  }
@@ -68,6 +87,14 @@ export interface PolicySnapshotHealth {
68
87
  * doctor inspect a directory nothing writes to and report every snapshot absent.
69
88
  */
70
89
  export declare function resolveSnapshotRulesPath(): string;
90
+ /**
91
+ * Whether the gates this reports on, and this CLI, evaluate the decide rules
92
+ * a snapshot carries. They do: every gate family evaluates them (the shell
93
+ * and n8n gates through `intutic decide check`), so a fallback line a decoded
94
+ * record names is skipped by the gates and not counted as a rule here. A
95
+ * fallback line no decoded record names still refuses, and is counted.
96
+ */
97
+ export declare const CAN_EVALUATE_DECIDE = true;
71
98
  /**
72
99
  * Classify snapshot text exactly as `intuticLoadSnapshot` does.
73
100
  *
@@ -1 +1 @@
1
- {"version":3,"file":"policySnapshot.d.ts","sourceRoot":"","sources":["../../src/lib/policySnapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAOH;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,IAAI,CAAA;AAE1C,yDAAyD;AACzD,eAAO,MAAM,mBAAmB,0BAA0B,CAAA;AAE1D,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAA;AAE3E,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,aAAa,CAAA;IACpB,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAA;IACd,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAA;IACnB,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAA;IACnB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAA;IACf,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAA;IACjB,2DAA2D;IAC3D,YAAY,EAAE,MAAM,CAAA;IACpB,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAIjD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE;IAAE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GACrE,oBAAoB,CAwFtB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,GAAE;IAAE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAA;CAAO,GACtD,oBAAoB,CAkBtB"}
1
+ {"version":3,"file":"policySnapshot.d.ts","sourceRoot":"","sources":["../../src/lib/policySnapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAkBH;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,IAAI,CAAA;AAE1C,yDAAyD;AACzD,eAAO,MAAM,mBAAmB,0BAA0B,CAAA;AAE1D,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAA;AAE3E,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,aAAa,CAAA;IACpB,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAA;IACd,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAA;IACnB,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAA;IACnB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAA;IACf,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAA;IACjB,2DAA2D;IAC3D,YAAY,EAAE,MAAM,CAAA;IACpB,4DAA4D;IAC5D,aAAa,EAAE,MAAM,CAAA;IACrB;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB;;;OAGG;IACH,YAAY,EAAE,OAAO,CAAA;IACrB,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAIjD;AAED;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,OAAO,CAAA;AAQvC;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE;IAAE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GACrE,oBAAoB,CAgItB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,GAAE;IAAE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAA;CAAO,GACtD,oBAAoB,CAsBtB"}