@farmslot/agent-runtime 0.24.0 → 0.25.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,14 @@
4
4
 
5
5
  - Active-development baseline; add user-facing changes here before release or package publication.
6
6
 
7
+ ## 0.25.1 - 2026-10-15
8
+
9
+ - Preserve retained input directory names so installed dependency lookup keeps its original layout.
10
+
11
+ ## 0.25.0 - 2026-10-15
12
+
13
+ - Retain task tooling and selected inputs with shared byte verification and frozen task callbacks.
14
+
7
15
  ## 0.24.0 - 2026-10-15
8
16
 
9
17
  - Preserve native host census provenance after process exit and reconcile stopped hosts from retained kernel parent evidence without deleting journals or relaxing process-safety checks.
@@ -0,0 +1,47 @@
1
+ import { type RecipeConformanceIdentity } from '@farmslot/protocol';
2
+ export type TaskRecipeBindingIdentity = Pick<RecipeConformanceIdentity, 'project' | 'app' | 'domain' | 'adapter' | 'target' | 'provider' | 'implementation' | 'libraries' | 'configuration'>;
3
+ export interface TaskRetainedInput {
4
+ source: string;
5
+ path: string;
6
+ sha256: string;
7
+ }
8
+ export interface TaskExecutionProvenance {
9
+ schemaVersion: 1;
10
+ pin: string;
11
+ package: {
12
+ name: string;
13
+ version: string;
14
+ };
15
+ source: {
16
+ kind: string;
17
+ packageRoot: string;
18
+ };
19
+ resolvedExecutable: string;
20
+ entrySha256: string;
21
+ packageTreeSha256: string;
22
+ recordedAt: string;
23
+ bindingIdentity: TaskRecipeBindingIdentity | null;
24
+ retainedInputs: TaskRetainedInput[];
25
+ }
26
+ export interface TaskExecutionInput {
27
+ executable: string;
28
+ packageRoot: string;
29
+ distributionRoot: string;
30
+ bindingIdentity: TaskRecipeBindingIdentity | null;
31
+ /** All executable provider/library inputs and selected configuration bytes. */
32
+ inputs: readonly string[];
33
+ /** Host selection data. Its bytes are retained and verified with the tooling. */
34
+ selectedConfiguration?: string;
35
+ }
36
+ export declare class TaskProvenanceError extends Error {
37
+ readonly code: string;
38
+ readonly exitCode = 5;
39
+ constructor(code: string, message: string);
40
+ }
41
+ /** Producer-owned pin identity, allocated before rendering but written only after validation. */
42
+ export declare function taskExecutionPin(taskDir: string, input: TaskExecutionInput): string;
43
+ /** Verify through the trusted installed runtime before invoking the recorded executable. */
44
+ export declare function verifyTaskExecutionProvenance(taskDir: string, expectedBindingIdentity: TaskRecipeBindingIdentity | null): TaskExecutionProvenance;
45
+ /** Called by the task producer after selection and before it emits a marker. */
46
+ export declare function retainTaskExecution(taskDir: string, input: TaskExecutionInput): TaskExecutionProvenance;
47
+ //# sourceMappingURL=execution-provenance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-provenance.d.ts","sourceRoot":"","sources":["../../src/task-init/execution-provenance.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,KAAK,yBAAyB,EAE/B,MAAM,oBAAoB,CAAC;AAI5B,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAC1C,yBAAyB,EACvB,SAAS,GACT,KAAK,GACL,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,UAAU,GACV,gBAAgB,GAChB,WAAW,GACX,eAAe,CAClB,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,CAAC,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAClD,cAAc,EAAE,iBAAiB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAClD,+EAA+E;IAC/E,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,iFAAiF;IACjF,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAI1C,QAAQ,CAAC,IAAI,EAAE,MAAM;IAHvB,QAAQ,CAAC,QAAQ,KAAK;gBAGX,IAAI,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM;CAKlB;AAUD,iGAAiG;AACjG,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAanF;AAiFD,4FAA4F;AAC5F,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,EACf,uBAAuB,EAAE,yBAAyB,GAAG,IAAI,GACxD,uBAAuB,CA4FzB;AAED,gFAAgF;AAChF,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,kBAAkB,GACxB,uBAAuB,CAiGzB"}
@@ -0,0 +1,226 @@
1
+ import { createHash, randomUUID } from 'node:crypto';
2
+ import fs from 'node:fs';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ import { isDeepStrictEqual } from 'node:util';
6
+ import { isRecord, } from '@farmslot/protocol';
7
+ import { retainTaskInput, taskInputDigest } from './pin.js';
8
+ export class TaskProvenanceError extends Error {
9
+ constructor(code, message) {
10
+ super(message);
11
+ this.code = code;
12
+ this.exitCode = 5;
13
+ this.name = 'TaskProvenanceError';
14
+ }
15
+ }
16
+ const receiptFile = 'artifacts/harness-provenance.json';
17
+ const pinPaths = new WeakMap();
18
+ function taskPinRoot() {
19
+ return path.resolve(process.env.FARMSLOT_HOME || path.join(os.homedir(), '.farmslot'), 'task-pins');
20
+ }
21
+ /** Producer-owned pin identity, allocated before rendering but written only after validation. */
22
+ export function taskExecutionPin(taskDir, input) {
23
+ let paths = pinPaths.get(input);
24
+ if (!paths) {
25
+ paths = new Map();
26
+ pinPaths.set(input, paths);
27
+ }
28
+ const key = path.resolve(taskDir);
29
+ let pin = paths.get(key);
30
+ if (!pin) {
31
+ pin = path.join(taskPinRoot(), randomUUID().replaceAll('-', ''));
32
+ paths.set(key, pin);
33
+ }
34
+ return pin;
35
+ }
36
+ const sha256 = (file) => createHash('sha256').update(fs.readFileSync(file)).digest('hex');
37
+ function isRetainedInput(value) {
38
+ return (isRecord(value) &&
39
+ typeof value.source === 'string' &&
40
+ typeof value.path === 'string' &&
41
+ typeof value.sha256 === 'string');
42
+ }
43
+ function isSource(value) {
44
+ return (isRecord(value) &&
45
+ (value.head === null || typeof value.head === 'string') &&
46
+ typeof value.status === 'string' &&
47
+ typeof value.sourceFingerprint === 'string' &&
48
+ (value.dirtyDigest === undefined ||
49
+ value.dirtyDigest === null ||
50
+ typeof value.dirtyDigest === 'string'));
51
+ }
52
+ function isBindingIdentity(value) {
53
+ if (value === null)
54
+ return true;
55
+ return (isRecord(value) &&
56
+ typeof value.project === 'string' &&
57
+ typeof value.adapter === 'string' &&
58
+ typeof value.target === 'string' &&
59
+ (value.app === null || typeof value.app === 'string') &&
60
+ (value.domain === null || typeof value.domain === 'string') &&
61
+ isSource(value.provider) &&
62
+ (value.implementation === undefined ||
63
+ (Array.isArray(value.implementation) &&
64
+ value.implementation.every((entry) => isRecord(entry) && typeof entry.name === 'string' && isSource(entry)))) &&
65
+ Array.isArray(value.libraries) &&
66
+ value.libraries.every((entry) => isRecord(entry) &&
67
+ typeof entry.name === 'string' &&
68
+ (entry.path === undefined || typeof entry.path === 'string') &&
69
+ isSource(entry)) &&
70
+ Array.isArray(value.configuration) &&
71
+ value.configuration.every((entry) => isRecord(entry) &&
72
+ typeof entry.path === 'string' &&
73
+ typeof entry.sourceFingerprint === 'string'));
74
+ }
75
+ function isReceipt(value) {
76
+ return (isRecord(value) &&
77
+ value.schemaVersion === 1 &&
78
+ typeof value.pin === 'string' &&
79
+ isRecord(value.package) &&
80
+ typeof value.package.name === 'string' &&
81
+ typeof value.package.version === 'string' &&
82
+ isRecord(value.source) &&
83
+ typeof value.source.kind === 'string' &&
84
+ typeof value.source.packageRoot === 'string' &&
85
+ typeof value.resolvedExecutable === 'string' &&
86
+ typeof value.entrySha256 === 'string' &&
87
+ typeof value.packageTreeSha256 === 'string' &&
88
+ typeof value.recordedAt === 'string' &&
89
+ isBindingIdentity(value.bindingIdentity) &&
90
+ Array.isArray(value.retainedInputs) &&
91
+ value.retainedInputs.length > 0 &&
92
+ value.retainedInputs.every(isRetainedInput));
93
+ }
94
+ /** Verify through the trusted installed runtime before invoking the recorded executable. */
95
+ export function verifyTaskExecutionProvenance(taskDir, expectedBindingIdentity) {
96
+ const value = JSON.parse(fs.readFileSync(path.join(taskDir, receiptFile), 'utf8'));
97
+ if (isRecord(value) && !('bindingIdentity' in value)) {
98
+ throw new TaskProvenanceError('TASK_PROVENANCE_LEGACY', 'This task retains a legacy receipt. Use its original pinned marker.');
99
+ }
100
+ if (!isReceipt(value))
101
+ throw new TaskProvenanceError('TASK_PROVENANCE_INVALID', 'The task execution receipt is invalid.');
102
+ const taskRoot = fs.realpathSync(taskDir);
103
+ const storeRoot = fs.realpathSync(taskPinRoot());
104
+ if (storeRoot === taskRoot || storeRoot.startsWith(`${taskRoot}${path.sep}`))
105
+ throw new TaskProvenanceError('TASK_PROVENANCE_INVALID', 'The installation pin store must be outside the task.');
106
+ const pin = fs.realpathSync(value.pin);
107
+ if (path.dirname(pin) !== fs.realpathSync(taskPinRoot()))
108
+ throw new TaskProvenanceError('TASK_PROVENANCE_INVALID', 'The task pin is outside the configured installation store.');
109
+ const authority = JSON.parse(fs.readFileSync(path.join(pin, 'provenance.json'), 'utf8'));
110
+ if (!isRecord(authority) ||
111
+ typeof authority.taskDir !== 'string' ||
112
+ fs.realpathSync(authority.taskDir) !== fs.realpathSync(taskDir) ||
113
+ !isDeepStrictEqual(authority.receipt, value)) {
114
+ throw new TaskProvenanceError('TASK_PROVENANCE_INVALID', 'The task receipt differs from its producer-owned installation pin.');
115
+ }
116
+ const inputsRoot = fs.realpathSync(path.join(taskDir, 'inputs'));
117
+ const within = (root, file) => file === root || file.startsWith(`${root}${path.sep}`);
118
+ const distribution = fs.realpathSync(value.retainedInputs[0].path);
119
+ if (value.package.name !== '@farmslot/cli' ||
120
+ value.source.kind !== 'task-retained' ||
121
+ distribution !== fs.realpathSync(path.join(pin, 'cli')) ||
122
+ !within(distribution, fs.realpathSync(value.source.packageRoot)) ||
123
+ !within(distribution, fs.realpathSync(value.resolvedExecutable))) {
124
+ throw new TaskProvenanceError('TASK_PROVENANCE_INVALID', 'The task must retain its Farmslot CLI installation.');
125
+ }
126
+ if (!isDeepStrictEqual(value.bindingIdentity, expectedBindingIdentity)) {
127
+ throw new TaskProvenanceError('TASK_BINDING_CHANGED', 'The selected tooling binding differs from the task binding.');
128
+ }
129
+ for (const input of value.retainedInputs) {
130
+ if (!within(inputsRoot, fs.realpathSync(input.path)) &&
131
+ !within(pin, fs.realpathSync(input.path)))
132
+ throw new TaskProvenanceError('TASK_PROVENANCE_INVALID', 'A retained task input escapes its task directory.');
133
+ if (taskInputDigest(input.path) !== input.sha256) {
134
+ throw new TaskProvenanceError('TASK_INPUT_CHANGED', `Retained task input changed: ${input.path}`);
135
+ }
136
+ }
137
+ const manifest = JSON.parse(fs.readFileSync(path.join(value.source.packageRoot, 'package.json'), 'utf8'));
138
+ if (!isRecord(manifest) ||
139
+ manifest.name !== value.package.name ||
140
+ manifest.version !== value.package.version ||
141
+ sha256(value.resolvedExecutable) !== value.entrySha256 ||
142
+ taskInputDigest(value.source.packageRoot) !== value.packageTreeSha256) {
143
+ throw new TaskProvenanceError('TASK_EXECUTABLE_CHANGED', 'The retained task executable or its package changed.');
144
+ }
145
+ return value;
146
+ }
147
+ /** Called by the task producer after selection and before it emits a marker. */
148
+ export function retainTaskExecution(taskDir, input) {
149
+ if (fs.existsSync(path.join(taskDir, receiptFile))) {
150
+ return verifyTaskExecutionProvenance(taskDir, input.bindingIdentity);
151
+ }
152
+ const distribution = fs.realpathSync(input.distributionRoot);
153
+ const packageRoot = fs.realpathSync(input.packageRoot);
154
+ const executable = fs.realpathSync(input.executable);
155
+ for (const selected of [packageRoot, executable]) {
156
+ const relative = path.relative(distribution, selected);
157
+ if (relative.startsWith(`..${path.sep}`) || relative === '..' || path.isAbsolute(relative)) {
158
+ throw new TaskProvenanceError('TASK_INSTALL_UNSUPPORTED', 'The CLI must belong to its selected installed distribution.');
159
+ }
160
+ }
161
+ const pin = taskExecutionPin(taskDir, input);
162
+ const store = taskPinRoot();
163
+ if (store === path.resolve(taskDir) || store.startsWith(`${path.resolve(taskDir)}${path.sep}`))
164
+ throw new TaskProvenanceError('TASK_PROVENANCE_INVALID', 'The installation pin store must be outside the task.');
165
+ fs.mkdirSync(store, { recursive: true });
166
+ const staging = fs.mkdtempSync(path.join(store, '.staging-'));
167
+ try {
168
+ const cli = retainTaskInput(distribution, path.join(staging, 'cli'), [
169
+ path.resolve(taskDir),
170
+ store,
171
+ ]);
172
+ const retainedInputs = [{ ...cli, path: path.join(pin, 'cli') }];
173
+ for (const source of [...new Set(input.inputs.map((file) => fs.realpathSync(file)))]) {
174
+ if (retainedInputs.some((entry) => source === entry.source || source.startsWith(`${entry.source}${path.sep}`)))
175
+ continue;
176
+ const relative = path.join('inputs', String(retainedInputs.length), path.basename(source));
177
+ const copied = retainTaskInput(source, path.join(staging, relative), [
178
+ path.resolve(taskDir),
179
+ store,
180
+ ]);
181
+ retainedInputs.push({ ...copied, path: path.join(pin, relative) });
182
+ }
183
+ fs.mkdirSync(path.join(taskDir, 'inputs'), { recursive: true });
184
+ if (input.selectedConfiguration !== undefined) {
185
+ const selection = path.resolve(taskDir, 'inputs/recipe-binding.json');
186
+ fs.writeFileSync(selection, input.selectedConfiguration, { flag: 'wx' });
187
+ retainedInputs.push({
188
+ source: selection,
189
+ path: selection,
190
+ sha256: taskInputDigest(selection),
191
+ });
192
+ }
193
+ const retainedPackage = path.join(pin, 'cli', path.relative(distribution, packageRoot));
194
+ const retainedExecutable = path.join(pin, 'cli', path.relative(distribution, executable));
195
+ const copiedPackage = path.join(staging, 'cli', path.relative(distribution, packageRoot));
196
+ const copiedExecutable = path.join(staging, 'cli', path.relative(distribution, executable));
197
+ const manifest = JSON.parse(fs.readFileSync(path.join(copiedPackage, 'package.json'), 'utf8'));
198
+ if (!isRecord(manifest) ||
199
+ manifest.name !== '@farmslot/cli' ||
200
+ typeof manifest.version !== 'string')
201
+ throw new TaskProvenanceError('TASK_INSTALL_UNSUPPORTED', 'The selected CLI has no package identity.');
202
+ const receipt = {
203
+ schemaVersion: 1,
204
+ pin,
205
+ package: { name: manifest.name, version: manifest.version },
206
+ source: { kind: 'task-retained', packageRoot: retainedPackage },
207
+ resolvedExecutable: retainedExecutable,
208
+ entrySha256: sha256(copiedExecutable),
209
+ packageTreeSha256: taskInputDigest(copiedPackage),
210
+ recordedAt: new Date().toISOString(),
211
+ bindingIdentity: input.bindingIdentity,
212
+ retainedInputs,
213
+ };
214
+ fs.writeFileSync(path.join(staging, 'provenance.json'), JSON.stringify({ taskDir: fs.realpathSync(taskDir), receipt }) + '\n', { mode: 0o444, flag: 'wx' });
215
+ fs.renameSync(staging, pin);
216
+ fs.mkdirSync(path.join(taskDir, 'artifacts'), { recursive: true });
217
+ fs.writeFileSync(path.join(taskDir, receiptFile), JSON.stringify(receipt, null, 2) + '\n', {
218
+ flag: 'wx',
219
+ });
220
+ return receipt;
221
+ }
222
+ finally {
223
+ fs.rmSync(staging, { recursive: true, force: true });
224
+ }
225
+ }
226
+ //# sourceMappingURL=execution-provenance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-provenance.js","sourceRoot":"","sources":["../../src/task-init/execution-provenance.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,11 @@
1
1
  import { type ExecutionTemplateReference, type ExecutionTemplateRunMode, type TemplateProvenance, type WorkerTerminalContractDocument } from '@farmslot/protocol';
