@kici-dev/compiler 0.1.10 → 0.1.12
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/cli-banner.d.ts +11 -0
- package/dist/cli-banner.js +18 -0
- package/dist/cli.js +5 -3
- package/dist/commands/detect-package-manager.d.ts +42 -0
- package/dist/commands/init.d.ts +6 -1
- package/dist/commands/init.js +23 -3
- package/dist/commands/status.d.ts +4 -0
- package/dist/commands/status.js +4 -2
- package/dist/llm-context/llms-full.txt +77 -29
- package/dist/lockfile/generator.d.ts +11 -3
- package/dist/lockfile/generator.js +17 -7
- package/dist/remote/client.d.ts +2 -0
- package/dist/templates/package-json.js +1 -1
- package/dist/types.d.ts +7 -1
- package/package.json +4 -4
- package/sbom.spdx.json +48 -48
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Whether the version banner should be suppressed for the command about to run.
|
|
4
|
+
*
|
|
5
|
+
* Structured-output (`--json`) and quiet (`--quiet`) invocations must keep stdout
|
|
6
|
+
* free of human-facing chrome so callers can parse stdout directly. Uses
|
|
7
|
+
* `optsWithGlobals()` so the check stays correct if either flag is ever promoted
|
|
8
|
+
* to a global option.
|
|
9
|
+
*/
|
|
10
|
+
export declare function shouldSuppressBanner(actionCommand: Command): boolean;
|
|
11
|
+
//# sourceMappingURL=cli-banner.d.ts.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import "./chunk-gOLHoazu.js";
|
|
2
|
+
//#region src/cli-banner.ts
|
|
3
|
+
/**
|
|
4
|
+
* Whether the version banner should be suppressed for the command about to run.
|
|
5
|
+
*
|
|
6
|
+
* Structured-output (`--json`) and quiet (`--quiet`) invocations must keep stdout
|
|
7
|
+
* free of human-facing chrome so callers can parse stdout directly. Uses
|
|
8
|
+
* `optsWithGlobals()` so the check stays correct if either flag is ever promoted
|
|
9
|
+
* to a global option.
|
|
10
|
+
*/
|
|
11
|
+
function shouldSuppressBanner(actionCommand) {
|
|
12
|
+
const opts = actionCommand.optsWithGlobals();
|
|
13
|
+
return Boolean(opts.json) || Boolean(opts.quiet);
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
export { shouldSuppressBanner };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=cli-banner.js.map
|
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import "./chunk-gOLHoazu.js";
|
|
3
|
+
import { shouldSuppressBanner } from "./cli-banner.js";
|
|
3
4
|
import { compileCommand } from "./commands/compile.js";
|
|
4
5
|
import { watchCommand } from "./commands/watch.js";
|
|
5
6
|
import { fixtureCommand } from "./commands/fixture.js";
|
|
@@ -22,10 +23,11 @@ import "./commands/index.js";
|
|
|
22
23
|
import { Argument, Command, Option } from "commander";
|
|
23
24
|
import pc from "picocolors";
|
|
24
25
|
//#region src/cli.ts
|
|
25
|
-
const version = "0.1.
|
|
26
|
+
const version = "0.1.12";
|
|
26
27
|
const program = new Command();
|
|
27
28
|
program.name("kici").description("KiCI workflow compiler").version(version);
|
|
28
|
-
program.hook("preAction", () => {
|
|
29
|
+
program.hook("preAction", (_thisCommand, actionCommand) => {
|
|
30
|
+
if (shouldSuppressBanner(actionCommand)) return;
|
|
29
31
|
console.log(pc.gray(`kici v${version}`));
|
|
30
32
|
});
|
|
31
33
|
program.configureOutput({ outputError: (str, write) => {
|
|
@@ -90,7 +92,7 @@ program.command("test").argument("[event]", "Event type to preview (e.g., push,
|
|
|
90
92
|
const success = await testCommand(event, options);
|
|
91
93
|
process.exit(success ? 0 : 1);
|
|
92
94
|
});
|
|
93
|
-
program.command("init").description("Initialize .kici/ directory with default workflows").option("--force", "Overwrite existing .kici/ directory", false).option("--skip-install", "Create files without
|
|
95
|
+
program.command("init").description("Initialize .kici/ directory with default workflows").option("--force", "Overwrite existing .kici/ directory", false).option("--skip-install", "Create files without installing dependencies", false).option("--package-manager <npm|pnpm|yarn>", "Force a package manager for the install step (default: auto-detect)").option("--mjs", "JavaScript-only mode (no TypeScript, no dependencies)", false).option("--no-agents-md", "Skip writing .kici/AGENTS.md (LLM authoring context)").option("--private-registry <url>", "Scaffold a workflow registries: entry pointing at <url>").option("--private-registry-scope <scope>", "Optional npm package scope (e.g. @my-org) for the private registry").option("--private-registry-secret <ref>", "Qualified secret reference (env:NAME) the private registry token comes from", "production:NPM_TOKEN").addOption(new Option("--use-verdaccio-local").default(false).hideHelp()).action(async (options) => {
|
|
94
96
|
const success = await initCommand({
|
|
95
97
|
...options,
|
|
96
98
|
noAgentsMd: options.agentsMd === false
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package-manager detection for `kici init`.
|
|
3
|
+
*
|
|
4
|
+
* Determines which package manager (npm / pnpm / yarn) to use for the
|
|
5
|
+
* dependency install step in a freshly initialized `.kici/` project, so the
|
|
6
|
+
* generated lockfile matches the rest of the user's repository instead of
|
|
7
|
+
* always producing an npm `package-lock.json`.
|
|
8
|
+
*/
|
|
9
|
+
/** Supported package managers for the `kici init` dependency install step. */
|
|
10
|
+
export declare enum PackageManager {
|
|
11
|
+
Npm = "npm",
|
|
12
|
+
Pnpm = "pnpm",
|
|
13
|
+
Yarn = "yarn"
|
|
14
|
+
}
|
|
15
|
+
/** All package-manager identifiers, for flag validation. */
|
|
16
|
+
export declare const PACKAGE_MANAGERS: readonly PackageManager[];
|
|
17
|
+
/**
|
|
18
|
+
* Parse a raw string into a {@link PackageManager}, or `null` when it does not
|
|
19
|
+
* name a supported manager. Accepts bare names (`pnpm`) used by the flag and
|
|
20
|
+
* the env-var tiers.
|
|
21
|
+
*/
|
|
22
|
+
export declare function parsePackageManager(value: string): PackageManager | null;
|
|
23
|
+
/** Map a detected manager to its install command argv (binary + args). */
|
|
24
|
+
export declare function installCommand(pm: PackageManager): [string, 'install'];
|
|
25
|
+
/**
|
|
26
|
+
* Detect the package manager the user's project relies on.
|
|
27
|
+
*
|
|
28
|
+
* Priority order (first match wins):
|
|
29
|
+
* 1. `packageManager` field in `<projectDir>/package.json` (Corepack
|
|
30
|
+
* convention, e.g. `"packageManager": "pnpm@9.x"`). Only the name before
|
|
31
|
+
* `@` is parsed; an unrecognized name falls through.
|
|
32
|
+
* 2. A lockfile in the project root (`pnpm-lock.yaml` > `yarn.lock` >
|
|
33
|
+
* `package-lock.json`).
|
|
34
|
+
* 3. The `npm_config_user_agent` env var (set by `pnpm dlx` / `yarn dlx` /
|
|
35
|
+
* `npx`); the leading `<name>/` segment names the manager.
|
|
36
|
+
* 4. Default to npm when nothing matches, so we never guess wrong and emit a
|
|
37
|
+
* lockfile the user did not ask for.
|
|
38
|
+
*
|
|
39
|
+
* @param projectDir - The project root to inspect (the cwd `kici init` runs in).
|
|
40
|
+
*/
|
|
41
|
+
export declare function detectPackageManager(projectDir: string): Promise<PackageManager>;
|
|
42
|
+
//# sourceMappingURL=detect-package-manager.d.ts.map
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -10,8 +10,13 @@
|
|
|
10
10
|
export interface InitOptions {
|
|
11
11
|
/** Overwrite existing .kici/ directory */
|
|
12
12
|
force?: boolean;
|
|
13
|
-
/** Skip
|
|
13
|
+
/** Skip the dependency install step */
|
|
14
14
|
skipInstall?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Force a specific package manager for the install step, bypassing detection.
|
|
17
|
+
* One of `npm` / `pnpm` / `yarn`.
|
|
18
|
+
*/
|
|
19
|
+
packageManager?: string;
|
|
15
20
|
/** JavaScript-only mode (no TypeScript, no dependencies) */
|
|
16
21
|
mjs?: boolean;
|
|
17
22
|
/** Write .npmrc pointing @kici-dev scope to local Verdaccio */
|
package/dist/commands/init.js
CHANGED
|
@@ -11,6 +11,7 @@ import pc from "picocolors";
|
|
|
11
11
|
import { access, mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
12
12
|
import path from "node:path";
|
|
13
13
|
import { initZx, logger, toErrorMessage } from "@kici-dev/shared";
|
|
14
|
+
import { detectPackageManager, installCommand, parsePackageManager } from "@kici-dev/shared/package-manager";
|
|
14
15
|
import { $ } from "zx";
|
|
15
16
|
import { checkbox, confirm, select } from "@inquirer/prompts";
|
|
16
17
|
//#region src/commands/init.ts
|
|
@@ -93,8 +94,9 @@ async function initCommand(options = {}) {
|
|
|
93
94
|
await mkdir(path.join(kiciDir, "types"), { recursive: true });
|
|
94
95
|
logger.info(pc.gray("Created .kici/types/ for generated type declarations"));
|
|
95
96
|
if (!options.skipInstall) {
|
|
96
|
-
|
|
97
|
-
|
|
97
|
+
const [bin, action] = installCommand(await resolvePackageManager(options.packageManager));
|
|
98
|
+
logger.info(pc.gray(`Running ${bin} ${action}...`));
|
|
99
|
+
await $`cd ${kiciDir} && ${bin} ${action}`;
|
|
98
100
|
}
|
|
99
101
|
}
|
|
100
102
|
if (options.privateRegistry) await writePrivateRegistryScaffold(kiciDir, {
|
|
@@ -112,7 +114,7 @@ async function initCommand(options = {}) {
|
|
|
112
114
|
logger.info(pc.gray("Next steps:"));
|
|
113
115
|
logger.info(pc.gray(" 1. Edit workflows in .kici/workflows/"));
|
|
114
116
|
if (options.mjs || options.skipInstall) {
|
|
115
|
-
logger.info(pc.gray(" 2. Run
|
|
117
|
+
logger.info(pc.gray(" 2. Run your package manager install in .kici/ to generate a lockfile"));
|
|
116
118
|
logger.info(pc.gray(" 3. Test locally: kici test push"));
|
|
117
119
|
logger.info(pc.gray(" 4. Commit .kici/ to your repository\n"));
|
|
118
120
|
} else {
|
|
@@ -204,6 +206,24 @@ async function detectDevelopmentMode() {
|
|
|
204
206
|
}
|
|
205
207
|
}
|
|
206
208
|
/**
|
|
209
|
+
* Resolve which package manager to use for the dependency install step.
|
|
210
|
+
*
|
|
211
|
+
* An explicit `--package-manager <name>` flag wins and short-circuits
|
|
212
|
+
* detection; an invalid value throws so the user sees a clear error. With no
|
|
213
|
+
* flag, fall back to {@link detectPackageManager} over the current working
|
|
214
|
+
* directory (npm / pnpm / yarn signals, defaulting to npm).
|
|
215
|
+
*
|
|
216
|
+
* @param override - The raw `--package-manager` flag value, if provided.
|
|
217
|
+
*/
|
|
218
|
+
async function resolvePackageManager(override) {
|
|
219
|
+
if (override) {
|
|
220
|
+
const parsed = parsePackageManager(override);
|
|
221
|
+
if (!parsed) throw new Error(`Invalid --package-manager value '${override}'. Expected one of: npm, pnpm, yarn.`);
|
|
222
|
+
return parsed;
|
|
223
|
+
}
|
|
224
|
+
return detectPackageManager(process.cwd());
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
207
227
|
* Generate tsconfig.json content with optional TypeScript path mappings.
|
|
208
228
|
*
|
|
209
229
|
* If sdkPath is configured in .kici/package.json, adds path mapping
|
|
@@ -27,4 +27,8 @@ export interface StatusOptions {
|
|
|
27
27
|
* @returns true on success, false on error
|
|
28
28
|
*/
|
|
29
29
|
export declare function statusCommand(runId: string, options?: StatusOptions): Promise<boolean>;
|
|
30
|
+
/**
|
|
31
|
+
* Display a run summary from remote status (+ local context).
|
|
32
|
+
*/
|
|
33
|
+
export declare function displayRunSummary(remote: import('../remote/client.js').RunStatusResponse, local?: import('../remote/history.js').HistoryEntry): void;
|
|
30
34
|
//# sourceMappingURL=status.d.ts.map
|
package/dist/commands/status.js
CHANGED
|
@@ -15,7 +15,7 @@ import { formatDuration, logger, toErrorMessage } from "@kici-dev/shared";
|
|
|
15
15
|
* Looks up local history first, then fetches from the orchestrator for
|
|
16
16
|
* up-to-date status and logs.
|
|
17
17
|
*/
|
|
18
|
-
const CLI_VERSION = "0.1.
|
|
18
|
+
const CLI_VERSION = "0.1.12";
|
|
19
19
|
/**
|
|
20
20
|
* Show status and details of a test run.
|
|
21
21
|
*
|
|
@@ -100,6 +100,7 @@ function displayRunSummary(remote, local) {
|
|
|
100
100
|
const statusColor = remote.status === "success" ? pc.green : remote.status === "failed" ? pc.red : remote.status === "cancelled" ? pc.yellow : pc.blue;
|
|
101
101
|
logger.info(pc.bold(`\nRun: ${remote.runId}`));
|
|
102
102
|
logger.info(`Status: ${statusColor(remote.status)}`);
|
|
103
|
+
if (remote.status === "failed" && remote.failureReason) logger.info(`Reason: ${pc.red(remote.failureReason)}`);
|
|
103
104
|
if (local?.fixtureId) logger.info(`Fixture: ${pc.cyan(local.fixtureId)}`);
|
|
104
105
|
if (local?.endpoint) logger.info(`Endpoint: ${pc.gray(local.endpoint)}`);
|
|
105
106
|
if (local?.startedAt) logger.info(`Started: ${pc.gray(local.startedAt)}`);
|
|
@@ -114,6 +115,7 @@ function displayRunSummary(remote, local) {
|
|
|
114
115
|
const jobColor = job.status === "success" ? pc.green : job.status === "failed" ? pc.red : job.status === "cancelled" ? pc.yellow : pc.blue;
|
|
115
116
|
const duration = job.durationMs ? formatDuration(job.durationMs) : "-";
|
|
116
117
|
logger.info(` ${jobColor(job.status.padEnd(12))} ${job.name.padEnd(nameWidth)} ${pc.gray(duration)}`);
|
|
118
|
+
if (job.status === "failed" && job.errorMessage) logger.info(` ${pc.red("↳")} ${pc.gray(job.errorMessage)}`);
|
|
117
119
|
}
|
|
118
120
|
}
|
|
119
121
|
}
|
|
@@ -205,6 +207,6 @@ function displayAuthInfo(config) {
|
|
|
205
207
|
logger.info("");
|
|
206
208
|
}
|
|
207
209
|
//#endregion
|
|
208
|
-
export { statusCommand };
|
|
210
|
+
export { displayRunSummary, statusCommand };
|
|
209
211
|
|
|
210
212
|
//# sourceMappingURL=status.js.map
|
|
@@ -111,17 +111,20 @@ This will:
|
|
|
111
111
|
1. Create `.kici/` directory with `workflows/`, `tests/`, `types/`, `package.json`, and `tsconfig.json`
|
|
112
112
|
2. Create a `.kiciignore` file with sensible defaults
|
|
113
113
|
3. Let you choose from starter workflow templates (hello-world, pr-checks)
|
|
114
|
-
4.
|
|
114
|
+
4. Install dependencies using the package manager detected for your repo (npm, pnpm, or yarn)
|
|
115
115
|
5. Update `.gitignore` to exclude `.kici/node_modules/`
|
|
116
116
|
6. Optionally install a pre-commit hook to auto-compile workflows
|
|
117
117
|
|
|
118
|
+
The package manager is detected from your repo's `packageManager` field, lockfile, or the manager that invoked `kici`, defaulting to npm. Pass `--package-manager <npm|pnpm|yarn>` to override it.
|
|
119
|
+
|
|
118
120
|
### Options
|
|
119
121
|
|
|
120
|
-
| Flag
|
|
121
|
-
|
|
|
122
|
-
| `--force`
|
|
123
|
-
| `--skip-install`
|
|
124
|
-
| `--
|
|
122
|
+
| Flag | Description |
|
|
123
|
+
| ------------------------------------- | ------------------------------------------------------------ |
|
|
124
|
+
| `--force` | Overwrite existing `.kici/` directory |
|
|
125
|
+
| `--skip-install` | Create files without installing dependencies |
|
|
126
|
+
| `--package-manager <npm\|pnpm\|yarn>` | Force a package manager for the install step (default: auto) |
|
|
127
|
+
| `--mjs` | JavaScript-only mode (no TypeScript, no deps) |
|
|
125
128
|
|
|
126
129
|
### MJS mode
|
|
127
130
|
|
|
@@ -146,6 +149,20 @@ pnpm add @kici-dev/sdk
|
|
|
146
149
|
pnpm add -D @kici-dev/compiler
|
|
147
150
|
```
|
|
148
151
|
|
|
152
|
+
The examples use pnpm, but npm and yarn work too. With npm:
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
npm install @kici-dev/sdk
|
|
156
|
+
npm install -D @kici-dev/compiler
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
With yarn:
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
yarn add @kici-dev/sdk
|
|
163
|
+
yarn add -D @kici-dev/compiler
|
|
164
|
+
```
|
|
165
|
+
|
|
149
166
|
### Create the workflow directory
|
|
150
167
|
|
|
151
168
|
KiCI looks for workflows in `.kici/workflows/`:
|
|
@@ -291,6 +308,17 @@ npm install lodash
|
|
|
291
308
|
|
|
292
309
|
This updates `.kici/package.json` and generates (or updates) `package-lock.json`.
|
|
293
310
|
|
|
311
|
+
### Dependency resolution contract
|
|
312
|
+
|
|
313
|
+
Every `.kici/` dependency must be resolvable from the **single cloned repository**. When a job runs, the agent clones only this repository and installs `.kici/` dependencies with your repo's package manager (npm or pnpm — yarn is not yet supported and is rejected with an actionable error). A dependency that points outside the cloned repo cannot be resolved.
|
|
314
|
+
|
|
315
|
+
In practice:
|
|
316
|
+
|
|
317
|
+
- **From a registry** — the common case. Pin a published version (a private registry works — see [Private registries](./private-registries.md)). Available for any package manager.
|
|
318
|
+
- **From an in-repo workspace sibling** — if your `.kici/` is a member of a **pnpm workspace**, it can depend on a sibling package in the same repo via `workspace:*`. The whole repo is cloned, so the sibling is present and resolves; the agent also builds your `.kici/` dependency closure after install, so a sibling's build output exists before the workflow that imports it loads. A `file:`/`link:`/`portal:` path is allowed only when it stays inside the repository.
|
|
319
|
+
|
|
320
|
+
What fails fast (with an actionable error naming the dependency, not a raw package-manager error): a `workspace:` dependency in an **npm** project (npm has no workspace protocol — pin a published version or switch to pnpm), and any `file:`/`link:`/`portal:` path that points outside the cloned repo.
|
|
321
|
+
|
|
294
322
|
Then use the package in your workflow:
|
|
295
323
|
|
|
296
324
|
```typescript
|
|
@@ -317,9 +345,9 @@ export default workflow('deploy', {
|
|
|
317
345
|
|
|
318
346
|
When the KiCI agent runs your workflow, dependencies are handled automatically:
|
|
319
347
|
|
|
320
|
-
1. **First run (cache miss):** A build agent installs dependencies from `.kici/package.json`, packs
|
|
321
|
-
2. **Subsequent runs (cache hit):** The execution agent downloads the cached tarball and extracts it -- no
|
|
322
|
-
3. **Lockfile changes:** When `.kici/package-lock.json`
|
|
348
|
+
1. **First run (cache miss):** A build agent installs dependencies from `.kici/package.json`, packs the resolved dependency tree into a tarball, and uploads it to cache storage. For a pnpm workspace this closure includes the shared store and any in-repo workspace siblings `.kici` resolves.
|
|
349
|
+
2. **Subsequent runs (cache hit):** The execution agent downloads the cached tarball and extracts it -- no install needed.
|
|
350
|
+
3. **Lockfile changes:** When your lockfile changes (`.kici/package-lock.json` for npm, or the repo-root `pnpm-lock.yaml` for a pnpm workspace), the cache is invalidated and a fresh build runs.
|
|
323
351
|
|
|
324
352
|
This means the first run after a dependency change is slower (build + execution), but all subsequent runs are fast.
|
|
325
353
|
|
|
@@ -418,6 +446,7 @@ The compiler watches `.kici/workflows/*.ts` and recompiles on every save.
|
|
|
418
446
|
|
|
419
447
|
## Next steps
|
|
420
448
|
|
|
449
|
+
- **[5-minute quickstart](quickstart.md)** -- ready to run your workflow on real infrastructure? Stand up an orchestrator + agent (Docker / Podman or bare metal)
|
|
421
450
|
- **[SDK reference](sdk-reference.md)** -- complete API for workflows, jobs, steps, triggers, rules, and matrix
|
|
422
451
|
- **[CLI reference](cli-reference.md)** -- all CLI commands with options and examples
|
|
423
452
|
- **[Workflow patterns](workflow-patterns.md)** -- common patterns for real-world CI/CD workflows
|
|
@@ -4169,6 +4198,8 @@ The `@kici-dev/compiler` package provides the `kici` CLI for compiling, testing,
|
|
|
4169
4198
|
pnpm add -D @kici-dev/compiler
|
|
4170
4199
|
```
|
|
4171
4200
|
|
|
4201
|
+
The examples use pnpm, but npm and yarn work too — `npm install -D @kici-dev/compiler` or `yarn add -D @kici-dev/compiler`.
|
|
4202
|
+
|
|
4172
4203
|
Run commands with `npx kici` or add scripts to your `package.json`:
|
|
4173
4204
|
|
|
4174
4205
|
```json
|
|
@@ -4646,6 +4677,8 @@ Show details for a specific test run. Fetches from the orchestrator with fallbac
|
|
|
4646
4677
|
|
|
4647
4678
|
The status output includes an **auth section** showing login state, active organization, and PAT expiry. A warning appears when the PAT expires within 7 days.
|
|
4648
4679
|
|
|
4680
|
+
For a failed run, the output prints a `Reason:` line with the run's failure reason and shows the failed job's error inline, so you can see why a run failed without opening the dashboard. When provisioning an agent failed before any step ran, this reason is the captured scaler error (for example a missing binary or an unpullable image) rather than a generic "no agents available" message.
|
|
4681
|
+
|
|
4649
4682
|
```bash
|
|
4650
4683
|
kici status <run-id> [options]
|
|
4651
4684
|
```
|
|
@@ -4680,6 +4713,11 @@ kici status abc123 --logs --job build
|
|
|
4680
4713
|
kici status abc123 --json
|
|
4681
4714
|
```
|
|
4682
4715
|
|
|
4716
|
+
When `--json` is set, `kici` emits only the JSON document on stdout — the
|
|
4717
|
+
`kici v<version>` banner is suppressed — so the output is safe to pipe into
|
|
4718
|
+
`jq` or `JSON.parse`. The same holds for the other `--json` commands (`kici run
|
|
4719
|
+
remote --json`, `kici workflows list --json`) and for `--quiet`.
|
|
4720
|
+
|
|
4683
4721
|
### kici cancel
|
|
4684
4722
|
|
|
4685
4723
|
Cancel a running workflow or all runs on a branch.
|
|
@@ -4832,15 +4870,16 @@ kici init [options]
|
|
|
4832
4870
|
|
|
4833
4871
|
**Options:**
|
|
4834
4872
|
|
|
4835
|
-
| Option
|
|
4836
|
-
|
|
|
4837
|
-
| `--force`
|
|
4838
|
-
| `--skip-install`
|
|
4839
|
-
| `--
|
|
4840
|
-
| `--
|
|
4841
|
-
| `--
|
|
4842
|
-
| `--private-registry
|
|
4843
|
-
| `--private-registry-
|
|
4873
|
+
| Option | Default | Description |
|
|
4874
|
+
| ------------------------------------- | ---------------------- | ------------------------------------------------------------------------------------------------------- |
|
|
4875
|
+
| `--force` | `false` | Overwrite existing `.kici/` directory |
|
|
4876
|
+
| `--skip-install` | `false` | Create files without installing dependencies |
|
|
4877
|
+
| `--package-manager <npm\|pnpm\|yarn>` | auto-detect | Force a package manager for the install step (default: detect from your repo) |
|
|
4878
|
+
| `--mjs` | `false` | JavaScript-only mode (no TypeScript, no deps) |
|
|
4879
|
+
| `--no-agents-md` | writes `AGENTS.md` | Skip writing `.kici/AGENTS.md` (the LLM authoring context file) |
|
|
4880
|
+
| `--private-registry <url>` | none | Scaffold a workflow `registries:` entry pointing at `<url>` (e.g. CodeArtifact, GH Packages, Verdaccio) |
|
|
4881
|
+
| `--private-registry-scope <scope>` | none | Optional npm package scope (e.g. `@my-org`) for the private registry |
|
|
4882
|
+
| `--private-registry-secret <ref>` | `production:NPM_TOKEN` | Qualified secret reference (`env:NAME`) the private registry token comes from |
|
|
4844
4883
|
|
|
4845
4884
|
**Examples:**
|
|
4846
4885
|
|
|
@@ -4851,9 +4890,12 @@ kici init
|
|
|
4851
4890
|
# Overwrite existing setup
|
|
4852
4891
|
kici init --force
|
|
4853
4892
|
|
|
4854
|
-
# Skip
|
|
4893
|
+
# Skip dependency install (faster, install manually later)
|
|
4855
4894
|
kici init --skip-install
|
|
4856
4895
|
|
|
4896
|
+
# Force a specific package manager (default: detect from your repo)
|
|
4897
|
+
kici init --package-manager pnpm
|
|
4898
|
+
|
|
4857
4899
|
# JavaScript mode (no TypeScript)
|
|
4858
4900
|
kici init --mjs
|
|
4859
4901
|
|
|
@@ -4886,6 +4928,8 @@ In interactive mode (TTY), `kici init` prompts you to:
|
|
|
4886
4928
|
1. Select which workflow templates to include
|
|
4887
4929
|
2. Optionally install a pre-commit hook
|
|
4888
4930
|
|
|
4931
|
+
**Package manager:** the dependency install step uses the package manager detected for your repo — the `packageManager` field in the nearest `package.json` (Corepack convention), then a lockfile in the project root (`pnpm-lock.yaml` → pnpm, `yarn.lock` → yarn, `package-lock.json` → npm), then the package manager that invoked `kici` (`pnpm dlx` / `yarn dlx` / `npx`), defaulting to npm. Pass `--package-manager <npm|pnpm|yarn>` to override detection, or `--skip-install` to set up the files and install later yourself.
|
|
4932
|
+
|
|
4889
4933
|
**Development mode:** When `KICI_DEV=true` or `package.json` has `"kici": { "development": true }`, the generated `package.json` uses prerelease-compatible version ranges (`>=0.0.1-0`) so npm resolves Verdaccio's prerelease builds.
|
|
4890
4934
|
|
|
4891
4935
|
### kici hook install
|
|
@@ -6395,7 +6439,7 @@ The content area has the following tabs:
|
|
|
6395
6439
|
|
|
6396
6440
|
- **Logs** (default) -- shows log output for the selected job or step
|
|
6397
6441
|
- **Payload** -- webhook payload viewer showing the raw event payload that triggered the run
|
|
6398
|
-
- **Timeline** -- CSS Gantt chart showing the execution timeline of all jobs, with percentage-based bars and striped animation for running jobs
|
|
6442
|
+
- **Timeline** -- CSS Gantt chart showing the execution timeline of all jobs, with percentage-based bars and striped animation for running jobs. A **Provisioning** milestones section between the dispatch and execution phases plots scaler lifecycle events for the run — including a **Provisioning failed** marker when the scaler could not bring an agent up
|
|
6399
6443
|
- **Summary** -- contextual overview scoped to the current selection (run-level trigger/repo/timing info, or job-level execution context with environment variables, runtime info, and sandbox details)
|
|
6400
6444
|
|
|
6401
6445
|
On wide desktop (>= 1200px), Metadata is shown in a dedicated sidebar panel instead of as a tab.
|
|
@@ -6478,6 +6522,12 @@ When viewing a running job, logs appear in real time as the agent executes steps
|
|
|
6478
6522
|
- If the WS connection drops, the dashboard reconnects automatically and refetches all cached data to catch up on missed updates.
|
|
6479
6523
|
- Log lines received during streaming are held in memory. For very long-running steps with massive output, the REST endpoint is the authoritative source for complete logs.
|
|
6480
6524
|
|
|
6525
|
+
### Provisioning logs
|
|
6526
|
+
|
|
6527
|
+
Above the step logs, a collapsible **Provisioning logs** section shows the orchestrator-side lifecycle of the agent that ran the job — the scaler lifecycle events emitted while bringing an agent up. It starts expanded while provisioning is in progress (no step logs yet) and collapses once steps begin producing output.
|
|
6528
|
+
|
|
6529
|
+
When the scaler **fails** to provision an agent (for example a missing binary, an unpullable container image, or a microVM that fails to boot), the failure appears here along with a bounded tail of the agent process's own stdout/stderr captured by the scaler. This is the surface to check for a run that fails with no step logs at all — the agent never started, so the cause lives in the provisioning lifecycle rather than in any step's output.
|
|
6530
|
+
|
|
6481
6531
|
### Performance
|
|
6482
6532
|
|
|
6483
6533
|
The log viewer uses virtualized scrolling to handle large outputs. Only the visible lines plus a small buffer are rendered in the DOM, keeping performance smooth even for logs with 10,000+ lines.
|
|
@@ -7170,13 +7220,12 @@ The KiCI CLI reads the following environment variables to customize its behavior
|
|
|
7170
7220
|
|
|
7171
7221
|
## Authentication
|
|
7172
7222
|
|
|
7173
|
-
| Variable
|
|
7174
|
-
|
|
|
7175
|
-
| `KICI_OIDC_ISSUER`
|
|
7176
|
-
| `KICI_OIDC_CLIENT_ID`
|
|
7177
|
-
| `
|
|
7178
|
-
| `
|
|
7179
|
-
| `KICI_CONFIG_DIR` | Override the KiCI config directory | `~/.kici` |
|
|
7223
|
+
| Variable | Description | Default |
|
|
7224
|
+
| --------------------- | ----------------------------------------------------------- | ------------------ |
|
|
7225
|
+
| `KICI_OIDC_ISSUER` | OIDC issuer URL for authentication (required for OAuth) | none — must be set |
|
|
7226
|
+
| `KICI_OIDC_CLIENT_ID` | OIDC client ID for the CLI application (required for OAuth) | none — must be set |
|
|
7227
|
+
| `KICI_PLATFORM_URL` | Platform API base URL (required for OAuth) | none — must be set |
|
|
7228
|
+
| `KICI_CONFIG_DIR` | Override the KiCI config directory | `~/.kici` |
|
|
7180
7229
|
|
|
7181
7230
|
## Browser behavior
|
|
7182
7231
|
|
|
@@ -7209,7 +7258,6 @@ Point the CLI to a self-hosted or testing OIDC provider:
|
|
|
7209
7258
|
```bash
|
|
7210
7259
|
export KICI_OIDC_ISSUER=https://your-idp.example.com
|
|
7211
7260
|
export KICI_OIDC_CLIENT_ID=your-client-id
|
|
7212
|
-
export KICI_OIDC_PROJECT_ID=your-project-id
|
|
7213
7261
|
export KICI_PLATFORM_URL=https://your-platform.example.com
|
|
7214
7262
|
kici login
|
|
7215
7263
|
```
|
|
@@ -8247,7 +8295,7 @@ registries: [
|
|
|
8247
8295
|
|
|
8248
8296
|
- **Per-environment scoping.** Every `tokenSecret` and `installEnv` entry is qualified with an environment name. The orchestrator runs the same protection-rule pipeline (branch / trust / concurrency / reviewer / wait-timer) against each named environment **before** resolving any secret, so a workflow that wants a `production` token from a feature branch is rejected exactly like a job that tries to deploy to `production` from a feature branch.
|
|
8249
8297
|
- **Untrusted contributors get no tokens.** When a fork PR is dispatched and the contributor-trust resolution returns anything other than `trusted`, the orchestrator strips both `npmRegistries` and `installEnvSecrets` out of the dispatch. The install runs without auth and fails naturally on the first private dep — fork PRs cannot ever observe a registry token, even if a misconfigured environment lacks an explicit `requiredTrustTier`.
|
|
8250
|
-
-
|
|
8298
|
+
- **Lifecycle scripts disabled.** Whenever a private registry is in scope, the agent runs the install with `--ignore-scripts` (npm or pnpm alike). A malicious `preinstall` / `postinstall` hook in committed `package.json` cannot read the synthesized token env vars, even though they exist in the install subprocess. For a pnpm workspace, the agent builds your in-repo dependency closure as a separate step **after** the install's auth is torn down, so build scripts never see the tokens either.
|
|
8251
8299
|
- **Stderr is redacted.** If the install fails, the agent masks every token literal out of the surfaced stderr / stdout chunks before logging.
|
|
8252
8300
|
- **Job-scoped env-var names.** The synthesized auth env var is `KICI_NPM_TOKEN_<jobIdShort>_<i>` where `jobIdShort` is the first 8 chars of the dispatched job id. The name is unguessable from outside the install subprocess and not reused across jobs.
|
|
8253
8301
|
- **`.npmrc` restored.** Whatever the agent appended for one install is stripped (or the file unlinked) on cleanup, so the workspace is never permanently modified.
|
|
@@ -8,11 +8,19 @@ import { type LockFile, type LockTrigger, type WorkflowWithSource } from '../typ
|
|
|
8
8
|
*/
|
|
9
9
|
export declare function detectGitRoot(): string;
|
|
10
10
|
/**
|
|
11
|
-
* Compute SHA-256 hash of the
|
|
12
|
-
*
|
|
11
|
+
* Compute the dependency-cache key: a SHA-256 hash of the repo's lockfile,
|
|
12
|
+
* scoped to the detected package manager.
|
|
13
|
+
*
|
|
14
|
+
* The authoritative lockfile differs by manager: `.kici/package-lock.json` for
|
|
15
|
+
* npm, the repo-root `pnpm-lock.yaml` for a pnpm workspace, the repo-root
|
|
16
|
+
* `yarn.lock` for yarn. A pnpm/yarn `.kici/` member resolves against the root
|
|
17
|
+
* lockfile, so keying on `.kici/package-lock.json` alone would miss the
|
|
18
|
+
* authoritative graph. The hash input is prefixed with the manager name so two
|
|
19
|
+
* managers can never collide on identical lockfile bytes (and a restored tree
|
|
20
|
+
* can never be the wrong layout for the agent's manager).
|
|
13
21
|
*
|
|
14
22
|
* @param gitRoot - Absolute path to git repository root
|
|
15
|
-
* @returns Hex SHA-256 hash string, or null if no lockfile found
|
|
23
|
+
* @returns Hex SHA-256 hash string, or null if no lockfile is found
|
|
16
24
|
*/
|
|
17
25
|
export declare function computeLockfileHash(gitRoot: string): string | null;
|
|
18
26
|
/**
|
|
@@ -8,6 +8,7 @@ import path from "node:path";
|
|
|
8
8
|
import { execSync } from "node:child_process";
|
|
9
9
|
import { sha256 } from "@kici-dev/shared";
|
|
10
10
|
import { getDynamicJobGroup, isDynamicFunction, isDynamicGroupRef, isDynamicJobFn, isStaticArray, isStaticObject } from "@kici-dev/sdk";
|
|
11
|
+
import { PackageManager, detectPackageManagerSync } from "@kici-dev/shared/package-manager";
|
|
11
12
|
import { validateResourceRequest } from "@kici-dev/engine";
|
|
12
13
|
//#region src/lockfile/generator.ts
|
|
13
14
|
/**
|
|
@@ -31,19 +32,28 @@ function detectGitRoot() {
|
|
|
31
32
|
}
|
|
32
33
|
}
|
|
33
34
|
/**
|
|
34
|
-
* Compute SHA-256 hash of the
|
|
35
|
-
*
|
|
35
|
+
* Compute the dependency-cache key: a SHA-256 hash of the repo's lockfile,
|
|
36
|
+
* scoped to the detected package manager.
|
|
37
|
+
*
|
|
38
|
+
* The authoritative lockfile differs by manager: `.kici/package-lock.json` for
|
|
39
|
+
* npm, the repo-root `pnpm-lock.yaml` for a pnpm workspace, the repo-root
|
|
40
|
+
* `yarn.lock` for yarn. A pnpm/yarn `.kici/` member resolves against the root
|
|
41
|
+
* lockfile, so keying on `.kici/package-lock.json` alone would miss the
|
|
42
|
+
* authoritative graph. The hash input is prefixed with the manager name so two
|
|
43
|
+
* managers can never collide on identical lockfile bytes (and a restored tree
|
|
44
|
+
* can never be the wrong layout for the agent's manager).
|
|
36
45
|
*
|
|
37
46
|
* @param gitRoot - Absolute path to git repository root
|
|
38
|
-
* @returns Hex SHA-256 hash string, or null if no lockfile found
|
|
47
|
+
* @returns Hex SHA-256 hash string, or null if no lockfile is found
|
|
39
48
|
*/
|
|
40
49
|
function computeLockfileHash(gitRoot) {
|
|
41
|
-
|
|
42
|
-
|
|
50
|
+
const pm = detectPackageManagerSync(gitRoot);
|
|
51
|
+
const lockfilePath = pm === PackageManager.Pnpm ? path.join(gitRoot, "pnpm-lock.yaml") : pm === PackageManager.Yarn ? path.join(gitRoot, "yarn.lock") : path.join(gitRoot, ".kici", "package-lock.json");
|
|
52
|
+
try {
|
|
53
|
+
return sha256(`${pm}\n${readFileSync(lockfilePath, "utf-8")}`);
|
|
43
54
|
} catch {
|
|
44
|
-
|
|
55
|
+
return null;
|
|
45
56
|
}
|
|
46
|
-
return null;
|
|
47
57
|
}
|
|
48
58
|
/**
|
|
49
59
|
* Format export reference with hash syntax.
|
package/dist/remote/client.d.ts
CHANGED
|
@@ -73,12 +73,14 @@ interface UploadStatusResponse {
|
|
|
73
73
|
export interface RunStatusResponse {
|
|
74
74
|
runId: string;
|
|
75
75
|
status: string;
|
|
76
|
+
failureReason?: string;
|
|
76
77
|
summary?: {
|
|
77
78
|
totalDurationMs: number;
|
|
78
79
|
jobs: Array<{
|
|
79
80
|
name: string;
|
|
80
81
|
status: string;
|
|
81
82
|
durationMs?: number;
|
|
83
|
+
errorMessage?: string;
|
|
82
84
|
}>;
|
|
83
85
|
};
|
|
84
86
|
}
|
package/dist/types.d.ts
CHANGED
|
@@ -498,7 +498,13 @@ export interface LockFile {
|
|
|
498
498
|
readonly source: LockSource;
|
|
499
499
|
/** SHA-256 hash of the serialized lock file content (excluding this field). Changes only when workflows, triggers, jobs, or bundle hashes change. */
|
|
500
500
|
readonly contentHash: string;
|
|
501
|
-
/**
|
|
501
|
+
/**
|
|
502
|
+
* SHA-256 hash of the repo's lockfile, used as the dependency cache key. The
|
|
503
|
+
* lockfile is the one the detected package manager produces — `.kici/`'s
|
|
504
|
+
* `package-lock.json` for npm, or the repo-root `pnpm-lock.yaml` /
|
|
505
|
+
* `yarn.lock` for a pnpm/yarn workspace. The hash input is prefixed with the
|
|
506
|
+
* manager name so a manager change is a guaranteed cache miss.
|
|
507
|
+
*/
|
|
502
508
|
readonly lockfileHash?: string;
|
|
503
509
|
readonly workflows: readonly LockWorkflow[];
|
|
504
510
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kici-dev/compiler",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.12",
|
|
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
|
"kici",
|
|
@@ -58,11 +58,11 @@
|
|
|
58
58
|
"ws": "^8.20.0",
|
|
59
59
|
"yaml": "^2.8.3",
|
|
60
60
|
"zx": "^8.8.5",
|
|
61
|
-
"@kici-dev/engine": "0.1.
|
|
62
|
-
"@kici-dev/shared": "0.1.
|
|
61
|
+
"@kici-dev/engine": "0.1.12",
|
|
62
|
+
"@kici-dev/shared": "0.1.12"
|
|
63
63
|
},
|
|
64
64
|
"peerDependencies": {
|
|
65
|
-
"@kici-dev/sdk": "0.1.
|
|
65
|
+
"@kici-dev/sdk": "0.1.12"
|
|
66
66
|
},
|
|
67
67
|
"devDependencies": {
|
|
68
68
|
"@types/proper-lockfile": "^4.1.4"
|
package/sbom.spdx.json
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
"spdxVersion": "SPDX-2.3",
|
|
3
3
|
"dataLicense": "CC0-1.0",
|
|
4
4
|
"SPDXID": "SPDXRef-DOCUMENT",
|
|
5
|
-
"name": "@kici-dev/compiler@0.1.
|
|
6
|
-
"documentNamespace": "https://kici.dev/sbom/%40kici-dev%2Fcompiler/0.1.
|
|
5
|
+
"name": "@kici-dev/compiler@0.1.12",
|
|
6
|
+
"documentNamespace": "https://kici.dev/sbom/%40kici-dev%2Fcompiler/0.1.12/62531134-3d1c-4447-9505-a6462b2c3b3a",
|
|
7
7
|
"creationInfo": {
|
|
8
|
-
"created": "2026-05-
|
|
8
|
+
"created": "2026-05-27T16:57:43Z",
|
|
9
9
|
"creators": [
|
|
10
10
|
"Tool: kici-sbom-generator"
|
|
11
11
|
]
|
|
@@ -1323,7 +1323,7 @@
|
|
|
1323
1323
|
{
|
|
1324
1324
|
"SPDXID": "SPDXRef-RootPackage",
|
|
1325
1325
|
"name": "@kici-dev/compiler",
|
|
1326
|
-
"versionInfo": "0.1.
|
|
1326
|
+
"versionInfo": "0.1.12",
|
|
1327
1327
|
"downloadLocation": "NOASSERTION",
|
|
1328
1328
|
"filesAnalyzed": false,
|
|
1329
1329
|
"licenseConcluded": "NOASSERTION",
|
|
@@ -1334,16 +1334,16 @@
|
|
|
1334
1334
|
{
|
|
1335
1335
|
"referenceCategory": "PACKAGE-MANAGER",
|
|
1336
1336
|
"referenceType": "purl",
|
|
1337
|
-
"referenceLocator": "pkg:npm/%40kici-dev/compiler@0.1.
|
|
1337
|
+
"referenceLocator": "pkg:npm/%40kici-dev/compiler@0.1.12"
|
|
1338
1338
|
}
|
|
1339
1339
|
],
|
|
1340
1340
|
"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.",
|
|
1341
1341
|
"homepage": "https://kici.dev"
|
|
1342
1342
|
},
|
|
1343
1343
|
{
|
|
1344
|
-
"SPDXID": "SPDXRef-Package--kici-dev-engine-0.1.
|
|
1344
|
+
"SPDXID": "SPDXRef-Package--kici-dev-engine-0.1.12",
|
|
1345
1345
|
"name": "@kici-dev/engine",
|
|
1346
|
-
"versionInfo": "0.1.
|
|
1346
|
+
"versionInfo": "0.1.12",
|
|
1347
1347
|
"downloadLocation": "NOASSERTION",
|
|
1348
1348
|
"filesAnalyzed": false,
|
|
1349
1349
|
"licenseConcluded": "NOASSERTION",
|
|
@@ -1354,16 +1354,16 @@
|
|
|
1354
1354
|
{
|
|
1355
1355
|
"referenceCategory": "PACKAGE-MANAGER",
|
|
1356
1356
|
"referenceType": "purl",
|
|
1357
|
-
"referenceLocator": "pkg:npm/%40kici-dev/engine@0.1.
|
|
1357
|
+
"referenceLocator": "pkg:npm/%40kici-dev/engine@0.1.12"
|
|
1358
1358
|
}
|
|
1359
1359
|
],
|
|
1360
1360
|
"description": "Shared business logic for the KiCI CI/CD stack: protocol, triggers, state machine, and provider interfaces used by the Platform relay, orchestrator, and compiler.",
|
|
1361
1361
|
"homepage": "https://kici.dev"
|
|
1362
1362
|
},
|
|
1363
1363
|
{
|
|
1364
|
-
"SPDXID": "SPDXRef-Package--kici-dev-sdk-0.1.
|
|
1364
|
+
"SPDXID": "SPDXRef-Package--kici-dev-sdk-0.1.12",
|
|
1365
1365
|
"name": "@kici-dev/sdk",
|
|
1366
|
-
"versionInfo": "0.1.
|
|
1366
|
+
"versionInfo": "0.1.12",
|
|
1367
1367
|
"downloadLocation": "NOASSERTION",
|
|
1368
1368
|
"filesAnalyzed": false,
|
|
1369
1369
|
"licenseConcluded": "NOASSERTION",
|
|
@@ -1374,16 +1374,16 @@
|
|
|
1374
1374
|
{
|
|
1375
1375
|
"referenceCategory": "PACKAGE-MANAGER",
|
|
1376
1376
|
"referenceType": "purl",
|
|
1377
|
-
"referenceLocator": "pkg:npm/%40kici-dev/sdk@0.1.
|
|
1377
|
+
"referenceLocator": "pkg:npm/%40kici-dev/sdk@0.1.12"
|
|
1378
1378
|
}
|
|
1379
1379
|
],
|
|
1380
1380
|
"description": "TypeScript SDK for defining KiCI workflows. Import into `.kici/workflows/*.ts` to declare workflows, jobs, steps, triggers, rules, and matrix configurations.",
|
|
1381
1381
|
"homepage": "https://kici.dev"
|
|
1382
1382
|
},
|
|
1383
1383
|
{
|
|
1384
|
-
"SPDXID": "SPDXRef-Package--kici-dev-shared-0.1.
|
|
1384
|
+
"SPDXID": "SPDXRef-Package--kici-dev-shared-0.1.12",
|
|
1385
1385
|
"name": "@kici-dev/shared",
|
|
1386
|
-
"versionInfo": "0.1.
|
|
1386
|
+
"versionInfo": "0.1.12",
|
|
1387
1387
|
"downloadLocation": "NOASSERTION",
|
|
1388
1388
|
"filesAnalyzed": false,
|
|
1389
1389
|
"licenseConcluded": "NOASSERTION",
|
|
@@ -1394,7 +1394,7 @@
|
|
|
1394
1394
|
{
|
|
1395
1395
|
"referenceCategory": "PACKAGE-MANAGER",
|
|
1396
1396
|
"referenceType": "purl",
|
|
1397
|
-
"referenceLocator": "pkg:npm/%40kici-dev/shared@0.1.
|
|
1397
|
+
"referenceLocator": "pkg:npm/%40kici-dev/shared@0.1.12"
|
|
1398
1398
|
}
|
|
1399
1399
|
],
|
|
1400
1400
|
"description": "Shared utilities for the KiCI CI/CD stack — logging, zx setup, crypto, telemetry, health and metrics routes. No business logic.",
|
|
@@ -8290,17 +8290,17 @@
|
|
|
8290
8290
|
},
|
|
8291
8291
|
{
|
|
8292
8292
|
"spdxElementId": "SPDXRef-RootPackage",
|
|
8293
|
-
"relatedSpdxElement": "SPDXRef-Package--kici-dev-engine-0.1.
|
|
8293
|
+
"relatedSpdxElement": "SPDXRef-Package--kici-dev-engine-0.1.12",
|
|
8294
8294
|
"relationshipType": "DEPENDS_ON"
|
|
8295
8295
|
},
|
|
8296
8296
|
{
|
|
8297
8297
|
"spdxElementId": "SPDXRef-RootPackage",
|
|
8298
|
-
"relatedSpdxElement": "SPDXRef-Package--kici-dev-sdk-0.1.
|
|
8298
|
+
"relatedSpdxElement": "SPDXRef-Package--kici-dev-sdk-0.1.12",
|
|
8299
8299
|
"relationshipType": "DEPENDS_ON"
|
|
8300
8300
|
},
|
|
8301
8301
|
{
|
|
8302
8302
|
"spdxElementId": "SPDXRef-RootPackage",
|
|
8303
|
-
"relatedSpdxElement": "SPDXRef-Package--kici-dev-shared-0.1.
|
|
8303
|
+
"relatedSpdxElement": "SPDXRef-Package--kici-dev-shared-0.1.12",
|
|
8304
8304
|
"relationshipType": "DEPENDS_ON"
|
|
8305
8305
|
},
|
|
8306
8306
|
{
|
|
@@ -8364,147 +8364,147 @@
|
|
|
8364
8364
|
"relationshipType": "DEPENDS_ON"
|
|
8365
8365
|
},
|
|
8366
8366
|
{
|
|
8367
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-engine-0.1.
|
|
8367
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-engine-0.1.12",
|
|
8368
8368
|
"relatedSpdxElement": "SPDXRef-Package-jsonpath-plus-10.4.0",
|
|
8369
8369
|
"relationshipType": "DEPENDS_ON"
|
|
8370
8370
|
},
|
|
8371
8371
|
{
|
|
8372
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-engine-0.1.
|
|
8372
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-engine-0.1.12",
|
|
8373
8373
|
"relatedSpdxElement": "SPDXRef-Package-picomatch-4.0.4",
|
|
8374
8374
|
"relationshipType": "DEPENDS_ON"
|
|
8375
8375
|
},
|
|
8376
8376
|
{
|
|
8377
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-engine-0.1.
|
|
8377
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-engine-0.1.12",
|
|
8378
8378
|
"relatedSpdxElement": "SPDXRef-Package-zod-4.3.6",
|
|
8379
8379
|
"relationshipType": "DEPENDS_ON"
|
|
8380
8380
|
},
|
|
8381
8381
|
{
|
|
8382
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-sdk-0.1.
|
|
8383
|
-
"relatedSpdxElement": "SPDXRef-Package--kici-dev-engine-0.1.
|
|
8382
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-sdk-0.1.12",
|
|
8383
|
+
"relatedSpdxElement": "SPDXRef-Package--kici-dev-engine-0.1.12",
|
|
8384
8384
|
"relationshipType": "DEPENDS_ON"
|
|
8385
8385
|
},
|
|
8386
8386
|
{
|
|
8387
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-sdk-0.1.
|
|
8388
|
-
"relatedSpdxElement": "SPDXRef-Package--kici-dev-shared-0.1.
|
|
8387
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-sdk-0.1.12",
|
|
8388
|
+
"relatedSpdxElement": "SPDXRef-Package--kici-dev-shared-0.1.12",
|
|
8389
8389
|
"relationshipType": "DEPENDS_ON"
|
|
8390
8390
|
},
|
|
8391
8391
|
{
|
|
8392
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-sdk-0.1.
|
|
8392
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-sdk-0.1.12",
|
|
8393
8393
|
"relatedSpdxElement": "SPDXRef-Package-fast-cartesian-9.0.1",
|
|
8394
8394
|
"relationshipType": "DEPENDS_ON"
|
|
8395
8395
|
},
|
|
8396
8396
|
{
|
|
8397
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-sdk-0.1.
|
|
8397
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-sdk-0.1.12",
|
|
8398
8398
|
"relatedSpdxElement": "SPDXRef-Package-micromatch-4.0.8",
|
|
8399
8399
|
"relationshipType": "DEPENDS_ON"
|
|
8400
8400
|
},
|
|
8401
8401
|
{
|
|
8402
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-sdk-0.1.
|
|
8402
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-sdk-0.1.12",
|
|
8403
8403
|
"relatedSpdxElement": "SPDXRef-Package-zod-4.3.6",
|
|
8404
8404
|
"relationshipType": "DEPENDS_ON"
|
|
8405
8405
|
},
|
|
8406
8406
|
{
|
|
8407
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-sdk-0.1.
|
|
8407
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-sdk-0.1.12",
|
|
8408
8408
|
"relatedSpdxElement": "SPDXRef-Package-zx-8.8.5",
|
|
8409
8409
|
"relationshipType": "DEPENDS_ON"
|
|
8410
8410
|
},
|
|
8411
8411
|
{
|
|
8412
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.
|
|
8412
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.12",
|
|
8413
8413
|
"relatedSpdxElement": "SPDXRef-Package--aws-sdk-client-s3-3.1038.0",
|
|
8414
8414
|
"relationshipType": "DEPENDS_ON"
|
|
8415
8415
|
},
|
|
8416
8416
|
{
|
|
8417
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.
|
|
8417
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.12",
|
|
8418
8418
|
"relatedSpdxElement": "SPDXRef-Package--opentelemetry-api-1.9.1",
|
|
8419
8419
|
"relationshipType": "DEPENDS_ON"
|
|
8420
8420
|
},
|
|
8421
8421
|
{
|
|
8422
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.
|
|
8422
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.12",
|
|
8423
8423
|
"relatedSpdxElement": "SPDXRef-Package--opentelemetry-exporter-metrics-otlp-http-0.217.0",
|
|
8424
8424
|
"relationshipType": "DEPENDS_ON"
|
|
8425
8425
|
},
|
|
8426
8426
|
{
|
|
8427
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.
|
|
8427
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.12",
|
|
8428
8428
|
"relatedSpdxElement": "SPDXRef-Package--opentelemetry-exporter-prometheus-0.217.0",
|
|
8429
8429
|
"relationshipType": "DEPENDS_ON"
|
|
8430
8430
|
},
|
|
8431
8431
|
{
|
|
8432
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.
|
|
8432
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.12",
|
|
8433
8433
|
"relatedSpdxElement": "SPDXRef-Package--opentelemetry-exporter-trace-otlp-http-0.217.0",
|
|
8434
8434
|
"relationshipType": "DEPENDS_ON"
|
|
8435
8435
|
},
|
|
8436
8436
|
{
|
|
8437
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.
|
|
8437
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.12",
|
|
8438
8438
|
"relatedSpdxElement": "SPDXRef-Package--opentelemetry-instrumentation-runtime-node-0.28.0",
|
|
8439
8439
|
"relationshipType": "DEPENDS_ON"
|
|
8440
8440
|
},
|
|
8441
8441
|
{
|
|
8442
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.
|
|
8442
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.12",
|
|
8443
8443
|
"relatedSpdxElement": "SPDXRef-Package--opentelemetry-resources-2.7.0",
|
|
8444
8444
|
"relationshipType": "DEPENDS_ON"
|
|
8445
8445
|
},
|
|
8446
8446
|
{
|
|
8447
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.
|
|
8447
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.12",
|
|
8448
8448
|
"relatedSpdxElement": "SPDXRef-Package--opentelemetry-sdk-node-0.217.0",
|
|
8449
8449
|
"relationshipType": "DEPENDS_ON"
|
|
8450
8450
|
},
|
|
8451
8451
|
{
|
|
8452
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.
|
|
8452
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.12",
|
|
8453
8453
|
"relatedSpdxElement": "SPDXRef-Package--opentelemetry-semantic-conventions-1.40.0",
|
|
8454
8454
|
"relationshipType": "DEPENDS_ON"
|
|
8455
8455
|
},
|
|
8456
8456
|
{
|
|
8457
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.
|
|
8457
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.12",
|
|
8458
8458
|
"relatedSpdxElement": "SPDXRef-Package-diff-7.0.0",
|
|
8459
8459
|
"relationshipType": "DEPENDS_ON"
|
|
8460
8460
|
},
|
|
8461
8461
|
{
|
|
8462
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.
|
|
8462
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.12",
|
|
8463
8463
|
"relatedSpdxElement": "SPDXRef-Package-hono-4.12.18",
|
|
8464
8464
|
"relationshipType": "DEPENDS_ON"
|
|
8465
8465
|
},
|
|
8466
8466
|
{
|
|
8467
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.
|
|
8467
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.12",
|
|
8468
8468
|
"relatedSpdxElement": "SPDXRef-Package-kysely-0.29.0",
|
|
8469
8469
|
"relationshipType": "DEPENDS_ON"
|
|
8470
8470
|
},
|
|
8471
8471
|
{
|
|
8472
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.
|
|
8472
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.12",
|
|
8473
8473
|
"relatedSpdxElement": "SPDXRef-Package-oxc-transform-0.128.0",
|
|
8474
8474
|
"relationshipType": "DEPENDS_ON"
|
|
8475
8475
|
},
|
|
8476
8476
|
{
|
|
8477
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.
|
|
8477
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.12",
|
|
8478
8478
|
"relatedSpdxElement": "SPDXRef-Package-pg-8.20.0",
|
|
8479
8479
|
"relationshipType": "DEPENDS_ON"
|
|
8480
8480
|
},
|
|
8481
8481
|
{
|
|
8482
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.
|
|
8482
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.12",
|
|
8483
8483
|
"relatedSpdxElement": "SPDXRef-Package-picocolors-1.1.1",
|
|
8484
8484
|
"relationshipType": "DEPENDS_ON"
|
|
8485
8485
|
},
|
|
8486
8486
|
{
|
|
8487
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.
|
|
8487
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.12",
|
|
8488
8488
|
"relatedSpdxElement": "SPDXRef-Package-winston-daily-rotate-file-5.0.0",
|
|
8489
8489
|
"relationshipType": "DEPENDS_ON"
|
|
8490
8490
|
},
|
|
8491
8491
|
{
|
|
8492
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.
|
|
8492
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.12",
|
|
8493
8493
|
"relatedSpdxElement": "SPDXRef-Package-winston-3.19.0",
|
|
8494
8494
|
"relationshipType": "DEPENDS_ON"
|
|
8495
8495
|
},
|
|
8496
8496
|
{
|
|
8497
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.
|
|
8497
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.12",
|
|
8498
8498
|
"relatedSpdxElement": "SPDXRef-Package-yaml-2.8.3",
|
|
8499
8499
|
"relationshipType": "DEPENDS_ON"
|
|
8500
8500
|
},
|
|
8501
8501
|
{
|
|
8502
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.
|
|
8502
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.12",
|
|
8503
8503
|
"relatedSpdxElement": "SPDXRef-Package-zod-4.3.6",
|
|
8504
8504
|
"relationshipType": "DEPENDS_ON"
|
|
8505
8505
|
},
|
|
8506
8506
|
{
|
|
8507
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.
|
|
8507
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.12",
|
|
8508
8508
|
"relatedSpdxElement": "SPDXRef-Package-zx-8.8.5",
|
|
8509
8509
|
"relationshipType": "DEPENDS_ON"
|
|
8510
8510
|
},
|