start-command 0.42.0 → 0.43.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 +13 -0
- package/package.json +2 -2
- package/src/lib/formal-ai-client.js +8 -5
- package/src/lib/formal-ai-files.js +474 -61
- package/src/lib/formal-ai.js +170 -7
- package/src/lib/log-sanitizer.js +4 -0
- package/test/fixtures/formal-ai/receipts-258.json +27 -9
- package/test/fixtures/formal-ai/receipts-261.json +589 -0
- package/test/fixtures/formal-ai/replay.cjs +4 -1
- package/test/regression-258-files.js +27 -5
- package/test/regression-258.js +22 -9
- package/test/regression-261.js +856 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# start-command
|
|
2
2
|
|
|
3
|
+
## 0.43.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 8567804: `--use-formal-ai`: bounded typed source edits (#261).
|
|
8
|
+
|
|
9
|
+
- **Bound preimage:** an `edit` or `write` of an existing file is bound to the complete bytes the `read` tool returned for that exact path in the same task. `cat`, a directory listing or a stale read is not enough, and a change of the target while start writes is refused. `read` returns the text as the numbered frame Formal AI binds as a whole-file Read and decodes back exactly.
|
|
10
|
+
- **Owned change only:** `old_string` must occur exactly once (or `replace_all` is set), and only those byte regions change. Unicode, CRLF, a byte order mark and a missing final newline are preserved, and symlinks are followed only inside the working directory.
|
|
11
|
+
- **Receipt and verification:** each change keeps a mutation receipt (`tool`, `target`, `preimage`, `postimage`, byte `matches`, `readback`) in the evidence and returns it to Formal AI. The readback is verified byte for byte against the preimage and the matches, independently of fingerprints; any other byte change ends the run with 70.
|
|
12
|
+
- **Unresolved failures:** a failed `read`, `edit`, `write` or `bash` change stays open until a verified change of the same target (or the same command) resolves it. A later read, a `cp`/`mv` over the file or Formal AI's answer does not resolve it, and the run ends `incomplete` with the original failure and its exit status.
|
|
13
|
+
- **Gap records:** `SourcePreimageUnavailable` is a known `workspace-change-verification-gap/v1` reason. Other JSON gap records and Formal AI's Links Notation `obligation_gap` answers end `incomplete` with exit 65 instead of success, unless they only repeat tool output (including a read frame's text). There is still no shell or vendor fallback.
|
|
14
|
+
- **Dependency:** log sanitization now depends on `@link-foundation/sensitive-data-sanitizer` ^0.14.0, its current release.
|
|
15
|
+
|
|
3
16
|
## 0.42.0
|
|
4
17
|
|
|
5
18
|
### Minor Changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "start-command",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.43.0",
|
|
4
4
|
"description": "Gamification of coding, execute any command with ability to auto-report issues on GitHub",
|
|
5
5
|
"main": "src/bin/cli.js",
|
|
6
6
|
"exports": {
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
]
|
|
69
69
|
},
|
|
70
70
|
"dependencies": {
|
|
71
|
-
"@link-foundation/sensitive-data-sanitizer": "^0.
|
|
71
|
+
"@link-foundation/sensitive-data-sanitizer": "^0.14.0",
|
|
72
72
|
"command-stream": "^2.6.0",
|
|
73
73
|
"lino-objects-codec": "^0.9.5"
|
|
74
74
|
},
|
|
@@ -15,6 +15,7 @@ const { API_PREFIX } = require('./formal-ai-runtime');
|
|
|
15
15
|
const {
|
|
16
16
|
FILE_TOOLS,
|
|
17
17
|
describeFileCall,
|
|
18
|
+
echoedByTool,
|
|
18
19
|
normalizeFileArgs,
|
|
19
20
|
} = require('./formal-ai-files');
|
|
20
21
|
|
|
@@ -144,7 +145,12 @@ const GAP_SCHEMAS = Object.freeze({
|
|
|
144
145
|
'EditToolUnavailable',
|
|
145
146
|
'ReadToolUnavailable',
|
|
146
147
|
],
|
|
147
|
-
|
|
148
|
+
// SourcePreimageUnavailable: Formal AI could not bind the complete Read
|
|
149
|
+
// before its edit to the change (issue #261).
|
|
150
|
+
'workspace-change-verification-gap/v1': [
|
|
151
|
+
'VerificationRunToolUnavailable',
|
|
152
|
+
'SourcePreimageUnavailable',
|
|
153
|
+
],
|
|
148
154
|
});
|
|
149
155
|
const CAPABILITIES = new Set([
|
|
150
156
|
'read',
|
|
@@ -196,10 +202,7 @@ function recognizeCapabilityGap(content, messages = []) {
|
|
|
196
202
|
) {
|
|
197
203
|
return null;
|
|
198
204
|
}
|
|
199
|
-
|
|
200
|
-
(m) => m && m.role === 'tool' && String(m.content || '').includes(text)
|
|
201
|
-
);
|
|
202
|
-
if (echoed) {
|
|
205
|
+
if (echoedByTool(text, messages)) {
|
|
203
206
|
return null;
|
|
204
207
|
}
|
|
205
208
|
return {
|