@kici-dev/compiler 0.1.27 → 0.3.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/dist/auth/headless-detect.d.ts +14 -5
- package/dist/auth/headless-detect.js +50 -9
- package/dist/cli.js +120 -11
- package/dist/commands/compile.js +28 -4
- package/dist/commands/diagnostics.js +14 -2
- package/dist/commands/doctor.d.ts +64 -0
- package/dist/commands/doctor.js +413 -0
- package/dist/commands/endpoints.js +6 -0
- package/dist/commands/fixture.js +13 -0
- package/dist/commands/hook.js +3 -2
- package/dist/commands/index.d.ts +8 -0
- package/dist/commands/index.js +5 -1
- package/dist/commands/init-host-os.d.ts +34 -0
- package/dist/commands/init-host-os.js +44 -0
- package/dist/commands/init.d.ts +4 -0
- package/dist/commands/init.js +159 -36
- package/dist/commands/local.d.ts +28 -2
- package/dist/commands/local.js +74 -5
- package/dist/commands/login.js +1 -1
- package/dist/commands/notifications.d.ts +61 -0
- package/dist/commands/notifications.js +274 -0
- package/dist/commands/preview.js +8 -1
- package/dist/commands/run-routed.js +10 -1
- package/dist/commands/run.js +41 -12
- package/dist/commands/runs/artifacts/download.d.ts +24 -0
- package/dist/commands/runs/artifacts/download.js +154 -0
- package/dist/commands/runs/artifacts/list.d.ts +5 -0
- package/dist/commands/runs/artifacts/list.js +47 -0
- package/dist/commands/runs/cancel.js +2 -2
- package/dist/commands/runs/list.js +8 -2
- package/dist/commands/verify-attestation.d.ts +3 -1
- package/dist/commands/verify-attestation.js +18 -7
- package/dist/errors/formatter.d.ts +14 -1
- package/dist/errors/formatter.js +13 -3
- package/dist/errors/index.d.ts +2 -1
- package/dist/errors/index.js +3 -2
- package/dist/errors/source-location.d.ts +20 -0
- package/dist/errors/source-location.js +45 -0
- package/dist/execution/executor.js +25 -5
- package/dist/fixtures/defaults/index.js +2 -1
- package/dist/llm-context/llms-architecture.txt +51 -22
- package/dist/llm-context/llms-cli.txt +2461 -1582
- package/dist/llm-context/llms-features.txt +178 -106
- package/dist/llm-context/llms-full.txt +6127 -4426
- package/dist/llm-context/llms-getting-started.txt +306 -42
- package/dist/llm-context/llms-patterns.txt +13 -7
- package/dist/llm-context/llms-sdk-runtime.txt +2013 -0
- package/dist/llm-context/llms-sdk.txt +591 -2152
- package/dist/llm-context/llms.txt +30 -16
- package/dist/local-plane/orchestrator-process.d.ts +12 -7
- package/dist/local-plane/orchestrator-process.js +28 -14
- package/dist/local-plane/os-mismatch-hint.d.ts +16 -0
- package/dist/local-plane/os-mismatch-hint.js +34 -0
- package/dist/local-plane/plane-liveness.d.ts +68 -0
- package/dist/local-plane/plane-liveness.js +145 -0
- package/dist/local-plane/plane-manager.d.ts +60 -18
- package/dist/local-plane/plane-manager.js +210 -70
- package/dist/local-plane/plane-trigger.d.ts +13 -4
- package/dist/local-plane/plane-trigger.js +27 -14
- package/dist/local-plane/platform-attach.js +1 -5
- package/dist/local-plane/port-holder.d.ts +78 -0
- package/dist/local-plane/port-holder.js +227 -0
- package/dist/local-plane/postgres.d.ts +15 -3
- package/dist/local-plane/postgres.js +34 -12
- package/dist/local-plane/run-follow.d.ts +20 -0
- package/dist/local-plane/run-follow.js +51 -4
- package/dist/local-plane/scaler-config.d.ts +28 -14
- package/dist/local-plane/scaler-config.js +59 -41
- package/dist/local-plane/source-provider.js +4 -10
- package/dist/lockfile/generator.d.ts +14 -1
- package/dist/lockfile/generator.js +99 -33
- package/dist/lockfile/index.d.ts +3 -1
- package/dist/lockfile/index.js +3 -2
- package/dist/lockfile/purity-diagnostics.d.ts +31 -0
- package/dist/lockfile/purity-diagnostics.js +52 -0
- package/dist/postinstall.js +2 -1
- package/dist/remote/artifact-extract.d.ts +8 -0
- package/dist/remote/artifact-extract.js +58 -0
- package/dist/remote/config.d.ts +21 -3
- package/dist/remote/config.js +24 -5
- package/dist/remote/dashboard-client.d.ts +39 -2
- package/dist/remote/dashboard-client.js +47 -4
- package/dist/remote/fs-case.d.ts +21 -0
- package/dist/remote/fs-case.js +45 -0
- package/dist/remote/history.d.ts +9 -3
- package/dist/remote/history.js +79 -10
- package/dist/remote/local-repo-identity.d.ts +1 -1
- package/dist/remote/local-repo-identity.js +2 -1
- package/dist/remote/notifications-client.d.ts +149 -0
- package/dist/remote/notifications-client.js +103 -0
- package/dist/remote/oauth.d.ts +13 -0
- package/dist/remote/oauth.js +31 -5
- package/dist/remote/output/summary.js +76 -14
- package/dist/remote/render.js +30 -9
- package/dist/remote/uploader.js +5 -4
- package/dist/templates/agents-md.d.ts +1 -1
- package/dist/templates/agents-md.js +6 -6
- package/dist/templates/index.d.ts +1 -1
- package/dist/templates/index.js +2 -2
- package/dist/templates/package-json.d.ts +15 -0
- package/dist/templates/package-json.js +26 -5
- package/dist/test-runner/dry-run.d.ts +2 -1
- package/dist/test-runner/dry-run.js +18 -1
- package/dist/test-runner/event-types.d.ts +2 -0
- package/dist/test-runner/event-types.js +3 -0
- package/dist/test-runner/job-executor.d.ts +1 -0
- package/dist/test-runner/job-executor.js +81 -43
- package/dist/test-runner/output-formatter.d.ts +5 -2
- package/dist/test-runner/output-formatter.js +6 -4
- package/dist/test-runner/payload-builder.d.ts +7 -1
- package/dist/test-runner/payload-builder.js +11 -2
- package/dist/test-runner/rule-evaluator.d.ts +7 -3
- package/dist/test-runner/rule-evaluator.js +13 -12
- package/dist/test-runner/step-context.d.ts +23 -5
- package/dist/test-runner/step-context.js +28 -118
- package/dist/types.d.ts +21 -2
- package/dist/types.js +4 -2
- package/dist/validation/index.d.ts +2 -0
- package/dist/validation/index.js +2 -1
- package/dist/validation/typecheck.d.ts +28 -0
- package/dist/validation/typecheck.js +110 -0
- package/dist/validation/validator.d.ts +9 -4
- package/dist/validation/validator.js +38 -44
- package/package.json +12 -15
- package/sbom.spdx.json +1322 -1964
- package/dist/assets/api-TJJVHrjC.json +0 -118
- package/dist/assets/descriptor-BTtjzN9L.json +0 -1382
- package/dist/assets/package-BpQF9kR8.json +0 -74
- package/dist/assets/package-Ceo2h27X.json +0 -89
- package/dist/assets/source_context-D0atuL28.json +0 -20
- package/dist/assets/type-BFqO8SCZ.json +0 -202
- package/dist/commands/cancel.d.ts +0 -22
- package/dist/commands/detect-package-manager.d.ts +0 -42
- package/dist/commands/held-run-resolve.d.ts +0 -50
- package/dist/commands/status.d.ts +0 -34
- package/dist/commands/test.d.ts +0 -88
- package/dist/errors/codes.d.ts +0 -25
- package/dist/local-executor/dag-scheduler.d.ts +0 -44
- package/dist/local-executor/index.d.ts +0 -23
- package/dist/local-executor/job-runner.d.ts +0 -47
- package/dist/local-executor/materializer.d.ts +0 -44
- package/dist/local-executor/output-streamer.d.ts +0 -31
- package/dist/local-executor/payload-generator.d.ts +0 -16
- package/dist/local-executor/picker.d.ts +0 -33
- package/dist/local-executor/runs-on-display.d.ts +0 -9
- package/dist/local-executor/secret-loader.d.ts +0 -18
- package/dist/local-executor/to-event-payload.d.ts +0 -16
- package/dist/local-executor/types.d.ts +0 -93
- package/dist/local-executor/workflow-lock.d.ts +0 -82
- package/dist/package-F7UXSDHW.json +0 -74
- package/dist/remote/client.d.ts +0 -210
- package/dist/remote/observer.d.ts +0 -81
- package/dist/test-runner/summary.d.ts +0 -7
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import "../rolldown-runtime-ClRpJifh.js";
|
|
2
|
+
import { compilerError } from "../errors/formatter.js";
|
|
3
|
+
import "../errors/index.js";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { existsSync } from "node:fs";
|
|
6
|
+
import { $ } from "zx";
|
|
7
|
+
import { initZx } from "@kici-dev/core";
|
|
8
|
+
//#region src/validation/typecheck.ts
|
|
9
|
+
initZx();
|
|
10
|
+
/** `path(line,col): error TSxxxx: message` — a located tsc diagnostic. */
|
|
11
|
+
const TSC_LOCATED_RE = /^(.+?)\((\d+),(\d+)\): error (TS\d+): (.+)$/;
|
|
12
|
+
/** `error TSxxxx: message` — a global tsc diagnostic (config errors, etc.). */
|
|
13
|
+
const TSC_GLOBAL_RE = /^error (TS\d+): (.+)$/;
|
|
14
|
+
/**
|
|
15
|
+
* Turn `tsc --noEmit --pretty false` output into located `E120` compiler errors.
|
|
16
|
+
* Handles both located diagnostics (`file(line,col): error TS…`) and global
|
|
17
|
+
* ones (`error TS…`, e.g. a bad tsconfig). Non-diagnostic noise lines are
|
|
18
|
+
* ignored. Paths are left as tsc emits them (kiciDir-relative), readable in the
|
|
19
|
+
* GNU error format.
|
|
20
|
+
*/
|
|
21
|
+
function parseTscOutput(stdout) {
|
|
22
|
+
const errors = [];
|
|
23
|
+
for (const raw of stdout.split("\n")) {
|
|
24
|
+
const line = raw.trim();
|
|
25
|
+
const located = TSC_LOCATED_RE.exec(line);
|
|
26
|
+
if (located) {
|
|
27
|
+
const [, file, lineStr, colStr, tsCode, message] = located;
|
|
28
|
+
const location = {
|
|
29
|
+
file,
|
|
30
|
+
line: parseInt(lineStr, 10),
|
|
31
|
+
column: parseInt(colStr, 10)
|
|
32
|
+
};
|
|
33
|
+
errors.push(compilerError("E120", `${tsCode}: ${message}`, {
|
|
34
|
+
location,
|
|
35
|
+
suggestion: "Fix the type error in your workflow source."
|
|
36
|
+
}));
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
const global = TSC_GLOBAL_RE.exec(line);
|
|
40
|
+
if (global) {
|
|
41
|
+
const [, tsCode, message] = global;
|
|
42
|
+
errors.push(compilerError("E120", `${tsCode}: ${message}`, { suggestion: "Fix the type error in your workflow source." }));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return errors;
|
|
46
|
+
}
|
|
47
|
+
/** The E121 "compiler could not be resolved" error. */
|
|
48
|
+
function typecheckUnavailable() {
|
|
49
|
+
return compilerError("E121", "Type-check unavailable: could not resolve the TypeScript compiler", { suggestion: "Add \"typescript\" to your .kici/package.json devDependencies (kici init scaffolds it), then reinstall." });
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Run an opt-in `tsc --noEmit` type-check over the workflow sources in
|
|
53
|
+
* `kiciDir`. Skips (returns `ran: false`) when there is no `tsconfig.json`.
|
|
54
|
+
* Prefers the workspace-local `tsc` binary, falling back to `npx typescript`;
|
|
55
|
+
* returns a single `E121` when the compiler cannot be resolved.
|
|
56
|
+
*/
|
|
57
|
+
async function runTypecheck(kiciDir) {
|
|
58
|
+
const tsconfigPath = path.join(kiciDir, "tsconfig.json");
|
|
59
|
+
if (!existsSync(tsconfigPath)) return {
|
|
60
|
+
ran: false,
|
|
61
|
+
errors: []
|
|
62
|
+
};
|
|
63
|
+
const localBin = path.join(kiciDir, "node_modules", ".bin", "tsc");
|
|
64
|
+
const usedLocal = existsSync(localBin);
|
|
65
|
+
const invocation = usedLocal ? [localBin] : [
|
|
66
|
+
"npx",
|
|
67
|
+
"--yes",
|
|
68
|
+
"-p",
|
|
69
|
+
"typescript",
|
|
70
|
+
"tsc"
|
|
71
|
+
];
|
|
72
|
+
const tscArgs = [
|
|
73
|
+
"--noEmit",
|
|
74
|
+
"--pretty",
|
|
75
|
+
"false",
|
|
76
|
+
"-p",
|
|
77
|
+
tsconfigPath
|
|
78
|
+
];
|
|
79
|
+
let out;
|
|
80
|
+
try {
|
|
81
|
+
out = await $({
|
|
82
|
+
cwd: kiciDir,
|
|
83
|
+
nothrow: true
|
|
84
|
+
})`${invocation} ${tscArgs}`;
|
|
85
|
+
} catch {
|
|
86
|
+
return {
|
|
87
|
+
ran: true,
|
|
88
|
+
errors: [typecheckUnavailable()]
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
const errors = parseTscOutput(out.stdout);
|
|
92
|
+
if (out.exitCode !== 0 && errors.length === 0) {
|
|
93
|
+
if (!usedLocal) return {
|
|
94
|
+
ran: true,
|
|
95
|
+
errors: [typecheckUnavailable()]
|
|
96
|
+
};
|
|
97
|
+
return {
|
|
98
|
+
ran: true,
|
|
99
|
+
errors: [compilerError("E120", `type-check failed: ${(out.stderr || out.stdout).trim()}`, { suggestion: "Fix the type error in your workflow source." })]
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
ran: true,
|
|
104
|
+
errors
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
//#endregion
|
|
108
|
+
export { parseTscOutput, runTypecheck };
|
|
109
|
+
|
|
110
|
+
//# sourceMappingURL=typecheck.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Workflow } from '@kici-dev/sdk';
|
|
2
1
|
import { type CompilerError } from '../errors/index.js';
|
|
2
|
+
import type { WorkflowWithSource } from '../types.js';
|
|
3
3
|
/**
|
|
4
4
|
* Validation result - either success or list of errors.
|
|
5
5
|
*/
|
|
@@ -18,9 +18,14 @@ export type ValidationResult = {
|
|
|
18
18
|
* 3. Job dependencies are valid (exist, no cycles, no self-refs)
|
|
19
19
|
* 4. Static matrix expansions stay under 256 job limit
|
|
20
20
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
21
|
+
* Each error carries the most precise `file:line:column` the data allows: a
|
|
22
|
+
* job-scoped error anchors to the offending job's first step location (real
|
|
23
|
+
* file + real line), falling back to the workflow's source file at line 1 when
|
|
24
|
+
* no step exists; a workflow-scoped error uses the workflow source file (line 1,
|
|
25
|
+
* since `workflow()` captures no call-site).
|
|
26
|
+
*
|
|
27
|
+
* @param workflows - Source-carrying workflows from discovery
|
|
23
28
|
* @returns Validation result with errors if any
|
|
24
29
|
*/
|
|
25
|
-
export declare function validateConfig(workflows:
|
|
30
|
+
export declare function validateConfig(workflows: WorkflowWithSource[]): ValidationResult;
|
|
26
31
|
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import "../rolldown-runtime-ClRpJifh.js";
|
|
2
2
|
import { compilerError } from "../errors/formatter.js";
|
|
3
|
+
import { locationForJob, locationForWorkflow } from "../errors/source-location.js";
|
|
3
4
|
import "../errors/index.js";
|
|
4
5
|
import { getDynamicJobGroup, isDynamicGroupRef, isDynamicJobFn, isStaticArray, isStaticObject, validateDag } from "@kici-dev/sdk";
|
|
5
6
|
//#region src/validation/validator.ts
|
|
@@ -14,28 +15,26 @@ const MAX_STATIC_MATRIX_JOBS = 256;
|
|
|
14
15
|
* 3. Job dependencies are valid (exist, no cycles, no self-refs)
|
|
15
16
|
* 4. Static matrix expansions stay under 256 job limit
|
|
16
17
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
18
|
+
* Each error carries the most precise `file:line:column` the data allows: a
|
|
19
|
+
* job-scoped error anchors to the offending job's first step location (real
|
|
20
|
+
* file + real line), falling back to the workflow's source file at line 1 when
|
|
21
|
+
* no step exists; a workflow-scoped error uses the workflow source file (line 1,
|
|
22
|
+
* since `workflow()` captures no call-site).
|
|
23
|
+
*
|
|
24
|
+
* @param workflows - Source-carrying workflows from discovery
|
|
19
25
|
* @returns Validation result with errors if any
|
|
20
26
|
*/
|
|
21
|
-
function validateConfig(workflows
|
|
27
|
+
function validateConfig(workflows) {
|
|
22
28
|
const errors = [];
|
|
23
29
|
const workflowNames = /* @__PURE__ */ new Set();
|
|
24
|
-
for (const workflow of workflows) {
|
|
30
|
+
for (const { workflow, source } of workflows) {
|
|
25
31
|
if (workflowNames.has(workflow.name)) errors.push(compilerError("E107", `Duplicate workflow name: "${workflow.name}"`, {
|
|
26
|
-
location:
|
|
27
|
-
file: configPath,
|
|
28
|
-
line: 1,
|
|
29
|
-
column: 1
|
|
30
|
-
},
|
|
32
|
+
location: locationForWorkflow(source.file),
|
|
31
33
|
suggestion: "Each workflow must have a unique name"
|
|
32
34
|
}));
|
|
33
35
|
workflowNames.add(workflow.name);
|
|
34
36
|
}
|
|
35
|
-
for (const workflow of workflows)
|
|
36
|
-
const workflowErrors = validateWorkflow(workflow, configPath);
|
|
37
|
-
errors.push(...workflowErrors);
|
|
38
|
-
}
|
|
37
|
+
for (const { workflow, source } of workflows) errors.push(...validateWorkflow(workflow, source.file));
|
|
39
38
|
if (errors.length > 0) return {
|
|
40
39
|
valid: false,
|
|
41
40
|
errors
|
|
@@ -45,18 +44,22 @@ function validateConfig(workflows, configPath) {
|
|
|
45
44
|
/**
|
|
46
45
|
* Validate a single workflow.
|
|
47
46
|
*/
|
|
48
|
-
function validateWorkflow(workflow,
|
|
47
|
+
function validateWorkflow(workflow, workflowFile) {
|
|
49
48
|
const errors = [];
|
|
50
49
|
const staticJobs = [];
|
|
51
50
|
for (const jobOrFactory of workflow.jobs) if (!isDynamicJobFn(jobOrFactory)) staticJobs.push(jobOrFactory);
|
|
51
|
+
const jobLoc = (name) => {
|
|
52
|
+
const j = staticJobs.find((s) => s.name === name);
|
|
53
|
+
return j ? locationForJob(j, workflowFile) : {
|
|
54
|
+
file: workflowFile,
|
|
55
|
+
line: 1,
|
|
56
|
+
column: 1
|
|
57
|
+
};
|
|
58
|
+
};
|
|
52
59
|
const jobNames = /* @__PURE__ */ new Set();
|
|
53
60
|
for (const job of staticJobs) {
|
|
54
61
|
if (jobNames.has(job.name)) errors.push(compilerError("E106", `Duplicate job name "${job.name}" in workflow "${workflow.name}"`, {
|
|
55
|
-
location:
|
|
56
|
-
file: configPath,
|
|
57
|
-
line: 1,
|
|
58
|
-
column: 1
|
|
59
|
-
},
|
|
62
|
+
location: locationForJob(job, workflowFile),
|
|
60
63
|
suggestion: "Each job in a workflow must have a unique name"
|
|
61
64
|
}));
|
|
62
65
|
jobNames.add(job.name);
|
|
@@ -66,19 +69,26 @@ function validateWorkflow(workflow, configPath) {
|
|
|
66
69
|
const groupName = getDynamicJobGroup(jobOrFactory);
|
|
67
70
|
if (groupName) dynamicGroupNames.add(groupName);
|
|
68
71
|
}
|
|
69
|
-
const dagErrors = validateJobDag(staticJobs, workflow.name,
|
|
72
|
+
const dagErrors = validateJobDag(staticJobs, workflow.name, jobLoc, dynamicGroupNames);
|
|
70
73
|
errors.push(...dagErrors);
|
|
71
74
|
for (const job of staticJobs) {
|
|
72
|
-
const matrixErrors = validateStaticMatrix(job, workflow.name,
|
|
75
|
+
const matrixErrors = validateStaticMatrix(job, workflow.name, workflowFile);
|
|
73
76
|
errors.push(...matrixErrors);
|
|
74
77
|
}
|
|
75
78
|
return errors;
|
|
76
79
|
}
|
|
77
80
|
/**
|
|
81
|
+
* Best location for a DAG node id: strip the synthetic `__group:` prefix (which
|
|
82
|
+
* has no backing Job) and resolve via the job-location lookup.
|
|
83
|
+
*/
|
|
84
|
+
function dagNodeLocation(nodeId, jobLoc) {
|
|
85
|
+
return jobLoc(nodeId.startsWith("__group:") ? nodeId.slice(8) : nodeId);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
78
88
|
* Validate job dependency DAG.
|
|
79
89
|
* Includes synthetic __group: nodes for tagged dynamic job functions ( Layer 1).
|
|
80
90
|
*/
|
|
81
|
-
function validateJobDag(jobs, workflowName,
|
|
91
|
+
function validateJobDag(jobs, workflowName, jobLoc, dynamicGroupNames) {
|
|
82
92
|
const errors = [];
|
|
83
93
|
const dagNodes = jobs.map((job) => ({
|
|
84
94
|
id: job.name,
|
|
@@ -91,32 +101,20 @@ function validateJobDag(jobs, workflowName, configPath, dynamicGroupNames) {
|
|
|
91
101
|
const result = validateDag(dagNodes);
|
|
92
102
|
if (!result.valid) switch (result.error) {
|
|
93
103
|
case "cycle":
|
|
94
|
-
errors.push(compilerError("E102", `Circular dependency in workflow "${workflowName}": ${result.nodesInCycle.join("
|
|
95
|
-
location:
|
|
96
|
-
file: configPath,
|
|
97
|
-
line: 1,
|
|
98
|
-
column: 1
|
|
99
|
-
},
|
|
104
|
+
errors.push(compilerError("E102", `Circular dependency in workflow "${workflowName}": ${result.nodesInCycle.join(", ")}`, {
|
|
105
|
+
location: dagNodeLocation(result.nodesInCycle[0] ?? "", jobLoc),
|
|
100
106
|
suggestion: "Break the cycle by removing one of the dependencies"
|
|
101
107
|
}));
|
|
102
108
|
break;
|
|
103
109
|
case "self-reference":
|
|
104
110
|
errors.push(compilerError("E103", `Job "${result.nodeId}" in workflow "${workflowName}" depends on itself`, {
|
|
105
|
-
location:
|
|
106
|
-
file: configPath,
|
|
107
|
-
line: 1,
|
|
108
|
-
column: 1
|
|
109
|
-
},
|
|
111
|
+
location: dagNodeLocation(result.nodeId, jobLoc),
|
|
110
112
|
suggestion: "Remove the self-dependency"
|
|
111
113
|
}));
|
|
112
114
|
break;
|
|
113
115
|
case "missing-dependency":
|
|
114
116
|
errors.push(compilerError("E101", `Job "${result.nodeId}" in workflow "${workflowName}" depends on non-existent job "${result.missingDep}"`, {
|
|
115
|
-
location:
|
|
116
|
-
file: configPath,
|
|
117
|
-
line: 1,
|
|
118
|
-
column: 1
|
|
119
|
-
},
|
|
117
|
+
location: dagNodeLocation(result.nodeId, jobLoc),
|
|
120
118
|
suggestion: `Create a job named "${result.missingDep}" or fix the dependency name`
|
|
121
119
|
}));
|
|
122
120
|
break;
|
|
@@ -140,7 +138,7 @@ function resolveNeeds(needs) {
|
|
|
140
138
|
/**
|
|
141
139
|
* Validate static matrix doesn't exceed job limit.
|
|
142
140
|
*/
|
|
143
|
-
function validateStaticMatrix(job, workflowName,
|
|
141
|
+
function validateStaticMatrix(job, workflowName, workflowFile) {
|
|
144
142
|
const errors = [];
|
|
145
143
|
if (!job.matrix) return errors;
|
|
146
144
|
if (typeof job.matrix === "function") return errors;
|
|
@@ -149,11 +147,7 @@ function validateStaticMatrix(job, workflowName, configPath) {
|
|
|
149
147
|
else if (isStaticObject(job.matrix)) expansionCount = Object.values(job.matrix).reduce((acc, dimension) => acc * dimension.length, 1);
|
|
150
148
|
if (job.include) expansionCount += job.include.length;
|
|
151
149
|
if (expansionCount > MAX_STATIC_MATRIX_JOBS) errors.push(compilerError("E104", `Static matrix for job "${job.name}" in workflow "${workflowName}" would generate ${expansionCount} jobs (max: ${MAX_STATIC_MATRIX_JOBS})`, {
|
|
152
|
-
location:
|
|
153
|
-
file: configPath,
|
|
154
|
-
line: 1,
|
|
155
|
-
column: 1
|
|
156
|
-
},
|
|
150
|
+
location: locationForJob(job, workflowFile),
|
|
157
151
|
suggestion: "Reduce matrix dimensions or use exclude patterns to limit combinations"
|
|
158
152
|
}));
|
|
159
153
|
return errors;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kici-dev/compiler",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Compiler and CLI for KiCI workflows. Compiles `.kici/workflows/*.ts` to a `kici.lock.json` file consumed by the orchestrator and agents, and runs workflows locally or against a remote orchestrator.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ci",
|
|
@@ -53,29 +53,26 @@
|
|
|
53
53
|
"fast-glob": "^3.3.3",
|
|
54
54
|
"open": "^11.0.0",
|
|
55
55
|
"picocolors": "^1.1.1",
|
|
56
|
-
"picomatch": "^4.0.
|
|
57
|
-
"
|
|
58
|
-
"tar": "^7.5.16",
|
|
56
|
+
"picomatch": "^4.0.5",
|
|
57
|
+
"tar": "^7.5.20",
|
|
59
58
|
"typescript": "^6.0.3",
|
|
60
|
-
"ws": "^8.21.
|
|
59
|
+
"ws": "^8.21.1",
|
|
60
|
+
"wsl-utils": "^0.3.0",
|
|
61
61
|
"yaml": "^2.9.0",
|
|
62
62
|
"zod": "^4.4.3",
|
|
63
63
|
"zx": "^8.8.5",
|
|
64
|
-
"@kici-dev/
|
|
65
|
-
"@kici-dev/
|
|
66
|
-
"@kici-dev/
|
|
67
|
-
"@kici-dev/
|
|
64
|
+
"@kici-dev/agent": "0.3.0",
|
|
65
|
+
"@kici-dev/engine": "0.3.0",
|
|
66
|
+
"@kici-dev/orchestrator": "0.3.0",
|
|
67
|
+
"@kici-dev/core": "0.3.0"
|
|
68
68
|
},
|
|
69
69
|
"peerDependencies": {
|
|
70
|
-
"@kici-dev/sdk": "0.
|
|
71
|
-
},
|
|
72
|
-
"devDependencies": {
|
|
73
|
-
"@types/proper-lockfile": "^4.1.4"
|
|
70
|
+
"@kici-dev/sdk": "0.3.0"
|
|
74
71
|
},
|
|
75
72
|
"scripts": {
|
|
76
|
-
"build": "node ../../scripts/build-ts.mjs &&
|
|
73
|
+
"build": "node ../../scripts/build-ts.mjs && tsgo --emitDeclarationOnly",
|
|
77
74
|
"postbuild": "zx hack/postbuild.mjs",
|
|
78
|
-
"typecheck": "
|
|
75
|
+
"typecheck": "tsgo --noEmit",
|
|
79
76
|
"test": "vitest run",
|
|
80
77
|
"test:watch": "vitest",
|
|
81
78
|
"postinstall": "node hack/postinstall.mjs"
|