@farmslot/recipe-cli 0.3.0 → 0.4.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.
Files changed (55) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +12 -12
  3. package/dist/harness/adapters.d.ts +2 -0
  4. package/dist/harness/adapters.d.ts.map +1 -1
  5. package/dist/harness/adapters.js +4 -0
  6. package/dist/harness/adapters.js.map +1 -1
  7. package/dist/harness/execution-provenance.d.ts +56 -0
  8. package/dist/harness/execution-provenance.d.ts.map +1 -0
  9. package/dist/harness/execution-provenance.js +308 -0
  10. package/dist/harness/execution-provenance.js.map +1 -0
  11. package/dist/harness/host.d.ts +8 -0
  12. package/dist/harness/host.d.ts.map +1 -1
  13. package/dist/harness/host.js +9 -2
  14. package/dist/harness/host.js.map +1 -1
  15. package/dist/harness/index.d.ts +12 -2
  16. package/dist/harness/index.d.ts.map +1 -1
  17. package/dist/harness/index.js +12 -2
  18. package/dist/harness/index.js.map +1 -1
  19. package/dist/harness/live-adapter-contract.d.ts +32 -0
  20. package/dist/harness/live-adapter-contract.d.ts.map +1 -0
  21. package/dist/harness/live-adapter-contract.js +425 -0
  22. package/dist/harness/live-adapter-contract.js.map +1 -0
  23. package/dist/harness/recording-target.d.ts +9 -0
  24. package/dist/harness/recording-target.d.ts.map +1 -0
  25. package/dist/harness/recording-target.js +39 -0
  26. package/dist/harness/recording-target.js.map +1 -0
  27. package/dist/harness/run-diagnostics.d.ts +139 -0
  28. package/dist/harness/run-diagnostics.d.ts.map +1 -0
  29. package/dist/harness/run-diagnostics.js +458 -0
  30. package/dist/harness/run-diagnostics.js.map +1 -0
  31. package/dist/harness/run-options.d.ts +4 -0
  32. package/dist/harness/run-options.d.ts.map +1 -0
  33. package/dist/harness/run-options.js +35 -0
  34. package/dist/harness/run-options.js.map +1 -0
  35. package/dist/harness/run-recording.d.ts +43 -0
  36. package/dist/harness/run-recording.d.ts.map +1 -0
  37. package/dist/harness/run-recording.js +517 -0
  38. package/dist/harness/run-recording.js.map +1 -0
  39. package/dist/harness/run-report.d.ts +19 -0
  40. package/dist/harness/run-report.d.ts.map +1 -0
  41. package/dist/harness/run-report.js +269 -0
  42. package/dist/harness/run-report.js.map +1 -0
  43. package/dist/harness/runtime-proof.d.ts +27 -0
  44. package/dist/harness/runtime-proof.d.ts.map +1 -0
  45. package/dist/harness/runtime-proof.js +144 -0
  46. package/dist/harness/runtime-proof.js.map +1 -0
  47. package/dist/harness/suggest.d.ts +3 -0
  48. package/dist/harness/suggest.d.ts.map +1 -0
  49. package/dist/harness/suggest.js +37 -0
  50. package/dist/harness/suggest.js.map +1 -0
  51. package/dist/harness/trust.d.ts +38 -0
  52. package/dist/harness/trust.d.ts.map +1 -0
  53. package/dist/harness/trust.js +89 -0
  54. package/dist/harness/trust.js.map +1 -0
  55. package/package.json +5 -3