2
2
  import type { ExecutionTemplateSource } from '../execution-template/types.js';
3
+ import { type TaskExecutionInput, type TaskExecutionProvenance } from './execution-provenance.js';
3
4
  import { type HandoffExecutionTemplate, type HandoffMetadata, type HandoffSourceKind } from './task-document.js';
4
5
  import { type WrittenTaskDir } from './write.js';
5
6
  export * from './branch-update.js';
6
7
  export * from './discover.js';
8
+ export { type TaskExecutionInput, type TaskExecutionProvenance, type TaskRecipeBindingIdentity, verifyTaskExecutionProvenance, } from './execution-provenance.js';
7
9
  export * from './task-document.js';
8
10
  export * from './write.js';
9
11
  export { renderTemplatePlaceholders } from '@farmslot/protocol';
@@ -51,12 +53,15 @@ export interface TaskInitSpec {
51
53
  /** Addendum template inserted before the checklist pointer; rendered with the same vars as the checklist. */
52
54
  addendum?: string | null;
53
55
  markCommand?: string;
56
+ /** Root CLI invocations retain tooling before the task marker is emitted. */
57
+ execution?: TaskExecutionInput;
54
58
  terminalContract?: WorkerTerminalContractDocument;
55
59
  bugInput?: unknown;
56
60
  }
