@farmslot/agent-runtime 0.3.0 → 0.4.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 +8 -0
- package/bin/farmslot-agent.mjs +1 -1
- package/dist/execution-template/execution-template.test.js +278 -1
- package/dist/execution-template/execution-template.test.js.map +1 -1
- package/dist/execution-template/frontmatter.js +1 -1
- package/dist/execution-template/frontmatter.js.map +1 -1
- package/dist/execution-template/index.d.ts +8 -1
- package/dist/execution-template/index.d.ts.map +1 -1
- package/dist/execution-template/index.js +5 -0
- package/dist/execution-template/index.js.map +1 -1
- package/dist/execution-template/infer.d.ts.map +1 -1
- package/dist/execution-template/infer.js +12 -1
- package/dist/execution-template/infer.js.map +1 -1
- package/dist/execution-template/project-worker.d.ts +19 -0
- package/dist/execution-template/project-worker.d.ts.map +1 -0
- package/dist/execution-template/project-worker.js +143 -0
- package/dist/execution-template/project-worker.js.map +1 -0
- package/dist/execution-template/resolve.d.ts +1 -1
- package/dist/execution-template/resolve.d.ts.map +1 -1
- package/dist/execution-template/resolve.js +12 -2
- package/dist/execution-template/resolve.js.map +1 -1
- package/dist/execution-template/select.d.ts +8 -0
- package/dist/execution-template/select.d.ts.map +1 -0
- package/dist/execution-template/select.js +80 -0
- package/dist/execution-template/select.js.map +1 -0
- package/dist/execution-template/snapshot.d.ts +13 -0
- package/dist/execution-template/snapshot.d.ts.map +1 -0
- package/dist/execution-template/snapshot.js +46 -0
- package/dist/execution-template/snapshot.js.map +1 -0
- package/dist/execution-template/source-config.d.ts +19 -0
- package/dist/execution-template/source-config.d.ts.map +1 -0
- package/dist/execution-template/source-config.js +90 -0
- package/dist/execution-template/source-config.js.map +1 -0
- package/dist/execution-template/types.d.ts +35 -1
- package/dist/execution-template/types.d.ts.map +1 -1
- package/dist/execution-template/types.js +7 -2
- package/dist/execution-template/types.js.map +1 -1
- package/package.json +4 -3
- package/scripts/check-task-artifact-contract.mjs +25 -34
- package/scripts/execution-template-cli.mjs +150 -19
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { access, readdir, readFile } from 'node:fs/promises';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { DEFAULT_WORKER_TEMPLATE_BY_FLOW, } from '@farmslot/protocol';
|
|
5
|
+
export const PROJECT_WORKER_TEMPLATE_BY_FLOW = DEFAULT_WORKER_TEMPLATE_BY_FLOW;
|
|
6
|
+
const INTERACTIVE_PROJECT_WORKER_TEMPLATE_BY_FLOW = {
|
|
7
|
+
'fix-bug': 'fix-bug-interactive.md',
|
|
8
|
+
dev: 'dev-interactive.md',
|
|
9
|
+
'pr-complete': 'pr-complete-interactive.md',
|
|
10
|
+
};
|
|
11
|
+
export function defaultProjectWorkerTemplateFileName(flow) {
|
|
12
|
+
return PROJECT_WORKER_TEMPLATE_BY_FLOW[flow] ?? `${flow}.md`;
|
|
13
|
+
}
|
|
14
|
+
export function parseProjectWorkerTemplateFileName(flow, fileName) {
|
|
15
|
+
if (path.basename(fileName) !== fileName || !fileName.endsWith('.md'))
|
|
16
|
+
return null;
|
|
17
|
+
const defaultFileName = defaultProjectWorkerTemplateFileName(flow);
|
|
18
|
+
if (fileName === defaultFileName)
|
|
19
|
+
return { variant: null, isDefault: true };
|
|
20
|
+
const prefix = `${defaultFileName.replace(/\.md$/, '')}-`;
|
|
21
|
+
if (!fileName.startsWith(prefix))
|
|
22
|
+
return null;
|
|
23
|
+
const variant = fileName.slice(prefix.length, -'.md'.length).trim();
|
|
24
|
+
if (!/^[a-z0-9](?:[a-z0-9._-]{0,62}[a-z0-9])?$/.test(variant))
|
|
25
|
+
return null;
|
|
26
|
+
return { variant, isDefault: false };
|
|
27
|
+
}
|
|
28
|
+
function projectWorkerTemplateLabel(flow, fileName, variant, isDefault) {
|
|
29
|
+
if (isDefault)
|
|
30
|
+
return `${flow} (default)`;
|
|
31
|
+
return variant ? `${flow} · ${variant}` : fileName;
|
|
32
|
+
}
|
|
33
|
+
function projectWorkerTemplateOption(flow, fileName) {
|
|
34
|
+
const parsed = parseProjectWorkerTemplateFileName(flow, fileName);
|
|
35
|
+
if (!parsed)
|
|
36
|
+
return null;
|
|
37
|
+
return {
|
|
38
|
+
flowType: flow,
|
|
39
|
+
fileName,
|
|
40
|
+
variant: parsed.variant,
|
|
41
|
+
label: projectWorkerTemplateLabel(flow, fileName, parsed.variant, parsed.isDefault),
|
|
42
|
+
isDefault: parsed.isDefault,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export async function listProjectWorkerTemplateOptions(projectTemplatesDir, flow) {
|
|
46
|
+
const workerDir = path.join(projectTemplatesDir, 'worker');
|
|
47
|
+
if (!existsSync(workerDir))
|
|
48
|
+
return [];
|
|
49
|
+
const files = (await readdir(workerDir)).filter((file) => file.endsWith('.md'));
|
|
50
|
+
return files
|
|
51
|
+
.map((file) => projectWorkerTemplateOption(flow, file))
|
|
52
|
+
.filter((option) => Boolean(option))
|
|
53
|
+
.sort((a, b) => {
|
|
54
|
+
if (a.isDefault !== b.isDefault)
|
|
55
|
+
return a.isDefault ? -1 : 1;
|
|
56
|
+
return a.fileName.localeCompare(b.fileName);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
export function normalizeProjectWorkerTemplateSelection(flow, selection) {
|
|
60
|
+
const fileName = path.basename(selection.fileName ?? '');
|
|
61
|
+
if (!fileName || fileName !== selection.fileName || !fileName.endsWith('.md')) {
|
|
62
|
+
throw new Error(`Invalid worker template selection for ${flow}: fileName must be a project-owned markdown basename`);
|
|
63
|
+
}
|
|
64
|
+
const parsed = parseProjectWorkerTemplateFileName(flow, fileName);
|
|
65
|
+
if (!parsed) {
|
|
66
|
+
const defaultFileName = defaultProjectWorkerTemplateFileName(flow);
|
|
67
|
+
throw new Error(`Invalid worker template selection for ${flow}: ${fileName} does not match ${defaultFileName} or ${defaultFileName.replace(/\.md$/, '')}-<variant>.md (lowercase variant, no trailing punctuation)`);
|
|
68
|
+
}
|
|
69
|
+
if (selection.variant != null && selection.variant !== parsed.variant) {
|
|
70
|
+
throw new Error(`Invalid worker template selection for ${flow}: variant ${selection.variant} does not match ${fileName}`);
|
|
71
|
+
}
|
|
72
|
+
return { fileName, variant: parsed.variant };
|
|
73
|
+
}
|
|
74
|
+
export async function resolveProjectWorkerTemplate(projectTemplatesDir, flow, selection, source, reason) {
|
|
75
|
+
const selectionSource = source ?? (selection ? 'explicit' : 'default');
|
|
76
|
+
const normalized = selection
|
|
77
|
+
? normalizeProjectWorkerTemplateSelection(flow, selection)
|
|
78
|
+
: { fileName: defaultProjectWorkerTemplateFileName(flow), variant: null };
|
|
79
|
+
const parsed = parseProjectWorkerTemplateFileName(flow, normalized.fileName);
|
|
80
|
+
if (!parsed) {
|
|
81
|
+
throw new Error(`Invalid worker template selection for ${flow}: ${normalized.fileName}`);
|
|
82
|
+
}
|
|
83
|
+
const templatePath = path.join(projectTemplatesDir, 'worker', normalized.fileName);
|
|
84
|
+
if (!existsSync(templatePath)) {
|
|
85
|
+
const prefix = selection ? 'selected ' : '';
|
|
86
|
+
throw new Error(`${prefix}Worker template not found: ${templatePath}`);
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
flowType: flow,
|
|
90
|
+
fileName: normalized.fileName,
|
|
91
|
+
variant: parsed.variant,
|
|
92
|
+
label: projectWorkerTemplateLabel(flow, normalized.fileName, parsed.variant, parsed.isDefault),
|
|
93
|
+
isDefault: parsed.isDefault,
|
|
94
|
+
templatePath,
|
|
95
|
+
content: await readFile(templatePath, 'utf8'),
|
|
96
|
+
selectionSource,
|
|
97
|
+
selectionReason: reason ??
|
|
98
|
+
(selectionSource === 'explicit'
|
|
99
|
+
? 'explicit taskTemplate selection'
|
|
100
|
+
: 'default flow template selection'),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
export function domainProjectWorkerTemplateFileName(flow, domain) {
|
|
104
|
+
const defaultBase = defaultProjectWorkerTemplateFileName(flow).replace(/\.md$/, '');
|
|
105
|
+
const fileName = `${defaultBase}-${domain}.md`;
|
|
106
|
+
return parseProjectWorkerTemplateFileName(flow, fileName) ? fileName : null;
|
|
107
|
+
}
|
|
108
|
+
async function projectWorkerTemplateExists(projectTemplatesDir, fileName) {
|
|
109
|
+
try {
|
|
110
|
+
await access(path.join(projectTemplatesDir, 'worker', fileName));
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
const code = error.code;
|
|
115
|
+
if (code === 'ENOENT' || code === 'ENOTDIR')
|
|
116
|
+
return false;
|
|
117
|
+
throw error;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function interactiveSelectionSource(flow) {
|
|
121
|
+
if (flow === 'fix-bug')
|
|
122
|
+
return 'implicit-interactive-fix-bug';
|
|
123
|
+
if (flow === 'dev')
|
|
124
|
+
return 'implicit-interactive-dev';
|
|
125
|
+
return 'implicit-interactive-pr-complete';
|
|
126
|
+
}
|
|
127
|
+
export async function resolveProjectWorkerTemplateForRun(projectTemplatesDir, flow, mode, selection, domain) {
|
|
128
|
+
if (selection)
|
|
129
|
+
return resolveProjectWorkerTemplate(projectTemplatesDir, flow, selection);
|
|
130
|
+
const interactiveFileName = mode === 'interactive' ? INTERACTIVE_PROJECT_WORKER_TEMPLATE_BY_FLOW[flow] : undefined;
|
|
131
|
+
if (interactiveFileName &&
|
|
132
|
+
(await projectWorkerTemplateExists(projectTemplatesDir, interactiveFileName))) {
|
|
133
|
+
return resolveProjectWorkerTemplate(projectTemplatesDir, flow, { fileName: interactiveFileName }, interactiveSelectionSource(flow), `${flow} interactive mode selected ${interactiveFileName} because it exists`);
|
|
134
|
+
}
|
|
135
|
+
const domainFileName = domain ? domainProjectWorkerTemplateFileName(flow, domain) : null;
|
|
136
|
+
if (domainFileName && (await projectWorkerTemplateExists(projectTemplatesDir, domainFileName))) {
|
|
137
|
+
return resolveProjectWorkerTemplate(projectTemplatesDir, flow, { fileName: domainFileName }, 'implicit-domain', `domain '${domain}' selected ${domainFileName} because it exists`);
|
|
138
|
+
}
|
|
139
|
+
return resolveProjectWorkerTemplate(projectTemplatesDir, flow, null, 'default', interactiveFileName
|
|
140
|
+
? `${interactiveFileName} absent, using default ${flow} template`
|
|
141
|
+
: undefined);
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=project-worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-worker.js","sourceRoot":"","sources":["../../src/execution-template/project-worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import type { ExecutionTemplateEntry, ExecutionTemplateSource, ListExecutionTemp
|
|
|
5
5
|
*/
|
|
6
6
|
export declare function listExecutionTemplates(options: ListExecutionTemplatesOptions): ExecutionTemplateEntry[];
|
|
7
7
|
/** Convenience: build a project worker-flat source. */
|
|
8
|
-
export declare function projectWorkerTemplateSource(projectName: string, projectTemplatesDir: string): ExecutionTemplateSource;
|
|
8
|
+
export declare function projectWorkerTemplateSource(projectName: string, projectTemplatesDir: string, sourceRevision?: string, sourceDirty?: boolean): ExecutionTemplateSource;
|
|
9
9
|
/** Convenience: build a package flow-tree source (e.g. recipe-cook references/templates). */
|
|
10
10
|
export declare function packageFlowTreeTemplateSource(packageId: string, templatesRoot: string): ExecutionTemplateSource;
|
|
11
11
|
export declare function customTemplateSource(customId: string, root: string, layout?: ExecutionTemplateSource['layout']): ExecutionTemplateSource;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/execution-template/resolve.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/execution-template/resolve.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,sBAAsB,EACtB,uBAAuB,EACvB,6BAA6B,EAC9B,MAAM,YAAY,CAAC;AA6DpB;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,6BAA6B,GACrC,sBAAsB,EAAE,CA+C1B;AAED,uDAAuD;AACvD,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,MAAM,EACnB,mBAAmB,EAAE,MAAM,EAC3B,cAAc,CAAC,EAAE,MAAM,EACvB,WAAW,CAAC,EAAE,OAAO,GACpB,uBAAuB,CASzB;AAED,6FAA6F;AAC7F,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,GACpB,uBAAuB,CAOzB;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,uBAAuB,CAAC,QAAQ,CAAe,GACtD,uBAAuB,CAOzB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
+
import { EXECUTION_TEMPLATE_DOMAIN_LABEL_PREFIX } from '@farmslot/protocol';
|
|
3
4
|
import { inferTemplateMetadata } from './infer.js';
|
|
4
5
|
const SOURCE_KIND_RANK = {
|
|
5
6
|
custom: 0,
|
|
@@ -37,13 +38,20 @@ function listMarkdownFiles(root, layout) {
|
|
|
37
38
|
function matchesFilters(entry, options) {
|
|
38
39
|
if (options.flow && entry.flow !== options.flow)
|
|
39
40
|
return false;
|
|
40
|
-
if (options.runMode && entry.runMode !== options.runMode)
|
|
41
|
+
if (options.runMode && entry.runMode !== null && entry.runMode !== options.runMode)
|
|
41
42
|
return false;
|
|
42
43
|
if (options.platform) {
|
|
43
44
|
const platforms = entry.platforms;
|
|
44
45
|
if (!platforms.includes('*') && !platforms.includes(options.platform))
|
|
45
46
|
return false;
|
|
46
47
|
}
|
|
48
|
+
if (options.domain) {
|
|
49
|
+
const domainLabels = entry.labels.filter((label) => label.startsWith(EXECUTION_TEMPLATE_DOMAIN_LABEL_PREFIX));
|
|
50
|
+
if (domainLabels.length > 0 &&
|
|
51
|
+
!domainLabels.includes(`${EXECUTION_TEMPLATE_DOMAIN_LABEL_PREFIX}${options.domain}`)) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
47
55
|
return true;
|
|
48
56
|
}
|
|
49
57
|
/**
|
|
@@ -98,12 +106,14 @@ export function listExecutionTemplates(options) {
|
|
|
98
106
|
});
|
|
99
107
|
}
|
|
100
108
|
/** Convenience: build a project worker-flat source. */
|
|
101
|
-
export function projectWorkerTemplateSource(projectName, projectTemplatesDir) {
|
|
109
|
+
export function projectWorkerTemplateSource(projectName, projectTemplatesDir, sourceRevision, sourceDirty) {
|
|
102
110
|
return {
|
|
103
111
|
id: `project:${projectName}`,
|
|
104
112
|
kind: 'project',
|
|
105
113
|
root: path.join(projectTemplatesDir, 'worker'),
|
|
106
114
|
layout: 'worker-flat',
|
|
115
|
+
...(sourceRevision ? { sourceRevision } : {}),
|
|
116
|
+
...(sourceDirty === undefined ? {} : { sourceDirty }),
|
|
107
117
|
};
|
|
108
118
|
}
|
|
109
119
|
/** Convenience: build a package flow-tree source (e.g. recipe-cook references/templates). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/execution-template/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAOnD,MAAM,gBAAgB,GAAoD;IACxE,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,CAAC;IACZ,IAAI,EAAE,CAAC;IACP,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,CAAC;CACZ,CAAC;AAEF,SAAS,iBAAiB,CAAC,IAAY,EAAE,MAAyC;IAChF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;QAAE,OAAO,EAAE,CAAC;IAClE,MAAM,GAAG,GAAa,EAAE,CAAC;IAEzB,IAAI,MAAM,KAAK,aAAa,EAAE,CAAC;QAC7B,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YAC/D,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,gEAAgE;IAChE,KAAK,MAAM,SAAS,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACnE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;YAAE,SAAS;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QAChD,KAAK,MAAM,SAAS,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACtE,IAAI,SAAS,CAAC,MAAM,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,cAAc,CACrB,KAA6B,EAC7B,OAAsC;IAEtC,IAAI,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,IAAI,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/execution-template/resolve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type ExecutionTemplateEntry, type ListCompatibleExecutionTemplatesOptions, type SelectedExecutionTemplate, type SelectExecutionTemplateOptions } from './types.js';
|
|
2
|
+
export declare function listCompatibleExecutionTemplates(options: ListCompatibleExecutionTemplatesOptions): ExecutionTemplateEntry[];
|
|
3
|
+
/**
|
|
4
|
+
* Select one configured-catalog template. Source precedence has already
|
|
5
|
+
* resolved duplicate ids; it never chooses between distinct compatible ids.
|
|
6
|
+
*/
|
|
7
|
+
export declare function selectExecutionTemplate(options: SelectExecutionTemplateOptions): SelectedExecutionTemplate;
|
|
8
|
+
//# sourceMappingURL=select.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/execution-template/select.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,KAAK,sBAAsB,EAE3B,KAAK,uCAAuC,EAC5C,KAAK,yBAAyB,EAC9B,KAAK,8BAA8B,EACpC,MAAM,YAAY,CAAC;AA+CpB,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,uCAAuC,GAC/C,sBAAsB,EAAE,CAS1B;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,8BAA8B,GACtC,yBAAyB,CAmD3B"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { EXECUTION_TEMPLATE_DOMAIN_LABEL_PREFIX, } from '@farmslot/protocol';
|
|
2
|
+
import { listExecutionTemplates } from './resolve.js';
|
|
3
|
+
import { executionTemplateReference } from './snapshot.js';
|
|
4
|
+
import { ExecutionTemplateSelectionError, } from './types.js';
|
|
5
|
+
function domainLabels(entry) {
|
|
6
|
+
return entry.labels.filter((label) => label.startsWith(EXECUTION_TEMPLATE_DOMAIN_LABEL_PREFIX));
|
|
7
|
+
}
|
|
8
|
+
function isCompatible(entry, options) {
|
|
9
|
+
if (entry.shadowedBy)
|
|
10
|
+
return false;
|
|
11
|
+
if (entry.flow !== options.flow)
|
|
12
|
+
return false;
|
|
13
|
+
if (!entry.platforms.includes('*') && !entry.platforms.includes(options.platform))
|
|
14
|
+
return false;
|
|
15
|
+
if (entry.runMode !== null && entry.runMode !== options.runMode)
|
|
16
|
+
return false;
|
|
17
|
+
const labels = domainLabels(entry);
|
|
18
|
+
if (labels.length === 0)
|
|
19
|
+
return true;
|
|
20
|
+
return (options.domain !== undefined &&
|
|
21
|
+
labels.includes(`${EXECUTION_TEMPLATE_DOMAIN_LABEL_PREFIX}${options.domain}`));
|
|
22
|
+
}
|
|
23
|
+
function defaultMatches(when, options) {
|
|
24
|
+
return ((when.flow === undefined || when.flow === options.flow) &&
|
|
25
|
+
(when.platform === undefined || when.platform === options.platform) &&
|
|
26
|
+
(when.runMode === undefined || when.runMode === options.runMode) &&
|
|
27
|
+
(when.domain === undefined || when.domain === options.domain));
|
|
28
|
+
}
|
|
29
|
+
function compatibleIds(entries) {
|
|
30
|
+
const ids = entries.map((entry) => entry.id).sort();
|
|
31
|
+
return ids.length === 0 ? '(none)' : ids.join(', ');
|
|
32
|
+
}
|
|
33
|
+
function selected(entry, reason) {
|
|
34
|
+
return { entry, reason, reference: executionTemplateReference(entry) };
|
|
35
|
+
}
|
|
36
|
+
export function listCompatibleExecutionTemplates(options) {
|
|
37
|
+
const participatingSources = options.sources.filter((source) => !source.domains || (options.domain !== undefined && source.domains.includes(options.domain)));
|
|
38
|
+
return listExecutionTemplates({
|
|
39
|
+
sources: participatingSources,
|
|
40
|
+
includeShadowed: true,
|
|
41
|
+
}).filter((entry) => isCompatible(entry, options));
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Select one configured-catalog template. Source precedence has already
|
|
45
|
+
* resolved duplicate ids; it never chooses between distinct compatible ids.
|
|
46
|
+
*/
|
|
47
|
+
export function selectExecutionTemplate(options) {
|
|
48
|
+
const compatible = listCompatibleExecutionTemplates(options);
|
|
49
|
+
if (options.explicitId) {
|
|
50
|
+
const explicit = compatible.find((entry) => entry.id === options.explicitId);
|
|
51
|
+
if (!explicit) {
|
|
52
|
+
throw new ExecutionTemplateSelectionError('missing-or-incompatible', `Execution template "${options.explicitId}" is missing or incompatible. Compatible ids: ${compatibleIds(compatible)}.`);
|
|
53
|
+
}
|
|
54
|
+
return selected(explicit, 'explicit');
|
|
55
|
+
}
|
|
56
|
+
const matchingDefault = options.defaults?.find((rule) => defaultMatches(rule.when, options));
|
|
57
|
+
if (matchingDefault) {
|
|
58
|
+
const target = compatible.find((entry) => entry.id === matchingDefault.templateId);
|
|
59
|
+
if (!target) {
|
|
60
|
+
throw new ExecutionTemplateSelectionError('missing-or-incompatible', `Configured execution-template default "${matchingDefault.templateId}" is missing or incompatible. Compatible ids: ${compatibleIds(compatible)}.`);
|
|
61
|
+
}
|
|
62
|
+
return selected(target, 'configured-default');
|
|
63
|
+
}
|
|
64
|
+
const exactDomain = options.domain
|
|
65
|
+
? compatible.filter((entry) => domainLabels(entry).includes(`${EXECUTION_TEMPLATE_DOMAIN_LABEL_PREFIX}${options.domain}`))
|
|
66
|
+
: [];
|
|
67
|
+
if (exactDomain.length === 1)
|
|
68
|
+
return selected(exactDomain[0], 'single-domain-candidate');
|
|
69
|
+
if (exactDomain.length > 1) {
|
|
70
|
+
throw new ExecutionTemplateSelectionError('ambiguous', `Execution-template selection is ambiguous for domain "${options.domain}". Choose one exact id: ${compatibleIds(exactDomain)}.`);
|
|
71
|
+
}
|
|
72
|
+
const general = compatible.filter((entry) => domainLabels(entry).length === 0);
|
|
73
|
+
if (general.length === 1)
|
|
74
|
+
return selected(general[0], 'single-general-candidate');
|
|
75
|
+
if (general.length === 0) {
|
|
76
|
+
throw new ExecutionTemplateSelectionError('no-compatible-template', 'No compatible execution template exists for the requested inputs.');
|
|
77
|
+
}
|
|
78
|
+
throw new ExecutionTemplateSelectionError('ambiguous', `Execution-template selection is ambiguous. Choose one exact id: ${compatibleIds(general)}.`);
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.js","sourceRoot":"","sources":["../../src/execution-template/select.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ExecutionTemplateReference } from '@farmslot/protocol';
|
|
2
|
+
import type { ExecutionTemplateEntry } from './types.js';
|
|
3
|
+
export declare function sha256Text(text: string): string;
|
|
4
|
+
export declare function executionTemplateReference(entry: ExecutionTemplateEntry, renderedMarkdown?: string): ExecutionTemplateReference;
|
|
5
|
+
export declare function readExecutionTemplateSnapshot(entry: ExecutionTemplateEntry): {
|
|
6
|
+
markdown: string;
|
|
7
|
+
reference: ExecutionTemplateReference;
|
|
8
|
+
};
|
|
9
|
+
export declare function materializeExecutionTemplate(entry: ExecutionTemplateEntry, outputPath: string): {
|
|
10
|
+
path: string;
|
|
11
|
+
reference: ExecutionTemplateReference;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/execution-template/snapshot.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAErE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,sBAAsB,EAC7B,gBAAgB,CAAC,EAAE,MAAM,GACxB,0BAA0B,CAkB5B;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,sBAAsB,GAAG;IAC5E,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,0BAA0B,CAAC;CACvC,CAQA;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,sBAAsB,EAC7B,UAAU,EAAE,MAAM,GACjB;IACD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,0BAA0B,CAAC;CACvC,CAYA"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
export function sha256Text(text) {
|
|
5
|
+
return createHash('sha256').update(text).digest('hex');
|
|
6
|
+
}
|
|
7
|
+
export function executionTemplateReference(entry, renderedMarkdown) {
|
|
8
|
+
const declaredVersion = entry.frontmatter?.version;
|
|
9
|
+
return {
|
|
10
|
+
id: entry.id,
|
|
11
|
+
sourceId: entry.sourceId,
|
|
12
|
+
flow: entry.flow,
|
|
13
|
+
...(entry.runMode ? { runMode: entry.runMode } : {}),
|
|
14
|
+
platforms: entry.platforms,
|
|
15
|
+
labels: entry.labels,
|
|
16
|
+
relativePath: entry.relativePath,
|
|
17
|
+
...(entry.sourceRevision ? { sourceRevision: entry.sourceRevision } : {}),
|
|
18
|
+
...(entry.sourceDirty === undefined ? {} : { sourceDirty: entry.sourceDirty }),
|
|
19
|
+
...(declaredVersion == null || declaredVersion === ''
|
|
20
|
+
? {}
|
|
21
|
+
: { version: String(declaredVersion) }),
|
|
22
|
+
sha256: entry.sha256,
|
|
23
|
+
...(renderedMarkdown === undefined ? {} : { renderedSha256: sha256Text(renderedMarkdown) }),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export function readExecutionTemplateSnapshot(entry) {
|
|
27
|
+
const markdown = readFileSync(entry.path, 'utf8');
|
|
28
|
+
if (sha256Text(markdown) !== entry.sha256) {
|
|
29
|
+
throw new Error(`Execution template "${entry.id}" changed after catalog resolution. Refresh the catalog and select it again.`);
|
|
30
|
+
}
|
|
31
|
+
return { markdown, reference: executionTemplateReference(entry) };
|
|
32
|
+
}
|
|
33
|
+
export function materializeExecutionTemplate(entry, outputPath) {
|
|
34
|
+
const destination = path.resolve(outputPath);
|
|
35
|
+
if (existsSync(destination)) {
|
|
36
|
+
throw new Error(`Execution-template destination already exists: ${destination}`);
|
|
37
|
+
}
|
|
38
|
+
const snapshot = readExecutionTemplateSnapshot(entry);
|
|
39
|
+
mkdirSync(path.dirname(destination), { recursive: true });
|
|
40
|
+
writeFileSync(destination, snapshot.markdown, { encoding: 'utf8', flag: 'wx' });
|
|
41
|
+
return {
|
|
42
|
+
path: destination,
|
|
43
|
+
reference: executionTemplateReference(entry, snapshot.markdown),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/execution-template/snapshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ProjectExecutionTemplatesConfig, UnavailableExecutionTemplateSource } from '@farmslot/protocol';
|
|
2
|
+
import type { ExecutionTemplateSource } from './types.js';
|
|
3
|
+
export type { UnavailableExecutionTemplateSource } from '@farmslot/protocol';
|
|
4
|
+
export interface ResolvedExecutionTemplateSources {
|
|
5
|
+
sources: ExecutionTemplateSource[];
|
|
6
|
+
unavailable: UnavailableExecutionTemplateSource[];
|
|
7
|
+
}
|
|
8
|
+
export interface ResolveConfiguredExecutionTemplateSourcesOptions {
|
|
9
|
+
projectPackRoot: string;
|
|
10
|
+
env?: NodeJS.ProcessEnv;
|
|
11
|
+
}
|
|
12
|
+
export declare function executionTemplateSourceRevision(root: string): string | undefined;
|
|
13
|
+
export declare function executionTemplateSourceDirty(root: string): boolean | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* Resolve optional configured sources only when catalog options are requested.
|
|
16
|
+
* Missing roots are diagnostics, not project-load failures.
|
|
17
|
+
*/
|
|
18
|
+
export declare function resolveConfiguredExecutionTemplateSources(config: ProjectExecutionTemplatesConfig | undefined, options: ResolveConfiguredExecutionTemplateSourcesOptions): ResolvedExecutionTemplateSources;
|
|
19
|
+
//# sourceMappingURL=source-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-config.d.ts","sourceRoot":"","sources":["../../src/execution-template/source-config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,+BAA+B,EAC/B,kCAAkC,EACnC,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE1D,YAAY,EAAE,kCAAkC,EAAE,MAAM,oBAAoB,CAAC;AAE7E,MAAM,WAAW,gCAAgC;IAC/C,OAAO,EAAE,uBAAuB,EAAE,CAAC;IACnC,WAAW,EAAE,kCAAkC,EAAE,CAAC;CACnD;AAED,MAAM,WAAW,gDAAgD;IAC/D,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAUD,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQhF;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAO9E;AAeD;;;GAGG;AACH,wBAAgB,yCAAyC,CACvD,MAAM,EAAE,+BAA+B,GAAG,SAAS,EACnD,OAAO,EAAE,gDAAgD,GACxD,gCAAgC,CAoDlC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { spawnSync } from 'node:child_process';
|
|
2
|
+
import { existsSync, realpathSync, statSync } from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
function isWithin(base, candidate) {
|
|
5
|
+
const relative = path.relative(base, candidate);
|
|
6
|
+
return (relative === '' ||
|
|
7
|
+
(!relative.startsWith(`..${path.sep}`) && relative !== '..' && !path.isAbsolute(relative)));
|
|
8
|
+
}
|
|
9
|
+
export function executionTemplateSourceRevision(root) {
|
|
10
|
+
const result = spawnSync('git', ['-C', root, 'rev-parse', 'HEAD'], {
|
|
11
|
+
encoding: 'utf8',
|
|
12
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
13
|
+
});
|
|
14
|
+
if (result.status !== 0)
|
|
15
|
+
return undefined;
|
|
16
|
+
const revision = result.stdout.trim();
|
|
17
|
+
return /^[0-9a-f]{40}$/i.test(revision) ? revision : undefined;
|
|
18
|
+
}
|
|
19
|
+
export function executionTemplateSourceDirty(root) {
|
|
20
|
+
const result = spawnSync('git', ['-C', root, 'status', '--porcelain', '--', '.'], {
|
|
21
|
+
encoding: 'utf8',
|
|
22
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
23
|
+
});
|
|
24
|
+
if (result.status !== 0)
|
|
25
|
+
return undefined;
|
|
26
|
+
return result.stdout.trim().length > 0;
|
|
27
|
+
}
|
|
28
|
+
function configuredRoot(source, options) {
|
|
29
|
+
if (typeof source.root.env === 'string') {
|
|
30
|
+
const value = (options.env ?? process.env)[source.root.env]?.trim();
|
|
31
|
+
if (!value)
|
|
32
|
+
return { reason: 'missing-environment' };
|
|
33
|
+
if (!path.isAbsolute(value))
|
|
34
|
+
return { reason: 'invalid-root' };
|
|
35
|
+
return { path: value };
|
|
36
|
+
}
|
|
37
|
+
return { path: path.resolve(options.projectPackRoot, source.root.projectPath) };
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Resolve optional configured sources only when catalog options are requested.
|
|
41
|
+
* Missing roots are diagnostics, not project-load failures.
|
|
42
|
+
*/
|
|
43
|
+
export function resolveConfiguredExecutionTemplateSources(config, options) {
|
|
44
|
+
const resolved = [];
|
|
45
|
+
const unavailable = [];
|
|
46
|
+
for (const source of config?.sources ?? []) {
|
|
47
|
+
const rootResult = configuredRoot(source, options);
|
|
48
|
+
if (!rootResult.path) {
|
|
49
|
+
unavailable.push({ id: source.id, reason: rootResult.reason ?? 'invalid-root' });
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (!existsSync(rootResult.path) || !statSync(rootResult.path).isDirectory()) {
|
|
53
|
+
unavailable.push({ id: source.id, reason: 'missing-root' });
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
const canonicalRoot = realpathSync(rootResult.path);
|
|
57
|
+
if ('projectPath' in source.root &&
|
|
58
|
+
!isWithin(realpathSync(options.projectPackRoot), canonicalRoot)) {
|
|
59
|
+
unavailable.push({ id: source.id, reason: 'invalid-root' });
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
const scanPath = path.resolve(canonicalRoot, source.subpath ?? '.');
|
|
63
|
+
if (!isWithin(canonicalRoot, scanPath)) {
|
|
64
|
+
unavailable.push({ id: source.id, reason: 'invalid-root' });
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
if (!existsSync(scanPath) || !statSync(scanPath).isDirectory()) {
|
|
68
|
+
unavailable.push({ id: source.id, reason: 'missing-root' });
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
const canonicalScanPath = realpathSync(scanPath);
|
|
72
|
+
if (!isWithin(canonicalRoot, canonicalScanPath)) {
|
|
73
|
+
unavailable.push({ id: source.id, reason: 'invalid-root' });
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
const sourceRevision = executionTemplateSourceRevision(canonicalScanPath);
|
|
77
|
+
const sourceDirty = executionTemplateSourceDirty(canonicalScanPath);
|
|
78
|
+
resolved.push({
|
|
79
|
+
id: source.id,
|
|
80
|
+
kind: source.kind,
|
|
81
|
+
root: canonicalScanPath,
|
|
82
|
+
layout: 'flow-tree',
|
|
83
|
+
...(source.domains ? { domains: source.domains } : {}),
|
|
84
|
+
...(sourceRevision ? { sourceRevision } : {}),
|
|
85
|
+
...(sourceDirty === undefined ? {} : { sourceDirty }),
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
return { sources: resolved, unavailable };
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=source-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-config.js","sourceRoot":"","sources":["../../src/execution-template/source-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/** Shared Markdown execution-template catalog (ADR-049). */
|
|
2
|
+
import type { ExecutionTemplateDefault, ExecutionTemplateReference, ExecutionTemplateRunMode } from '@farmslot/protocol';
|
|
2
3
|
export type ExecutionTemplateSourceKind = 'custom' | 'project' | 'workspace' | 'user' | 'package' | 'fallback';
|
|
3
4
|
export type ExecutionTemplateLayout = 'flow-tree' | 'worker-flat';
|
|
4
|
-
export type ExecutionRunMode =
|
|
5
|
+
export type ExecutionRunMode = ExecutionTemplateRunMode;
|
|
5
6
|
export interface ExecutionTemplateSource {
|
|
6
7
|
/** Stable source label for catalogs / shadowing (e.g. project:farmslot-farm). */
|
|
7
8
|
id: string;
|
|
@@ -9,6 +10,12 @@ export interface ExecutionTemplateSource {
|
|
|
9
10
|
/** Absolute directory to scan. */
|
|
10
11
|
root: string;
|
|
11
12
|
layout: ExecutionTemplateLayout;
|
|
13
|
+
/** Exact domains supplied by source configuration. */
|
|
14
|
+
domains?: string[];
|
|
15
|
+
/** Git revision of the source root when available. */
|
|
16
|
+
sourceRevision?: string;
|
|
17
|
+
/** True when the source checkout had uncommitted changes. */
|
|
18
|
+
sourceDirty?: boolean;
|
|
12
19
|
}
|
|
13
20
|
export interface ExecutionTemplateFrontmatter {
|
|
14
21
|
id?: string;
|
|
@@ -32,16 +39,43 @@ export interface ExecutionTemplateEntry {
|
|
|
32
39
|
relativePath: string;
|
|
33
40
|
sourceId: string;
|
|
34
41
|
sourceKind: ExecutionTemplateSourceKind;
|
|
42
|
+
/** SHA-256 of the source Markdown before rendering. */
|
|
43
|
+
sha256: string;
|
|
44
|
+
sourceRevision?: string;
|
|
45
|
+
sourceDirty?: boolean;
|
|
35
46
|
/** Present when a higher-precedence source already claimed this id. */
|
|
36
47
|
shadowedBy?: string;
|
|
37
48
|
frontmatter: ExecutionTemplateFrontmatter | null;
|
|
38
49
|
heading: string | null;
|
|
39
50
|
}
|
|
51
|
+
export interface SelectExecutionTemplateOptions {
|
|
52
|
+
sources: ExecutionTemplateSource[];
|
|
53
|
+
flow: string;
|
|
54
|
+
platform: string;
|
|
55
|
+
runMode: ExecutionRunMode;
|
|
56
|
+
domain?: string;
|
|
57
|
+
explicitId?: string;
|
|
58
|
+
defaults?: ExecutionTemplateDefault[];
|
|
59
|
+
}
|
|
60
|
+
export type ListCompatibleExecutionTemplatesOptions = Omit<SelectExecutionTemplateOptions, 'explicitId' | 'defaults'>;
|
|
61
|
+
export type ExecutionTemplateSelectionReason = 'explicit' | 'configured-default' | 'single-domain-candidate' | 'single-general-candidate';
|
|
62
|
+
export interface SelectedExecutionTemplate {
|
|
63
|
+
entry: ExecutionTemplateEntry;
|
|
64
|
+
reason: ExecutionTemplateSelectionReason;
|
|
65
|
+
reference: ExecutionTemplateReference;
|
|
66
|
+
}
|
|
67
|
+
export type ExecutionTemplateSelectionErrorCode = 'ambiguous' | 'missing-or-incompatible' | 'no-compatible-template';
|
|
68
|
+
export declare class ExecutionTemplateSelectionError extends Error {
|
|
69
|
+
readonly code: ExecutionTemplateSelectionErrorCode;
|
|
70
|
+
constructor(code: ExecutionTemplateSelectionErrorCode, message: string);
|
|
71
|
+
}
|
|
40
72
|
export interface ListExecutionTemplatesOptions {
|
|
41
73
|
sources: ExecutionTemplateSource[];
|
|
42
74
|
flow?: string;
|
|
43
75
|
runMode?: ExecutionRunMode;
|
|
44
76
|
platform?: string;
|
|
77
|
+
/** Keep general templates plus templates for this exact domain. */
|
|
78
|
+
domain?: string;
|
|
45
79
|
/** Include shadowed duplicates (default true for list diagnostics). */
|
|
46
80
|
includeShadowed?: boolean;
|
|
47
81
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/execution-template/types.ts"],"names":[],"mappings":"AAAA,4DAA4D;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/execution-template/types.ts"],"names":[],"mappings":"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"}
|