@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.
@@ -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.10";
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 running npm install", false).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) => {
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
@@ -10,8 +10,13 @@
10
10
  export interface InitOptions {
11
11
  /** Overwrite existing .kici/ directory */
12
12
  force?: boolean;
13
- /** Skip npm install step */
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 */
@@ -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
- logger.info(pc.gray("Running npm install..."));
97
- await $`cd ${kiciDir} && npm install`;
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 npm install in .kici/ to generate a lockfile"));
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
@@ -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.10";
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. Run `npm install` to set up dependencies
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 | Description |
121
- | ---------------- | --------------------------------------------- |
122
- | `--force` | Overwrite existing `.kici/` directory |
123
- | `--skip-install` | Create files without running npm install |
124
- | `--mjs` | JavaScript-only mode (no TypeScript, no deps) |
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 `node_modules` into a tarball, and uploads it to cache storage.
321
- 2. **Subsequent runs (cache hit):** The execution agent downloads the cached tarball and extracts it -- no `npm install` needed.
322
- 3. **Lockfile changes:** When `.kici/package-lock.json` changes, the cache is invalidated and a fresh build runs.
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 | Default | Description |
4836
- | ---------------------------------- | ---------------------- | ------------------------------------------------------------------------------------------------------- |
4837
- | `--force` | `false` | Overwrite existing `.kici/` directory |
4838
- | `--skip-install` | `false` | Create files without running npm install |
4839
- | `--mjs` | `false` | JavaScript-only mode (no TypeScript, no deps) |
4840
- | `--no-agents-md` | writes `AGENTS.md` | Skip writing `.kici/AGENTS.md` (the LLM authoring context file) |
4841
- | `--private-registry <url>` | none | Scaffold a workflow `registries:` entry pointing at `<url>` (e.g. CodeArtifact, GH Packages, Verdaccio) |
4842
- | `--private-registry-scope <scope>` | none | Optional npm package scope (e.g. `@my-org`) for the private registry |
4843
- | `--private-registry-secret <ref>` | `production:NPM_TOKEN` | Qualified secret reference (`env:NAME`) the private registry token comes from |
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 npm install (faster, install manually later)
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 | Description | Default |
7174
- | ---------------------- | ----------------------------------------------------------- | ------------------ |
7175
- | `KICI_OIDC_ISSUER` | OIDC issuer URL for authentication (required for OAuth) | none — must be set |
7176
- | `KICI_OIDC_CLIENT_ID` | OIDC client ID for the CLI application (required for OAuth) | none — must be set |
7177
- | `KICI_OIDC_PROJECT_ID` | OIDC project ID (adds audience scope for JWT access tokens) | unset |
7178
- | `KICI_PLATFORM_URL` | Platform API base URL (required for OAuth) | none — must be set |
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
- - **`--ignore-scripts` always.** Whenever a private registry is in scope, the agent runs `npm install --ignore-scripts`. A malicious `preinstall` / `postinstall` hook in committed `package.json` cannot read the synthesized token env vars, even though they exist in the install subprocess.
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 .kici/package-lock.json lockfile.
12
- * Used as part of the dependency cache key.
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 in .kici/
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 .kici/package-lock.json lockfile.
35
- * Used as part of the dependency cache key.
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 in .kici/
47
+ * @returns Hex SHA-256 hash string, or null if no lockfile is found
39
48
  */
40
49
  function computeLockfileHash(gitRoot) {
41
- for (const candidate of ["package-lock.json"]) try {
42
- return sha256(readFileSync(path.join(gitRoot, ".kici", candidate), "utf-8"));
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
- continue;
55
+ return null;
45
56
  }
46
- return null;
47
57
  }
48
58
  /**
49
59
  * Format export reference with hash syntax.
@@ -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
  }
@@ -1,6 +1,6 @@
1
1
  import "../chunk-gOLHoazu.js";
2
2
  //#region src/templates/package-json.ts
3
- const sdkVersion = "0.1.10";
3
+ const sdkVersion = "0.1.12";
4
4
  /**
5
5
  * Generate package.json content for .kici/ directory
6
6
  *
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
- /** SHA-256 hash of .kici/package-lock.json. Used as dependency cache key. */
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.10",
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.10",
62
- "@kici-dev/shared": "0.1.10"
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.10"
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.10",
6
- "documentNamespace": "https://kici.dev/sbom/%40kici-dev%2Fcompiler/0.1.10/b023b6e4-5f2f-412e-afa3-f0acaaa659d3",
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-26T17:26:28Z",
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.10",
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.10"
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.10",
1344
+ "SPDXID": "SPDXRef-Package--kici-dev-engine-0.1.12",
1345
1345
  "name": "@kici-dev/engine",
1346
- "versionInfo": "0.1.10",
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.10"
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.10",
1364
+ "SPDXID": "SPDXRef-Package--kici-dev-sdk-0.1.12",
1365
1365
  "name": "@kici-dev/sdk",
1366
- "versionInfo": "0.1.10",
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.10"
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.10",
1384
+ "SPDXID": "SPDXRef-Package--kici-dev-shared-0.1.12",
1385
1385
  "name": "@kici-dev/shared",
1386
- "versionInfo": "0.1.10",
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.10"
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.10",
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.10",
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.10",
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.10",
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.10",
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.10",
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.10",
8383
- "relatedSpdxElement": "SPDXRef-Package--kici-dev-engine-0.1.10",
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.10",
8388
- "relatedSpdxElement": "SPDXRef-Package--kici-dev-shared-0.1.10",
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.10",
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.10",
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.10",
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.10",
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.10",
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.10",
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.10",
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.10",
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.10",
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.10",
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.10",
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.10",
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.10",
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.10",
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.10",
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.10",
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.10",
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.10",
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.10",
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.10",
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.10",
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.10",
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.10",
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.10",
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
  },