@@ -0,0 +1,89 @@
1
+ /** Source provenance and plan approval from explicit flags; absent flags add nothing. */
2
+ export function explicitRecipeTrustOptions(values) {
3
+ const { sourceTrust, sourceKind, sourceName, sourceDigest, approvalDigest } = values;
4
+ const source = sourceTrust || sourceKind || sourceName || sourceDigest
5
+ ? {
6
+ trust: (sourceTrust ?? 'unknown'),
7
+ kind: (sourceKind ?? 'recipe-file'),
8
+ ...(sourceName ? { name: sourceName } : {}),
9
+ ...(sourceDigest ? { digest: sourceDigest } : {}),
10
+ }
11
+ : undefined;
12
+ return {
13
+ ...(source ? { source } : {}),
14
+ ...(approvalDigest ? { approval: { planDigest: approvalDigest } } : {}),
15
+ };
16
+ }
17
+ /**
18
+ * A `RECIPE_*` trust error as a command envelope, without the blocked nodes'
19
+ * payloads; undefined for any other error.
20
+ */
21
+ export function recipeTrustFailure(error) {
22
+ if (!error || typeof error !== 'object')
23
+ return undefined;
24
+ const value = error;
25
+ if (typeof value.code !== 'string' ||
26
+ !value.code.startsWith('RECIPE_') ||
27
+ typeof value.message !== 'string' ||
28
+ typeof value.userAction !== 'string')
29
+ return undefined;
30
+ const failure = value.failure && typeof value.failure === 'object'
31
+ ? value.failure
32
+ : undefined;
33
+ const blocked = Array.isArray(failure?.blocked)
34
+ ? failure.blocked.flatMap((entry) => {
35
+ if (!entry || typeof entry !== 'object')
36
+ return [];
37
+ const node = entry;
38
+ if (typeof node.nodeId !== 'string' ||
39
+ typeof node.action !== 'string' ||
40
+ !Array.isArray(node.capabilities))
41
+ return [];
42
+ const origin = node.origin && typeof node.origin === 'object'
43
+ ? node.origin
44
+ : undefined;
45
+ const adapterOrigin = node.adapterOrigin && typeof node.adapterOrigin === 'object'
46
+ ? node.adapterOrigin
47
+ : undefined;
48
+ const implementation = adapterOrigin
49
+ ? {
50
+ ...(typeof adapterOrigin.kind === 'string' ? { kind: adapterOrigin.kind } : {}),
51
+ ...(typeof adapterOrigin.trust === 'string' ? { trust: adapterOrigin.trust } : {}),
52
+ ...(typeof adapterOrigin.digest === 'string' ? { digest: adapterOrigin.digest } : {}),
53
+ }
54
+ : undefined;
55
+ return [
56
+ {
57
+ nodeId: node.nodeId,
58
+ action: node.action,
59
+ capabilities: node.capabilities.filter((item) => typeof item === 'string'),
60
+ source: typeof origin?.kind === 'string' ? origin.kind : 'unknown',
61
+ ...(implementation && Object.keys(implementation).length > 0 ? { implementation } : {}),
62
+ },
63
+ ];
64
+ })
65
+ : undefined;
66
+ const recipeDigest = typeof failure?.recipeDigest === 'string' ? failure.recipeDigest : undefined;
67
+ const userAction = recipeDigest &&
68
+ (value.code === 'RECIPE_TRUST_REQUIRED' || value.code === 'RECIPE_APPROVAL_MISMATCH') &&
69
+ !value.userAction.includes('execution environment')
70
+ ? `${value.userAction}; rerun with the same project root, artifact directory, and execution environment`
71
+ : value.userAction;
72
+ return {
73
+ code: value.code,
74
+ message: value.message,
75
+ userAction,
76
+ ...(failure
77
+ ? {
78
+ details: {
79
+ // Farmslot reports the approved execution plan digest as
80
+ // recipeDigest in failures; approval input names it planDigest.
81
+ ...(recipeDigest ? { recipeDigest } : {}),
82
+ ...(typeof failure.trust === 'string' ? { trust: failure.trust } : {}),
83
+ ...(blocked?.length ? { blocked } : {}),
84
+ },
85
+ }
86
+ : {}),
87
+ };
88
+ }
89
+ //# sourceMappingURL=trust.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust.js","sourceRoot":"","sources":["../../src/harness/trust.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farmslot/recipe-cli",
3
- "version": "0.3.0",
3
+ "version": "0.4.1",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -32,11 +32,13 @@
32
32
  "prepublishOnly": "node ../../scripts/quality/check-farmslot-package-readiness.mjs --publish --packages @farmslot/recipe-cli"
33
33
  },
34
34
  "dependencies": {
35
- "@farmslot/adapter-sdk": "0.2.0",
35
+ "@farmslot/adapter-sdk": "0.3.1",
36
36
  "@farmslot/agent-runtime": "0.17.0",
37
37
  "@farmslot/protocol": "0.34.0",
38
- "@farmslot/recipe-runner": "0.23.0",
38
+ "@farmslot/recipe-runner": "0.24.0",
39
39
  "commander": "^12.0.0",
40
+ "es-module-lexer": "2.3.1",
41
+ "esbuild": "0.28.1",
40
42
  "semver": "^7.7.3"
41
43
  },
42
44
  "devDependencies": {