57
61
  export interface TaskInitResult extends WrittenTaskDir {
58
62
  executionTemplate: HandoffExecutionTemplate;
59
63
  handoffMetadata: HandoffMetadata;
64
+ executionProvenance?: TaskExecutionProvenance;
60
65
  }
61
66
  export declare function taskInit(spec: TaskInitSpec): Promise<TaskInitResult>;
62
67
  export interface TaskProvenance {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/task-init/index.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAE7B,KAAK,kBAAkB,EACvB,KAAK,8BAA8B,EACpC,MAAM,oBAAoB,CAAC;AAO5B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAG9E,OAAO,EAML,KAAK,wBAAwB,EAC7B,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAE/D,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAE3B,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAUhE,mGAAmG;AACnG,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5C,8BAA8B,CAMhC;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,uBAAuB,EAAE,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAC;IAChB,4GAA4G;IAC5G,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,OAAO,CAAC,EAAE,wBAAwB,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,yBAAyB,CAAC;IACpC,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,kBAAkB,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QAC3C,UAAU,EAAE,iBAAiB,CAAC;QAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6GAA6G;IAC7G,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,8BAA8B,CAAC;IAClD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,iBAAiB,EAAE,wBAAwB,CAAC;IAC5C,eAAe,EAAE,eAAe,CAAC;CAClC;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CA+F1E;AAED,MAAM,WAAW,cAAc;IAC7B,iBAAiB,CAAC,EAAE,wBAAwB,GAAG,0BAA0B,CAAC;IAC1E,kBAAkB,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAAC;CACpE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAgBzE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/task-init/index.ts"],"names":[],"mappings":"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"}
@@ -11,11 +11,13 @@ import path from 'node:path';
11
11
  import { renderTemplatePlaceholders, } from '@farmslot/protocol';
12
12
  import { selectExecutionTemplate } from '../execution-template/select.js';
13
13
  import { executionTemplateReference, readExecutionTemplateSnapshot, } from '../execution-template/snapshot.js';
14
- import { installedTaskCommands } from './runtime-command.js';
14
+ import { retainTaskExecution, taskExecutionPin, } from './execution-provenance.js';
15
+ import { installedTaskCommands, quoteTaskPath } from './runtime-command.js';
15
16
  import { buildBranchUpdateGuardCommand, buildBranchUpdateInstructions, buildHandoffMetadata, buildTaskDocument, HANDOFF_INPUT, } from './task-document.js';
16
17
  import { writeTaskDir } from './write.js';
17
18
  export * from './branch-update.js';
18
19
  export * from './discover.js';
20
+ export { verifyTaskExecutionProvenance, } from './execution-provenance.js';
19
21
  export * from './task-document.js';
20
22
  export * from './write.js';
21
23
  // The renderer lives in protocol; re-exported so CLI wrappers reach it through the runtime entry.
@@ -36,6 +38,14 @@ export async function taskInit(spec) {
36
38
  ...(spec.template.explicitId ? { explicitId: spec.template.explicitId } : {}),
37
39
  });
