spell-runtime 1.0.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.
Files changed (70) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +136 -0
  3. package/README.txt +126 -0
  4. package/dist/bundle/install.d.ts +7 -0
  5. package/dist/bundle/install.js +99 -0
  6. package/dist/bundle/install.js.map +1 -0
  7. package/dist/bundle/manifest.d.ts +5 -0
  8. package/dist/bundle/manifest.js +267 -0
  9. package/dist/bundle/manifest.js.map +1 -0
  10. package/dist/bundle/store.d.ts +16 -0
  11. package/dist/bundle/store.js +129 -0
  12. package/dist/bundle/store.js.map +1 -0
  13. package/dist/checks/evaluate.d.ts +2 -0
  14. package/dist/checks/evaluate.js +107 -0
  15. package/dist/checks/evaluate.js.map +1 -0
  16. package/dist/cli/index.d.ts +2 -0
  17. package/dist/cli/index.js +144 -0
  18. package/dist/cli/index.js.map +1 -0
  19. package/dist/logging/executionLog.d.ts +3 -0
  20. package/dist/logging/executionLog.js +31 -0
  21. package/dist/logging/executionLog.js.map +1 -0
  22. package/dist/runner/cast.d.ts +7 -0
  23. package/dist/runner/cast.js +117 -0
  24. package/dist/runner/cast.js.map +1 -0
  25. package/dist/runner/hostRunner.d.ts +5 -0
  26. package/dist/runner/hostRunner.js +41 -0
  27. package/dist/runner/hostRunner.js.map +1 -0
  28. package/dist/runner/input.d.ts +2 -0
  29. package/dist/runner/input.js +42 -0
  30. package/dist/runner/input.js.map +1 -0
  31. package/dist/runner/summary.d.ts +2 -0
  32. package/dist/runner/summary.js +31 -0
  33. package/dist/runner/summary.js.map +1 -0
  34. package/dist/steps/httpStep.d.ts +7 -0
  35. package/dist/steps/httpStep.js +100 -0
  36. package/dist/steps/httpStep.js.map +1 -0
  37. package/dist/steps/shellStep.d.ts +7 -0
  38. package/dist/steps/shellStep.js +48 -0
  39. package/dist/steps/shellStep.js.map +1 -0
  40. package/dist/types.d.ts +105 -0
  41. package/dist/types.js +3 -0
  42. package/dist/types.js.map +1 -0
  43. package/dist/util/errors.d.ts +3 -0
  44. package/dist/util/errors.js +11 -0
  45. package/dist/util/errors.js.map +1 -0
  46. package/dist/util/http.d.ts +6 -0
  47. package/dist/util/http.js +11 -0
  48. package/dist/util/http.js.map +1 -0
  49. package/dist/util/idKey.d.ts +2 -0
  50. package/dist/util/idKey.js +11 -0
  51. package/dist/util/idKey.js.map +1 -0
  52. package/dist/util/object.d.ts +7 -0
  53. package/dist/util/object.js +62 -0
  54. package/dist/util/object.js.map +1 -0
  55. package/dist/util/outputs.d.ts +1 -0
  56. package/dist/util/outputs.js +28 -0
  57. package/dist/util/outputs.js.map +1 -0
  58. package/dist/util/paths.d.ts +4 -0
  59. package/dist/util/paths.js +26 -0
  60. package/dist/util/paths.js.map +1 -0
  61. package/dist/util/platform.d.ts +1 -0
  62. package/dist/util/platform.js +7 -0
  63. package/dist/util/platform.js.map +1 -0
  64. package/dist/util/template.d.ts +1 -0
  65. package/dist/util/template.js +61 -0
  66. package/dist/util/template.js.map +1 -0
  67. package/dist/util/version.d.ts +2 -0
  68. package/dist/util/version.js +35 -0
  69. package/dist/util/version.js.map +1 -0
  70. package/package.json +42 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/bundle/manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { LoadedBundle, SpellBundleManifest } from "../types";
