diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml
index ef315b4..9a4119b 100644
--- a/.github/workflows/checks.yml
+++ b/.github/workflows/checks.yml
@@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
- node-version: [18.x, 20.x, 22.x]
+ node-version: [20.x, 22.x, 24.x]
steps:
- uses: actions/checkout@v4
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 09013b0..045ce11 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -37,7 +37,7 @@ jobs:
# (OIDC). We intentionally don't run `npm install -g npm@latest` — the
# npm bundled with some Node 22.x patch releases has a broken
# node_modules (missing `promise-retry`) that makes self-upgrade fail.
- # ci.yml still runs the test matrix against 18/20/22 for runtime compat.
+ # ci.yml still runs the test matrix against 20/22/24 for runtime compat.
- name: Setup Node.js
uses: actions/setup-node@v4
with:
diff --git a/AGENTS.md b/AGENTS.md
index eaab749..a0c6d84 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -6,7 +6,7 @@ Guidance for AI coding assistants working **on** this repo. For guidance on how
- **Name:** `@coreplane/polylane` on npm — binary still invoked as `polylane`
- **Type:** Node.js CLI tool (ESM, bundled with esbuild)
-- **Engine:** Node.js 18+ (ships as a single bundled file; dev tooling needs a recent Node)
+- **Engine:** Node.js 20+ (ships as a single bundled file; dev tooling needs a recent Node)
- **Language:** TypeScript, strict mode
- Runtime deps are intentionally minimal — check `package.json` before adding a new one.
diff --git a/README.md b/README.md
index cdabadf..2601a55 100644
--- a/README.md
+++ b/README.md
@@ -1,14 +1,14 @@
# polylane
Agent-focused CLI for the Polylane platform.
-Investigate incidents, explore cloud infrastructure, search code, run automations, and drive threads — from any agent or terminal.
+Investigate production issues, explore cloud infrastructure, search code, run automations, and drive threads — from any agent or terminal.
📚 Docs: docs.polylane.com · Getting started · llms.txt (agent index)
-
+
## What this is
@@ -16,7 +16,7 @@ Investigate incidents, explore cloud infrastructure, search code, run automation
`polylane` is designed to be driven by AI agents. Top-level commands map to the tasks an agent actually performs:
- **Triage** issues — anomalies and alerts detected across your cloud and observability stack
-- **Drive** incidents — record timeline notes and milestones as you respond
+- **Drive** issue timelines — record notes and milestones as you respond
- **Explore** cloud infrastructure — logs, metrics, dependency graphs
- **Search** code
- **Run** the platform's agent tools directly (`tools search` / `tools run` / `tools code`)
@@ -29,7 +29,7 @@ The full API surface is available behind `polylane api call ` as an escape h
## Install
-Pick whichever channel fits your system. All install the same Node-based bundle and require Node 18+ (Homebrew pulls Node in as a dependency; the curl + PowerShell installers check for it).
+Pick whichever channel fits your system. All install the same Node-based bundle and require Node 20+ (Homebrew pulls Node in as a dependency; the curl + PowerShell installers check for it).
```bash
# macOS / Linux — curl
@@ -39,7 +39,7 @@ curl -fsSL https://polylane.com/install.sh | bash
irm https://polylane.com/install.ps1 | iex
# Homebrew (tap: coreplanelabs/polylane)
-brew install coreplanelabs/polylane
+brew install coreplanelabs/polylane/polylane
# npm
npm install -g @coreplane/polylane
@@ -48,7 +48,7 @@ npm install -g @coreplane/polylane
bun add -g @coreplane/polylane
```
-> Requires [Node.js](https://nodejs.org) 18+ at runtime.
+> Requires [Node.js](https://nodejs.org) 20+ at runtime.
Version-pin the curl / PowerShell installers with:
@@ -61,8 +61,9 @@ $env:POLYLANE_VERSION='v0.1.0'; irm https://polylane.com/install.ps1 | iex
```bash
# 1. Authenticate (pick one)
-polylane auth login # OAuth browser (humans at a terminal)
-polylane auth login --api-key sk_xxxxx # API key (CI / agents)
+polylane auth login # OAuth browser (the default)
+polylane auth login --no-browser # OAuth device code (SSH / headless)
+polylane auth login --api-key sk_xxxxx # API key (CI / scripts where OAuth is impossible)
polylane auth signup --email agent@example.com # bootstrap a fresh account
# (returns a session token; create an
# API key after step 2 for long-lived use)
@@ -78,8 +79,8 @@ polylane cloud connect --provider # see `polylane cloud connect
# 4. Work
polylane issue list --active # what the system is flagging
-polylane thread list --type incident # incident threads
-polylane incident note "rolled back deploy"
+polylane thread list --type investigation # investigation threads
+polylane issue note "rolled back deploy"
polylane service logs --since 1h --grep error
polylane tools run findNodes --params '{"query":"api"}'
polylane thread ask "" --stream
@@ -167,11 +168,13 @@ Manage with `polylane config show` and `polylane config set --key --value
## Authentication
+OAuth is the default way to connect — including for agents. Use an API key only where a browser sign-in is impossible.
+
| Command | When |
|---|---|
-| `polylane auth login --api-key sk_...` | Scripts / CI / machines |
-| `polylane auth login` | Interactive OAuth (browser, PKCE) |
+| `polylane auth login` | Interactive OAuth (browser, PKCE) — the default |
| `polylane auth login --no-browser` | OAuth device code (SSH / headless) |
+| `polylane auth login --api-key sk_...` | Scripts / CI / machines that cannot complete OAuth |
| `polylane auth signup --email … --password …` | Bootstrap a fresh account from an agent (no browser, no human) |
OAuth credentials live at `~/.polylane/credentials.json` (mode `0600`) and auto-refresh before expiry. `polylane auth status` reports the active source.
diff --git a/install/install.ps1 b/install/install.ps1
index 30ffa81..0c6cebc 100644
--- a/install/install.ps1
+++ b/install/install.ps1
@@ -3,7 +3,7 @@
# irm https://polylane.com/install.ps1 | iex
#
# Installs the bundled CLI to $env:USERPROFILE\.polylane\bin\ and (if needed)
-# prints the line to add to your PATH. Node 18+ must be installed.
+# prints the line to add to your PATH. Node 20+ must be installed.
# Override the version or install prefix with env vars:
#
# $env:POLYLANE_VERSION='v0.1.0'; irm https://polylane.com/install.ps1 | iex
@@ -28,12 +28,12 @@ function Ok([string]$msg) { Write-Host "✓ $msg" -ForegroundColor Green }
$node = Get-Command node -ErrorAction SilentlyContinue
if (-not $node) {
- Die "Node.js 18+ is required but 'node' was not found.`nInstall from https://nodejs.org, then re-run."
+ Die "Node.js 20+ is required but 'node' was not found.`nInstall from https://nodejs.org, then re-run."
}
$nodeVersion = (& node -v) -replace '^v', ''
$nodeMajor = [int]($nodeVersion.Split('.')[0])
-if ($nodeMajor -lt 18) {
- Die "Node.js 18+ is required (found v$nodeVersion)."
+if ($nodeMajor -lt 20) {
+ Die "Node.js 20+ is required (found v$nodeVersion)."
}
# --- resolve download URL ---------------------------------------------------
diff --git a/install/install.sh b/install/install.sh
index c223ac5..5d155c3 100644
--- a/install/install.sh
+++ b/install/install.sh
@@ -4,7 +4,7 @@
# curl -fsSL https://polylane.com/install.sh | bash
#
# Installs the bundled CLI to ~/.polylane/bin/polylane and (if needed) prints the
-# line to add to your shell RC to put it on $PATH. Node 18+ must be installed.
+# line to add to your shell RC to put it on $PATH. Node 20+ must be installed.
# Override the version or install prefix with env vars:
#
# POLYLANE_VERSION=v0.1.0 curl -fsSL https://polylane.com/install.sh | bash
@@ -36,13 +36,13 @@ require_cmd curl
require_cmd uname
if ! command -v node >/dev/null 2>&1; then
- die "Node.js 18+ is required but 'node' was not found.
+ die "Node.js 20+ is required but 'node' was not found.
Install from https://nodejs.org or with your package manager, then re-run."
fi
NODE_MAJOR="$(node -e 'process.stdout.write(String(process.versions.node.split(".")[0]))')"
-if [ "$NODE_MAJOR" -lt 18 ]; then
- die "Node.js 18+ is required (found $(node -v))."
+if [ "$NODE_MAJOR" -lt 20 ]; then
+ die "Node.js 20+ is required (found $(node -v))."
fi
# --- resolve download URL ---------------------------------------------------
diff --git a/package-lock.json b/package-lock.json
index 9da4300..ba7622f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,22 +10,22 @@
"license": "MIT",
"dependencies": {
"@clack/prompts": "^0.7.0",
- "ws": "^8.20.0"
+ "ws": "^8.21.1"
},
"bin": {
- "nominal": "dist/nominal.mjs"
+ "polylane": "dist/polylane.mjs"
},
"devDependencies": {
"@types/node": "^22.0.0",
"@types/ws": "^8.18.1",
- "esbuild": "^0.24.0",
+ "esbuild": "^0.25.0",
"eslint": "^9.0.0",
- "tsx": "^4.0.0",
+ "tsx": "^4.23.1",
"typescript": "^5.8.0",
"typescript-eslint": "^8.0.0"
},
"engines": {
- "node": ">=18"
+ "node": ">=20"
}
},
"node_modules/@clack/core": {
@@ -65,9 +65,9 @@
}
},
"node_modules/@esbuild/aix-ppc64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz",
- "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz",
+ "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
"cpu": [
"ppc64"
],
@@ -82,9 +82,9 @@
}
},
"node_modules/@esbuild/android-arm": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz",
- "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz",
+ "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
"cpu": [
"arm"
],
@@ -99,9 +99,9 @@
}
},
"node_modules/@esbuild/android-arm64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz",
- "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz",
+ "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
"cpu": [
"arm64"
],
@@ -116,9 +116,9 @@
}
},
"node_modules/@esbuild/android-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz",
- "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz",
+ "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
"cpu": [
"x64"
],
@@ -133,9 +133,9 @@
}
},
"node_modules/@esbuild/darwin-arm64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz",
- "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz",
+ "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
"cpu": [
"arm64"
],
@@ -150,9 +150,9 @@
}
},
"node_modules/@esbuild/darwin-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz",
- "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz",
+ "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
"cpu": [
"x64"
],
@@ -167,9 +167,9 @@
}
},
"node_modules/@esbuild/freebsd-arm64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz",
- "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
"cpu": [
"arm64"
],
@@ -184,9 +184,9 @@
}
},
"node_modules/@esbuild/freebsd-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz",
- "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz",
+ "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
"cpu": [
"x64"
],
@@ -201,9 +201,9 @@
}
},
"node_modules/@esbuild/linux-arm": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz",
- "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz",
+ "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
"cpu": [
"arm"
],
@@ -218,9 +218,9 @@
}
},
"node_modules/@esbuild/linux-arm64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz",
- "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz",
+ "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
"cpu": [
"arm64"
],
@@ -235,9 +235,9 @@
}
},
"node_modules/@esbuild/linux-ia32": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz",
- "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz",
+ "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
"cpu": [
"ia32"
],
@@ -252,9 +252,9 @@
}
},
"node_modules/@esbuild/linux-loong64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz",
- "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz",
+ "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
"cpu": [
"loong64"
],
@@ -269,9 +269,9 @@
}
},
"node_modules/@esbuild/linux-mips64el": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz",
- "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz",
+ "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
"cpu": [
"mips64el"
],
@@ -286,9 +286,9 @@
}
},
"node_modules/@esbuild/linux-ppc64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz",
- "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz",
+ "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
"cpu": [
"ppc64"
],
@@ -303,9 +303,9 @@
}
},
"node_modules/@esbuild/linux-riscv64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz",
- "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz",
+ "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
"cpu": [
"riscv64"
],
@@ -320,9 +320,9 @@
}
},
"node_modules/@esbuild/linux-s390x": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz",
- "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz",
+ "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
"cpu": [
"s390x"
],
@@ -337,9 +337,9 @@
}
},
"node_modules/@esbuild/linux-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz",
- "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz",
+ "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
"cpu": [
"x64"
],
@@ -354,9 +354,9 @@
}
},
"node_modules/@esbuild/netbsd-arm64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz",
- "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
"cpu": [
"arm64"
],
@@ -371,9 +371,9 @@
}
},
"node_modules/@esbuild/netbsd-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz",
- "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz",
+ "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
"cpu": [
"x64"
],
@@ -388,9 +388,9 @@
}
},
"node_modules/@esbuild/openbsd-arm64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz",
- "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
"cpu": [
"arm64"
],
@@ -405,9 +405,9 @@
}
},
"node_modules/@esbuild/openbsd-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz",
- "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz",
+ "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
"cpu": [
"x64"
],
@@ -422,9 +422,9 @@
}
},
"node_modules/@esbuild/openharmony-arm64": {
- "version": "0.27.7",
- "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz",
- "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==",
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz",
+ "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==",
"cpu": [
"arm64"
],
@@ -439,9 +439,9 @@
}
},
"node_modules/@esbuild/sunos-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz",
- "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz",
+ "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
"cpu": [
"x64"
],
@@ -456,9 +456,9 @@
}
},
"node_modules/@esbuild/win32-arm64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz",
- "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz",
+ "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
"cpu": [
"arm64"
],
@@ -473,9 +473,9 @@
}
},
"node_modules/@esbuild/win32-ia32": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz",
- "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz",
+ "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
"cpu": [
"ia32"
],
@@ -490,9 +490,9 @@
}
},
"node_modules/@esbuild/win32-x64": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz",
- "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz",
+ "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==",
"cpu": [
"x64"
],
@@ -935,16 +935,16 @@
}
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz",
- "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==",
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.8.tgz",
+ "integrity": "sha512-JZyDyq3D4AUifKTPOB7DELf6XsB3WdPuNxCtob1vFXPsSXhdAiHBWJ/tJ8HAc9aH84BK+5JFZLNkJKx3G9kzQg==",
"dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^4.0.2"
},
"engines": {
- "node": "18 || 20 || >=22"
+ "node": "20 || >=22"
}
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
@@ -1089,9 +1089,9 @@
"license": "MIT"
},
"node_modules/brace-expansion": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz",
- "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==",
+ "version": "1.1.16",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.16.tgz",
+ "integrity": "sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1194,9 +1194,9 @@
"license": "MIT"
},
"node_modules/esbuild": {
- "version": "0.24.2",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz",
- "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==",
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
+ "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
@@ -1207,31 +1207,49 @@
"node": ">=18"
},
"optionalDependencies": {
- "@esbuild/aix-ppc64": "0.24.2",
- "@esbuild/android-arm": "0.24.2",
- "@esbuild/android-arm64": "0.24.2",
- "@esbuild/android-x64": "0.24.2",
- "@esbuild/darwin-arm64": "0.24.2",
- "@esbuild/darwin-x64": "0.24.2",
- "@esbuild/freebsd-arm64": "0.24.2",
- "@esbuild/freebsd-x64": "0.24.2",
- "@esbuild/linux-arm": "0.24.2",
- "@esbuild/linux-arm64": "0.24.2",
- "@esbuild/linux-ia32": "0.24.2",
- "@esbuild/linux-loong64": "0.24.2",
- "@esbuild/linux-mips64el": "0.24.2",
- "@esbuild/linux-ppc64": "0.24.2",
- "@esbuild/linux-riscv64": "0.24.2",
- "@esbuild/linux-s390x": "0.24.2",
- "@esbuild/linux-x64": "0.24.2",
- "@esbuild/netbsd-arm64": "0.24.2",
- "@esbuild/netbsd-x64": "0.24.2",
- "@esbuild/openbsd-arm64": "0.24.2",
- "@esbuild/openbsd-x64": "0.24.2",
- "@esbuild/sunos-x64": "0.24.2",
- "@esbuild/win32-arm64": "0.24.2",
- "@esbuild/win32-ia32": "0.24.2",
- "@esbuild/win32-x64": "0.24.2"
+ "@esbuild/aix-ppc64": "0.25.12",
+ "@esbuild/android-arm": "0.25.12",
+ "@esbuild/android-arm64": "0.25.12",
+ "@esbuild/android-x64": "0.25.12",
+ "@esbuild/darwin-arm64": "0.25.12",
+ "@esbuild/darwin-x64": "0.25.12",
+ "@esbuild/freebsd-arm64": "0.25.12",
+ "@esbuild/freebsd-x64": "0.25.12",
+ "@esbuild/linux-arm": "0.25.12",
+ "@esbuild/linux-arm64": "0.25.12",
+ "@esbuild/linux-ia32": "0.25.12",
+ "@esbuild/linux-loong64": "0.25.12",
+ "@esbuild/linux-mips64el": "0.25.12",
+ "@esbuild/linux-ppc64": "0.25.12",
+ "@esbuild/linux-riscv64": "0.25.12",
+ "@esbuild/linux-s390x": "0.25.12",
+ "@esbuild/linux-x64": "0.25.12",
+ "@esbuild/netbsd-arm64": "0.25.12",
+ "@esbuild/netbsd-x64": "0.25.12",
+ "@esbuild/openbsd-arm64": "0.25.12",
+ "@esbuild/openbsd-x64": "0.25.12",
+ "@esbuild/openharmony-arm64": "0.25.12",
+ "@esbuild/sunos-x64": "0.25.12",
+ "@esbuild/win32-arm64": "0.25.12",
+ "@esbuild/win32-ia32": "0.25.12",
+ "@esbuild/win32-x64": "0.25.12"
+ }
+ },
+ "node_modules/esbuild/node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz",
+ "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
"node_modules/escape-string-regexp": {
@@ -1506,19 +1524,6 @@
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
- "node_modules/get-tsconfig": {
- "version": "4.13.7",
- "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.7.tgz",
- "integrity": "sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "resolve-pkg-maps": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
- }
- },
"node_modules/glob-parent": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
@@ -1623,10 +1628,20 @@
"license": "ISC"
},
"node_modules/js-yaml": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
- "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz",
+ "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==",
"dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/puzrin"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/nodeca"
+ }
+ ],
"license": "MIT",
"dependencies": {
"argparse": "^2.0.1"
@@ -1862,16 +1877,6 @@
"node": ">=4"
}
},
- "node_modules/resolve-pkg-maps": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
- "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
- }
- },
"node_modules/semver": {
"version": "7.7.4",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
@@ -1971,14 +1976,13 @@
}
},
"node_modules/tsx": {
- "version": "4.21.0",
- "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz",
- "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==",
+ "version": "4.23.1",
+ "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.1.tgz",
+ "integrity": "sha512-GQHnkIfxyx1wYCOS/wonik5MVRZU9hi1TEZmzGZSCJB1y9YgoZ8H6itNE/u4suE+yLmOzuE4E5S4TZ/ZX2wcWQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "esbuild": "~0.27.0",
- "get-tsconfig": "^4.7.5"
+ "esbuild": "~0.28.0"
},
"bin": {
"tsx": "dist/cli.mjs"
@@ -1991,9 +1995,9 @@
}
},
"node_modules/tsx/node_modules/@esbuild/aix-ppc64": {
- "version": "0.27.7",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz",
- "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==",
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz",
+ "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==",
"cpu": [
"ppc64"
],
@@ -2008,9 +2012,9 @@
}
},
"node_modules/tsx/node_modules/@esbuild/android-arm": {
- "version": "0.27.7",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz",
- "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==",
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz",
+ "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==",
"cpu": [
"arm"
],
@@ -2025,9 +2029,9 @@
}
},
"node_modules/tsx/node_modules/@esbuild/android-arm64": {
- "version": "0.27.7",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz",
- "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==",
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz",
+ "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==",
"cpu": [
"arm64"
],
@@ -2042,9 +2046,9 @@
}
},
"node_modules/tsx/node_modules/@esbuild/android-x64": {
- "version": "0.27.7",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz",
- "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==",
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz",
+ "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==",
"cpu": [
"x64"
],
@@ -2059,9 +2063,9 @@
}
},
"node_modules/tsx/node_modules/@esbuild/darwin-arm64": {
- "version": "0.27.7",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz",
- "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==",
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz",
+ "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==",
"cpu": [
"arm64"
],
@@ -2076,9 +2080,9 @@
}
},
"node_modules/tsx/node_modules/@esbuild/darwin-x64": {
- "version": "0.27.7",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz",
- "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==",
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz",
+ "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==",
"cpu": [
"x64"
],
@@ -2093,9 +2097,9 @@
}
},
"node_modules/tsx/node_modules/@esbuild/freebsd-arm64": {
- "version": "0.27.7",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz",
- "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==",
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz",
+ "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==",
"cpu": [
"arm64"
],
@@ -2110,9 +2114,9 @@
}
},
"node_modules/tsx/node_modules/@esbuild/freebsd-x64": {
- "version": "0.27.7",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz",
- "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==",
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz",
+ "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==",
"cpu": [
"x64"
],
@@ -2127,9 +2131,9 @@
}
},
"node_modules/tsx/node_modules/@esbuild/linux-arm": {
- "version": "0.27.7",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz",
- "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==",
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz",
+ "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==",
"cpu": [
"arm"
],
@@ -2144,9 +2148,9 @@
}
},
"node_modules/tsx/node_modules/@esbuild/linux-arm64": {
- "version": "0.27.7",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz",
- "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==",
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz",
+ "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==",
"cpu": [
"arm64"
],
@@ -2161,9 +2165,9 @@
}
},
"node_modules/tsx/node_modules/@esbuild/linux-ia32": {
- "version": "0.27.7",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz",
- "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==",
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz",
+ "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==",
"cpu": [
"ia32"
],
@@ -2178,9 +2182,9 @@
}
},
"node_modules/tsx/node_modules/@esbuild/linux-loong64": {
- "version": "0.27.7",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz",
- "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==",
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz",
+ "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==",
"cpu": [
"loong64"
],
@@ -2195,9 +2199,9 @@
}
},
"node_modules/tsx/node_modules/@esbuild/linux-mips64el": {
- "version": "0.27.7",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz",
- "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==",
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz",
+ "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==",
"cpu": [
"mips64el"
],
@@ -2212,9 +2216,9 @@
}
},
"node_modules/tsx/node_modules/@esbuild/linux-ppc64": {
- "version": "0.27.7",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz",
- "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==",
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz",
+ "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==",
"cpu": [
"ppc64"
],
@@ -2229,9 +2233,9 @@
}
},
"node_modules/tsx/node_modules/@esbuild/linux-riscv64": {
- "version": "0.27.7",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz",
- "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==",
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz",
+ "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==",
"cpu": [
"riscv64"
],
@@ -2246,9 +2250,9 @@
}
},
"node_modules/tsx/node_modules/@esbuild/linux-s390x": {
- "version": "0.27.7",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz",
- "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==",
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz",
+ "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==",
"cpu": [
"s390x"
],
@@ -2263,9 +2267,9 @@
}
},
"node_modules/tsx/node_modules/@esbuild/linux-x64": {
- "version": "0.27.7",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz",
- "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==",
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz",
+ "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==",
"cpu": [
"x64"
],
@@ -2280,9 +2284,9 @@
}
},
"node_modules/tsx/node_modules/@esbuild/netbsd-arm64": {
- "version": "0.27.7",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz",
- "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==",
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz",
+ "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==",
"cpu": [
"arm64"
],
@@ -2297,9 +2301,9 @@
}
},
"node_modules/tsx/node_modules/@esbuild/netbsd-x64": {
- "version": "0.27.7",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz",
- "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==",
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz",
+ "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==",
"cpu": [
"x64"
],
@@ -2314,9 +2318,9 @@
}
},
"node_modules/tsx/node_modules/@esbuild/openbsd-arm64": {
- "version": "0.27.7",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz",
- "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==",
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz",
+ "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==",
"cpu": [
"arm64"
],
@@ -2331,9 +2335,9 @@
}
},
"node_modules/tsx/node_modules/@esbuild/openbsd-x64": {
- "version": "0.27.7",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz",
- "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==",
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz",
+ "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==",
"cpu": [
"x64"
],
@@ -2348,9 +2352,9 @@
}
},
"node_modules/tsx/node_modules/@esbuild/sunos-x64": {
- "version": "0.27.7",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz",
- "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==",
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz",
+ "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==",
"cpu": [
"x64"
],
@@ -2365,9 +2369,9 @@
}
},
"node_modules/tsx/node_modules/@esbuild/win32-arm64": {
- "version": "0.27.7",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz",
- "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==",
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz",
+ "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==",
"cpu": [
"arm64"
],
@@ -2382,9 +2386,9 @@
}
},
"node_modules/tsx/node_modules/@esbuild/win32-ia32": {
- "version": "0.27.7",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz",
- "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==",
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz",
+ "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==",
"cpu": [
"ia32"
],
@@ -2399,9 +2403,9 @@
}
},
"node_modules/tsx/node_modules/@esbuild/win32-x64": {
- "version": "0.27.7",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz",
- "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==",
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz",
+ "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==",
"cpu": [
"x64"
],
@@ -2416,9 +2420,9 @@
}
},
"node_modules/tsx/node_modules/esbuild": {
- "version": "0.27.7",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz",
- "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==",
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz",
+ "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
@@ -2429,32 +2433,32 @@
"node": ">=18"
},
"optionalDependencies": {
- "@esbuild/aix-ppc64": "0.27.7",
- "@esbuild/android-arm": "0.27.7",
- "@esbuild/android-arm64": "0.27.7",
- "@esbuild/android-x64": "0.27.7",
- "@esbuild/darwin-arm64": "0.27.7",
- "@esbuild/darwin-x64": "0.27.7",
- "@esbuild/freebsd-arm64": "0.27.7",
- "@esbuild/freebsd-x64": "0.27.7",
- "@esbuild/linux-arm": "0.27.7",
- "@esbuild/linux-arm64": "0.27.7",
- "@esbuild/linux-ia32": "0.27.7",
- "@esbuild/linux-loong64": "0.27.7",
- "@esbuild/linux-mips64el": "0.27.7",
- "@esbuild/linux-ppc64": "0.27.7",
- "@esbuild/linux-riscv64": "0.27.7",
- "@esbuild/linux-s390x": "0.27.7",
- "@esbuild/linux-x64": "0.27.7",
- "@esbuild/netbsd-arm64": "0.27.7",
- "@esbuild/netbsd-x64": "0.27.7",
- "@esbuild/openbsd-arm64": "0.27.7",
- "@esbuild/openbsd-x64": "0.27.7",
- "@esbuild/openharmony-arm64": "0.27.7",
- "@esbuild/sunos-x64": "0.27.7",
- "@esbuild/win32-arm64": "0.27.7",
- "@esbuild/win32-ia32": "0.27.7",
- "@esbuild/win32-x64": "0.27.7"
+ "@esbuild/aix-ppc64": "0.28.1",
+ "@esbuild/android-arm": "0.28.1",
+ "@esbuild/android-arm64": "0.28.1",
+ "@esbuild/android-x64": "0.28.1",
+ "@esbuild/darwin-arm64": "0.28.1",
+ "@esbuild/darwin-x64": "0.28.1",
+ "@esbuild/freebsd-arm64": "0.28.1",
+ "@esbuild/freebsd-x64": "0.28.1",
+ "@esbuild/linux-arm": "0.28.1",
+ "@esbuild/linux-arm64": "0.28.1",
+ "@esbuild/linux-ia32": "0.28.1",
+ "@esbuild/linux-loong64": "0.28.1",
+ "@esbuild/linux-mips64el": "0.28.1",
+ "@esbuild/linux-ppc64": "0.28.1",
+ "@esbuild/linux-riscv64": "0.28.1",
+ "@esbuild/linux-s390x": "0.28.1",
+ "@esbuild/linux-x64": "0.28.1",
+ "@esbuild/netbsd-arm64": "0.28.1",
+ "@esbuild/netbsd-x64": "0.28.1",
+ "@esbuild/openbsd-arm64": "0.28.1",
+ "@esbuild/openbsd-x64": "0.28.1",
+ "@esbuild/openharmony-arm64": "0.28.1",
+ "@esbuild/sunos-x64": "0.28.1",
+ "@esbuild/win32-arm64": "0.28.1",
+ "@esbuild/win32-ia32": "0.28.1",
+ "@esbuild/win32-x64": "0.28.1"
}
},
"node_modules/type-check": {
@@ -2552,9 +2556,9 @@
}
},
"node_modules/ws": {
- "version": "8.20.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz",
- "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==",
+ "version": "8.21.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.1.tgz",
+ "integrity": "sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==",
"license": "MIT",
"engines": {
"node": ">=10.0.0"
diff --git a/package.json b/package.json
index d905831..eb1f5fd 100644
--- a/package.json
+++ b/package.json
@@ -30,7 +30,7 @@
"dist/polylane.mjs"
],
"engines": {
- "node": ">=18"
+ "node": ">=20"
},
"scripts": {
"dev": "node --env-file-if-exists=.env.local --import tsx src/main.ts",
@@ -44,14 +44,14 @@
},
"dependencies": {
"@clack/prompts": "^0.7.0",
- "ws": "^8.20.0"
+ "ws": "^8.21.1"
},
"devDependencies": {
"@types/node": "^22.0.0",
"@types/ws": "^8.18.1",
- "esbuild": "^0.24.0",
+ "esbuild": "^0.25.0",
"eslint": "^9.0.0",
- "tsx": "^4.0.0",
+ "tsx": "^4.23.1",
"typescript": "^5.8.0",
"typescript-eslint": "^8.0.0"
}
diff --git a/skill/SKILL.md b/skill/SKILL.md
index d23f33e..7f8fd8d 100644
--- a/skill/SKILL.md
+++ b/skill/SKILL.md
@@ -1,6 +1,6 @@
---
name: polylane-cli
-description: Use `polylane` to investigate incidents, explore cloud infrastructure (logs / metrics / dependency graphs), search code, save memories, run automations from a catalog, connect observability tools and cloud accounts, and drive threads with the Polylane agent. Use when the user wants to debug a production issue, look up a service, search their codebase, manage integrations, connect a cloud provider, or talk to the Polylane agent from the terminal.
+description: Use `polylane` to investigate production issues, explore cloud infrastructure (logs / metrics / dependency graphs), search code, save memories, run automations from a catalog, connect observability tools and cloud accounts, and drive threads with the Polylane agent. Use when the user wants to debug a production issue, look up a service, search their codebase, manage integrations, connect a cloud provider, or talk to the Polylane agent from the terminal.
---
# Polylane CLI — Agent Skill Guide
@@ -19,12 +19,12 @@ description: Use `polylane` to investigate incidents, explore cloud infrastructu
# Install (pick one — see README for the full list)
npm install -g @coreplane/polylane
# curl -fsSL https://polylane.com/install.sh | bash
-# brew install coreplanelabs/polylane
+# brew install coreplanelabs/polylane/polylane
-# Pick ONE auth path:
-polylane auth login --api-key sk_xxxxx # API key — scripts / CI
-polylane auth login # OAuth browser (PKCE)
+# Pick ONE auth path (OAuth is the default; use an API key only where a browser sign-in is impossible):
+polylane auth login # OAuth browser (PKCE) — the default
polylane auth login --no-browser # OAuth device code (SSH / headless)
+polylane auth login --api-key sk_xxxxx # API key — scripts / CI without OAuth
polylane auth signup --email --password # bootstrap an account from an agent
# Verify
@@ -149,16 +149,16 @@ polylane automation list
`integration connect` and `cloud connect` dispatch on `--type` / `--provider`. Some options open a browser for an install URL; others take API credentials directly. Use `--help` on each to see the required flags and optional `--no-browser`.
-### Investigating an incident
+### Investigating an issue
```bash
polylane issue list --active # what's currently flagged
-polylane issue show # full body + linked incident
-polylane thread list --type incident # active incident threads
-polylane thread show # the incident thread with Console / Next footer
-polylane incident timeline # who did what, when
-polylane incident note "rolled back deploy ABC"
-polylane incident milestone "Mitigated"
+polylane issue show # full body + linked investigation
+polylane thread list --type investigation # active investigation threads
+polylane thread show # the investigation thread with Console / Next footer
+polylane issue timeline # who did what, when
+polylane issue note "rolled back deploy ABC"
+polylane issue milestone "Mitigated"
# Drill into services
polylane service find ""
@@ -216,7 +216,7 @@ Attach resources as context by passing their IDs — the CLI infers the resource
An automation is **trigger → instructions → tools → actions**: a typed event fires, an agent runs
with your instructions and a set of skills (tools), and optional actions apply side-effects (open an
-incident, roll back a deploy, open a PR) — each gated by a `mode` (`smart` = act only when warranted,
+issue, roll back a deploy, open a PR) — each gated by a `mode` (`smart` = act only when warranted,
`always`). Full schema and every trigger/action type: .
```bash
@@ -242,9 +242,9 @@ template covers. `automation create` is a first-class command; you do **not** ne
polylane automation create \
--name "Triage Datadog alerts" \
--trigger '{"type":"alert","filters":{"sources":["datadog"]}}' \
- --instructions "Correlate the alert with recent deploys and open an incident with the findings." \
+ --instructions "Correlate the alert with recent deploys and open an issue with the findings." \
--tool investigate-errors --tool investigate-latency \
- --action '{"type":"openIncident","mode":"smart","defaultSeverity":"high"}' \
+ --action '{"type":"openIssue","mode":"smart","defaultSeverity":"high"}' \
--delay 600000 # wait 10m (e.g. let a deploy settle) before the run
# Or pass a full JSON body (--body-file '-' reads stdin); flags layer on top.
@@ -258,9 +258,10 @@ polylane automation create --body-file template.json \
Run `polylane automation create --help` for every flag. Common trigger types: `alert`, `cron`
(`{"type":"cron","expression":"0 9 * * *"}`), `webhook`, `github.*` (push/pull_request/deployment/…),
-`{cloudflare,vercel,render,fly}.deployment`, `slack.message`, `polylane.*` (cloud_account.synced,
-codebase.synced, …). Actions include `openIncident`, `rollback{Cloudflare,Vercel,Render,Fly}Deployment`,
-`submitPr`, `commentPr`, `mergePr`, `createIssue`, `autofix`, `handoffTo{Devin,Cursor}`. The
+`{cloudflare,vercel,render,fly}.deployment`, `slack.message`, `polylane.*` (issue.triaged,
+cloud_account.synced, codebase.synced, …). Actions include `openIssue`,
+`rollback{Cloudflare,Vercel,Render,Fly}Deployment`, `submitPr`, `commentPr`, `mergePr`,
+`commentGithubIssue`, `createGithubIssue`, `autofix`, `handoffTo{Devin,Cursor,Factory}`. The
authoritative, always-current list of types and filters is in the docs and in
`polylane api describe automations.post`.
diff --git a/src/commands/autofix/list.ts b/src/commands/autofix/list.ts
index ae29fcf..79919c0 100644
--- a/src/commands/autofix/list.ts
+++ b/src/commands/autofix/list.ts
@@ -13,7 +13,7 @@ export const autofixListCommand: Command = {
operationId: 'autofixes.list',
options: [
{ flag: '--status ', description: 'Filter by status (started, branch_pushed, pr_opened, merged, failed, no_fix_needed)', type: 'string' },
- { flag: '--origin ', description: 'Filter by origin (automation, chat, incident)', type: 'string' },
+ { flag: '--origin ', description: 'Filter by origin (automation, chat, investigation, system)', type: 'string' },
{ flag: '--repo ', description: 'Filter by repo name', type: 'string' },
{ flag: '--limit ', description: 'Max items (default 20)', type: 'number' },
{ flag: '--full', description: 'Return full objects', type: 'boolean' },
@@ -21,7 +21,7 @@ export const autofixListCommand: Command = {
examples: [
'polylane autofix list',
'polylane autofix list --status pr_opened',
- 'polylane autofix list --origin incident --repo my-service',
+ 'polylane autofix list --origin investigation --repo my-service',
],
async execute(config: Config, _flags, args: Record): Promise {
const workspaceId = await requireWorkspace(config);
diff --git a/src/commands/automation/create.ts b/src/commands/automation/create.ts
index 8fbb9c0..4fda052 100644
--- a/src/commands/automation/create.ts
+++ b/src/commands/automation/create.ts
@@ -74,7 +74,7 @@ export const automationCreateCommand: Command = {
{ flag: '--name ', description: 'Automation name', type: 'string' },
{ flag: '--instructions ', description: 'Agent instructions (the system prompt for the run)', type: 'string' },
{ flag: '--trigger ', description: 'Trigger as JSON, or a bare type for filterless triggers (repeatable). e.g. \'{"type":"alert","filters":{"sources":["datadog"]}}\' or webhook', type: 'array' },
- { flag: '--action ', description: 'Action as JSON, or a bare type (repeatable). e.g. \'{"type":"openIncident","mode":"smart"}\'', type: 'array' },
+ { flag: '--action ', description: 'Action as JSON, or a bare type (repeatable). e.g. \'{"type":"openIssue","mode":"smart"}\'', type: 'array' },
{ flag: '--destination ', description: 'Notification destination as JSON (repeatable). e.g. \'{"type":"slack","name":"ops","channelId":"C123"}\'', type: 'array' },
{ flag: '--tool ', description: 'Skill slug to attach as a tool (repeatable). Alias: --skill', type: 'array' },
{ flag: '--skill ', description: 'Alias for --tool', type: 'array' },
@@ -85,7 +85,7 @@ export const automationCreateCommand: Command = {
{ flag: '--body-file ', description: 'Full automation body from a file ("-" for stdin); flags layer on top', type: 'string' },
],
examples: [
- 'polylane automation create --name "Triage Datadog alerts" --trigger \'{"type":"alert","filters":{"sources":["datadog"]}}\' --instructions "Correlate the alert with recent deploys and open an incident with findings." --action \'{"type":"openIncident","mode":"smart"}\' --tool investigate-errors',
+ 'polylane automation create --name "Triage Datadog alerts" --trigger \'{"type":"alert","filters":{"sources":["datadog"]}}\' --instructions "Correlate the alert with recent deploys and open an issue with findings." --action \'{"type":"openIssue","mode":"smart"}\' --tool investigate-errors',
'polylane automation catalog --output json | jq \'...\' # crib a template body, then:',
'polylane automation create --body-file my-automation.json',
'polylane automation create --body-file template.json --trigger \'{"type":"cloudflare.deployment","filters":{"environments":["production"]}}\' # take a template body, narrow the trigger',
diff --git a/src/commands/feed/list.ts b/src/commands/feed/list.ts
index 8f2e684..c46dcff 100644
--- a/src/commands/feed/list.ts
+++ b/src/commands/feed/list.ts
@@ -19,13 +19,13 @@ const VALID_CATEGORIES = [
'autofix',
'automation',
'anomaly',
- 'incident',
'deploy',
'change',
'release',
'alert',
'issue',
'digest',
+ 'tier',
] as const;
type Category = (typeof VALID_CATEGORIES)[number];
@@ -45,7 +45,7 @@ const FIELDS = [
export const feedListCommand: Command = {
name: 'feed list',
- description: 'Workspace agent activity feed (chat, investigations, autofixes, incidents, deploys…)',
+ description: 'Workspace agent activity feed (chat, investigations, autofixes, issues, deploys…)',
operationId: 'feed.list',
options: [
{ flag: '--category ', description: VALID_CATEGORIES.join(' | '), type: 'string' },
@@ -59,7 +59,7 @@ export const feedListCommand: Command = {
examples: [
'polylane feed list',
'polylane feed list --since 24h',
- 'polylane feed list --category incident --limit 50',
+ 'polylane feed list --category issue --limit 50',
'polylane feed list --cursor ',
],
async execute(config: Config, _flags, args: Record): Promise {
diff --git a/src/commands/incident/index.ts b/src/commands/incident/index.ts
deleted file mode 100644
index acf0b90..0000000
--- a/src/commands/incident/index.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { incidentTimelineCommand } from './timeline';
-import { incidentNoteCommand } from './note';
-import { incidentMilestoneCommand } from './milestone';
-
-export const incidentCommands = [
- incidentTimelineCommand,
- incidentNoteCommand,
- incidentMilestoneCommand,
-];
diff --git a/src/commands/index.ts b/src/commands/index.ts
index db3cecc..2ba80dc 100644
--- a/src/commands/index.ts
+++ b/src/commands/index.ts
@@ -5,7 +5,6 @@ import { helpCommand } from './help';
import { updateCommand } from './update';
import { feedCommands } from './feed';
import { issueCommands } from './issue';
-import { incidentCommands } from './incident';
import { serviceCommands } from './service';
import { repoCommands } from './repo';
import { memoryCommands } from './memory';
@@ -31,7 +30,6 @@ export function registerAllCommands(): void {
const all = [
...feedCommands,
...issueCommands,
- ...incidentCommands,
...serviceCommands,
...repoCommands,
...memoryCommands,
diff --git a/src/commands/issue/index.ts b/src/commands/issue/index.ts
index 9880ae4..d089452 100644
--- a/src/commands/issue/index.ts
+++ b/src/commands/issue/index.ts
@@ -1,4 +1,13 @@
import { issueListCommand } from './list';
import { issueShowCommand } from './show';
+import { issueTimelineCommand } from './timeline';
+import { issueNoteCommand } from './note';
+import { issueMilestoneCommand } from './milestone';
-export const issueCommands = [issueListCommand, issueShowCommand];
+export const issueCommands = [
+ issueListCommand,
+ issueShowCommand,
+ issueTimelineCommand,
+ issueNoteCommand,
+ issueMilestoneCommand,
+];
diff --git a/src/commands/issue/list.ts b/src/commands/issue/list.ts
index 607568b..e03db20 100644
--- a/src/commands/issue/list.ts
+++ b/src/commands/issue/list.ts
@@ -7,10 +7,10 @@ import { requireWorkspace, getArgString, getArgNumber, getArgBoolean } from '../
import { CLIError } from '../../errors/base';
import { ExitCode } from '../../errors/codes';
-const FIELDS = ['id', 'severity', 'status', 'title', 'resourceKind', 'resourceId', 'detectedAt', 'incidentThreadId'];
+const FIELDS = ['id', 'severity', 'status', 'title', 'resourceKind', 'resourceId', 'detectedAt', 'investigationThreadId'];
const VALID_SEVERITIES = ['critical', 'high', 'medium', 'low', 'info'] as const;
type Severity = (typeof VALID_SEVERITIES)[number];
-const VALID_STATUSES = ['new', 'triaging', 'incident', 'no_incident', 'failed', 'triage_skipped'] as const;
+const VALID_STATUSES = ['new', 'triaging', 'confirmed', 'dismissed', 'failed', 'skipped'] as const;
type Status = (typeof VALID_STATUSES)[number];
export const issueListCommand: Command = {
@@ -33,7 +33,7 @@ export const issueListCommand: Command = {
examples: [
'polylane issue list',
'polylane issue list --active --severity critical',
- 'polylane issue list --status incident',
+ 'polylane issue list --status confirmed',
'polylane issue list --provider aws --account 123456789012',
],
async execute(config: Config, _flags, args: Record): Promise {
@@ -84,7 +84,7 @@ export const issueListCommand: Command = {
count: result.count,
},
{
- headers: ['ID', 'Severity', 'Status', 'Title', 'Kind', 'Resource', 'Detected', 'Incident'],
+ headers: ['ID', 'Severity', 'Status', 'Title', 'Kind', 'Resource', 'Detected', 'Investigation'],
rows: (item) => [
String(item.id ?? ''),
String(item.severity ?? ''),
@@ -93,7 +93,7 @@ export const issueListCommand: Command = {
String(item.resourceKind ?? ''),
truncate(String(item.resourceId ?? ''), 40),
String(item.detectedAt ?? ''),
- String(item.incidentThreadId ?? ''),
+ String(item.investigationThreadId ?? ''),
],
}
);
diff --git a/src/commands/incident/milestone.ts b/src/commands/issue/milestone.ts
similarity index 66%
rename from src/commands/incident/milestone.ts
rename to src/commands/issue/milestone.ts
index d9e2320..de91ee6 100644
--- a/src/commands/incident/milestone.ts
+++ b/src/commands/issue/milestone.ts
@@ -6,39 +6,39 @@ import { requireWorkspace, requirePositional, getAllPositional, getArgString } f
import { CLIError } from '../../errors/base';
import { ExitCode } from '../../errors/codes';
-export const incidentMilestoneCommand: Command = {
- name: 'incident milestone',
- description: 'Append a milestone event to an incident timeline',
- operationId: 'incidents.timeline.create',
+export const issueMilestoneCommand: Command = {
+ name: 'issue milestone',
+ description: 'Append a milestone event to an issue timeline',
+ operationId: 'issues.timeline.create',
positional: [
- { name: 'thread-id', description: 'Incident thread ID (thrd_…)' },
+ { name: 'issue-id', description: 'Issue ID (iss_…)' },
{ name: 'title', description: 'Short milestone title (e.g. "Mitigated")', variadic: true },
],
options: [
{ flag: '--body ', description: 'Optional markdown body', type: 'string' },
],
examples: [
- 'polylane incident milestone thrd_xxx "Mitigated"',
- 'polylane incident milestone thrd_xxx "Resolved" --body "Root cause fixed in PR #123"',
+ 'polylane issue milestone iss_xxx "Mitigated"',
+ 'polylane issue milestone iss_xxx "Resolved" --body "Root cause fixed in PR #123"',
],
async execute(config: Config, _flags, args: Record): Promise {
const workspaceId = await requireWorkspace(config);
- const threadId = requirePositional(args, 0, 'thread-id');
+ const issueId = requirePositional(args, 0, 'issue-id');
const titleParts = getAllPositional(args).slice(1);
if (titleParts.length === 0) {
throw new CLIError(
'Missing ',
ExitCode.USAGE,
- 'polylane incident milestone ""'
+ 'polylane issue milestone ""'
);
}
const title = titleParts.join(' ');
const body = getArgString(args, 'body');
const api = new PolylaneAPI(config);
- const result = await api.incidentsTimelineCreate({
+ const result = await api.issuesTimelineCreate({
workspaceId,
- incidentThreadId: threadId,
+ issueId,
type: 'milestone',
title,
...(body ? { body } : {}),
diff --git a/src/commands/incident/note.ts b/src/commands/issue/note.ts
similarity index 65%
rename from src/commands/incident/note.ts
rename to src/commands/issue/note.ts
index 73d8307..13aaf2b 100644
--- a/src/commands/incident/note.ts
+++ b/src/commands/issue/note.ts
@@ -6,39 +6,39 @@ import { requireWorkspace, requirePositional, getAllPositional, getArgString } f
import { CLIError } from '../../errors/base';
import { ExitCode } from '../../errors/codes';
-export const incidentNoteCommand: Command = {
- name: 'incident note',
- description: 'Append a note to an incident timeline',
- operationId: 'incidents.timeline.create',
+export const issueNoteCommand: Command = {
+ name: 'issue note',
+ description: 'Append a note to an issue timeline',
+ operationId: 'issues.timeline.create',
positional: [
- { name: 'thread-id', description: 'Incident thread ID (thrd_…)' },
+ { name: 'issue-id', description: 'Issue ID (iss_…)' },
{ name: 'body', description: 'Markdown body of the note', variadic: true },
],
options: [
{ flag: '--title ', description: 'Optional short title', type: 'string' },
],
examples: [
- 'polylane incident note thrd_xxx "rolled back deploy abc123"',
- 'polylane incident note thrd_xxx --title "Workaround" "increased lambda concurrency to 200"',
+ 'polylane issue note iss_xxx "rolled back deploy abc123"',
+ 'polylane issue note iss_xxx --title "Workaround" "increased lambda concurrency to 200"',
],
async execute(config: Config, _flags, args: Record): Promise {
const workspaceId = await requireWorkspace(config);
- const threadId = requirePositional(args, 0, 'thread-id');
+ const issueId = requirePositional(args, 0, 'issue-id');
const bodyParts = getAllPositional(args).slice(1);
if (bodyParts.length === 0) {
throw new CLIError(
'Missing ',
ExitCode.USAGE,
- 'polylane incident note ""'
+ 'polylane issue note ""'
);
}
const body = bodyParts.join(' ');
const title = getArgString(args, 'title');
const api = new PolylaneAPI(config);
- const result = await api.incidentsTimelineCreate({
+ const result = await api.issuesTimelineCreate({
workspaceId,
- incidentThreadId: threadId,
+ issueId,
type: 'note',
body,
...(title ? { title } : {}),
diff --git a/src/commands/issue/show.ts b/src/commands/issue/show.ts
index 521a0ce..d824447 100644
--- a/src/commands/issue/show.ts
+++ b/src/commands/issue/show.ts
@@ -9,7 +9,7 @@ export const issueShowCommand: Command = {
description: 'Show an issue with reasoning, metrics, and logs',
operationId: 'issues.get',
positional: [{ name: 'issue-id', description: 'The issue ID' }],
- examples: ['polylane issue show issue_xxx'],
+ examples: ['polylane issue show iss_xxx'],
async execute(config: Config, _flags, args: Record): Promise {
const workspaceId = await requireWorkspace(config);
const id = requirePositional(args, 0, 'issue-id');
diff --git a/src/commands/incident/timeline.ts b/src/commands/issue/timeline.ts
similarity index 80%
rename from src/commands/incident/timeline.ts
rename to src/commands/issue/timeline.ts
index bdaf229..5e5e800 100644
--- a/src/commands/incident/timeline.ts
+++ b/src/commands/issue/timeline.ts
@@ -7,11 +7,11 @@ import { requireWorkspace, requirePositional, getArgString, getArgNumber, getArg
const FIELDS = ['id', 'at', 'type', 'title', 'createdBy'];
-export const incidentTimelineCommand: Command = {
- name: 'incident timeline',
- description: 'Show the timeline of events for an incident thread',
- operationId: 'incidents.timeline.list',
- positional: [{ name: 'thread-id', description: 'Incident thread ID (thrd_…)' }],
+export const issueTimelineCommand: Command = {
+ name: 'issue timeline',
+ description: 'Show the timeline of events for an issue',
+ operationId: 'issues.timeline.list',
+ positional: [{ name: 'issue-id', description: 'Issue ID (iss_…)' }],
options: [
{ flag: '--types ', description: 'Filter by event types (comma-separated)', type: 'string' },
{ flag: '--from ', description: 'Lower bound (unix ms)', type: 'number' },
@@ -20,12 +20,12 @@ export const incidentTimelineCommand: Command = {
{ flag: '--full', description: 'Return full objects', type: 'boolean' },
],
examples: [
- 'polylane incident timeline thrd_xxx',
- 'polylane incident timeline thrd_xxx --types note,milestone',
+ 'polylane issue timeline iss_xxx',
+ 'polylane issue timeline iss_xxx --types note,milestone',
],
async execute(config: Config, _flags, args: Record): Promise {
const workspaceId = await requireWorkspace(config);
- const threadId = requirePositional(args, 0, 'thread-id');
+ const issueId = requirePositional(args, 0, 'issue-id');
const limit = getArgNumber(args, 'limit') ?? 100;
const full = getArgBoolean(args, 'full') === true;
const types = getArgString(args, 'types');
@@ -33,9 +33,9 @@ export const incidentTimelineCommand: Command = {
const to = getArgNumber(args, 'to');
const api = new PolylaneAPI(config);
- const result = await api.incidentsTimelineList({
+ const result = await api.issuesTimelineList({
workspaceId,
- incidentThreadId: threadId,
+ issueId,
perPage: limit,
...(types ? { types } : {}),
...(from !== undefined ? { from } : {}),
diff --git a/src/commands/service/list.ts b/src/commands/service/list.ts
index 437a209..d6c4b07 100644
--- a/src/commands/service/list.ts
+++ b/src/commands/service/list.ts
@@ -24,6 +24,7 @@ const CATEGORIES: NodeCategory[] = [
'security',
'observability',
'code',
+ 'identity',
'other',
];
@@ -36,7 +37,7 @@ export const serviceListCommand: Command = {
{ flag: '--account ', description: 'Cloud account ID/slug', type: 'string' },
{ flag: '--region ', description: 'Cloud region', type: 'string' },
{ flag: '--type ', description: 'Resource type (e.g. aws.lambda.function)', type: 'string' },
- { flag: '--category ', description: 'compute|storage|database|networking|messaging|security|observability|code|other', type: 'string' },
+ { flag: '--category ', description: 'compute|storage|database|networking|messaging|security|observability|code|identity|other', type: 'string' },
{ flag: '--limit ', description: 'Max items (default 20)', type: 'number' },
{ flag: '--full', description: 'Return full objects', type: 'boolean' },
],
diff --git a/src/commands/thread/ask.ts b/src/commands/thread/ask.ts
index 2476bd3..5fa882f 100644
--- a/src/commands/thread/ask.ts
+++ b/src/commands/thread/ask.ts
@@ -29,7 +29,7 @@ export const threadAskCommand: Command = {
options: [
{ flag: '--context ', description: 'Comma-separated resource IDs to attach as context', type: 'string' },
{ flag: '--name ', description: 'Name for the thread (default: auto-derived)', type: 'string' },
- { flag: '--visibility ', description: 'workspace | private | team | unlisted | public (default: workspace)', type: 'string' },
+ { flag: '--visibility ', description: 'workspace | private | workspace_and_github_org | public (default: workspace)', type: 'string' },
{ flag: '--stream', description: 'Stream assistant tokens as they arrive (requires OAuth)', type: 'boolean' },
{ flag: '--no-wait', description: 'Return immediately after sending', type: 'boolean' },
],
diff --git a/src/commands/thread/list.ts b/src/commands/thread/list.ts
index bb73dee..442f1dc 100644
--- a/src/commands/thread/list.ts
+++ b/src/commands/thread/list.ts
@@ -8,7 +8,7 @@ import { CLIError } from '../../errors/base';
import { ExitCode } from '../../errors/codes';
const FIELDS = ['id', 'name', 'type', 'created'];
-const VALID_TYPES = ['chat', 'investigation', 'automation', 'autofix', 'incident'] as const;
+const VALID_TYPES = ['chat', 'hypothesis', 'automation', 'autofix', 'investigation', 'pr_review'] as const;
type ThreadType = (typeof VALID_TYPES)[number];
export const threadListCommand: Command = {
@@ -16,14 +16,14 @@ export const threadListCommand: Command = {
description: 'List conversation threads',
operationId: 'threads.list',
options: [
- { flag: '--type ', description: 'Filter by thread type (chat | investigation | automation | autofix | incident; comma-separated)', type: 'string' },
+ { flag: '--type ', description: 'Filter by thread type (chat | hypothesis | automation | autofix | investigation | pr_review; comma-separated)', type: 'string' },
{ flag: '--labels ', description: 'Filter by labels (comma-separated)', type: 'string' },
{ flag: '--limit ', description: 'Max items (default 20)', type: 'number' },
{ flag: '--full', description: 'Return full objects', type: 'boolean' },
],
examples: [
'polylane thread list',
- 'polylane thread list --type incident',
+ 'polylane thread list --type investigation',
'polylane thread list --type chat,investigation --limit 50',
],
async execute(config: Config, _flags, args: Record): Promise {
diff --git a/src/registry.ts b/src/registry.ts
index 36fa267..1759833 100644
--- a/src/registry.ts
+++ b/src/registry.ts
@@ -17,8 +17,7 @@ export interface ResourceGroup {
const RESOURCE_ORDER: Record = {
feed: { name: 'feed', description: 'Workspace activity feed (what just happened)', order: 6 },
- issue: { name: 'issue', description: 'Detected issues (anomalies + alerts)', order: 8 },
- incident: { name: 'incident', description: 'Incident timeline (notes, milestones)', order: 10 },
+ issue: { name: 'issue', description: 'Detected issues (anomalies + alerts) and their timelines', order: 8 },
service: { name: 'service', description: 'Cloud infrastructure (nodes, logs, metrics, graph)', order: 20 },
repo: { name: 'repo', description: 'Repositories and code search', order: 30 },
tools: { name: 'tools', description: 'Run Polylane agent tools (observability, infra graph, code search)', order: 40 },
diff --git a/test/resolve.test.ts b/test/resolve.test.ts
index d1a4abc..cd29091 100644
--- a/test/resolve.test.ts
+++ b/test/resolve.test.ts
@@ -12,10 +12,10 @@ describe('command resolution', () => {
assert.equal(r.command.name, 'issue list');
});
- it('resolves incident note', () => {
- const r = registry.resolve(['incident', 'note']);
+ it('resolves issue note', () => {
+ const r = registry.resolve(['issue', 'note']);
assert.ok(r);
- assert.equal(r.command.name, 'incident note');
+ assert.equal(r.command.name, 'issue note');
});
it('resolves service logs', () => {
@@ -48,7 +48,6 @@ describe('command resolution', () => {
'config',
'feed',
'help',
- 'incident',
'integration',
'issue',
'memory',
@@ -64,10 +63,10 @@ describe('command resolution', () => {
]);
});
- it('issue group has 2 commands', () => {
+ it('issue group has 5 commands', () => {
const node = registry.resolveNode(['issue']);
assert.ok(node);
const subs = registry.getSubcommands(node);
- assert.equal(subs.length, 2);
+ assert.equal(subs.length, 5);
});
});