@farmslot/agent-runtime 0.24.0 → 0.25.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 +4 -0
- package/dist/task-init/execution-provenance.d.ts +47 -0
- package/dist/task-init/execution-provenance.d.ts.map +1 -0
- package/dist/task-init/execution-provenance.js +226 -0
- package/dist/task-init/execution-provenance.js.map +1 -0
- package/dist/task-init/index.d.ts +5 -0
- package/dist/task-init/index.d.ts.map +1 -1
- package/dist/task-init/index.js +25 -4
- package/dist/task-init/index.js.map +1 -1
- package/dist/task-init/pin.d.ts +6 -0
- package/dist/task-init/pin.d.ts.map +1 -0
- package/dist/task-init/pin.js +77 -0
- package/dist/task-init/pin.js.map +1 -0
- package/dist/task-init/runtime-command.d.ts +3 -1
- package/dist/task-init/runtime-command.d.ts.map +1 -1
- package/dist/task-init/runtime-command.js +7 -2
- package/dist/task-init/runtime-command.js.map +1 -1
- package/dist/task-init/write.d.ts +4 -2
- package/dist/task-init/write.d.ts.map +1 -1
- package/dist/task-init/write.js +7 -5
- package/dist/task-init/write.js.map +1 -1
- package/package.json +1 -1
- package/scripts/task-init-cli.mjs +13 -8
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,10 @@
|
|
|
4
4
|
|
|
5
5
|
- Active-development baseline; add user-facing changes here before release or package publication.
|
|
6
6
|
|
|
7
|
+
## 0.25.0 - 2026-10-15
|
|
8
|
+
|
|
9
|
+
- Retain task tooling and selected inputs with shared byte verification and frozen task callbacks.
|
|
10
|
+
|
|
7
11
|
## 0.24.0 - 2026-10-15
|
|
8
12
|
|
|
9
13
|
- 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));
|
|
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;
|
|
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;AAE9E,OAAO,EAEL,KAAK,kBAAkB,EAEvB,KAAK,uBAAuB,EAC7B,MAAM,2BAA2B,CAAC;AAEnC,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,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,6BAA6B,GAC9B,MAAM,2BAA2B,CAAC;AACnC,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,6EAA6E;IAC7E,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,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;IACjC,mBAAmB,CAAC,EAAE,uBAAuB,CAAC;CAC/C;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAkH1E;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"}
|
package/dist/task-init/index.js
CHANGED
|
@@ -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 {
|
|
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
|
-
...
|
|
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
|
-
|
|
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 {
|
|
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":"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,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/task-init/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"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"}
|
|
@@ -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
|
-
|
|
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;
|
|
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
|
-
|
|
13
|
-
|
|
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;
|
|
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
|
|
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
|
|
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"}
|
package/dist/task-init/write.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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":"AAAA,+EAA+E;AAC/E,sEAAsE;AAEtE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,OAAO,EACL,4BAA4B,EAC5B,8BAA8B,GAE/B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EACL,SAAS,EACT,aAAa,EAEb,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC;AACvC,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC;AAChC
|
|
1
|
+
{"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/task-init/write.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -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
|
|
112
|
-
|
|
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
|
|
121
|
-
const
|
|
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
|
-
|
|
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
|
-
|
|
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
|
});
|