2
+ export interface InstalledSpellInfo {
3
+ id: string;
4
+ version: string;
5
+ name: string;
6
+ risk: string;
7
+ billingEnabled: boolean;
8
+ runtimeExecution: string;
9
+ }
10
+ export declare function resolveInstalledBundle(id: string, version?: string): Promise<LoadedBundle>;
11
+ export declare function listInstalledSpells(): Promise<InstalledSpellInfo[]>;
12
+ export declare function summarizeSchema(schema: unknown): {
13
+ required: string[];
14
+ keyTypes: string[];
15
+ };
16
+ export declare function readSchemaFromManifest(manifest: SpellBundleManifest, bundlePath: string): Promise<unknown>;
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.resolveInstalledBundle = resolveInstalledBundle;
7
+ exports.listInstalledSpells = listInstalledSpells;
8
+ exports.summarizeSchema = summarizeSchema;
9
+ exports.readSchemaFromManifest = readSchemaFromManifest;
10
+ const promises_1 = require("node:fs/promises");
11
+ const node_path_1 = __importDefault(require("node:path"));
12
+ const errors_1 = require("../util/errors");
13
+ const idKey_1 = require("../util/idKey");
14
+ const paths_1 = require("../util/paths");
15
+ const version_1 = require("../util/version");
16
+ const manifest_1 = require("./manifest");
17
+ async function resolveInstalledBundle(id, version) {
18
+ const idKey = (0, idKey_1.toIdKey)(id);
19
+ const idRoot = node_path_1.default.join((0, paths_1.spellsRoot)(), idKey);
20
+ await (0, promises_1.access)(idRoot).catch(() => {
21
+ throw new errors_1.SpellError(`spell not installed: ${id}`);
22
+ });
23
+ const idFile = node_path_1.default.join(idRoot, "spell.id.txt");
24
+ await (0, promises_1.access)(idFile).catch(() => {
25
+ throw new errors_1.SpellError(`missing spell.id.txt for ${id}`);
26
+ });
27
+ const persistedId = (await (0, promises_1.readFile)(idFile, "utf8")).trim();
28
+ if (persistedId !== id) {
29
+ throw new errors_1.SpellError(`id mismatch in spell.id.txt: expected '${id}', found '${persistedId}'`);
30
+ }
31
+ const versions = await listVersionDirs(idRoot);
32
+ if (versions.length === 0) {
33
+ throw new errors_1.SpellError(`no versions installed for: ${id}`);
34
+ }
35
+ const chosenVersion = version ?? (0, version_1.selectLatestVersion)(versions);
36
+ if (!versions.includes(chosenVersion)) {
37
+ throw new errors_1.SpellError(`version not installed for ${id}: ${chosenVersion}`);
38
+ }
39
+ const bundlePath = node_path_1.default.join(idRoot, chosenVersion);
40
+ const loaded = await (0, manifest_1.loadManifestFromDir)(bundlePath);
41
+ if (loaded.manifest.id !== id) {
42
+ throw new errors_1.SpellError(`manifest id mismatch: expected '${id}', found '${loaded.manifest.id}'`);
43
+ }
44
+ return {
45
+ manifest: loaded.manifest,
46
+ schemaPath: loaded.schemaPath,
47
+ bundlePath,
48
+ idKey
49
+ };
50
+ }
51
+ async function listInstalledSpells() {
52
+ const root = (0, paths_1.spellsRoot)();
53
+ await (0, promises_1.access)(root).catch(() => {
54
+ return;
55
+ });
56
+ let idKeys;
57
+ try {
58
+ idKeys = await (0, promises_1.readdir)(root);
59
+ }
60
+ catch {
61
+ return [];
62
+ }
63
+ const entries = [];
64
+ for (const idKey of idKeys) {
65
+ const idRoot = node_path_1.default.join(root, idKey);
66
+ const idFile = node_path_1.default.join(idRoot, "spell.id.txt");
67
+ const id = (await (0, promises_1.readFile)(idFile, "utf8")).trim();
68
+ const versions = await listVersionDirs(idRoot);
69
+ for (const version of versions) {
70
+ const bundlePath = node_path_1.default.join(idRoot, version);
71
+ const { manifest } = await (0, manifest_1.loadManifestFromDir)(bundlePath);
72
+ if (manifest.id !== id) {
73
+ throw new errors_1.SpellError(`id mismatch under ${idRoot}: spell.id.txt='${id}', spell.yaml.id='${manifest.id}'`);
74
+ }
75
+ entries.push({
76
+ id: manifest.id,
77
+ version: manifest.version,
78
+ name: manifest.name,
79
+ risk: manifest.risk,
80
+ billingEnabled: manifest.billing.enabled,
81
+ runtimeExecution: manifest.runtime.execution
82
+ });
83
+ }
84
+ }
85
+ return entries.sort((a, b) => {
86
+ if (a.id === b.id) {
87
+ return b.version.localeCompare(a.version);
88
+ }
89
+ return a.id.localeCompare(b.id);
90
+ });
91
+ }
92
+ function summarizeSchema(schema) {
93
+ if (!schema || typeof schema !== "object" || Array.isArray(schema)) {
94
+ return { required: [], keyTypes: [] };
95
+ }
96
+ const obj = schema;
97
+ const required = Array.isArray(obj.required) ? obj.required.filter((x) => typeof x === "string") : [];
98
+ const keyTypes = [];
99
+ const properties = obj.properties;
100
+ if (properties && typeof properties === "object" && !Array.isArray(properties)) {
101
+ for (const [k, v] of Object.entries(properties)) {
102
+ if (!v || typeof v !== "object" || Array.isArray(v)) {
103
+ keyTypes.push(`${k}: unknown`);
104
+ continue;
105
+ }
106
+ const typeVal = v.type;
107
+ const typeString = Array.isArray(typeVal)
108
+ ? typeVal.filter((x) => typeof x === "string").join("|")
109
+ : typeof typeVal === "string"
110
+ ? typeVal
111
+ : "unknown";
112
+ keyTypes.push(`${k}: ${typeString}`);
113
+ }
114
+ }
115
+ return { required, keyTypes };
116
+ }
117
+ async function listVersionDirs(idRoot) {
118
+ const entries = await (0, promises_1.readdir)(idRoot, { withFileTypes: true });
119
+ return entries
120
+ .filter((entry) => entry.isDirectory())
121
+ .map((entry) => entry.name)
122
+ .filter((name) => name !== "." && name !== "..");
123
+ }
124
+ async function readSchemaFromManifest(manifest, bundlePath) {
125
+ const schemaPath = node_path_1.default.resolve(bundlePath, manifest.inputs_schema);
126
+ const raw = await (0, promises_1.readFile)(schemaPath, "utf8");
127
+ return JSON.parse(raw);
128
+ }
129
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/bundle/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { CheckResult, SpellCheck } from "../types";
2
+ export declare function evaluateChecks(checks: SpellCheck[], bundlePath: string, outputs: Record<string, unknown>, stepsSucceeded: boolean): Promise<CheckResult[]>;
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.evaluateChecks = evaluateChecks;
7
+ const promises_1 = require("node:fs/promises");
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const errors_1 = require("../util/errors");
10
+ const object_1 = require("../util/object");
11
+ const outputs_1 = require("../util/outputs");
12
+ const http_1 = require("../util/http");
13
+ async function evaluateChecks(checks, bundlePath, outputs, stepsSucceeded) {
14
+ const results = [];
15
+ for (const check of checks) {
16
+ if (check.type === "exit_code") {
17
+ results.push({
18
+ type: check.type,
19
+ success: stepsSucceeded,
20
+ message: stepsSucceeded ? "all steps succeeded" : "some step failed"
21
+ });
22
+ continue;
23
+ }
24
+ if (check.type === "file_exists") {
25
+ const p = readRequiredString(check.params, "path", "file_exists.params.path");
26
+ const target = node_path_1.default.isAbsolute(p) ? p : node_path_1.default.resolve(bundlePath, p);
27
+ const exists = await (0, promises_1.access)(target)
28
+ .then(() => true)
29
+ .catch(() => false);
30
+ results.push({
31
+ type: check.type,
32
+ success: exists,
33
+ message: exists ? `file exists: ${target}` : `file missing: ${target}`
34
+ });
35
+ continue;
36
+ }
37
+ if (check.type === "http_status") {
38
+ const expect = readRequiredNumber(check.params, "expect", "http_status.params.expect");
39
+ const explicitUrl = readOptionalString(check.params, "url");
40
+ const ref = readOptionalString(check.params, "url_from_output");
41
+ const resolvedUrl = explicitUrl ?? (ref ? resolveHttpUrlFromOutput(outputs, ref) : undefined);
42
+ if (!resolvedUrl) {
43
+ throw new errors_1.SpellError("http_status check needs params.url or params.url_from_output");
44
+ }
45
+ const response = await (0, http_1.fetchHttp)(resolvedUrl);
46
+ const ok = response.status === expect;
47
+ results.push({
48
+ type: check.type,
49
+ success: ok,
50
+ message: ok
51
+ ? `http status matched: ${response.status}`
52
+ : `http status mismatch: got ${response.status}, expected ${expect}`
53
+ });
54
+ continue;
55
+ }
56
+ if (check.type === "jsonpath_equals") {
57
+ const fromOutput = readRequiredString(check.params, "from_output", "jsonpath_equals.params.from_output");
58
+ const pathValue = readRequiredString(check.params, "path", "jsonpath_equals.params.path");
59
+ const expected = check.params.expected;
60
+ const source = (0, outputs_1.resolveOutputReference)(outputs, fromOutput);
61
+ const actual = (0, object_1.getByDotPath)(source, pathValue);
62
+ const ok = actual === expected;
63
+ results.push({
64
+ type: check.type,
65
+ success: ok,
66
+ message: ok
67
+ ? `jsonpath matched: ${pathValue}`
68
+ : `jsonpath mismatch at ${pathValue}: expected ${String(expected)}, got ${String(actual)}`
69
+ });
70
+ continue;
71
+ }
72
+ throw new errors_1.SpellError(`unsupported check type: ${check.type}`);
73
+ }
74
+ return results;
75
+ }
76
+ function resolveHttpUrlFromOutput(outputs, ref) {
77
+ const resolved = (0, outputs_1.resolveOutputReference)(outputs, ref);
78
+ if (typeof resolved !== "string") {
79
+ throw new errors_1.SpellError(`http_status url_from_output must resolve to string: ${ref}`);
80
+ }
81
+ return resolved;
82
+ }
83
+ function readRequiredString(source, key, label) {
84
+ const value = source[key];
85
+ if (typeof value !== "string" || !value.trim()) {
86
+ throw new errors_1.SpellError(`missing required string: ${label}`);
87
+ }
88
+ return value;
89
+ }
90
+ function readOptionalString(source, key) {
91
+ const value = source[key];
92
+ if (value === undefined) {
93
+ return undefined;
94
+ }
95
+ if (typeof value !== "string" || !value.trim()) {
96
+ throw new errors_1.SpellError(`invalid string for ${key}`);
97
+ }
98
+ return value;
99
+ }
100
+ function readRequiredNumber(source, key, label) {
101
+ const value = source[key];
102
+ if (typeof value !== "number" || Number.isNaN(value)) {
103
+ throw new errors_1.SpellError(`missing required number: ${label}`);
104
+ }
105
+ return value;
106
+ }
107
+ //# sourceMappingURL=evaluate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../src/checks/evaluate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export declare function runCli(argv?: string[]): Promise<number>;
@@ -0,0 +1,144 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.runCli = runCli;
8
+ const promises_1 = require("node:fs/promises");
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ const commander_1 = require("commander");
11
+ const install_1 = require("../bundle/install");
12
+ const store_1 = require("../bundle/store");
13
+ const cast_1 = require("../runner/cast");
14
+ const errors_1 = require("../util/errors");
15
+ const paths_1 = require("../util/paths");
16
+ async function runCli(argv = process.argv) {
17
+ const program = new commander_1.Command();
18
+ program
19
+ .name("spell")
20
+ .description("Minimal runtime for SpellBundle v1")
21
+ .showHelpAfterError(true);
22
+ program
23
+ .command("install")
24
+ .description("Install a local spell bundle")
25
+ .argument("<local-path>", "Path to local spell bundle")
26
+ .action(async (localPath) => {
27
+ const result = await (0, install_1.installBundle)(localPath);
28
+ process.stdout.write(`${result.id}@${result.version}\n`);
29
+ });
30
+ program
31
+ .command("list")
32
+ .description("List installed spells")
33
+ .action(async () => {
34
+ const spells = await (0, store_1.listInstalledSpells)();
35
+ if (spells.length === 0) {
36
+ process.stdout.write("No spells installed\n");
37
+ return;
38
+ }
39
+ process.stdout.write("id@version\tname\trisk\tbilling.enabled\truntime.execution\n");
40
+ for (const spell of spells) {
41
+ process.stdout.write(`${spell.id}@${spell.version}\t${spell.name}\t${spell.risk}\t${spell.billingEnabled}\t${spell.runtimeExecution}\n`);
42
+ }
43
+ });
44
+ program
45
+ .command("inspect")
46
+ .description("Inspect installed spell")
47
+ .argument("<id>", "Spell id")
48
+ .option("--version <version>", "Specific version")
49
+ .action(async (id, options) => {
50
+ const loaded = await (0, store_1.resolveInstalledBundle)(id, options.version);
51
+ const schema = await (0, store_1.readSchemaFromManifest)(loaded.manifest, loaded.bundlePath);
52
+ const schemaSummary = (0, store_1.summarizeSchema)(schema);
53
+ const manifest = loaded.manifest;
54
+ process.stdout.write(`識別\n`);
55
+ process.stdout.write(` id@version: ${manifest.id}@${manifest.version}\n`);
56
+ process.stdout.write(` name: ${manifest.name}\n`);
57
+ process.stdout.write(` summary: ${manifest.summary}\n`);
58
+ process.stdout.write("供物\n");
59
+ process.stdout.write(` required: ${schemaSummary.required.join(",") || "(none)"}\n`);
60
+ process.stdout.write(` key types: ${schemaSummary.keyTypes.join(",") || "(none)"}\n`);
61
+ process.stdout.write("鍵穴\n");
62
+ if (manifest.permissions.length === 0) {
63
+ process.stdout.write(" (none)\n");
64
+ }
65
+ else {
66
+ for (const permission of manifest.permissions) {
67
+ process.stdout.write(` connector=${permission.connector} scopes=${permission.scopes.join(",")}\n`);
68
+ }
69
+ }
70
+ process.stdout.write("作用\n");
71
+ for (const effect of manifest.effects) {
72
+ process.stdout.write(` type=${effect.type} target=${effect.target} mutates=${effect.mutates}\n`);
73
+ }
74
+ process.stdout.write("代償\n");
75
+ process.stdout.write(` enabled=${manifest.billing.enabled} mode=${manifest.billing.mode} max_amount=${manifest.billing.max_amount} currency=${manifest.billing.currency}\n`);
76
+ process.stdout.write("実行\n");
77
+ process.stdout.write(` execution=${manifest.runtime.execution} docker_image=${manifest.runtime.docker_image ?? "-"} platforms=${manifest.runtime.platforms.join(",")}\n`);
78
+ process.stdout.write("封印\n");
79
+ for (const check of manifest.checks) {
80
+ process.stdout.write(` type=${check.type} params=${JSON.stringify(check.params)}\n`);
81
+ }
82
+ });
83
+ program
84
+ .command("cast")
85
+ .description("Cast a spell")
86
+ .argument("<id>", "Spell id")
87
+ .option("--version <version>", "Specific version")
88
+ .option("-p, --param <key=value>", "Input override", collectParams, [])
89
+ .option("--input <file>", "Input JSON file")
90
+ .option("--dry-run", "Validate and summarize only", false)
91
+ .option("--yes", "Acknowledge high or critical risk", false)
92
+ .option("--allow-billing", "Allow billing-enabled spells", false)
93
+ .option("--verbose", "Verbose logs", false)
94
+ .option("--profile <name>", "Reserved for future use")
95
+ .action(async (id, options) => {
96
+ const result = await (0, cast_1.castSpell)({
97
+ id,
98
+ version: options.version,
99
+ paramPairs: options.param,
100
+ inputFile: options.input,
101
+ dryRun: options.dryRun,
102
+ yes: options.yes,
103
+ allowBilling: options.allowBilling,
104
+ verbose: options.verbose,
105
+ profile: options.profile
106
+ });
107
+ process.stdout.write(`execution_id: ${result.executionId}\n`);
108
+ process.stdout.write(`log: ${result.logPath}\n`);
109
+ });
110
+ program
111
+ .command("log")
112
+ .description("Show execution log")
113
+ .argument("<execution-id>", "Execution log file name")
114
+ .action(async (executionId) => {
115
+ const fileName = executionId.endsWith(".json") ? executionId : `${executionId}.json`;
116
+ const filePath = node_path_1.default.join((0, paths_1.logsRoot)(), fileName);
117
+ let raw;
118
+ try {
119
+ raw = await (0, promises_1.readFile)(filePath, "utf8");
120
+ }
121
+ catch {
122
+ throw new errors_1.SpellError(`log not found: ${executionId}`);
123
+ }
124
+ process.stdout.write(raw.endsWith("\n") ? raw : `${raw}\n`);
125
+ });
126
+ try {
127
+ await program.parseAsync(argv);
128
+ return 0;
129
+ }
130
+ catch (error) {
131
+ const message = error instanceof Error ? error.message : String(error);
132
+ process.stderr.write(`${message}\n`);
133
+ return 1;
134
+ }
135
+ }
136
+ function collectParams(value, previous) {
137
+ return [...previous, value];
138
+ }
139
+ if (require.main === module) {
140
+ runCli().then((code) => {
141
+ process.exitCode = code;
142
+ });
143
+ }
144
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ExecutionLog } from "../types";
2
+ export declare function makeExecutionId(id: string, version: string, now?: Date): string;
3
+ export declare function writeExecutionLog(log: ExecutionLog): Promise<string>;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.makeExecutionId = makeExecutionId;
7
+ exports.writeExecutionLog = writeExecutionLog;
8
+ const promises_1 = require("node:fs/promises");
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ const idKey_1 = require("../util/idKey");
11
+ const paths_1 = require("../util/paths");
12
+ function makeExecutionId(id, version, now = new Date()) {
13
+ const ts = toTimestamp(now);
14
+ return `${ts}_${(0, idKey_1.sanitizeIdForFilename)(id)}_${(0, idKey_1.sanitizeIdForFilename)(version)}.json`;
15
+ }
16
+ async function writeExecutionLog(log) {
17
+ await (0, paths_1.ensureSpellDirs)();
18
+ const filePath = node_path_1.default.join((0, paths_1.logsRoot)(), log.execution_id);
19
+ await (0, promises_1.writeFile)(filePath, `${JSON.stringify(log, null, 2)}\n`, "utf8");
20
+ return filePath;
21
+ }
22
+ function toTimestamp(date) {
23
+ const y = date.getUTCFullYear();
24
+ const m = String(date.getUTCMonth() + 1).padStart(2, "0");
25
+ const d = String(date.getUTCDate()).padStart(2, "0");
26
+ const hh = String(date.getUTCHours()).padStart(2, "0");
27
+ const mm = String(date.getUTCMinutes()).padStart(2, "0");
28
+ const ss = String(date.getUTCSeconds()).padStart(2, "0");
29
+ return `${y}${m}${d}T${hh}${mm}${ss}Z`;
30
+ }
31
+ //# sourceMappingURL=executionLog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executionLog.js","sourceRoot":"","sources":["../../src/logging/executionLog.ts"],"names":[],"mappings":";;;;;AAMA,0CAGC;AAED,8CAKC;AAhBD,+CAA6C;AAC7C,0DAA6B;AAE7B,yCAAsD;AACtD,yCAA0D;AAE1D,SAAgB,eAAe,CAAC,EAAU,EAAE,OAAe,EAAE,GAAG,GAAG,IAAI,IAAI,EAAE;IAC3E,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,GAAG,EAAE,IAAI,IAAA,6BAAqB,EAAC,EAAE,CAAC,IAAI,IAAA,6BAAqB,EAAC,OAAO,CAAC,OAAO,CAAC;AACrF,CAAC;AAEM,KAAK,UAAU,iBAAiB,CAAC,GAAiB;IACvD,MAAM,IAAA,uBAAe,GAAE,CAAC;IACxB,MAAM,QAAQ,GAAG,mBAAI,CAAC,IAAI,CAAC,IAAA,gBAAQ,GAAE,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;IACzD,MAAM,IAAA,oBAAS,EAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACvE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,WAAW,CAAC,IAAU;IAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;IAChC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC1D,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACrD,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACzD,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACzD,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACzC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { CastOptions } from "../types";
2
+ export interface CastResult {
3
+ executionId: string;
4
+ logPath: string;
5
+ outputs: Record<string, unknown>;
6
+ }
7
+ export declare function castSpell(options: CastOptions): Promise<CastResult>;
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.castSpell = castSpell;
7
+ const pino_1 = __importDefault(require("pino"));
8
+ const evaluate_1 = require("../checks/evaluate");
9
+ const store_1 = require("../bundle/store");
10
+ const executionLog_1 = require("../logging/executionLog");
11
+ const errors_1 = require("../util/errors");
12
+ const platform_1 = require("../util/platform");
13
+ const input_1 = require("./input");
14
+ const hostRunner_1 = require("./hostRunner");
15
+ const summary_1 = require("./summary");
16
+ async function castSpell(options) {
17
+ const logger = (0, pino_1.default)({ level: options.verbose ? "debug" : "info" });
18
+ const startedAt = new Date().toISOString();
19
+ let executionId = (0, executionLog_1.makeExecutionId)(options.id, options.version ?? "latest");
20
+ const log = {
21
+ execution_id: executionId,
22
+ started_at: startedAt,
23
+ finished_at: startedAt,
24
+ id: options.id,
25
+ version: options.version ?? "latest",
26
+ input: {},
27
+ summary: {
28
+ risk: "low",
29
+ billing: {
30
+ enabled: false,
31
+ mode: "none",
32
+ currency: "USD",
33
+ max_amount: 0
34
+ },
35
+ runtime: {
36
+ execution: "host",
37
+ platforms: []
38
+ }
39
+ },
40
+ steps: [],
41
+ outputs: {},
42
+ checks: [],
43
+ success: false
44
+ };
45
+ try {
46
+ const loaded = await (0, store_1.resolveInstalledBundle)(options.id, options.version);
47
+ const { manifest, bundlePath } = loaded;
48
+ executionId = (0, executionLog_1.makeExecutionId)(manifest.id, manifest.version);
49
+ log.execution_id = executionId;
50
+ log.id = manifest.id;
51
+ log.version = manifest.version;
52
+ log.summary = {
53
+ risk: manifest.risk,
54
+ billing: manifest.billing,
55
+ runtime: manifest.runtime
56
+ };
57
+ const input = await (0, input_1.buildInput)(options.inputFile, options.paramPairs);
58
+ log.input = input;
59
+ const schema = await (0, store_1.readSchemaFromManifest)(manifest, bundlePath);
60
+ (0, input_1.validateInputAgainstSchema)(schema, input);
61
+ const hostPlatform = (0, platform_1.detectHostPlatform)();
62
+ if (!manifest.runtime.platforms.includes(hostPlatform)) {
63
+ throw new errors_1.SpellError(`platform mismatch: host=${hostPlatform}, spell supports=${manifest.runtime.platforms.join(",")}`);
64
+ }
65
+ if ((manifest.risk === "high" || manifest.risk === "critical") && !options.yes) {
66
+ throw new errors_1.SpellError(`risk ${manifest.risk} requires --yes`);
67
+ }
68
+ if (manifest.billing.enabled && !options.allowBilling) {
69
+ throw new errors_1.SpellError("billing enabled requires --allow-billing");
70
+ }
71
+ for (const permission of manifest.permissions) {
72
+ const tokenKey = `CONNECTOR_${permission.connector.toUpperCase().replace(/[^A-Z0-9]/g, "_")}_TOKEN`;
73
+ if (!process.env[tokenKey]) {
74
+ throw new errors_1.SpellError(`missing connector token ${tokenKey}`);
75
+ }
76
+ }
77
+ process.stdout.write(`${(0, summary_1.renderExecutionSummary)(manifest)}\n`);
78
+ if (options.dryRun) {
79
+ log.success = true;
80
+ log.finished_at = new Date().toISOString();
81
+ const logPath = await (0, executionLog_1.writeExecutionLog)(log);
82
+ return {
83
+ executionId: executionId,
84
+ logPath,
85
+ outputs: {}
86
+ };
87
+ }
88
+ if (manifest.runtime.execution === "docker") {
89
+ throw new errors_1.SpellError("docker execution is not supported in v1");
90
+ }
91
+ logger.debug({ id: manifest.id, version: manifest.version }, "starting host execution");
92
+ const runResult = await (0, hostRunner_1.runHost)(manifest, bundlePath, input);
93
+ log.steps = runResult.stepResults;
94
+ log.outputs = runResult.outputs;
95
+ const checkResults = await (0, evaluate_1.evaluateChecks)(manifest.checks, bundlePath, runResult.outputs, true);
96
+ log.checks = checkResults;
97
+ const failedChecks = checkResults.filter((entry) => !entry.success);
98
+ if (failedChecks.length > 0) {
99
+ throw new errors_1.SpellError(`check failed: ${failedChecks[0].message}`);
100
+ }
101
+ log.success = true;
102
+ log.finished_at = new Date().toISOString();
103
+ const logPath = await (0, executionLog_1.writeExecutionLog)(log);
104
+ return {
105
+ executionId,
106
+ logPath,
107
+ outputs: runResult.outputs
108
+ };
109
+ }
110
+ catch (error) {
111
+ log.error = error.message;
112
+ log.finished_at = new Date().toISOString();
113
+ await (0, executionLog_1.writeExecutionLog)(log);
114
+ throw error;
115
+ }
116
+ }
117
+ //# sourceMappingURL=cast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cast.js","sourceRoot":"","sources":["../../src/runner/cast.ts"],"names":[],"mappings":"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"}