38
40
  const taskDirLabel = spec.taskDirLabel ?? spec.taskDir;
41
+ const taskCommands = spec.execution
42
+ ? installedTaskCommands((file) => {
43
+ const relative = path.relative(spec.execution.distributionRoot, file);
44
+ if (relative === '..' || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative))
45
+ throw new Error('The task runtime must belong to the retained CLI distribution.');
46
+ return path.join(taskExecutionPin(spec.taskDir, spec.execution), 'cli', relative);
47
+ })
48
+ : installedTaskCommands();
39
49
  const vars = {
40
50
  TICKET: spec.task.ticket ?? '',
41
51
  TITLE: spec.task.title,
@@ -48,7 +58,7 @@ export async function taskInit(spec) {
48
58
  ...(spec.domain ? { DOMAIN: spec.domain } : {}),
49
59
  TEMPLATE: selected.entry.id,
50
60
  TASK_DIR: taskDirLabel,
51
- ...installedTaskCommands(),
61
+ ...taskCommands,
52
62
  ...(spec.task.sourceRef
53
63
  ? /^https?:\/\//.test(spec.task.sourceRef)
54
64
  ? { TICKET_URL: spec.task.sourceRef }
@@ -97,17 +107,28 @@ export async function taskInit(spec) {
97
107
  : null,
98
108
  hasTicketData: spec.bugInput !== undefined,
99
109
  });
110
+ const executionProvenance = spec.execution
111
+ ? retainTaskExecution(spec.taskDir, spec.execution)
112
+ : undefined;
100
113
  const written = await writeTaskDir({
101
114
  taskDir: spec.taskDir,
102
115
  taskMarkdown,
103
116
  checklistMarkdown,
104
- markCommand: spec.markCommand,
117
+ fixedMarkCommand: executionProvenance !== undefined,
118
+ markCommand: executionProvenance
119
+ ? `${quoteTaskPath(executionProvenance.resolvedExecutable)} task mark`
120
+ : spec.markCommand,
105
121
  handoff: handoffMetadata,
106
122
  terminalContract,
107
123
  bugInput: spec.bugInput,
108
124
  deterministicCommands: vars,
109
125
  });
110
- return { ...written, executionTemplate, handoffMetadata };
126
+ return {
127
+ ...written,
128
+ executionTemplate,
129
+ handoffMetadata,
130
+ ...(executionProvenance ? { executionProvenance } : {}),
131
+ };
111
132
  }
112
133
  /**
113
134
  * Selected-template provenance for a task dir. Reads `inputs/handoff.json`;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/task-init/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/task-init/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,EAAE;AACF,8EAA8E;AAC9E,gFAAgF;AAChF,kEAAkE;AAClE,uEAAuE;AAEvE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAGL,0BAA0B,GAG3B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,GAC9B,MAAM,mCAAmC,CAAC;AAG3C,OAAO,EACL,mBAAmB,EAEnB,gBAAgB,GAEjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EACL,6BAA6B,EAC7B,6BAA6B,EAC7B,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,GAId,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAuB,MAAM,YAAY,CAAC;AAE/D,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,OAAO,EAIL,6BAA6B,GAC9B,MAAM,2BAA2B,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,kGAAkG;AAClG,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAEhE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAQ/C,mGAAmG;AACnG,MAAM,UAAU,uBAAuB,CACrC,IAAY,EACZ,UAA2C,EAAE;IAE7C,MAAM,EAAE,6BAA6B,EAAE,GACrC,OAAO,CAAC,4CAA4C,CAEnD,CAAC;IACJ,OAAO,6BAA6B,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5D,CAAC;AAsDD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAkB;IAC/C,MAAM,QAAQ,GAAG,uBAAuB,CAAC;QACvC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO;QAC9B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9E,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC;IACvD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS;QACjC,CAAC,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,EAAE;YAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAU,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;YACvE,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;gBACxF,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;YACpF,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QACrF,CAAC,CAAC;QACJ,CAAC,CAAC,qBAAqB,EAAE,CAAC;IAC5B,MAAM,IAAI,GAA2B;QACnC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE;QAC9B,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;QACtB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,0EAA0E;QAC1E,uEAAuE;QACvE,mBAAmB;QACnB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE;QAC3B,QAAQ,EAAE,YAAY;QACtB,GAAG,YAAY;QACf,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS;YACrB,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;gBACxC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACrC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACvC,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;KACrB,CAAC;IACF,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC,uBAAuB,GAAG,6BAA6B,CAAC,IAAI,CAAC,CAAC;QACnE,IAAI,CAAC,sBAAsB,GAAG,6BAA6B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1E,IAAI,CAAC,0BAA0B,GAAG,6BAA6B,CAC7D,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,uBAAuB,EAC5B,IAAI,CAAC,sBAAsB,CAC5B,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,sBAAsB,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC;IACtF,MAAM,iBAAiB,GAAG,0BAA0B,CAClD,6BAA6B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,EACtD,IAAI,EACJ,MAAM,CACP,CAAC;IACF,MAAM,SAAS,GAAG,0BAA0B,CAAC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;IAChF,MAAM,iBAAiB,GAA6B;QAClD,eAAe,EAAE,QAAQ,CAAC,MAAM;QAChC,GAAG,SAAS;KACb,CAAC;IAEF,MAAM,gBAAgB,GACpB,IAAI,CAAC,gBAAgB;QACrB,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1F,MAAM,eAAe,GAAG,oBAAoB,CAAC;QAC3C,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,UAAU,EAAE;QACjD,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;QAC7B,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;QAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;QACvB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;QACtB,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU;QAChC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;QACxB,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS;QAC9B,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB;QAChD,gBAAgB;QAChB,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;QACjC,iBAAiB;KAClB,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,iBAAiB,CAAC;QACrC,QAAQ,EAAE,IAAI,CAAC,IAAI;QACnB,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,EAAE;QACrC,IAAI;QACJ,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE;QACxC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,EAAE;QACtD,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACrB,CAAC,CAAC,0BAA0B,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,wBAAwB,CAAC;YAC3E,CAAC,CAAC,IAAI;QACR,aAAa,EAAE,IAAI,CAAC,QAAQ,KAAK,SAAS;KAC3C,CAAC,CAAC;IAEH,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS;QACxC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;QACnD,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC;QACjC,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,YAAY;QACZ,iBAAiB;QACjB,gBAAgB,EAAE,mBAAmB,KAAK,SAAS;QACnD,WAAW,EAAE,mBAAmB;YAC9B,CAAC,CAAC,GAAG,aAAa,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,YAAY;YACtE,CAAC,CAAC,IAAI,CAAC,WAAW;QACpB,OAAO,EAAE,eAAe;QACxB,gBAAgB;QAChB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,qBAAqB,EAAE,IAAI;KAC5B,CAAC,CAAC;IACH,OAAO;QACL,GAAG,OAAO;QACV,iBAAiB;QACjB,eAAe;QACf,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxD,CAAC;AACJ,CAAC;AAOD;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACtD,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAoB,CAAC;QAClF,IAAI,OAAO,CAAC,iBAAiB,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAC5D,OAAO;gBACL,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtF,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1F,CAAC;QACJ,CAAC;IACH,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,0BAA0B,CAAC,CAAC;IAC5E,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAuB,CAAC;IACnF,MAAM,EAAE,iBAAiB,EAAE,GAAG,kBAAkB,EAAE,GAAG,MAAM,CAAC;IAC5D,OAAO,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,kBAAkB,EAAE,CAAC;AACrF,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { TaskRetainedInput } from './execution-provenance.js';
2
+ /** Content and executable modes, including installed dependencies and link targets. */
3
+ export declare function taskInputDigest(root: string): string;
4
+ /** Generalized task-local pinning; never installs packages or changes a global pointer. */
5
+ export declare function retainTaskInput(source: string, destination: string, excluded?: readonly string[]): TaskRetainedInput;
6
+ //# sourceMappingURL=pin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pin.d.ts","sourceRoot":"","sources":["../../src/task-init/pin.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAInE,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAmBpD;AAED,2FAA2F;AAC3F,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,QAAQ,GAAE,SAAS,MAAM,EAAO,GAC/B,iBAAiB,CA2CnB"}
@@ -0,0 +1,77 @@
1
+ import { createHash } from 'node:crypto';
2
+ import fs from 'node:fs';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ const ignored = new Set(['.git', '.omc', '.omx']);
6
+ /** Content and executable modes, including installed dependencies and link targets. */
7
+ export function taskInputDigest(root) {
8
+ const hash = createHash('sha256');
9
+ const walk = (file, relative) => {
10
+ const stat = fs.lstatSync(file);
11
+ if (stat.isDirectory()) {
12
+ hash.update(`d\0${relative}\0`);
13
+ for (const name of fs.readdirSync(file).sort()) {
14
+ if (!ignored.has(name))
15
+ walk(path.join(file, name), path.join(relative, name));
16
+ }
17
+ }
18
+ else if (stat.isSymbolicLink()) {
19
+ hash.update(`l\0${relative}\0${fs.readlinkSync(file)}\0`);
20
+ }
21
+ else if (stat.isFile()) {
22
+ hash.update(`f\0${relative}\0${stat.mode & 0o111}\0${stat.size}\0`);
23
+ hash.update(fs.readFileSync(file));
24
+ hash.update('\0');
25
+ }
26
+ else
27
+ throw new Error(`Unsupported task input: ${file}`);
28
+ };
29
+ walk(root, '');
30
+ return hash.digest('hex');
31
+ }
32
+ /** Generalized task-local pinning; never installs packages or changes a global pointer. */
33
+ export function retainTaskInput(source, destination, excluded = []) {
34
+ source = fs.realpathSync(source);
35
+ destination = path.resolve(destination);
36
+ if (destination === source)
37
+ throw new Error('A retained input cannot replace its source.');
38
+ fs.mkdirSync(path.dirname(destination), { recursive: true });
39
+ const staging = fs.realpathSync(fs.mkdtempSync(path.join(os.tmpdir(), 'farmslot-task-pin-')));
40
+ const copy = path.join(staging, 'input');
41
+ try {
42
+ fs.cpSync(source, copy, {
43
+ recursive: true,
44
+ preserveTimestamps: true,
45
+ verbatimSymlinks: true,
46
+ mode: fs.constants.COPYFILE_FICLONE,
47
+ filter: (file) => !ignored.has(path.basename(file)) &&
48
+ !excluded.some((root) => file === root || file.startsWith(`${root}${path.sep}`)),
49
+ });
50
+ const relink = (file) => {
51
+ const stat = fs.lstatSync(file);
52
+ if (stat.isDirectory()) {
53
+ for (const name of fs.readdirSync(file))
54
+ relink(path.join(file, name));
55
+ }
56
+ else if (stat.isSymbolicLink()) {
57
+ const target = fs.realpathSync(file);
58
+ if (target !== copy && !target.startsWith(`${copy}${path.sep}`)) {
59
+ if (target !== source && !target.startsWith(`${source}${path.sep}`)) {
60
+ throw new Error(`Task input has a dependency outside its installation: ${file}`);
61
+ }
62
+ fs.unlinkSync(file);
63
+ fs.symlinkSync(path.relative(path.dirname(file), path.join(copy, path.relative(source, target))) ||
64
+ '.', file);
65
+ }
66
+ }
67
+ };
68
+ relink(copy);
69
+ const sha256 = taskInputDigest(copy);
70
+ fs.renameSync(copy, destination);
71
+ return { source, path: destination, sha256 };
72
+ }
73
+ finally {
74
+ fs.rmSync(staging, { recursive: true, force: true });
75
+ }
76
+ }
77
+ //# sourceMappingURL=pin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pin.js","sourceRoot":"","sources":["../../src/task-init/pin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAElD,uFAAuF;AACvF,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,QAAgB,EAAQ,EAAE;QACpD,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,MAAM,QAAQ,IAAI,CAAC,CAAC;YAChC,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC/C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,MAAM,QAAQ,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5D,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,MAAM,QAAQ,KAAK,IAAI,CAAC,IAAI,GAAG,KAAK,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;YACpE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;;YAAM,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC;IACF,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACf,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,eAAe,CAC7B,MAAc,EACd,WAAmB,EACnB,WAA8B,EAAE;IAEhC,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACjC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACxC,IAAI,WAAW,KAAK,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC3F,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAC9F,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC;QACH,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE;YACtB,SAAS,EAAE,IAAI;YACf,kBAAkB,EAAE,IAAI;YACxB,gBAAgB,EAAE,IAAI;YACtB,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,gBAAgB;YACnC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CACf,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACjC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;SACnF,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,CAAC,IAAY,EAAQ,EAAE;YACpC,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC;oBAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YACzE,CAAC;iBAAM,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;gBACjC,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACrC,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;oBAChE,IAAI,MAAM,KAAK,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;wBACpE,MAAM,IAAI,KAAK,CAAC,yDAAyD,IAAI,EAAE,CAAC,CAAC;oBACnF,CAAC;oBACD,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBACpB,EAAE,CAAC,WAAW,CACZ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;wBAC/E,GAAG,EACL,IAAI,CACL,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACrC,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACjC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;IAC/C,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;AACH,CAAC"}
@@ -2,7 +2,9 @@
2
2
  export declare function quoteMarkCommandWord(word: string): string;
3
3
  /** Use the SDK installation that writes the task. */
4
4
  export declare function installedRuntimeScriptCommand(filename: string): string;
5
- export declare function installedTaskCommands(): {
5
+ /** Retained paths are literal shell arguments. */
6
+ export declare function quoteTaskPath(word: string): string;
7
+ export declare function installedTaskCommands(mapPath?: (file: string) => string): {
6
8
  AC_CMD: string;
7
9
  ARTIFACT_CHECK_CMD: string;
8
10
  };
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-command.d.ts","sourceRoot":"","sources":["../../src/task-init/runtime-command.ts"],"names":[],"mappings":"AAKA,2EAA2E;AAC3E,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,qDAAqD;AACrD,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,wBAAgB,qBAAqB,IAAI;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,CAGtF"}
1
+ {"version":3,"file":"runtime-command.d.ts","sourceRoot":"","sources":["../../src/task-init/runtime-command.ts"],"names":[],"mappings":"AAKA,2EAA2E;AAC3E,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,qDAAqD;AACrD,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,kDAAkD;AAClD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG;IACzE,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAIA"}
@@ -9,8 +9,13 @@ export function quoteMarkCommandWord(word) {
9
9
  export function installedRuntimeScriptCommand(filename) {
10
10
  return `node ${quoteMarkCommandWord(path.join(packageRoot, 'scripts', filename))}`;
11
11
  }
12
- export function installedTaskCommands() {
13
- const entry = installedRuntimeScriptCommand('../bin/farmslot-agent.mjs');
12
+ /** Retained paths are literal shell arguments. */
13
+ export function quoteTaskPath(word) {
14
+ return `'${word.replace(/'/g, `'"'"'`)}'`;
15
+ }
16
+ export function installedTaskCommands(mapPath) {
17
+ const file = path.join(packageRoot, 'bin/farmslot-agent.mjs');
18
+ const entry = `node ${mapPath ? quoteTaskPath(mapPath(file)) : quoteMarkCommandWord(file)}`;
14
19
  return { AC_CMD: `${entry} ac`, ARTIFACT_CHECK_CMD: `${entry} artifact-check` };
15
20
  }
16
21
  //# sourceMappingURL=runtime-command.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-command.js","sourceRoot":"","sources":["../../src/task-init/runtime-command.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAE3F,2EAA2E;AAC3E,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC;AAClD,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,6BAA6B,CAAC,QAAgB;IAC5D,OAAO,QAAQ,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,MAAM,KAAK,GAAG,6BAA6B,CAAC,2BAA2B,CAAC,CAAC;IACzE,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,KAAK,EAAE,kBAAkB,EAAE,GAAG,KAAK,iBAAiB,EAAE,CAAC;AAClF,CAAC"}
1
+ {"version":3,"file":"runtime-command.js","sourceRoot":"","sources":["../../src/task-init/runtime-command.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAE3F,2EAA2E;AAC3E,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC;AAClD,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,6BAA6B,CAAC,QAAgB;IAC5D,OAAO,QAAQ,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;AACrF,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAkC;IAItE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,QAAQ,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;IAC5F,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,KAAK,EAAE,kBAAkB,EAAE,GAAG,KAAK,iBAAiB,EAAE,CAAC;AAClF,CAAC"}
@@ -3,7 +3,7 @@ import { type HandoffMetadata } from './task-document.js';
3
3
  export { quoteMarkCommandWord } from './runtime-command.js';
4
4
  export declare const TASK_DOCUMENT = "TASK.md";
5
5
  export declare const MARK_SHIM = "mark";
6
- /** Whole-command env override honoured by every `mark` shim. */
6
+ /** Whole-command override for existing unfrozen mark shims. */
7
7
  export declare const MARK_COMMAND_ENV = "FARMSLOT_MARK_CMD";
8
8
  /** Generic default: this package's mark engine. A control plane or harness passes its own. */
9
9
  export declare function defaultMarkCommand(): string;
@@ -12,7 +12,7 @@ export declare function defaultMarkCommand(): string;
12
12
  * whole command line and stays unquoted so multi-word commands split and `$HOME`
13
13
  * expands on the machine that runs it.
14
14
  */
15
- export declare function buildMarkShim(markCommand: string): string;
15
+ export declare function buildMarkShim(markCommand: string, fixed?: boolean): string;
16
16
  export interface WriteTaskDirInput {
17
17
  /** Absolute task directory; created when missing. */
18
18
  taskDir: string;
@@ -20,6 +20,8 @@ export interface WriteTaskDirInput {
20
20
  /** null when the caller already wrote CHECKLIST.md (lightweight interactive dev). */
21
21
  checklistMarkdown: string | null;
22
22
  markCommand?: string;
23
+ /** Frozen tasks always enter their verified CLI gates. */
24
+ fixedMarkCommand?: boolean;
23
25
  handoff: HandoffMetadata;
24
26
  terminalContract: WorkerTerminalContractDocument;
25
27
  /** Project command references made available to the selected checklist. */
@@ -1 +1 @@
1
- {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/task-init/write.ts"],"names":[],"mappings":"AAQA,OAAO,EAGL,KAAK,8BAA8B,EACpC,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAGL,KAAK,eAAe,EAErB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,SAAS,SAAS,CAAC;AAChC,gEAAgE;AAChE,eAAO,MAAM,gBAAgB,sBAAsB,CAAC;AAcpD,8FAA8F;AAC9F,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAQzD;AAED,MAAM,WAAW,iBAAiB;IAChC,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,qFAAqF;IACrF,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,eAAe,CAAC;IACzB,gBAAgB,EAAE,8BAA8B,CAAC;IACjD,2EAA2E;IAC3E,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,CAepF;AAED,gFAAgF;AAChF,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,cAAc,CAAC,EAC9C,eAAe,UAAQ,GACtB,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC,CA8F/C"}
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/task-init/write.ts"],"names":[],"mappings":"AAQA,OAAO,EAGL,KAAK,8BAA8B,EACpC,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAGL,KAAK,eAAe,EAErB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,SAAS,SAAS,CAAC;AAChC,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB,sBAAsB,CAAC;AAcpD,8FAA8F;AAC9F,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,MAAM,CAUxE;AAED,MAAM,WAAW,iBAAiB;IAChC,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,qFAAqF;IACrF,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,EAAE,eAAe,CAAC;IACzB,gBAAgB,EAAE,8BAA8B,CAAC;IACjD,2EAA2E;IAC3E,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,CAepF;AAED,gFAAgF;AAChF,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,cAAc,CAAC,EAC9C,eAAe,UAAQ,GACtB,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC,CAmG/C"}
@@ -10,7 +10,7 @@ import { BUG_INPUT, HANDOFF_INPUT, normalizeAcceptanceCriteria, } from './task-d
10
10
  export { quoteMarkCommandWord } from './runtime-command.js';
11
11
  export const TASK_DOCUMENT = 'TASK.md';
12
12
  export const MARK_SHIM = 'mark';
13
- /** Whole-command env override honoured by every `mark` shim. */
13
+ /** Whole-command override for existing unfrozen mark shims. */
14
14
  export const MARK_COMMAND_ENV = 'FARMSLOT_MARK_CMD';
15
15
  const require = createRequire(import.meta.url);
16
16
  const { deterministicChecks } = require('../../scripts/worker-terminal-contract.cjs');
@@ -23,12 +23,14 @@ export function defaultMarkCommand() {
23
23
  * whole command line and stays unquoted so multi-word commands split and `$HOME`
24
24
  * expands on the machine that runs it.
25
25
  */
26
- export function buildMarkShim(markCommand) {
26
+ export function buildMarkShim(markCommand, fixed = false) {
27
27
  return [
28
28
  '#!/usr/bin/env bash',
29
29
  'set -euo pipefail',
30
30
  'DIR="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)"',
31
- `exec \${${MARK_COMMAND_ENV}:-${markCommand}} "$DIR" "$@"`,
31
+ fixed
32
+ ? `exec ${markCommand} "$DIR" "$@"`
33
+ : `exec \${${MARK_COMMAND_ENV}:-${markCommand}} "$DIR" "$@"`,
32
34
  '',
33
35
  ].join('\n');
34
36
  }
@@ -99,14 +101,14 @@ export async function ensureTaskRuntime(input, replaceExisting = false) {
99
101
  await write(checklist, input.checklistMarkdown);
100
102
  }
101
103
  const mark = path.join(taskDir, MARK_SHIM);
102
- if (await write(mark, buildMarkShim(input.markCommand ?? defaultMarkCommand())))
104
+ if (await write(mark, buildMarkShim(input.markCommand ?? defaultMarkCommand(), input.fixedMarkCommand)))
103
105
  await chmod(mark, 0o755);
104
106
  else if (input.markCommand !== undefined) {
105
107
  const current = await readFile(mark, 'utf8');
106
108
  // Refresh only the shared generated shim, leaving authored executables intact.
107
109
  if (current.startsWith('#!/usr/bin/env bash\nset -euo pipefail\nDIR=') &&
108
110
  current.includes('${FARMSLOT_MARK_CMD:-'))
109
- await writeFile(mark, buildMarkShim(input.markCommand), 'utf8');
111
+ await writeFile(mark, buildMarkShim(input.markCommand, input.fixedMarkCommand), 'utf8');
110
112
  }
111
113
  const handoff = path.join(taskDir, HANDOFF_INPUT);
112
114
  await write(handoff, `${JSON.stringify(input.handoff, null, 2)}\n`);
@@ -1 +1 @@
1
- {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/task-init/write.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/task-init/write.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farmslot/agent-runtime",
3
- "version": "0.24.0",
3
+ "version": "0.25.1",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -96,10 +96,11 @@ function parseArgs(args) {
96
96
  return { opts, catalog };
97
97
  }
98
98
 
99
- function gitOutput(args) {
99
+ function gitOutput(args, cwd = process.cwd()) {
100
100
  try {
101
101
  return execFileSync('git', args, {
102
102
  encoding: 'utf8',
103
+ cwd,
103
104
  stdio: ['ignore', 'pipe', 'ignore'],
104
105
  }).trim();
105
106
  } catch {
@@ -108,21 +109,23 @@ function gitOutput(args) {
108
109
  }
109
110
  }
110
111
 
111
- async function main() {
112
- const args = process.argv.slice(2);
112
+ export async function taskInitFromArgv(args, execution, suppliedRuntime) {
113
+ args = [...args];
113
114
  if (args.length === 0 || args[0] === '-h' || args[0] === '--help') usage(0);
114
115
  const { opts, catalog } = parseArgs(args);
115
- const runtime = await loadRuntime();
116
+ const runtime = suppliedRuntime ?? (await loadRuntime());
116
117
 
117
118
  const description = opts.taskFile
118
119
  ? readFileSync(path.resolve(opts.taskFile), 'utf8').trim()
119
120
  : (opts.taskText ?? '').trim();
120
- const toplevel = gitOutput(['rev-parse', '--show-toplevel']);
121
- const originUrl = gitOutput(['remote', 'get-url', 'origin']);
121
+ const target = execution?.bindingIdentity?.target ?? process.cwd();
122
+ const toplevel = gitOutput(['rev-parse', '--show-toplevel'], target);
123
+ const originUrl = gitOutput(['remote', 'get-url', 'origin'], target);
122
124
  const repo = opts.repo ?? (originUrl ? runtime.portableRepoIdentity(originUrl) : undefined);
123
125
  const project =
124
126
  opts.project ??
125
- (repo ? repo.split('/').pop() : path.basename(toplevel || process.cwd())).toLowerCase();
127
+ execution?.bindingIdentity?.project ??
128
+ (repo ? repo.split('/').pop() : path.basename(toplevel || target)).toLowerCase();
126
129
  // Rendered inside taskInit with the same vars as the checklist, so an addendum
127
130
  // that works on the farm works here.
128
131
  const addendum = opts.addendumFile ? readFileSync(path.resolve(opts.addendumFile), 'utf8') : null;
@@ -153,6 +156,7 @@ async function main() {
153
156
  ...(opts.modePreamble ? { modePreamble: opts.modePreamble } : {}),
154
157
  addendum,
155
158
  ...(opts.markCommand ? { markCommand: opts.markCommand } : {}),
159
+ ...(execution ? { execution } : {}),
156
160
  });
157
161
 
158
162
  if (opts.json) {
@@ -160,10 +164,11 @@ async function main() {
160
164
  } else {
161
165
  process.stdout.write(`Task document: ${result.taskDocument}\nChecklist: ${result.checklist}\n`);
162
166
  }
167
+ return result;
163
168
  }
164
169
 
165
170
  if (process.argv[1] && pathToFileURL(process.argv[1]).href === import.meta.url) {
166
- main().catch((error) => {
171
+ taskInitFromArgv(process.argv.slice(2)).catch((error) => {
167
172
  console.error(error instanceof Error ? error.message : String(error));
168
173
  process.exit(1);
169
174
  });