@farmslot/agent-runtime 0.15.0 → 0.15.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.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,12 @@
4
4
 
5
5
  - Active-development baseline; add user-facing changes here before release or package publication.
6
6
 
7
+ ## 0.15.1 - 2026-09-29
8
+
9
+ - Publish with protocol 0.33.0 so consumers share the current task and runner contracts.
10
+
11
+ - Refuse review terminal reuse when its recorded runner or model differs from the launch request.
12
+
7
13
  ## 0.15.0 - 2026-09-28
8
14
 
9
15
  - QA tasks complete with one HTML report and structured evidence, without requiring a duplicate Markdown report.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farmslot/agent-runtime",
3
- "version": "0.15.0",
3
+ "version": "0.15.1",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -45,7 +45,7 @@
45
45
  "prepublishOnly": "node ../../scripts/quality/check-farmslot-package-readiness.mjs --publish --packages @farmslot/agent-runtime"
46
46
  },
47
47
  "dependencies": {
48
- "@farmslot/protocol": "0.32.0"
48
+ "@farmslot/protocol": "0.33.0"
49
49
  },
50
50
  "devDependencies": {
51
51
  "@types/node": "^22.0.0",
@@ -13,6 +13,16 @@ const check = (result) => {
13
13
  };
14
14
  const target = input.session;
15
15
  async function main() {
16
+ if (!['launch', 'inspect', 'stop'].includes(input.action))
17
+ throw Error('Unknown review terminal action');
18
+ if (
19
+ input.action === 'launch' &&
20
+ (typeof input.runner !== 'string' ||
21
+ !input.runner ||
22
+ typeof input.model !== 'string' ||
23
+ !input.model)
24
+ )
25
+ throw Error('Review terminal launch requires a runner and model');
16
26
  if (
17
27
  !/^[a-zA-Z0-9_-]+$/.test(input.session) ||
18
28
  !path.isAbsolute(input.task) ||
@@ -49,6 +59,10 @@ async function main() {
49
59
  }
50
60
  if (fs.existsSync(cancelled)) throw new Error('Review terminal launch was cancelled');
51
61
  if (existing) {
62
+ if (existing.runner !== input.runner || existing.model !== input.model)
63
+ throw Error(
64
+ 'Review terminal receipt does not match the requested runner and model; request a new review',
65
+ );
52
66
  if (has.status !== 0) throw Error('Review terminal exited; explicit retry required');
53
67
  process.stdout.write(JSON.stringify(existing));
54
68
  return;
@@ -100,6 +114,8 @@ async function main() {
100
114
  runId: input.runId,
101
115
  workspaceId: input.workspaceId,
102
116
  session: input.session,
117
+ runner: input.runner,
118
+ model: input.model,
103
119
  startedAt: new Date().toISOString(),
104
120
  signalAttemptId: environment.FARMSLOT_SIGNAL_ATTEMPT_ID,
105
121
  };