@sema-agent/core 7.17.7 → 7.19.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/CHANGELOG.md +233 -13
- package/dist/agents/send-message-tool.js +1 -0
- package/dist/agents/subagent.d.ts +1 -0
- package/dist/agents/subagent.js +5 -0
- package/dist/agents/teacher.js +1 -0
- package/dist/agents/verify.js +3 -0
- package/dist/brain/anthropic.js +6 -3
- package/dist/brain/open-responses.js +10 -4
- package/dist/brain/openai.js +5 -2
- package/dist/brain/reasoning.d.ts +13 -13
- package/dist/brain/reasoning.js +2 -2
- package/dist/brain/route-adjudicator.d.ts +18 -0
- package/dist/brain/route-adjudicator.js +16 -0
- package/dist/brain/stream-engine.js +2 -1
- package/dist/brain/stream-shared.d.ts +3 -0
- package/dist/brain/stream-shared.js +1 -0
- package/dist/core/agent-definition.d.ts +10 -0
- package/dist/core/artifact-host.d.ts +41 -4
- package/dist/core/artifact-host.js +18 -2
- package/dist/core/ask-origin.d.ts +16 -0
- package/dist/core/ask-origin.js +8 -0
- package/dist/core/auto-mode-arming.d.ts +6 -0
- package/dist/core/auto-mode-arming.js +5 -5
- package/dist/core/auto-mode-defaults.d.ts +43 -15
- package/dist/core/auto-mode-defaults.js +4 -1
- package/dist/core/auto-mode.d.ts +184 -59
- package/dist/core/auto-mode.js +188 -13
- package/dist/core/checkpoint-store.d.ts +23 -2
- package/dist/core/checkpoint-store.js +2 -2
- package/dist/core/engine-notice.d.ts +77 -1
- package/dist/core/engine-notice.js +7 -0
- package/dist/core/gate-fold.js +5 -1
- package/dist/core/gate-lanes.js +9 -8
- package/dist/core/gate-outcome.d.ts +42 -2
- package/dist/core/gate-outcome.js +23 -0
- package/dist/core/governance-codes.d.ts +1 -1
- package/dist/core/governance-codes.js +14 -0
- package/dist/core/hook-seats.d.ts +66 -0
- package/dist/core/hook-seats.js +37 -0
- package/dist/core/hooks.d.ts +1 -1
- package/dist/core/read-root-candidate.d.ts +12 -0
- package/dist/core/read-root-candidate.js +24 -0
- package/dist/core/roles.d.ts +9 -1
- package/dist/core/roles.js +4 -0
- package/dist/core/runner/advertised-writable-dirs.d.ts +8 -3
- package/dist/core/runner/assemble-result.d.ts +2 -1
- package/dist/core/runner/assemble-result.js +1 -1
- package/dist/core/runner/classifier-ladder.d.ts +227 -0
- package/dist/core/runner/classifier-ladder.js +214 -0
- package/dist/core/runner/contracts.d.ts +71 -13
- package/dist/core/runner/decide-continuation.d.ts +1 -3
- package/dist/core/runner/decide-continuation.js +1 -7
- package/dist/core/runner/deferral-census.d.ts +52 -0
- package/dist/core/runner/deferral-census.js +44 -0
- package/dist/core/runner/denial-limit-arms.js +2 -2
- package/dist/core/runner/derived-route-fallback.d.ts +8 -4
- package/dist/core/runner/derived-route-fallback.js +8 -3
- package/dist/core/runner/gate-exit.d.ts +12 -0
- package/dist/core/runner/gate-exit.js +6 -3
- package/dist/core/runner/prepare-artifact.d.ts +10 -2
- package/dist/core/runner/prepare-artifact.js +5 -4
- package/dist/core/runner/prepare-ask-lane.js +1 -0
- package/dist/core/runner/prepare-caps-and-workflow.d.ts +4 -2
- package/dist/core/runner/prepare-caps-and-workflow.js +43 -55
- package/dist/core/runner/prepare-config-doors.d.ts +7 -1
- package/dist/core/runner/prepare-config-doors.js +13 -13
- package/dist/core/runner/prepare-defer-classify.d.ts +13 -19
- package/dist/core/runner/prepare-defer-classify.js +8 -3
- package/dist/core/runner/prepare-gate-stations.d.ts +26 -0
- package/dist/core/runner/prepare-gate-stations.js +1 -1
- package/dist/core/runner/prepare-hands-readface.d.ts +24 -7
- package/dist/core/runner/prepare-hands-readface.js +60 -24
- package/dist/core/runner/prepare-inherited-gate.d.ts +17 -4
- package/dist/core/runner/prepare-inherited-gate.js +10 -2
- package/dist/core/runner/prepare-lsp.d.ts +2 -2
- package/dist/core/runner/prepare-lsp.js +1 -1
- package/dist/core/runner/prepare-policy-chain.js +2 -0
- package/dist/core/runner/prepare-project-context.d.ts +5 -1
- package/dist/core/runner/prepare-project-context.js +7 -4
- package/dist/core/runner/prepare-prompt-inputs.d.ts +4 -2
- package/dist/core/runner/prepare-prompt-inputs.js +4 -1
- package/dist/core/runner/prepare-run-refs.d.ts +9 -1
- package/dist/core/runner/prepare-run-refs.js +3 -2
- package/dist/core/runner/prepare-suspend-saga.d.ts +5 -0
- package/dist/core/runner/prepare-suspend-saga.js +5 -2
- package/dist/core/runner/prepare-task.js +19 -14
- package/dist/core/runner/prepare-tool-disclosure-mount.d.ts +5 -0
- package/dist/core/runner/prepare-tool-disclosure-mount.js +10 -2
- package/dist/core/runner/prepare-turn-wiring.d.ts +8 -4
- package/dist/core/runner/prepare-turn-wiring.js +3 -2
- package/dist/core/runner/prepare-wiring-manifest.d.ts +5 -5
- package/dist/core/runner/prepare-wiring-manifest.js +5 -2
- package/dist/core/runner/resume-apply.js +3 -3
- package/dist/core/runner/resume-checkpoint-screen.js +7 -0
- package/dist/core/runner/run-harness-handlers.js +4 -1
- package/dist/core/runner/run-identity-wiring.js +6 -2
- package/dist/core/runner/run-leg.d.ts +2 -0
- package/dist/core/runner/run-leg.js +45 -45
- package/dist/core/runner/run-notification-lane.js +55 -27
- package/dist/core/runner/run-settle-and-teardown.js +1 -0
- package/dist/core/runner/run-terminal-adoption.js +16 -13
- package/dist/core/runner/run-turn-boundary.js +15 -5
- package/dist/core/runner/runtask.d.ts +6 -5
- package/dist/core/runner/runtask.js +26 -14
- package/dist/core/runner/skill-base-dir.d.ts +54 -0
- package/dist/core/runner/skill-base-dir.js +42 -0
- package/dist/core/runner/synthetic-tools.d.ts +83 -48
- package/dist/core/runner/synthetic-tools.js +69 -32
- package/dist/core/runner/tool-defer-gate.d.ts +22 -9
- package/dist/core/runner/tool-defer-gate.js +15 -5
- package/dist/core/runner/tool-disclosure.d.ts +5 -0
- package/dist/core/runner/tool-disclosure.js +2 -0
- package/dist/core/runner/tool-progress-lane.d.ts +42 -0
- package/dist/core/runner/tool-progress-lane.js +61 -0
- package/dist/core/runner/turn-attachments.d.ts +43 -12
- package/dist/core/runner/turn-attachments.js +58 -14
- package/dist/core/runner-deps.d.ts +48 -7
- package/dist/core/sensitive-path-policy.d.ts +58 -17
- package/dist/core/sensitive-path-policy.js +33 -5
- package/dist/core/skill-listing-budget.d.ts +112 -0
- package/dist/core/skill-listing-budget.js +58 -0
- package/dist/core/swappable-deps.d.ts +9 -7
- package/dist/core/swappable-deps.js +7 -3
- package/dist/core/task-event.d.ts +96 -29
- package/dist/core/task-notification.d.ts +142 -16
- package/dist/core/task-notification.js +106 -0
- package/dist/core/task-result.d.ts +9 -1
- package/dist/core/task-spec.d.ts +46 -3
- package/dist/core/tighten-task-spec.js +7 -5
- package/dist/core/tool-model-gate.d.ts +1 -1
- package/dist/core/tool-policy.d.ts +19 -4
- package/dist/core/tool-policy.js +6 -7
- package/dist/core/tool-search-setting.d.ts +78 -0
- package/dist/core/tool-search-setting.js +90 -0
- package/dist/core/tool-spec.d.ts +45 -4
- package/dist/core/types.d.ts +2 -2
- package/dist/core/types.js +1 -1
- package/dist/core/wiring-manifest.d.ts +46 -0
- package/dist/core/wiring-manifest.js +9 -1
- package/dist/core/write-protect.d.ts +8 -3
- package/dist/core/write-protect.js +8 -5
- package/dist/engine/execution-env/node-execution-env.js +10 -4
- package/dist/engine/harness/agent-harness.d.ts +42 -0
- package/dist/engine/harness/agent-harness.js +61 -29
- package/dist/engine/loop/agent-loop.d.ts +68 -3
- package/dist/engine/loop/agent-loop.js +109 -16
- package/dist/index.d.ts +13 -8
- package/dist/index.js +11 -7
- package/dist/internal/harness.d.ts +1 -1
- package/dist/orchestration/run-workflow-tool.d.ts +3 -0
- package/dist/orchestration/run-workflow-tool.js +6 -1
- package/dist/orchestration/workflow-governance.d.ts +7 -1
- package/dist/orchestration/workflow-governance.js +9 -5
- package/dist/orchestration/workflow-primitives.d.ts +3 -0
- package/dist/orchestration/workflow-primitives.js +6 -1
- package/dist/orchestration/workflow-types.d.ts +48 -13
- package/dist/orchestration/workflow-types.js +1 -1
- package/dist/orchestration/workflow.js +45 -17
- package/dist/prompt-assembly/epoch.js +2 -0
- package/dist/prompt-assembly/packs/sema-default.js +2 -2
- package/dist/prompt-assembly/section-usage.d.ts +26 -0
- package/dist/prompt-assembly/section-usage.js +10 -0
- package/dist/prompt-assembly/types.d.ts +8 -6
- package/dist/prompts/default.d.ts +13 -0
- package/dist/prompts/default.js +16 -8
- package/dist/tools/artifact/artifact-text.d.ts +10 -1
- package/dist/tools/artifact/artifact-text.js +6 -3
- package/dist/tools/artifact/artifact-tool.d.ts +12 -2
- package/dist/tools/artifact/artifact-tool.js +203 -70
- package/dist/tools/artifact/conformance.d.ts +56 -0
- package/dist/tools/artifact/conformance.js +349 -0
- package/dist/tools/artifact/local-stub.js +1 -1
- package/dist/tools/artifact/reject-breaker.d.ts +28 -0
- package/dist/tools/artifact/reject-breaker.js +42 -0
- package/dist/tools/fs/bash-lexer.d.ts +132 -0
- package/dist/tools/fs/bash-lexer.js +563 -0
- package/dist/tools/fs/bash-program-position.d.ts +142 -0
- package/dist/tools/fs/bash-program-position.js +125 -0
- package/dist/tools/fs/bash-readonly-classifier.d.ts +81 -16
- package/dist/tools/fs/bash-readonly-classifier.js +180 -558
- package/dist/tools/fs/containment-face.d.ts +89 -0
- package/dist/tools/fs/containment-face.js +81 -0
- package/dist/tools/fs/fs-bash.d.ts +46 -1
- package/dist/tools/fs/fs-bash.js +165 -25
- package/dist/tools/fs/fs-read.d.ts +1 -1
- package/dist/tools/fs/fs-search-tools.d.ts +3 -3
- package/dist/tools/fs/fs-write.d.ts +4 -3
- package/dist/tools/fs/fs-write.js +9 -9
- package/dist/tools/fs/index.d.ts +24 -5
- package/dist/tools/fs/index.js +18 -6
- package/dist/tools/fs/read-deny.d.ts +4 -3
- package/dist/tools/fs/repo-map.d.ts +2 -2
- package/dist/tools/fs/safety.d.ts +18 -3
- package/dist/tools/fs/safety.js +11 -4
- package/package.json +1 -1
- package/test/export-surface.snapshot.json +99 -13
- package/wire-changes/core@7.17.7.json +49 -0
- package/wire-changes/core@7.18.0.json +1273 -0
- package/wire-changes/core@7.19.0.json +457 -0
- package/dist/tools/fs/read-face.d.ts +0 -68
- package/dist/tools/fs/read-face.js +0 -47
|
@@ -0,0 +1,457 @@
|
|
|
1
|
+
{
|
|
2
|
+
"repo": "core",
|
|
3
|
+
"version": "7.19.0",
|
|
4
|
+
"from": "a9ed817912e9808ec38a5b4f02231398d5ccc99f",
|
|
5
|
+
"to": "v7.19.0",
|
|
6
|
+
"added": [
|
|
7
|
+
{
|
|
8
|
+
"name": "AUTO_MODE_PARSE_FAILURES",
|
|
9
|
+
"kind": "variable",
|
|
10
|
+
"tier": "advanced",
|
|
11
|
+
"at": [
|
|
12
|
+
"src/core/auto-mode.ts:69",
|
|
13
|
+
"src/index.ts:1376"
|
|
14
|
+
],
|
|
15
|
+
"criteriaCovered": false,
|
|
16
|
+
"breaking": false
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"name": "AutoModeParseFailure",
|
|
20
|
+
"kind": "type",
|
|
21
|
+
"tier": "advanced",
|
|
22
|
+
"at": [
|
|
23
|
+
"src/core/auto-mode.ts:70",
|
|
24
|
+
"src/index.ts:1378"
|
|
25
|
+
],
|
|
26
|
+
"criteriaCovered": false,
|
|
27
|
+
"breaking": false
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"name": "RECOMMENDED_SENSITIVE_ASK_PATTERNS",
|
|
31
|
+
"kind": "variable",
|
|
32
|
+
"tier": "advanced",
|
|
33
|
+
"at": [
|
|
34
|
+
"src/core/sensitive-path-policy.ts:196",
|
|
35
|
+
"src/index.ts:914"
|
|
36
|
+
],
|
|
37
|
+
"criteriaCovered": false,
|
|
38
|
+
"breaking": false
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"name": "ReadRootGrantCandidate",
|
|
42
|
+
"kind": "interface",
|
|
43
|
+
"tier": "advanced",
|
|
44
|
+
"at": [
|
|
45
|
+
"src/core/tool-spec.ts:105",
|
|
46
|
+
"src/core/types.ts:24",
|
|
47
|
+
"src/index.ts:3300"
|
|
48
|
+
],
|
|
49
|
+
"criteriaCovered": true,
|
|
50
|
+
"breaking": false
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"name": "classifierParseFailureDenyMessage",
|
|
54
|
+
"kind": "function",
|
|
55
|
+
"tier": "advanced",
|
|
56
|
+
"at": [
|
|
57
|
+
"src/core/auto-mode.ts:247",
|
|
58
|
+
"src/index.ts:1375"
|
|
59
|
+
],
|
|
60
|
+
"criteriaCovered": false,
|
|
61
|
+
"breaking": false
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"name": "isAutoModeParseFailure",
|
|
65
|
+
"kind": "function",
|
|
66
|
+
"tier": "advanced",
|
|
67
|
+
"at": [
|
|
68
|
+
"src/core/auto-mode.ts:73",
|
|
69
|
+
"src/index.ts:1377"
|
|
70
|
+
],
|
|
71
|
+
"criteriaCovered": false,
|
|
72
|
+
"breaking": false
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"name": "thinkingOffSpelled",
|
|
76
|
+
"kind": "function",
|
|
77
|
+
"tier": "advanced",
|
|
78
|
+
"at": [
|
|
79
|
+
"src/brain/reasoning.ts:184",
|
|
80
|
+
"src/index.ts:2492"
|
|
81
|
+
],
|
|
82
|
+
"criteriaCovered": false,
|
|
83
|
+
"breaking": false
|
|
84
|
+
}
|
|
85
|
+
],
|
|
86
|
+
"removed": [
|
|
87
|
+
{
|
|
88
|
+
"name": "CLASSIFIER_PARSE_FAILURE_DENY_MESSAGE",
|
|
89
|
+
"kind": "variable",
|
|
90
|
+
"tier": "advanced",
|
|
91
|
+
"at": [
|
|
92
|
+
"src/core/auto-mode.ts:222",
|
|
93
|
+
"src/index.ts:1375"
|
|
94
|
+
],
|
|
95
|
+
"breaking": true
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"name": "thinkingOffExpressible",
|
|
99
|
+
"kind": "function",
|
|
100
|
+
"tier": "advanced",
|
|
101
|
+
"at": [
|
|
102
|
+
"src/brain/reasoning.ts:184",
|
|
103
|
+
"src/index.ts:2489"
|
|
104
|
+
],
|
|
105
|
+
"breaking": true
|
|
106
|
+
}
|
|
107
|
+
],
|
|
108
|
+
"changed": [],
|
|
109
|
+
"narrowed": [
|
|
110
|
+
{
|
|
111
|
+
"id": "F2",
|
|
112
|
+
"source": "behaviorFlips.summary",
|
|
113
|
+
"text": "NARROWING (durable-resume path) — a decider's note has ONE mint (#812 / B-123; car-812): `settledByPerson` + `decidersNote` in `gate-outcome.ts`; empty text folds to absence there, once, for the live resolver and the durable decide lane alike, so `reason: \"\"` is a bare refusal on both paths and the issuing batch's not-yet-started siblings halt (`gate.batch_halted`). Whitespace-only text stays a note (pinned current behaviour, not a promise)."
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"id": "F3",
|
|
117
|
+
"source": "behaviorFlips.summary",
|
|
118
|
+
"text": "NARROWING + widening — write protection layered by what the file IS (#804; car-804, ruling (d)) and the write-protection judge anchors relative spellings (#815, security; B-124): the deny set's agent-config block derives from `READ_FACE_BUILTIN_DENY_TABLE`'s `agent-config` tier (one table, two judges; `RECOMMENDED_SENSITIVE_PATTERNS` 26 → 39 members: +8 third-party agent config files, +2 write-face-only rows `.claude/hooks` / `.sema/hooks` (host-executed command bodies, like `.git/hooks`; #824), −4 hand rows), the `.claude` / `.sema` DIRECTORIES leave the deny set and sit on an ask tier of the SAME canonical judge (`RECOMMENDED_SENSITIVE_ASK_PATTERNS` = [`.claude`, `.sema`]; `createSensitivePathPolicy({ askPatterns })` absent = that set, `[]` = no ask tier; the `dataRoot` exemption applies to both tiers); the always-on lexical `WriteProtectionMatcher.matchPath(path, cwd?)` joins a relative spelling onto the gate's tracked cwd BEFORE judging, so `cd ~/.ssh` + `Write(\"authorized_keys\")` is judged like the absolute spelling on every `segment` row."
|
|
119
|
+
}
|
|
120
|
+
],
|
|
121
|
+
"closedSetMembers": [
|
|
122
|
+
{
|
|
123
|
+
"set": "AUTO_MODE_PARSE_FAILURES",
|
|
124
|
+
"at": [
|
|
125
|
+
"src/core/auto-mode.ts:69"
|
|
126
|
+
],
|
|
127
|
+
"newSet": true,
|
|
128
|
+
"added": [
|
|
129
|
+
"conflict",
|
|
130
|
+
"missing"
|
|
131
|
+
],
|
|
132
|
+
"removed": [],
|
|
133
|
+
"breaking": false,
|
|
134
|
+
"criteriaCovered": false
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"set": "CLASSIFIER_ROLE_DEFAULT_REASONS",
|
|
138
|
+
"at": [
|
|
139
|
+
"src/core/runner/classifier-ladder.ts:86"
|
|
140
|
+
],
|
|
141
|
+
"newSet": true,
|
|
142
|
+
"added": [
|
|
143
|
+
"main_only",
|
|
144
|
+
"role_fallback",
|
|
145
|
+
"role_unresolvable",
|
|
146
|
+
"tier_below_main",
|
|
147
|
+
"tier_table"
|
|
148
|
+
],
|
|
149
|
+
"removed": [],
|
|
150
|
+
"breaking": false,
|
|
151
|
+
"criteriaCovered": false
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"set": "ENGINE_NOTICE_CODES",
|
|
155
|
+
"at": [
|
|
156
|
+
"src/core/governance-codes.ts:323"
|
|
157
|
+
],
|
|
158
|
+
"newSet": false,
|
|
159
|
+
"added": [
|
|
160
|
+
"classifier.contract_broken",
|
|
161
|
+
"classifier.role_defaulted",
|
|
162
|
+
"skills.listing_truncated"
|
|
163
|
+
],
|
|
164
|
+
"removed": [],
|
|
165
|
+
"breaking": false,
|
|
166
|
+
"criteriaCovered": true
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
"set": "RECOMMENDED_SENSITIVE_ASK_PATTERNS",
|
|
170
|
+
"at": [
|
|
171
|
+
"src/core/sensitive-path-policy.ts:196"
|
|
172
|
+
],
|
|
173
|
+
"newSet": true,
|
|
174
|
+
"added": [
|
|
175
|
+
".claude",
|
|
176
|
+
".sema"
|
|
177
|
+
],
|
|
178
|
+
"removed": [],
|
|
179
|
+
"breaking": false,
|
|
180
|
+
"criteriaCovered": false
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"set": "RECOMMENDED_SENSITIVE_PATTERNS",
|
|
184
|
+
"at": [
|
|
185
|
+
"src/core/sensitive-path-policy.ts:102"
|
|
186
|
+
],
|
|
187
|
+
"newSet": false,
|
|
188
|
+
"added": [
|
|
189
|
+
".ai-agent/.env",
|
|
190
|
+
".aider.conf.yml",
|
|
191
|
+
".claude.*",
|
|
192
|
+
".claude/agents",
|
|
193
|
+
".claude/hooks",
|
|
194
|
+
".claude/settings.json",
|
|
195
|
+
".claude/settings.local.json",
|
|
196
|
+
".codex/config.toml",
|
|
197
|
+
".continue/config.json",
|
|
198
|
+
".continue/config.yaml",
|
|
199
|
+
".cursor/mcp.json",
|
|
200
|
+
".gemini/settings.json",
|
|
201
|
+
".sema/agents",
|
|
202
|
+
".sema/engine-data/.env",
|
|
203
|
+
".sema/hooks",
|
|
204
|
+
".sema/settings.json",
|
|
205
|
+
".sema/settings.local.json"
|
|
206
|
+
],
|
|
207
|
+
"removed": [
|
|
208
|
+
".claude*",
|
|
209
|
+
".sema"
|
|
210
|
+
],
|
|
211
|
+
"persistedBy": "none",
|
|
212
|
+
"breaking": true,
|
|
213
|
+
"criteriaCovered": false
|
|
214
|
+
}
|
|
215
|
+
],
|
|
216
|
+
"typeKeys": [
|
|
217
|
+
{
|
|
218
|
+
"type": "AskRequest",
|
|
219
|
+
"at": [
|
|
220
|
+
"src/core/tool-policy.ts:2571"
|
|
221
|
+
],
|
|
222
|
+
"added": [
|
|
223
|
+
"readRootCandidate"
|
|
224
|
+
],
|
|
225
|
+
"removed": [],
|
|
226
|
+
"breaking": false,
|
|
227
|
+
"criteriaCovered": true
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"type": "AutoModeVerdict",
|
|
231
|
+
"at": [
|
|
232
|
+
"src/core/auto-mode.ts:123"
|
|
233
|
+
],
|
|
234
|
+
"added": [
|
|
235
|
+
"parse_error.form"
|
|
236
|
+
],
|
|
237
|
+
"removed": [],
|
|
238
|
+
"breaking": false,
|
|
239
|
+
"criteriaCovered": false
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
"type": "CompoundReadonlyVerdict",
|
|
243
|
+
"at": [
|
|
244
|
+
"src/tools/fs/bash-readonly-classifier.ts:585"
|
|
245
|
+
],
|
|
246
|
+
"added": [
|
|
247
|
+
"outOfRootGrantCandidate"
|
|
248
|
+
],
|
|
249
|
+
"removed": [],
|
|
250
|
+
"breaking": false,
|
|
251
|
+
"criteriaCovered": false
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
"type": "PermissionResult",
|
|
255
|
+
"at": [
|
|
256
|
+
"src/core/tool-policy.ts:412"
|
|
257
|
+
],
|
|
258
|
+
"added": [
|
|
259
|
+
"probeReadRootCandidate"
|
|
260
|
+
],
|
|
261
|
+
"removed": [],
|
|
262
|
+
"breaking": false,
|
|
263
|
+
"criteriaCovered": false
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
"type": "PreToolUseResult",
|
|
267
|
+
"at": [
|
|
268
|
+
"src/core/hooks.ts:1141"
|
|
269
|
+
],
|
|
270
|
+
"added": [
|
|
271
|
+
"probeReadRootCandidate"
|
|
272
|
+
],
|
|
273
|
+
"removed": [],
|
|
274
|
+
"breaking": false,
|
|
275
|
+
"criteriaCovered": false
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
"type": "ReversibilityVerdict",
|
|
279
|
+
"at": [
|
|
280
|
+
"src/core/tool-spec.ts:50"
|
|
281
|
+
],
|
|
282
|
+
"added": [
|
|
283
|
+
"readRootCandidate"
|
|
284
|
+
],
|
|
285
|
+
"removed": [],
|
|
286
|
+
"breaking": false,
|
|
287
|
+
"criteriaCovered": true
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
"type": "TaskSpec",
|
|
291
|
+
"at": [
|
|
292
|
+
"src/core/task-spec.ts:49"
|
|
293
|
+
],
|
|
294
|
+
"added": [
|
|
295
|
+
"skillListingBudgetFraction",
|
|
296
|
+
"skillListingMaxDescChars"
|
|
297
|
+
],
|
|
298
|
+
"removed": [],
|
|
299
|
+
"breaking": false,
|
|
300
|
+
"criteriaCovered": true
|
|
301
|
+
}
|
|
302
|
+
],
|
|
303
|
+
"declarationMoves": [
|
|
304
|
+
{
|
|
305
|
+
"name": "SKILLS_BLOCK_MAX_BYTES",
|
|
306
|
+
"kind": null,
|
|
307
|
+
"onSurface": false,
|
|
308
|
+
"from": [
|
|
309
|
+
"src/core/runner/synthetic-tools.ts"
|
|
310
|
+
],
|
|
311
|
+
"to": [
|
|
312
|
+
"src/core/runner/synthetic-tools.ts",
|
|
313
|
+
"src/core/skill-listing-budget.ts"
|
|
314
|
+
]
|
|
315
|
+
}
|
|
316
|
+
],
|
|
317
|
+
"mintMoves": [],
|
|
318
|
+
"criteriaObserves": [
|
|
319
|
+
{
|
|
320
|
+
"kind": "engineNoticeCode",
|
|
321
|
+
"name": "classifier.contract_broken",
|
|
322
|
+
"assertions": [
|
|
323
|
+
"G1.c"
|
|
324
|
+
]
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
"kind": "engineNoticeCode",
|
|
328
|
+
"name": "classifier.role_defaulted",
|
|
329
|
+
"assertions": [
|
|
330
|
+
"G1.b"
|
|
331
|
+
]
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
"kind": "engineNoticeCode",
|
|
335
|
+
"name": "skills.listing_truncated",
|
|
336
|
+
"assertions": [
|
|
337
|
+
"G4.b"
|
|
338
|
+
]
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
"kind": "typeMember",
|
|
342
|
+
"name": "AskRequest.readRootCandidate",
|
|
343
|
+
"assertions": [
|
|
344
|
+
"G5.a"
|
|
345
|
+
]
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
"kind": "typeMember",
|
|
349
|
+
"name": "AskRequest.toolName",
|
|
350
|
+
"assertions": [
|
|
351
|
+
"G3.b"
|
|
352
|
+
]
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
"kind": "typeMember",
|
|
356
|
+
"name": "AssistantMessage.partialFinalized",
|
|
357
|
+
"assertions": [
|
|
358
|
+
"G1.d"
|
|
359
|
+
]
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
"kind": "typeMember",
|
|
363
|
+
"name": "GateDisposition.classifier",
|
|
364
|
+
"assertions": [
|
|
365
|
+
"G1.a"
|
|
366
|
+
]
|
|
367
|
+
},
|
|
368
|
+
{
|
|
369
|
+
"kind": "typeMember",
|
|
370
|
+
"name": "ReadRootGrantCandidate.dir",
|
|
371
|
+
"assertions": [
|
|
372
|
+
"G5.b"
|
|
373
|
+
]
|
|
374
|
+
},
|
|
375
|
+
{
|
|
376
|
+
"kind": "typeMember",
|
|
377
|
+
"name": "ReversibilityVerdict.readRootCandidate",
|
|
378
|
+
"assertions": [
|
|
379
|
+
"G5.c"
|
|
380
|
+
]
|
|
381
|
+
},
|
|
382
|
+
{
|
|
383
|
+
"kind": "typeMember",
|
|
384
|
+
"name": "Settlement.kind",
|
|
385
|
+
"assertions": [
|
|
386
|
+
"G2.b"
|
|
387
|
+
]
|
|
388
|
+
},
|
|
389
|
+
{
|
|
390
|
+
"kind": "typeMember",
|
|
391
|
+
"name": "Settlement.note",
|
|
392
|
+
"assertions": [
|
|
393
|
+
"G2.a"
|
|
394
|
+
]
|
|
395
|
+
},
|
|
396
|
+
{
|
|
397
|
+
"kind": "typeMember",
|
|
398
|
+
"name": "TaskSpec.skillListingBudgetFraction",
|
|
399
|
+
"assertions": [
|
|
400
|
+
"G4.a",
|
|
401
|
+
"G6.a"
|
|
402
|
+
]
|
|
403
|
+
},
|
|
404
|
+
{
|
|
405
|
+
"kind": "typeMember",
|
|
406
|
+
"name": "TaskSpec.skillListingMaxDescChars",
|
|
407
|
+
"assertions": [
|
|
408
|
+
"G4.c"
|
|
409
|
+
]
|
|
410
|
+
},
|
|
411
|
+
{
|
|
412
|
+
"kind": "typeMember",
|
|
413
|
+
"name": "WriteProtectionMatcher.matchPath",
|
|
414
|
+
"assertions": [
|
|
415
|
+
"G3.a"
|
|
416
|
+
]
|
|
417
|
+
}
|
|
418
|
+
],
|
|
419
|
+
"consumersHint": {
|
|
420
|
+
"cli": [
|
|
421
|
+
"AskRequest",
|
|
422
|
+
"CompoundReadonlyVerdict",
|
|
423
|
+
"ENGINE_NOTICE_CODES",
|
|
424
|
+
"PermissionResult",
|
|
425
|
+
"PreToolUseResult",
|
|
426
|
+
"RECOMMENDED_SENSITIVE_PATTERNS",
|
|
427
|
+
"TaskSpec"
|
|
428
|
+
],
|
|
429
|
+
"server": [
|
|
430
|
+
"AskRequest",
|
|
431
|
+
"AutoModeVerdict",
|
|
432
|
+
"CLASSIFIER_PARSE_FAILURE_DENY_MESSAGE",
|
|
433
|
+
"CompoundReadonlyVerdict",
|
|
434
|
+
"ENGINE_NOTICE_CODES",
|
|
435
|
+
"PermissionResult",
|
|
436
|
+
"PreToolUseResult",
|
|
437
|
+
"RECOMMENDED_SENSITIVE_PATTERNS",
|
|
438
|
+
"ReversibilityVerdict",
|
|
439
|
+
"TaskSpec",
|
|
440
|
+
"thinkingOffExpressible"
|
|
441
|
+
],
|
|
442
|
+
"sdk": [
|
|
443
|
+
"AskRequest",
|
|
444
|
+
"PermissionResult",
|
|
445
|
+
"PreToolUseResult",
|
|
446
|
+
"TaskSpec"
|
|
447
|
+
],
|
|
448
|
+
"note": "scanned cli@116d081d server@565d02fc sdk@17a8533 — a name listed is MENTIONED there today, which is evidence of consumption, not proof of it"
|
|
449
|
+
},
|
|
450
|
+
"breakingCount": 3,
|
|
451
|
+
"breakingItems": [
|
|
452
|
+
"closed set lost members: RECOMMENDED_SENSITIVE_PATTERNS -.claude*,.sema",
|
|
453
|
+
"export removed: CLASSIFIER_PARSE_FAILURE_DENY_MESSAGE (variable)",
|
|
454
|
+
"export removed: thinkingOffExpressible (function)"
|
|
455
|
+
],
|
|
456
|
+
"toResolvedAt": "0ef667ab5a0122c0c73b9635de5035dab4a472dc"
|
|
457
|
+
}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/** The read-face containment state. `"roots"` = the containment judgment runs.
|
|
2
|
-
* `"open"` = the containment step is skipped (canonicalization, deny set, UNC out-of-set refusal
|
|
3
|
-
* and the type gates all still run). */
|
|
4
|
-
export type ReadFace = "open" | "roots";
|
|
5
|
-
/** Loud value gate: a `readFace` seat carries exactly "open" | "roots" — anything else (case
|
|
6
|
-
* variants, truthy garbage) refuses at wiring time, never folds to a default. Exported
|
|
7
|
-
* module-internally (not on the package surface) so prepare's unconditional config-guard leg can
|
|
8
|
-
* screen the seats on runs that never mount hands. The resolver itself also runs on every hands-less
|
|
9
|
-
* leg; this screen still fires first, so a garbage value refuses before any leg-shape branching. */
|
|
10
|
-
export declare function assertReadFaceValue(v: unknown, seat: string): ReadFace | undefined;
|
|
11
|
-
/** Inputs to {@link resolveReadFace} — all structural/declaration facts, never permission modes
|
|
12
|
-
* (a deliberate axis separation: this shape carries facts, not verdicts). */
|
|
13
|
-
export interface ReadFaceInputs {
|
|
14
|
-
/** TaskSpec.readFace (raw — validated here). The TASK layer: may only tighten under governance. */
|
|
15
|
-
specReadFace?: unknown;
|
|
16
|
-
/** RunnerDeps.readFace / HandsToolkitOptions.readFace (raw) — the DEPLOYMENT's own declaration. */
|
|
17
|
-
depsReadFace?: unknown;
|
|
18
|
-
/** The verifier read-only mount (`handsReadOnly` / toolkit `readOnly`): its containment is a
|
|
19
|
-
* LOAD-BEARING wall (bash_readonly is genuinely confined by it) — never openable. */
|
|
20
|
-
readOnlyMount: boolean;
|
|
21
|
-
/** Org governance declared (`RunnerDeps.permissionRuleStore.partitions.org === true`): default roots; the task layer
|
|
22
|
-
* may not open (tighten-only under governance; the deps layer, being the deployment's own
|
|
23
|
-
* declaration, still may). */
|
|
24
|
-
orgGoverned: boolean;
|
|
25
|
-
/** Is the FULL shell (`core.bash@1`) structurally reachable on this mount? Computed BEFORE
|
|
26
|
-
* tool-band assembly from spec-time facts (env kind / handsReadOnly / Bash exclusion — every
|
|
27
|
-
* exclusion source is spec-time-frozen, so this is always computable). When false, the roots fence
|
|
28
|
-
* is the ONLY read boundary, so no IMPLICIT default may open the face; an EXPLICIT "open" on
|
|
29
|
-
* either seat still wins (row 4 of the order is a default, not a clamp). */
|
|
30
|
-
fullShellReachable: boolean;
|
|
31
|
-
/** Observation hook for the ONE silent branch of the order: row 1's deployment-seat clamp
|
|
32
|
-
* (readOnly mount + deps "open" + NO task seat). Fired exactly when the deps declaration was the
|
|
33
|
-
* deciding seat and the mount overrode it — not when a task-level "roots" pinned the same value
|
|
34
|
-
* anyway (the mount changed nothing there, and announcing it would claim a false cause), and
|
|
35
|
-
* never on the throw rows (those are already loud). The resolver stays the single owner of the
|
|
36
|
-
* clamp predicate; stations own delivery/dedup ({@link deploymentReadFaceClampNotice}). */
|
|
37
|
-
onDeploymentClamp?: () => void;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* The ONE resolution order, first hit wins. prepare-task AND createHandsToolkit both call this — a
|
|
41
|
-
* library-direct mount gets identical validation and identical defaults.
|
|
42
|
-
*
|
|
43
|
-
* 1. read-only (verifier) mount → ROOTS; an explicit "open" on the TASK seat is a genuine
|
|
44
|
-
* per-call CONTRADICTION and refuses loudly (never silently pick a side). An "open" on the
|
|
45
|
-
* DEPLOYMENT seat alone is a deployment-wide default, not a per-task assertion — it silently
|
|
46
|
-
* CLAMPS to roots (stricter-wins), the same seat distinction row 2 draws for org governance.
|
|
47
|
-
* 2. org-governed: TaskSpec "open" refuses (task layer only tightens); deps "open" wins;
|
|
48
|
-
* otherwise ROOTS.
|
|
49
|
-
* 3. explicit seat: spec ?? deps.
|
|
50
|
-
* 4. bash-less mount: ROOTS (the fence is the only read boundary there — "the fence guards
|
|
51
|
-
* nothing bash reaches anyway" does not hold, so no implicit default may open it).
|
|
52
|
-
* 5. default: ROOTS — the engine never opens implicitly.
|
|
53
|
-
*/
|
|
54
|
-
export declare function resolveReadFace(i: ReadFaceInputs): ReadFace;
|
|
55
|
-
/**
|
|
56
|
-
* The ONE text of the deployment-clamp announcement (`config.read_face_deployment_clamped`).
|
|
57
|
-
* Both stations deliver THIS object through their own `deliverEngineNotice` call (prepare-task with
|
|
58
|
-
* the `RunnerDeps.onNotice` seat, once per notice sink — the sink, not the deps object, because the
|
|
59
|
-
* Runner rebuilds its deps; `createHandsToolkit` with its band-local `HandsToolkitOptions.onNotice`
|
|
60
|
-
* seat — toolkit creation is itself the one-per-mount boot moment, and an absent seat prints the
|
|
61
|
-
* same line via `console.warn`). Built here, import-free, so the message can never fork between
|
|
62
|
-
* the stations.
|
|
63
|
-
*/
|
|
64
|
-
export declare function deploymentReadFaceClampNotice(): {
|
|
65
|
-
code: string;
|
|
66
|
-
message: string;
|
|
67
|
-
detail: Record<string, unknown>;
|
|
68
|
-
};
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
export function assertReadFaceValue(v, seat) {
|
|
2
|
-
if (v === undefined)
|
|
3
|
-
return undefined;
|
|
4
|
-
if (v === "open" || v === "roots")
|
|
5
|
-
return v;
|
|
6
|
-
const e = new Error(`${seat}: invalid readFace value ${JSON.stringify(v)} — expected "open" or "roots" (bad values refuse loudly; nothing falls back to a default).`);
|
|
7
|
-
e.code = "config.read_face_invalid";
|
|
8
|
-
throw e;
|
|
9
|
-
}
|
|
10
|
-
export function resolveReadFace(i) {
|
|
11
|
-
const spec = assertReadFaceValue(i.specReadFace, "TaskSpec.readFace");
|
|
12
|
-
const deps = assertReadFaceValue(i.depsReadFace, "readFace (deployment seat)");
|
|
13
|
-
if (i.readOnlyMount) {
|
|
14
|
-
if (spec === "open") {
|
|
15
|
-
const e = new Error(`readFace: "open" contradicts the read-only (verifier) mount — that mount's containment is load-bearing (its read-only shell face is confined by it) and is never openable. Drop the readFace declaration or the readOnly mount.`);
|
|
16
|
-
e.code = "config.read_face_readonly_conflict";
|
|
17
|
-
throw e;
|
|
18
|
-
}
|
|
19
|
-
if (deps === "open" && spec === undefined)
|
|
20
|
-
i.onDeploymentClamp?.();
|
|
21
|
-
return "roots";
|
|
22
|
-
}
|
|
23
|
-
if (i.orgGoverned) {
|
|
24
|
-
if (spec === "open") {
|
|
25
|
-
const e = new Error(`TaskSpec.readFace: "open" is refused under organization governance — the task layer may only tighten (set RunnerDeps.readFace: "open" if the DEPLOYMENT declares the open read face).`);
|
|
26
|
-
e.code = "config.read_face_org_task_escalation";
|
|
27
|
-
throw e;
|
|
28
|
-
}
|
|
29
|
-
if (spec === "roots")
|
|
30
|
-
return "roots";
|
|
31
|
-
return deps ?? "roots";
|
|
32
|
-
}
|
|
33
|
-
if (spec !== undefined)
|
|
34
|
-
return spec;
|
|
35
|
-
if (deps !== undefined)
|
|
36
|
-
return deps;
|
|
37
|
-
if (!i.fullShellReachable)
|
|
38
|
-
return "roots";
|
|
39
|
-
return "roots";
|
|
40
|
-
}
|
|
41
|
-
export function deploymentReadFaceClampNotice() {
|
|
42
|
-
return {
|
|
43
|
-
code: "config.read_face_deployment_clamped",
|
|
44
|
-
message: `readFace (deployment seat): the deployment-wide "open" declaration is not in force on this read-only (verifier) mount — clamped to "roots" (stricter-wins: the mount's containment is load-bearing and never openable). Other mounts still honor "open".`,
|
|
45
|
-
detail: { seat: "readFace (deployment seat)", declared: "open", inForce: "roots", cause: "read_only_mount" },
|
|
46
|
-
};
|
|
47
|
-
}
|